第二个app完工了,上传ITC的时候却无论上传几次都会直接被ITC邮件否决,提醒我’Invalid Swift Support‘,具体是这样:
The files libswiftContacts.dylib don’t match /Payload/My.app/Frameworks/libswiftContacts.dylib. Make sure the files are correct, rebuild your app, and resubmit it. Don’t apply post-processing to /Payload/My.app/Frameworks/libswiftContacts.dylib
当然之后就各种Google各种找,最后发现貌似是CocoaPods的问题
https://github.com/CocoaPods/CocoaPods/issues/4188
然后转到这个问题:
https://github.com/CocoaPods/CocoaPods/pull/4221
对于不想看英文的读者,我来总结一下:
最开始的解决方案是开启bitcode,因为bitcode较新(以上issue的时间)的缘故,大部分第三方库还没有支持bitcode,开启bitcode会使app无法build,但是到了现在我的app中引入了6个比较著名的第三方库,都已支持了bitcode,开启了bitcode之后我再上传ITC就已经build 的通过了,所以如果项目比较新,第三方库也以swift为主的可以考虑这个方法,顺便一提这个问题出现的原因就是因为引入的第三方库里面有以swift语言写的库才会出现。
以下是正确的解决方法(更新:我自己验证并没有成功):
开启Pod.project的build settings, 找到Embedded Content Contains Swift Code 由No改为Yes,同时更新CocoaPods到更新的版本(要高于0.39.0的beta5)
—————————Update————————————————————
不开启bitcode的解决方法:
更新了cocoapods之后,上述选项再改成YES直接会导致在上传ITC的时候就报错:
contains disallowed file Frameworks:xxxxxxxxx
这种时候可以这样,Pods —> Targets Supports Files —> Pods-yourappname —> -Frameworks.sh, 找到这一条注释:
# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
把这条注释到下一条注释之间的代码块注释掉(注意有一个 ‘}’ 不要注释掉),然后关闭Pods的Embedded Content Contains Swift Code,关闭bitcode,跑一下确认程序能正常运行,然后就可以archive上传了