
Developing Ios Apps
Fix XcodeGen, SPM, code signing, notarization, and device deploy failures while shipping SwiftUI iOS/macOS apps from the terminal or CI.
Overview
Developing iOS Apps is an agent skill most often used in Build (also Ship) that guides XcodeGen, SwiftUI, SPM, signing, notarization, and Apple CI/CD fixes for real devices.
Install
npx skills add https://github.com/daymade/claude-code-skills --skill developing-ios-appsWhat is this skill?
- XcodeGen project.yml patterns that preserve signing instead of wiping it on xcodegen generate
- SPM dynamic framework embed fix: build in Xcode GUI first when @rpath Framework loads fail
- Code signing matrix: Error -25294, keychain mismatch, adhoc fallback, EMFILE, notarytool credential conflicts
- Camera/AVFoundation pitfalls including isVideoMirrored vs automaticallyAdjustsVideoMirroring
- Electron @electron/osx-sign and @electron/notarize plus GitHub Actions conditional secrets guidance
Adoption & trust: 597 installs on skills.sh; 1.2k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are blocked by opaque Xcode build, @rpath embed, provisioning, or notarization errors and generic chat advice does not match XcodeGen or SPM reality.
Who is it for?
Indie developers maintaining iOS or macOS apps with XcodeGen and SPM who hit signing or CI failures outside Xcode’s GUI happy path.
Skip if: Teams that only use stock Xcode projects with no codegen, or greenfield UI design with zero toolchain or deploy issues.
When should I use this skill?
Building iOS/macOS apps, fixing Xcode build failures, deploying to real devices, or configuring CI/CD signing when XcodeGen, SPM, signing errors, notarization, or AVFoundation issues appear.
What do I get? / Deliverables
You get actionable project.yml, signing, and pipeline changes that unblock local GUI builds, device deploys, and macOS notarization without guesswork.
- Corrected project.yml and SPM embed workflow
- Signing and CI pipeline configuration notes
- Device deploy and notarization unblock checklist
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Native app construction and Apple toolchain wiring live in Build; signing and notarization handoffs naturally continue into Ship. SPM embed issues, Electron mac sign hooks, and GitHub Actions secrets map to integration and delivery plumbing rather than UI-only frontend work.
Where it fits
Regenerate XcodeGen project.yml without wiping provisioning profiles or target signing overrides.
Debug SwiftUI plus AVFoundation camera mirroring crashes on specific iOS versions.
Repair notarytool credentials and Electron notarize config before a Mac App Store or direct download release.
Trace @rpath dynamic framework load failures that only appear on physical devices.
How it compares
Use for Apple-native build-and-sign triage instead of generic Swift tutorials or web-only DevOps skills.
Common Questions / FAQ
Who is developing-iOS-apps for?
Solo and indie builders shipping SwiftUI iOS or macOS apps with XcodeGen and SPM who need an agent that speaks Apple signing, notarization, and CI edge cases.
When should I use developing-iOS-apps?
Use it in Build when configuring project.yml, SPM, or AVFoundation; in Ship when fixing code signing, notarization, Electron mac sign, or GitHub Actions secrets; and in Operate when diagnosing device-only or @rpath runtime failures.
Is developing-iOS-apps safe to install?
Review the Security Audits panel on this Prism page and inspect the skill repo before granting shell, keychain, or CI secret access to your agent.
SKILL.md
READMESKILL.md - Developing Ios Apps
# iOS App Development Build, configure, and deploy iOS applications using XcodeGen and Swift Package Manager. ## Critical Warnings | Issue | Cause | Solution | |-------|-------|----------| | "Library not loaded: @rpath/Framework" | XcodeGen doesn't auto-embed SPM dynamic frameworks | **Build in Xcode GUI first** (not xcodebuild). See [Troubleshooting](#spm-dynamic-framework-not-embedded) | | `xcodegen generate` loses signing | Overwrites project settings | Configure in `project.yml` target settings, not global | | Command-line signing fails | Free Apple ID limitation | Use Xcode GUI or paid developer account ($99/yr) | | "Cannot be set when automaticallyAdjustsVideoMirroring is YES" | Setting `isVideoMirrored` without disabling automatic | Set `automaticallyAdjustsVideoMirroring = false` first. See [Camera](#camera--avfoundation) | | App signed as adhoc despite certificate | `@electron/packager` defaults `continueOnError: true` | Set `continueOnError: false` in osxSign. See [Code Signing](#macos-code-signing--notarization) | | "Cannot use password credentials, API key credentials..." | Passing `teamId` to `@electron/notarize` with API key auth | **Remove `teamId`**. `notarytool` infers team from API key. See [Code Signing](#macos-code-signing--notarization) | | EMFILE during signing (large embedded runtime) | `@electron/osx-sign` traverses all files in .app bundle | Add `ignore` filter + `ulimit -n 65536` in CI. See [Code Signing](#macos-code-signing--notarization) | ## Quick Reference | Task | Command | |------|---------| | Generate project | `xcodegen generate` | | Build simulator | `xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build` | | Build device (paid account) | `xcodebuild -destination 'platform=iOS,name=DEVICE' -allowProvisioningUpdates build` | | Clean DerivedData | `rm -rf ~/Library/Developer/Xcode/DerivedData/PROJECT-*` | | Find device name | `xcrun xctrace list devices` | ## XcodeGen Configuration ### Minimal project.yml ```yaml name: AppName options: bundleIdPrefix: com.company deploymentTarget: iOS: "16.0" settings: base: SWIFT_VERSION: "6.0" packages: SomePackage: url: https://github.com/org/repo from: "1.0.0" targets: AppName: type: application platform: iOS sources: - path: AppName settings: base: INFOPLIST_FILE: AppName/Info.plist PRODUCT_BUNDLE_IDENTIFIER: com.company.appname CODE_SIGN_STYLE: Automatic DEVELOPMENT_TEAM: TEAM_ID_HERE dependencies: - package: SomePackage ``` ### Code Signing Configuration **Personal (free) account**: Works in Xcode GUI only. Command-line builds require paid account. ```yaml # In target settings settings: base: CODE_SIGN_STYLE: Automatic DEVELOPMENT_TEAM: TEAM_ID # Get from Xcode → Settings → Accounts ``` **Get Team ID**: ```bash security find-identity -v -p codesigning | head -3 ``` ## iOS Version Compatibility ### API Changes by Version | iOS 17+ Only | iOS 16 Compatible | |--------------|-------------------| | `.onChange { old, new in }` | `.onChange { new in }` | | `ContentUnavailableView` | Custom VStack | | `AVAudioApplication` | `AVAudioSession` | | `@Observable` macro | `@ObservableObject` |