本文由 NRatel 歷史筆記整理而來,如有錯誤歡迎指正。
相關參考文檔
Unity文檔 -> 平臺開發 -> IOS
https://docs.unity3d.com/cn/2021.3/Manual/iphone.html
Unity導出的Xcode 項目的結構
Modifying an Xcode project?use?Xcode.PBXProject.
https://docs.unity3d.com/2021.3/Documentation/Manual/StructureOfXcodeProject.html
iOS 構建環境(iOS Build Support、Xcode、Apple ID、Apple Developer Program)
https://docs.unity3d.com/2021.3/Documentation/Manual/ios-environment-setup.html
Add your Apple ID to Xcode
https://help.apple.com/xcode/mac/current/#/devaf282080a
構建適用于iOS的插件
https://docs.unity3d.com/cn/2021.3/Manual/PluginsForIOS.html
在 iOS 設備上進行故障排除
https://docs.unity3d.com/cn/2021.3/Manual/TroubleShootingIPhone.html
其他:
待細了解概念 Unity Remote
Unity 真機,日志不顯示C#行號,是 IL2CPP的問題:
https://docs.unity3d.com/cn/2021.3/Manual/iOSManagedStackTraces.html
--------------------------------- NRatel 割?---------------------------------
iOS App 簽名原理
開發者賬號登錄
Sign In - Apple
加入 Apple Developer Program
Apple Developer Program - Apple Developer
一些相關相關博文
Apple Developer 個人開發者賬號申請流程
Apple Developer 個人開發者賬號申請流程_蘋果開發者賬號-CSDN博客
Unity如何不使用開發者賬號進行IOS的真機調試
Unity如何不使用開發者賬號進行IOS的真機調試_unity3d開發的游戲如何在iphone上進行免費測試-CSDN博客
IOS Xcode證書配置和ipa打包流程(附詳細圖文教程)
IOS Xcode證書配置和ipa打包流程(附詳細圖文教程)_xcode打包ipa-CSDN博客
ios證書打包分發全流程
https://zhuanlan.zhihu.com/p/650886471
打包命令
xcodebuild 文檔
Technical Note TN2339: Building from the Command Line with Xcode FAQ
安裝使用證書
運營給到的證書如下:
在mac中,分別雙擊打開2個 .p12 文件,選擇“系統” -> 添加 -> 輸入密碼。
在 xcode 中,記錄操作過程如下:
取消勾選 Automatically manage signing、輸入包名,
在 Proversioning profile 中選擇剛才安裝到鑰匙串中的 .p12文件。
看到以下提示,點擊 Manage Certificates。
選擇 ios 添加
提示如下:
原因:沒有添加對應的賬戶到 xcode 中。
先,在郵件中接受運營發出的邀請。
以接受邀請的郵件,注冊 Apple ID。
然后在xcode中添加此賬號,點擊Manage,添加 Apple Development。
最后,回頭查看項目簽名處,已OK。
總結:正確順序其實應該是
1、接受邀請,注冊AppId。
2、在xcode 設置 Accounts中登錄 AppId。
3、安裝 .p12 文件。
4、項目中設置簽名(取消 automic、填寫包名、選擇 provisioning Profile)
xcodebuild?archive時設置:??? 先在Unity中填寫,后續可能應改為設置環境變量 todo
xcodebuild?-exportArchive 時設置:使用optionsPlists
注意,后續在 執行 archive 時,每次都要輸入系統管理員賬號和密碼,
原因是,雙擊安裝 .p12 文件將被安裝在“系統鑰匙串”中,而不是在“我的證書”里。可以改為拖入 “我的證書、登錄目錄”的方式進行安裝。
之后手動在xcode中archive一次,輸入密碼并選擇始終允許即可。
注意區分:
- ?
.p12
?文件?:是包含開發者簽名證書和對應私鑰的加密容器文件,用于在不同電腦間安全地遷移你的簽名身份。 - ?
.mobileprovision
?文件:是由蘋果簽發的配置文件,規定了哪個應用、能用哪些證書、在哪些設備上運行以及擁有哪些權限。 - ?Xcode 中的 Provisioning Profile?:是?
.mobileprovision
?文件在 Xcode 中的邏輯體現,是連接應用、開發者證書和設備權限的橋梁。 - ?Xcode 中的 Signing Certificate?:是安裝在鑰匙串中的數字證書,用于證明開發者的身份,是代碼簽名的法律印章。
ios 簽名原理
iOS App 簽名的原理 ? bang's blog
iphone 連接 XCode 測試
- 用數據線連接手機到mac
- 在 Product/Destination/ 中選擇連接的移動設備(NRatelX)
- 執行 Product/Run
(可提前執行 Product/Archive 確保項目可以構建成功)
提示如下:原因是,移動設備未打開開發者模式。
在 移動設備的 設置/隱私與安全性 中打開開發者模式,重啟。
- 重新運行,執行 Product/Run,報錯如下:
Provisioning?profile?"DevLegendsMatch20240602"?doesn't?include?the?currently?selected?device?"NRatelX"?(identifier?2b0a271100ee2d47150971211d20c65d06427e9c).
原因:此證書不包含此測試設備。
解決:讓運營添加測試設備。
先改用 發布證書測試,重新執行,可以看到:
開始構建,完成,并開始安裝(可在右上角看到進度變化)。
然后在安裝時報錯:
A valid provisioning profile for this executable was not found.
原因:發布證書(app-store-connect)無法用于真機測試
上傳
1、手動上傳
在 Xcode Archive 后,雙擊 .xcarchive 文件,然后選擇 Distribute App,選擇 Custom 繼續即可。
2、命令行上傳
命令行上傳有兩種方式:
方式⑴、在 xcodebuild -exportArchive?時,將-exportOptionsPlist
指定的 .plist 文件中的 destination 設為 upload(默認為export)
若上傳成功,日志如下:
方式⑵、使用 xcrun altool --upload-app --file /path/to/export/MyApp.ipa --username myemail@example.com --password app-specific-password?--type ios
(注意,這里的密碼需使用專用密碼,在 Apple賬戶里創建即可)
若上傳成功,日志如下:
上傳時遇到的報錯(手動和命令行報錯一致):
Invalid Bundle. The bundle at 'LegendsMatch.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'. (ID: 3ea64c50-e45d-4f7d-a114-5054032dc960)
error: exportArchive: Asset validation failed. Invalid Bundle. The bundle at 'LegendsMatch.app/Frameworks/UnityFramework.framework' contains disallowed file 'Frameworks'. (ID: 3ea64c50-e45d-4f7d-a114-5054032dc960).
解決:2019.3 - validation on upload to store gives "UnityFramework.framework contains disallowed file" - Unity Engine - Unity Discussions
在Untiy項目中添加 XcodeSwiftVersionPostProcess.cs 處理即可
TestFlight?包
問題:為 IOS TestFight 打包時, 應該打開 Debug 嗎?
答案:不應該使用Debug配置,而應該使用Release配置
原因:盡管Debug配置提供了更好的調試信息和性能分析工具,但它并不適合分發給測試人員或最終用戶。Debug配置通常包含符號信息,這可能導致包的大小顯著增加,并且可能包含未優化的代碼,影響應用的性能。TestFlight是Apple官方的應用內測分發渠道,用于在應用正式發布前收集測試反饋。為了確保測試的準確性以及接近真實用戶的體驗,你應該使用Release配置來構建你的測試版本。這樣可以確保應用在測試階段的表現與最終發布到App Store的版本盡可能一致。
需注意問題:
使用?xcrun altool --upload-app?上傳同一vercode (1)時,既未覆蓋,又不報錯,而是自動提升了一個版本(2),再次上傳時報錯了。這似乎不太合理。
另:提審后,不可上傳重復的版本,會報錯:
證書更新需做的操作
首次,在 mac 上雙擊安裝2個 .p12文件,和 2個.mobileprovision
后續,在 mac 上雙擊安裝2個.mobileprovision
可利用 Unity ProjectSetting/iOS/iOS Provisioning Profile/Profile ID 選擇 .mobileprovision,查看其 Profile ID。
如:
Devxxxxx.mobileprovision 為 68ac86d8-37da-4257-a785-d519ad262754
Disxxxxx.mobileprovision 為 77bd1578-5b5f-441e-b35f-a021ab66e84e
之后,將2個 Profile ID 配置到下面4個文件中:
1、Build\BuildGame\builders\build_app\Signature\iOS\com.xxx.xxx\SignInfos 的 debug.json 和 release.json(用于Unity ios設置)
2、Build\BuildGame\builders\build_app\Signature\iOS\com.xxx.xxx\OptionsPlists 的 debug.plist 和 release.plist(用于Unity ios設置)
--------------------------------- NRatel割 ---------------------------------
注意:若添加新的測試人員,需替換 Devxxx.mobileprovision 證書,然后重新打包