Appleは2019/03/27から
iPhone XS Max
と12.9-inch iPad Pro (3rd generation)
の
全画面対応を必須にすると発表しました。
Upcoming App Store Submission Requirements
iPad Pro (2018版)対応は後回しにしていたので
「リリースできねーよ!」って青くなっている方も多いんじゃないでしょうか?
製品が発表されてからすぐに対応してれば良かったのにね。
2019年3月以降、 App Storeに提出されるすべてのiOS Appは、
iOS 12.1以降のSDKでビルドされ、
iPhone XS Maxまたは12.9インチ iPad Pro(第3世代)の
オールスクリーンのデザインをサポートする必要があります。
(October 30, 2018)から言ってたでしょ。
現状
いにしえより開発をしていたのでLaunchImageで起動画面を表示しています。
Launch Screen Fileは空欄。
もうこの方法では12.9-inch iPad Pro (3rd gen)の全画面に対応できません。
このままアプリを起動すると以下のようになります。
[起動画面]
[アプリ画面]
おわかりいただけただろうか?
アプリ画面の周囲に黒い枠が付いています。
対策
1.プロジェクトにLaunchScreen用のstoryboardを追加する。
1.Xcodeのメニューから File > New > File...
を選択する。
2.User Interface > Launch Screen
を選択する。
3. こんな感じになる。(起動画面で表示するロゴも追加しといた)
2.LaunchScreen用のstoryboardを編集する。
3.Projectファイルの変更
4.LaunchImageの削除
えっ?!LaunchImageを表示してるViewControllerがあるって?
起動を頑張ってる感を演出したいって?!
(そこは各自で考えてくれ)
起動してみよう
[起動画面]
祝え!12.9-inch iPad Pro (3rd gen)に対応した起動画面 表示の瞬間である。
(黒枠がないことに注目)
[アプリ画面]
(黒枠がないことに注目)
おやおや、都合良くはいかないようだね。
(ピンク色の領域も全画面になって欲しかった...)
12.9-inch iPad Pro (3rd gen)
の全画面に対応することで画面サイズが変化します。
レイアウト設定を固定値で作ってあったりすると、画面表示が崩れることが発生します。
地道に全画面表示チェックとレイアウト修正をがんばるしかありません。
storyboardのUse Safe Area Layout Guides
にチェックを入れるのをお忘れなく。
100画面あるアプリだったら、3人15日でできるかな?
「画面表示が崩れているのに見逃すかもしれない。。。」
開発者の美的感覚が疑わしい場合はデザイナーも巻き込んで作業することになります。
keyWindowサイズを変更する
「全画面チェックとレイアウト修正なんかやってられない。」
「なんとしても2019/3月中にリリース」という場合は、
以下のようなコードをアプリ初期化と画面回転時に入れて、
keyWindowをiPadの画面サイズに変更してしまうことも考えられます。
具体的にどこに入れるかはアプリの構造によるので省略します。
すでにkeyWindowをいじっているアプリでは動かないかもしれません。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
let shorterSide: CGFloat = 768
let longerSide: CGFloat = 1024
if UIDevice.current.orientation.isLandscape {
resizeKeyWindow(CGSize(width: longerSide, height: shorterSide))
} else {
resizeKeyWindow(CGSize(width: shorterSide, height: longerSide))
}
}
/// Resizes the keyWindow.
///
/// - parameter size: Size of the keyWindow.
func resizeKeyWindow(_ size: CGSize) {
guard let keyWindow = UIApplication.shared.keyWindow else {
return
}
var frame = keyWindow.frame
frame.size.width = size.width
frame.size.height = size.height
let screenSize = UIScreen.main.bounds
frame.origin.x = (screenSize.width - frame.width) / 2
frame.origin.y = (screenSize.height - frame.height) / 2
keyWindow.frame = frame
}
表示した結果はこうなります。黒枠が更に大きくなりました。
これでユーザーは満足するのか?
AppStoreの評価やブランドイメージも考慮して実施してください。
iPad対応をやめる
この機会にiPad対応をやめるのも選択肢の1つです。
作業としてはUniversalアプリだったのを
iPhone専用にするだけです。
iPadで使っていたユーザーにはiPhoneアプリを再インストールしてもらうことになります。
12.9-inch iPad Pro (3rd gen)
での表示イメージはこうなります。
拡大ボタンがあるとはいえ、ここまでやるならiPhoneで使いたいですよね。
保存データをiPhoneへ移行する仕組みが必要になると思われます。
iPadユーザーを切り捨てても問題ないか?
関連部署やエラい人と協議が必要かもしれませんね。
現状
ここまで書いておいてアレですが、全画面対応していなくてもApple審査を通過しています。
12.9-inch iPad Pro (3rd gen)
用のスクリーンショットは黒い枠が付いた状態でOKです。
(2019/08/07現在)
注
ここで紹介したアプリは個人制作のサンプルアプリです。
特定のアプリについて言及しているわけではありません。
同じ方法で11-inch iPad Pro (2018)にも対応できます。