web-dev-qa-db-ja.com

「FABException」、理由:「[Fabric] Info.plistキー「Fabric」の値はNSDictionaryでなければなりません。」 FirebaseとCrashlyticsを使用する場合

私たちのアプリで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が発生します。私は次を試しました:

  1. CrashlyticsとFabricをプロジェクトターゲットに追加すると、同じエラーが発生します。
  2. ステップ1を実行し、単体テストのターゲットに対しても同じエラーが発生します。
  3. ステップ2を実行した後、Firebase Coreを単体テストのターゲットに追加しても、同じエラーが発生します。
  4. ステップ3を実行してから、"${PODS_ROOT}/Fabric/run"を実行スクリプトに追加しますが、単体テストのターゲットでは、同じエラーが発生します。

Firebaseが正しく初期化されていないと思います。これにより、Fabricが正しく初期化されないため、失敗します。しかし、私は問題を修正する方法がわからない。任意のガイダンスや提案をいただければ幸いです。

18
user481610

この構成を変更します。

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
4
Dmitry Coolerov

エラーメッセージは非常に単純です。

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>
1
GIJOW

Crashlyticsをアップグレードして、エラーを再現しました。私の場合、次のコードを削除すると問題は解決しました。

//[Fabric with:@[[Crashlytics class]]];
1

Xcode 9

私の場合、Firebase統合の前、および他の非テストターゲットを作成する前に、ユニットテストターゲットを作成しました。私のために働いたのは、

  1. 単体テストのターゲットを削除する
  2. 新しいものを作成する
0
Ted