1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FlutterでSwiftPackageManager利用時のパッケージ依存関係エラーを解消する方法

Last updated at Posted at 2020-11-23

はじめに

こんにちは趣味でアプリ開発をしている@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
に記載されている対応をします。

  1. プロジェクトを開く(ワークスペースではないことが重要)
$ open ios/Runner.xcodeproject
  1. File > ProjectSettingを開く
    スクリーンショット 2020-11-23 16.56.38.png

  2. Advancedを開く
    スクリーンショット 2020-11-23 16.56.47.png

  3. Legacyからdefaultにする
    おそらくLegacyにチェックが入っているはずなので、スクショのようにXcode DefaultにしてDoneを押下する
    スクリーンショット 2020-11-23 16.56.56.png

これでFlutterコマンドからもビルドが通るようになったはずです。

  1. もし上記の方法でもだめだったら、workspaceも確認してみる

Procject SettingがWorkSpaceSettingになってる以外は同様の項目なので、もしかしたら確認してみても良いかもしれません。

$ open ios/Runner.xcworkspace

考察

Android StdudioのToolから開いた場合はワークスペースで開いている
スクリーンショット 2020-12-02 2.37.52.png
一方で、Flutterコマンドの場合はプロジェクト設定を見ているので、そこに齟齬があるとFlutterコマンドでのみビルドが通らないという事象が発生するようだった。

なので、Flutterコマンド経由のビルドに関しては

$ open ios/Runner.xcworkspace

で見る癖をつけると良さそうに思いました。

感想

Xcodeむずかしい。

w

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?