LoginSignup
17
9

More than 5 years have passed since last update.

[iOS]げにCarthageでFirebase管理は世知辛い Analytics導入時のビルドエラー殲滅していく(Xcode10.0対応版)

Last updated at Posted at 2018-08-22

追記 (2018/9/20)

Firebase SDK v5.8.0 (iOS12.0リリース時点で最新)を通すために必要な依存ライブラリ

(環境は Xcode 10.0 Build version 10A255 です)

FirebaseAnalyticsBinary(v5.8.0)

こうじゃった

Screen Shot 2018-09-19 at 18.17.18.png

(FirebaseAnalyticsは気にしないでください。依存ライブラリは5個)

FirebaseMessagingBinary(v5.8.0)

↑をすべて含めることに加え、こうじゃった

Screen Shot 2018-09-19 at 18.37.45.png

(依存ライブラリは3個)

我の環境の場合は、Build Settings -> Other Linker Flags-ObjC のみでよかった。$(inherited) すら必要ではなかった。
Build Active Architecture Only は、Yes だった。

Firebaseの各SDKが依存しているライブラリは、これらのヒントを糸口に探れ!!

各SDKによって依存するライブラリが異なるので、
これらのヒントを糸口に、探っていきたいです。

1 (PRJROOT)/Carthage/Build 以下の、.SDK名(例: FirebaseMessagingBinary).version ファイル

このような記載がしてある。これはFirebaseMessagingBinary.versionの例。
例えばiOS開発の場合、キー "iOS" の各オブジェクトが持つキー "name" の値の情報が、
必要なライブラリを知る一助になるかも知れない。
(でも、↑のキャプチャ画像のライブラリと必ずしも一致しないんだよなぁ...要研究)

{
  "Mac" : [

  ],
  "watchOS" : [

  ],
  "tvOS" : [

  ],
  "commitish" : "5.8.0",
  "iOS" : [
    {
      "name" : "FirebaseAnalytics",
      "hash" : "550e166a23d8401f5d5ad63d5455fe86d700a347d16be00b0228c3f2253c7e3a"
    },
    {
      "name" : "nanopb",
      "hash" : "31e0c9870b373b7f96b258e782e1246eed00b9ab7f29ccde21984e8b8d725e3e"
    },
    {
      "name" : "Firebase",
      "hash" : "a8669248da9519e9955e00448e518e1ca6becb32689eedddde237e19ad1136ae"
    },
    {
      "name" : "FirebaseCore",
      "hash" : "dca5c7e90e052a2a8087cc2ae1e63292f954b8c04a1f371194895a1ea6a2ff52"
    },
    {
      "name" : "GoogleUtilities",
      "hash" : "aef8824414de90178a87db399c8d45ad2c0d2a27d1edcca001915a73ce198c8a"
    },
    {
      "name" : "FirebaseCoreDiagnostics",
      "hash" : "1cbbb0dc9e4bd78f26795bf1b4253aa60edd21c77d8edfdcd7bddac329e286bd"
    },
    {
      "name" : "FirebaseInstanceID",
      "hash" : "fe0c5474f699f502b1d9d80bf535ebdb4cd44bb6e343bf5b014091c186bc8508"
    },
    {
      "name" : "GoogleAppMeasurement",
      "hash" : "fedc367dc718b254041c48844f6f64a2401f6da4873572d6b892fbf625508620"
    }
  ]
}

2 (PRJROOT)/Carthage/Build/iOS/SDK名.framework/Module/module.modulemap

これもなにかのきっかけになるかも

framework module FirebaseAnalytics {
  umbrella header "FirebaseAnalytics.h"
  export *
  module * { export *}
  link "sqlite3"
  link "z"
  link framework "Security"
  link framework "StoreKit"
  link framework "SystemConfiguration"
  link framework "UIKit"}

3

あとはこのエラーメッセージに含まれるライブラリ名。
怪しそうなワードがあれば、それを含めてみる

err1.png

↑の写真なら、sqlite3 とか

あとは、ここにあるように、
各SDKのバージョンを統一させることを忘れないことも重要だと思われます。

その他

Carthageには、

~/Library/Caches/org.carthage.CarthageKit

というパスに、キャッシュの保管庫(?)のようなものがあるらしい。

carthage update する前に、この中のファイル群を除去すると、問題が解決することがあるらしい。

(追記終了)


(ここから原文。SDK: ver 5.6.0 のときの話でした。)

CarthageFirebase関連ファイル管理したい!一味なのですが、そんなプログラマが遭遇したお話

この議論がほぼ全てです。Issuesちゃんと読もう...。

環境

こちらのページ「CocoaPods を使用せずに統合する」内のリンクからダウンロードできる最新SDKが5.6.0(2018/8/22時点最新)だったときのお話。
Xcode: 9.4.1

問題

Analytics(=Firebaseの大半の機能にインポート必須なライブラリ群)のビルドが通らなかった

err1.png

対応策

これを参考に、

libsqlite3.tbd, libz.tbd, libc++.tbd

の3つを General - Linked Frameworks and Librariesに追加。

さらにそれに飽き足らず、これを参考に、

StoreKit

を、General > Link binary with libraries > Add StoreKit.framework に追加。なんでや...

学んだこと

愚直にエラーメッセージでググる 基本をバカにしない😤
ハマったときこそ基本に立ち返る

今回は数十単位のエラーに圧倒されてググっていくのも一見憚られる感じなのですが、取りも直さず先達はきちんと回答を残してくれていました。
こんなえげつないエラーに見舞われているのは自分だけだという傲慢を捨て、集合知に教えを乞うていきましょう。
Firebaseの他の機能も追加しようとしてエラーに遭遇したら随時追記していきたいと思います😇

これらも忘れずにね

  • Targetを選択 -> Build Settings -> Other Linker Flags に -ObjCを追加
  • GoogleService-Info.plistをプロジェクトに追加

プロジェクト載せときます

なんとなくGoogleService-Info.plistだけ抜いたプロジェクトを載せておきます。ここ

単純にDLしてビルドしたらいきなりランタイムエラーが出るけど(could not find a valid GoogleService-Info.plist in your project. Please download one from https://console.firebase.google.com/.')
Bundle ID変えて、自分用にGoogleService-Info.plistDLしてプロジェクトに追加すれば動くはず...。
ついでになんとなくFireStoreも入れてみました

link

firebase/firebase-ios-sdk

Happy Firebase on Carthage Life!

ビルドさえ通ればあとは楽しいFirebaseコーディングの開幕ですね。
地雷を踏むたびに随時更新していければと思います。

17
9
2

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
17
9