osx-ios

Use 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.

Best use case

osx-ios is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use 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.

Teams using osx-ios should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/osx-ios/SKILL.md --create-dirs "https://raw.githubusercontent.com/BoltzmannEntropy/OSXSkills/main/skills/osx-ios/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/osx-ios/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How osx-ios Compares

Feature / Agentosx-iosStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use 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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# iOS/iPad Distribution Preparation

## Overview

This skill prepares Apple mobile app distribution for iPhone and iPad, from preflight checks through App Store Connect submission.

Important artifact difference:
- macOS distribution commonly uses `.dmg`
- iOS/iPadOS distribution uses `.ipa` uploaded to App Store Connect (TestFlight/App Store)

## Fast Preflight (Run First)

Use the bundled checker before any release action:

```bash
bash ./skills/osx-ios/scripts/check_ios_dist.sh --app-root <APP_ROOT>
```

If checker output includes `FAIL`, stop and fix blockers first.

## When to Use

- Before any TestFlight build upload
- Before App Store submission/review
- When user asks for iOS/iPad release readiness
- When converting a macOS-only release workflow to mobile distribution

## Required Inputs

Collect these first. If missing, report the gap and stop before release actions.

- App source path and iOS target/scheme
- Xcode version + SDK baseline used for archive
- Apple Developer Team ID
- Bundle identifier (explicit App ID)
- Distribution method: `testflight` or `app-store`
- Version and build number strategy
- App Store Connect app record status (existing/new)
- Privacy policy URL + support URL

## Distribution Workflow

Run each phase in order. Do not skip.

```dot
digraph ios_distribution {
    rankdir=TB;
    node [shape=box];

    "Start" -> "1. Project Discovery";
    "1. Project Discovery" -> "2. Version & Build";
    "2. Version & Build" -> "3. Signing Setup";
    "3. Signing Setup" -> "4. Compliance & Privacy";
    "4. Compliance & Privacy" -> "5. Validation & Tests";
    "5. Validation & Tests" -> "6. Archive + IPA Export";
    "6. Archive + IPA Export" -> "7. Upload to ASC";
    "7. Upload to ASC" -> "8. TestFlight/App Store Checklist";
}
```

## 1. Project Discovery

Confirm the app has a valid iOS target and release configuration.

- [ ] `ios/` project exists (or native iOS project root)
- [ ] Shared scheme available for CI/reproducible builds
- [ ] Release configuration builds on real device target
- [ ] Bundle ID stable and unique
- [ ] `MinimumOSVersion` is intentional
- [ ] iPad support decision is explicit (`UIDeviceFamily`)
- [ ] Xcode/SDK baseline meets current App Store Connect upload requirements

## 2. Version and Build Number

- [ ] Marketing version (`CFBundleShortVersionString`) set
- [ ] Build number (`CFBundleVersion`) incremented
- [ ] Version/build match App Store Connect expectations
- [ ] Changelog/release notes prepared for TestFlight reviewers

Common commands:

```bash
# Inspect current values
/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ios/Runner/Info.plist
/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ios/Runner/Info.plist
```

## 3. Signing Setup (Critical)

App distribution fails without correct signing. Validate all of:

- [ ] Apple Developer Program membership active
- [ ] Distribution certificate available (Apple Distribution)
- [ ] App ID exists and matches bundle identifier
- [ ] Provisioning profile maps to certificate + App ID + Team ID
- [ ] Entitlements match enabled capabilities
- [ ] Automatic or manual signing is consistent across local + CI

If manual signing:
- [ ] `PROVISIONING_PROFILE_SPECIFIER` configured for Release
- [ ] `CODE_SIGN_STYLE=Manual` intentional

If automatic signing:
- [ ] `-allowProvisioningUpdates` usage approved for CI

## 4. Compliance and Privacy

### Permissions and Usage Strings

Each sensitive API must have a clear purpose string.

- [ ] Camera (`NSCameraUsageDescription`)
- [ ] Microphone (`NSMicrophoneUsageDescription`)
- [ ] Photos (`NSPhotoLibraryUsageDescription`, add/read variants if needed)
- [ ] Location (`NSLocationWhenInUseUsageDescription` / always keys if used)
- [ ] Contacts, Calendars, Bluetooth, Motion, etc. when applicable

### Privacy Manifest and SDK Compliance

- [ ] `PrivacyInfo.xcprivacy` valid where required
- [ ] Third-party SDK privacy manifests verified
- [ ] Required-reason APIs have valid reasons
- [ ] Data collection declarations match actual runtime behavior
- [ ] App Tracking Transparency prompt only if tracking is used

### Export Compliance and Legal

- [ ] Encryption declaration ready (App Store Connect export compliance)
- [ ] Privacy policy URL is live
- [ ] Support URL is live
- [ ] Terms/EULA references are valid

## 5. Validation and Tests

Minimum release gates:

- [ ] Clean Release build succeeds
- [ ] Smoke test on physical iPhone
- [ ] Smoke test on physical iPad (or simulator + QA device if limited)
- [ ] Critical flows verified: login, purchase/subscription, sync, offline behavior
- [ ] Crash reporting initialized for Release build
- [ ] No debug menus/log overlays in Release

## 6. Archive and IPA Export

Use archive/export, not DMG packaging.

```bash
# 1) Archive
xcodebuild \
  -workspace ios/Runner.xcworkspace \
  -scheme Runner \
  -configuration Release \
  -destination "generic/platform=iOS" \
  -archivePath build/Runner.xcarchive \
  archive

# 2) Export IPA (app-store method for TestFlight/App Store)
xcodebuild -exportArchive \
  -archivePath build/Runner.xcarchive \
  -exportPath build/ios-dist \
  -exportOptionsPlist ios/ExportOptions.plist
```

`ExportOptions.plist` (minimum):

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>method</key>
  <string>app-store</string>
  <key>signingStyle</key>
  <string>automatic</string>
  <key>teamID</key>
  <string>YOUR_TEAM_ID</string>
  <key>uploadBitcode</key>
  <false/>
  <key>uploadSymbols</key>
  <true/>
</dict>
</plist>
```

## 7. Upload to App Store Connect

Preferred options:

- Xcode Organizer upload
- Transporter app upload
- CI upload using App Store Connect API key + transporter tooling

Optional (if `asc` CLI is installed):

```bash
# TestFlight publish
asc publish testflight --app <APP_ID> --ipa <PATH_TO_IPA> --group <GROUP_ID>

# App Store publish
asc publish appstore --app <APP_ID> --ipa <PATH_TO_IPA> --version <VERSION>
```

Checklist:

- [ ] `.ipa` upload completes successfully
- [ ] Build appears in App Store Connect
- [ ] Processing status becomes available
- [ ] Build assigned to internal/external TestFlight group as needed

## 8. iPhone + iPad Submission Checklist

### TestFlight Operational Rules

- [ ] Internal testers <= 100 users
- [ ] External testers <= 10,000 users
- [ ] Build age <= 90 days
- [ ] First external build (and one build per app version) passes Beta App Review
- [ ] Upload pacing respects build limits per 24 hours

### Metadata

- [ ] App name, subtitle, keywords
- [ ] Description + What’s New
- [ ] Category, age rating, content rights
- [ ] Contact info for App Review

### Screenshots and Media

- [ ] Required iPhone screenshots uploaded (current minimum baseline)
- [ ] Required iPad screenshots uploaded if iPad support is enabled
- [ ] Preview videos optional but validated if present

### Device and UX Requirements

- [ ] Orientation support intentional for iPhone and iPad
- [ ] Safe area layouts verified on notched and non-notched devices
- [ ] iPad multitasking behavior validated (if supported)
- [ ] External keyboard/pointer interactions checked where applicable

### Monetization and Account

- [ ] In-app purchases/subscriptions approved or linked
- [ ] Sign in with Apple requirement evaluated
- [ ] Demo/test account credentials provided to reviewer (if required)

### App Review Guideline Alignment

- [ ] App completeness for review (no placeholders/broken flows)
- [ ] Privacy and data handling disclosures match behavior
- [ ] Sign in with Apple implemented when third-party sign-in triggers requirement

## Failure Conditions (Block Release)

Treat these as release blockers:

- Missing/invalid signing profile or certificate
- Missing privacy usage strings for used APIs
- Missing or invalid privacy manifest / required-reason API declarations
- Export/upload failures for Release IPA
- Broken privacy policy/support links
- iPad required assets missing while iPad support is enabled
- Release build still using debug endpoints or test secrets

## Output Format

When running this skill, produce:

1. `Readiness Summary`: ready / not ready
2. `Blocking Issues`: concrete file + fix
3. `Non-Blocking Improvements`: prioritized
4. `Exact Next Commands`: deterministic command list

## Current External Baselines to Enforce

- As of April 2026, App Store Connect requires uploads built with Xcode 16 and the current platform SDK baselines (including iOS 18/iPadOS 18 class SDKs).
- TestFlight operational limits apply: internal testers up to 100, external testers up to 10,000, and builds expire after 90 days.
- TestFlight external distribution requires Beta App Review for the first build and one build per app version.
- App Store Connect screenshot minimums follow current policy (single required iPhone size set and single required iPad size set for iPad apps).
- Privacy manifests and required-reason API declarations must be valid, and common third-party SDK signatures/manifests are expected by current platform policy.

## Related Skills

- **osx-review**: deep release-oriented code review
- **osx-compliance**: macOS DMG + desktop release infrastructure
- **osx-models**: native AI framework/model selection when AI features are included

Related Skills

We are still matching the closest adjacent skills for this page. In the meantime, continue through the full directory.