2018-11-06 "libswiftRemoteMirror.dylib"导致iOS应用提交失败

字数 546阅读 353

最近提交iOS Application到Test Flight的时候遇到这个奇怪的错误:


说是应用包内多了这个"libswiftRemoteMirror.dylib"的文件,打开应用程序.app包后,的确发现多了很多 libswift 开头的类包:

你会看到,在这个应用程序包内:

直接目录下多了 libswiftRemoteMirror.dylib
Framwork文件夹下多了十几个 libswift 开头的类库
而我们应用自己的SDK Framwork 同样存在这个问题

研究了一下发现这是iOS用来在 Objective-C 项目中支持 Swift 而引入的标准类库,而我们这个之前是一个纯 OC 的项目,这次加入了几个 Swift 文件,从而导致打包时自动添加了这些 lib 文件。

根据其他人碰到的问题可以总结到:

libswiftRemoteMirror.dylib应该只有在手动打包时才会出现 (即生成 .app 再压缩 Playload),使用 iOS Archive 直接打包并不会出现

另外应用内可以通过下面这个设置强制不生成 libswift 文件:

另外通过使用XCode直接生成空项目查看的方式发现,如果直接使用 Swift 项目,即使关掉了这个设置,这些类库还是会自动产生的,所以可以认为,这个设置只是对于一个 OC-Swift 混编项目有用。

如果你的项目使用了Swift遇到这种问题,那只有采用下面两个方法之一:

使用 Archive 的方式生成提交
手动删除 libswiftRemoteMirror.dylib 后重新 codesign 再提交

对于我们来说,因为这一直是一个纯OC的项目,并且需要编译成 Framework 供其他项目使用,且不希望它带上 libswift 文件导致文件过大,所以我们最终采用的方法是移除了 Swift 文件,并强制设置 Always Embed Swift Standard LibrariesNo

Reference

iOS提交ipa包时出现"The binary file XXX libswiftRemoteMirror.dylib is not permitted"

Xcode9 xcodebuild 命令行打包遇到的坑与解决方案

iOS 自动构建命令——xcodebuil

xcodebuild API

Embedding Content with Swift in Objective-C

推荐阅读更多精彩内容