Agent skills for iOS, iPadOS, Swift, SwiftUI, and modern Apple framework development.
71
89%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
WebView(url:)WebPage loadingWebView(url:)Use WebView(url:) when the app only needs to display a URL and does not need explicit page control.
import SwiftUI
import WebKit
struct MarketingPageView: View {
let url: URL
var body: some View {
WebView(url: url)
.webViewBackForwardNavigationGestures(.enabled)
}
}This is the lowest-friction path for embedded content.
WebPage loadingCreate a WebPage when the app needs to drive loading itself.
@Observable
@MainActor
final class ArticleModel {
let page = WebPage()
var lastError: String?
func load(_ url: URL) async {
do {
for try await _ in page.load(URLRequest(url: url)) {
}
} catch {
lastError = error.localizedDescription
}
}
}struct ArticleDetailView: View {
@State private var model = ArticleModel()
let url: URL
var body: some View {
WebView(model.page)
.task {
await model.load(url)
}
}
}You can also load:
for try await _ in page.load(url) { }for try await _ in page.load(html: htmlString, baseURL: baseURL) { }for try await _ in page.load(data, mimeType: "text/html", characterEncoding: "utf-8", baseURL: baseURL) { }WebPage is observable, so SwiftUI can bind directly to its state.
struct ReaderView: View {
@State private var page = WebPage()
var body: some View {
WebView(page)
.navigationTitle(page.title ?? "Loading")
.overlay(alignment: .top) {
if page.isLoading {
ProgressView(value: page.estimatedProgress)
.padding()
}
}
.task {
do {
for try await _ in page.load(URLRequest(url: URL(string: "https://example.com/docs")!)) {
}
} catch {
// Handle load failure.
}
}
}
}Useful properties:
titleurlisLoadingestimatedProgressthemeColorhasOnlySecureContentbackForwardListUse currentNavigationEvent for a lightweight current-state view. Use navigations to observe the full sequence of navigation events.
@MainActor
func observeNavigations(for page: WebPage) {
Task {
for await event in page.navigations {
switch event {
case .finished:
print("Navigation finished")
case .failed(let error), .failedProvisionalNavigation(let error):
print("Navigation failed: \(error)")
default:
break
}
}
}
}This is the right place to trigger follow-up work like parsing headings after a finished navigation.
Use WebPage.Configuration when you need a nonpersistent page, custom user agent, or tighter loading rules.
@MainActor
func makeMetadataPage() -> WebPage {
var configuration = WebPage.Configuration()
configuration.loadsSubresources = false
configuration.defaultNavigationPreferences.allowsContentJavaScript = false
configuration.websiteDataStore = .nonPersistent()
let page = WebPage(configuration: configuration)
page.customUserAgent = "MetadataBot/1.0"
return page
}Use nonpersistent pages when you want an isolated web session or metadata fetch path without shared cookies or long-lived website data.
skills
accessorysetupkit
references
activitykit
references
adattributionkit
references
alarmkit
references
app-clips
app-intents
references
app-store-optimization
app-store-review
apple-on-device-ai
appmigrationkit
references
audioaccessorykit
references
authentication
references
avkit
references
background-processing
references
browserenginekit
references
callkit
references
carplay
references
cloudkit
references
contacts-framework
references
core-bluetooth
references
core-data
core-motion
references
core-nfc
references
coreml
references
cryptokit
references
cryptotokenkit
references
debugging-instruments
device-integrity
references
dockkit
references
energykit
references
eventkit
references
financekit
references
focus-engine
gamekit
references
healthkit
references
homekit
references
ios-accessibility
ios-localization
ios-networking
ios-simulator
references
mapkit
metrickit
references
musickit
references
natural-language
references
paperkit
references
passkit
references
pdfkit
references
pencilkit
references
permissionkit
references
photokit
push-notifications
realitykit
references
relevancekit
references
scenekit
references
sensorkit
references
speech-recognition
spritekit
references
storekit
swift-api-design-guidelines
swift-architecture
swift-charts
references
swift-codable
swift-concurrency
swift-formatstyle
swift-language
swift-security
references
swift-testing
swiftdata
swiftlint
swiftui-animation
swiftui-gestures
references
swiftui-layout-components
swiftui-liquid-glass
references
swiftui-patterns
swiftui-performance
swiftui-uikit-interop
swiftui-webkit
tabletopkit
references
tipkit
references
vision-framework
weatherkit
references
widgetkit
references