こんにちは、コン(@pippi_kon)です。
先日、私が作成したiPhoneアプリがAppStore審査でリジェクト(Guideline 2.4.1)されてしまいました。
四苦八苦しながらもなんとか原因が特定でき、審査を通過することができました。
そこで今回は、iPhoneアプリの審査が「Guideline 2.4.1 – Performance – Hardware Compatibility」でリジェクトされた時の原因と対処方法についてご紹介します。
Guideline 2.4.1の原因
「Guideline 2.4.1 – Performance – Hardware Compatibility」の原因はiPhone向けに作成したアプリがiPadに対応できていないということです。
iPhone向けなのになぜiPadに対応しないといけないの?
と思う方もいらっしゃると思います。私もそうでした。
ちなみにiPhone向けというのは、具体的にはXcodeのDeployment InfoのDevicesに「iPhone」を指定した状態のことです。
リジェクトされた時のメールをじっくり読んでみると…
英語なのでわかりませんでした(汗)
でもご安心を!
日本語版のApp Store審査ガイドラインがちゃんとあります。(さすがApple)
確認するとこんなことが書いてありました。
ユーザーがアプリケーションを最大限に活用できるよう、iPhone向けのアプリケーションは可能な限りiPadでも実行できるようにしてください。Appleは、ユーザーがすべてのデバイスで使用できるように、ユニバーサルアプリケーションの構築を検討するようおすすめしています。
ふむふむ、なるほど。
iPadに「Phone互換機能」があるので、iPadでも実行できるようにする必要があると。
つまり、iPadのiPhone互換機能に対応できてなかったのがリジェクトの原因でした。
今回審査に出したアプリは不具合修正してアップしたのですが、今回の修正とは関係ないところでリジェクトされたんですよね…(初回リリース時にすでにiPhone互換機能に対応できていなかった)
なぜ1回目のリリースは通ったのだろうか。。。
私のアプリがリジェクトされた直接原因
Xcodeに付随されているシミュレータで片っ端から動作チェックしたところ、以下のハードウェアにて画面が崩れる現象が確認できました。
- iPad Pro (9.7-inch)
- iPad Pro (10.5-inch)
- iPad (5th generation)
- iPad Air
- iPad Air 2
具体的には、上記ハードウェアで動作させると画面がかなり小さくなる現象が発生しました。
この時の私のアプリには、ボタンやビューなどのパーツの座標や大きさを直接指定している箇所がありました。
サイズが固定になるので、画面の小さなハードウェアではパーツが大きく表示されるし、逆に画面の大きなハードウェアではパーツが小さく表示されていました。
これにより画面が崩れていたんだと思います。
なお、iPad Pro (12.9-inch) 系については、iPhone 8と同じ画面比率のようで、表示は崩れていませんでした。
私の対処方法
配置する部品の座標や大きさを、ハードウェア毎に処理を切り分けることで対処しました。
具体的には以下の処理切り分け用コードを作成しました。
if UIDevice().userInterfaceIdiom == .phone { // Simulator iPhone 8 switch UIScreen.main.nativeBounds.height { case 1136: print("iPhone 5/5S/5C") case 1334: print("iPhone 6/6S/7/8") print("iPad Pro(iPhone ver) (12.9-inch)/(12.9-inch)(2nd generation)") case 2208: print("iPhone 6+/6S+/7+/8+") case 2436: print("iPhone X") case 960: print("iPad Pro(iPhone ver) (9.7-inch)/(10.5-inch)") print("iPad Air(iPhone ver) (5th generation)/Air/2") default: print("unknown!!!!!!!!!!!!" , UIScreen.main.nativeBounds.height) } }
「UIScreen.main.nativeBounds.height」は画面の縦のサイズを取得できます。
ハードウェアによって縦のサイズは決まっていますので、それぞれのcase文にハードウェア毎の処理を追記することで処理を切り分けることができます。
最後に
今回は、iPhoneアプリの審査が「Guideline 2.4.1 – Performance – Hardware Compatibility」でリジェクトされた時の原因と対処方法についてご紹介しました。
Guideline 2.4.1はiPadのiPhone互換機能に対応できていない旨のリジェクトです。
たとえiPhone向けに出したアプリでも、iPadの互換機能に対応させる必要があります。
アプリをリリースする際は、iPhoneはもちろん、iPadでの動作チェックもするようにしましょう。