Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ライブラリーだってクラッシュレポートが見たい
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Victor Lee
May 14, 2019
Programming
570
0
Share
ライブラリーだってクラッシュレポートが見たい
Victor Lee
May 14, 2019
More Decks by Victor Lee
See All by Victor Lee
Create Flutter Plugins
konyavic
2
2.6k
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
konyavic
2
1.3k
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
560
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
300
SDK開発にUIテストを導入してみた
konyavic
1
2.3k
Other Decks in Programming
See All in Programming
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
530
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
220
継続的な負荷検証を目指して
pyama86
3
1.4k
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
810
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
3
240
自動レビューエンジンの実装と運用 ~レビューのない世界へ~
kurukuru1999
1
170
ECR拡張スキャンでSBOMを収集して サプライチェーン攻撃の影響調査を 爆速で終わらせてみた
akihisaikeda
2
180
横断組織出身のQAEがインプロセスQAEでつまずいたこと・活かせたこと
ty89
0
170
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
130
Swiftのレキシカルスコープ管理
kntkymt
0
180
Moments When Things Go Wrong
aurimas
3
100
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
140
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
220
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
Rails Girls Zürich Keynote
gr2m
96
14k
Utilizing Notion as your number one productivity tool
mfonobong
4
300
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
How to Talk to Developers About Accessibility
jct
2
200
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
How to make the Groovebox
asonas
2
2.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
110
Documentation Writing (for coders)
carmenintech
77
5.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
270
Transcript
ライブラリーだって クラッシュレポートが⾒たい 2019/05/13
• @konyavic • OS→Game→VC→Repro (2017/07~) • SDK: Java/Obj-C • Testing:
Kotlin/Swift • Backend: Go/Rails • 最近はannotation processingに ハマってる 李 承益(りちぇんい) ࣗݾհ
※2017年の情報
• アプリだといろんなサービスが使える • Crashlytics • Firebase Crash • Developer Console
• SmartBeat • ΫϥογϡϨϙʔτ࣭վળͷͨΊͷॏཁͳπʔϧ ライブラリーを作る側としても、 ⾃分が出したライブラリーがどんなクラッシュを起こしているか把握したい!
• SIGABRT, SIGSEGVを検知する • POSIX sigaction(2) • 4.0BSD signal(3) •
未処理の例外を検知する • Java • Thread.setDefaultUncaughtExceptionHandler • Objective-C • NSSetUncaughtExceptionHandler ΫϥογϡϨϙʔτΛ࣮ݱ͢ΔͨΊͷखஈ 何かしらの⽅法でクラッシュを検知し、 クラッシュレポートを⽣成してアップロードする
• アプリ本体のクラッシュと区別しないとまずい! • SDKはmain threadで動くことが少ないこともあるので、 ⼀つの解決策としては、thread name/queue labelで区別すること • 他のクラッシュ検知SDKと共存できるようにしないとまずい!
• Crashlytics • Firebase Crash Ϋϥογϡݕͷલఏ
• SDKのthread nameに`io.repro.`のprefixを必ずつける • UncaughtExceptionHandlerを実装する • Thread nameを⾒て、処理するかどうかを判別 • 最後に本来のhandlerを呼び出すようにリレーする
• これで問題なくCrashlytics/Firebase Crashと共存可能 AndroidͰͷ࣮ Android側はJavaの例外処理だけで⼗分なので、UncaughtExceptionHandlerで実装する
• AndroidのUncaughtExceptionHandlerと同じようにsignal handlerを リレーする必要があるけど、 • Crashlytics/Firebase Crashは共にリレーしてくれない • 初期化するときは⾃前のsignal handlerが⼀番最後にインストー
ルするようにしないといけない • Firebase Crashにリレーできても、なぜかSIGSEGVの場合だけ Firebase Crashのhandler内で更にクラッシュが発⽣する iOSͰͷ࣮ (1) iOS側はsigaction/signalの実装でうまくFirebase Crashと共存できなかった
• SDKのdispatch queue labelに`io.repro.`のprefixを必ずつける • NSUncaughtExceptionHandlerを実装する • queue labelを⾒て、処理するかどうかを判別 •
最後に本来のhandlerを呼び出すようにリレーする • これで問題なくCrashlytics/Firebase Crashと共存可能 • しかし、このhandlerに⼊ること⾃体は稀なので、 ほとんどクラッシュレポートが⾶ばない… iOSͰͷ࣮ (2) iOS側も結局NSUncaughtExceptionHandlerで実装した
• signal handlerでブレークポイントを貼っても⽌まってくれない • Simulatorだと、そもそもhandlerを置換できていないようにみえる • 勝⼿にアドレスが変わる… ͓·͚(1) Xcodeではsignalのデバッグができない
• 実機でしか確認できない、デバッグモードで確認できない • => ログファイルに書き出し、実験後に回収して確認する • ios-deployを割と使えた • $ ios-deploy
-W -Lrb xxx.app • $ ios-deploy -Ww -1 bundle.id -2 DIR • Crashlytics/Firebase Crashはすぐに反映してくれなかったりする • => 実験して、翌⽇まで反映待ち… ͓·͚(2) iOSでCrashlyticsとFirebase Crashと共存できているかの確認は⼤変だった
• Android • java.lang.OutOfMemoryError • android.os.DeadSystemException • FATAL EXCEPTION in
Unity App - no stack trace available • iOS • Failed to grow buffer • unrecognized selector sent to instance ͓·͚(3) 普通にクラッシュレポートを全部集計するとOOMばかりになる
• 今まで気づいていないし、お客さんからも報告されていないバグを結 構修正できた! • でももう2度と触りたくない! ݁ہΫϥογϡϨϙʔτػೳΛ࡞ͬͯΑ͔͔ͬͨʁ