iOS开发 适配iOS10

 
“人烟寒橘柚,秋色老梧桐。什么人念北楼上,临风怀敬言。”二月是三个难言的时刻,相逢又需离别。寥寥数日的时节中,一丛丛小迷彩,一丢丢大迷彩在那钟林毓秀的高校中划下了不可能抹去的痕迹。

9.iOS 10 字体随起头提式无线电话机系统字体而变更

当大家手提式有线话机系统字体制改善变了后头,那我们Applabel也会随着一块儿变化,那亟需我们写过多代码来越发处理才能达成,可是iOS
10
提供了那般的性格adjustsFontForContentSizeCategory来安装。因为尚未真机,具体实操还没去完结,要是驾驭错误援助指正。

  UILabel *myLabel = [UILabel new];   /*
    UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。
   */
    myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; /*
 Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
 For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
 */
     //是否更新字体的变化
    myLabel.adjustsFontForContentSizeCategory = YES;

 
抚摸着军训时候拍的相片,瞧着战友与教练员的脸蛋,不禁独怆不过泪下。回首过去,教官对大家的好,我们的浪荡不羁,不禁难舍难分,昔日的战友,大家所用的枪不知以往万幸吗?远去的教练员留下的背影让小编不禁泪下,想起教官对我们的供给:休息为主,操练为辅,练好了1次过,没练好就练到腿软。可是我们反复相比较听话,争取了绝大部分的休息时间,看女子排球操练,奚弄男子排球累。想到那,不禁暗暗偷乐,教官对大家多好啊!刹时一股浓浓的不舍之情涌上心头。

11.iOS 10 判断系统版本正确姿势

判断系统版本是我们平常应用的,尤其是今天津高校家都有可能必要适配iOS
10,那么难点就应运而生了,如下图:

图片 1

大家收获了答案是:

//值为 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]

//值为10.000000 [[UIDevice currentDevice] systemVersion].floatValue,

//值为10.0 [[UIDevice currentDevice] systemVersion]

据此说判断系统方法最好恐怕用前面包车型大巴三种方法,哦~笔者遗忘说了[[UIDevice currentDevice] systemVersion].floatValue那几个方法也是不可信赖的,好像在8.3本子输出的值是8.2,记不知情了反就是不可信的,所以提出我们用[[UIDevice currentDevice] systemVersion]本条方法!

斯维夫特判断如下:

  if #available(iOS 10.0, *) {
            // iOS 10.0
            print("iOS 10.0");
        } else { }

 
分别的三月里,我们从家出发,与养父老妈戚分别;军训过后,与军事训练教官分别。前者亦可再见,后者不知何期。笔者有点悔了,悔未给每三个大家最亲密的教练三个熊抱,未能让他对自家记念深切,不过回不去了,他们走了,留下的只是满满的军事情报,可能伊斯兰堡带不走的,唯有它了。

14.Xcode 8行使Xib awakeFromNib的警告难点

Xcode 8事先我们利用Xib初始化- (void)awakeFromNib {}都以那样写也没怎么难点,然而在Xcode 8会有如下警告:

图片 2

官方解释:
You must call the super implementation of awakeFromNib to give parent classes the opportunity to perform any additional initialization they require.
Although the default implementation of this method does nothing, many UIKit classes provide non-empty implementations. 
You may call the super implementation at any point during your own awakeFromNib method.


你必须调用父类实现awakeFromNib来给父类来执行它们需要的任何额外的初始化的机会。
虽然这种方法的默认实现不做任何事情,许多UIKit类提供非空的实现。
你可以调用自己的awakeFromNib方法中的任何时候超级实现。

 
当时的我们拿着练习枪,戴着小军帽,在学校的草地上摸爬滚打,开心不已,都想着拿枪所独有的优越感。“有点意思”望着大家相比较相符她须求的动作时候,教官总是用那多少个字激励大家。近日追思当时不禁觉得心轻神爽,然则这几个都已成为纪念,难以重现,不禁悲伤。分别总是在7月,留下的满满当当回想与情义。
目前距离汇报演出过去了旷日持久,然而军事情报难忘,难舍。

4.Xcode 8 运转一堆没用的logs化解办法

图片 3

 

上海体育场所大家看来,自身新建的叁个工程啥也没干就打字与印刷一堆烂七八糟的事物,笔者觉得那些应该是Xcode 8的问题,

切切实实也没细斟酌,化解办法是设置OS_ACTIVITY_MODE : disable如下图:

 

第一步:

图片 4

第二步:

图片 5

 

第三步:

充裕参数:

Name :OS_ACTIVITY_MODE 

Value :  disable

图片 6

 

7.iOS 10 UIColor 新增方法

以下是官方文书档案的认证:

Most graphics frameworks throughout the system, including Core Graphics,
Core Image, Metal, and AVFoundation, have substantially improved support
for extended-range pixel formats and wide-gamut color spaces. By
extending this behavior throughout the entire graphics stack, it is
easier than ever to support devices with a wide color display. In
addition, UIKit standardizes on working in a new extended sRGB color
space, making it easy to mix sRGB colors with colors in other, wider
color gamuts without a significant performance penalty.

Here are some best practices to adopt as you start working with Wide
Color.

  • In iOS 10, the UIColor class uses the extended sRGB color space and
    its initializers no longer clamp raw component values to between 0.0
    and 1.0. If your app relies on UIKit to clamp component values
    (whether you’re creating a color or asking a color for its component
    values), you need to change your app’s behavior when you link
    against iOS 10.

  • When performing custom drawing in a UIView on an iPad Pro (9.7
    inch), the underlying drawing environment is configured with an
    extended sRGB color space.

  • If your app renders custom image objects, use the new
    UIGraphicsImageRenderer class to control whether the destination
    bitmap is created using an extended-range or standard-range format.

  • If you are performing your own image processing on wide-gamut
    devices using a lower level API, such as Core Graphics or Metal, you
    should use an extended range color space and a pixel format that
    supports 16-bit floating-point component values. When clamping of
    color values is necessary, you should do so explicitly.

  • Core Graphics, Core Image, and Metal Performance Shaders provide new
    options for easily converting colors and images between color
    spaces.

因为事先大家都以用RGB来安装颜色,反正用起来也不是特地多种化,此次新增的点子应该便是一个弥补吧。所以在iOS
10
苹果官方提出大家采用sRGB,因为它质量更好,色彩更增进。假若你本人为UIColor写了一套分类的话也可尝试替换为sRGBUIColor类中新增了七个Api如下:

+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

 
本小说参与#腹心10月,迷彩青春#军事磨炼线上创作征集活动,本身承诺,文章内容为原创,且未在任何平台上发布过。

  iOS 10 此前UICollectionViewCell的生命周期是如此的:
  • 1.用户滑动荧屏,显示器外有七个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在那几个法子里面,能够重置cell的场地,加载新的数额;
  • 2.无冕滑动,就会调用cellForItemAtIndexPath方法,在那个艺术里面给cell赋值模型,然后回来给系统;
  • 3.当cell立时进入荧屏的时候,就会调用willDisplayCell方法,在那几个措施里面大家还足以修改cell,为进入显示屏做最后的备选干活;
  • 4.执行完willDisplayCell格局后,cell就进去荧屏了.当cell完全离开显示器以往,会调用didEndDisplayingCell方法.

  分别在10月,结情也在七月,军事练习的滴滴点点也融入了1月,不会散去!

12.Xcode 8 插件不能够用的题材

世家都进步了Xcode 8,可是对于插件依赖的开发者们,一边哭着一头去网上查找消除办法。那么下边是化解办法:
让你的 Xcode8
继续行使插件(http://vongloo.me/2016/09/10/Make-Your-Xcode8-Great-Again/?utm\_source=tuicool&utm\_medium=referral
)

然则看到小说末了的解释,大家精晓假使用插件的话,恐怕安全上会有标题、并且付诸审核会被拒绝,所以提议大家要么不要用了,消除办法总是有个别,比如在Xcode中添加注释的代码块也是很有益的。

 

 
但各自总是在二月,14天军事演练如光阴似箭一般,相聚片刻便离之而去,不舍的人,难分的情;眼眶的泪,喉中的言。一切的凡事霎时涌显,军事磨练之中的点点滴滴,分分秒秒切过眼下,教官们的嘻笑怒骂,同学们的一颦一笑不禁漂过眼下。

1.Notification(通知)

自从Notification被引入之后,苹果就连发的更新优化,但那几个更新优化只是小打小闹,直至今后iOS
10始发确实的开展大改重构,那让开发者也体会到UserNotifications的易用,功用也变得非凡强劲。

  • iOS 9 在此之前的通知

    1.在调用方法时,有个别措施令人很难区分,不难写错方法,那让开发者有时候很心烦。

    2.施用在运维时和非运行时捕获公告的不二法门还不均等。

    3.用到在前台时,是心有余而力不足直接突显远程通告,还必要更为处理。

    4.已经发生的通报是不可能立异的,内容发生时是无法改变的,并且只有简单文本展示模式,扩张性根本不是很好。

  • iOS 10 伊始的通报

    1.具备相关布告被联合到了UserNotifications.framework框架中。

    2.充实了撤回、更新、中途还足以修改布告的内容。

    3.通报不在是粗略的文件了,能够参预录制、图片,自定义布告的来得等等。

    4.iOS
    10周旋此前的关照来说越发好用易于管理,并且展开了宽广优化,对于开发者来说是一件好事。

    5.iOS
    10伊始对于权力难点开始展览了优化,申请权限就相比较不难了(本地与远程布告集成在三个主意中)。

    假如接纳了推送,修改如图:

   图片 7

   

 
经历了短短的军训时光,结下了难解的军生情义,每日晚起赶往演练地,嘴上还叼着刚买的包子之类的,那一点点滴滴,天天盼看着军事磨练时期的不久休息,不禁想想,我们还真是一群很皮的儿女啊!不过尽管如此教官照旧对大家很好,天天早上想艺术让大家联谊,天天白天想大家的动作,可是这么些都只可以留在记忆里了,教官笔者想你们了!

5.iOS 10 UIStatusBar方法过期:

图片 8

 

在我们付出中有大概用到UIStatusBar一部分特性,在iOS 10中这个艺术已经过期了,借使您的品类中央银立见成效的话就得需求适配。

下边包车型地铁图片也能窥见,假设在iOS
第10中学您必要运用preferredStatusBar譬如说那样:

//iOS 10 - (UIStatusBarStyle)preferredStatusBarStyle {    return UIStatusBarStyleDefault;
}

图片 9

细节提醒:在iOS9事后的种类中假如选用到互连网图片,也要留意网络图片是或不是是HTTP的啊,要是是,也要把图纸的域设置哦!

图片 10

用作开发者,怎么着适配iOS10吧?

10.iOS 10 UIScrollView新增refreshControl

图片 11

 

iOS 10 今后假诺是持续UIScrollView那么就扶助刷新功能:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

2.ATS的问题

iOS
9中私下认可非HTTS的网络是被禁止的,当然大家也能够把NSAllowsArbitraryLoads设置为YES禁用ATS。但是iOS
10从前年八月二十一日起苹果不允许大家经过那几个措施跳过ATS,也正是说强制大家用HTTPS,假使不那样的话提交App恐怕会被拒绝。可是大家能够因此NSExceptionDomains来针对特定的域名开放HTTP能够不难通过审查批准。

NSExceptionDomains方式 设置域。能够差不多明了成,把不帮助https协议的接口设置成http的接口。

具体方法:

1)、在档次的info.plist中添加三个Key:App Transport Security
Settings,类型为字典类型。

2)、然后给它添加二个Exception Domains,类型为字典类型;

3)、把必要的协助的域添加給Exception
Domains。个中域作为Key,类型为字典类型。

4)、每一个域下边需求安装三天天性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。

如图:

图片 12

  iOS 10 UICollectionViewCell的生命周期是这么的:
  • 1.用户滑动显示器,显示屏外有1个cell准备加载进来,把cell从reusr队列拿出去,然后调用prepareForReuse方法,在此间当cell还一贯不进来荧屏的时候,就早已提前调用那些方法了,比较在此以前的分裂是从前是cell的上面缘马上进入显示器的时候就会调用该措施,而iOS
    10 提前到cell还在荧屏外面包车型客车时候就调用;
  • 2.在cellForItemAtIndexPath中创制cell,填充数据,刷新状态等操作,相比较于事先也提前了;
  • 3.用户继续滑动的话,当cell立即就必要体现的时候大家再调用willDisplayCell艺术,原则便是:哪天要求出示,曾几何时再去调用willDisplayCell方法;
  • 4.当cell完全偏离显示屏今后,会调用didEndDisplayingCell艺术,跟从前同一,cell会进来重用队列.
    在iOS 10
    在此之前,cell只可以从录取队列之中取出,再走贰回生命周期,并调用cellForItemAtIndexPath创办或然生成二个cell.
    在iOS 第10中学,系统会cell保存一段时间,也正是说当用户把cell滑出显示器以往,假诺又滑行回来,cell不用再走壹回生命周期了,只要求调用willDisplayCell办法就足以另行出现在荧屏中了.
    iOS 10中,系统是1个三个加载cell的,二在此以前是单排一行加载的,这样就能够提高广大天性;

    ##### iOS 10 新扩张的Pre-Fetching预加载

    以此是为了降低UICollectionViewCell在加载的时候所消费的时日,在 iOS 10中,除了数据源协议和代办协议外,新增添了三个UICollectionViewDataSourcePrefetching合计,那么些体协会议里面定义了多个措施:

  - (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths NS_AVAILABLE_IOS(10_0);

  - (void)collectionView:(UICollectionView *)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths  NS_AVAILABLE_IOS(10_0);

   在ColletionView prefetchItemsAt indexPaths以此艺术是异步预加载数据的,个中的indexPaths数组是里丑捧心的,正是item接收数据的顺序;
CollectionView cancelPrefetcingForItemsAt indexPaths这些主意是可选的,可以用来处理在滑行中收回或许下落提前加载数据的先期级.
   注意:那些体协会议并不能够代表在此以前读取数据的格局,仅仅是协理加载数据.
   Pre-Fetching预加载对UITableViewCell同样适用.

 

3.iOS 10 隐衷权限设置

iOS 10 初叶对隐衷权限特别残暴,假使你不安装就会平昔崩溃,未来游人如织遭受崩溃难点了,一般化解办法都以在info.plist文件添加对应的KeyValue就能够了。

图片 13

 

以上Value值,圈出的红线部分的文字是显得给用户看的,必须抬高。

二零一五年4月23日,苹果公布iOS 10。二零一六年八月7日,全新的操作系统iOS
10将行业内部上线。

15、推送的时候,开启Remote notifications

You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:],
but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

化解方案:供给在Xcode 中期维修改应用的 Capabilities 开启Remote
notifications,请参考下图:

图片 14

16、One of the two will be used. Which one is undefined.”

  objc[5114]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x1109a5910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x110738210). One of the two will be used. Which one is undefined.

  在模拟器中、发现“One of the two will be used. Which one is
undefined.”日志**

  查找资料发现原因:objc runtime 对所用app使用同四个命名空间(flat
namespace),运转搭飞机制如下:

  1. 首先二进制印象被加载,检查程序依赖关系
  2. 每一个二进制影象被加载的同时,程序的objc classes在objc
    runtime命名空间中注册
  3. 假如拥有同等名称的类被重复加载,objc
    runtime的表现是不可预感的。一种恐怕的动静是随意叁个主次的此类会被加载(那应当也是暗中认可动作)

    17、Invalid Bundle – The asset catalog at ‘Payload/XXXXX/Assets.car’
    can’t contain 16-bit or P3 assets if the app supports iOS 9.3 or earlier

在 Xcode 8中,当你财富文件中[含有16位图]或者[图片显示格局γ值为’P3′]且iOS
targets设定为iOS 9.3以下就会现出那些标题.
假使您的app需求帮忙广色域突显的话,那你必须得把target设置成iOS
9.3+,相反,固然您的app不需求扶助广色域且你想包容 iOS 9.3
在此之前的档次,你就得把装有的十七人的大概呈现方式为’P3’图片全都替换来八个人情势的SHavalGB颜色的图形。

 

您能够经过运营“assetutil”在iTunes Connect的错误音讯中找到16-bit 或 P3
能源文件。离线的消除方案如下:

1.导出档次的 ipa 文件

2.一定到该ipa文件修改后缀名.ipa 为 .zip.

  1. 解压该 .zip 文件. 解压后的目录里面会有一个暗含着您的 app bundle
    文件的 Payload 文件夹.

  2. 打开终端病切换成您的app的Payload文件夹下的 .app
    bundle 文件夹内,格局如下:

cd path/to/Payload/your.app

  1. 用 find 命令定位到 Assets.car 文件 .app bundle , 形式如下:

find . -name ‘Assets.car’

  1. 利用 assetutil 命令找到其它带有着 16-bit or P3 的财富文件, 对种种Assets.car 之行以下命令 :

sudo xcrun –sdk iphoneos assetutil –info /path/to/a/Assets.car >
/tmp/Assets.json

  1.  打开上一步生成的 /tmp/Assets.json 文件并寻找包蕴有 “DisplayGamut”:
    “P3” 可能连带的内容.
     那段json的”Name”字段对应的值便是14个人或体现的γ值为P3的财富文件名.

    1.  找到这么些财富文件修改为 七位的sCRUISERGB形式,重新编译上传你的app即可. 
18、This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8 or later

  编辑项目时暗中认可使用Xcode8打开,导致自个儿用Xcode7打开Xib是报错:

 This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later

 
 导致用Xcode8打开的Xib全体打不开,只可以用编辑器将Xib里面包车型大巴上面一句话删除掉才能打开:

<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>



未完待续,持续更新~

 

13.iOS 10发端项目中部分文字显示不全难点

我用Xcode 8Xcode 7.3个别测试了下,如下图:

图片 15

Xcode 8

Xcode7 

创建一个Label然后让它自适应大小,字体大小都是17最后输出的宽度是不一样的,我们再看一下,
下面的数据就知道为什么升级iOS 10 之后App中有的文字显示不全了:



英文字母会不会也有这种问题,我又通过测试,后来发现英文字母没有问题,只有汉字有问题。
目前只有一个一个修改控件解决这个问题,暂时没有其他好办法来解决。

6.iOS 10 UICollectionView 品质优化

趁着开发者对UICollectionView的亲信,项目中用的地方也正如多,可是依旧存在部分题材,比如偶尔会卡顿、加载慢等。所以iOS
10 对UICollectionView尤为的优化。

  • UICollectionView cell pre-fetching预加运载飞机制
  • UICollectionView and UITableView prefetchDataSource 新增的API
  • 针对self-sizing cells 的改进
  • Interactive reordering

  在iOS 10
从前,UICollectionView下边若是有大气cell,当用户活动火速的时候,整个UICollectionView的卡顿会很扎眼,为何会造成这么的标题,那里涉及到了iOS
系统的录用机制,当cell准备加载进显示器的时候,整个cell都曾经加载成功,等待在显示屏外面了,也便是一体一行cell都早就加载落成,那便是引致卡顿的主要原因,专业术语叫做:掉帧.
要想让用户感到不到卡顿,大家的app必须帧率达到60帧/秒,也正是说每帧16飞秒要刷新3回.

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10
UITextField添加了textContentType枚举,提醒文本输入区域所愿意的语义意义。

运用此属性能够给键盘和种类音信,关于用户输入的始末的料想的语义意义。例如,您能够钦赐三个文件字段,用户填写收到一封电子邮件确认uitextcontenttypeemailaddress。当你提供关于您希望用户在文件输入区域中输入的内容的信息时,系统能够在好几情状下活动选取合适的键盘,并升高键盘改良和积极向上与其余文件输入机会的整合。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注