iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Vibe Coding

神隊友.swift:30 天 Vibe Coding 打造育兒 iOS App 系列 第 17 篇

[Day 17] 支援 iPhone Duo 的前置作業:對照 HIG 盤點出 4 處要改,Codex 的 8 條建議只採用 3 條

  • 分享至 

  • xImage
  •  

Day 17

文章同步發表在我的個人 Blog

支援 iPhone Duo 的前置作業:對照 HIG 盤點出 4 處要改,Codex 的 8 條建議只採用 3 條

第一支摺疊 iPhone 出來了,目前 App 要改多少?

今天拿神隊友走一次,分成五步:看官方的影片和工作坊、了解官方的設計原意、拿自己的 App 對照檢查、守住自己對使用者體驗的原則、不盲目照著 AI 的建議做。

先講結果:官方準備了 6 支影片、2 場線上 Group Lab,Human Interface Guidelines(Apple 的設計指南,以下簡稱 HIG)也新增了 iPhone Duo 的章節。對照這些資料檢查神隊友的程式碼,找到 4 個要改的地方;Codex 提了 8 條調整建議,逐條檢查後,直接採用的只有 3 條。

這次沒有安裝新版 Xcode,所以只做到評估,還沒有在 iPhone Duo 的模擬環境上實際跑過。

1. 官方準備了 6 支影片,不用全部看完

6 支都是 Tech Talks,每支 7 到 18 分鐘:

影片 長度 講什麼 神隊友要不要看
Design for iPhone Duo 10:45 設計原則,控制項在不同姿勢下怎麼移動 要,先看這支
Prepare your app for iPhone Duo 10:10 全螢幕、size class、不對稱的 safe area、Split View 要
Raise the bar with iPhone Duo 15:43 導覽列、工具列、tab bar 移到側邊,項目太多時怎麼收進 overflow 要,神隊友的按鈕都在這裡
Strike a pose with adaptive layouts on iPhone Duo 18:01 開合時版面怎麼調整、arrangement view、避開轉軸和相機 要
Leverage multiple displays and scenes on iPhone Duo 7:17 多視窗、同時用兩個螢幕、讀取轉軸角度 之後再看
Build a great camera experience for iPhone Duo 9:27 內外兩顆前鏡頭怎麼切換 不用,神隊友沒有用相機

另外還有兩場各一小時的 iPhone Duo Group Lab,是 Apple 工程師和設計師線上回答問題的錄影。Apple 也在倫敦和日本辦實體工作坊,要帶自己的專案、用 iPhone Duo 實機測試。

照神隊友的狀況,先看前四支就夠了。

2. 官方的設計原意:不是為每一種姿勢各做一版

iPhone Duo 有兩個螢幕:闔起來用外螢幕,打開用內螢幕,中間有轉軸,可以像書一樣半開、平放、立起來。HIG 開頭就先講清楚,這還是 iPhone:

Although iPhone Duo is a new form factor, keep in mind that you’re still designing for iPhone, and Designing for iOS patterns and best practices still apply.

面對這麼多種姿勢,官方的建議不是每一種都設計一個版面,而是讓 App 跟著可用空間伸縮:

Don’t reinvent your app when it resizes; allow the existing layout to expand based on the available space instead.

具體來說有三件事跟一般 iPhone 不一樣:

  • 工具列和 tab bar 會移到側邊:外螢幕比其他 iPhone 寬、比較矮,系統把導覽列、工具列、tab bar 移到螢幕側邊,把高度留給內容。用系統元件的話,這個排列是自動的。
  • 保留區域:外螢幕的前鏡頭、內螢幕的前鏡頭(相機開啟時才出現),以及半摺時中間的摺疊區,內容都要避開。系統的 alert、選單、sheet 會自動閃開,自訂的元件要用 ReservedRegion 自己查位置。
  • Arrangement view:新的版面容器,放一主一副兩個畫面,會依螢幕大小、方向和摺疊區自動排成左右並排或上下疊放。

要在 iPhone Duo 上用滿整個螢幕,需要 Xcode 27:

When you build with Xcode 26 and earlier, your app doesn’t extend under the status bar and camera.

各種姿勢則要用 Xcode 27 新的 Device Hub 模擬。我現在用的是 Xcode 26.6,這篇先不安裝。

就算家裡沒有 iPhone Duo,準備工作也不會白做。官方文件提到:

If your app already works on iPad and Mac or you’ve prepared your app to resize in iPhone Mirroring, you’re well on your way to supporting iPhone Duo.

也就是說,App 如果已經能在 iPad、Mac 或 iPhone 鏡像輸出的視窗裡跟著大小調整,iPhone Duo 的準備就做了一大半。

3. 對照 HIG 檢查神隊友,找到 4 個要改的地方

Claude Code 照官方文件的檢查項目,逐一對照神隊友的程式碼:

地方 現在的做法 官方怎麼說
卡片詳情的「更多」選單 自訂的 … 選單,放在左上角 … 只能給系統的 overflow 選單用,自訂選單的動作要併進系統選單
首頁、行事曆的新增按鈕 隱藏導覽列,右下角自己疊一顆浮動的「+」 自訂的浮動按鈕不會跟著移到側邊的工具列
狀態列的淡出效果 固定加在畫面頂端 控制列可能在左側或右側,內容的空間是不對稱的,要用 safe area 處理
支援的方向 只支援直向 每一種姿勢都要旋轉測試,版面依 size class 決定,不看裝置方向

第一條,HIG 寫得很直接:

Use the system overflow menu. If your app has its own overflow menu, move those actions into the system menu so people find everything in one place. Reserve the ellipsis symbol for overflow, and give other menus a distinct symbol.

這個 … 按鈕,就是 Day 16 刪除確認對話框彈出來的地方。iOS 26 讓對話框從來源按鈕長出來,Day 16 才把對話框掛到這顆按鈕上;如果把它的動作併進系統的 overflow 選單,對話框從哪裡出現就要重新確認。

第四條,神隊友目前只支援直向,設定寫在 project.yml:

UISupportedInterfaceOrientations:
  - UIInterfaceOrientationPortrait   # portrait only

4. 版面可以變,「待你知道」的規則不能變

神隊友有一條從第一天就寫進規則的核心:對方丟過來、還沒按「知道了」的事,要一直留在首頁頂端。

內螢幕變寬之後,很自然會想把「待你知道」和時間軸左右並排,或像 Mail 那樣,左邊列表、右邊直接顯示卡片內容。HIG 也支持在大螢幕多顯示一層資訊:

Maintain your app’s information hierarchy, but show an additional level of hierarchy on the larger inner display if it makes sense for your content.

但不管怎麼排,有兩件事不能跟著版面改變:

  • 「待你知道」要在打開 App 第一眼就看得到,不能因為並排被擠到看不見的地方。
  • 右邊顯示卡片內容,不代表對方已經看過。只有按「知道了」才算知道。

HIG 對摺疊時的建議也一樣:

Avoid extreme layout changes as people fold the device. Move only what’s necessary to keep elements visible and easy to tap.

5. Codex 的 8 條建議,直接採用的只有 3 條

請 Codex 唯讀看神隊友的程式碼和官方文件,提出支援 iPhone Duo 的建議,一共 8 條。拿官方文件和神隊友自己的設計規範逐條檢查:

# Codex 建議 判斷
1 每個分頁改用 NavigationSplitView,內螢幕上列表和詳情並排 方向對,但要改整個導覽架構,先不做
2 「待你知道」卡片寬度改成依實際欄寬計算 採用
3 右下的浮動「+」改成系統工具列的項目 跟神隊友的設計規範衝突,要我決定
4 自訂的 … 選單改用系統的 ToolbarOverflowMenu 採用,但要補上刪除確認來源的影響
5 行事曆的週標頭依可用高度決定要不要固定 方向對,要實測才知道
6 表單的 sheet 在開合時保留草稿、不重新搶焦點 部分採用
7 狀態列的淡出效果不要固定在頂端 採用
8 支援橫向,用 Device Hub 測試各種姿勢 方向對,要裝 Xcode 27 實測

Codex 提到的 API 都查得到出處,它自己也在開頭註明「未執行模擬器驗證」「新 API 的可用版本仍需以實際 SDK 確認」。問題出在兩個地方:

  • 第 4 條只看 HIG,沒有連到 Day 16 剛做完的刪除確認。改了選單,對話框的來源也會改變。
  • 第 3 條直接改掉設計規範裡寫好的浮動按鈕。設計規範只有我能改,要不要為 iPhone Duo 調整,要由我決定,不是照著建議直接改掉。

另外,8 條裡面沒有一條在 iPhone Duo 的環境跑過。沒有實測之前,都只算建議。

6. 目前的狀態

項目 結果
官方資源 6 支影片、2 場 Group Lab、HIG 新章節、技術文件都整理完成
神隊友要改的地方 4 個
Codex 的建議 8 條:採用 3 條(#2、#4、#7)、要實測 2 條、部分採用 1 條、先不做 1 條、要我決定 1 條
實測 還沒做,需要 Xcode 27

還沒做的部分:

  • 安裝 Xcode 27,用 Device Hub 跑一次各種姿勢
  • 「更多」選單改用系統的 overflow 選單,重新確認刪除確認從哪裡出現
  • 決定右下的浮動「+」要不要改

明天

Day 18 裝到兩支 iPhone:開啟開發者模式、跟 Mac 配對、用腳本裝機,開始正式使用。

參考資源

影片

官方文件


上一篇
[Day 16] iOS 26 confirmationDialog 行為變更:從來源按鈕彈出,XCUITest 要跟著調整
系列文
神隊友.swift:30 天 Vibe Coding 打造育兒 iOS App 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言