2026 年 8 月、このサイトにはまだ折りたたみ iPhone の発売日を追う記事があった。名称も日付も決まっていなかった。9 月 9 日、Apple のニュースルームは製品名を iPhone Duo にした。外画面 5.4 インチ、開いた内画面 7.6 インチ、両画面は同じアスペクト比、チップは A20 Pro。米国の開始価格は 256GB で 1999 ドル。容量は 512GB、1TB、2TB もある。予約は 10 月 16 日太平洋時間午前 5 時。中国を含む 70 以上の国と地域が 10 月 23 日、さらに 28 の地域が 10 月 30 日。今日は 10 月 13 日で、予約まで三日だ。この記事は発売日を当てにいかない。SwiftUI をどれだけ直すか、Xcode でどの姿勢を試すか、Mac を買うか借りるかを決める。
端末価格で見積もってはいけない理由
古い計算法と新しい計算法は、具体的に衝突する。古い計算法は「折りたたみを一台買い、人日を二週足す」。1999 ドルは予算の天井に見える。実際は検収の資産で、工数ではない。新しい計算法は、レイアウトがまだ画面を読んでいるかから入る。Apple の準備ページは直接書く。iOS 27 SDK 以降でビルドしたアプリは、Duo の開閉でサイズが変わる。画面サイズの直書き、固定の向き、端末の思い込みは、レイアウトを引き伸ばし、切り、置き場所を間違える。
同じバイナリが三段階の SDK で違って見える。これがコストの第一切で、デザインの好みではない。準備ページの対照はこうだ。iOS 26 SDK 以前でも起動する。開くと窓は中央に余白つき、閉じると内容はステータスバーとカメラの左に寄る。iOS 27 SDK は内画面の大部分を埋め、右端のステータスバーはまだ避ける。iOS 27.1 SDK 以降が最適化で、表示領域を使い、ツールバーとタブバーはステータスバーの下に縦に立つ。ストア画像だけ替えて古い SDK のまま出すチームは、ユーザーに余白を見せる。「折りたたみ対応」ではない。
第二切はテスト行列だ。外画面の size class は他の iPhone と同じ。縦は垂直 regular、水平 compact。横は両方 compact。内画面はサイドバーが置ける広さで、水平も垂直も regular。さらに内画面は、Info で宣言した対応向きを守らない。UIDevice.current.orientation、statusBarOrientation、interfaceOrientation でレイアウトを分岐すると、開閉と Split View で間違った枝に入る。Apple の指示は、今持っている幅と高さを比べること。UIKit は view.bounds、SwiftUI は GeometryReader のサイズ。
第三切が機械だ。Xcode 27.1 の iPhone Duo シミュレータ、Device Hub の開閉と回転、macOS 27 の iPhone Mirroring による引き伸ばしは、どれも Mac の上にある。Windows にこの連鎖はない。ビルド機の選び方は Xcode Cloud とリモート Mac にある。Xcode Cloud はコンパイルできる。Device Hub の前に座って、閉じ、半折り、開きをそれぞれ回す代わりにはならない。
UIScreen.main を読んでいるかだ。姿勢はシステムのもの、サイズは今の窓のもの。
作業をどう分けるか
「折りたたみ対応」を一つのマイルストーンにすると、日程は必ずずれる。金が実際に出る場所で三層に分ける。一層欠けると、人日と機材費が一つの見積もりに混ざる。
| ツール | 入口 | 実行できること | 文脈 | 向く人 |
|---|---|---|---|---|
| SwiftUI / UIKit の改修 | リポジトリのレイアウト | 画面シングルトン、向き分岐、固定サイズを外し、バーはナビゲーションへ返す | size class、セーフエリア、折り目とカメラの予約領域 | 10 月 23 日前後に出す、または更新するアプリ |
| Xcode 27.1 の姿勢テスト | Device Hub の iPhone Duo | 閉じ、半折り、開き。それぞれ一回回転。macOS 27 の窓の引き伸ばしを足せる | SDK 三段階の余白、回避、全画面の縦バー | デモ動画ではなく、回帰できる検収表が要るチーム |
| Mac ノード | 手持ち、購入、またはリモート賃貸 | 対応する macOS に Xcode を入れ、シミュレータと署名を走らせる | DerivedData、シミュレータランタイム、証明書 | 余った Apple Silicon がない、または日常機のディスクを空けられない |
改修層では、SwiftUI は自動の免除ではない。Human Interface Guidelines は、標準コンポーネントを使い、サイズ変化に耐えているなら、姿勢は自ら追従し、姿勢ごとに画面を作り直さなくてよい、と書く。外は compact 幅、内は regular 幅。それが全姿勢の底だ。逆に、固定幅、端末の高さによる分岐、自前のツールバーは、システムが直してくれない。準備ページが名前を挙げる検索は UIScreen.main、userInterfaceIdiom == .phone または .pad、regular 幅を「これは iPad」と扱うコード、bounds.height == 844 のような既知機種表だ。
漏れやすい計測が一つある。公開されている Xcode 27.1 シミュレータの探针は、外画面を 466×678 pt、内画面を 669×951 pt(どちらも @3x)と記録し、アプリがすでに内画面にいるとき UIScreen.main.bounds がまだ外画面の 466×678 を返すのを見ている。この点サイズは公式の禁止を説明するためのもので、新しい == 466 を書くためではない。半折りでは中央の予約領域が有効な遮蔽になる。探针は約 40 pt と記した。検収では自分の Xcode が読む ReservedRegion の矩形を使い、ブログの数字を定数にしない。
システムバーを UIToolbar、UINavigationBar、UITabBar でビューに貼らない。SwiftUI では toolbar を NavigationStack か NavigationSplitView に足す。UIKit では toolbar item をナビゲーションコントローラ内のビューコントローラに渡す。27.1 がこれらのバーを縦にしたあと、自前バーは内容の上に横たわる。折り目とカメラは予約領域で表す。SwiftUI は GeometryProxy から ReservedRegion を取る。左右分割や重ねが要るときは ArrangementView の split と overlay を使い、「開いた」が真のときだけ出る第二のビュー木を作らない。
import SwiftUI
struct DuoRoot: View {
@Environment(\.horizontalSizeClass) private var width
var body: some View {
NavigationSplitView {
Sidebar()
} detail: {
Detail()
.onGeometryChange(for: CGSize.self) { proxy in
proxy.size
} action: { size in
// Fold changes size mid-session. Do not cache UIScreen.main.bounds.
relayout(size, regularWidth: width == .regular)
}
}
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Save", action: save)
}
}
}
}
これは完成した工程ではない。三つだけ固定する。分割は NavigationSplitView に渡し、内画面の regular 幅でサイドバーを出せるようにし、外画面の compact では戻す。サイズは onGeometryChange で折りの途中に読み直す。保存ボタンはシステムの toolbar に置き、27.1 がステータスバーの下へ縦にできるようにする。.fill の全画面画像は、広くなると主体が切れる。今の size class かアスペクト比で fill と fit を切り替え、または焦点を置く。
工期、テスト、Mac の費用
本当の差は、コードが「電話の画面は一枚」と思い込んでいるかであり、デザイナーが折りアニメを欲しいかではない。下の二表は同じ列を使う。週数は日程の見積もりで、外注の見積書ではない。画面数と独自描画が週を開く。Mac の価格はこのサイトの料金ページのドル建て。購入行は別の機械なので、注釈なしに損益分岐へ畳まない。
| ツール | 入口 | 実行できること | 文脈 | 向く人 |
|---|---|---|---|---|
| すでに適応した SwiftUI | size class、システムナビ、UIScreen.main なし | 縦バー、折り目の予約領域、全画面画像の焦点を見る | 3–7 稼働日で閉じられる | iPad の分割に耐えた小さいアプリ |
| SwiftUI と UIKit の混合 | 固定 frame と独自バーが残る | 画面サイズと向き判定を替え、バーをコンテナへ戻す | 2–4 週。窓の引き伸ばしを足す | 本体は SwiftUI、角は古い UIKit |
| 固定サイズの UIKit | 393、844、機種リストで分岐 | コンテナを作り直し、非対称のセーフエリア、idiom 判定を外す | 4–8 週の画面一覧 | 何年も一枚の iPhone ガラスに描いてきた店や道具 |
| ツール | 入口 | 実行できること | 文脈 | 向く人 |
|---|---|---|---|---|
| 手持ちの Apple Silicon Mac | ローカル Xcode | シミュレータの全姿勢。実機があれば USB | 機材の増分は 0。ただし日常の DerivedData とディスクを争う | 一巡の対応で、機械がすでに対象 Xcode を入れられる |
| M4 16GB の日額 | リモートデスクトップ | Device Hub を一巡 | 1 日 20.2 ドル。稼働 5 日で 101 ドル | 適応済みで、金曜までに本当に閉じる |
| M4 16GB の週額 | リモートデスクトップ | 一暦週の回帰 | 週 54.5 ドル。二週で 109 ドル | 金曜に収まるか不明 |
| M4 16GB / 24GB の月額 | リモートデスクトップ | 改修期間の回帰機。24GB はシミュレータを同時に多く開ける | 月 100.9 または 200.9 ドル | 混合か固定サイズで、工期が週単位 |
| M6 Mac mini を買う | ローカルの固定資産 | 対応のあと、日常の Xcode と CI を続ける | 米国開始価格 899 ドル、教育 799。2026-08-25 発表、09-22 から供給 | 複数人で共有し、Duo のあとにもリリースが止まらない |
日額を掛けると、結論は直感と逆になる。16GB の 20.2×5 = 101.0 は、月額 100.9 とすでに同じ。20.2×7 = 141.4 は週額 54.5 より高く、月額より高い。週額 54.5×2 = 109.0 も、一月より少し高い。24GB も同じで、40.2×5 = 201.0 が月額 200.9 に合う。だから「まず日額で試す」は、一日か二日で閉じると分かっているときだけ成立する。二日目のスキャンが UIScreen.main の列を出したら、課金は月へ変える。八日目まで日額を払うのは、テストではなく課金周期への支払いだ。
月額 100.9×9 = 908.1 は、数字の上では M6 Mac mini の米国開始価格 899 ドルに近い。この二台は同じ機械ではない。借りるのは M4 16GB のクラウドノード、買うのは M6 の開始構成で、ディスプレイ、キーボード、税は含まない。九か月を損益分岐と書かない。購入が合うのは、対応が終わったあともその Mac が毎日コンパイルするときであり、Duo の姿勢が終わって遊休するときではない。買うか借りるかの長い議論は 研究用途の購入かレンタル、開発負荷は M6 Mac mini は開発者向きか にある。
人日をこの記事でドルにしない。地域の単価は一桁違う。「改修は 8000 から 25000 ドル」と書くと、決定が他人の見積もりの追随になる。表に書けるのは、四週の混合対応で Mac の行が月額 100.9 ドルだということ。稼働日 20 日を日額で買うと、同じ行は 404 ドルになる。工数は依然として大きい方、機械は小さい方だ。100 ドルを惜しんで 1999 ドルの電話をコンパイル機にせず、五日の監査のために 899 ドルの Mac mini を買わない。
場面でどう選ぶか
| もしあなたが | 選ぶ | 理由 |
|---|---|---|
| 純粋な SwiftUI で、iPad 分割に耐えている | 手持ちか日額。先にスキャン | 底はある。残りは縦バー、予約領域、全画面画像 |
| 二日目のスキャンが UIScreen.main の列 | すぐ月額へ。週の終わりまで日額を払わない | 稼働五日の日額はすでに一月 |
| 固定幅の多い UIKit の店 | 24GB の月額。4–8 週の画面一覧 | Duo と他機種を同時に開くと、16GB はシミュレータが先に食べる |
| App Store の画像だけ替えたい | 先に 27.1 SDK、そのあと画像 | 古い SDK の内画面は余白。画像が綺麗でも別の端末だ |
| CI はすでに Xcode Cloud | Cloud はビルドのまま、姿勢回帰はリモート Mac | 対話的な Device Hub はビルドログにない |
| 事務所に Mac がない | 一台借り、先に sw_vers と xcodebuild -version | システムが合わない日は、払っても有効なテストにならない |
| 対応のあとも長くリリースする | M6 の購入はそのあと比べる。第一週には買わない | 899 ドルが買うのはその後の利用率であり、この一巡の姿勢ではない |
実機の予算は別行に置く。1999 ドルは米国 256GB の開始価格。MacRumors が 9 月 28 日に並べた上位の米国価格は 512GB が 2199、1TB が 2599、2TB が 3199 ドル。発注は見ている Apple の店のページに従い、中国の価格を米国の数字で代用しない。実機一台で、ヒンジの感触と、シミュレータの注記が再現できない項目を見る。全員に Duo を配っても UIScreen.main は消えない。
推奨する組み合わせ
A — 個人で、すでに適応している: Xcode 27.1。手持ちか、リモートを一日。準備ページの「get my app ready for iPhone Duo」を先に走らせる。スキルは UIScreen.main、向き、idiom を探す。空なら Device Hub で閉じ、半折り、開き。ストア画像は App Store Connect のプレビューで Duo を見る。この一巡のために M6 は買わない。
B — 小チームで、コードが混合: 第一週はスキャンと画面シングルトンだけ。週額か、最初から月額。日額を七日まで転がさない。第二、第三週でシステムバーへ戻し、予約領域を足す。第四週で姿勢行列を回帰に書く。主経路ごとに三姿勢で一枚。CI は既存のビルド機のまま。人が開閉を見る回は同じリモート Mac を使い、セッションの終わりに DerivedData を消す。温かいキャッシュを合格にしない。24GB の月額 200.9 ドルは、Duo と他のシミュレータを並列にするときだけ。
C — 発売の週に提出する: 今日は 10 月 13 日、予約は 16 日、発売は 23 日。約束できるのは、27.1 SDK で主経路が余白にならず、縦バーが主ボタンを隠さず、全画面画像の主体が残ること。終わっていない折りアニメをストア文案に書かない。ノードの月額は Mac mini の料金、申し込みは レンタルページ。システムとアカウントは ヘルプ。レンタルイメージに Xcode 27.1 が最初から入っているとは思わない。
よくある誤り
- iOS 26 SDK で済ませる: 起動はする。内画面の周りは空だ。ユーザーは余白を「対応中」とは読まない。
- 外画面を UIScreen.main で直す: 開いたあと、メイン画面のシングルトンは外画面のサイズを返し続けることがある。951 pt 幅の領域を 466 pt 幅として組む。
- 向きで縦横を決める: 内画面は対応向きを守らない。縦横は今の窓のアスペクト比で取る。
- regular 幅を iPad 専用とみなす: Duo の内画面は、隠していた iPad レイアウトをそのまま出す。電話に出すつもりのないサイドバー密度も含む。
- 日額を一週払い切る: 16GB の稼働五日はすでに月額。八日目はテストではなく課金周期への支払い。
- 1999 ドルを毎チケットに書く、または実機をゼロにする: 実機はヒンジ検収の一行であり、改修工数の単価ではない。シミュレータは、Apple が書いたレイアウトの本線のまま。
七つの手順
- 同じソースを、入れられる SDK にそれぞれ合わせ、余白か、右のステータスバー回避か、全画面の縦バーかを先に記録する。目標は 27.1。
UIScreen.main、UIDevice.current.orientation、statusBarOrientation、interfaceOrientation、userInterfaceIdiom、そして 844、852、932 のような高さ定数を全体検索する。- Xcode のコーディング支援に App Resizability を走らせるか、端末で
xcrun agent skills exportして別のエージェントに渡す。スキルは大部分を見つける。見つからない分は上の一覧で補う。 - Device Hub の iPhone Duo を開き、閉じ、半折り、開きをそれぞれ一回回転する。主経路はマスごとに一枚残す。
- ツールバーがステータスバーの下に縦か、折り目とカメラの予約領域がボタンを押していないか、全画面画像の主体が残っているかを見る。
- Duo のスクリーンショット仕様で App Store の素材を替え、Connect のプレビューで見る。iPhone 18 のカンバスを無理に縮めない。
- Mac の課金周期を選ぶ。一日か二日は日額。スキャンが汚れたら月額。対応のあと毎日コンパイルするなら、899 ドルの M6 開始価格とその後の月額を比べる。注文の前にノードで
sw_versとxcodebuild -versionを実行する。
FAQ
コードを変えなくても iPhone Duo で開きますか?
開きます。iOS 26 SDK 以前では、開くと窓が中央に余白つき、閉じると内容はステータスバーとカメラの左に寄ります。起動は適合ではありません。内画面を埋め、縦バーを使うには iOS 27.1 SDK が要ります。
iOS 27.1 SDK は必須ですか?
内画面を埋め、ツールバーとタブバーをステータスバーの下へ縦にするには 27.1 が要ります。公開前に、内容がこれらの縦バーに耐えることを確認します。画像だけ替えてバイナリが古い SDK のままだと、内画面は余白のままです。
シミュレータだけで十分ですか?
レイアウトの本線には足ります。Apple は Xcode 27.1 の iPhone Duo シミュレータを、完全な体験を試す最善の方法と書き、Device Hub の下で開閉、回転、折りができます。ヒンジの感触には実機が要ります。1999 ドルはその一行の資産であり、すべての SwiftUI チケットに按分しません。
Mac がなくても今回の対応はできますか?
Windows では Xcode 27.1 を動かせません。M4 16GB の日額は 20.2 ドルで、稼働五日は月額 100.9 ドルと同じです。ノードの macOS が、固定した Xcode を入れられることを先に確認します。システム要件は Apple の Xcode システム要件に従います。iPhone Mirroring の引き伸ばしは、準備ページが macOS 27 と書いています。
SwiftUI は折りたたみへ自動で合いますか?
システムのナビゲーション、size class、標準コンポーネントは姿勢に従います。固定 frame、独自バー、向き判定、UIScreen.main は従いません。内画面は regular 幅なので、以前は iPad にだけ出ていたレイアウトがこの電話に出ます。
まとめ
iPhone Duo は 10 月 23 日に発売される。対応コストは 1999 ドルの行ではない。先に SDK の段階と UIScreen.main を見て、次に三姿勢を日程へ置き、最後に「日額五日は一月」で Mac の課金周期を決める。 適応済みの小さいアプリは手持ちか短期。混合と固定サイズは月額で回帰を残す。M6 の購入は、リリースが止まらないときだけ比べる。リモートノードは レンタル と 料金、アカウントとシステムは ヘルプ。