はじめに
こんにちは趣味でアプリ開発をしている@glassmonkeyです。
今回はFlutterでiOSアプリの開発中にSwift Package Managerを利用したときにハマった点があったので記録に残しておこうと思います。
補足などあれば遠慮なくコメントなどでご指摘ください。
環境
Xcode古いけど許して
$ flutter doctor
[✓] Flutter (Channel stable, 1.22.3, on Mac OS X 10.15.7 19H15, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.4.1)
[✓] Android Studio (version 4.0)
(以下略)
発生したエラーについて
Swift Package Managerを利用して、依存関係を増やしたところ、Xcode
では通常通りビルドできるが、Android Strido経由でのflutter build ios
が以下のエラーで通らないようになりました。
Oops; flutter has exited unexpectedly: "ProcessException: Process exited abnormally:
Command line invocation:
/Applications/Xcode-11.4.1.app/Contents/Developer/usr/bin/xcodebuild -list
xcodebuild: error: Could not resolve package dependencies:
Packages are not supported when using legacy build locations, but the current project has them enabled.
Command: /usr/bin/xcodebuild -list".
原因
修正のPRによると、もともとのFlutterで作成したプロジェクト設定がレガシービルド設定になっていたようです。
Xcode 10のリリースノート
によると
If you need it, the legacy build system is still available in Xcode 10. To use the legacy build system, select it in the File > Project/Workspace Settings sheet. Projects configured to use the legacy build system will display an orange hammer icon in the Activity View.
と言及している程度ですが、Swift Package Managerが利用できないって認識で良さそうっぽいですね。
https://github.com/flutter/flutter/pull/59009
https://github.com/flutter/flutter/pull/68361
にて追加対応があったので、今後のバージョンでは治ってる可能性が高いそうです。ありがたや。
修正方法
同じ現象が報告されているissue
に記載されている対応をします。
- プロジェクトを開く(ワークスペースではないことが重要)
$ open ios/Runner.xcodeproject
これでFlutterコマンドからもビルドが通るようになったはずです。
- もし上記の方法でもだめだったら、workspaceも確認してみる
Procject SettingがWorkSpaceSettingになってる以外は同様の項目なので、もしかしたら確認してみても良いかもしれません。
$ open ios/Runner.xcworkspace
考察
Android StdudioのToolから開いた場合はワークスペースで開いている
一方で、Flutterコマンドの場合はプロジェクト設定を見ているので、そこに齟齬があるとFlutterコマンドでのみビルドが通らないという事象が発生するようだった。
なので、Flutterコマンド経由のビルドに関しては
$ open ios/Runner.xcworkspace
で見る癖をつけると良さそうに思いました。
感想
Xcodeむずかしい。
w