一、準備工作(環境、賬號、證書與項目基礎)
系統與工具
- 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 名測試者
- 測試配置
- 填寫測試信息、合規問答(加密等),設置過期提醒
- 可分發測試說明與反饋渠道