Ionicのアプリ作成時に、twitter-connect-pluginを利用していて、最初通っていたビルドが、platformのrmとadd後に通らなくなってしまった。
開発環境は
Mac 10.12.5
Cordova 7.0.1
Ionic 3.5
Fabric.app 2.6.11
twitter-connect-plugin 0.6.0
ビルドは通るものの、実機でRunが出来ない。
Undefined symbols for architecture arm64:
"_FABNetworkMaximumRetryCount", referenced from:
___51-[CLSBetaController loadUpdateWithCompletionBlock:]_block_invoke in Crashlytics(CLSBetaController.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Runするとこのようなエラーが出る。
問題になっていた(なっていなかった)経緯
色々問題の解決を試したあとに、あとで振り返ると原因となっていた経緯はこう。
- Crashlyticsの方を最初にインストール
- その後開発が進む中で"twitter-connect-plugin"をインストール
- この時点では問題ない
- iOSのプラットフォームを削除
- iOSのプラットフォームを追加・Ionic(Cordova)のビルド
- デスクトップアプリに従ってCrashlyticsの再登録、Run Scriptの登録・ビルド
- AppDelegate.m ファイルにCrashlyticsの記述を追加
- エラー
結局のところ問題だった箇所は2つ
1. Crashlyticsに提示されるAppDelegate.hの修正の内容
最初にCrashlyticsをインストールした時は、AppDelegate.mの修正内容はデスクトップアプリからこうしろと言われていた。
[Fabric with:@[[Crashlytics class]]];
依存関係からなのかなんなのか(詳しい人がいたら是非教えてください!)、経緯の6でCrashlyticsを再登録しようとしたときはこう言われる。
[Fabric with:@[[Twitter class], [Crashlytics class]]];
AppDelegate.mにはTwitterKitを読み込んでいないので、当然Twitterのところでエラーになる。
またTwitterKitを読み込んでも、キーとシークレットがないとエラーになる。
FabricがTwitter系のフレームワークを読み込んでると判断して、自動でTwitterの認証を初回に通すためにいれているのかな。
ここのところはちょっと詳しくわからなかったけど、前者のTwitterのない方で修正すると上手く通った。
ここらへんの、FabricとTwitterの依存関係は、FabricがGCPファミリーになるので修正されていって欲しい。
2. twitter-connect-pluginのファイルのバージョン
プラグインに含まれているFabric.frameworkのバージョンが昔のものだった。
経緯の3で問題なかったのは、Crashlytics導入時に最新版のframeworkファイルが既にXcode内に登録されていたため。
ビルド時にプラグインのファイルはコピーされなかった。
再ビルド時には、まだCrashlytics導入前だったため、プラグインのframeworkファイルがコピーされるので、8の箇所でエラーが発生。
下記の本家サイトからDLできるファイルを導入してあげると問題なくRunまでいった。
ということで、プルリクを投げてみている。
https://github.com/ManifestWebDesign/twitter-connect-plugin/pull/61
プルリク元のフォークしたリポジトリはこちら
https://github.com/donuzium/twitter-connect-plugin