私のコードは次のようになります。
CGRect screenRect = [[UIScreen mainScreen] bounds];
SomeView *infoView;
if(screenRect.size.height != 568.0){
// iPhone 5/5s users crash in the next line
infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:1];
}else{
infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:0]
}
ただし、上記のコードのコメントとして、Crashlytics から iPhone 5/5s ユーザー向けのクラッシュ レポートを取得しています。
私のアプリは縦向きのみをサポートしているため、5/5 秒で高さが 568 ではないことに驚きました。何百人ものアクティブ ユーザーがいますが、4 人のユーザーで発生したクラッシュは 12 回だけです。
また、iPhone 5/5s デバイスが間違ったペン先 (3.5 インチ スクリーン用) をロードしても、クラッシュすることはありません。(私はちょうどテストしました。)
http://crashes.to/s/1ddc169b801
Crashlytics は、クラッシュの 90% がジェイルブレイク デバイスで発生していることも示しました。
Fatal Exception: NSInvalidArgumentException
-[UIDeviceRGBColor superview]: unrecognized selector sent to instance 0x14732db0
0
CoreFoundation
__exceptionPreprocess + 130
1
libobjc.A.dylib
objc_exception_throw + 38
2
CoreFoundation
-[NSObject(NSObject) doesNotRecognizeSelector:] + 202
...
22
UIKit
-[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 138
23
Banck
BKAddRecordPagingViewController.m line 244 // line 244 is loadNibNamed
-[BKAddRecordPagingViewController viewDidLoad]
クラッシュ レポートのリンクに理由が示されていますが、nib ファイルで組み込みの UILabel、UIImageView、UITextView のみを使用しているため、理由がわかりません。
脱獄デバイスで4インチの画面を使用しているかどうかを確認するためのアドバイスを誰かに教えてもらえますか? 2 番目の質問は、loadNibNamed 内でのクラッシュの原因は何ですか?