LoginSignup
2
0

More than 5 years have passed since last update.

iOS8 App Crash "dyld: Symbol not found: ___NSArray0__"

Posted at

iOS8でアプリ起動時にクラッシュする問題が発生

iPhoneXやXcode9.2、iOS11.2など最新ばかり対応していて疎かになっちゃう、各サービスでサポートギリギリのiOS8で動作確認した時のことです。
 

dyld: Symbol not found: _NSArray0
Referenced from: /private/var/mobile/Containers/Bundle/Application/8B40C8BE-5816-495B-98BF-2E43A2B4009B/soundATM.app/soundATM
Expected in: /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
in /private/var/mobile/Containers/Bundle/Application/8B40C8BE-5816-495B-98BF-2E43A2B4009B/soundATM.app/soundATM
(lldb)

 
上記のログは、Crash on iOS on load "dyld: Symbol not found: __NSArray0_"の一部から参照したものですが、どうもReact界隈でもここ1年以内に確認されているようですね。

調べてみた

iOS 9.2 SDK以降でビルドする際に、iOS8もサポートしたいならCoreFoundation.frameworkを設定しないとクラッシュすることになっているようです。

Apple Developer Forumsで検索してもちゃんとした回答が見つかりませんでした。

まとめ

憶測に過ぎませんが、

コンパイラの変更

64ビットデバイスにロードされた32ビットバイナリは、32ビットページサイズが4096バイトから16384バイトに変更されたため、実行できません。

iOS 8をサポートしているときにiOS 9 SDKを使用する

@ []を使用している場合、iOS 8デバイスでクラッシュする可能性があります。これを修正するには、代わりに [[NSArray alloc] init]を使用してください。

と、iOS 9の拡張機能のアップデートで解説されているため、チップやデバイス性能にも関わっているのかもしれない。
A8チップまでアーキテクチャが32ビット製だったようですが、A9チップから64ビット製のアーキテクチャとして大幅にアップグレードされています。

もしかするとiOS8が入っているiPhoneSEやiPhone6sなどのA9以上のチップが搭載されたデバイスでは、このクラッシュする問題は起きないカモです。(あ、そもそもそんな端末ないか笑

また、もしiOS9の頃から開発していたものでこれを確認された場合は、@ []が何なのかをちゃんと調べて、その内容が開発しているもので各バージョンの差分を追って、理論付する調査が必要かなとも思いました。
僕は、@ []が何なのかiOS Developerじゃないのでわかりません(もともとAndroid Developerだったもので笑

 

2
0
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
2
0