Flutter で開発した iPhone アプリを実機で起動する際の躓きメモ

# はじめに
Flutter を使って iPhone アプリを開発するにあたり、実機でのデバッグ・インストール・起動にちょっと手間取ったので、その時のメモ。
普段 Mac を触らないので、超初歩的な部分でも引っかかりました。。そんなに触らない分、また忘れそうなので備忘も兼ねて記載。

# 環境
- macOS Sonoma 14.1.2 (Macbook Pro 2020 Intel CPU)
- iOS 17.4.1 (iPhone12, iPhone15 Pro)
- Xcode 15.3
- Flutter 3.19.6

# Mac への Flutter 開発環境インストール
基本的に[公式のインストール手順](https://docs.flutter.dev/get-started/install/macos/mobile-ios)に沿えば問題ありません。
英語ですが、そんなに難しくはないです。
「Configure your target iOS device」の部分で開発したアプリをインストールする iOS デバイスのセットアップをします。「Virtual Device」はエミュレータで、「Physical Device」が実機のセットアップ手順になります。
この「Physical Device」の手順で少し躓きました。公式手順通りであれば問題ない部分は割愛して、躓いたポイントを中心にメモしていきます。

# 躓きポイント
## その１：Flutter のフォルダを Xcode で開く
とても初歩的ですが、Flutter プロジェクトのどのディレクトリを Xcode で開けばよいのかパッと見わかりませんでした。下図の「ios」ディレクトリを開けばOK。「`Runner.xcworkspace` を含むディレクトリを開く」と思っておけば良いようですね。Xcode 初心者過ぎて戸惑ってしまいました。
![ios_build1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/3bf9561f-0082-6f74-69bd-cc188feef45d.png)


## その２：Apple Developer アカウント
こちらもかなり初歩的だと思いますが、「[Apple Developer Program](https://developer.apple.com/jp/programs/enroll/)」に登録（課金）しないと実機へのインストールができないことを知りませんでした。2024/5/13 時点で 99 ドル/年です。
登録後、反映までに最大48時間かかるので注意。自分の場合は大体48時間フルでかかりました。

## その３：iPhone のデベロッパーモードが見当たらない
手順によれば、設定から「プライバシーとセキュリティ」に「デベロッパーモード」をオンにする必要があるが、最初設定には見当たりませんでした。
iPhone15 Proの方は、Xcode から一回何かしらのアプリを iPhone 向けにビルドして、「デベロッパーモードをオンにしろ」というエラーを出すと出現。
![ios_build2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/3992f492-bb49-8776-a740-969d3dc3b34e.png)
![ios_build3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/3daa07d8-a2de-56d1-bcef-476d54085f8a.png)

iPhone12 の方は、何度か繋いだり外したりを繰り返していたら上記手順を踏まなくてもデベロッパーモードが出現。
何度か「信頼する」を押下することになったので、それが効いたのかもしれないし、iPhone12 を繋いだ時は Xcode の「Window」->「Device and Simulators」でデバイスの一覧を出した状態で繋いでおり、それが良かったのかもしれない。
いずれにせよ、初期状態では出ていないので注意。
一度繋がってからはワイヤレスでの接続も問題なし。

## その４：「アプリを検証できません」エラー
iPhone15 Pro のみ、下図のようなエラーが出て実機での実行ができなかった。手順上は、設定から「一般」->「VPNとデバイス管理」を開いて開発元を信頼すればOKらしいが、何度やってもエラー解消せず。
![ios_build4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/8dde5aa5-0dd1-5206-4da0-f714d845fe02.png)
↓
[Apple Developer アカウントのメニュー](https://developer.apple.com/account/resources/profiles/list)から「Provisioning Profiles」というものを登録すれば一応解消できる。
- iOS App Development を選択
- App ID: 登録していない場合はまず App ID を登録する（下図）。Wildcard で登録すれば、アプリごとに登録しなくても済むので、そちらでも良い。
![ios_build5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/5f832bdd-2fbc-6cc1-902c-e4e874dd7ba7.png)

- Provisioning Profile Configuration は Offline Support YES を選択
  -> おそらく、上記エラーはオンライン認証で失敗していそう。Offline を選択することで回避を図る。
- 開発している Mac を選択
  -> 対象 Mac から Apple Developer アカウントでログインしていれば出てくるはず
- インストール先の iOS デバイスを選択
  -> 出てこない場合、登録が必要。Xcode で端末の UDID を確認し、デバイスを登録しておく。
- 適当に名前を付けて作成

↓
作成した Profile をダウンロードしておく。
↓
Runner で下図のように設定。
![ios_build6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/edf706aa-4f32-626a-782f-bcb797f605dd.png)
↓
初回ビルドは USB で接続して実行する必要があった。
2回目以降はワイヤレス接続でもOK。
**というか、2回目以降は Offline Support を NO にしても、プロファイルを削除しても、プロファイルへの登録を一度もしていないアプリをビルドしても、問題なく通った。
永続的かはわからないが、最初のビルド時に認証が通り、以降は無くても問題ないのかもしれない（？）。
iPhone 側に「開発者」を信頼させる必要がある？承認済みの開発者のアプリが本体に残っていたら他のアプリも問題なく起動できていそうな挙動。すべて消したらまた同じようなエラーが発生した。
正直よくわからないので詳しい方いたら教えてください…。**

## その５：vscode の F5 によるビルドができない
vscode で F5 を押した後、手動で同じプロジェクトを開いた Xcode をアクティブにすると動く。（もちろんその４の設定は完了済みの状態で。）
この方法でビルドした後は、Flutter のホットリロードも問題なく動く。

※こういうのって自動で切り替わってくれないのかな。もちろん、システム環境設定の「プライバシーとセキュリティ」->「オートメーション」は有効にしています。

## その６：デバッグモードではなく、アプリを実機にインストールしたい
Xcode 上部の Runner を押下し、「Edit Scheme...」->「Run」->「Build Configuration」を「Release」にしてから Run すればインストールされる。
![ios_build7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/351f1519-790a-be12-1eb0-8e13a3c9603e.png)
![ios_build8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782700/6413e405-0b74-3314-c6c9-c47fddf1f47d.png)

# 参考サイト
- [iPhone実機でビルド](https://zenn.dev/tatukane/articles/1985d23cfae8d8)
- [iOS端末(iPhone/iPad)のUDIDを確認する方法](https://www.l08084.com/entry/2018/05/19/170436)
- [Xcode 実機登録の際に"アプリを検証できません"](https://zenn.dev/yukiny/articles/254e5b4c572ad7)
- [Flutter プロジェクト（iOS）をコマンドを使って Xcode で開く](https://dev.classmethod.jp/articles/opening-flutter-project-in-xcode-using-command-line/)
- [【Flutter】IOSのワイヤレスデバッグやってみた](https://zenn.dev/flutternyumon/articles/2ae61992729ae5)
- [iOS 16から追加されたデベロッパモードが表示されない](https://qiita.com/ruemura3/items/968ca1f4e8f49001bca3)