Particles and Waves

スマホだけで完結するiOS開発フローを作った話

通勤電車の往復3時間で5回以上のビルドサイクルを回す。Cursor → GitHub → Xcode Cloud → TestFlight → 実機。MacBookを開かずに編集からリリースまで完結させた構成と、ハマりどころを残す。

副業でiOSアプリを開発していると、最大の制約は時間ではなく「PCを開ける時間」になる。会社では開けない。通勤電車では物理的に開けない。家に帰ると疲れている。Macbookを開ける時間は、思ったよりずっと少ない。

ならばPCを開かずに開発する、と決めた。スマホだけで編集→ビルド→配信→実機テストまでを完結させる。それでもCI/CDが回るなら、可処分時間が一気に倍になる。

実際に組んでみたところ、通勤電車の往復3時間で5回以上のビルドサイクルが回るようになった。構成と、途中でハマったところを残しておく。

全体構成

[iPhone Cursor] → [GitHub] → [Xcode Cloud] → [TestFlight] → [iPhone 実機]

それぞれの役割を分離している。

段階ツールやること
編集Cursor(iOSアプリ版)コード修正、AIアシスタントとの対話
バージョン管理GitHubPush / PR / mainマージ
ビルドXcode CloudArchive、署名、自動配信
配布TestFlightInternalグループへの配信
検証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を開く儀式がいらない、というだけで習慣の摩擦が消える。