$npx -y skills add BoltzmannEntropy/OSXSkills --skill osx-iosUse when preparing iOS and iPadOS apps for TestFlight or App Store release, including signing, archive/IPA export, App Store Connect metadata, privacy/compliance checks, and final distribution readiness.
| 1 | # iOS/iPad Distribution Preparation |
| 2 | |
| 3 | ## Overview |
| 4 | |
| 5 | This skill prepares Apple mobile app distribution for iPhone and iPad, from preflight checks through App Store Connect submission. |
| 6 | |
| 7 | Important artifact difference: |
| 8 | - macOS distribution commonly uses `.dmg` |
| 9 | - iOS/iPadOS distribution uses `.ipa` uploaded to App Store Connect (TestFlight/App Store) |
| 10 | |
| 11 | ## Fast Preflight (Run First) |
| 12 | |
| 13 | Use the bundled checker before any release action: |
| 14 | |
| 15 | ```bash |
| 16 | bash ./skills/osx-ios/scripts/check_ios_dist.sh --app-root <APP_ROOT> |
| 17 | ``` |
| 18 | |
| 19 | If checker output includes `FAIL`, stop and fix blockers first. |
| 20 | |
| 21 | ## When to Use |
| 22 | |
| 23 | - Before any TestFlight build upload |
| 24 | - Before App Store submission/review |
| 25 | - When user asks for iOS/iPad release readiness |
| 26 | - When converting a macOS-only release workflow to mobile distribution |
| 27 | |
| 28 | ## Required Inputs |
| 29 | |
| 30 | Collect these first. If missing, report the gap and stop before release actions. |
| 31 | |
| 32 | - App source path and iOS target/scheme |
| 33 | - Xcode version + SDK baseline used for archive |
| 34 | - Apple Developer Team ID |
| 35 | - Bundle identifier (explicit App ID) |
| 36 | - Distribution method: `testflight` or `app-store` |
| 37 | - Version and build number strategy |
| 38 | - App Store Connect app record status (existing/new) |
| 39 | - Privacy policy URL + support URL |
| 40 | |
| 41 | ## Distribution Workflow |
| 42 | |
| 43 | Run each phase in order. Do not skip. |
| 44 | |
| 45 | ```dot |
| 46 | digraph ios_distribution { |
| 47 | rankdir=TB; |
| 48 | node [shape=box]; |
| 49 | |
| 50 | "Start" -> "1. Project Discovery"; |
| 51 | "1. Project Discovery" -> "2. Version & Build"; |
| 52 | "2. Version & Build" -> "3. Signing Setup"; |
| 53 | "3. Signing Setup" -> "4. Compliance & Privacy"; |
| 54 | "4. Compliance & Privacy" -> "5. Validation & Tests"; |
| 55 | "5. Validation & Tests" -> "6. Archive + IPA Export"; |
| 56 | "6. Archive + IPA Export" -> "7. Upload to ASC"; |
| 57 | "7. Upload to ASC" -> "8. TestFlight/App Store Checklist"; |
| 58 | } |
| 59 | ``` |
| 60 | |
| 61 | ## 1. Project Discovery |
| 62 | |
| 63 | Confirm the app has a valid iOS target and release configuration. |
| 64 | |
| 65 | - [ ] `ios/` project exists (or native iOS project root) |
| 66 | - [ ] Shared scheme available for CI/reproducible builds |
| 67 | - [ ] Release configuration builds on real device target |
| 68 | - [ ] Bundle ID stable and unique |
| 69 | - [ ] `MinimumOSVersion` is intentional |
| 70 | - [ ] iPad support decision is explicit (`UIDeviceFamily`) |
| 71 | - [ ] Xcode/SDK baseline meets current App Store Connect upload requirements |
| 72 | |
| 73 | ## 2. Version and Build Number |
| 74 | |
| 75 | - [ ] Marketing version (`CFBundleShortVersionString`) set |
| 76 | - [ ] Build number (`CFBundleVersion`) incremented |
| 77 | - [ ] Version/build match App Store Connect expectations |
| 78 | - [ ] Changelog/release notes prepared for TestFlight reviewers |
| 79 | |
| 80 | Common commands: |
| 81 | |
| 82 | ```bash |
| 83 | # Inspect current values |
| 84 | /usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ios/Runner/Info.plist |
| 85 | /usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ios/Runner/Info.plist |
| 86 | ``` |
| 87 | |
| 88 | ## 3. Signing Setup (Critical) |
| 89 | |
| 90 | App distribution fails without correct signing. Validate all of: |
| 91 | |
| 92 | - [ ] Apple Developer Program membership active |
| 93 | - [ ] Distribution certificate available (Apple Distribution) |
| 94 | - [ ] App ID exists and matches bundle identifier |
| 95 | - [ ] Provisioning profile maps to certificate + App ID + Team ID |
| 96 | - [ ] Entitlements match enabled capabilities |
| 97 | - [ ] Automatic or manual signing is consistent across local + CI |
| 98 | |
| 99 | If manual signing: |
| 100 | - [ ] `PROVISIONING_PROFILE_SPECIFIER` configured for Release |
| 101 | - [ ] `CODE_SIGN_STYLE=Manual` intentional |
| 102 | |
| 103 | If automatic signing: |
| 104 | - [ ] `-allowProvisioningUpdates` usage approved for CI |
| 105 | |
| 106 | ## 4. Compliance and Privacy |
| 107 | |
| 108 | ### Permissions and Usage Strings |
| 109 | |
| 110 | Each sensitive API must have a clear purpose string. |
| 111 | |
| 112 | - [ ] Camera (`NSCameraUsageDescription`) |
| 113 | - [ ] Microphone (`NSMicrophoneUsageDescription`) |
| 114 | - [ ] Photos (`NSPhotoLibraryUsageDescription`, add/read variants if needed) |
| 115 | - [ ] Location (`NSLocationWhenInUseUsageDescription` / always keys if used) |
| 116 | - [ ] Contacts, Calendars, Bluetooth, Motion, etc. when applicable |
| 117 | |
| 118 | ### Privacy Manifest and SDK Compliance |
| 119 | |
| 120 | - [ ] `PrivacyInfo.xcprivacy` valid where required |
| 121 | - [ ] Third-party SDK privacy manifests verified |
| 122 | - [ ] Required-reason APIs have valid reasons |
| 123 | - [ ] Data collection declarations match actual runtime behavior |
| 124 | - [ ] App Tracking Transparency prompt only if tracking is used |
| 125 | |
| 126 | ### Export Compliance and Legal |
| 127 | |
| 128 | - [ ] Encryption declaration ready (App Store Connect export compliance) |
| 129 | - [ ] Privacy policy URL is live |
| 130 | - [ ] Support URL is live |
| 131 | - [ ] Terms/EULA references are valid |
| 132 | |
| 133 | ## 5. Validation and Tests |
| 134 | |
| 135 | Minimum release gates: |
| 136 | |
| 137 | - [ ] Clean Release build succeeds |
| 138 | - [ ] Smoke test on physical iPhone |
| 139 | - [ ] Smoke test on physical iPad (or simulator + QA device if limited) |
| 140 | - [ ] Critical flows verified: login, purchase/subscription, sync, offline behavior |
| 141 | - [ ] Crash reporting initialized for Release build |
| 142 | - [ ] No debug menus/log overlays in Release |
| 143 | |
| 144 | ## 6. Archive and IPA Export |
| 145 | |
| 146 | Use archive/export |