提交ITC收到邮件提示’Invalid Swift Support’的解决方法

第二个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上传了

Swift项目通过CocoaPods引入第三方库出现’No such module of xxx’的问题

CocoaPods是一个很方便的第三方库管理工具,但是swift似乎和它兼容的不是那么完美,尤其是引入OC库的时候,我自己经历了许多次引入了第三方库却显示”No such module of XXXX”的无法import的情况,下面说一下几个常用的解决办法

1、Build Active Architecture

进入Targets->Your project->Build settings-> Build Active Architecture Only->

将debug和release下面都改成Yes,然后build

1.pic

2、Link Binary With Libraries

如果上面一种方法不解决问题,那么尝试下如下方法:

进入Targets->Your project->Build phases->Link Binary with Libraries

看看下面是否正确添加了一个Pods.framework链接,如果没有,那么加上

W1F0V

3、Configurations

如果上面两个方法都没解决,那么尝试方法三

进入Project > Info > Configurations

J3MLi

可以看到应该是这样的,如此,把带Tests后缀的项也改成和无Tests后缀的项的样子,添加Configurations set,然后再次尝试build

如果以上三种方式都没有办法,那么就只好放弃使用CocoaPods,手动添加第三方库然后通过bridge header链接吧