如果你很闲而且不想借助在线平台,自行上传ipa到App Store,你需要准备以下工具:
1.打包好的ipa文件
2.github账号(需要耐心或者科学上网)
3.苹果开发者账号
本教程操作完成需耗时15分钟
一、创建github仓库
由于ipa上传需要借助mac系统,而你如果刚好没有mac,就需要创建github仓库,借助工作流程功能来实现(公共仓库免费,私有仓库每月2000分钟使用,上传一次大约2分钟)
二、编写工作流程
需要自行编写工作流程,首先需要确定项目结构,创建好文件夹(需要把ipa文件也放进去)
只需要编写2个文件,upload.yml与Fastfile
upload.yml文件
name: Upload to App Store
on:
push:
branches:
- master
workflow_dispatch: # 手动触发(防止自动运行)
jobs:
upload:
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1.2
- name: Install Fastlane
run: gem install fastlane
- name: Upload IPA to App Store
env:
APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_API_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_API_PRIVATE_KEY }}
APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
run: fastlane upload
注意事项:
1.其中的APP_STORE_CONNECT_开头的参数都需要后续再仓库添加加密值。
2.push那段是每次上传更新仓库时都执行一次本工作流程(如果想完全手动运行可以删除掉)。
3.如果你的苹果开发者账号类型是个人,则不必填写APP_STORE_CONNECT_TEAM_ID,可以删除掉。
Fastfile
default_platform(:ios)
platform :ios do
desc "Upload IPA to App Store"
lane :upload do
deliver(
ipa: "release/app.ipa",
force: true, # 覆盖已存在的版本
skip_metadata: true, # 跳过元数据上传
skip_screenshots: true, # 跳过截图上传
submit_for_review: false, # 不提交审核(仅上传 IPA)
run_precheck_before_submit: false, # 禁用预检查
team_id: ENV["APP_STORE_CONNECT_TEAM_ID"],
api_key: app_store_connect_api_key(
key_id: ENV["APP_STORE_CONNECT_API_KEY_ID"],
issuer_id: ENV["APP_STORE_CONNECT_ISSUER_ID"],
key_content: ENV["APP_STORE_CONNECT_API_PRIVATE_KEY"],
in_house: false # 非企业账号设为 false
)
)
end
end
注意事项:
1.确定ipa文件是否在仓库中,对应配置可以自行调整,企业账号指299美元那种,普通个人或组织就false。
2.如果你的苹果开发者账号类型是个人,则不必填写team_id,可以删除掉。
编写完后可以上传到github,初始化完成仓库后进行下一步
三、申请苹果开发者密钥
想上传ipa需要申请苹果的api密钥,本教程是按开启了双重认证的苹果账号为例子,访问以下链接:
进入到指定页面创建密钥,获取我们提交所需要的信息
创建之后我们就能获取的Issuer ID、密钥ID、p8文件,如果你的开发者类型是组织而不是个人,还需要到个人资料获取团队ID
获取到我们需要的信息后,就可以进行下一步填写配置
四、准备上传配置
进入到github对应仓库的设置页面,添加3-4个加密值
APP_STORE_CONNECT_ISSUER_ID:对应App Store Connect生成的Issuer ID
APP_STORE_CONNECT_API_KEY_ID:对应App Store Connect创建的密钥ID
APP_STORE_CONNECT_API_PRIVATE_KEY:对应App Store Connect创建密钥后下载的p8文件内容(复制p8文件内容后直接粘贴)
APP_STORE_CONNECT_TEAM_ID:App Store Connect所在的团队ID(非组织类型账号可以不使用,对应文件需删除字段行)
添加后便可以准备开始上传ipa了
五、执行工作流程
还是在对应仓库,进入到动作页,找到刚刚上传后出现的动作(如果没有出现,则多提交几次yml),执行workflow
执行后会出现运行过程,点击可以进入查看
出现错误是正常的,因为提交的ipa无法直接审核,可能会出现预检查不过关的情况(不影响上传到App Store)
当出现Successfully uploaded package to App Store Connect. It might take a few minutes until it's visible online.时就代表已经上传到App Store了,只需要再去选中构建版本补充信息就能使用了
之后每次需要提交ipa,只需要更新ipa文件,推送到仓库就会执行一次
注意事项:
1.使用时出现无法覆盖之前已上传的ipa版本,目前只能更新ipa的版本号来实现重新上传。
2.app的版本无法被删除,而且必须先提交当前版本才能再创建新版本。