Help us understand the problem. What is going on with this article?

3分でできる。12.9-inch iPad Pro (第3世代) (2018) 全画面対応法

Appleは2019/03/27から
iPhone XS Max12.9-inch iPad Pro (3rd generation)
全画面対応を必須にすると発表しました。
Upcoming App Store Submission Requirements

iPad Pro (2018版)対応は後回しにしていたので
「リリースできねーよ!」って青くなっている方も多いんじゃないでしょうか?

製品が発表されてからすぐに対応してれば良かったのにね。

Appの提出

2019年3月以降、 App Storeに提出されるすべてのiOS Appは、
iOS 12.1以降のSDKでビルドされ、
iPhone XS Maxまたは12.9インチ iPad Pro(第3世代)の
オールスクリーンのデザインをサポートする必要があります。

(October 30, 2018)から言ってたでしょ。

現状

いにしえより開発をしていたのでLaunchImageで起動画面を表示しています。
old_launchImage.png
Launch Screen Fileは空欄。
old_proj.png

もうこの方法では12.9-inch iPad Pro (3rd gen)の全画面に対応できません。

このままアプリを起動すると以下のようになります。

[起動画面]

old_launch.png

[アプリ画面]

old_Screen.png

おわかりいただけただろうか?
アプリ画面の周囲に黒い枠が付いています。

対策

1.プロジェクトにLaunchScreen用のstoryboardを追加する。

1.Xcodeのメニューから File > New > File... を選択する。
2.User Interface > Launch Screen を選択する。
addNewFile.png
3. こんな感じになる。(起動画面で表示するロゴも追加しといた)
addedFiles.png

2.LaunchScreen用のstoryboardを編集する。

  1. デフォルトで変なレイアウト設定が付いているので、がっつり変更する。 launchScreenLayout.png
  2. Use as Launch Screenにチェックが入ってるのが重要みたいよ。

  asLaunchScreen.png

3.Projectファイルの変更

  1. Launch Screen Fileに先ほどのstoryboardを設定する。
  2. Launch Images Sourceはもう使わないのでDon't use asset catalogsを選択する。 new_proj.png

4.LaunchImageの削除

  1. Assets.xcassetsからLaunchImageを削除する。
    delete_launchimage.png

  2. フォルダ Assets.xcassets > LaunchImage.launchimageを削除する。

えっ?!LaunchImageを表示してるViewControllerがあるって?
起動を頑張ってる感を演出したいって?!
(そこは各自で考えてくれ:confounded:)

起動してみよう

[起動画面]

new_launch.png
祝え!12.9-inch iPad Pro (3rd gen)に対応した起動画面 表示の瞬間である。
(黒枠がないことに注目)

[アプリ画面]

new_Screen.png
(黒枠がないことに注目)
おやおや、都合良くはいかないようだね。
(ピンク色の領域も全画面になって欲しかった...:frowning2:)

12.9-inch iPad Pro (3rd gen)の全画面に対応することで画面サイズが変化します。
レイアウト設定を固定値で作ってあったりすると、画面表示が崩れることが発生します。

地道に全画面表示チェックとレイアウト修正をがんばるしかありません。
storyboardのUse Safe Area Layout Guidesにチェックを入れるのをお忘れなく。
100画面あるアプリだったら、3人15日でできるかな?:weary:

「画面表示が崩れているのに見逃すかもしれない。。。」
開発者の美的感覚が疑わしい場合はデザイナーも巻き込んで作業することになります。

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
}

keyWindow.png
表示した結果はこうなります。黒枠が更に大きくなりました。:confused:
これでユーザーは満足するのか?
AppStoreの評価やブランドイメージも考慮して実施してください。

iPad対応をやめる

この機会にiPad対応をやめるのも選択肢の1つです。
作業としてはUniversalアプリだったのを
universal.png
iPhone専用にするだけです。
iPhone_only.png

iPadで使っていたユーザーにはiPhoneアプリを再インストールしてもらうことになります。
iPhone_iPad.png

12.9-inch iPad Pro (3rd gen)での表示イメージはこうなります。
拡大ボタンがあるとはいえ、ここまでやるならiPhoneで使いたいですよね。
保存データをiPhoneへ移行する仕組みが必要になると思われます。

iPadユーザーを切り捨てても問題ないか?
関連部署やエラい人と協議が必要かもしれませんね。

現状

ここまで書いておいてアレですが、全画面対応していなくてもApple審査を通過しています。
12.9-inch iPad Pro (3rd gen)用のスクリーンショットは黒い枠が付いた状態でOKです。
(2019/08/07現在)

ここで紹介したアプリは個人制作のサンプルアプリです。
特定のアプリについて言及しているわけではありません。:smiley:

同じ方法で11-inch iPad Pro (2018)にも対応できます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした