IOS开发入门Xcode 8 和iOS 10 新特性
白羽 2019-05-21 来源 :网络 阅读 543 评论 0

摘要:本文将带你了解IOS开发入门Xcode 8 和iOS 10 新特性,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门Xcode 8 和iOS 10 新特性,希望本文对大家学IOS有所帮助。


IOS开发入门Xcode 8 和iOS 10 新特性


Interface  Builder
   在Xcode8中,苹果推出了更加强大的可视化编辑工具以及预览功能,可以在不运行App的情况下,预览当前XIB或SB在不同屏幕尺寸下的显示。选择一个XIB文件进去,点击下面红框的位置,会出现从3.5寸-5.5存一系列屏幕的选项。  直接点击不同屏幕尺寸,以及横竖屏,切换不同的屏幕显示。在iPad上还可以选择是否分屏。
   
   新创建的XIB控件尺寸,不再是之前600*600的方块了,而是默认是6s的长方形XIB文件
   Swift 2 和 3
   在Xcode 8之前,Xcode的每一个版本都是内置明确版本的swift编程语言。在Xcode 8中就不同了。因为Swift  3有了大量的改变,而且大多数改变是具有破坏性的。
   使用Xcode 8创建默认使用的Swift 3。幸运的是Xcode 8中的building setting选项可以让开发者明确表明继续使用Swift  2和Swift 2.3。
   
   如果不想立刻就迁移到Swift 3,可以在Builder Setting中进行设置,选择Use Legacy Swift Language  Version设置为YES,就可以继续使用就版本的Swift2.3。
   Xcode插件
   升级Xcode8之后会发现,Xcode8中所有第三方插件都失效了,并且连之前菜单栏的插件选项也不存在了。在之前很多iOS开发者,都是通过Alcatraz来管理插件的,现在Alcatraz也是不可用的。但是Xcode8自身也对编译器进行了升级,将一些比较好的插件功能加入到Xcode中,例如单行高亮显示等。
   在Xcode8中支持了开发插件工程,并且为我们提供了一个插件模板,开发的插件可以上传到App  Store下载。苹果这么做有一个原因在于,之前Xcode和插件是运行在同一个进程的,所以插件的崩溃也会导致Xcode崩溃。苹果现在将插件作为一个单独的应用程序,分开进程运行,不会对Xcode带来其他影响。
   然后选择 Editor -> add a new Target。选择 Xcode Source Editor Extension  并创建,然后你会得到一个询问是否切换到扩展 scheme 的提示,选择切换。
   
   Runtime Issues
   在iOS开发过程中,因为语法错误或者缺少头文件,编译器可以发现并报黄色或红色警告。但一些代码逻辑导致的错误(循环引用),编译器并没有办法找到。
  #import  "ViewController.h" typedef void (^completionBlock)(); @interface  ViewController () @property (nonatomic, weak) completionBlock  completionblock; @property (nonatomic, copy) NSString  *name; @end @implementation ViewController - (void)viewDidLoad  {    [super viewDidLoad];    // Do  any additional setup after loading the view, typically from a  nib.     // 1.Buildtime提示ARC Retain  Cycle错误    self.completionblock =  ^{      self.name =  @"jason";    };     //2.Runtime  Issues提示内存泄漏    NSMutableArray *arr1 = [NSMutableArray  array];    NSMutableArray *arr2 = [NSMutableArray  array];     [arr1  addObject:arr2];    [arr2 addObject:arr1];}
   通过Xcode8提供的Runtime Issues新特性,查找到运行过程中出现的问题,并通过Graph的方式将问题可视化的展现给开发者。
   
   内存调试–Debug Memory Graph
   Xcode 8用相当强大的内存调试器来跟踪内存的泄漏和循环。点击如下图所示红色方框的图标,然后在左边区域选择一个对象,查看与其相关的内存关系。
   
   Debug MemZ喎�"/kf/ware/vc/" target="_blank"  class="keylink">vcnkgR3JhcGi6zVJ1bnRpbWUgSXNzdWVzv8nS1MXkus/KudPDo6zNqLn9RGVidWcgTWVtb3J5IEdyYXBot9bO9sTatOa52M+1zeqzybrzo6y147v3UnVudGltZSBJc3N1ZXO/ydLUv7S1vdLRvq23os/WtcTE2rTmzsrM4qGjPC9wPg0KPGgyIGlkPQ=="代码签名">代码签名
   在Xcode8之前,都需要自己设置证书和描述文件。如果设置出现错误的情况下,还可以通过点击Fix issue来修复这个错误。但这有个问题就在于,Fix  issue选项并不是那么好用,有的时候设置是正确的这里也提示需要Fix issue。
   在Xcode8中可以通过Automatically manage  signing选项,让苹果为我们管理证书和配置文件,设置也都是由苹果来完成的。在Xcode8中新建项目,这个选项默认是被勾选的。打勾以后,Xcode为你管理certificates,  provisioning profiles和 application identifiers。
   
   编译错误
   升级Xcode之后,Xcode8对之前的一些修饰符和语句不兼容,会导致一些编译错误。
   1.一些泛型相关的修饰符,nullable之类的有的会报错。  2.CAAnimation及其子类,设置代理属性后,必须在@interface()遵守代理,否则报错,等等。
   控件错位或者不显示问题
   在使用view.frame之前需要调用如下的语句:
   [self.view layoutIfNedded]
   来更新frame值,不然frame的宽和高都是1000
   Info.plist增加权限字段
   Xcode8构建的app,在使用相册、相机等权限时会崩溃。错误信息:
   This app has crashed because it attempted to access privacy-sensitive  data without a usage description.  The app's Info.plist must contain an  NSPhotoLibraryUsageDescription key with a string value explaining to the user  how the app uses this data.
   官方文档解释:
   ?123Important: To protect user privacy, an iOS app linked on or after iOS  10.0, and which accesses the user’s photo library, must statically declare  the intent to do so. Include the NSPhotoLibraryUsageDescription key in your  app’s Info.plist file and provide a purpose string for this key. If your app  attempts to access the user’s photo library without a corresponding purpose  string, your app  exits. 必须在Info.plist文件中增加NSPhotoLibraryUsageDescription键,并且填入合适的描述文本
   下面是一些常用的字段,如果有缺少的麻烦各位评论区补充一下。
   
   UITableView、UICollectionView生命周期适配
   这章WWDC介绍了UITableView和UICollectionView的生命周期在iOS10中发生了改变。
   在iOS9及之前,一个UICollectionViewCell被重用的过程是这样的:
   一个cell即将出现的屏幕上 prepareForReuse cellForItemAtIndexPath willDisplayCell ……  一个cell完全离开屏幕 didEndDisplayCell 进入reuse queue
   但在iOS10中,一个UICollectionViewCell被重用的过程变成了这样:
   一个cell还没出现在屏幕上 prepareForReuse cellForItemAtIndexPath 一个cell即将出现的屏幕上 ……  一个cell完全离开屏幕 didEndDisplayCell 一段时间后再进入reuse queue
   所以,iOS10后,cellForItemAtIndexPath被调用时,并不表示这个cell即将要出现在了屏幕上。还是得老老实实使用willDisplayCell和didEndDisplayCell方法。
   系统log">系统log
   升级Xcode8之后,在调试和运行过程中,发现控制台打印了很多不认识的log,这些log是系统打印的,和开发者没关系。但是这么多log看着比较乱,怎么屏蔽掉呢?
   ?1com.apple.siri, category: Intents, enable_level: 1, persist_level: 1,  default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0,  enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
   在Product -> Scheme -> Edit Scheme -> Run -> Arguments中或者使用快捷键?  + >,添加OS_ACTIVITY_MODE字段,并设置为Disable即可
   
   推送通知
   苹果的推送在之前iOS8和iOS9的时候就发生过大的更新,推送功能越来越强大。在iOS10之后苹果推出了UserNotifications框架(  具体可以看瞄神的博客UserNotifications框架  ),可以通过这个框架更好的控制推送通知,可以更新、修改锁屏页面的推送消息,可以添加图片、视频等功能。
   在Xcode8之后,如果需要使用Push Notifications的功能,需要勾选Capabilities -> Push  Notifications为YES,否则进行远程推送就会有问题
   
   其他更新
   1.Xcode 8不允许开发人员安装插件,Xcode 8中集成了一些常用的插件。
   1.1 在Xcode 8中将光标放在方法上面,通过option + command + / 生成文档注解 1.2 被编辑的行高亮显示 1.3  集成KSImageNamed功能
   2.Xcode新版字体,SF Mono Regular字体
   3.最新版的API文档样式    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程