一、准备工作(环境、账号、证书与项目基础)
系统与工具
- macOS:使用与最新 Xcode 兼容的版本。
- Xcode:从 Mac App Store 安装最新稳定版(建议与当前 App Store 必需的 Xcode 主版本保持一致)。
- Unity:使用一个长期支持或稳定版本;安装 iOS Build Support(含 IL2CPP 与 Mac Build Support)。
- CocoaPods:若项目或三方 SDK 使用 Pod,安装 pod 工具:sudo gem install cocoapods
- 命令行工具:Xcode 安装后运行 xcode-select --switch /Applications/Xcode.app
Apple 开发者账号
- 申请与开通:加入 Apple Developer Program(个人或公司)。
- 角色分配:确保有 App Manager、Developer、Access to Certificates 等权限,便于创建 App、证书与上传构建。
证书、App ID、Provisioning Profile
- App ID(Bundle ID):在开发者后台创建,如 com.company.game,开启所需 Capabilities(如 Push、Game Center、IAP、Sign in with Apple 等)。
- 证书类型:
- iOS Development(开发调试)
- iOS Distribution / App Store(商店分发)
- 描述文件(Provisioning Profiles):
- Development(开发真机调试,需设备 UDID)
- App Store(上架分发,不需要绑定设备)
- Ad Hoc(线下分发,需设备 UDID;可选)
- 注意:做 TestFlight 不需要收集测试机 UDID;Ad Hoc 才需要。
素材与合规准备
- App 图标与启动屏:iOS 要求使用 Launch Screen Storyboard(禁止旧式静态 Launch Images)。Unity 可配置“Custom iOS Target Launch Screen”或自定义 Storyboard。
- 隐私与合规:
- 隐私权限文案:在 Info.plist 填写各权限用途说明,如 NSCameraUsageDescription、NSMicrophoneUsageDescription、NSUserTrackingUsageDescription(若使用 IDFA/广告)。
- 数据类型与用途:App Store Connect“隐私营养标签”填写。
- 加密合规:如使用或链接到加密,需在提交时填写出口合规问答。
- 截图与预览:准备 6.7" iPhone、5.5" iPhone、iPad(如支持)的截图与可选预览视频。
二、Unity 工程配置(iOS + IL2CPP)
- 切换平台
- File -> Build Settings -> iOS -> Switch Platform
- Scenes In Build:勾选你的首场景在列表顶部
- Player Settings 关键项
- Identification
- Company Name/Product Name:作为包信息来源
- Bundle Identifier:与开发者后台 App ID 一致
- Version(CFBundleShortVersionString,如 1.0.0)
- Build(CFBundleVersion,整数自增,如 1、2、3…)
- Signing Team ID:填你的团队 ID(可启用 Unity 自动签名)
- Resolution and Presentation
- Default Orientation:根据游戏设定(竖屏/横屏)
- Status Bar:一般隐藏
- Launch Screen:推荐使用自定义 Storyboard(符合 Apple 要求)
- Other Settings
- Scripting Backend:IL2CPP(iOS 必须)
- Api Compatibility Level:.NET Standard 2.1 或兼容你项目的最低要求
- Target minimum iOS Version:根据你的受众与 SDK 要求(常见 12.0+ 或 13.0+)
- Architecture:ARM64(App Store 仅支持 64 位)
- Metal:仅启用 Metal(OpenGL ES 已不再推荐)
- Allow ‘HTTP’ downloads:如需非 HTTPS,配置 ATS(更推荐服务端改为 HTTPS)
- Script Call Optimization:Fast but no Exceptions(性能优先);若依赖异常栈,使用 Slow and Safe
- Managed Stripping Level:Medium/High 以减小包体,但注意反射类保留(可用 link.xml)
- Objective-C/C++ Exceptions:如第三方 SDK 需要,可启用 C++ Exceptions
- Bitcode:Xcode 14 起已移除,无需配置
- Optimization
- Strip Engine Code:开启以减小体积(注意兼容)
- IL2CPP Code Generation:Faster(发布)或 Faster Runtime(调试)
- Identification
- 构建导出
- Build Settings:选择 “Build”(建议不要直接 Build and Run)
- 输出为 Xcode 工程目录
- 如用到 Pods,Unity 会生成 Podfile;首次用 Xcode 运行前执行 pod install 生成 .xcworkspace
三、使用 IL2CPP 构建与 Xcode 编译
CocoaPods(如有)
- 在 Xcode 工程目录执行:pod install
- 之后请使用 Unity-iPhone.xcworkspace 打开工程(而非 .xcodeproj)
Xcode 签名与能力
- Signing & Capabilities
- 勾选 Automatically manage signing(推荐)并选择 Team
- Bundle Identifier 要与 Profile 的 App ID 匹配
- 添加所需 Capabilities(Push、IAP、Game Center 等)
- Build Settings
- Provisioning Profile / Code Signing:自动签名时通常无需手配
- Build Configuration:Release 用于提交
- 运行一次 Archive 前,先在模拟器或真机“Build”验证无编译错误
- Signing & Capabilities
四、命令行打包(xcodebuild)
清理与归档(不使用 Pods 的工程)
- xcodebuild clean archive -project Unity-iPhone.xcodeproj -scheme Unity-iPhone -configuration Release -destination 'generic/platform=iOS' -archivePath build/Unity-iPhone.xcarchive
清理与归档(使用 Pods 的工程,注意 workspace)
- xcodebuild clean archive -workspace Unity-iPhone.xcworkspace -scheme Unity-iPhone -configuration Release -destination 'generic/platform=iOS' -archivePath build/Unity-iPhone.xcarchive
导出 IPA(需要 exportOptions.plist)
- 示例:App Store 导出 exportOptions.plist
- {
"method": "app-store",
"uploadSymbols": true,
"compileBitcode": false,
"destination": "export",
"signingStyle": "automatic",
"stripSwiftSymbols": true
}
- {
- 执行导出
- xcodebuild -exportArchive -archivePath build/Unity-iPhone.xcarchive -exportPath build/ipa -exportOptionsPlist exportOptions.plist
- 完成后在 build/ipa 下获得 .ipa 文件
- 示例:App Store 导出 exportOptions.plist
进阶:显式指定签名(如需)
- 在 archive 命令后追加:
- DEVELOPMENT_TEAM=你的TeamID CODE_SIGN_STYLE=Automatic
- 若使用手动签名,设置 PROVISIONING_PROFILE_SPECIFIER、CODE_SIGN_IDENTITY 等
- 在 archive 命令后追加:
五、上传到 App Store Connect
- 方式 A:Xcode Organizer(最稳妥)
- Xcode -> Product -> Archive -> Distribute App -> App Store Connect -> Upload
- 完成后在 App Store Connect 的 “TestFlight” 或 “App Store” 可看到构建
- 方式 B:Transporter(GUI)
- 从 Mac App Store 安装 Transporter,用 Apple ID 登录,拖拽 .ipa 上传
- 方式 C:CI/自动化(可选)
- 可用 fastlane deliver/pilot 实现一键上传(团队内可再落地)
六、TestFlight 测试
- 内测(Internal):
- 团队成员可立即使用,无需 Beta 审核
- 外测(External):
- 需提交 Beta 审核(通常较快),可邀请最多 10,000 名测试者
- 测试配置
- 填写测试信息、合规问答(加密等),设置过期提醒
- 可分发测试说明与反馈渠道