naichi's lab

3日後の自分(他人)への書き置き

【unity、iOS、CloudBuild】Google Analyticsを入れたらビルドエラー(Undefined symbols for architecture armv7:)

f:id:naichilab:20161130021717p:plain:w320

blog.naichilab.com

上記前回の記事の続き。

cocoapodsのエラーは消えたけど別のエラーが出てきた。

エラー内容

Cloud Buildのコンパクトログではこんな感じ

241:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
242:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
243:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
244:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
245:        [xcode]   "_NSSQLiteErrorDomain", referenced from:
246:        [xcode]       -[GAIDataStore performBlockAndWait:withError:] in libGoogleAnalyticsServices.a(GAIDataStore.o)
247:        [xcode] clang: error: linker command failed with exit code 1 (use -v to see invocation)
248:        [xcode] ** BUILD FAILED **

なんかパッとしないエラーだったのでフルログを見てみると

11729:        [xcode] Undefined symbols for architecture armv7:
11730:        [xcode]   "_sqlite3_prepare_v2", referenced from:
11731:        [xcode]       -[GAISqlStore prepareSql:] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11732:        [xcode]   "_sqlite3_errmsg", referenced from:
11733:        [xcode]       -[GAISqlStore errorMessage] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11734:        [xcode]   "_sqlite3_close", referenced from:
11735:        [xcode]       -[GAISqlStore closeDatabase] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11736:        [xcode]   "_sqlite3_open_v2", referenced from:
11737:        [xcode]       -[GAISqlStore openAndValidateDatabase] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11738:        [xcode]   "_sqlite3_column_int", referenced from:
11739:        [xcode]       -[GAISqlStore rowCountForTableWithName:] in libGoogleAnalyticsServices.a(GAISqlStore.o)
11740:        [xcode]   "_inflateInit2_", referenced from:
11741:        [xcode]       +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] in libGoogleAnalyticsServices.a

お、それっぽいメッセージ( Undefined symbols for architecture armv7: )出てる。

ぐぐる

あれやこれやと調べていくと、 XCodeProject上でライブラリの参照が足りてないことが原因でした。

  • CoreData.framework
  • libz.tbd
  • libsqlite3.tbd

ローカルのXCodeで上記を追加したらビルド成功したので間違いなさそう。

f:id:naichilab:20161130235925p:plain

次はこれらを自動参照するようにせねば。

ライブラリの自動参照設定

Unity Cloud Buildではいちいち手動で参照設定できないので自動化する。

blog.naichilab.com

上記記事で書いたスクリプトを使い続けてるんだけど、そこに追記する。

下記を追加

     //フレームワーク追加
        List<string> frameworks = new List<string> () {
            "CoreData.framework",
            "libz.tbd",
            "libsqlite3.tbd"
        };

        foreach (var framework in frameworks) {
            pj.AddFrameworkToProject (target, framework, false);
        }

ビルド

成功した!!

GoogleAnalyticsのマニュアルみると・・・

Google Analytics Plugin for Unity - Developer Guide  |  Analytics for Unity  |  Google Developers

しっかり書いてあった!!!

f:id:naichilab:20161201000652p:plain

ごめんなさいごめんなさい。