先定位,再排查

让打包任务继续跑下去

查连接、工具链、签名与计费。先核对下面的命令和边界;仍未解决,再把节点信息与脱敏日志交给支持人员。

已租用节点的问题,请使用订单所属账户提交,便于核对实例与账单。

按问题所在环节开始

从失败发生的位置选入口。不必先改整条流水线,先确认最小复现任务能否通过。

账户与计费

核对订单所属邮箱、租期与账单状态。续费前确认实例和周期,付款后以控制台返回结果为准。

连接与远程桌面

先区分 SSH 不可达、认证失败和图形界面连接失败。记录具体错误,不在工单中粘贴登录密码。

Xcode 与签名

先核对当前开发者目录,再检查证书私钥、描述文件与 Target。工具链与签名问题分别验证。

CI/CD 接入

确认 runner 的执行用户、标签和工作目录。手动任务通过后,再接入自动触发与凭据注入。

数据与重装

区分源码、缓存与密钥。重装前把必要数据备份到节点外,并验证备份确实能恢复。

从一条命令验证

打包机高频问答

下面的路径、Scheme 与项目名是命令示例,执行前替换为自己的工程信息。涉及权限或证书的操作,先在单个测试任务中验证。

如何用 xcode-select 切换多版本 Xcode?

先查看当前开发者目录和版本,确认目标 Xcode 已安装。以下示例把系统默认目录切到 /Applications/Xcode.app;使用其他版本时,替换成实际应用路径。

xcode-select -p
xcodebuild -version
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcodebuild -version
xcrun --find swift

系统级切换会影响随后启动的其他任务。若不同流水线需要不同版本,优先在任务环境中设置 DEVELOPER_DIR,不要让两个作业反复修改全局目录。

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -list -workspace MyApp.xcworkspace

切换后先列出 Scheme,再做一次 Archive。缺少平台组件或首次运行配置时,先在 macOS 图形界面完成对应工具链的初始化,再恢复自动化任务。

如何导入分发证书与描述文件?

准备包含私钥的证书导出文件、该文件的密码,以及匹配 App 标识和分发方式的描述文件。只有证书、没有对应私钥,通常无法完成代码签名。

  1. 以运行构建任务的 macOS 用户打开“钥匙串访问”,把证书导入该用户的钥匙串。
  2. 展开证书,确认下面存在对应私钥。用下方命令检查有效的代码签名身份。
  3. 按所用 Xcode 版本的要求安装描述文件;在项目签名设置中核对 Team、Bundle Identifier 和分发方式。
  4. 逐个检查 App、Widget 和 Extension 的签名配置,再执行 Archive 与导出验证。
security find-identity -v -p codesigning

CI 执行用户的钥匙串环境可能不同于远程桌面用户。无人值守构建需要在作业中正确解锁钥匙串并配置必要访问权限。密码从 CI 的受保护变量读取,不写入仓库、命令回显或工单。

若手动打包通过、CI 失败,优先比较执行用户和钥匙串状态。提交签名错误时,只提供证书类型、有效期与脱敏错误行,不上传私钥或证书密码。

重装系统后,节点上的数据会保留吗?

不要把重装当作保留文件的操作。重装可能清除系统与工作目录;提交请求前,先通过控制台工单确认处理范围,并完成节点外备份。租期结束后,节点执行磁盘擦除,不能把到期后的节点作为恢复来源。

备份至少包含未推送的源码、构建配置、必要工件、描述文件及受保护的密钥材料。DerivedData、依赖下载目录等缓存可重新生成,但会影响恢复后的首次构建时间。

备份完成不等于恢复可用。选一个独立目录解压备份,核对文件数量与关键配置,确认能够取回最近一次产物,再停止原节点任务。重装后重新安装工具链、恢复签名环境并注册 runner。

租期到期前如何续费?

登录订单所属账户,在控制台核对实例、到期时间与可选续费周期,然后按页面返回的账单完成付款。续费成功与新的租期以控制台实时返回为准,不以支付截图或浏览器关闭前的画面判断。

仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),全部以美元结算;实际可用网关以后端接口返回为准。链上付款前核对网络、金额与收款信息,卡支付完成后返回控制台检查账单。

若账单与实例状态不一致,提交订单编号、账单编号及交易参考信息。不要重复付款来尝试修复状态,也不要在工单中发送完整卡号。到期前先备份工件与必要文件,避免把续费流程当作数据备份机制。

SSH 或远程桌面连不上,先检查什么?

先在控制台核对节点地址、端口、用户名和实例状态。区分连接超时与认证失败:前者优先检查网络可达性,后者优先检查用户名、密码或密钥。SSH 与 VNC 使用各自的连接信息,不要混用端口。

ssh -v -p PORT USER@HOST

把 PORT、USER、HOST 替换为实际信息。日志中若出现主机指纹变化,先通过可信的控制台信息或工单确认原因,不要直接关闭主机身份校验。

远程桌面适合检查 macOS 图形界面、钥匙串和 Xcode 设置;SSH 适合命令行和 CI。提交日志前移除用户名、地址及本地路径中的敏感信息,只保留错误类型与发生顺序。

注册 self-hosted runner 后,为什么作业一直等待?

按四项核对:runner 是否在线、作业标签是否匹配、项目是否允许使用该 runner、进程是否以正确用户运行。注册成功只代表建立了关联,不代表所有作业都会自动分配到该节点。

先提交只输出工具链信息的测试作业,确认执行用户、目录和 Xcode 版本,再加入依赖安装与签名步骤。

whoami
pwd
xcode-select -p
xcodebuild -version
security find-identity -v -p codesigning

把 macOS、芯片架构与用途写进标签,并在项目配置中明确选择。初次接入先限制单任务执行,确认缓存、钥匙串和产物目录互不覆盖,再逐步增加并发。注册令牌属于凭据,不应进入工单或构建日志。

工程能编译,但 Archive 失败,如何缩小范围?

先确认使用的是正确 workspace、共享 Scheme 和 Release 配置。Archive 与模拟器构建不是同一条路径;设备目标的签名、架构和导出设置需要单独核对。

xcodebuild -list -workspace MyApp.xcworkspace
xcodebuild archive \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath build/MyApp.xcarchive

保留第一条实质错误及其上下文,不只截取最后的“失败”结论。分别检查依赖安装、脚本阶段、签名阶段和磁盘写入。Archive 成功后仍需验证导出工件,不能把归档完成等同于可分发包已生成。

磁盘空间不足,可以直接删除所有缓存吗?

先检查磁盘占用与任务状态,再区分可重建缓存和需要保留的产物。不要在正在执行的作业中删除它依赖的目录,也不要把源码、签名材料或尚未上传的 Archive 当作缓存处理。

df -h
du -sh ~/Library/Developer/Xcode/DerivedData
du -sh ~/Library/Developer/Xcode/Archives

为缓存与产物分别制定保留规则。清理后首次编译和依赖解析可能变慢,应把这次构建当作冷启动验证。长期空间不足时,先统计项目与工件增长量,再选择更合适的机型或 SSD 附加项。

把工单里的术语对齐

八个常见词,分别对应资源、连接、构建与签名。描述问题时使用具体对象,减少来回确认。

物理节点
实际运行 macOS 的 Mac mini。XCRent 提供独享物理机,非虚拟机;节点信息用于定位实例,不等同于项目里的 CI 作业编号。
独享
整台物理节点在租期内由一个租户使用。租户自己的多个作业仍会竞争 CPU、内存与磁盘,因此需要自行安排并发和目录隔离。
VNC
远程桌面连接方式,用于操作 macOS 图形界面。适合核对 Xcode 设置、钥匙串与系统状态;实际地址与凭据从登录后的控制台获取。
SSH
加密命令行连接方式,适合执行命令、传输文件与部署自动化。密钥认证需要保护私钥,并校验服务端身份;它不是远程桌面协议。
self-hosted runner
部署在自己节点上的 CI 执行进程。它接收项目作业并以指定用户执行;在线状态、标签、权限与工作目录共同决定任务能否运行。
Archive
Xcode 的归档构建产物,包含用于后续导出的应用内容与相关信息。Archive 成功不等于导出已成功,需要继续核对签名与分发配置。
描述文件(Provisioning Profile)
用于约束应用标识、能力、证书及分发范围的签名文件。它需要与 Target 配置匹配,不能单独替代分发证书及对应私钥。
统一内存
Apple Silicon 中 CPU 与 GPU 共享的内存资源。编译、模拟器和模型任务同时运行时,需一起评估内存压力,不能把全部容量都留给某一个作业。
可用率与补偿

看月度口径,不把构建失败当停机

节点全年 365 天正常运行。服务可用性与项目编译结果分别核对:证书过期、项目配置错误或用户自身操作导致的失败,不直接代表节点不可用。

月度可用率承诺

99.9%

月度可用率低于承诺时,按未达时长折算租期补偿。申请时提供实例、受影响时段与连接记录,由支持人员核对服务端记录及适用范围。

近 90 天记录口径

本页未接入节点监测记录,因此不展示每日运行状态,也不将承诺值写成实测结果。实际事件记录请通过控制台工单核对。

回看范围
近 90 天
本页数据状态
未接入监测记录
补偿核算周期
按月核对

保留哪些证据

记录异常开始与恢复时间,并注明时区;保留连接错误、重试结果和受影响实例。不可抗力与用户自身操作等除外项按服务条款核对。不要只提交一张流水线失败截图,也不要用本地网络中断直接推算节点停机时长。

提交能直接开始排查的工单

已租用户从控制台提交;售前、商务或安全报告可发送至 support@xcoderent.com。这两个入口覆盖全部支持请求。

  1. 01

    标明实例

    提供订单编号、节点城市与机型。节点目录为新加坡、东京、首尔、香港、美国东部、美国西部;机型写 XR Build 16、XR Build 24 或 XR Build Pro 64,避免只写“那台打包机”。

  2. 02

    说明现象

    写明失败发生在哪一步、何时开始、是否持续,以及最近是否切换 Xcode、修改签名或调整 runner。注明时间使用的时区,避免跨节点记录对不上。

  3. 03

    附最小复现

    提供经过脱敏的命令、第一条实质错误和已尝试的检查。不要发送私钥、登录密码、注册令牌或完整付款卡信息;日志中的敏感路径也应先移除。

  4. 04

    写清影响范围

    区分单个项目失败、全部作业失败和节点连接失败。若还有可运行任务,说明哪些通过、哪些失败,让支持人员先判断是工具链、项目还是实例层面的问题。

响应进度在哪里看?

工单进度、补充信息请求与处理回复在控制台查看。本页不承诺未经确认的固定分钟级响应时限;需要交付时间或恢复预期时,请在工单中说明业务截止时间,由支持人员结合实际问题确认。重复提交相同问题不会增加排查信息,优先在原工单补充记录。

还没有找到答案?

把你的构建队列、使用周期或具体报错告诉我们。联系页说明如何整理咨询;已有订单的问题,直接在控制台保留完整排查记录。