> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Devin で iOS アプリを構築する

> macOS VM 上で Devin を使って iOS アプリを構築する: ビルド、テスト、TestFlight

このチュートリアルでは、Devin が空のリポジトリから小さな SwiftUI 製の習慣トラッカーを作り上げます。Devin はコードを書き、Xcode でビルドし、iOS シミュレータで実行して、プルリクエストを作成します。その作業の様子を見守りながら結果をレビューし、最後に Devin に TestFlight へベータビルドを配信してもらいます。

<Frame>
  <img src="https://mintcdn.com/cognitionai-enterprise/U1cPD7hedYbOv-HZ/images/onboard-devin/macos-ios-app.gif?s=b5ea4c9e343894faddc9ca8ea7ce8121" alt="macOS VM 上で iOS ゲームを構築する Devin" width="1864" height="1080" data-path="images/onboard-devin/macos-ios-app.gif" />
</Frame>

<div id="before-you-start">
  ## 始める前に
</div>

* **macOS VM**: Devin のセッションは macOS 上で実行する必要があります。Dedicated SaaS デプロイメントをご利用の場合は、アカウントチームに macOS VM の有効化を依頼してください。詳しくは [macOS サポート](/ja/onboard-devin/environment/macos-support)をご覧ください。
* **リポジトリ**: 空のリポジトリ (例: `habit-tracker`) を作成し、[Git 統合](/ja/onboard-devin/environment#before-you-start)経由で Devin にアクセス権を付与します。
* **Desktop モード**: [設定 > カスタマイズ](https://app.devin.ai/customization)で **Enable desktop mode** をオンにします。これにより、Devin がシミュレータを操作し、テストの様子を記録できるようになります。詳しくは [Computer Use](/ja/work-with-devin/computer-use)をご覧ください。

<Info>
  macOS セッションの使用量は Linux セッションと同じで、macOS の追加料金はかかりません。
</Info>

<div id="step-1-prompt-devin-to-build-the-app">
  ## Step 1: Devin にアプリのビルドを指示する
</div>

選択したリポジトリで新しいセッションを開始し、プロンプトボックスの下にあるプラットフォームメニューから **macOS** を選択します。Xcode、iOS シミュレータ、Homebrew はプリインストール済みのため、事前の設定は不要です。

<Note>
  Slack では、メッセージに `!mac` [bang コマンド](/ja/integrations/slack)を追加してください。[API](/ja/api-reference/overview) から利用する場合は、セッション作成時に `platform: "macos"` を指定します。
</Note>

アプリの機能、使用するツール、そして動作を確認する方法を含めた具体的なプロンプトを Devin に渡します。次に使用例を示します。

```text theme={null}
このリポジトリに HabitTracker という名前の SwiftUI 製 iOS アプリを作成してください。

要件:
- iOS 17 以降を対象とし、SwiftUI と Observation フレームワークを利用する。
- メイン画面: 習慣の一覧。各項目に名前、SF Symbol のアイコン、
  その習慣を今日の分として完了にするチェックマークボタンを表示する。
- 各習慣の横に現在の連続達成日数（連続して完了した日数）を表示する。
- ツールバーの「+」ボタンで習慣を追加するシートを開く。スワイプで削除できるようにする。
- 現時点では習慣をメモリ上に保持する。永続化はまだ不要。

プロジェクトのセットアップ:
- Homebrew で xcodegen、swiftlint、xcbeautify をインストールする。
- XcodeGen を使い、project.yml にプロジェクトを定義する。project.yml をコミットし、
  生成された .xcodeproj は .gitignore に追加する。
- 連続達成日数の計算を検証する XCTest の単体テストターゲットを追加する。
- swiftlint が通ることを確認する。

検証:
- iPhone 17 シミュレータでビルドし、テストを実行する。
- シミュレータにアプリをインストールして起動する。習慣を 2 つ追加し、1 つを完了にして、
  1 つを削除する。この操作を記録し、メイン画面のスクリーンショットを送ること。
- 短い要約とスクリーンショットを添えて PR を作成する。
```

良いiOSプロンプトの条件:

* **プラットフォームのバージョンとフレームワークを明示する** — Devinがデプロイメントターゲットやアーキテクチャを推測せずに済みます。
* **シミュレータのデバイスを明示する** — ビルドコマンドがVM上に実在するデスティネーションを使用するようになります。
* **具体的な検証フローを記述する** — Devinがコンパイルの成否を確認するだけでなく、あなたが重視する挙動をテストします。

<div id="step-2-watch-devin-build-and-test">
  ## ステップ2: Devin のビルドとテストを見守る
</div>

Devin は iOS 開発者と同じような流れでタスクを進めます。

1. **プロジェクトの雛形を作成**: `project.yml`、SwiftUI のビュー、習慣モデル、テストターゲットを作成し、`xcodegen generate` を実行します。

2. **ビルドしてエラーを修正**: シェルから `xcodebuild` を実行し、コンパイラの出力を確認しながら、ビルドとテストが通るまでエラーを修正します。

3. **シミュレータでアプリを実行**: デバイスを起動し、ビルドをインストールして起動します。

   ```bash theme={null}
   xcrun simctl boot "iPhone 17"
   xcrun simctl install booted <path-to-HabitTracker.app>
   xcrun simctl launch booted <bundle-id>
   ```

4. **指定したフローをテスト**: [Computer Use](/ja/work-with-devin/computer-use) でアプリをタップ操作し、画面上で結果を検査したうえで、その実行を[録画](/ja/work-with-devin/testing-and-recordings)します。

5. **プルリクエストを作成**: 概要とスクリーンショットを添えて作成します。

セッションのワークスペースで **iOS シミュレータ** タブを開くと、Devin がアプリをタップ操作する様子を、起動中のシミュレータ上でリアルタイムに確認できます。

<Tip>
  ビルドがデスティネーションを見つけられない場合は、Devin に `xcrun simctl list devices available` を実行させ、VM に実際に存在するデバイスと OS を利用するよう指示してください。
</Tip>

<div id="step-3-review-and-iterate">
  ## ステップ3: レビューと反復
</div>

他のプルリクエストと同じようにレビューします。スクリーンショットと録画が依頼した内容と一致しているかを確認してください。その後は、同じセッション内でフォローアップのプロンプトを送り、開発を続けましょう。

```text theme={null}
SwiftDataで習慣と達成履歴を永続化し、アプリを再起動しても
データが残るようにしてください。インメモリのモデルコンテナに習慣を
挿入して連続日数を検証するテストを追加してください。シミュレータで
アプリを再起動して習慣が保持されることを確認し、同じPRにプッシュしてください。
```

```text theme={null}
習慣を追加して完了にし、ストリークが1と表示されることを確認する
XCUITestを備えたUIテストターゲットを追加してください。iPhone 17シミュレータで実行してください。
```

```text theme={null}
ダークモードとDynamic Typeに対応してください。シミュレータでダーク表示
かつ最大のアクセシビリティ文字サイズにしてメイン画面を確認し、両方の
スクリーンショットを送ってください。
```

プルリクエストにレビューコメントを残すこともできます。セッションがアクティブな間は、Devin がそれらのコメントに応答します。詳しくは [GitHub統合](/ja/integrations/gh) と [Devin Review](/ja/work-with-devin/devin-review) を参照してください。

<div id="step-4-ship-a-beta-to-testflight">
  ## ステップ4: TestFlightにベータ版を配信する
</div>

アプリがシミュレータで動作するようになったら、Devinはアプリをアーカイブして署名し、ビルドをTestFlightにアップロードできます。これにより、テスターは実機にアプリをインストールできるようになります。

そのためには、ご自身で行う1回限りのセットアップが必要です。各ステップは[iOSビルドをTestFlightにアップロードする](/ja/onboard-devin/environment/testflight)で解説しています。

1. **App Store Connectをセットアップする**: 契約への同意、バンドルIDの登録、アプリレコードの作成、ベータグループの作成、輸出コンプライアンスへの回答を行います。
2. **App Store Connect APIキーを作成し**、`.p8`ファイルをダウンロードします。
3. **Devinのシークレットを追加する**: `ASC_KEY_ID`、`ASC_ISSUER_ID`、`ASC_PRIVATE_KEY`、`APPLE_TEAM_ID`。
4. 組織で制限付きのネットワークポリシーを利用している場合は、Appleのサーバーへの**ネットワークアクセスを許可する**。

<Note>
  `project.yml`とApp Store Connectでは同じバンドルIDを利用してください。ステップ1でDevinがプレースホルダーのバンドルIDを選択していた場合は、まずプロジェクトを更新するよう指示してください。
</Note>

その後、シークレットが利用できるよう新しいセッションを開始し、Devinに次のように指示します:

```text theme={null}
HabitTracker スキームをアーカイブして TestFlight にアップロードしてください。ビルド
番号は App Store Connect にある最新ビルドより大きい値を利用し、そのビルドを
"QA" ベータグループに追加して、完了したらビルド番号を教えてください。
```

DevinはAPIキーをディスクに書き込み、`xcodebuild archive`でアプリをアーカイブし、`xcodebuild -exportArchive`でアップロードします。その後、処理済みのビルドをベータグループに追加します。これらの手順を毎回プロンプトで繰り返さずに再利用するには、ブループリントの`knowledge`セクションに`testflight`の項目を追加してください。詳細は[ブループリントに手順を保存する](/ja/onboard-devin/environment/testflight#save-the-steps-in-your-blueprint)を参照してください。

<div id="tips">
  ## ヒント
</div>

* **ツールチェーンを固定する**: macOSイメージには複数のXcodeバージョンが含まれています。ブループリント内で `DEVELOPER_DIR` または `xcode-select` を利用して使用するバージョンを指定してください。[Xcodeバージョンの選択](/ja/onboard-devin/environment/macos-support#selecting-an-xcode-version)を参照してください。
* **認証情報はシークレットとして保存する**: App Store Connect APIキー、署名証明書、非公開パッケージレジストリのトークンは[シークレット](/ja/product-guides/secrets)に保存してください。Devinはこれらを環境変数として読み取ります。
* **パッケージレジストリを許可する**: 組織で制限付きのネットワークポリシーを利用している場合は、macOSの許可リストにSwift Package Manager、CocoaPods、およびアプリが利用する非公開レジストリが含まれていることを確認してください。[ネットワークアクセス](/ja/onboard-devin/environment/macos-support#network-access)を参照してください。
* **復帰後にシミュレータを再起動する**: セッションがスリープから復帰すると、ファイルは残りますが実行中のプロセスは失われます。テストの前にDevinにシミュレータを起動し直すよう依頼してください。
* **根拠を求める**: 特定の画面のスクリーンショットや録画を求めれば、自身でアプリを実行しなくてもUIを確認できます。

<div id="limitations">
  ## 制限事項
</div>

* Devin はアプリをシミュレータ上で実行し、実機の iPhone や iPad では実行しません。実機でテストするには、[TestFlight](#step-4-ship-a-beta-to-testflight) ビルドをインストールしてください。
* VM 内でのタイミング計測やプロファイリングの結果は、実機のパフォーマンスを反映しません。
* macOS VM 上ではコンテナがソフトウェアエミュレーションで動作するため、コンテナを多用する作業は遅くなります。

詳細は [macOS サポートの制限事項](/ja/onboard-devin/environment/macos-support#limitations) を参照してください。

<div id="next-steps">
  ## 次のステップ
</div>

<CardGroup cols={2}>
  <Card title="TestFlightへのアップロード" icon="paper-plane" href="/ja/onboard-devin/environment/testflight">
    ビルドをアップロードするためのApp Store Connectの設定、APIキー、シークレット
  </Card>

  <Card title="macOSのサポート" icon="apple" href="/ja/onboard-devin/environment/macos-support">
    macOSセッション向けのブループリント設定、プリインストール済みツール、トラブルシューティング
  </Card>

  <Card title="テストと録画" icon="video" href="/ja/work-with-devin/testing-and-recordings">
    Devinがアプリをテストし、結果を記録する仕組み
  </Card>
</CardGroup>
