私たちのアプリでFirebaseを使用する場合、かなり奇妙なシナリオがあります。 CrashlyticsとFabricをプロジェクトに追加せずに、プロジェクトの単体テストを実行すると、次のコードがヒットします。
@try {
[FIRApp configure];
} @catch (NSException *exception) {
DLog(@"**** Unable to configure Firebase due to exception %@", exception.description);
}
ユニットテストのデバッグ時に例外は発生しないため、firebaseが構成され、すべてが機能していると想定します。テストに合格し、問題はありません。
次に、CrashlyticsとFabricをプロジェクトに追加するだけです。これを実行スクリプトとしてビルドフェーズに追加します"${PODS_ROOT}/Fabric/run"
をプロジェクトに追加し、ユニットテストを再度実行します。ユニットテストが失敗し、私は得る:
Terminating app due to uncaught exception 'FABException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'
エラーとして、プロジェクトを実行すると、すべてがうまくいきます。テストの実行時に問題onlyが発生します。私は次を試しました:
"${PODS_ROOT}/Fabric/run"
を実行スクリプトに追加しますが、単体テストのターゲットでは、同じエラーが発生します。Firebaseが正しく初期化されていないと思います。これにより、Fabricが正しく初期化されないため、失敗します。しかし、私は問題を修正する方法がわからない。任意のガイダンスや提案をいただければ幸いです。
この構成を変更します。
def main_pods
pod 'Fabric'
pod 'Crashlytics'
pod 'Firebase/Core'
end
target 'TargetName' do
project 'Project.xcodeproj'
main_pods
end
target 'OneMoreTargetName' do
project 'Project.xcodeproj'
main_pods
end
target 'TargetNameTests' do
project 'Project.xcodeproj'
main_pods
end
target 'TargetNameSwiftTests' do
project 'Project.xcodeproj'
main_pods
end
target 'TargetNameUITests' do
project 'Project.xcodeproj'
main_pods
pod 'Utils', '~> 0.3.3'
pod 'Pod', '~> 1.4.1'
end
これに:
def main_pods
pod 'Fabric'
pod 'Crashlytics'
pod 'Firebase/Core'
end
target 'TargetName' do
project 'Project.xcodeproj'
main_pods
# Move tests inside target block
target 'TargetNameTests' do
inherit! :search_paths # add custom flag
end
target 'TargetNameSwiftTests' do
inherit! :search_paths # add custom flag
end
target 'TargetNameUITests' do
inherit! :search_paths # add custom flag
pod 'Utils', '~> 0.3.3'
pod 'Pod', '~> 1.4.1'
end
end
target 'OneMoreTargetName' do
project 'Project.xcodeproj'
main_pods
end
エラーメッセージは非常に単純です。
Info.plistのFabricキーの形式が正しくありません。
ドキュメントの状態としての辞書でなければなりません:
https://fabric.io/kits/ios/crashlytics/install
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>YOUR_FABRIC_API_KEY</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
Crashlyticsをアップグレードして、エラーを再現しました。私の場合、次のコードを削除すると問題は解決しました。
//[Fabric with:@[[Crashlytics class]]];
Xcode 9
私の場合、Firebase統合の前、および他の非テストターゲットを作成する前に、ユニットテストターゲットを作成しました。私のために働いたのは、