FirebaseApp.configure()
呼び出しにより、ユニットテストターゲットのアプリが即座にクラッシュするという奇妙な問題が発生しました。私の標準ビルドでは問題なく動作します。
なぜこれが起こっているのか考えはありますか?
スタックトレースは次のとおりです。
2018-04-18 11:42:57.252405+0100 Avalanche[14289:124354] 4.8.1 - [Firebase/Analytics][I-ACS023007] Firebase Analytics v.40007000 started
2018-04-18 11:42:57.252454+0100 Avalanche[14289:124361] 4.8.1 - [Firebase/Core][I-COR000005] No app has been configured yet.
2018-04-18 11:42:57.252712+0100 Avalanche[14289:124354] 4.8.1 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://googl/RfcP7r)
2018-04-18 11:42:57.371588+0100 Avalanche[14289:124278] [Crashlytics] Version 3.9.3 (128)
2018-04-18 11:42:57.390507+0100 Avalanche[14289:124278] *** Terminating app due to uncaught exception 'FABException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'
*** First throw call stack:
(
0 CoreFoundation 0x0000000113c0a1e6 __exceptionPreprocess + 294
1 libobjc.A.dylib 0x000000011329f031 objc_exception_throw + 48
2 CoreFoundation 0x0000000113c7f975 +[NSException raise:format:] + 197
3 Avalanche 0x000000010f654dec -[Fabric validFabricConfigFromInfoPlist:] + 353
4 Avalanche 0x000000010f654a16 -[Fabric fabricConfig] + 127
5 Avalanche 0x000000010f654bce -[Fabric APIKey] + 392
6 Avalanche 0x000000010f61e6d7 -[Crashlytics APIKey] + 55
7 Avalanche 0x000000010f62a087 -[CLSCrashReportingController APIKey] + 57
8 Avalanche 0x000000010f62977f -[CLSCrashReportingController startWithProfilingMark:betaToken:] + 257
9 Avalanche 0x000000010f61e088 __20-[Crashlytics start]_block_invoke + 637
10 libdispatch.dylib 0x0000000114b93779 _dispatch_client_callout + 8
11 libdispatch.dylib 0x0000000114b94c0a dispatch_once_f + 55
12 Avalanche 0x000000010f61de05 -[Crashlytics start] + 106
13 Avalanche 0x000000010f61e23a +[Crashlytics initializeIfNeeded] + 48
14 Avalanche Tests 0x0000000129cd440a __15+[Fabric with:]_block_invoke + 538
15 libdispatch.dylib 0x0000000114b93779 _dispatch_client_callout + 8
16 libdispatch.dylib 0x0000000114b94c0a dispatch_once_f + 55
17 Avalanche Tests 0x0000000129cd41ee +[Fabric with:] + 222
18 Avalanche Tests 0x0000000129cd5dea __14+[Fabric load]_block_invoke + 580
19 Foundation 0x0000000112cc0324 -[__NSObserver _doit:] + 298
20 CoreFoundation 0x0000000113ba5b8c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
21 CoreFoundation 0x0000000113ba5a65 _CFXRegistrationPost + 453
22 CoreFoundation 0x0000000113ba57a1 ___CFXNotificationPost_block_invoke + 225
23 CoreFoundation 0x0000000113b67422 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1826
24 CoreFoundation 0x0000000113b665a1 _CFXNotificationPost + 609
25 Foundation 0x0000000112c80e57 -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
26 Avalanche 0x000000010f6d41a7 +[FIRApp sendNotificationsToSDKs:] + 393
27 Avalanche 0x000000010f6d309e +[FIRApp configureDefaultAppWithOptions:sendingNotifications:] + 302
28 Avalanche 0x000000010f6d2eda +[FIRApp configure] + 380
29 Avalanche 0x000000010f609490 _T09Avalanche11AppDelegateCACycfc + 192
30 Avalanche 0x000000010f6094c3 _T09Avalanche11AppDelegateCACycfcTo + 19
31 UIKit 0x00000001109eb6c4 _UIApplicationMainPreparations + 1491
32 UIKit 0x00000001109eb087 UIApplicationMain + 111
33 Avalanche 0x000000010f60b447 main + 55
34 libdyld.dylib 0x0000000114c08955 start + 1
)
li
bc ++ abi.dylib:タイプNSExceptionのキャッチされない例外で終了します
クラッシュする前に、次のような多数のログエントリも表示されます。
objc[14289]: Class RCNKeyValue is implemented in both /Users/sammcneilly/Library/Developer/CoreSimulator/Devices/E62EC87E-0B07-4A83-A165-819E693AEB87/data/Containers/Bundle/Application/6C3F993F-4CEB-462F-9257-0F3C8E088BC0/Avalanche.app/Avalanche (0x10f7bdd50) and /Users/sammcneilly/Library/Developer/Xcode/DerivedData/Avalanche-ewiqmxxekhpknrhhfuyljlekgzat/Build/Products/Development-iphonesimulator/Avalanche.app/PlugIns/Avalanche Tests.xctest/Avalanche Tests (0x129e075d8). One of the two will be used. Which one is undefined.
CocoaPodsを介してFirebaseとFirebase/Crashlyticsをインストールしました。これがXcode9.3に関連しているかどうかはわかりません。これは、2つの別々のプロジェクトで発生しており、以前のプロジェクトでは発生していなかったと確信しています。
バンドルの内容を印刷しましたが、GoogleService-Info.plist
ファイルがそこにあるようです。
どんな助けでも大歓迎です!
さて、これは正しく構成されていないポッドファイルが原因であることが判明しました。私のメインターゲットとユニットテストターゲットは、次のポッドを使用するように構成されています。
pod 'Crashlytics', '~> 3.10.1'
pod 'Fabric', '~> 1.7.6'
pod 'Firebase/Core', '~> 4.8'
pod 'FirebaseRemoteConfig', '~> 2.1'
テストターゲット専用の追加のFirebaseポッド(Firebase/Core
以外)を削除し、pod install
を再度実行すると効果的でした。
なぜこれがうまくいったのか完全にはわかりませんので、誰かが私にこれを説明してくれたらとてもありがたいです。
"${PODS_ROOT}/Fabric/run"
ビルドフェーズスクリプトは、Googleのドキュメントで詳しく説明されているようにプライマリターゲットで構成されました: https://firebase.google.com/docs/crashlytics/get-started 、そしてそれを追加しますテストターゲットにも役に立たなかった...
入力してくれたすべての人に感謝しますが、Fabric
の詳細をInfo.plist
ファイルに手動で追加するとビルドエラーが発生しました。このステップはFirebaseで自動的に処理されると思います。
XCTestの実行時に同じクラッシュが発生しました。私たちはそれを回避するために以下を使用します。
if NSClassFromString("XCTest") != nil {
return true
} else {
FirebaseApp.configure()
}
このコードをinfo.plistに入れてください
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>YOUR APIKEY</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
お役に立てば幸いです。