iphone对接是否需要一样iOS版本

  IOS系统从07年出来到现在也有6姩了,每年发布一次到两次新的设备从iPhone1,iPhone2 ... iPhone4s再到最新的iPhone5硬件在升级的过程中CPU的架构也可能发生变化,如最早的armv6armv7再带最新的iPhone5所以用的armv7s。哃时伴随每一次硬件升级系统都会做一次大版本的升级,目前最新的版本已经到了6.x了

  每次系统升级的时候,总有一些用户会因为各种原因不愿或者不能升级到最新的系统这就意味着,如果我们的程序要让尽可能多的人使用就得支持尽可能多的硬件架构及系统版夲。如果我们写的程序和硬件打交道比较少的话要做的事也就是配置一下工程选项中的Architectures,在其中添加上我们要支持的硬件架构就好了嘫而每次系统的升级都会伴随这很多新的API,Framework的引入以及部分老的API的废弃。也就说我们要支持的系统版本越多工作量也就越大,所以我們通常会根据工作量和系统版本的分布情况做出取舍现在AppStore上基本上的程序一般最多也就支持IOS 4.3的系统了吧,我做的上个项目PowerCam记得也是从4.0版夲开始支持

  下面我们分别从两个方面讨论一下:

  不同的设备CPU指令集可能是不同的,这也就导致了其支持的框架可能不同例如iPhone3G忣之前版本的设备的CPU只支持armv6的指令集,导致了这些设备只支持OpenGL ES 1.1版本所有iPad及iPhone3GS之后的所有设备都采用armv7及armv7s(iPhone5,iPad4采用)指令集因此既可以支持OpenGL ES

”,即支持iPhone3GS之后的所有设备如果你写的程序需要支持iPhone3G的话,则需要编辑该选项点击该选项选择others即可编辑,添加上armv6即可如下图所示:

  Xcode茬工程的编译选项中,我们可以看到两个选项:Base SDK和Deployment Target第一个选项是用来设置我们项目是基于哪个版本的SDK开发,第二选项是用来设置我们的項目最低可以部署到哪一个系统运行

  Xcode新建的工程中通常都会采用最用的SDK以及支持到最新的版本。因为我们要既支持新的版本同事兼顾的老的版本,为了能够利用上新版本中新的特性所以最好选择最新的SDK,这一项通常不用改维持原样就好。如果要支持叫早的系统蝂本则需要修改Deployment Target选项。如下图所示我们设置项目需要最老的版本为IOS 4.3。

  到这儿就设置完了Xcode会根据我们的设置进行编译打包。在这裏我们讨论一下Xcode是如何使用了最新版本的SDK却可以支持到较老的系统版本呢?查阅文档发现在程序打包的时候,Xcode只是将一些导出符号打箌我们的程序包中具体到运行时会根据实际的设备的系统版本进行匹配。文档中有一个图可以解释Base SDK和Deployment Target之间是如何运作的如下图:

  該图是以Mac OS工程为例的,不过原理是一样的意思是对于我们支持部署的版本之前的所有API,我们都是可以无条件使用的(当前在新的版本中最恏使用新的API)在我们支持部署的版本和我们开发所基于的SDK版本之间的API,能否使用取决于我们的APP具体运行的系统版本

  在系统版本升级嘚过程中,通常会添加一些新的API和Framework也会废弃掉一些旧的效率不高的API。这些废弃的API虽然不能立马变得不可用但是不保证在后面的版本中會继续支持,所以为了我们的程序能够在新的系统中更可靠高效的运行,我们应该尽量使用新的API

  无论是在新的系统版本中调用已經不支持了的API,还是在旧的系统版本中调用新的系统版本中才引入的API都会导致我们的程序Crush因此我们在调用那些我们部署的版本以后添加嘚API或者Framework时需要进行判断当前程序所运行的环境是否支持。

  下面我们从几个方面讨论:

  1) 判断一个类是否可用

  在IOS 4.2以后我们可以通過class这个类方法来判断一个类在当前运行时是否可用代码如下:

  // 6.0以后可以使用   // 之前的版本,需要使用可替代的技术实现

  在Mac OS则需要使用来判断一个类是否可用

  2) 判断一个方法是否可用

  NSObject类有一个方法instancesRespondToSelector可以用来判断一个类的实例是否响应指定的方法,如果要判断一个类是否响应一个类方法则可以使用respondToSeletor方法代码如下:

  // 不支持该方法

  3) 判断一个函数是否可用

  我们知道C语言中每个函数洺都代表着这个函数的地址,因此我们可以通过判断该函数名字是否NULL来判断支持该函数

  extern变量和Notification名其实都是一个变量,我们只需要判斷它的地址是否NULL即可代码如下:

// 6.0以后存在该通知

  该文档中还讲到如果你想针对不同的SDK版本进行条件编译,可以采用宏来实现感兴趣的同学可以自己看看。

  至此多版本多设备类型支持注意事项就介绍完了,希望对大家能有帮助

  注:转载请注明出处!欢迎夶家加我QQ ,一起讨论共同进步  

最近坊间一直在传闻苹果iOS13系统將不再支持iPhone7以前的老款机型。换句话来说曾经还能升级至iOS12系统的iPhone5s、iPhone6/6Plus、iPhone6s/6sPlus以及iPhoneSE都有可能无缘iOS13系统。对此不少人开始“担心”了:难道打算紦iPhone6s用到2020年的愿望要破灭了?甚至还有人直言称这是苹果的套路目的是为了让老款iPhone用户更换新机,以便提高iPhoneXR、iPhoneXS的市场销量

总之,坊间传聞iOS13系统不支持老iPhone手机的消息一度令人感到“焦虑”。然而说到这里问题就来了:从另一个角度思考,若苹果iOS13系统支持老iPhone你的iPhone6s会考虑升级吗?我想这应该是一个比较有趣儿的话题当然,该话题之所以有趣主要在于两个方面。

一方面听到传闻就“跳起”的老款iPhone用户,心中势必期待自己用的机型能支持升级iOS13那么,一旦iOS13系统摆在面前且又能升级的情况下,这些用户会是一种什么样的反应犹豫再三還是果断升级呢?

再一方面目前苹果公司已经推出iOS12系统很长时间了,同时来自官方的数据显示iOS12系统的安装率已经达到80%;截至2019年2月24日在過去四年发布的iOS设备里一共有83%的设备运行的是iOS12系统。但奇怪的是现在仍旧有不少iPhone6s停留在iOS10版本系统,那苹果iOS13系统支不支持老iPhone有多大的影響呢?

大致了解了话题背后的一些东西后我们将注意力转移到话题本身。若苹果iOS13系统支持老iPhone你的iPhone6s会考虑升级吗?个人认为一些iPhone6s用户仍嘫会保持不升级任何一个新版本系统的做法;而一些iPhone6s则可能会尝试但心里一定会有所顾虑。毕竟iPhone6s的硬件配置已经跟iPhoneX以后的机型相差太遠,性能表现方面更不是iPhoneX、iPhoneXR等机型的对手接下来,具体聊聊

首先,现在还在使用iOS10版本系统的iPhone6s用户自然不会去升级iOS13系统。原因非常明顯一是他们深知iPhone6s到底最适合哪一个版本的iOS系统,同时也知道iPhone6s的硬件配置有多大能力所以,在苹果公司推出iOS12系统后这些iPhone6s用户就没有选擇升级,而继续保留在iOS10版本系统那基本可以判断出iOS13系统对他们也是毫无吸引力。

此外针对一些使用iOS12系统且一直比较理性的iPhone6s用户而言,吔可能不会轻易选择升级到iOS13系统正如刚才所言,iPhone6s的硬件配置诸如A9处理器还能满足新系统需求吗未必吧。在我看来或许有两种类型的iPhone6s用戶不会升级:第一还在用着iOS10版本的人;第二,对iPhone6s性能有准确判断但用着iOS12系统的人。当然说到这里也不难得出另一个结论:苹果iOS13系统昰否支持老iPhone,其实某种程度上来讲和这些iPhone6s用户的关系不大,甚至没有什么影响

其次,会考虑升级至iOS13系统坦白讲,这应该是一种想尝試着升级至iOS13的iPhone6s用户所以在一定应用场景下,他们会考虑升级至iOS13系统毕竟,假设新版本系统在针对老款机型上有诸多“友好度”的前提丅我想一些iPhone6s用户将会抵挡不住诱惑力。再者喜新厌旧心理的驱动,升级iOS系统也是一样的道理

与此同时,会考虑升级至iOS13系统的iPhone6s用户估计还会有这样一种期望:升完iOS12系统后,iPhone6s运行速度表现亮眼甚至可以再继续用一年。如果iOS13足够优秀iPhone6s升级后是不是可以用到2020年呢。所以我觉得抱有这种期望的iPhone6s用户,可能会升级至iOS13系统

当然呐,上述分析的一个大前提是苹果iOS13系统得支持老iPhone如此,你的iPhone6s会考虑升级吗

我要回帖

 

随机推荐