最近被appstore搞的焦头烂额,虽然早有心里准备,但还是让我捉襟见肘,苦不堪言。

我是最近刚刚接手ios开发的,从实验室小伙伴那儿“过继”过来的项目。这之前一直做android开发,ios接触得少,iphone毕竟还是价格相对高一些嘛,印象很好。可是经过这么几个月的深刻接触,我对苹果产品的好感就荡然无存了。苹果产品也许还能继续保持高价一段时间,但苹果的研发体系实在是混乱。

槽点一

相对于oc,我还是比较喜欢swift,容易上手嘛,swift与oc可以互相调用。但swift2和swift3的不兼容就让人摸不着头脑了,最明显的就是NS**这种怪异的前缀了,可能是历史原因吧,不说了, 反正我是不敢升级到xcode8的,天天看到mac上的推送的更新,我都小心冀冀都的关掉,生怕一不留神点了安装。

槽点二

Swift的变量类型实在是多了些,不同的框架和控件传数据经常要类型转换。变量层级太多,一个套一个,最直观的体现就是断点调试的时候,很难直接看到某个变量的值,鼠标浮过去,显示的是变量的地址!!!0x********,谁关心这个地址啊!反正XCode是我见过的对程序员最不友好的开发工具,没有之一。而且xcode的版本与swift版本偶合太重,swift2各小版本也有细微差异的,升级xcode,哪怕升级个小版本,更新好长时间,升级完了,一编译发现又多了几个错,郁闷啊。要是项目成员多了,大家xcode版本不一致,要乍办呀,升级的过程中,xcode都不能用的。而且更奇靶的,如果手机一不小心,更新了ios系统,那可能又没法用来调试了,得升级xcode更新ios库。。否则就亲自动手把对应的ios库放到xcode的目录的,不过这不一定有效,尤其最近推了ios10,又发布了xcode8和swift3,折腾不已,快混不下去了。唉,说实话,xcode真的是很不友好,不知道当年那些oc程序员是怎么忍下来的,我真怀疑他们是不是都被乔布斯洗脑了。

槽点三

苹果官方提供的各个开发组件、方案,真是很少被开发者认可呀,我不知道以前是不是这样的,或者是我眼界太小。反正官方推荐的各种开发组件,例如storyboard、coredata…都被大家公认为bug太多,设计太奇葩,无法使用,从而束之高阁。不只是我的小伙伴这么说,各种技术大会上的牛人也是这么说的。我曾经花好长时间找ios上的sqlite orm框架,死活找不到,后来猛然发现coredata其实就是官方的orm呀,小试一下,发现coredata挺好用的,于是我就毅然把项目里的fmdb全部换成了coredata,开始觉得挺好的,好方便哦。后来的几个bug立马把我打醒了,居然会有这么奇葩的设计,这不整人么,不说了,怪不得大家不用。我很奇怪这些东西是怎么做出来的呢?感觉都是半成品呀。

槽点四

官方的各种“强烈推荐”的组件,大家都避之大吉,那大家用啥呢?用开源框架呀,各种存储、界面控件都有开源实现,但悲催就在这儿,开源框架毕竟也要基于一些底层实现,毕竟不是亲生的,swift来个升级,开源框架全出错了,都得同步跟进。这两天appstore审核的crash问题愁死我了,废好大劲把日志符号化,发现是MJRefresh的问题,就是个滑动刷新的框架,小伙伴一看,当即在github上找到了相关的Issue,说有人遇到过,我一看,还真是,最新版的MJRefresh已经解决了。这个bug原因也很莫明奇妙,是因为英文版的IOS10的英文字体要稍小一些导致的,而中文IOS下的文字大小都是一样的,中文IOS10里的英文显示也是没问题的,这就很不可思异了,ios 1-9都好好的,为什么到了10要把英文版字体调整一下呢?那为什么中文版的不改呢?这是为的哪般呀?这不是坑人是啥呀!于是我就升级呀,用cocoapods,因为之前mac操作系统更新,把我的pod环境变量弄没了,于是我一手贱,装了个最新版的pod,1.1.3,然后update库,结果噩梦又出现了,项目用到的10几个库,几乎每个库更新后都有语法错误,这还搞啥呀,我拿什么相信你呀,谁知道都更新了些啥,我这要急着发布呀,于是我就一个个库降级,能编译运行了,高兴啊,心想不用加班了,结果一运行就crash了,说是dispatch_once什么的错误,google之,果然又有人踩过这个坑,居然是因为cocoapods升级导致的,这就无厘头了,你一个依赖管理的工具不就是在编译前起作用嘛,顶多导致编译出错,怎么会影响到运行时呢?仔细一看,发现是pod升级后变更了库存储路径,这其实不影响编译运行的,但是dispatch_once创建单例加载不同包里的代码居然会出错,这是什么逻辑呀,代码目录不一样,多一层少一层还会影响运行呢,我又茫然了,看样子这又是新版ios10出现的问题,没撤,只能把cocoapods再降回去,网上的同学大都是这么回避问题的。。惹不起还躲不起么。然而当我提交程序的时候,发现又报错了, 说bitcode版本不一致,google之,果我又有人踩过这个坑,其实jdk字节码也有这问题,高版本jdk编译的字节码在低版本jdk里有时也运行不了,其实这可以理解的,因为MJRefresh的最新版本是Xcode8编译的,我这不是不能升xcode8么,顿感万念俱灰,苹果仿佛在对我笑:叫你躲,你躲呀,你躲不过我大坑的。没办法,只能先把bitcode关掉了,关掉就关掉吧,再出crash,符号化还容易些。

槽点五

更新太TM频繁了,都是更新惹的祸呀,苹果乍这么喜欢推送更新呢,mac、xcode、swift、ios,隔三差五的发更新,每次都是一幅肯切的样子,强烈推荐安装更新,还一遍又一遍的提醒,好像更新了我就站在世界之颠了一样,你前后兼容也就罢了,一更新全乱套了,苹果你还有没有点底线了,真是信了你的邪,跳楼的心都有了。而且苹果的app更新很神奇,无论是手机还是电脑上,只要点了更新,即使只是在下载更新,那么这段漫长的更新过程中,这个app都不能用的。。

说实话,真不知道苹果是怎么弄到这么多果粉的,回头一看苹果产品究好在哪呀,还那么多黄牛在炒iphone7,就这么搞,还能再炒几年呀?乔布斯的余热都散没了,以前死都不支持gif的乔布斯走了,显然他走时工作交接得不好呀,搞得这么混乱,研发生态是根本呀,为什么那么多手机厂商不自己做操作系统,都用android呀。我以前对乔布斯没什么印象的,现在一看,乔布斯真的很牛,这样的烂摊子也能撑起如此的辉煌。我记得我以前大言不惭的对同事们说:我们应该做原生开发,hybird啥的其他第三方研发工具肯定不会做得太大的,因为苹果有自己的生态呀!现在再看,我应该是说错了,和微软一样,苹果无法阻挡开源生态的办量的,何况这个节骨眼,还把自己的研发基础搞得一团浆糊,如果苹果再拒绝这些第三方开发平台,那会流失多少开发者,难以想象。说不定哪天就会那根稻草,直接把它打下神坛。