上传构建版本不需要 App Store Connect API 密钥。LingCode 的归档与分发面板仅凭 Apple ID 和应用专用密码即可完成上传——配置最简单,体验最接近 Xcode Organizer 的一键操作。
Xcode 的 Organizer 之所以看起来无需凭据,是因为它悄悄复用了你登录 Xcode 时使用的 Apple ID 账户(Settings > Accounts),并在内部维持了该认证会话。Xcode 之外的任何工具——包括 LingCode 所驱动的 xcrun altool 上传器——都无法借用这个会话,必须提供自己的凭据。Apple 为此提供了两种选择:
.p8 文件,附带 Key ID 和 Issuer ID。用于自动化流程非常可靠,但需要先在开发者门户中创建。(详见设置 App Store Connect API 密钥。)为什么不能直接输入真实的 Apple ID 密码?因为你的账户启用了双重认证,而命令行上传工具无法响应 2FA 验证提示。应用专用密码是 Apple 的解决方案:它是一个有限范围、可随时撤销的密码,可绕过单一工具的 2FA 验证。它并不降低安全性——你可以随时撤销,而且它无法用于在浏览器中登录你的账户。
整个过程大约一分钟,只需操作一次:
+),输入一个便于识别的标签(如 LingCode upload),然后确认。xxxx-xxxx-xxxx-xxxx。此密码只显示一次。请立即复制。在 LingCode 中,打开文件菜单 > 归档与导出…。弹出的面板名为归档与分发,结构与 Xcode Organizer 一致:从上到下分为三个步骤。
点击 1 · 归档。此步骤会执行 Release 构建,生成 .xcarchive——一个持久的、自包含的构建产物。这是最耗时的步骤(完整的优化编译),因此只需执行一次。如果之前已经生成过归档,LingCode 会在打开时自动检测到,按钮会显示为重新归档——你可以直接跳到导出步骤。
在 2 · 导出下,将方式设置为 App Store,然后点击导出。此步骤将归档转换为实际可上传的产物——iOS 的已签名 .ipa 或 macOS 的 .pkg——并按 App Store Connect 的要求打包。
只有 App Store 方式产生的包才会被 TestFlight 接受。Development 和 Ad Hoc 导出仅用于直接安装到设备;App Store Connect 会拒绝它们。因此,下方的上传步骤只有在完成 App Store 导出后才会激活。
.xcarchive,任何设备都无法安装。
App Store 导出完成后,3 · 上传至 App Store Connect 面板将变为可用状态。保持身份验证选项为 Apple ID(默认),然后:
LingCode 会对刚才导出的产物运行 xcrun altool --upload-app——无需第二次归档或重新导出。上传成功后,构建版本将出现在 App Store Connect 的 TestFlight 下,Apple 处理通常需要 5–30 分钟。
LingCode 会解析 altool 的输出并给出具体原因。以下是最常见的几种:
完整的 xcodebuild 和 altool 日志会写入项目目录下的 build/export.log,面板上的查看日志按钮可直接跳转至该文件——当单行错误信息不够详细时非常有用。
如果你将身份验证选项切换为 API 密钥 (.p8),上述所有步骤同样适用——此时需要输入 Key ID、Issuer ID、Team ID,并选择你的 AuthKey_*.p8 文件,而不是 Apple ID。当你不希望绑定个人 Apple ID(CI 环境、共享构建机器),或者已经在为 LingCode Agent 管理密钥时,建议使用这种方式。一次性密钥创建流程详见设置 App Store Connect API 密钥。