28

現在、拡張機能は個別のプロセスとして実行されているため、すぐにクラッシュが記録されることはないと確信しています。ウィジェットで Crashlytics を個別に初期化する必要があると思います。たとえば、のviewDidLoadメソッドでTodayViewController

  • iOS / OS X 拡張機能内で Crashlytics を既に使用している人はいますか? もしそうなら、どのように実装しましたか?
  • 拡張機能のためだけに Crashlytics で別のアプリを作成することが理にかなっているのかどうかも疑問に思っています.
4

5 に答える 5

30

Crashlytics のサポートから連絡があり、これらの手順を提供してくれました。それらをテストしたところ、iOS 8 アプリで動作するようになりました。

  1. Crashlytics Run Script Build Phase を拡張機能のターゲットにも追加します (メイン アプリに追加したものをコピーして貼り付けます)。

  2. 拡張機能のリンクされたライブラリに を追加Crashlytics.frameworkします (たとえば、ファイル インスペクターで拡張機能のターゲットを確認するだけです)。

  3. Crashlytics.startWithAPIKey("yourApiKey")を拡張機能のビュー コントローラーのinitWithCoderメソッドに追加します。(Apple の今日の拡張テンプレートでは TodayViewController、デフォルトで呼び出されます)

    >initWithCoderメソッドがまだない場合は、後で次のようになります。

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    
于 2014-11-26T15:49:17.693 に答える
8

これを実装するためのTwitter独自のガイドは次のとおりです。

https://twittercommunity.com/t/integrate-fabric-crashlytics-with-ios-8-extension/28905

したがって、ライブラリをコピーします。たとえば、CocoaPods を使用している場合は、Fabric と Crashlytics を Extension ターゲットに追加できます。

Podfile で:

target :TodayExtension do
  pod 'Fabric'
  pod 'Crashlytics'
end

実行しますpod installBuild Active Architecture Onlyに設定することを忘れないでください。そうしないとNO、リンカー エラーが発生する可能性があります。

次に、TodayViewController で:

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>

...

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    [Fabric with:@[CrashlyticsKit]];
    return self;
}

ビルド フェーズの Fabric Run Scriptを Today Extension ターゲットにコピーし、メイン アプリケーションの info plist から Fabric エントリを Today Extension の info plist にコピーします。

于 2015-08-17T11:18:16.463 に答える
6

iOS 拡張機能で Crashlytics を使用する方法を説明した公式のハウツーを次に示します。

  • viewControllerこの行をのinitWithCoderメソッドに追加しますFabric.with([Crashlytics.self])
  • メイン アプリの Info.plist から "Fabric" 辞書をコピーし、拡張機能の Info.plist に貼り付けます。
  • Run Script Build Phase をメイン アプリのターゲットから拡張機能の Run Script Build Phase にコピー アンド ペーストします。

そして... 準備万端です!

于 2016-06-23T22:33:27.033 に答える
5

iOS 8.0 以降で拡張機能を共有するために Crashlytics を追加する場合も、maremmle からの回答が機能します。最初の ViewController のメソッド[Crashlytics startWithAPIKey:@"apiKey"];内に配置することを忘れないでください。init

于 2015-05-19T20:34:55.603 に答える
1

すべての指示に感謝します。私の共有拡張機能では問題なく動作します。

共有拡張機能について、Fabric Answers ダッシュボードに次の実際のデータが表示されないことに気付きました。

  1. アクティブ ユーザー
  2. ユーザーあたりのアプリ使用時間の中央値

コンパニオンアプリの場合です。そのため、Answers SDK がこれをどのように判断するのか疑問に思っていました。最も論理的なのは、UIApplication 通知を監視することです。拡張機能のライフサイクルは ViewController に関連しているため、これらの UIApplication 通知は投稿されません。したがって、Fabric はエクステンションがいつアクティブになるかを知りません。

そこで、ファブリック ダッシュボードで上記のデータを提供する次のソリューションを実装しました。

  1. 拡張機能のメイン ViewController の「viewDidLoad」で、Fabric の開始をトリガーする UIApplicationDidBecomeActiveNotification をポストします。
  2. ( completeRequestReturningItems:completionHandler:またはcancelRequestWithError:を介して) 拡張機能を閉じる前に、UIApplicationWillResignActiveNotification を投稿します。これにより、ファブリックの停止がトリガーされます。

デバイスでのアクションと、データがダッシュボードに表示されるまでには遅延があることに注意してください。特にアクティブ ユーザー向けです。拡張機能が表示されてから約 20 ~ 30 秒かかります。ただし、拡張機能を閉じると、アクティブ ユーザー数が減少するまでに最大 5分かかる場合があります。

于 2017-05-24T12:51:28.237 に答える