
Appmigrationkit
Configure AppMigrationKit for system-orchestrated Android-to-iOS document migration with the correct extension, entitlements, and first-launch import status handling.
Install
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill appmigrationkitWhat is this skill?
- System-orchestrated migration via app extension—the containing app does not manage device-to-device network sessions
- Entitlement `com.apple.developer.app-migration.data-container-access` as a one-item array with the containing app bundle
- Separates entitlement availability (iOS/iPadOS/Mac Catalyst 26.1+) from AppMigrationKit API surface (iOS/iPadOS 26.0+)
- Export via `ResourcesExportingWithOptions` or `ResourcesExporting`; import via `ResourcesImporting`
- First-launch flow: check `MigrationStatus.importStatus`, notify user, then `MigrationStatus.clearImportStatus()`
Adoption & trust: 1.2k installs on skills.sh; 713 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
AppMigrationKit is integrated during iOS app build when onboarding must import user data from another platform via Apple’s migration extension model. Platform integration work: app extension, entitlements, export/import protocols, and containing-app checks—not general Swift UI layout.
Common Questions / FAQ
Is Appmigrationkit safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Appmigrationkit
{ "skill_name": "appmigrationkit", "evals": [ { "id": 0, "name": "extension-entitlement-setup", "prompt": "I'm adding AppMigrationKit to move our app's documents from Android to iOS during onboarding. Show the extension setup, entitlement value, export/import protocol choices, and what the containing app should check on first launch.", "expected_output": "A source-grounded setup guide that treats AppMigrationKit as system-orchestrated one-time migration, configures the extension entitlement as a one-item array containing the containing app bundle ID, uses AppMigrationExtension child protocols for export/import, and checks MigrationStatus after import.", "files": [], "assertions": [ "States AppMigrationKit uses a system-orchestrated app extension and does not have the app manage the device-to-device network session.", "Names `com.apple.developer.app-migration.data-container-access` and shows its value as a one-item string array containing the containing app's bundle identifier.", "Mentions the entitlement availability separately as iOS/iPadOS/Mac Catalyst 26.1+ while AppMigrationKit APIs are iOS/iPadOS 26.0+.", "Uses `ResourcesExportingWithOptions` or `ResourcesExporting` for export and `ResourcesImporting` for import.", "Checks `MigrationStatus.importStatus` on first launch and calls `MigrationStatus.clearImportStatus()` after notifying the user." ] }, { "id": 1, "name": "progress-and-error-review", "prompt": "Review this AppMigrationKit import/export plan: create `var resourcesImportProgress: Progress { Progress(totalUnitCount: 100) }`, catch CancellationError from ResourcesArchiver so we can log it, convert the database to a temporary JSON before export, and write app group data as we import without clearing it first. What should change?", "expected_output": "A correction-focused review that uses a stable import Progress object, lets archiver cancellation propagate, avoids intermediate export conversion, and clears app group data before import because the system clears only the app container after import errors.", "files": [], "assertions": [ "Rejects returning a fresh `Progress` from `resourcesImportProgress` and recommends updating a stable Progress instance during import.", "States `ResourcesArchiver` cancellation errors should not be caught or swallowed.", "Recommends exporting transportable files as-is through `appendItem(at:pathInArchive:)` rather than creating intermediate converted files.", "States app group containers are not cleared by the migration system on import error.", "Recommends clearing relevant app group data before writing imported content." ] }, { "id": 2, "name": "testing-boundary", "prompt": "I want unit tests for an AppMigrationKit round trip and a way to manually trigger a real migration from the shipping app. Sketch the safe test approach and call out what must not ship.", "expected_output": "Testing guidance that uses AppMigrationTester only from containing-app-hosted unit tests, exercises export/import controllers, registers import completion, and avoids using tester APIs in production or pretending the app can trigger real system migrations directly.", "files": [], "assertions": [ "Uses `AppMigrationTester` from async unit tests hosted by the containing app.", "Exercises `exportController.exportResources` and `importController.importResources` with optional migration/import requests.", "Calls `registerImportCompletion(with:)` in test flows that need to verify MigrationStatus behavior.", "States `AppMigrationTester` is test-only and must not be used in production code.", "Avoids claiming the shipping app can directly start or manage a real AppMigrationKit device-to-device migration session." ] } ] } # AppMigrationKit Patter