web-dev-qa-db-ja.com

iOS / OS Xの今日のビュー拡張機能でCrashlyticsを使用する方法は?

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

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

Crashlyticsのサポートから連絡があり、これらの手順が提供されました。私はそれらをテストしました、そしてそれは今私のためにiOS8アプリで動作します。

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

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

  3. Crashlytics.startWithAPIKey("yourApiKey")を拡張機能のViewControllerのinitWithCodermethodに追加します。 (Appleの今日の拡張テンプレートでは、デフォルトでTodayViewControllerと呼ばれます)

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

    _required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    _
28
martn_st

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

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

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

ポッドファイル内:

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

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

次に、TodayViewControllerで:

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

...

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

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

8
andrrs

これが officialhow-to iOS拡張機能でCrashlyticsを使用する方法を説明しています:

  • この行をviewControllerinitWithCoderメソッドFabric.with([Crashlytics.self])に追加します
  • メインアプリのInfo.plistから「Fabric」辞書をコピーして、拡張機能のInfo.plistに貼り付けます。
  • メインアプリのターゲットからスクリプト実行フェーズをコピーして、拡張機能のスクリプトビルドフェーズに貼り付けます。

そして...あなたは行ってもいいです!

6

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

5
edulpn

すべての指示をありがとう、それは私の共有拡張機能でうまく動作します。

Share Extensionの場合、Fabric Answersダッシュボードに次の実際のデータが表示されないnotことに気づきました。

  1. アクティブユーザー
  2. ユーザーあたりのアプリで費やされた合計時間の中央値

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

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

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

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

1
Martijn