Xcode10打包引起iOS9.0-9.2系统的用户启动App随机崩溃的问题修复记录

好吧简单记录下这次吐血的崩溃事故,十一过后本以为可以开开心心地开发新需求了. 正当我打开Xcode开始大战一回合时. 叮铃! 技术总监的一条微信叫停了我, 视频里头用户点击一App启动就崩,一点就崩,一点就崩.没错就是这么暴力…我心想完蛋了,八成是该领盒饭了…

友盟崩溃记录

颤抖的双手立马打开友盟后台,卧槽…前所未有的壮观啊,奔溃列表整齐划一,出奇地一致! Application received signal SIGSEGV 看得我一眼懵逼. 其实这样的崩溃提示在此之前也有遇到过, 通过dSYM分析基本没戏,因为最后一条崩溃记录的有效地址指向的始终是友盟搜集崩溃信息的方法.

崩溃率.png

再瞅了一眼崩溃率, 一路飙升,久违的心情… 从万分之2到万分之18,一下子拉高了我们的崩溃率,虽然几百万用户中暂时只影响到了不到150位用户,但是我们还是担心时态会不断扩大. 问题几乎已经到了非解决不可的地步了.

问题初见

随后,简单分析了下该类用户的属性发现,几乎所有的崩溃只发生在iOS9.0-9.2系统的用户,于是我们着手进行问题排查.

首先想到的肯定就是模拟器运行进行断点调试,直接定位崩溃位置. 好吧很显然事情并没有那么简单,模拟器完美运行没有任何幺蛾子. 只能借助真机进行测试,结果我们的测试机很巧妙地避开了9.3以下的系统,最低系统只有9.3.2,GG! 然后开始在群里在朋友圈找机子,很显然…这样一个古董级的系统的机子基本是大海捞针. 好在客服人员要到了之前出现崩溃的用户的电话(是一个很有耐心的妹子,23333…),简单交流后我们建立了沟通渠道,接下来就是一段漫长的折腾之旅.

解决过程

猜想1: 由于升级了第三方SDK引起

从用户反馈的崩溃视频里来看,是用户一启动App就崩溃,所以我们猜想是不是在didFinishLaunchingWithOptions方法里出现了问题. 然后在对比了代码后发现,在这个版本的开发计划中并没有对该处代码进行过改动.相反,最大的改动就是升级了两个第三方的SDK,猜测可能是在启动的时候进行SDK相关配置不当引起的. 所以我们尝试恢复SDK版本进行打包测试, 逐一恢复SDK后, 我们将两个测试包胆战心惊地发给了我们的测试用户. 不一会,用户给我们反馈说: 不行!崩了… 不行,还是崩了…

两个测试包壮烈牺牲,同时也冤枉SDK了,默哀!

猜想2: 升级Xcode10后,之前项目中引用过一个c++的静态依赖库 libstdc++.6.0.9.tbd 被移除导致的

正在我愁眉苦展的时候,突然想到这次我们升级了Xcode10,之前项目中引用过一个c++的静态依赖库,后来编译的时候未通过,提示该库不存在, frameworks目录下这个库报红了,一个潇洒的delete之后再次编译通过了… 后来也没再多想. 所以我想在会不会是因为我这个潇洒的delete导致的. 接下来,我尝试用网友提供的方案进行解决.

由于libstdc++.6.0.9.tbd 这个库早已被苹果废弃了,这次Xcode10苹果将其彻底移除了,并推荐使用libc++这个库. 按照网友的提示,我回到Xcode9上找到libstdc++.6.0.9.tbd这个库将其拷贝到Xcode10中重新添加(注意:重新添加需要先退出Xcode再打开才能链接) 好了,添加完成,确保无误,打包…

结果,你知道的. 还是崩了… 这个时候我们都好绝望… 难道说跟库没有关系? 我开始怀疑人生了…

所以后来猜想是不是上述提供的这种方案不可行呢? 难道说不能通过直接拷贝的方式连接库吗? 所以我回到了Xcode9上重新打包,再次将链接发给测试用户帮忙安装后回复说: 可以的,这次没有崩溃… 沃德天,终于有一次OK的, 胜利似乎就在前方. 实在感谢妹子的帮忙,一个小小的红包敬上…耽误时间十分抱歉.

猜想3: 可能与Xcode10打包有关系

这个时候我大胆地做了个测试,决定用Xcode9Xcode10分别打包添加库和未添加库,全面排查下到底是由于Xcode升级导致的崩溃还是由于libstdc++.6.0.9.tbd引起的.

ipa文件

冒着大不韦的心态,我又去找测试小姐姐去了,等待的过程总是煎熬的…不过妹子人很好很有耐心, 一个“行吧”把我高兴坏了. 一遍遍帮我测试了3.11.2-3.11.5四个测试包.

结果发现3.11.2和3.11.3都没有出现崩溃,3.11.4和3.11.5都出现了崩溃,测试结果显而易见: 使用Xcode9打包的应用都没有问题,相反使用Xcode10打包的应用都GG了, 同时也排除了崩溃跟libstdc++.6.0.9.tbd库有关系.

果然,这又是苹果埋下的坑,真是无语… 接下来当然是去找度娘和Google爸爸了: “使用Xcode10打包导致iOS9.0用户崩溃”,结果也能找到一些类似的情况. 首先看到的是之前升级Xcode9的时候打包也会出现类似的情况.

而且,从两个Xcode打包的ipa文件大小我也发现,Xcode10打包的文件明显比Xcode9多了大概2M的样子,猜测肯定跟图片资源打包有关系.


ipa文件.png

接下来我开始尝试着用下面的方案去排查是否含有16bit图或者P3格式的图片资源. P3图片导致iOS9.3以下崩溃问题 排查结果发现,我们项目中并未使用不合规格的图片,排除.

后来我在CocoaChina上看到了一毛一样的崩溃提问. 好了,基本可以锁定就是由于苹果升级Xcode导致 使用Xcode打包图片资源时不兼容iOS9.0-9.2真机导致的.
用xcode10打包上线,iOS9.2系统出现闪退bug
Xcode10发布App Store,iOS9崩溃

解决方案

一番查阅之后,大家给出的方案无外乎以下方式:

  • 老老实实用Xcode9打包发布吧;

  • 将Assets目录下的图片资源转为文件夹存储; (几百张图片,这操作简直逆天…)

  • 等待苹果的修复更新…

终于我们找到了苹果Xcode 10.1 beta 2 的更新日志, 在 Asset Catalog 下面我们看到下面这样一段说明: Xcode10 beta2 更新记录地址

Resolved Issues

  • The 40mm and 44mm wells for complications specify the correct icon sizes. (43069075, 43401397)
  • Resolves an issue that affected app compatibility with iOS 9.0, 9.1 and 9.2. Apps containing asset catalogs built with Xcode 10 whose deployment target was set to iOS 9.0, 9.1 or 9.2 would produce content incompatible with the runtimes of those iOS versions. Rebuilding the application with Xcode 10.1 resolves this issue. (44535967)

从更新说明来看,果然应验了之前的猜想,崩溃与Xcode10打包图片文件有关系.

解决方案显而易见, 更新Xcode10.1 beta2 重新打包就可以正常下载安装使用了, 赶紧下载安装Xcode10.1 beta2,给小姐姐打包测试, 等待了大约半个小时后小姐姐回复说: 没有闪退.

完美~ 问题终于解决了. 又一次被苹果儿子实力坑爹的崩溃,过程一波三折,好在测试小姐姐人好耐心好,帮我们完成了十几轮的测试工作,实在感谢. 正是有了这样有耐心的优质用户,我们的App才能更加完美.实在感谢~

附: Xcode10.1 beta2 下载地址:https://developer.apple.com/download/

你以为这就结束了吗?

Xcode10.1 beta2 打包的应用,上传至AppStore审核后被拒....提示: 二进制文件无效... 所有暂时还是用Xcode9打包吧,等Xcode10稳定以后再使用它打包.

实力坑爹后续

好吧,更新下...Xcode10.1正式版前段时间更新了,当然我们第一时间做了更新, 不过Xcode10.1 依旧没有解决这个崩溃问题,评论里也好多简友反映. 果真是实力坑爹...也许这就是苹果强制用户升级或放弃iOS9的一种策略吧

目前的话: 我们是直接升级development targetiOS10.0, 后续的版本更新不再对iOS10以下的用户发布, 毕竟这部分手机系统的用户占比并不是很大.
实现不想抛弃的话,那就继续沿用Xcode9.4打包发布吧,笔芯.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345