LoginSignup
1
1

More than 5 years have passed since last update.

kivyベースのiOSアプリにCrashlyticsKitを組み込むまで

Posted at

※ソースを読んで咀嚼した内容で書いてます

PythonでiOS/Androidアプリを開発できるフレームワークに、Kivy があります。
個人的に気に入ってちょくちょく触っているのですが、せっかくなのでクラッシュレポート解析サービスのCrashlyticsを組み込んで、クラッシュ時の情報を収集できるように取っ掛かりを進めてみました。

前提

  • buildozerを使って、kivyの最小構成Pythonを用意する。
  • そのままbuildozerでipaファイルを作成できることを確認するまで進める。
  • 途中の準備構築はスキップ(あとで書くかも)

ここまでを簡単に書く

$ (いろいろインストールなどをする)
$ pip install buildozer
$ mkdir kivyapp
$ cd kivyapp
$ buildozer init
$ buildozer iOS debug
IPA kivyapp-0.0.1.ipa available in the bin directory

何が面倒か

CrashlyticsKitの組み込みかたおさらい

CrashlyticsKitの組み込み自体は至極簡単で、main内で呼ばれるApplicationDelegateクラスがあれば、メソッドdidFinishLaunchingWithOptionsの中に [Fabric with:@[CrashlyticsKit]]; を突っ込むだけでOKです。
※Fabricから始めればチュートリアルが出て非常に親切なので、こっちだけなら非常に簡単です。

Kivy-iosのmain()

kivy-ios上にあるmain()関数を定義しているソースのテンプレートがこちら
通常のiOSアプリと違って、UIApplicationMainが呼ばれていません。
処理をトレースしてみると、こっちで呼ばれているようでした。
Delegateクラスは同じソース内のSDLUIKitDelegateで定義されていたので、処理を差し込むのが面倒そう。

どうしたか

これらのソースを差し込みました。すごいゴリ押し。

// .h file
@interface SDLUIKitDelegate (KivyAppDelegate)

@end

// .m file
@implementation SDLUIKitDelegate (KivyAppDelegate)

+ (NSString *)getAppDelegateClassName
{
    return @"KivyAppDelegate";
}

@end

こっちの実装でSDLUIKitDelegateのカテゴリ機能で呼ばれるべきDelegateクラスを無理やり書き換え、

// .h file
@interface KivyAppDelegate: SDLUIKitDelegate

@end

// .m file
@implementation KivyAppDelegate

-(void)postFinishLaunch
{
    [Fabric with:@[CrashlyticsKit]];

    // call superclass method.(continue to run as kivy)
    [super postFinishLaunch];
}

@end

こっちで、SDLUIKitDelegateを継承したKivyAppDelegateでpostFinishLaunch()をオーバーライドしてCrashlyticsKit呼び出しを差し込む。(なお、SDLUIKitDelegate自体のpostFinishLaunchにKivyのメイン動作があるので、必ずオーバーライドメソッドで呼ぶ)

これで、どうにかCrashlytics側にアプリを登録できた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1