2011年,iOS 5发布,引入了「通知中心」。

2012年,iPhone 5发布,“驴脸”iPhone突破了iPhone 320*480的默认屏幕尺寸,iPhone开发者开始接受「多尺寸屏幕适配」的概念。

2013年,iOS 7发布,全新设计的iOS 7,让整个iPhone设计圈,甚至是整个智能手机设计圈,刮起了一阵「iOS 7」风潮。半年之后,扁平化风格、动态效果、毛玻璃、手势切换视图等设计理念就已深入人心。

不经意间,成为iOS开发者已快三年。每年新版iPhone和iOS的发布,已经成为开发者的「年经」——虽不至于脱层皮,几个星期的阵痛是必然的。就如上面列举的iOS版本的新特性,为了适配它们,开发者需要付出超乎平常的工作量。

2014年,iOS 8和iPhone 6也将如期到来。从WWDC 2014透露出来的消息,iPhone开发者将面临什么——大屏iPhone?Swift?屏幕尺寸适配早在2年前就已经经历过一次,Swift也没有颠覆OC的必要性和资本(参考这么多年关于ARC和MRC的讨论的案例)。那iOS 8会带来什么?

笔者凭着多年iOS开发训练出来的嗅觉,不靠谱的猜测一回:应用程序将会全面支持arm64架构

“arm64?iPhone 5s发布的时候,arm64时代不是已经到来了么?”

“iPhone5s搭配了64位的双核处理器,支持arm64指令集,但会向下兼容armv7、armv7s。应用程序,特别是比较老的大型应用程序,一般会选择性忽略64位这个新特性,即使苹果吹得天花乱坠。”

“为什么要忽略呢?”

“64位的适配工作,可不简单。抛开大量的int、long转换不说,大量年代久远的第三方闭源库,可是没能预见手机支持64位CPU这一天,如今别说维护,可能连公司都不在了,上哪找arm64架构的第三方库。另外支持arm64,APP的可执行程序体积大小将会翻倍,在国内还有大量对手机流量极度敏感的用户的大环境下(感谢运营商,感谢国家),应用程序大小属于核心指标,用户量越大的应用程序,对这个指标会越敏感。还有还有,arm64最低支持的iOS版本是iOS 5.1.1,你首先需要过了产品那一关,说服TA放弃低版本用户。”

“那为啥要等到iOS 8发布的时候,arm64的时代才会到来?”

“重点来了!”

App Extension Programming Guide」里面提到:

An app extension target must include the arm64 architecture in its Architectures build settings or it will be rejected by the App Store. Xcode includes this architecture with its “Standard architectures” setting when you create a new app extension target.

If your containing app target links to an embedded framework, the app must also include the arm64 architecture or it will be rejected by the App Store.

也就是说,需要用到iOS 8新特性「embedded framework」的应用程序,需要支持arm64架构,而「embedded framework」这个技术,又是支持iOS 8新特性「Extension」必不可少的。

一句话,想要使用iOS 8的新特性「Extension」,应用程序需要支持arm64架构。而「Extension」对于应用程序(特别是大型应用程序)的意义,是不言而喻的。

假如不支持呢?被App Store拒绝上架不说,在实际的测试中,「Extension」或者「Containing App」中有一个没有支持arm64架构,在64位机器上(iPhone 5s)是工作不正常的。个人猜测这个和iOS 8上新的通讯机制IPC有关:32位和64位会导致问题,和数据传递脱不了关系。

用到IPC技术的还有什么呢?呵呵WKWebView,以后可能还会更多。

拭目以待!

== 更新于2014.8.21 ==

早上更新了Xcode 6 beta6,发现我的认识又被刷新了:

  1. 之前出现的32位「Containing App」和64位「Extension」在Xcode调试不通的问题,在Xcode 6 beta6 已经解决得差不多了,偶尔无法调试,怀疑是Xcode 6的bug
  2. 「embedded framework」并非「Extension」的必要技术,「embedded framework」解决的问题,可以尝试通过其它手段来解决
  3. 「Extension」或者「Containing App」中有一个没有支持arm64架构,在64位机器上(iPhone 5s)已经可以工作正常

说白了,之前发现的那一堆iPhone 5s上关于「Extension」调试和工作不正常的问题,可能是由于Xcode 6 的bug导致的,现在在beta6已经解决得差不多了;此外,我也太过于看重「embedded framework」对于「Extension」的意义,「embedded framework」只是共享代码,并不是「Extension」的必要技术。上面两个原因导致我太过草率地做了这么一个错误的结论。让32位的应用程序支持64位的「Extension」,看来还是可以实现的。还是需要等到iOS 8正式版发布,才能下最终的结论。

下个版本就是GM了,希望Xcode不要再抽风了。

另外,单独包含32位架构的程序,使用WKWebView运行在64位机器上,会工作不正常,打开网页会白屏,并输出错误提示:

Received an invalid message “RemoteLayerTreeDrawingAreaProxy.CommitLayerTree” from the web process.

基本可以确定是IPC的bug,具体原因可以看这里

== 更新于2014.9.11 ==

昨天更新了GM版,出了一个bug:提交应用时会被报错:「 ERROR ITMS-9000: “Invalid Binary. The binary XXX.app is missing architectures [arm64] 」。今天被证实是苹果的一个bug,并被很快修复。虚惊一场。不过从种种迹象看来,ARM64架构的支持应该会很快提上日程。

== 更新于2014.11.6 ==

具体消息见这里

为了避免到时手忙脚乱的,建议现在开始适配arm64,特别是大项目。

== 更新于2014.12.21 ==

具体消息见这里

意思就是说,旧APP只需要在2015.6.1前支持Arm64就可以了,新APP才需要在2015.2.1前支持Arm64。苹果你大爷,尿尿都是尿一半的货!