macOS Montereyになってからプログラム開発時のクラッシュファイルの仕様が変更になって困った件について

ここのところ、精力的に自作アプリの開発に時間を割いているのですが、macOSアプリの開発で一番ハードルが高い作業が、クラッシュレポートの解析です。

アップルにアプリの公開を申請した際、クラッシュしたので再提出するようリジェクトされる場合、アップルのレビュアーさんは親切にクラッシュレポートと送ってくれます。レポートといっても人が見て分かるような内容ではないので、難解なコードをシンボリック、つまり人が見ても分かるように内容を書き換える必要があります。

これまでは、”MacSymbolicator“という神ツールのお陰で、クラッシュレポートとアップルに提出したアプリのなかに入っている”.dSYM”というファイルがあれば、面倒なシンボリック作業をあっという間にやってくれたので、とても助かっていました。

ただ、macOS Montereyになってから、クラッシュレポートの拡張子が”.crash”から”.ips”に変わり、内容もjson形式になったそうなので、これまでのように”MacSymbolicator”を使えなくなってしまいました。

 

仕方がないので、”Adding Identifiable Symbol Names to a Crash Report“などを参照しながらシンボリック作業にトライしてみました。

やり方としては、大きく2通りがあるらしく、

1つ目が、

xport DEVELOPER_DIR=”/Applications/Xcode.app/Contents/Developer”

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 〜

というコマンドを使う方法。

しかし、この方法だと”No crash report version in 〜”というエラーになり、クラッシュレポートを解析できません。

 

2つ目が、

atos -arch arm64 -o 〜

というコマンドを使う方法。こちらは、先ほどのアップルの解説ページに掲載されている方法です。しかし、実際にやってみると、

pecialized View.frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:) (in xxxx) (<compiler-generated>:0)
closure #1 in closure #1 in closure #1 in closure #1 in closure #1 in EventListView.body.getter (in xxxx) (xxxxView.swift:35)

といった具合に、全く見当違いの箇所をクラッシュした部分として解析してしまいます。ちなみに、上記の.frame(minWidth〜 という構文はプログラムでは全く使っていません。

 

このままだと、アップルにアプリを再提出できないので困っていたところ、”ips2crash“というコマンドラインがあることが分かったので、藁をも掴む思いで試してみることにしました。このコマンドラインは”.ips”ファイルを”.crash”ファイルに変換してくれるツールです。

この先の解説は、ド素人が強引にやった手順ですので、コマンドラインに精通している方が見たら笑われること間違いありません。とは言え、多くの開発者がコマンドラインをビルドして正しい手順でセットアップできるわけでもないので、結果オーライ的な乗りで読んで下さい。

先ほどの”ips2crash”をダウンロードしたら、”ips2crash.xcodeproj”を開いてビルドなりRUNなりします。

続いて、XcodeのProductメニューにある”Show Build Folder in Finder”を使って、ビルドしたデバッグ用の”ips2crash”を手元にコピーします。

最後に、sudo cp -f /Users/pooh/work/ips2crash /usr/local/bin

とターミナルで打って、アクセル権云々を無視して”ips2crash”を/usr/local/binフォルダにコピーします。これで、”ips2crash”ターミナルでコマンドとして実行できるようになります。

で、

ターミナルで、ips2crash <“.ips”ファイルのパス> -o <“.crash”ファイルのパス>

と打てば、待望の”.crash”ファイルに変換できます。

仕上げに、”MacSymbolicator”を使えば、

シンボライズされた”.crash”ファイルの出来上がりです。このファイルの内容を見れば、具体的なクラッシュ部分が分かります。

今回は、2つの神ツールのお陰で、アップルの審査を無事パスすることができました。

 

最後にアップルさんに意見です。

大昔から、macOSアプリのクラッシュレポートは普通の人間には手に負えない存在です。開発者のなかには、私のように個人で開発を楽しんでいる者もいて、クラッシュレポートを難なくハンドリングできるような専門的なノウハウを知る方法がありません。加えて、macOS向けのアプリ開発に関する情報はネット上に殆どありません。アップルさんとしては、M1 Macへの移行に合わせて、macOSとiOSアプリの開発の敷き居をなくしたいという思惑があるんだと思いますが、macOSアプリ開発に関するサポートが甘い状況で、一気にiOSアプリの開発に近づけようとするのは、開発者への負担を想像以上に強いることになっていることを理解して下さい。

実際のところ、アプリを申請する時には、実際のアプリを送っているわけですから、リジェクトする際、シンボライズ後のクラッシュレポートを開発者にフィードバックしてもらえないものでしょうか? ま、クラッシュするアプリを申請した側が悪い、という説もありますが、アプリのテスト力に関しては、アップルのレビュアーさんたちには適いません。

どうか、検討のほど、よろしくお願いします。

 

ホームページ  THE POOH FILES”にも是非お立ち寄り下さい。

Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。

*** 自作のmacOSアプリはこちらでチェックしてみて下さい。 ***

*** 自作のiOSアプリはこちらでチェックしてみて下さい。 ***

tomohiko

長年に渡りMacintosh向けの自作アプリを作り続けているPOOHです。最近はiPhone,iPad向けアプリ開発にも挑戦中。グルメ、旅行、露天風呂、写真、サイクリング、映画、STAR TREKが大好き。レトロでSFなおもちゃを大量にコレクション。プレーリードッグと同居中。

おすすめ

コメントを残す