构建和发布Mac及iOS应用而不打开Xcode
最近,我听到几个与Apple相关的播客主持人谈论Xcode有多糟糕,以及Apple需要通过使Xcode变得不那么晦涩来改善Mac和iOS应用的氛围编码。他们并没有错,但我也不明白为什么他们一开始要打开Xcode。通过一点前期工作,你可以尽情进行Mac和iOS应用的氛围编码,而无需再查看Xcode。如果你对如何使以下任何内容工作感到疑惑,可以将Claude Code或你选择的LLM编码工具指向这篇博客文章,让它来解决。这正是它的工作,解决你不想处理的事情。简而言之,必须安装Xcode.app,但它永远不需要打开。xcodebuild、notarytool、stapler和devicectl都位于Xcode内部,可以从shell正常运行。有几个一次性步骤需要GUI(或交互式终端):登录你的Apple ID,创建Developer ID证书,存储公证密码。此后,构建和部署完全无头。Mac应用通过一个脚本发布——scripts/release.sh——你只需编写一次。它运行整个流程:归档 → Developer ID签名 → 公证 → 粘贴 → 安装到/Applications。签名是基于证书和钥匙串的。签名密钥位于登录钥匙串中;xcodebuild会自动找到它。代码库中没有秘密。一开始,只有一次性设置有一些摩擦,所以我们先解决它。安装Xcode 你确实必须安装Xcode,这一点不可避免,因为构建依赖Xcode.app内部的工具。安装Xcode后,请确保它是选定的命令行工具链,而不是/Library/Developer/CommandLineTools。如果检查输出为/Applications/Xcode.app/Contents/Developer,则状态良好:❯ xcode-select -p /Applications/Xcode.app/Contents/Developer 如果返回单独的CommandLineTools路径,请将其指向Xcode。sudo xcode-select -s /Applications/Xcode.app/Contents/Developer 注意:“命令行工具”这个名称可能会让人困惑。这是因为有一个单独的命令行工具包,可以通过xcode-select --install获得,它是/Library/Developer/CommandLineTools版本。它包含clang和git,但不包含iOS SDK、notarytool、devicectl和其他全应用开发所需的项目。完整的工具链在Xcode.app内部位于/Applications/Xcode.app/Developer处,里面有你所需的一切。如果你安装了Xcode,你不需要单独的命令行工具。安装XcodeGen Xcode及其命令行工具不足以自动生成和管理Xcode项目。为此,你需要XcodeGen。你可以从Github下载它,或使用homebrew安装:brew install xcodegen 长话短说,Xcode项目实际上是macOS将文件夹显示为文件的结构,它们包含创建和编译应用所需的所有项目内容。Xcode不断修改文件和文件引用,这给git存储库造成了问题。Xcodegen创建一个project.yml(YAML)文件,其中包含所有项目设置,在每次构建时使用该project.yml文件重新创建整个.xcodeproj文件夹。只有YAML文件需要提交到git,整个.xcodeproj可以从git的角度被忽略。配置Xcode,一旦你需要初步设置Xcode,以便以后永远无需查看它。Xcode许可证和附加组件 首先,接受其许可证并安装附加组件,或通过命令行完成:sudo xcodebuild -license accept sudo xcodebuild -runFirstLaunch 在Xcode中设置你的Apple开发者帐户 接下来,打开Xcode,点击设置 → 账户,然后点击+以添加你的账户。注意:你必须拥有一个付费的Apple开发者帐户才能分发和公证你的应用。而且你希望它们被公证以便在Mac和iOS设备上安装,而不是让操作系统认为它们是恶意软件并删除它们。创建一个Developer ID应用证书 完成后,创建一个Developer ID应用证书(设置 → 账户 → 你的Apple ID → 管理证书… → + → Developer ID Application),这将为签名已发布的.app包生成证书。请注意,Developer ID应用证书和你的Apple开发证书是两个不同的东西。Apple开发身份用于在你自己的设备上构建和运行——推送到你的iPhone,进行本地调试。Developer ID应用身份用于能够通过Gatekeeper存活并在他人的Mac上运行的公证.app。发布脚本需要第二个证书。在Xcode中创建证书会将证书及其私钥安装到你的登录钥匙串中。这个私钥实际上用于签名,不能重新下载——所以不要删除它,并备份你的钥匙串。在有疑问时,请询问你选择的LLM。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡