web-dev-qa-db-ja.com

iOS:InitでCrashlyticsがクラッシュする

AppDelegateで、

[Fabric with:@[CrashlyticsKit]];

そして、すべてが正常に動作します。ここで、コードを別のマシンにプルしましたが、同じ行で次のエラーが発生します。

*** Terminating app due to uncaught exception 'FabricException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'

私は自分のプロジェクトのplistに追加されていることに気づいていません。このエラーが何を指しているのか、そしてそれを修正する方法はありますか?

23
Maxwell

Fabricは、インストール時にアプリケーションのplistに大量のテキストを自動的に挿入します。これらは必須であり、存在しない場合、Fabricは初期化で例外をスローします。

残念ながら、実際にはこれを行っているとは言えないため、ツールによってplistが自動的に生成されたプロジェクトでこのクラッシュが発生しました。これにより、Fabricが追加したものが上書きされました。

参考までに、これは現在のバージョンでのplistのFabric部分の外観です(バージョン番号がどこにあるかはわかりませんが、2015年6月15日現在の最新バージョンです)。

<key>Fabric</key>
<dict>
        <key>APIKey</key>
        <string>your-api-key</string>
        <key>Kits</key>
        <array>
                <dict>
                        <key>KitInfo</key>
                        <dict/>
                        <key>KitName</key>
                        <string>Crashlytics</string>
                </dict>
        </array>
</dict>
31
JosephH

ファブリックアプリを使用してこれを解決するもう1つの方法。

  1. Fabricアプリを起動し、ユーザーIDでログインします。
  2. [新しいアプリの追加]をクリックします
  3. .xcodeprojファイルを選択し、画面の指示に従います

.infoplistファイルにFabricキーを手動で追加しないでください

5
UIResponder

それはちょうど私に起こりました、そしてこれは私がそれを解決した方法です(みんなへのリードに感謝します)。

Context:Xcodeプロジェクトに複数の異なるターゲットがある場合、MacFabricアプリで新しいアプリを作成するだけでは明らかに不十分です。

解決策:同じプロジェクトを選択した場合(たとえば、Proバージョン用に作成する場合)、FabricアプリがProの.plistに正しくアクセスしません。したがって、非プロバージョンの.plistのFabricディクショナリエントリをコピーして、プロバージョンに貼り付けるだけです。 APIキーは組織レベルで実行されるため、これが正しい方法です。

このソリューションでは、Crashlyticsを更新する必要がありました。設定した他のターゲットには最新バージョンがあり、それらは正常に機能していましたが、最新のアップデート(この投稿の時点では3.0.9)で問題が修正されているようです。

2
Maxwell

私にとっての理由は:

新しいターゲットを作成している間、新しいInfo.plistファイルが自動的に作成されます。したがって、FabricプロパティをすべてのInfo.plistファイルに配置する必要があります。

<key>Fabric</key>
<dict>
    <key>APIKey</key>
    <string>43336ce109856f4452829a8e6b6783886fefb</string>
    <key>Kits</key>
    <array>
        <dict>
            <key>KitInfo</key>
            <dict/>
            <key>KitName</key>
            <string>Crashlytics</string>
        </dict>
    </array>
</dict>

最初はそれを見逃し、このコードを最初のコード(最初のInfo.plistファイル)にのみ配置しました。

0
Naloiko Eugene

これは奇妙に見えるかもしれませんが、同じ問題が私に起こりました、そしてこれは私が問題を解決した方法です。複数のターゲットとスキームを持つプロジェクトがあります。また、単体テストとUIテスト用に2つの追加のターゲットがあります。解決策は、[スキームの管理]> [編集]> [ビルド]の[分析]、[実行]、[プロファイル]、[アーカイブ]タブからこれらのテストターゲットのチェックを外すことでした。下の画像を参照してください:

enter image description here

0
Jazzmanouch

私の2セント:「myApp」のplistではなく「myAppTests」のplistに間違いを追加します。したがって、Eugeneも指摘したように、すべての.plistを追加するように注意してください。

0
ingconti

ファブリックキータイプを文字列から辞書に変更するだけです。 your-project-info.plist> Fabric> kits> item0> KitNameに移動し、タイプをDictionaryに変更します。問題は解決しました

0
Tallha Sarwar