[无需 Mac] 使用 GitHub Actions 构建 iOS 应用
- [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
- 介绍
- 1.准备存储库
- 2.配置 GitHub Actions
- 3. 设置密钥密码
- ExportOptions.plist创建
- 创建 App Store Connect API 密钥
- 如何进行Base64编码
- 设置应用密码
- 4.执行
- 当出错时
推荐超级课程:
- 本地离线DeepSeek AI方案部署实战教程【完全版】
- Docker快速入门到精通
- Kubernetes入门到大师通关课
- AWS云服务快速入门实战
介绍
GitHub Actions 是 GitHub 上用于自动化工作流程的功能。
在本文中,我们将向您展示如何在没有 Mac 的情况下使用 GitHub Actions 构建 iOS 应用。
要上传到 App Store Connect,您需要注册 Apple 开发者计划。
1.准备存储库
首先,准备好你的 iOS 应用仓库。
本文假设你的应用目录结构如下:
.
├── .github
│ └── workflows
│ └── build.yml
├── MyApp
│ ├── MyApp.xcodeproj
│ └── ...
└── ...
2.配置 GitHub Actions
在存储库根目录中.github/workflows/build.yml
创建一个目录,其中包含以下内容:
构建文件
name: Buildon:pushjobs: build:name: Buildruns-on: macos-lateststeps:- name: Checkoutuses: actions/checkout@v4- name: Archive Projectrun: | xcodebuild archive -project MyApp/MyApp.xcodeproj \-scheme MainApp \-sdk iphoneos \-configuration Release \-archivePath MainApp.xcarchive \CODE_SIGNING_ALLOWED=NO- name: Create ExportOptions.plistrun: |echo '${{ secrets.EXPORT_OPTIONS }}' > ExportOptions.plist- name: Create Private Keyrun: |mkdir private_keysecho -n '${{ secrets.APPLE_API_KEY_BASE64 }}' | base64 --decode > ./private_keys/AuthKey_${{ secrets.APPLE_API_ISSUER_ID }}.p8- name: Export IPArun: | xcodebuild -exportArchive \-archivePath MainApp.xcarchive \-exportOptionsPlist ExportOptions.plist \-exportPath app.ipa \-allowProvisioningUpdates \-authenticationKeyPath `pwd`/private_keys/AuthKey_${{ secrets.APPLE_API_ISSUER_ID }}.p8 \-authenticationKeyID ${{ secrets.APPLE_API_KEY_ID }} \-authenticationKeyIssuerID ${{ secrets.APPLE_API_ISSUER_ID }}- name: Upload IPA to App Store Connectrun: |xcrun altool --upload-app -f app.ipa/MainApp.ipa \-u ${{ secrets.APPLE_ID }} \-p ${{ secrets.APP_SPECIFIC_PASSWORD }} \--type ios
在此设置中,xcodebuild
我们使用命令来构建我们的 iOS 应用程序,并xcrun altool
使用命令将其上传到 App Store Connect。
要点如下:
- Xcode 项目路径
MyApp/MyApp.xcodeproj
和方案名称MainApp
均为默认设置。请根据需要进行更改。 - 在您的 Xcode 项目中启用自动签名。
xcodebuild build
,xcodebuild archive
当CODE_SIGNING_ALLOWED=NO
您指定使签名无效时。- 私钥路径在内部隐式引用,不应更改。
-allowProvisioningUpdates
因为您指定了,所以您不需要配置文件,
并且您不需要每年更新配置文件。
3. 设置密钥密码
在 GitHub 存储库设置屏幕上,在“存储库机密”中设置以下机密。
有关详细的设置说明,请参阅GitHub 文档。
EXPORT_OPTIONS``ExportOptions.plist
内容:APPLE_API_KEY_BASE64
:App Store Connect API 密钥的 Base64 编码内容APPLE_API_ISSUER_ID
:App Store Connect API 发行者 IDAPPLE_API_KEY_ID
:App Store Connect API 密钥 IDAPPLE_ID
:Apple IDAPP_SPECIFIC_PASSWORD
:Apple ID 应用密码
ExportOptions.plist
创建
EXPORT_OPTIONS
以下是它的内容。您可以从
YOUR_TEAM_ID
Apple Developer Program Membership中查看。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>method</key><string>app-store</string><key>teamID</key><string>YOUR_TEAM_ID</string>
</dict>
</plist>
创建 App Store Connect API 密钥
您可以通过 App Store Connect API 创建App Store Connect API密钥。
您可以使用任意名称,但Admin
需要拥有 App Store Connect API 的访问权限。
有关如何颁发密钥的详细说明,请参阅Apple 的文档。
APPLE_API_KEY_BASE64
是密钥内容。
请注意,该内容只能下载一次。请对其
进行Base64编码并设置为机密。
如何进行Base64编码
您可以使用以下命令将其以 Base64 进行编码:
Windows(PowerShell)
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("AuthKey_YOUR_ISSUER_ID.p8"))
Linux / macOS
base64 -i AuthKey_YOUR_ISSUER_ID.p8
APPLE_API_ISSUER_ID
是密钥的颁发者 ID,
所有密钥的颁发者 ID 都是相同的。
APPLE_API_KEY_ID
是您的密钥 ID。它也是
下载的密钥文件名AuthKey_
后面的字符串。
设置应用密码
APPLE_ID
是您的 Apple ID(电子邮件地址)。
请设置您注册 Apple Developer Program 时使用的 Apple ID。
APP_SPECIFIC_PASSWORD
是根据您 Apple ID 的应用专用密码创建的。
有关如何设置的更多信息,请参阅Apple 的文档。
4.执行
您现在可以出发了。
当您推送到 GitHub 时,GitHub Actions 将自动执行。
如果构建成功,该应用将上传至 App Store Connect。
您可以在 App Store Connect 中创建内部测试版本,无需审核。
不妨在您的 iPhone 上测试一下!
当出错时
如果您的工作流程失败,请检查以下内容:
- Xcode 项目路径和方案名称是否正确?
xcodebuild -list -project MyApp/MyApp.xcodeproj
您可以检查方案名称。 - 您的 Xcode 项目中是否启用了自动签名?
- 密钥密码都设定好了吗?
APPLE_API_KEY_BASE64
它是Base64编码的吗?- App Store Connect API 密钥权限是否正确?
- 您可以检查
MainApp.ipa
目录中是否已创建app.ipa 。
根据项目的不同,它的名称可能会有所不同。
ls -l app.ipa
>