(1)リジェクト対応:3作目のアイフォンアプリ申請でリジェクトされました。Retina判別が不十分。
前回の申請の記事7月10日
リジェクト理由:iPad,iPhone5で画像が正常に表示されていない(意訳と原因の解釈を追加して理由を記載しています。)
原因:iPadにおけるレティナ、非レティナでの判別処理が不足。そのために、非レティナの状態で、レティナ用の画像が表示され、画像が正常に表示されていませんでした。画像の一部しか表示されない状態。
対応:iPadレティナ、非レティナでの判別処理を改善しました。スクリーンショット2枚が添付されていたので、原因究明が楽でした。iPhone5も正常に表示されていないとコメントされていますが、おそらくiPadのみが正常に表示されていないのだと思うので、iPadの確認を重視します。
retina判定で、
(1)([[UIScreen mainScreen] respondsToSelector: @selector(scale)]
を
(2)([[UIScreen mainScreen] respondsToSelector: @selector(scale)] && [[UIScreen mainScreen] scale] == 2.0)
として、レティナかどうかの判定を追加して、シミュレータでiPad非レティナで動作確認ができるようになりました。
いままでは、実機のiPadretinaで動作していて、シミュレーションでiPad非レティナの判別ができませんでした。
そのためiPad非レティナは、一部のコードをiPad非レティナにわざわざ書き換えて動作確認をしていました。
これで、シミュレータのデバイス選択をすれば、正常に確認できるようになりました。
なぜ(1)のみで確認したのかというと、ネットの情報からであり、実機のiPadRetinaでも正常に動作していたからです。しかし、iPad非レティナでも、レティナ用画像が表示されているようでした。
つまり、(1)のみでは、レティナかどうかを判別するための情報が不足していたようです。
iPadレティナの実機で確認できたので、OKと思い込んでいたようです。
[c]
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM()!=UIUserInterfaceIdiomPhone)
NSString *model = [[UIDevice currentDevice] model];
NSLog(@"model=%@",model);
if (IS_IPAD) {
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
CGSize result = [[UIScreen mainScreen] bounds].size;
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
NSLog(@"iPad-HD.width=%f",result.width);
}else{
//nomal ipad
CGSize result = [[UIScreen mainScreen] bounds].size;
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
NSLog(@"iPad.width=%f",result.width);
}//if
}
[/c]