sentry-ios-swift-setup
Sentry iOS Swift Setup
Install and configure Sentry in iOS projects using Swift and SwiftUI.
Invoke This Skill When
- User asks to "add Sentry to iOS" or "install Sentry" in a Swift app
- User wants error monitoring, tracing, or session replay in iOS
- User mentions "sentry-cocoa" or iOS crash reporting
Important: The configuration options and code samples below are examples. Always verify against docs.sentry.io before implementing, as APIs and defaults may have changed.
Requirements
- iOS 15.0+, macOS 12.0+, tvOS 15.0+, watchOS 8.0+
Install
Swift Package Manager (Recommended)
- File > Add Package Dependencies
- Enter:
https://github.com/getsentry/sentry-cocoa.git - Select version rule: "Up to Next Major" from
9.5.0
SPM Products: Choose based on your needs:
| Product | Use Case |
|---|---|
Sentry |
Default (static linking) |
Sentry-Dynamic |
Dynamic framework |
SentrySwiftUI |
SwiftUI view performance tracking |
Sentry-WithoutUIKitOrAppKit |
App extensions or CLI tools |
CocoaPods
# Podfile
pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '9.5.0'
Then run pod install.
Configure
SwiftUI App
import SwiftUI
import Sentry
@main
struct YourApp: App {
init() {
SentrySDK.start { options in
options.dsn = "YOUR_SENTRY_DSN"
options.debug = true
// Tracing
options.tracesSampleRate = 1.0
// Profiling
options.configureProfiling = {
$0.sessionSampleRate = 1.0
$0.lifecycle = .trace
}
// Session Replay
options.sessionReplay.sessionSampleRate = 1.0
options.sessionReplay.onErrorSampleRate = 1.0
// Logs (SDK 9.0.0+; for 8.55.0-8.x use options.experimental.enableLogs)
options.enableLogs = true
// Error context
options.attachScreenshot = true
options.attachViewHierarchy = true
}
}
var body: some Scene {
WindowGroup { ContentView() }
}
}
UIKit App
import UIKit
import Sentry
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
SentrySDK.start { options in
options.dsn = "YOUR_SENTRY_DSN"
options.debug = true
options.tracesSampleRate = 1.0
options.enableLogs = true
}
return true
}
}
Configuration Options
| Option | Description | Default |
|---|---|---|
dsn |
Sentry DSN | Required |
tracesSampleRate |
% of transactions traced | 0 |
sessionReplay.sessionSampleRate |
% of sessions replayed | 0 |
sessionReplay.onErrorSampleRate |
% of error sessions replayed | 0 |
enableLogs |
Send logs to Sentry | false |
attachScreenshot |
Attach screenshot on error | false |
attachViewHierarchy |
Attach view hierarchy on error | false |
Auto-Instrumented Features
| Feature | What's Captured |
|---|---|
| App Launches | Cold/warm start times |
| Network | URLSession requests |
| UI | UIViewController loads, user interactions |
| File I/O | Read/write operations |
| Core Data | Fetch/save operations |
| Frames | Slow and frozen frame detection |
Logging
let logger = SentrySDK.logger
logger.info("User action", attributes: [
"userId": "123",
"action": "checkout"
])
// Log levels: trace, debug, info, warn, error, fatal
Session Replay
iOS 26+ / Xcode 26+ caveat: SDK 8.57.0+ automatically disables Session Replay on iOS 26.0+ when built with Xcode 26.0+ due to Apple's Liquid Glass rendering breaking masking reliability. Replay still works on iOS < 26 or Xcode < 26. To force-enable (use with caution): options.experimental.enableSessionReplayInUnreliableEnvironment = true.
Masking
// SwiftUI modifiers
Text("Safe content").sentryReplayUnmask()
Text(user.email).sentryReplayMask()
User Context
let user = User()
user.userId = "user_123"
user.email = "user@example.com"
SentrySDK.setUser(user)
// Clear on logout
SentrySDK.setUser(nil)
Verification
// Test error capture
SentrySDK.capture(message: "Test from iOS")
// Or trigger a test error
do {
try someFailingFunction()
} catch {
SentrySDK.capture(error: error)
}
Production Settings
SentrySDK.start { options in
options.dsn = "YOUR_SENTRY_DSN"
options.debug = false
options.tracesSampleRate = 0.2 // 20%
options.sessionReplay.sessionSampleRate = 0.1 // 10%
options.sessionReplay.onErrorSampleRate = 1.0 // 100% on error
options.enableLogs = true
}
Size Analysis (Fastlane)
Track app bundle size with Sentry using the Fastlane plugin.
Install Plugin
bundle exec fastlane add_plugin fastlane-plugin-sentry
Configure Authentication
# Environment variable (recommended for CI)
export SENTRY_AUTH_TOKEN=your_token_here
Or create .sentryclirc (add to .gitignore):
[auth]
token=YOUR_SENTRY_AUTH_TOKEN
Fastfile Lane
lane :sentry_size do
build_app(
scheme: "YourApp",
configuration: "Release",
export_method: "app-store"
)
sentry_upload_build(
org_slug: "your-org",
project_slug: "your-project",
build_configuration: "Release"
)
end
Run Size Analysis
bundle exec fastlane sentry_size
View results in the Sentry UI after the upload completes.
Troubleshooting
| Issue | Solution |
|---|---|
| Events not appearing | Check DSN, enable debug = true |
| No traces | Set tracesSampleRate > 0 |
| No replays | Set sessionSampleRate > 0, check SDK 8.31.1+. On iOS 26+/Xcode 26+ see Liquid Glass caveat above |
| No logs | Set enableLogs = true (SDK 9.0.0+) or experimental.enableLogs = true (SDK 8.55.0-8.x) |
| CocoaPods fails | Run pod repo update, check iOS 15+ target |
| Size upload fails | Check SENTRY_AUTH_TOKEN, verify org/project slugs |
More from jaffrepaul/agent-skills
sentry-react-setup
Setup Sentry in React apps. Use when asked to add Sentry to React, install @sentry/react, or configure error monitoring, error boundaries, session replay, or browser tracing for React applications.
3sentry-pr-code-review
Review a project's PRs to check for issues detected in code review by Seer Bug Prediction. Use when asked to review or fix issues identified by Sentry in PR comments, or to find recent PRs with Sentry feedback.
3sentry-setup-logging
Setup Sentry Logging in any project. Use when asked to add Sentry logs, enable structured logging, capture console logs, or integrate logging libraries (Consola, Loguru) with Sentry. Supports JavaScript, Python, and Ruby.
3sentry-ruby-setup
Setup Sentry in Ruby apps. Use when asked to add Sentry to Ruby, install sentry-ruby gem, or configure error monitoring for Ruby applications, Rails, or Sidekiq.
3sentry-fix-issues
Find and fix issues from Sentry using MCP. Use when asked to fix Sentry errors, debug production issues, investigate exceptions, or resolve bugs reported in Sentry. Methodically analyzes stack traces, breadcrumbs, traces, and context to identify root causes.
3sentry-setup-tracing
Setup Sentry Tracing (Performance Monitoring) in any project. Use when asked to enable tracing, track transactions/spans, measure latency, or add performance monitoring. Supports JavaScript, Python, and Ruby.
3