概要
- Xcode のGUIを使わずにMac/iOSアプリの開発・リリースを自動化する方法の解説
- xcodebuild や notarytool などコマンドラインツールの活用
- 初期設定のみ Xcode GUI が必要、それ以降は全てシェルスクリプトで完結
- XcodeGen でプロジェクト管理を効率化し、git運用も最適化
- AI(Claude Code等) を活用した自動化・効率化の推奨
Xcodeを開かずにMac/iOSアプリを開発・リリースするワークフロー
- Xcode.appのインストール は必須だが、GUIを開く必要はほぼ無し
- xcodebuild, notarytool, stapler, devicectl は全てXcode内のCLIツール
- 一度だけ必要な手動作業
- Apple IDへのサインイン(Xcode)
- Developer ID証明書の作成(Xcode)
- ノータリゼーション用パスワードの保存(Terminal)
- 以降は 完全ヘッドレス でビルド・デプロイが可能
XcodeのCLIツールチェーン設定
- Xcode.app が正しくコマンドラインツールとして選択されているか確認
xcode-select -pで/Applications/Xcode.app/Contents/Developerであることを確認- 違う場合は
sudo xcode-select -s /Applications/Xcode.app/Contents/Developerで修正
- Command Line Tools (/Library/Developer/CommandLineTools)は不要
- iOS SDKやnotarytool等はXcode.app内にしか含まれない
XcodeGenによるプロジェクト管理
- XcodeGen をHomebrew等でインストール(
brew install xcodegen) - プロジェクト設定を project.yml (YAML)で管理
.xcodeprojフォルダは毎回自動生成、git管理不要
- gitには YAMLファイルのみ をコミットし、プロジェクトの一貫性を保つ
初期Xcode設定(GUIで一度だけ必要)
- ライセンス同意・追加コンポーネントのインストール
sudo xcodebuild -license acceptsudo xcodebuild -runFirstLaunch
- Apple Developerアカウントの設定
- Xcode > 設定 > アカウント > + から追加
- 有料Apple Developerアカウント が必要
- Developer ID Application証明書の作成
- Xcode > 設定 > アカウント > 証明書管理 > + > Developer ID Application
- 開発用証明書とは別物、配布・ノータリゼーション用
- 証明書と秘密鍵は loginキーチェーン に保存、バックアップ推奨
ノータリゼーション用クレデンシャルの保存
- notarytool でアプリごとにプロファイル作成
xcrun notarytool store-credentials App-Name --apple-id "[email protected]" --team-id YOUR-TEAM-ID- アプリ固有のプロファイル名 を付与、他アプリと兼用しない
- パスワードは Apple IDのアプリ専用パスワード (appleid.apple.comで生成)
- パスワードは定期的に更新が必要、401エラー時は再生成
- 登録確認:
xcrun notarytool history --keychain-profile App-Name
- パスワード管理は 1Password 等のパスワード管理ツール推奨
Local.xconfigファイルの設定
- チームIDやバンドルプレフィックス等を Local.xconfig に記載し、
.gitignoreへ追加- 例:
BUNDLE_PREFIX = your.real.prefix - 例:
DEVELOPMENT_TEAM = YOUR-TEAM-ID
- 例:
デプロイスクリプト(release.sh)の作成
-
release.sh で全工程を自動化
- プロジェクト生成 → アーカイブ → Developer ID署名 → ノータリゼーション → ステープル → /Applicationsへインストール
-
AI(Claude Code等) に要件を伝えれば、プロジェクト固有のスクリプトを自動生成可能
-
スクリプト例(主要ポイントのみ抜粋)
set -euo pipefailで失敗時即停止cd "$(dirname "$0")/.."でリポジトリルートへ移動- xcodegen/Notary Profileの事前チェック
- xcodebuildでアーカイブ・エクスポート
- notarytoolでノータリゼーション
- staplerでチケット付与
- spctlでGatekeeper検証
- /Applicationsへコピー、lsregisterで再登録
#!/usr/bin/env bash set -euo pipefail # ...(変数定義・事前チェックなど) xcodegen generate xcodebuild -project ... -archivePath ... archive xcodebuild -exportArchive ... xcrun notarytool submit ... --wait xcrun stapler staple ... spctl -a -vvv -t exec ... cp -R ... /Applications/ -
スクリプトの特徴
- 途中失敗時は即停止、半端な状態を残さない
- どのディレクトリからも実行可能
- 事前チェックで無駄なビルドを防止
- インストール後のバリデーションも自動化
AIによる自動化・効率化の推奨
- LLM(Claude Code等) に手順や要件を伝えることで、繰り返し作業やスクリプト生成を自動化
- パスワード管理や初期設定もAIとの連携で効率化
- 「やりたくない手作業はAIに任せる」 という発想の重要性
まとめ
- Xcode GUIを極力使わず、CLIとスクリプトでMac/iOSアプリの開発・リリースを自動化可能
- 初期設定のみGUIが必要だが、それ以降は完全自動化が実現
- XcodeGen や notarytool、 AIツール を活用し、開発効率と再現性を最大化
- git運用 も簡素化、チーム開発でも安定運用が可能
- AIとの連携 で今後も更なる自動化・効率化が期待できる