服务热线021-5080-9316 在线咨询 留言/需求提交

手机APP开发者必须知道的iOS11相关的新特性

【摘要】  作为手机APP开发,基本都会整理了一下在可能需要关注的地方,特别是iOS11新特性...
  作为手机APP开发,基本都会整理了一下在可能需要关注的地方,特别是iOS11新特性。新增框架新加入SDK的大的框架有两个,分别是负责简化和集成机器学习的CoreML和用来创建增强现实(AR)应用的ARKit。CoreML,自从AlphaGo出现以来,深度学习毫无疑问成了行业热点。而Google也在去年就转变Mobile-first到AI-first的战略。手机APP开发可以说一线的互联网企业几乎都在押宝AI,目前看来机器学习,特别是深度学习是最有希望的一条道路。
 
  作为手机APP开发的您如果不是很熟悉机器学习的话,我想我可以在这里“僭越”地做一些简介。你可以先把机器学习的模型看作一个黑盒函数,你给定一些输入(可能是一段文字,或者一张图片),这个函数会给出特定的输出(比如这段文字中的人名地名,或者图片中出现的商店名牌等)。一开始这个模型可能非常粗糙,完全不能给出正确的结果,但是你可以使用大量已有的数据和正确的结果,来对模型进行训练,甚至改进。在所使用的模型足够优化,以及训练量足够大的情况下,这个黑盒模型将不仅对训练数据有较高的准确率,也往往能对未知的实际输入给出正确的返回。这样的模型就是一个训练好的可以实际使用的模型。
 
  对机器学习模型的训练是一项很重的工作,CoreML所扮演的角色更多的是将已经训练好的模型转换为iOS可以理解的形式,并且将新的数据“喂给”模型,获取输出。抽象问题和创建模型虽然并不难,但是对模型的改进和训练可以说是值得研究一辈子的事情,这篇文章的读者可能也不太会对此感冒。好在Apple提供了一系列的工具用来将各类机器学习模型转换为CoreML可以理解的形式。籍此,你就可以轻松地在你的iOSapp里使用前人训练出的模型。这在以前可能会需要你自己去寻找模型,然后写一些C++的代码来跨平台调用,而且难以利用iOS设备的GPU性能和Metal(除非你自己写一些shader来进行矩阵运算)。CoreML将使用模型的门槛降低了很多。
 
  CoreML开发APP在背后驱动了iOS的视觉识别的Vision框架和Foundation中的语义分析相关API。普通开发者可以从这些高层的API中直接获益,比如人脸图片或者文字识别等。这部分内容在以前版本的SDK中也存在,不过在iOS11SDK中它们被集中到了新的框架中,并将一些更具体和底层的控制开放出来。比如你可以使用Vision中的高层接口,但是同时指定底层所使用的模型。这给iOS的计算机视觉带来了新的可能。Google或者Samsung在AndroidAI上的努力,大多是在自带的应用中集成服务。相比起来,Apple基于对自己生态和硬件的控制,将更多的选择权交给了第三方开发者。
 
  ARKit,Keynote开发APP上的AR的演示可以说是唯一的亮点了。iOSSDK11中Apple给开发者,特别是AR相关的开发者带来了一个很棒的礼物,那就是ARKit。AR可以说并非什么新技术,像是PokémonGo这样的游戏也验证了AR在游戏上的潜力。不过除了IP和新鲜感之外,个人认为PokémonGo并没有资格代表AR技术的潜力。现场的演示像我们展示了一种可能,粗略看来,ARKit利用单镜头和陀螺仪,在对平面的识别和虚拟物体的稳定上做得相当出色。开发APP几乎可以肯定,那么不做最早,只做最好的Apple似乎在这一刻回到了舞台上
 
  ARKit极大降低了普通开发者玩AR的门槛,也是Apple现阶段用来抗衡VR的选项。可以畅想一下更多类似PokémonGo的AR游戏(结合实境的虚拟宠物什么的大概是最容易想到的)能在ARKit和SceneKit的帮助下面世,甚至在iPadPro现有技能上做像是AR电影这样能全方位展示的多媒体可能也不再是单纯的梦想。
 
  而与之相应的,是一套并不很复杂的API。涉及的View几乎是作为SceneKit的延伸,再加上在真实世界的定为也已经由系统帮助处理,开发者需要做的大抵就是将虚拟物体放在屏幕的合适位置,并让物体之间互动。而利用CoreML来对相机内的实际物体进行识别和交互,可以说也让各类特效的相机或者摄影app充满了想像空间。
 
  Xcode,编辑器和编译器开发APP,速度就是生命,而开发者的生命都浪费在了等待编译上。Swift自问世以来就备受好评,但是缓慢的编译速度,时有时无的语法提示,无法进行重构等工具链上的欠缺成为了最重要的黑点。Xcode9中编辑器进行了重写,支持了对Swift代码的重构(虽然还很基础),将VCS提到了更重要的位置,并添加了GitHub集成,可以进行同局域网的无线部署和调试。新的编译系统是使用Swift重写的,在进行了一些对比以后,编译速度确实有了不小的提升。虽然不知道是不是由于换成了Swift4,不过正在做的公司项目的总编译时间从原来的三分半缩短到了两分钟半左右,可以说相当明显了。
 
  Xcode9中的索引系统也使用了新的引擎开发APP,据称在大型项目中搜索最高可以达到50倍的速度。不过可能由于笔者所参加的项目不够大,这一点体会不太明显。项目里的Swift代码依然面临失色的情况。这可能是索引系统和编译系统没有能很好协同造成的,毕竟还是beta版本的软件,也许应该多给Xcode团队一些时间(虽然可能到最后也就这样了)。由于Swift4编译器也提供了Swift3的兼容(在BuildSetting中设置Swift版本即可),所以如果没有什么意外的话,我可能会在之后的日常开发中使用Xcode9beta,然后在打包和发布时再切回Xcode8了。毕竟每次完整编译节省一分半钟的时间,还是一件很诱人的事情。这次的beta版本质量出人意料地好,也许是因为这一两年来都是小幅革新式的改良,让Apple的软件团队有相对充足的时间进行开发的结果?总之,Xcode9beta现在已经能很好地工作了。
 
  NamedColor,这是个人很喜欢的一个变化。现在你可以在xcassets里添加颜色,然后在代码或者IB中引用这个颜色了。大概是这样的:像是使用IB来构建UI的时候,一个很头疼的事情就是设计师表示我们要不换个主题色。你很可能需要到处寻找这个颜色进行替换。但是现在你只需要在xcassets里改一下,就能反应到IB中的所有地方了。其他值得注意的变更,剩下的都是些小变化了,简单浏览了下,把我觉得值得一提的列举出来,并附上参考的链接。
 
  拖拽-很标准的一套iOSAPI,不出意外地,iOS系统帮助我们处理了绝大部分工作,开发APP开发者几乎只需要处理结果。UITextView和UITextField原生支持拖拽,UICollectionView和UITableView的拖拽有一系列专用的delegate来表明拖拽的发生和结束。而你也可以对任意UIView子类定义拖拽行为。和mac上的拖拽不同,iOS的拖拽充分尊重了多点触控的屏幕,所以可能你需要对一次多个的拖拽行为做些特别处理。FileProvider和FileProviderUI-提供一套类似Filesapp的界面,让你可以获取用户设备上或者云端的文件。相信会成为以后文档相关类app的标配。
 
  手机APP开发不再支持32位app-虽然在beta1中依然可以运行32位app,但是Apple明确指出了将在后续的iOS11beta中取消支持。所以如果你想让自己的程序运行在iOS11的设备上,进行64位的重新编译是必须步骤。,DeviceCheck-每天要用广告ID追踪用户的开发者现在有了更好地选择(当然前提是用来做正经事儿)。手机APP开发DeviceCheck允许你通过你的服务器与Apple服务器通讯,并为单个设备设置两个bit的数据。简单说,你在设备上用DeviceCheckAPI生成一个token,然后将这个token发给自己的服务器,再由自己的服务器与Apple的API进行通讯,来更新或者查询该设备的值。这两个bit的数据用来追踪用户比如是否已经领取奖励这类信息。
 
  PDFKit-这是一个在macOS上已经长期存在的框架,但却在iOS上姗姗来迟。作为手机APP开发的你可以使用这个框架显示和操作pdf文件。IdentityLookup-可以自己开发一个appextension来拦截系统SMS和MMS的信息。系统的信息app在接到未知的人的短信时,会询问所有开启的过滤扩展,如果扩展表示该消息应当被拦截,那么这则信息将不会传递给你。扩展有机会访问到事先指定的server来进行判断(所以说你可以光明正大地获取用户短信内容了,不过当然考虑到隐私,这些访问都是匿名加密的,Apple也禁止这类扩展在container里进行写入)。CoreNFC-在iPhone7和iPhone7Plus上提供基础的近场通讯读取功能。看起来很promising,只要你有合适的NFC标签,手机就可以进行读取。但是考虑到无法后台常驻,实用性就打了折扣。不过笔者不是很熟这块,也许能有更合适的场景也未可知。
标签: 手机APP开发 安卓APP开发