兼容iOS 10 資料整理筆記

來源:判若兩人丶
鏈接:http://www.reibang.com/p/0cc7aad638d9

1.Notification(通知)

自從Notification被引入之后赶促,蘋果就不斷的更新優(yōu)化昆雀,但這些更新優(yōu)化只是小打小鬧,直至現(xiàn)在iOS 10開始真正的進行大改重構忘闻,這讓開發(fā)者也體會到UserNotifications的易用,功能也變得非常強大。

iOS 9 以前的通知
1.在調(diào)用方法時,有些方法讓人很難區(qū)分,容易寫錯方法怀跛,這讓開發(fā)者有時候很苦惱。
2.應用在運行時和非運行時捕獲通知的路徑還不一致柄冲。
3.應用在前臺時吻谋,是無法直接顯示遠程通知,還需要進一步處理现横。
4.已經(jīng)發(fā)出的通知是不能更新的漓拾,內(nèi)容發(fā)出時是不能改變的,并且只有簡單文本展示方式戒祠,擴展性根本不是很好骇两。

iOS 10 開始的通知
1.所有相關通知被統(tǒng)一到了UserNotifications.framework框架中。
2.增加了撤銷姜盈、更新低千、中途還可以修改通知的內(nèi)容。
3.通知不在是簡單的文本了贩据,可以加入視頻栋操、圖片,自定義通知的展示等等饱亮。
4.iOS 10相對之前的通知來說更加好用易于管理矾芙,并且進行了大規(guī)模優(yōu)化,對于開發(fā)者來說是一件好事近上。
5.iOS 10開始對于權限問題進行了優(yōu)化剔宪,申請權限就比較簡單了(本地與遠程通知集成在一個方法中)。

iOS 10 通知學習相關資料:
UserNotifications: 蘋果官方文檔 – 蘋果官方視頻1 – 蘋果官方視頻2 – 蘋果官方視頻3
https://developer.apple.com/reference/usernotifications
https://developer.apple.com/videos/play/wwdc2016/707/
https://developer.apple.com/videos/play/wwdc2016/708/
https://developer.apple.com/videos/play/wwdc2016/724/

活久見的重構 – iOS 10 UserNotifications 框架解析
https://onevcat.com/2016/08/notification/

WWDC2016 Session筆記 – iOS 10 推送Notification新特性
http://www.reibang.com/p/9b720efe3779

2.ATS的問題

iOS 9中默認非HTTS的網(wǎng)絡是被禁止的,當然我們也可以把NSAllowsArbitraryLoads設置為YES禁用ATS葱绒。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS感帅,也就是說強制我們用HTTPS,如果不這樣的話提交App可能會被拒絕地淀。但是我們可以通過NSExceptionDomains來針對特定的域名開放HTTP可以容易通過審核失球。

參考學習文章如下:
關于 iOS 10 中 ATS 的問題
https://onevcat.com/2016/06/ios-10-ats/

3.iOS 10 隱私權限設置

iOS 10 開始對隱私權限更加嚴格,如果你不設置就會直接崩潰帮毁,現(xiàn)在很多遇到崩潰問題了实苞,一般解決辦法都是在info.plist文件添加對應的Key–Value就可以了。

上圖的訪問相冊的Key添加錯了烈疚,正確的是Privacy - Photo Library Usage Description黔牵。

以上Value值,圈出的紅線部分的文字是展示給用戶看的爷肝,必須添加猾浦。目前解決辦法基本都一樣,參考學習文章如下:

兼容iOS 10:配置獲取隱私數(shù)據(jù)權限聲明
http://www.reibang.com/p/616240463a7a

4.Xcode 8 運行一堆沒用的logs解決辦法

上圖我們看到灯抛,自己新建的一個工程啥也沒干就打印一堆爛七八糟的東西金赦,我覺得這個應該是Xcode 8的問題,具體也沒細研究牧愁,解決辦法是設置OS_ACTIVITY_MODE : disable如下圖:

相關問題連接:
stackoverflow問答
http://stackoverflow.com/questions/37800790/hide-xcode-8-logs

5.iOS 10 UIStatusBar方法過期:

在我們開發(fā)中有可能用到UIStatusBar一些屬性素邪,在iOS 10 中這些方法已經(jīng)過期了,如果你的項目中有用的話就得需要適配猪半。上面的圖片也能發(fā)現(xiàn)兔朦,如果在iOS 10中你需要使用preferredStatusBar比如這樣:

//iOS 10

  • (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
    }

6.iOS 10 UICollectionView 性能優(yōu)化

隨著開發(fā)者對UICollectionView的信賴,項目中用的地方也比較多磨确,但是還是存在一些問題沽甥,比如有時會卡頓、加載慢等乏奥。所以iOS 10 對UICollectionView進一步的優(yōu)化摆舟,因為敘述起來比較復雜耗費時間,在這里只提供學習參考文章如下:
WWDC2016 Session筆記 – iOS 10 UICollectionView新特性

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寫了一套分類的話也可嘗試替換為sRGB句葵,UIColor類中新增了兩個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);

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枚舉厕鹃,指示文本輸入?yún)^(qū)域所期望的語義意義兢仰。

使用此屬性可以給鍵盤和系統(tǒng)信息,關于用戶輸入的內(nèi)容的預期的語義意義剂碴。例如把将,您可以指定一個文本字段,用戶填寫收到一封電子郵件確認uitextcontenttypeemailaddress忆矛。當您提供有關您期望用戶在文本輸入?yún)^(qū)域中輸入的內(nèi)容的信息時察蹲,系統(tǒng)可以在某些情況下自動選擇適當?shù)逆I盤,并提高鍵盤修正和主動與其他文本輸入機會的整合洪碳。

9.iOS 10 字體隨著手機系統(tǒng)字體而改變

當我們手機系統(tǒng)字體改變了之后递览,那我們App的label也會跟著一起變化,這需要我們寫很多代碼來進一步處理才能實現(xiàn)瞳腌,但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory來設置。因為沒有真機镜雨,具體實際操作還沒去實現(xiàn)嫂侍,如果理解錯誤幫忙指正。

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;

10.iOS 10 UIScrollView新增refreshControl

iOS 10 以后只要是繼承UIScrollView那么就支持刷新功能:

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

11.iOS 10 判斷系統(tǒng)版本正確姿勢

判斷系統(tǒng)版本是我們經(jīng)常用到的,尤其是現(xiàn)在大家都有可能需要適配iOS 10颓影,那么問題就出現(xiàn)了各淀,如下圖:

我們得到了答案是:

//值為 1
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值為10.000000
[[UIDevice currentDevice] systemVersion].floatValue,
//值為10.0
[[UIDevice currentDevice] systemVersion]

所以說判斷系統(tǒng)方法最好還是用后面的兩種方法,哦~我忘記說了[[UIDevice currentDevice] systemVersion].floatValue這個方法也是不靠譜的诡挂,好像在8.3版本輸出的值是8.2碎浇,記不清楚了反正是不靠譜的,所以建議大家用[[UIDevice currentDevice] systemVersion]這個方法璃俗!

Swift判斷如下:

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

參考文章如下:

iOS 日常工作之常用宏定義大全
http://www.reibang.com/p/213b3b96cafe

12.Xcode 8 插件不能用的問題

大家都升級了Xcode 8奴璃,但是對于插件依賴的開發(fā)者們,一邊哭著一邊去網(wǎng)上尋找解決辦法城豁。那么下面是解決辦法:
讓你的 Xcode8 繼續(xù)使用插件
http://t.cn/RcSHhSz

但是看到文章最后的解釋苟穆,我們知道如果用插件的話,可能安全上會有問題唱星、并且提交審核會被拒絕雳旅,所以建議大家還是不要用了,解決辦法總是有的间聊,比如在Xcode中添加注釋的代碼塊也是很方便的攒盈。

13.iOS 10開始項目中有的文字顯示不全問題

我用Xcode 8 和Xcode 7.3分別測試了下,如下圖:

Xcode 8

Xcode 7

創(chuàng)建一個Label然后讓它自適應大小甸饱,字體大小都是17最后輸出的寬度是不一樣的沦童,我們再看一下仑濒,下面的數(shù)據(jù)就知道為什么升級iOS 10 之后App中有的文字顯示不全了:

XXODE 8打印 XCODE 7.3打印
1個文字寬度:17.5 1個文字寬度:17
2個文字寬度:35 2個文字寬度:34
3個文字寬度:52 3個文字寬度:51
4個文字寬度:69.5 4個文字寬度:68
5個文字寬度:87 5個文字寬度:85
6個文字寬度:104 6個文字寬度:102
7個文字寬度:121.5 7個文字寬度:119
8個文字寬度:139 8個文字寬度:136
9個文字寬度:156 9個文字寬度:153
10個文字寬度:173.5 10個文字寬度:170

英文字母會不會也有這種問題,我又通過測試偷遗,后來發(fā)現(xiàn)英文字母沒有問題墩瞳,只有漢字有問題。目前只有一個一個修改控件解決這個問題氏豌,暫時沒有其他好辦法來解決喉酌。

本文只為整理iOS 10 相關資料,也參考部分網(wǎng)上的文章泵喘,還會陸續(xù)更新其他iOS 10 相關資料泪电,以及開發(fā)中遇到的問題等等。

iOS 10 蘋果官方文檔
http://t.cn/RcSHb38

iOS10相冊相機閃退bug
http://www.reibang.com/p/5085430b029f
iOS 10 因蘋果健康導致閃退 crash
http://www.reibang.com/p/545bd1bf5a23
麥克風纪铺、多媒體相速、地圖、通訊錄
ios10相機等崩潰
http://www.reibang.com/p/ec15dadd38f3
iOS10 配置須知
http://www.reibang.com/p/65f21dc5c556
iOS開發(fā) 適配iOS10以及Xcode8
http://www.reibang.com/p/9756992a35ca
iOS 10 的適配問題
http://www.reibang.com/p/f8151d556930

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲜锚,一起剝皮案震驚了整個濱河市突诬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芜繁,老刑警劉巖旺隙,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骏令,居然都是意外死亡蔬捷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門榔袋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來周拐,“玉大人,你說我怎么就攤上這事摘昌∷傺” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵聪黎,是天一觀的道長罕容。 經(jīng)常有香客問我,道長稿饰,這世上最難降的妖魔是什么锦秒? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮喉镰,結果婚禮上旅择,老公的妹妹穿的比我還像新娘。我一直安慰自己侣姆,他們只是感情好生真,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布沉噩。 她就那樣靜靜地躺著,像睡著了一般柱蟀。 火紅的嫁衣襯著肌膚如雪川蒙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天长已,我揣著相機與錄音畜眨,去河邊找鬼。 笑死术瓮,一個胖子當著我的面吹牛康聂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胞四,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恬汁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撬讽?” 一聲冷哼從身側(cè)響起蕊连,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎游昼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝蠕,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡烘豌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了看彼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廊佩。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖靖榕,靈堂內(nèi)的尸體忽然破棺而出标锄,到底是詐尸還是另有隱情,我是刑警寧澤茁计,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布料皇,位于F島的核電站,受9級特大地震影響星压,放射性物質(zhì)發(fā)生泄漏践剂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一娜膘、第九天 我趴在偏房一處隱蔽的房頂上張望逊脯。 院中可真熱鬧,春花似錦竣贪、人聲如沸军洼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匕争。三九已至避乏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汗捡,已是汗流浹背淑际。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扇住,地道東北人春缕。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像艘蹋,于是被迫代替她去往敵國和親锄贼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容