⚖️

CodemagicでError (Xcode): Multiple commands produceが出てビルド出来ない

2024/12/06に公開

起きた問題

ローカルPCではiOSのビルドが成功しiOSのWidgetの動作もうまくいくが、Codemagicでビルドをすると以下のError (Xcode): Multiple commands produceエラーが発生してビルドに失敗してしまう。

Error (Xcode): Multiple commands produce '/Users/builder/Library/Developer/Xcode/DerivedData/Runner-edaimyiflreloheqntgnhkmwcclv/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GoogleUtilities_Privacy.bundle'

Error (Xcode): Multiple commands produce '/Users/builder/Library/Developer/Xcode/DerivedData/Runner-edaimyiflreloheqntgnhkmwcclv/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GoogleUtilities.framework'

Error (Xcode): Multiple commands produce '/Users/builder/Library/Developer/Xcode/DerivedData/Runner-edaimyiflreloheqntgnhkmwcclv/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GTMSessionFetcher_Core_Privacy.bundle'

Error (Xcode): Multiple commands produce '/Users/builder/Library/Developer/Xcode/DerivedData/Runner-edaimyiflreloheqntgnhkmwcclv/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/GTMSessionFetcher.framework'

前提と環境

  • Flutterでアプリを作ってる
  • home_widgetを使ってiOSのwidgetを作りたい
  • WidgetKitでFirebaseの接続をしたい
  • Codemagicでビルドする

Flutter

Flutter 3.24.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision dec2ee5c1f (3 weeks ago) • 2024-11-13 11:13:06 -0800
Engine • revision a18df97ca5
Tools • Dart 3.5.4 • DevTools 2.37.3

home_widget

https://pub.dev/packages/home_widget

home_widget: ^0.7.0

解決内容

Podfileに以下のように対象のExtensionのtargetにGoogleUtilities/~GTMSessionFetcherを追加

target 'XXXXXXWidgetExtension' do
  use_frameworks!
  
  pod 'Firebase/Auth'
  pod 'Firebase/Firestore'
+ pod 'GoogleUtilities/AppDelegateSwizzler'
+ pod 'GoogleUtilities/MethodSwizzler'
+ pod 'GoogleUtilities/Network'
+ pod 'GoogleUtilities/NSData+zlib'
+ pod 'GoogleUtilities/Environment'
+ pod 'GoogleUtilities/UserDefaults'
+ pod 'GoogleUtilities/Reachability'
+ pod 'GTMSessionFetcher'
end

なぜか、Codemagicのissueのディスカッションで書かれているpod 'GoogleUtilities'だけだとダメだった...
辛抱強く調べていると、下記の記事がヒットして、GoogleUtilitiesを細かく指定しているものを発見👀
https://forums.developer.apple.com/forums/thread/730388?answerId=768154022#768154022

自分のPodfile.lockの中身を見て、Firebase周りで依存しているGoogleUtilities/~を全部洗い出して、それをPodfileに追加するとビルドが通った🙌

...ただTestFlight配信するとwidgetが見つからない...誰か解決策知ってますか....

参考記事

https://github.com/orgs/codemagic-ci-cd/discussions/2416
https://stackoverflow.com/questions/78527760/flutter-ios-archiving-giving-error-multiple-commands-produce-gtmsessionfetcher
https://forums.developer.apple.com/forums/thread/730388?answerId=768154022#768154022

Discussion