Unity游戏打包——iOS打包基础、上传
本文由 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 证书,然后重新打包