Avatar
Kishikawa Katsumi 6/28/2018 8:02 AM
FirebaseはFrameworkの体裁を取っていますが、実際はStatic Libraryです。複数のフレームワークにリンクすると、複数のシンボルがリンクされてしまいます。 また、CocoaPodsの現在の使用により、1つのターゲットにリンクしたとしても、すべてのターゲットにリンカフラグが設定されるので、結局は同じ問題が起こります。
8:03 AM
解決方法はいろいろありますが、基本的には1つのターゲットにリンクするようにして、他のターゲットからはそのフレームワークをImportする形で使用することです。
8:05 AM
で、具体的にCocoaPodsでどうしたらいいかというと、 どれか1つのターゲットだけにリンクするようにPodfileを構成し、その上でさらに、 platform :ios, '10.0' use_frameworks! pod 'SwiftGen' pod 'SwiftLint' pod 'LicensePlist' target 'XXXApp' do pod 'Shimmer', inhibit_warnings: true target 'XXXAppTests' do inherit! :search_paths pod 'Mockingjay', inhibit_warnings: true pod 'iOSSnapshotTestCase', inhibit_warnings: true end target 'XXXAppUITests' do inherit! :search_paths end end target 'Foo' do pod 'GoogleTagManager', inhibit_warnings: true target 'FooTests' do inherit! :search_paths pod 'Mockingjay', inhibit_warnings: true end end post_install do |installer| installer.aggregate_targets.each do |aggregate_target| puts aggregate_target.name if aggregate_target.name == 'Pods-XXXApp' aggregate_target.xcconfigs.each do |config_name, config_file| config_file.libraries.delete('GoogleAnalytics') config_file.frameworks.delete('FirebaseAnalytics') config_file.frameworks.delete('FirebaseCore') config_file.frameworks.delete('FirebaseCoreDiagnostics') config_file.frameworks.delete('FirebaseInstanceID') config_file.frameworks.delete('FirebaseNanoPB') config_file.frameworks.delete('GoogleSymbolUtilities') config_file.frameworks.delete('GoogleTagManager') config_file.frameworks.delete('GoogleToolboxForMac') config_file.frameworks.delete('GoogleUtilities') config_file.frameworks.delete('nanopb') xcconfig_path = aggregate_target.xcconfig_path(config_name) config_file.save_as(xcconfig_path) end end end end ^ 上記のように、リンクしないターゲットからはFirebaseに関連するライブラリのリンカフラグを取り除く、というのが最も分かりやすい解決法だと思います。 (edited)
8:08 AM
この例だと、XXXAppFooというターゲットがあって、FooはEmbeddedFrameworkです。FirebaseはFooにのみリンクしています。
8:08 AM
(GoogleTagManagerがFirebaseAnalyticsに依存しています。)
8:09 AM
しかし、CocoaPodsがXXXAppにもリンカフラグを設定してしまうので、XXXAppからFirebase関連のライブラリのリンカフラグを取り除いています。
8:09 AM
ターゲットが増えても理屈は同じです。
😊 3