iOS 3.0
一、点对点蓝牙连接
二、远程浏览内容
三、连接周边产品(硬件)
四、其它应用可以使用maps
五、定位软件
六、推送功能
七、网络电话
八、录音
九、播放音乐
十、增强了 App Store
ios 4.0
一、点对点蓝牙连接
二、远程浏览内容
三、连接周边产品(硬件)
四、其它应用可以使用maps
五、定位软件
六、推送功能
七、网络电话(voip)
八、录音
九、播放音乐
十、增强了app store
iOS 5.0
一、iCloud
iCloud存储API使程序可以将用户文档和关键数据存储到iCloud中,并同时将改动推送到用户所有的计算机和设备上这一切都是自动的
二、通知中心
三、新闻综述,使用 News standkit
四、自动引用计数(ARC)
五、深度集成twitter
六、storyboard
七、AirPlay
作为在iOS 4.2引入的新功能,airPlay能够将视频,音频和照片作为媒体流输入到Apple TV上。在iOS 5中,airPlay可以将iPad 2上的任何内容通过Apple TV无线镜像到HDTV上。您的应用程序会自动支持这一功能。您也可以调用额外的API从而在每个HDTV和iPad2屏幕上显示不同的内容。在iOS 5中使用了AV Foundation框架的应用程序可以通过AirPlay将视频和音频内容转成媒体流,并且AirPlay现在支持通过HTTP live媒体流发布加密的媒体流内容。
八、core image
您可以使用core image在镜头和编辑图片的应用程序中创建令人惊叹的效果。core image是一个硬件加速的框架,使您可以放松地增强照片和视频。core image提供了一些内置的滤镜,例如颜色效果,变形和变换等。同时它还包括一些高级功能,如自动增强,消除红眼,脸部识别等。
九、Game Center
游戏中心在iOS 5中支持多人游戏中的回合制游戏。在回合制游戏中,玩家可以在方便的时候才做出游戏动作,而游戏中会管理每一个回合。游戏中心将自动通过通知中心发送一个推送通知到下一个游戏玩家。其他为开发者提供的功能还包括:添加玩家到现有的多人游戏中,显示成就通知,每个排行榜支持不同的图标。
十、OpenGL ES,加了GLKit
十一、IMessage
十二、新的工具
十三、无需pc
十四、模拟位置信息
iOS 6.0
一、地图抛弃了google map,使用了自家地图
二、深度社交网络集成iOS 5时,深度集成了twitter,iOS6集成了facebook,sina weibo
三、Passbook和passkit
四、gamecenter主要联机对战
五、提醒开放了向reminder里添加东西和从读取的API(event kit)和标准用户界面
六、新的iap,能直接从itunes store购买音乐
七、collection views瀑布流布局
八、自动布局
iOS 7.0
一、UIKIT全新扁化风格
二、UIKIT力学模型,增加UIDynamicltem委托
三、游戏支持加了自己的精灵系统SpriteKit 2d游戏引擎,xcode还提供创建粒子系统和贴图工具
四、支持专门游戏硬件
五、点对点对接:用来发现和连接附近的设备并传输数,而这一切不需要有网络连接,(所以iOS7的airdrop需要iPhone5或者最新iPad/iPad mini才支持,因为还依赖硬件)
六、store kit:IAP方面采用了新的订单系统,减少内购买现流程和内购破解。实现对订单的本机验证。
七、Inter-APP Audio应用间的音频,同一设置不同应用之间发送midi指令和传送音频能力,比如在一个应用中使用AudioUnit录音,然后在另一个应用中加以处理。
八、地图MapKit
MKMapCamara:可以将一个MKMapCamara对象加到地图上,在指明位置,角度和方向后将呈现3D效果
MKDirections
MKGeodesicPolyline
MKMapSnapshotter
改变了overlay对象的渲染方式
九、多任务
iOS7之前
后台完成某些费时间的特定任务
后台播放音乐
位置服务
IP电话
newsstand
iOS7
改变了后台任务的运行方式除网络外的后台任务,被分布到不同的应用唤醒系统时执行。
网络传输的应用建议使用NSURLSession创建后台的session并进行网络传输。
增加了后台获取background Fetch
应用打开前有机会执行代码来获取数据,刷新UI,省去了网络加载过程。
增加了推送唤醒(静默推送,Slient Remove Notifications)。
增加了后台传输(Background Transfer service)。
iOS 8.0
一、iOS开发界面的统一,Size Classes的引入和新的Presentation系统。
二、IB的重大改进,可提高开发效率,节省开发时间
三、Cloud Kit的框架的推出
四、Health Kit 和 Home Kit的引入
五、Scene Kit的引入
六、本地通知也需要用户许可
七、CoreLocation室内定位
八、Touch ID API简化了PayPal或者支付宝这样的第三方支付和确认的流程的
九、新增加了Photo.framework框架
iOS9新特性
一、 iOS9系统发送的网络请求将统一使用HTTPS,将不再默认使用HTTP等不安全的网络协议,而默认采用TLS 1.2.服务器因此需要更新,以解析相关数据。如不更新,可通过在info.plist中声明,倒退回不安全的网络请求。
二、 将允许出现这种场景:同一app中多个location manager:一些只能在前台定位,另一些可在后台定位。
三、bitcode的理解应该是把程序编译成的一种过渡代码,然后苹果再把这个过渡代码编译成可执行的程序。bitcode也允许苹果在后期重新优化我们程序的二进制文件,有类似于App瘦身的思想。
四、stackView
五、Multasking:多任务特性,三种形式
六、临时调出的滑动覆盖:Slider Over
七、视频播放的画中画模式(Picture in Picture)(AVPlayerViewController默认支持。MPMoviePlayerViewController被deprecated掉了,不支持)。
八、iPad真正同时使用两个app
九、UI Test:iOS9.0之前加入异步代码测试和性能测试,可以说xcode自带的测试框架已经能满足绝大部分单元测试的需求了,但是这并不够,因为开发一个iOS app从来都是很注重UI和用户体验的,之前UI测试使用KIF,Automating,ios 9.0的xcode给出了自带的UITest的一系列工具,和大多数UI测试工具类似,UI使用Accessbility标记来确定view,但因为是Apple自家的东西,可以自动记录操作流程,所以只要书写最后的验证部分就好了,比其他UI测试工具方便多了。
十、Swift2
十一、APP Thinning:app为了后向兼容,都同时包含了32bit和64bit,在图片资源2X和3X的一应俱全,下载的时候只需要当前机型对应的一套资源,但是却要全部打包下载,现在只需要升级iOS9,就可以省很多流量。
十二、3D touch
十三、地图显示实时的交通状况
十四、人工智能siri更加智能,几个大城市的地铁及火车站入口都有详细的标识
十五、手机电池的低功能设置
十六、Spootlight,你的设备会向推荐最近通话过的联系人,使用过的APP以及你可能感兴趣的去处,信息呈现更精彩
iOS10新特性
一、SiriKit在iOS10里面开发者可以使用Siri SDK,这可能是iOS10最重要的新SDK之一。从此开发者可以使用原生API提供语音搜索,语音转文字消息甚至更多常见语音功能。
二、Proactive Suggestions貌似是一个和CoreSpotlight有整合的使用建议的东西。
三、Message App Extension在iOS10里面开发者可以给Message.app提供两种App Extension,分别是可以提供一个表情包,和一个自定义的界面,用于表情搜索等。
四、User Notifications这个API让你可以处理本地或远程的用户通知,并且可以基于某个条件,例如时间或者地理位置。这个异常强大,好像可以在通知里包含图片和视频了,褒姒可以拦截并替换自己app发下来payload。
五、Speech Recognition见闻知意,语音识别API,可以把音频流实时的转换为文本。虽说早期版本已经有了TTS语音转文字,但毕竟Siri语义识别的加入让机器对自然语义的把握更精准,详见Speech.framework
六、App Search Enhancements对CoreSpotlight的增强,其中我比较感兴趣的是Visualization of validation results。
七、Widget Enhancements为了配合iOS10锁屏下面Widget的体验,苹果提供了widgetPrimaryVibrancyEffect和widgetSecondaryVibrancyEffect用于定制化Widget的界面。
八、CallKit框架,VolP应用程序集成与iPhone的通话界面,给用户一个很棒的体验,锁屏后VolP网络电话可以直接用iPhone系统UI接听了。
九、APP Extensions其实上面也有提到,iOS10最重要的开发特点就是允许第三方应用对自带基础APP的拓展关联,全新7种App Extension:
Call Directory(VolP回调)
intents(接Siri、Apple map等服务)
intents UI(接Siri、Apple map等服务的自定义界面)
Messages(iMessage扩展)
Notification Content(内容通知)
Notification Service(服务通知)
StickerPack(iMessage表情包)
十、Custom Keyboard对第三方键盘的改进,通过handleInputModeListFromView:withEvent:可以弹出系统键盘列表。同时使用documentInputMode可以检测输入上下文中的语音,你可以对输入方式进行一些类似于对齐方式的调整。
另外需要注意的是,和以往历代iOS版本推出一样,新陈代谢,有新SDK,新API的开放,也会有旧的API被遗弃,所以好好检查你的项目,使用了被遗弃的API要尽快修改,以免不兼容!还有个要注意的问题iOS10对隐私权限的管理更为严格,比如访问摄像头,麦克风等硬件,都需要提前请求应用权限,允许后才可以使用,或者现在要提前声明,虽然以往要求不严格。
iOS11新特性
一、UIKit Bars的改版
在浏览功能上的大标题视图(向上滑动后标题会回到原来的UI效果),横屏状态下tab上的文字和icon会变为左右排列。
二、iOS11导航栏
设置导航栏大标题:navigationBar.preferslargeTitles,显示的时机可以用navigationItem.largeTitleDisplayMode设置枚举值。
设置导航栏搜索控制器
searchController:self.navigationItem.searchController=searchController
三、上面设置titleView为customView时出现宽度缩小的问题(这个网上提到了这个问题,但是我自定义代码并没有出现这个情况)
四、调整相册权限的key
NSPhotoLibraryUsageDescription改为NSPhotoLibraryAddUsageDescription.
五、近场通讯
首先也要在info.plist配置NSCReaderUsageDescription
六、无线配备
七、弃用API,scrollView和tableview的改变
iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它。这可能使得一些刷新出现头部错乱。contentInsetAdjustmentBehavior其实是一个枚举值。用来管理adjustedContentInset
automatic和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView不可滚动时,也会设置内边距。
scrollableAxes自动计算内边距.
never不计算内边距
always根据safeAreaInsets计算内边距
我们这里要设置为never,所以我们的OC代码可以这样写:
声明tableView的位置添加如下代码
if(@available(ios11.0,*)){self.tableView.contentInsetAdjustmentBehavior=UIScrollViewContentInsetAdjustmentNever;self.tableView.contentInset=UIEdgeInsetsMake(0,0,0,0);self.tableView.scrollIndicatorInsets=_tableView.contentInset;}
在iOS8引入self-Sizeing之后,我们可以通过实现estimatedRowHeight相关的属性来展示动态的内容。self-sizing在iOS11下是默认开启的,Headers,Footers,and cells都默认开启self-sizing,所有estimated高度默认值从iOS11之前的0改变为UITableViewAutomaticDimension.
如果目前项目中没有使用estimateRowHeight属性,在iOS11的环境下就要注意了,因为开启self-sizing之后,tableview是使用estimateRowHeight属性的,就会可能回使代理方法设置高度失效。
通过以下方法进行关闭:Table Views:separatorInset扩展
iOS7引入separatorInset属性,用以设置cell的分割线边距,在iOS11中对其进行了扩展。可以通过新增的UITableViewSeparatorInsetReference枚举类型的separatorInsetReference属性来设置separatorInset属性的参照值。
typedefNS_ENUM(NSInteger,UITableViewSeparatorInsetReference){UITableViewSeparatorInsetFromCellEdges,//默认值,表示separatorInset是从cell的边缘的偏移量UITableViewSeparatorInsetFromAutomaticInsets//表示separatorInset属性值是从一个insets的偏移量)
八、拖放
九、文件管理
十、tableview右滑操作
增加了两个代理方法来取代原来的代理方法(tableView:editActionsForRowAtIndexPath:)
//Swipe actions//These methods supersede -editActionsForRowAtIndexPath:if implemented -(nullableUISwipeActionsConfiguration*)tableView:(UITableView*)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPah -(nullableUISwipeActionsConfigurationsConfiguration*)tableView:(UITableView*)tableview trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath*)indexPath
创建UIContextualAction对象时,UIContextualActionStyle有两种类型,如果是置顶,已读等按钮就使用UIContextualActionStyleNormal类型,delete操作按钮可使用UIContextualActionStyleDestructive类型,当使用该类型时,如果是右滑操作,一直向右滑动某个cell,会直接执行删除操作,不用再点击删除按钮。
十一、Safe Area
以前做悬浮(支付,头部标题等),系统为我们提供了viewController的topLayoutGuide和bottomLayoutGuide方法进行约束,但是在iOS11中被废弃了,引用了一个新的概念。safeArea,它提供两种方式:safeAreaInsets或safeAreaLayoutGuide来提供给你safeArea的参照值,即insets或者layout guide.同时如果改变insets时会获得两个回调UIView.safeAreaInsetsDidChange() UIViewController.viewSafeAreaInsetsDidChange()。这个iOS的safe Area涉及到的第三方库有mansory何IQkeyboard所以可能这两个库也会进行一些适配。
十二、UIToolbar and UINavigationBar-layout
在iOS11中,当苹果进行所有这些新特性时,也进行了其他的优化,针对UIToolbar和UINavigationBar做了新的自动布局扩展支持,自定义的bar button items,自定义的title都可以通过layout来表示尺寸。需要注意的是,你的constraints需要在view内部设置,所以如果你有一个自定义的标题试图,你需要确保任何约束只依赖于标题试图及其任何子试图。当你使用自动布局,系统假设你知道你在做什么。
十三、管理margins和insets
基于约束的Auto Layout,使我们搭建能够动态响应内部和外部变化的用户界面。Auto Layout为每一个view都定义了margin。margin指的是控件显示内容部分的边缘和控件边缘的距离。可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是试图内部的一部分。layoutMargins允许获取或者设置UIEdgeInsets结构的margin.layoutMarginsGuide则获取到只读的UILayoutGuide对象。
在iOS11新增了一个属性:directional layout margins,该属性是NSDeirectionalEdgeInsets结构体类型的属性:
typedef struct NSDirectionalEdgeInsets{CGFloat top, leading, bottom, trailing;}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));
layoutMargins是UIEdgeInsets结构体类型的属性:
typedef struct UIEdgeInsets{CGFloat top, left, bottom,right;}UIEdgeInsets;
从上面两种结构体的对比可以看出,NSDirectionalEdgeInsets属性用leading和traling取代了之前的left和right。
directional layout margins属性的说明如下:
directionalLayoutMargins.leading is used on the left when the user interface derection is LTR and on the right for RTL.
Vice versa for directionalLayoutMargins.trailing.
例如:当你设置了trailing=30;当你一个right to left语言下trailing的值会被设置在view的左边,可以通过layout margin的left属性读出该值。
如下图所示:
还有其他一些更新。自从引入layout margins,当将一个view添加到viewController时,viewControler会修复view的layoutMargins为UIKit定义的一个值,这些调整对外是封闭的。从iOS11开始,这些不再是一个固定的值,它们实际是最小值,你可以改变你的view的layoutMargins为任意一个更大的值。而且,viewController新增了一个属性:viewRespectsSystemMinimumLayoutMargins,如果你设置该属性为“false”,你就可以改变你的layout margins为任意你想设置的值,包括0.