副業でiOSアプリを開発していると、最大の制約は時間ではなく「PCを開ける時間」になる。会社では開けない。通勤電車では物理的に開けない。家に帰ると疲れている。Macbookを開ける時間は、思ったよりずっと少ない。
ならばPCを開かずに開発する、と決めた。スマホだけで編集→ビルド→配信→実機テストまでを完結させる。それでもCI/CDが回るなら、可処分時間が一気に倍になる。
実際に組んでみたところ、通勤電車の往復3時間で5回以上のビルドサイクルが回るようになった。構成と、途中でハマったところを残しておく。
全体構成
[iPhone Cursor] → [GitHub] → [Xcode Cloud] → [TestFlight] → [iPhone 実機]
それぞれの役割を分離している。
| 段階 | ツール | やること |
|---|---|---|
| 編集 | Cursor(iOSアプリ版) | コード修正、AIアシスタントとの対話 |
| バージョン管理 | GitHub | Push / PR / mainマージ |
| ビルド | Xcode Cloud | Archive、署名、自動配信 |
| 配布 | TestFlight | Internalグループへの配信 |
| 検証 | iPhone実機 | インストール、即動作確認 |
肝は「ビルド環境を持ち歩かない」ことだ。Xcode Cloudというクラウドビルドサービスが、自分の代わりにMacを動かしてくれる。
CursorのiOSアプリで編集する
Cursorのスマホ版を使うと、リポジトリを開いてコード編集ができる。AIアシスタントに「ここの色を変えて」と日本語で投げれば、該当箇所を直してくれる。
エラーが出たら、Xcode Cloudのログをスクリーンショットに撮ってCursorのチャットに貼る。AIが原因を推測して修正案を出す。これを繰り返す。
実際にこの方法でローンチまで持っていったプロジェクトでは、エラー対応の往復が約20回あった。すべてスクリーンショット起点で完結している。
Xcode Cloudに一本化した経緯
最初はfastlaneでローカルビルドを自動化しようとした。証明書、プロビジョニングプロファイル、App Store Connect APIキー。鍵周りの設定で2日ハマった。fastlane match、fastlane gymと進めるうちに、「これMacを開かないという目的に対して、Mac側の設定が増えてないか?」と気づいた。
捨てて、Xcode Cloudに統一した。Apple純正で、設定はApp Store Connect上のWeb UIから行える。プロジェクト側に必要なのはビルド設定のクリーンアップだけだった。
具体的には署名設定の統一(手動署名→自動署名)、リソース参照の正規化(Build Phasesの重複削除)、Info.plistの整理。これだけでXcode Cloudが安定して通るようになった。
ビルド完了からTestFlight配信完了までの待ち時間は、おおむね3分前後。「Push → コーヒー1口 → 実機にインストール準備完了」という体感になる。
TestFlightからの実機インストール
TestFlightアプリで自分自身をInternalテスターに登録しておくと、Xcode Cloudのビルドが完了した瞬間にスマホに通知が来る。タップしてインストール、即起動、即検証。
mainマージから実機での動作確認まで、最短で4分。長くても5分。電車の1区間で1サイクル回ることもある。
PCレス開発が可能な前提条件
この構成が成立するのは、いくつかの前提がそろったからだ。
- プロジェクトの初期セットアップ自体はMacで一度済ませてある
- Cursorのスマホ版でAIエージェントが使える
- Xcode Cloudが署名・ビルドをカバーする
- TestFlightがInternalグループへの配信をほぼ自動化できる
つまり「初期構築はPC、運用はスマホ」というハイブリッド構成だ。完全PCレスではないが、開発の99%はスマホで回る。
副業開発の文脈では、「いつでも開発に戻れる状態」が継続力に直結する。MacBookを開く儀式がいらない、というだけで習慣の摩擦が消える。