本篇只回答一个问题:人从内地短期到香港见客户、做现场演示,手里只有 14 寸笔电,能不能在 48 小时内 把 UI 热修复编进 TestFlight,且不在中环酒店用 VNC 硬扛 Xcode?
前提: 你已有长期在线的 build node(出口 IP、Xcode 版本、match 私钥都已钉死)。本篇管「人在香港怎么触发」;没有稳定构建机,再好的漫游套餐也救不了签名链。这与 新加坡出差 Runbook 是同一依赖链,但网络与节点取舍不同——香港篇强调大湾区低延迟编、北美出口上传分离,不是再写一篇五地机房选购指南。
时间线来自我们 2026-03-18~03-20(HKT) 的港岛客户周:仓库与 IP 已打码,日志为当时终端原文节选。
驻港三天,我只做三件事:
-
日间编在香港节点
深圳出发 SSH RTT 约 18~32ms,增量 build 跟手;不必为「人在香港」改 match。
build-hk
-
上传仍走加拿大机
ASC 白名单与 Distribution 证书绑在北美出口;驻港周禁止换 IP。
upload-ca
-
演示与发版拆链路
客户现场只装已处理的 TestFlight;不在展会 Wi‑Fi 下 archive。
TF 演示
可核对字段(2026-03 驻港实录)
每次驻场发版我们在工单里固定留档,字段与 Apple Xcode Release Notes 对照版本即可复现:
| 字段 | 记录值 | 说明 |
|---|---|---|
| Git commit | c4a18fe(release/1.8-hotfix) | 驻港前已在内地 push |
| GitHub Actions | Run #19210488302 · ios-ship-hk.yml | runner 标签 mac-hk-m4 / mac-ca-upload |
| 香港机增量 build | 2m 51s | 同一 commit,无 clean |
| 香港机 Archive | 9m 48s | M4 24GB · Xcode 16.3 |
| 加拿大机上传 | 3m 22s · ASC 处理约 19m | 从 .xcarchive 直传,不经笔电 |
| 笔电本地试编 | 未做 Clean Build | 刻意避免酒店发热降频 |
| SSH RTT(深圳→HK 节点) | 18~32ms 均值 | ping 与 ssh 握手时段 |
| SSH RTT(港岛酒店→HK 节点) | 22~41ms | 仍适合交互式日志 |
CompileSwift normal arm64 … DashboardView.swift ** BUILD SUCCEEDED ** [171.204 sec] note: Using codesigning identity: Apple Development: …
为何驻港这一周把「编」放在香港节点?
我们团队日常 base 在深圳。以前出差香港仍 SSH 回加拿大机构建:能编,但看日志像「慢半拍」——跨太平洋 RTT 150ms 量级,xcodebuild 本身不慢,是你盯终端的心理成本在涨。2026 年起给仓库加 second runner:香港 M4 负责 compile/archive,加拿大 M4 只接 upload lane(Fastlane 里用 lane :upload_only 拆阶段)。
这不是「香港机房魔法」,而是谁离构建机更近。你从福田、罗湖、甚至港岛中环,到香港节点的路径通常优于到蒙特利尔。上传仍要北美出口时,把 archive 通过内网脚本 rsync 到加拿大机(走我们可控的机房间通道),而不是让笔电漫游上传 200MB 的 IPA——后者在口岸/高铁隧道里极易断。
节点规格与下单路径见 香港套餐页。若你已在用 轻薄本编译上云 的分工,驻港只是把「云端」从加拿大换成香港做日间迭代,思路上一脉相承。
48 小时时间线(2026-03-18~20)
T-24h · 深圳: 在加拿大机跑通 upload-only;香港机跑通 build(commit b91e002)。把 build-hk / build-ca 写进 ~/.ssh/config,ProxyJump 未启用(避免公司 VPN 绕路)。
T+0 · 03-18 港铁: 福田站候车时 git pull + 香港机增量 build 绿(2m51s)。未开 VNC。
T+12h · 03-19 中环: 客户白天会议;13:40 改文案 push c4a18fe;14:06 香港机 build 绿;15:20 触发 archive;16:10 archive 完成;加拿大机 16:18 开始 upload。
T+24h · 03-19 晚: TestFlight 可测;客户次日演示用 TF,不在客户办公室 Wi‑Fi 下编。
T+48h · 03-20: 返深;仅做日志归档与 match readonly 巡检,无架构变更。
驻港期间真实故障(含日志)
① 酒店 Wi‑Fi:仅拦 UDP,SSH 时断时续
kex_exchange_identification: read: Connection reset by peer Connection reset by 103.xxx.xxx.xxx port 22
处理: 改手机热点;ServerAliveInterval 60;长任务进 tmux。与新加坡酒店 NAT 案例同类,见 彼文故障 ①。
② 香港机编过、加拿大机 upload 报签名失败
error: exportArchive No signing certificate "iOS Distribution" found ** EXPORT FAILED **
原因: 香港机 archive 用的是 Development 配置;晋级到 upload lane 时未切换 export options。修复: Fastfile 的 upload_only 强制 export_method: app-store 并在加拿大机执行 match appstore --readonly。这与 TestFlight 专机 里「build/upload 分离」一致——驻港只是把 build 挪到香港。
③ 跨境漫游:Git LFS 指针未拉全
git lfs pull Error downloading object … Client.Timeout exceeded
处理: 在深圳已 LFS pull 完整;香港只 git fetch。大资源不进出差 diff。若必须 LFS,在构建机拉,不在漫游链路上拉。
故障对照(给 on-call 搜)
| 现象 | 常见触发 | 处理 |
|---|---|---|
| SSH 重置 | 酒店/会展 Wi‑Fi | 热点 + tmux + ServerAlive |
| HK build 快、CA upload 挂 | 签名配置 lane 混用 | upload lane 单独 match + export_method |
| LFS 超时 | 漫游带宽 | 构建机预拉;笔电只 fetch |
| 演示包旧 | ASC 处理未结束 | 会前 2h 冻结 commit;邮件盯 processing |
最小闭环命令(香港机)
落地当晚跑通这条即可;参数语义见 TN2339:
ssh build-hk 'set -e
cd ~/workspace/MyApp
git fetch && git checkout c4a18fe && git pull --ff-only
xcodebuild -scheme MyApp -configuration Release \
-derivedDataPath ~/Cache/DerivedData \
-destination "generic/platform=iOS" build'
Archive 与 upload 由 ios-ship-hk.yml 串联;留档 Run #19210488302。自建 runner 背景见 云 Mac 上的 GitHub Actions runner 与 GitHub 文档。
与新加坡出差篇差在哪?
- 地理: 新加坡篇面向「东南亚出差 + 可能用新加坡节点」;本篇面向深港/港岛,默认你有香港节点或愿加一台 HK runner。
- 网络: 新加坡酒店与漫游经验仍适用;香港多了跨境 LFS、公司 VPN 分流问题。
- 节点: 新加坡文强调「人在坡县不必同区」;本篇强调人在大湾区应把日间编放香港,除非你没有 HK 机。
两篇文章可组成「亚太出差实录」系列;都不替代 区域选型长文,那只在你做年度采购时读一次即可。
FAQ
人不在香港,能用香港节点吗? 能。SSH 与你在哪座城市无关;本篇说的是「你人恰好在香港/大湾区」时的最优习惯。
必须两台云 Mac 吗? 一台也能做完,但 upload 出口若需北美 IP,单台加拿大机即可;两台是为「日间编跟手 + 夜间上传」分工。
和编译扔上云那篇重复吗? 不重复。那篇解决日常轻薄本;本篇解决跨境驻场 + 演示时间压力。
演示能否现场 Archive? 不建议。客户 Wi‑Fi 不可控;用已处理 TF 包。
香港节点能上 TestFlight 吗? 看 ASC 白名单。我们固定加拿大出口上传;香港只产出 archive。
日志里的 commit 必须一致吗? 不必。字段格式可复用,数字仅作「可核对实录」示范。