😎

M1Macで特定のパッケージをビルドしようとするとpodに怒られる問題

2023/05/21に公開

概要

おそらくCPUアーキテクチャの問題だと思われますが、M1MacでiOSやMacOS向けにFlutterをビルドしようとすると

Unable to find a target named `RunnerTests` in project `Runner.xcodeproj`

というエラーが発生することがあります。
自分の場合は、このパッケージを追加すると発生したので、デバイス機能を使う系のライブラリでよく起こるのかなと邪推してます。

https://pub.dev/packages/flutter_libserialport

XCodeの仕様が変わってどうたらみたいなissueもありました
https://github.com/flutter/flutter/issues/85531#issuecomment-879415130

試行錯誤で一応エラーは消せたのでメモします。

env

  • MacBook Pro Apple M1 16GB ( MacOS 13.1 )
  • Visual Studio Code v: 1.74.3 (Universal)
  • ChatGPT Extension v: 3.3.3

手法 1

macos/や、iosの下にあるPodfileを編集します。
根本的な解決ではないですが、RunnerTestsを除外してあげることでエラーを外すことができます。

Podfile
target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
-  target 'RunnerTests' do
-  inherit! :search_paths
-  end
+ #  target 'RunnerTests' do
+ #    inherit! :search_paths
+ #  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_macos_build_settings(target)
  end
end

手法 2

XCodeを使って見つからないと言われているRunnerTests自体を新しく作成してしまう方法です。
確かにこの方法でもエラーを排除することができました。
そもそもRunnerTests自体が統合テスト用のBundleらしいですが、どうして特定のパッケージのときだけ見つからなくなるのかはいまいち不明なので、このやり方が正しいのかは要審議だと感じます。

もしかしたらAppStoreの審査で何か言われたりするかも

https://www.bytenote.net/article/177910427567521793

手法 3

自分はこの方法ではエラーを消せませんでしたが、一応書いときます
podの設定が悪いとM1でうまくビルドできないことがあるらしく、Podfileのあるディレクトリ下で次の命令を実行すると正常に動作する場合があるようです。

ただし、自分も含めこの方法で治せなかったという記事も多く、今回のエラーと直接の関係は薄いのではないでしょうか

https://stackoverflow.com/questions/66037493/pod-install-error-on-m1-mac-flutter-project-with-native-code-like-shared-prefe

sudo arch -x86_64 gem install ffi
arch -x86_64 pod update
arch -x86_64 pod install

Discussion