升级了一个项目的依赖的一些第三方SDK的版本,导出XCode工程后,打包上传的时候失败了,报错如下:
App Store Connect Operation Error
Invalid Bundle. The bundle at ‘xxx/Frameworks/UnityFramework.framework’ contains disallowed file ‘Framework’.
Xcode中修改
开始查找到的方案,是通过调整 Unity-iPhone Project 下的 General Tab中,Frameworks/Libraries 的 Embed,如果有 item 的设置包含 Sign,那么切换成 Without Sign。这样尝试了几次后,问题依然在。最后在 Stack Overflow 找到了解决方式。
具体操作是,在 UnityFramework Target 下的 Build Settings中,找到 Always Embed Swift Standard Libraries 选项,然后设置成 No,即可。
添加至自动化流程
如果有自动化打包流程,也可以把这个操作添加到其中,这样便不用每次都设置一次。
导出的 Xcode 工程的根目录下,有一个 Unity-iPhone.xcodeproj 文件(一个xcodeproj文件对应一个 XCode Project ),这个文件实质上是一个目录,右击可以看到查看包内容选项,打开后可以看到里面有一个 project.pbxproj 文件,这个文件包含了这个 Project 的所有配置项,包括刚刚的 Build Settings 中的内容,其中 pbx 是 Property Based Xcode 的简写。
这种配置的格式类似于 XML 文件,可用文本编辑器打开,刚刚修改的 Always Embed Swift Standard Libraries 对应的 key 是 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES。
基于这些,需要做的事就很明确了:找到 project.pbxproj 文件,将其中的目标值修改为 NO,即可,代码如下:
1 | var pbPath = Path.Combine(request.ExportProjPath, "Unity-iPhone.xcodeproj", "project.pbxproj"); |
如果没有自动化流程,也可以通过 PostProcessBuildAttribute 注解来修饰函数,达到同样的目的。
参考
- UnityFramework.framework contains disallowed file ‘Frameworks’. Getting this error while getting Unity IOS build