普段 Windows で開発、Apple ストアに出すときだけ Mac を使う。
Linux も bash(zsh?) も苦手だから出来る限り目を瞑りたい。でも動かない。
こんな人であれば、少しは役立つ情報が混じっているかもしれません。
unity2019.4.24、Firebase7.1.0 にて確認。
Cocoapods が入っていない
iOS の Firebase インストールには Cocoapods というバージョン管理ツール? が必要ですが、Mac OS X Catalina には標準搭載されておらず、unity Firebase の iOS Resolver でインストールしようとしてもエラーになってしまいました。
結局手動で入れることに。その顛末はこちら。
Mac 使いには簡単なことでも、結構右往左往しました。
xcodeproj ではなく xcworkspace で開く必要がある
プチハマり第1弾。xcodeproj だと XCode ビルド時にエラーになってしまいますので、xcworkspace から開きます。
なお、後から知りましたが Firebase の iOS Resolver/Setting で、こんな設定がされていました。
これを Xcode Project にすると xcodeproj でもいいのかもしれないのですが、そちらは試しておりません。
iOS Resolver とは
Firebase をインストールすると、メニューに Assets/External Dependency Manager なるものが追加されています。Firebase のインストールは(機能が多いのもあり)複雑なので、出来るだけ自動で簡単に、というヘルパーだと思います。
Undefined Symbol: _Firebase_XXX
これは完全に自分の落ち度。恥ずかしいけどそのまま公開。
Mac の理解度が浅いままこういう事をやると、こんなうっかりでも致命傷になりかねない…反省。
どうりでネット探しても、同じことで引っかかってる人いなかった
Windows で作成したプロジェクトを svn 経由で Mac にインポート…したつもりが、どうやら libXXXXXX.a をリポジトリに追加していませんでした…。
そしてこれに気づかず、XCode でコンパイルすると 大 量 の エ ラ ー。
Undefined symbol: _Firebase_...
C# に慣れきって、C++ の事情などすっかり忘れた身には厳しい状態でしたが、以下のような確認手順を進め、原因が発覚。
(そもそも unity の警告をちゃんと見ていれば不要でしたが…)
エラーが ld(リンク)で起こっている
→ Firebase のリンクなので多分 iOS 用のフレームワークが見つからず、エラーになっている
→ パスを通す必要性?
→ そもそも Firebase の iOS 用フレームワークってどこにあるんだっけ…?
→ フレームワークが見当たらない事に気づく
(それ以外にも not found for architecture arm64 で散々探したり、結構迷走しました…)
これに該当する人はほぼいないと思いますが、対処法は…ですね?
カカッとリポジトリに必要なファイルを追加。
Link frameworks statically にチェックを入れないとエラーになる
よし、これでさすがにビルド通るだろう! と思いましたが、壁はまだありました。
Undefined Symbol: _OBJC_CLASS_$_GKLocalPlayer
これについては、同じエラーだけど解決方法が(ネット記事では)バラバラで、どれも該当しそうな記事も見当たりませんでした。
半ば諦めつつ、色々やっていたオペレーションの1つが、たまたま上手くいきました…。
Link frameworks statically にチェックをつける
iOS Resolver - Settings にある Link frameworks statically にチェックをつけます。
framework って単語や、static なら(なんか実行ファイルに)埋め込んでくれるんじゃね? というアバウトな発想でしたが、やってみるもんですね…。
ちなみに、Firebase 公式サイトにはこんな事も書かれていました。
CocoaPods1.9.0およびFirebase7以降では、Firebaseの依存関係を静的フレームワークとして構築するか動的フレームワークとして構築するかを選択できます。特定のダイナミックライブラリの動作が必要な場合を除いて、静的フレームワークを使用することをお勧めします。
Firebaseの依存関係を静的または動的にリンクする
なら…最初からチェックつけてよ…っ…!
なるほど。Firebase7 からのルールで、まだこなれていない部分なのでしょう。
日々、大量の要件に追われ、常にバージョンアップを続けているライブラリ開発者の方には感謝です(本当です)。