Open7

FlutterのiOSビルドができない

やまやま

Flutterのアプリ開発を行っている大学3回生です。
普段はUbuntuでVSCode + Android Studioで開発しているのですが,慣れないMacbookとXCodeでiOSアプリのビルド&アップロードが必要になり,様々な苦労をしたのでシェアします。

やまやま

XCodeでプロジェクトディレクトリを開く方法がわからない

GitHubからリポジトリをクローンしてきたものの,XCodeで開くこともできず…。

問題

XCodeでリポジトリのルートディレクトリを選択するも,開けない。

原因

VSCodeやAndroid Studioでプロジェクトを開く際は,ルートディレクトリを直接開いて作業することが多いですが,XCodeでFlutterアプリのプロジェクトを開くには,<root_dir>/ios/Runner.xcworkspaceというファイルを選択して開く必要があるようです。なお,Runner.xcodeprojを選択してしまうとまた別の問題が発生するようですのでご注意を (参考サイト)

解決策

<root_dir>/ios/Runner.xcworkspaceを指定して開く。

参考サイト

https://dev.classmethod.jp/articles/ios-app-development-beginners-dont-know-how-to-open-a-project-in-xcode/

やまやま

iOS Simulatorによるデバッグを試みるもビルド失敗

リリースビルドの前に,まずはシミュレータによるデバッグが成功するかどうか調べようとして,XCodeのプロジェクトナビゲータ(左側のバー)で▶ボタンを押し,デバッグを試みたものの……

問題

次のようなエラーが発生しました。

error: unable to parse contents of file list ‘/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks-Debug-input-files.xcfilelist’

原因

このエラーについて調査した結果,CocoaPodsがインストールされていないことが原因と判明しました。CocoaPodsとは,iOS/Macアプリ開発用のパッケージ管理ツールだそうです。

解決策

CocoaPodsをインストールすることによって解決できました。今回私が躓いた原因は「そもそもインストールされていない」ということでしたが,「古いバージョンを使用している」場合にも同様の方法により解決が期待できるようです。

sudo gem install cocoapods

CocoaPodsをインストールした後は,実際にビルドする前に以下のコマンドも実行する必要があります。

cd ios  # ルートディレクトリ直下のiosディレクトリへ移動
pod install

pod installを実行した後でXCode上でRunした時に"Generated.xcconfigというファイルが見つからない"というエラーが出た場合は,先にルートディレクトリでflutter pub getを実行してから再度pod installを実行してみてください。
参考: Flutter iOSのシミュレーターで実行エラーになるときの対処法の章「pod install成功 → Xcodeで依然エラー」

参考サイト

https://www.yukiiworks.com/archives/375

ちなみに調査時にはこちらのページも見ていたのですが,今回はこちらの方法では解決できませんでした。
https://qiita.com/kogepan159/items/eade1c9d3049b0d9a4d9

やまやま

XCodeでビルドエラーの詳細がどこに書かれているかわからない

先程のCocoaPods絡みのエラーを解決したところで,改めてXCodeからデバッグを試みたところ…

問題

表示されたエラーメッセージはこのようなものでした。

Command PhaseScriptExecution failed with a nonzero exit code

あまりに不親切ですね。とはいえ,どこかにエラー詳細を読む方法があるはずです。

解決策

Report Navigatorと呼ばれる場所(デフォルトで左側にあるバー)からエラーログを読みに行くことができました。詳細は以下の記事をご覧ください。
https://zenn.dev/yu1ro/articles/5ce0a946e876e1

やまやま

xcode_backend.sh: no such file or directory.エラー

先程の投稿でビルドエラーの詳細を調査できるようになりました。そこで該当エラー出力を読みに行ったところ…

問題

以下のようなエラー文が出力されていました。

xcode_backend.sh: no such file or directory.

原因

ビルド時にFlutter SDKの所在を知るためFLUTTER_ROOTという環境変数が参照されるが,そのFLUTTER_ROOTが設定されていなかった。

解決策

~/.zshrcに環境変数FLUTTER_ROOTとして,Flutter SDKのパス(flutter doctorで調べられます!)を設定する。今回は~/.zshrcに書き込んでいますが,状況に応じて.zprofile.bashrc等に書き込んでください。

~/.zshrcに追記
export FLUTTER_ROOT="(SDKの展開先)"

参考サイト

https://stackoverflow.com/questions/56844012/xcode-backend-sh-no-such-file-or-directory-do-i-need-to-create-this-file
https://qiita.com/macneko/items/b0c2da4270d1f99ccdda

やまやま

flutter build iosコマンドが失敗する

色々調べて,リリースビルドのためにはflutter build ios --releaseを実行してから,XCode内で"Product"=>"Archive"を実行すれば良いらしいと判明し,flutter build ios --releaseを実行したところ…

問題

以下のようなエラーが出ました。

Cannot find "xcodebuild". Xcode 13.0 or greater is required to develop for iOS.

原因

間違いなくXCodeは入っているので,どうやらFlutter SDK側にXCodeが認識されていないようです。
実際flutter doctorを実行したところ,iOS toolchainの章にXCode installation is incompleteと書かれていました。

解決策

flutter doctorを実行した際のXCode installation is incompleteのすぐ下に,Once installed, runから次の文が書かれていました。

      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

すなわち,以下のコマンドを実行することで解決です。

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

参考サイト

https://stackoverflow.com/questions/52470137/flutter-build-ios-on-root-of-my-flutter-app-does-not-work