iPhone Duoにアプリを対応させる3つのステップ
iOS 27 SDK以降でビルドしたアプリは、iPhone Duoで動的にサイズ調整が行われます。デバイスを開くとアプリがインナーディスプレイいっぱいに広がり、折りたたむとアウターディスプレイに戻ります。画面サイズのハードコード、方向の固定、デバイスに関する想定を行うと、レイアウトが崩れ、コンテンツが延びたり、切れたり、配置がずれたりすることがあります。以下の手順に従って、アプリをiPhone Duoに対応させましょう。
事前の確認
iPhone Duoではすべてのアプリが動作しますが、最新のSDKでアプリをビルドすると、ディスプレイをより広く活用し、さまざまなレイアウトに柔軟に適応できるようになります。ビルドに使うSDKによってiPhone Duoでのアプリの表示にどのような違いが生じるか、以下の例でご確認ください。
iOS 26 SDK
iOS 26 SDK以前でビルドしたアプリをiPhone Duoで実行することはできますが、すべてのレイアウトに適応するわけではありません。デバイスが開いている状態では、アプリはディスプレイの中央に表示され、ウインドウの周囲に空白のスペースが表示されます。デバイスが閉じている状態では、アウターディスプレイのステータスバーとカメラの左側にアプリのコンテンツが表示されます。
iOS 27 SDK
iOS 27 SDKでビルドしたアプリは、サイズが調整され、iPhone Duoのインナーディスプレイの大部分に表示されます(右端のステータスバーは除く)。余白が最小限に抑えられ、使い勝手が向上します。
iOS 27.1 SDK以降
iOS 27.1 SDK以降でビルドしたアプリは、iPhone Duoに合わせて最適化されます。アプリはディスプレイ全体に広がり、ツールバーとタブバーはステータスバーの下に縦に配置されます。ユーザーがディスプレイを移動しても一貫して最適な体験を提供できます。
iOS 27.1 SDKでビルドしたアプリをリリースする前に、アプリのコンテンツがバーの縦表示に対応しているか必ず確認しましょう。
ステップ1:app resizabilityスキルを実行する
Xcodeで、コーディングアシスタントに「アプリをiPhone Duoに対応させて」と依頼します。このスキルはプロジェクトをスキャンし、ステップ2に記載するパターンを検出します。見つかったそれぞれの問題の内容について説明し、修正方法を提案します。
別のコーディングエージェントを使っている場合は、ターミナルで以下のコマンドを実行してスキルをエクスポートしてください。
xcrun agent skills export
このスキルでほとんどの問題が見つかりますが、すべてではありません。以下に挙げる項目を確認し、問題を見逃さないようにしましょう。
ステップ2:パターンを修正する
メイン画面を基準にしたサイズ調整をやめる
iPhone Duoでは、デバイスが開閉するたびにアプリのサイズが変化し、画面のサイズと必ずしも一致しません。プロジェクトでUIScreen.mainを検索し、それぞれの使用箇所を以下のように置き換えます。
- ビューやウインドウを基準にサイズを調整する:
UIScreen.main.boundsをview.boundsまたはwindow.boundsに置き換えます。SwiftUIでは、GeometryReaderまたはonGeometryChangeを使います。 - サイズは変更のたびに読み取る:起動時や
viewIsAppearingでサイズを一度だけ読み取るだけでは不十分です。折りたたみによってセッション中にアプリのサイズが変わる場合があるためです。layoutSubviewsまたはviewDidLayoutSubviewsでサイズに応じて異なるレイアウトを行い、viewWillTransition(to:with:)を使ってサイズ変更時に必要な処理を行います。 - 特性コレクションからスケールを取得する:UIKitでは
traitCollection.displayScale、SwiftUIでは@Environment(\.displayScale)を使います。 - シーンからウインドウを作成する:
UIWindow(frame: UIScreen.main.bounds)をUIWindow(windowScene:)に置き換えます。 UIScreenを保管しない:画面情報が必要な場合は、view.window?.windowScene?.screenで動的にアクセスできます。
デバイスの向きでレイアウトを判断するのは避ける
iPhone Duoでは、デバイスの向きからアプリの形状を判断することはできません。以下のプロパティを検索し、依存するレイアウトロジックをすべて削除しましょう。
UIDevice.current.orientationstatusBarOrientationinterfaceOrientation(windowScene.effectiveGeometry.interfaceOrientationを含む)
アプリが横長になっているかどうかを確認するには、利用できるスペースの幅と高さを比較します。ビューコントローラではview.bounds、ビューではsuperview.bounds、SwiftUIではGeometryReaderのサイズを使います。
イディオムやサイズクラスでデバイスを識別できることを想定しない
iPhone Duoやサイズ変更調整なiPhoneミラーリングでは、iPhoneアプリはサイズクラスを任意に組み合わせることができます。インナーディスプレイでは、アプリのiPad用レイアウトが自然に拡張しているように見えることが求められます。詳しくは、「iPhone Duoに向けたアプリの準備」をご参照ください。
- イディオムでレイアウトを選択しない:
userInterfaceIdiom == .phoneおよび== .padを検索します。サイズクラスや利用できるスペースをレイアウトの基準にします。 - 「標準幅」を「iPad」として処理しない:
horizontalSizeClass == .regularの場合にiPad専用レイアウトを表示するコードや、iPhoneが常にコンパクトであると想定するコードを使っていると、iPhoneでもそのレイアウトが表示されます。 - 特定のデバイスサイズのチェックを削除する:
bounds.height == 844などの比較や、既知のiPhoneサイズのリストは、iPhone Duoには対応していません。 - フルブリードのメディアを確認する:ヒーロー画像とビデオを
.scaleAspectFillまたは.aspectRatio(contentMode: .fill)に設定すると、広いディスプレイで重要なコンテンツが表示されない可能性があります。現在のサイズクラスやアスペクト比を参考に、フィルかフィットを選択するか、焦点を設定しましょう。
ステップ3:サイズ調整をテストする
これらのツールを使ってサイズ調整をテストし、アプリが期待通りに動作するか確認します。
- Device Hubのサイズ調整可能なiOSシミュレータ。
- macOS 27のiPhoneミラーリング。ウィンドウを縦横ともに極端なサイズに調整します。
- Xcode 27.1のiPhone Duoシミュレータ。
- 注:iPhone Duoシミュレータでは、ネイティブ体験を十分にテストできます。
もっと先へ:App Storeで際立たせる
App Storeのプロダクトページをアップデートし、アプリがiPhone Duoに対応していることを示しましょう。
iPhone Duoのサポートを示す:アプリのプレビューやスクリーンショットを共有し、さまざまな向きでアプリの魅力をアピールしましょう。App Store ConnectでiPhone Duo関連のスクリーンショットを提出すると、App Storeのプロダクトページにバッジが表示され、アプリがiPhone Duo向けに最適化されていることがユーザーに伝わります。スクリーンショットの仕様を確認する。
アセットをプレビューする:App Store Connectの新しいプレビューツールを使って、iPhone Duo上でアセット(新しいクリエイティブアセットを含む)がどのように表示されるかを確認しましょう。
アプリをAppleに共有する:App Store Connectでフィーチャーのノミネートを申請し、App StoreエディターチームにアプリがiPhone Duoに対応していることを知らせましょう。「役立つ情報」セクションには、アプリがiPhone Duoに最適化され、デバイスのすべてのポーズに対応していることを記載できます。フィーチャーのノミネートの作成方法について、詳しくはこちらをご確認ください。