{"id":51094811,"url":"https://github.com/tracewayapp/traceway-ios","last_synced_at":"2026-06-24T05:30:54.261Z","repository":{"id":365339252,"uuid":"1267982095","full_name":"tracewayapp/traceway-ios","owner":"tracewayapp","description":"Traceway SDK for iOS.","archived":false,"fork":false,"pushed_at":"2026-06-16T22:51:31.000Z","size":59,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T00:24:49.308Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tracewayapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T03:15:23.000Z","updated_at":"2026-06-16T22:51:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tracewayapp/traceway-ios","commit_stats":null,"previous_names":["tracewayapp/traceway-ios"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tracewayapp/traceway-ios","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracewayapp%2Ftraceway-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracewayapp%2Ftraceway-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracewayapp%2Ftraceway-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracewayapp%2Ftraceway-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tracewayapp","download_url":"https://codeload.github.com/tracewayapp/traceway-ios/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tracewayapp%2Ftraceway-ios/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34719083,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-24T05:30:53.590Z","updated_at":"2026-06-24T05:30:54.252Z","avatar_url":"https://github.com/tracewayapp.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Traceway iOS SDK\n\nCatch crashes and exceptions in your iOS app and report them to your\n[Traceway](https://tracewayapp.com) backend. Pure Swift, zero third‑party\ndependencies, distributed via Swift Package Manager.\n\n\u003e This SDK reports **errors and crashes only** - there is no session/video replay.\n\u003e It speaks the same `/api/report` wire format as the Traceway Android, Flutter\n\u003e and JS SDKs, so the same backend ingests it with no server changes.\n\n## Requirements\n\n- iOS 13.0+\n- Swift 5.9+ / Xcode 15+\n\n## Installation (Swift Package Manager)\n\nIn Xcode: **File → Add Package Dependencies…** and enter the repository URL, or\nadd it to your `Package.swift`:\n\n```swift\n.package(url: \"https://github.com/tracewayapp/traceway-ios.git\", from: \"0.1.0\"),\n```\n\nthen add `\"Traceway\"` to your target's dependencies.\n\n## Usage\n\nCall `Traceway.start` as early as possible - ideally in your `App` initializer\n(SwiftUI) or `application(_:didFinishLaunchingWithOptions:)` (UIKit). The\nconnection string format is `\"{token}@{apiUrl}\"`.\n\n### SwiftUI\n\n```swift\nimport SwiftUI\nimport Traceway\n\n@main\nstruct MyApp: App {\n    init() {\n        Traceway.start(\n            connectionString: \"your-token@https://your-traceway/api/report\",\n            options: TracewayOptions(version: \"1.0.0\")\n        )\n    }\n\n    var body: some Scene {\n        WindowGroup { ContentView() }\n    }\n}\n```\n\n### UIKit\n\n```swift\nimport UIKit\nimport Traceway\n\n@UIApplicationMain\nfinal class AppDelegate: UIResponder, UIApplicationDelegate {\n    func application(\n        _ application: UIApplication,\n        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n    ) -\u003e Bool {\n        Traceway.start(\n            connectionString: \"your-token@https://your-traceway/api/report\",\n            options: TracewayOptions(version: \"1.0.0\")\n        )\n        return true\n    }\n}\n```\n\nAfter `start`, the SDK automatically captures:\n\n- **Uncaught `NSException`s** (Objective‑C / UIKit).\n- **Fatal signals** - Swift runtime traps such as force‑unwrapping `nil`, array\n  out‑of‑bounds, `fatalError()`, integer overflow (these surface as `SIGTRAP`,\n  `SIGILL`, `SIGABRT`, `SIGSEGV`, …). Hard crashes are persisted to disk and\n  uploaded on the **next launch**.\n\n### Manual capture\n\n```swift\ndo {\n    try somethingThrowing()\n} catch {\n    Traceway.capture(error)\n}\n\nTraceway.capture(message: \"Something noteworthy happened\")\n```\n\n### Forcing a flush\n\n```swift\nTraceway.flush(timeout: 5) // seconds; nil = wait indefinitely\n```\n\n## Configuration\n\n`TracewayOptions` mirrors the other Traceway SDKs:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `sampleRate` | `1.0` | Fraction of exceptions to keep (0.0–1.0). |\n| `debug` | `false` | Log SDK activity via `NSLog`. |\n| `version` | `\"\"` | App version, sent as `appVersion`. |\n| `debounceMs` | `1500` | Delay before batching/uploading. |\n| `retryDelayMs` | `10000` | Delay before retrying a failed upload. |\n| `maxPendingExceptions` | `5` | In‑memory cap; oldest dropped when exceeded. |\n| `persistToDisk` | `true` | Persist pending reports so they survive restarts. |\n| `maxLocalFiles` | `5` | Max persisted report files. |\n| `localFileMaxAgeHours` | `12` | Delete unsynced files older than this. |\n\n## Testing crash capture\n\nHard crashes are intercepted with POSIX signal handlers. When the **debugger is\nattached**, lldb intercepts these signals first, so your crash may not be\nrecorded. Test crash capture by running the app **without** the Xcode debugger\n(e.g. launch it from the home screen after installing), then relaunch and watch\nthe report upload.\n\n## Testing\n\n```sh\nswift test            # logic suite on the macOS host\n./Scripts/test.sh     # + iOS Simulator XCTest + device-arch build check\n```\n\nCI (`.github/workflows/tests.yml`) runs the logic suite, the full XCTest suite\non the iOS Simulator, and - on manual dispatch - the suite on a **real iPhone**\nvia Firebase Test Lab. See [CI/README.md](CI/README.md) for details and the\nrequired secrets.\n\n## License\n\nSee [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftracewayapp%2Ftraceway-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftracewayapp%2Ftraceway-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftracewayapp%2Ftraceway-ios/lists"}