摘要:前几天在做APP上线前的打包的时候莫名其妙的爆出来一个错误,但是在这之前我打测试包的时候一点问题没有,开始第一天查了N多资料也没能解决,最后经过摸索,度娘里面的资料太少,又查阅了大量的外国网站资料终于得以解决。
说明:打测试包(debug)没有问题,但是scheme改为release的时候就报下面的错误。
或许报错的信息不完全一直,但是只要错误类型相似,基本上可以试一下我的解决方案。
问了几个大神以后,初步确定是第三方库的原因,然而我的项目目前只用到了Alamofire、SwiftyJSON、Snapkit以及极光推送等常用的几个库。经过排查在注释掉极光所有引用代码后,打包成功!
-
那么问题来了,难道是极光的SDK捣得鬼?在查阅资料以后,得到第一种解决方案(如下图):
将Optimization Level下的Debug和Release全都改为None[-Onone],然后scheme里面Archive改为release ->clean,然后Product -> Archive等待,基本上可以成功(是不是很高兴呢?至于为什么,自行百度编译优化速度去。。。)
但是这应该不会是根本原因,真正的原因或许就在你的代码(AppDelegate)里面:
- 在你调用极光的方法里面如果是自定义的函数,那么肯定要传launchOptions出去,我就是吃的这个亏,之前用2.3的时候一直写的是(launchOptions:[NSObject : AnyObject]?),但是这么写在3.0里面是不报错的,也没有警告(最蛋疼的地方)。但是你仔细观察
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {}
里面就知道这个参数真正的类型了--- [UIApplicationLaunchOptionsKey: Any]?,把这里面所有对应的参数类型改掉以后(不用修改上面那一步的东西了),再走一遍archive你会发现同样成功。