Featured image of post iOS 应用开发与证书管理:开发者账号、Identifiers 与 Profiles

iOS 应用开发与证书管理:开发者账号、Identifiers 与 Profiles

iOS 应用从 0 到上架的完整证书体系:Apple ID、开发者账号、App ID、Capabilities、Certificates 证书申请、Devices 注册、Provisioning Profiles 配置。

准备工作

iOS 开发需要两样硬件

  • iPhone 手机(调试设备,UDID 唯一)
  • Mac 电脑(macOS 10.9+,钥匙串访问工具)

实际上没有 Mac 也可以用云 Mac(MacStadium、AWS EC2 Mac),但本地 Mac 是最舒服的方案。

一、申请 Apple ID

如果已有 Apple ID 可跳过。访问 https://appleid.apple.com 注册。建议用真实邮箱(后续找回密码用得到)。

二、申请开发者账号

访问 https://developer.apple.com/account

账号类型

类型费用适用
个人(Individual)99 USD/年独立开发者
组织(Organization)99 USD/年公司(需 D-U-N-S 编号)

注册流程:登录 → 选择类型 → 填写资料 → 付款 → 等待审核(1~3 天)。

三、申请 Identifiers(App ID)

App ID 是应用的唯一标识,对应一个 Bundle ID(如 com.yourcompany.appname)。Bundle ID 不可重复,建议用反向域名:

  • 个人:com.firstname.lastname.appname
  • 公司:com.companyname.appname

创建步骤

  1. 登录后台 → Certificates, Identifiers & Profiles → Identifiers
  2. 点击 “+” 添加
  3. 选择 App IDs,点击 Continue
  4. 选择 App
  5. 填写 Description(如 “我的App”)和 Bundle ID(如 com.example.app
  6. Capabilities:勾选需要的能力(推送通知、Sign in with Apple、App Groups、HealthKit 等)
  7. 点击 Continue → Register

常用 Capabilities

  • Push Notifications:推送(必须生成 APNs 证书或 key)
  • Sign in with Apple:Apple 登录
  • App Groups:应用间共享数据
  • Background Modes:后台运行
  • HealthKit / HomeKit / Wallet:健康/智能家居/钱包

四、申请 Certificates(证书)

iOS 证书分三类:

证书用途
Apple Development开发期(真机调试)
Apple Distribution发布期(App Store / Ad Hoc)
APNs SSL (Sandbox & Production)推送通知(Sandbox 开发、Production 生产)

申请步骤(Mac 钥匙串)

  1. 打开 Mac → 应用程序 → 实用工具 → 钥匙串访问
  2. 菜单:钥匙串访问 → 证书助理 → 从证书颁发机构请求证书
  3. 填写:
    • 用户电子邮件:开发者邮箱
    • 常用名称:随便填
    • CA 邮箱:留空
    • 请求是:选择存储到磁盘
  4. 保存得到 CertificateSigningRequest.certSigningRequest 文件
  5. 回到 Apple Developer 后台 → Certificates → “+”
  6. 选择证书类型(Apple Development / Apple Distribution)
  7. 上传 .certSigningRequest 文件
  8. 下载生成的 .cer 证书
  9. 双击 .cer → 用钥匙串打开
  10. 在钥匙串中找到该证书 → 右键 → 导出 → 保存为 .p12(含私钥)

p12 密码:导出时设一个密码。别忘了这个密码——CI/CD、Fastlane、跨电脑开发都要用。

推送证书(APNs)

  • 同上,但选 Apple Push Notification service SSL (Sandbox & Production)
  • 同一个 App ID 可以同时有 Development 和 Production 推送证书
  • iOS 13+ 起,也可以用 APNs Auth Key(.p8) 替代 SSL 证书——一份 key 通用 Sandbox 和 Production

五、添加调试设备

调试设备必须先在 Apple Developer 后台注册 UDID。

获取 UDID

  1. iPhone 用数据线连接 Mac
  2. 打开 iTunes(macOS Catalina 之前)/ Finder(Catalina 之后)
  3. 点击 iPhone 图标
  4. 在序列号区域点击切换显示 UDID
  5. 右键 → 复制

添加到 Apple Developer

  1. 后台 → Devices → All → “+”
  2. 填写:
    • Platform:iOS / tvOS / watchOS
    • Device Name:随便(如 “iPhone 15 - Dev”)
    • Device ID (UDID):粘贴刚才复制的 UDID
  3. Register

个人开发者账号最多注册 100 台 设备(每年重置一次)。

六、申请 Provisioning Profiles

Profile 把 App ID + Certificates + Devices 串起来,是 Xcode 编译时真正要的"凭证包"。

类型

Profile用途
iOS App Development真机调试
Ad Hoc内测(不上 App Store,最多 100 台设备)
App Store上架 App Store

创建步骤

  1. 后台 → Profiles → All → “+”
  2. 选择类型 → Continue
  3. 选择 App ID → Continue
  4. 选择证书(Apple Development / Apple Distribution)→ Continue
  5. 选择调试设备(仅 iOS App Development / Ad Hoc)→ Continue
  6. 命名 Profile(如 “MyApp Dev”)→ Generate
  7. 下载 .mobileprovision 文件
  8. 双击安装到 Xcode

添加新设备后必须重新生成 Profile——老的 Profile 不会自动包含新设备。

七、Xcode 中配置

  1. 打开 Xcode → 项目 → Signing & Capabilities
  2. 勾选 Automatically manage signing(Xcode 自动管理)
  3. Team 选择你的 Apple Developer Team
  4. Bundle Identifier 填刚才创建的 App ID

或者手动管理:

  1. 取消勾选 Automatically manage signing
  2. Provisioning Profile 选择刚才下载的
  3. Signing Certificate 选择对应的证书

八、构建并跑真机

1
2
# Xcode 选中真机(不是模拟器)
# Product -> Run (Cmd + R)

首次运行会弹窗要求信任证书:设置 → 通用 → VPN 与设备管理 → 信任开发者。

常见问题

“No code signing identities found”

证书没装到钥匙串。重新双击 .cer 文件。

“Failed to create provisioning profile”

Profile 中没有包含当前设备。重新生成 Profile(包含新设备 UDID)。

“Bundle Identifier conflict”

Bundle ID 全局唯一,换一个。

推送收不到

  • 检查 Capabilities 是否勾选 Push Notifications
  • 检查 APNs 证书是否过期(开发证书 1 年,生产证书 1 年)
  • 改用 APNs Auth Key (.p8) 不会过期

2024+ 视角:自动签名、App Store Connect API、TestFlight

本文 2017 年写时,Xcode 的"自动签名"还是可选功能(Xcode 8 引入但很多团队不敢用)。7 年后(2024),自动签名已经是事实标准——配合 App Store Connect API + TestFlight + Fastlane,整套流程可以做到零人工、零 .p12 邮件。下面是当前的最佳实践。

1. 自动签名(Automatic Signing)—— 现在不用会累死

Xcode 14+(2022-09):自动签名能力再次大幅增强。

1.1 项目配置

1
2
3
4
# Xcode → Project → Target → Signing & Capabilities
☑ Automatically manage signing
  Team: <Your Team ID>
  Bundle Identifier: com.example.app

之后——Xcode 会自动:

  • 创建/更新 App ID
  • 创建/更新 Provisioning Profile(Development / Ad Hoc / Distribution)
  • 关联证书
  • 写入 *.xcodeproj/project.pbxproj

好处

  • 新员工入职 → 登录 Apple ID 即可(不用再走"申请证书 → 申请 Profile → 导出 p12"流程)
  • Bundle ID 改名 → Xcode 自动重建
  • 新增设备 UDID → Xcode 自动重生成 Dev Profile
  • 没有 p12 邮件——告别 .p12 + 密码在企业微信群里传来传去

1.2 仍然需要手动的场景

  • 企业内部分发(In-House / Enterprise)——仍需手动建 Enterprise Profile
  • 跨电脑同步证书——见下节"钥匙串共享"
  • 多 Target / 多 Bundle ID——Target 数量多时仍需手动管理

2. App Store Connect API(替代手工点网页)

2018 年 Apple 推出 App Store Connect API,到 2024 年已经覆盖几乎所有手动操作(上传构建、创建版本、提交审核、管理 TestFlight、管理用户等)。

2.1 创建 API Key

1
App Store Connect → Users and Access → Keys → App Store Connect API → Generate

得到 3 项:

  • Issuer ID(团队级,UUID)
  • Key ID(单 key 唯一)
  • .p8 文件(私钥,只能下载一次

2.2 用 API Key 上传构建(不再用 Transporter GUI)

1
2
3
4
5
6
# 安装 xcrun(Xcode 自带)
xcrun altool --upload-app \
  --type ios \
  --file MyApp.ipa \
  --apiKey ABC123XYZ \
  --apiIssuer 12345678-90ab-cdef-1234-567890abcdef

vs 旧版 Transporter

  • ✅ 可脚本化(CI/CD 友好)
  • ✅ 不需要交互登录
  • ✅ 不需要 2FA 验证码
  • ✅ 一台机器一个 .p8,不受 Mac 换机影响

2.3 用 API Key 自动创建版本 / 提交审核

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 用 PyJWT 签 JWT,调用 App Store Connect REST API
import jwt
import time
import requests

KEY_ID = "ABC123XYZ"
ISSUER_ID = "12345678-90ab-cdef-1234-567890abcdef"
PRIVATE_KEY = open("AuthKey_ABC123XYZ.p8").read()

# 1. 签 JWT
token = jwt.encode(
    {
        "iss": ISSUER_ID,
        "iat": int(time.time()),
        "exp": int(time.time()) + 1200,
        "aud": "appstoreconnect-v1",
    },
    PRIVATE_KEY,
    algorithm="ES256",
    headers={"kid": KEY_ID},
)

# 2. 创建新版本
r = requests.post(
    "https://api.appstoreconnect.apple.com/v1/appStoreVersions",
    headers={"Authorization": f"Bearer {token}"},
    json={
        "data": {
            "type": "appStoreVersions",
            "attributes": {
                "versionString": "1.2.0",
                "platform": "IOS",
            },
            "relationships": {
                "app": {"data": {"type": "apps", "id": "1234567"}}
            },
        }
    },
)
print(r.json())

3. TestFlight 2024 现状

Xcode 14+ 起 TestFlight 体验大幅提升

特性2017 状态2024 状态
内测名额25 个内部 + 1000 外部100 个内部 + 10000 外部
外部测试需 Apple 审核不再需要(自动通过)
构建有效期60 天90 天
群组管理后台手动API 自动化
安装方式邮件 / 链接TestFlight App / 公开链接 / QR Code

TestFlight 公开链接(2020 推出):

1
https://testflight.apple.com/join/XXXXXXXX

任何人点链接 → 安装 TestFlight App → 收到邀请 → 安装内测版。适合 50 人以内的小范围灰度

4. Fastlane match —— 证书管理的"正确姿势"

本文 2017 时 Fastlane 还很新,2024 已经成熟到"不用不专业"。

4.1 match 是什么

把证书和 Profile 集中存到一个 Git 仓库(可以是私有 GitLab/Gitee),全团队共享。新员工入职 = 拉一次 git 仓库 = 拿到所有证书

4.2 初始化

1
2
3
4
5
6
7
8
9
# 1. 装 fastlane
sudo gem install fastlane

# 2. 在项目根目录初始化
fastlane match init

# 3. 创建证书 + Profile(一次性)
fastlane match appstore       # App Store 分发
fastlane match development    # 真机调试

4.3 在 CI/CD 里用

1
2
3
4
5
6
7
8
# CI 拉证书
fastlane match appstore --readonly \
  --git_url git@gitlab.example.com:mobile/ios-certificates.git \
  --git_branch main \
  --app_identifier com.example.app

# 接着打包
fastlane build_release

好处

  • 不再用邮件发 p12——告别"证书密码忘了"、“p12 过期”、“新员工入职没人理”
  • CI 机器无障碍——GitHub Actions / GitLab CI 直接拉
  • 审计友好——所有证书变更都有 git 提交记录

5. 钥匙串共享(跨 Mac 同步)

如果仍然用手动签名 + 跨 Mac 开发,用 iCloud 钥匙串

1
系统设置 → 通用 → Apple ID → iCloud → 钥匙串 ☐→☑

之后——所有登录 Apple ID 的 Mac 自动共享证书 / 私钥。新 Mac 登录 = 5 分钟拿到所有签名材料

6. 2024 iOS 证书管理完整流程(推荐)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
首次(一次性):
  1. 团队 Leader  fastlane match
      创建 App ID / Cert / Profile  推到 Git 仓库

日常开发:
  2. 新员工 git pull 证书仓库
  3. fastlane match development --readonly
  4. Xcode 打开  自动签名(团队 ID + Bundle ID 一致就行)

CI/CD
  5. GitLab CI  fastlane match appstore --readonly
  6. fastlane build  altool 上传到 App Store Connect

上架:
  7. App Store Connect APIJWT)创建版本、提交审核
  8.  TestFlight 公开链接做灰度

对比 2017:从"邮件发 p12、群里问密码、找运维加 UDID" → “git pull + fastlane 一条命令”。工程师精力从 1 天降到 5 分钟

7. 2024+ 关键工具版本

工具2017 主流2024 主流
Xcode8.x15.x / 16 beta(2024)
iOS SDKiOS 10/11iOS 17 / 18 beta
Swift3.x5.9 / 5.10
TestFlight内测 25 人100 + 10000 + 公开链接
证书管理手动 / 邮件 p12fastlane match + 自动签名
上传工具Transporter GUIxcrun altool + App Store Connect API
签名方式手动Xcode 自动签名
Provisioning Profile手动生成自动生成(Xcode 14+)

8. 一句话总结

2017 年的 iOS 签名是"每个工程师都要会手动申请证书“的工程师成年礼; 2024 年是”自动签名 + fastlane match + App Store Connect API + TestFlight 公开链接“的"零证书知识"时代。

新人不要再学手动签名——直接 fastlane match 拉仓库、Xcode 自动签名,几分钟搞定。


下一步

参考资料

  • Apple Developer:https://developer.apple.com/account
  • 证书管理:https://developer.apple.com/help/account
  • Bundle ID 命名规范:https://developer.apple.com/documentation/bundleresources
  • APNs 文档:https://developer.apple.com/documentation/usernotifications
  • App Store Connect API:https://developer.apple.com/documentation/appstoreconnectapi
  • fastlane match:https://docs.fastlane.tools/actions/match/
  • Xcode 自动签名:https://developer.apple.com/documentation/xcode/automatic-signing
使用 Hugo 构建
主题 StackJimmy 设计