自從Notification
被引入以后,蘋果就不斷的更新優化,但這些更新優化只是小打小鬧,直至現在iOS 10開始真實的進行大改重構,這讓開發者也體會到UserNotifications
的易用,功能也變得非常強大。
iOS 9 之前的通知
1.在調用方法時,有些方法讓人很難辨別,容易寫錯方法,這讓開發者有時候很苦惱。
2.利用在運行時和非運行時捕獲通知的路徑還不1致。
3.利用在前臺時,是沒法直接顯示遠程通知,還需要進1步處理。
4.已發出的通知是不能更新的,內容發出時是不能改變的,并且只有簡單文本展現方式,擴大性根本不是很好。
iOS 10 開始的通知
1.所有相干通知被統1到了UserNotifications.framework
框架中。
2.增加了撤消、更新、中途還可以修改通知的內容。
3.通知不在是簡單的文本了,可以加入視頻、圖片,自定義通知的展現等等。
4.iOS 10相對之前的通知來講更加好用易于管理,并且進行了大范圍優化,對開發者來講是1件好事。
5.iOS 10開始對權限問題進行了優化,申請權限就比較簡單了(本地與遠程通知集成在1個方法中)。
iOS 10 通知學習相干資料:
UserNotifications: 蘋果官方文檔 -
蘋果官方視頻1 -
蘋果官方視頻2 -
蘋果官方視頻3
活久見的重構 - iOS 10 UserNotifications 框架解析
WWDC2016 Session筆記 - iOS 10 推送Notification新特性
iOS 9中默許HTTP的網絡是不推薦使用的,固然我們也能夠把NSAllowsArbitraryLoads
設置為YES
禁用ATS
。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS
,也就是說強迫我們用HTTPS
,如果不這樣的話提交App可能會被謝絕。但是我們可以通過NSExceptionDomains
來針對特定的域名開放HTTP
可以容易通過審核。
參考學習文章以下:
關于 iOS 10 中 ATS 的問題
iOS 10 開始對隱私權限更加嚴格,如果你不設置就會直接崩潰,現在很多遇到崩潰問題了,1般解決辦法都是在info.plist
文件添加對應的Key
-Value
就能夠了。
以上Value
值,圈出的紅線部份的文字是展現給用戶看的,需要自己添加規范的提示說明,不能為空。目前解決辦法基本都1樣,參考學習文章以下:
兼容iOS 10:配置獲得隱私數據權限聲明
上圖我們看到,自己新建的1個工程啥也沒干就打印1堆爛78糟的東西,我覺得這個應當是Xcode 8
的問題,具體也沒細研究,解決辦法是設置OS_ACTIVITY_MODE : disable
以下圖:
相干問題連接:
stackoverflow問答
在我們開發中有可能用到UIStatusBar
1些屬性,在iOS 10 中這些方法已過期了,如果你的項目中有用的話就得需要適配。上面的圖片也能發現,如果在iOS 10中你需要使用preferredStatusBar
比如這樣:
//iOS 10
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
隨著開發者對UICollectionView
的信賴,項目中用的地方也比較多,但是還是存在1些問題,比如有時會卡頓、加載慢等。所以iOS 10 對UICollectionView
進1步的優化,由于敘述起來比較復雜耗費時間,在這里只提供學習參考文章以下:
WWDC2016 Session筆記 - iOS 10 UICollectionView新特性
以下是官方文檔的說明:
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.
由于之前我們都是用RGB
來設置色彩,反正用起來也不是特別多樣化,這次新增的方法應當就是1個彌補吧。所以在iOS 10 蘋果官方建議我們使用sRGB
,由于它性能更好,色采更豐富。如果你自己為UIColor
寫了1套分類的話也可嘗試替換為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);
// 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
枚舉,唆使文本輸入區域所期望的語義意義。
使用此屬性可以給鍵盤和系統信息,關于用戶輸入的內容的預期的語義意義。例如,您可以指定1個文本字段,用戶填寫收到1封電子郵件確認uitextcontenttypeemailaddress
。當您提供有關您期望用戶在文本輸入區域中輸入的內容的信息時,系統可以在某些情況下自動選擇適當的鍵盤,并提高鍵盤修正和主動與其他文本輸入機會的整合。
當我們手機系統字體改變了以后,那我們App
的label
也會隨著1起變化,這需要我們寫很多代碼來進1步處理才能實現,但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory
來設置。由于沒有真機,具體實際操作還沒去實現,如果理解毛病幫忙指正。
UILabel *myLabel = [UILabel new];
/*
UIFont 的preferredFontForTextStyle: 意思是指定1個樣式,并讓字體大小符適用戶設定的字體大小。
*/
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;
iOS 10 以后只要是繼承UIScrollView
那末就支持刷新功能:
@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;
判斷系統版本是我們常常用到的,特別是現在大家都有可能需要適配iOS 10,那末問題就出現了,以下圖:
我們得到了答案是:
//值為 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]
這個方法!
Swift判斷以下:
if #available(iOS 10.0, *) {
// iOS 10.0
print("iOS 10.0");
} else { }
參考文章以下:
iOS 平常工作之經常使用宏定義大全
大家都升級了Xcode 8
,但是對插件依賴的開發者們,1邊哭著1邊去網上尋覓解決辦法。那末下面是解決辦法:
讓你的 Xcode8 繼續使用插件
但是看到文章最后的解釋,我們知道如果用插件的話,可能安全上會有問題、并且提交審核會被謝絕,所以建議大家還是不要用了,解決辦法總是有的,比如在Xcode
中添加注釋的代碼塊也是很方便的。
我用Xcode 8
和Xcode 7.3
分別測試了下,以下圖:
創建1個Label
然后讓它自適應大小,字體大小都是17
最后輸出的寬度是不1樣的,我們再看1下,下面的數據就知道為何升級iOS 10
以后App
中有的文字顯示不全了:
Xcode 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 |
英文字母會不會也有這類問題,我又通過測試,后來發現英文字母沒有問題,只有漢字有問題。目前只有1個1個修改控件解決這個問題,暫時沒有其他好辦法來解決。
(本條更新于:2016-09⑴8)
在Xcode 8
之前我們使用Xib
初始化- (void)awakeFromNib {}
都是這么寫也沒甚么問題,但是在Xcode 8
會有以下正告:
如果不喜歡這個正告的話,應當明確的加上[super awakeFromNib];
我們來看看官方說明:
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.
(本條更新于:2016-09⑵0)
很多人都反應Xcode 8
沒有之前編譯快了,乃至有些人慢的辣眼睛。但是我的沒有感覺很慢,跟之前差不多,我覺得跟電腦應當有1些聯系吧,有的開發者幾個月不重啟電腦,電腦里運行1堆線程,1堆沒用的垃圾。下面是加速Xcode
編譯的方法,感興趣的可以去看1下:
提高Xcode編譯速度
點擊打開鏈接