画像収集アプリ Illustail の動画対応を行いました。
apps.apple.comそれ以降TwitterでIllustailが起動しないという報告をいくつか見かけたのですが、再現できず困っていました。ありがたいことに環境など詳しく教えていただくことができ、ローカル環境でも再現することができました。
現象としては
- iOS14実機で起きる
- Xcodeから起動するとReleaseビルドでも起きない
- TestFlightとAppStoreビルドでだけ起きる
- クラッシュログは残らない
- Console繋げてるとWidgetExtensionの起動に失敗しているぽいログが見える
というかんじで、Crashlytics等にログも上がらない上にTestFlightで配信しないと再現しないというとても厄介なものでした。
唯一Consoleを繋いでいるとそれっぽいログが出ます。
エラー 22:17:48.374952+0900 chronod [org.cathand.illustail.Widget] Unable to create new WidgetExtensionSession because begin request failed: Couldn’t communicate with a helper application. エラー 22:17:48.375164+0900 chronod [org.cathand.illustail.Widget] query failed - retrying in 3 seconds (1 attempts remaining): Error Domain=ChronoCoreErrorDomain Code=5 "unable to obtain widget extension session" UserInfo={NSLocalizedDescription=Remote context unavailable, NSDebugDescription=unable to obtain widget extension session}
なんかWidgetExtensionの起動に失敗してるっぽいけどよくわかんないなーと思ってその日は寝ました。
寝てる間に@k_katsumiさんからリプいただいていました(ありがとうございます)。
Exception Note: EXC_CORPSE_NOTIFY
— kishikawa katsumi (@k_katsumi) 2021年12月11日
Termination Description: DYLD, dyld: Using shared cache: EC12EBDC-CAE3-34EC-ACCB-0B6E5ABC73EB | dependent dylib '@rpath/libswift_Concurrency.dylib' not found for
こういうログが出ていたので https://t.co/mGD4mQrxZt ですね。
libswift_Concurrency.dylibを明示的にweak linkするとおそらく直ります。で、Concurrencyをリンクしている犯人はRealmSwiftっぽいですね。ログによると。
— kishikawa katsumi (@k_katsumi) 2021年12月11日
https://t.co/iJkCVsIPHXhttps://t.co/tKA9d3cCrv
— kishikawa katsumi (@k_katsumi) 2021年12月11日
Realmは把握してるっぽいです。対処法はやはりWeak LinkにするかBitcodeをOffでも直るっぽいですけどBitcodeの方はなんでそれで直るのかは私にはわからないです。
なんかそういうバグらしいですね…。とりあえずBitcodeオフで直るようなので
- Illustail 4.2.2 で Widget Extension の Bitcode をオフにする
- Illustail 4.2.3 以降では Bitcode をオンにしてサポートOSをiOS15以降にする
という対応にします。既に修正された Illustail 4.2.2 はリリースされていますので、そちらをお使いください。
コードの変更だけでビルド環境等は変更していないはずなんですが、この現象が何故急に発生するようになったのかだけが不思議です。