代碼注釋不能用的解決辦法
這個是因為蘋果解決xcode ghost,把插件屏蔽了徒爹。
解決方法
打開終端,命令運行: sudo /usr/libexec/xpccachectl
然后必須重啟電腦后生效
注意:Xcode8內(nèi)置了開啟注釋的功能芋类,位置在這里
屏蔽雜亂無章的bug
更新Xcode8之后隆嗅,新建立工程,都會打印一堆莫名其妙看不懂的Log.
如這些
subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1,
屏蔽的方法如下:
Xcode8里邊 Edit Scheme-> Run -> Arguments, 在Environment Variables里邊添加字典:
(name)OS_ACTIVITY_MODE = (value:)Disable
在設置log選項的時候侯繁,發(fā)現(xiàn)可以通過在Arguments中設置參數(shù)胖喳,打印出App加載的時長,包括整體加載時長贮竟,動態(tài)庫加載時長等丽焊。
在Environment Variables中添加DYLD_PRINT_STATISTICS字段,并設置為YES咕别,在控制臺就會打印加載時長技健。
考慮到添加上述內(nèi)容在Xcode8后,真機調(diào)試可能出現(xiàn)異常惰拱,大家可以自定義一個宏定義雌贱,來做日志輸出。
ifdef DEBUG
define DDLOG(…) printf(” %s\n”,[[NSString stringWithFormat:VA_ARGS]UTF8String]);
define DDLOG_CURRENT_METHOD NSLog(@”%@-%@”, NSStringFromClass([self class]), NSStringFromSelector(_cmd))
else
define DDLOG(…) ;
define DDLOG_CURRENT_METHOD ;
endif
字體適配的問題
ios 9 之前的lab 字體可以顯示全,但是到了ios10 發(fā)覺字體顯示不全了.得適配啊.app 會跟隨手機系統(tǒng)字體大小而改變了.
簡單粗暴地方法就是不讓他跟著手機系統(tǒng)的字體改變而改變.
myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline];
// UIFont 的preferredFontForTextStyle: 意思是指定一個樣式偿短,并讓字體大小符合用戶設定的字體大小欣孤。
/*
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.
*/
//是否更新字體的變化
label.adjustsFontForContentSizeCategory = YES;
字體變大,原有frame需要適配
發(fā)現(xiàn)程序內(nèi)Label標簽原來2個字的寬度是24昔逗,現(xiàn)在2個字需要27的寬度來顯示了曹阔。达椰。
iOS 10 開始的通知
1.所有相關(guān)通知被統(tǒng)一到了UserNotifications.framework框架中。
2.增加了撤銷橄碾、更新尝江、中途還可以修改通知的內(nèi)容尺锚。
3.通知不在是簡單的文本了席楚,可以加入視頻戳杀、圖片,自定義通知的展示等等卡乾。
4.iOS 10相對之前的通知來說更加好用易于管理翼悴,并且進行了大規(guī)模優(yōu)化缚够,對于開發(fā)者來說是一件好事幔妨。
5.iOS 10開始對于權(quán)限問題進行了優(yōu)化鹦赎,申請權(quán)限就比較簡單了(本地與遠程通知集成在一個方法中)。
所有的推送平臺误堡,不管是極光還是什么的古话,要想收到推送,這個是必須打開的
(void)userNotificationCenter:(UNUserNotificationCenter )center willPresentNotification:(UNNotification )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
//應用在前臺收到通知 NSLog(@”========%@”, notification);
}
推送的代理iOS10收到通知不再是在[application: didReceiveRemoteNotification:]方法去處理锁施, iOS10推出新的代理方法陪踩,接收和處理各類通知(本地或者遠程)
(void)userNotificationCenter:(UNUserNotificationCenter )center didReceiveNotificationResponse:(UNNotificationResponse )response withCompletionHandler:(void (^)())completionHandler {
//點擊通知進入應用 NSLog(@”response:%@”, response);
}
xcode8的注釋快捷鍵注釋不能用了, command+/ 不行了
解決辦法:
因為蘋果解決xcode ghost。把插件屏蔽了悉抵。解決方法
命令運行: sudo /usr/libexec/xpccachectl
然后必須重啟電腦后生效
顏色問題, iOS 10 蘋果官方建議我們使用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);
判斷版本問題
判斷系統(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, *) {
print(“iOS 10.0”); // iOS 10.0啊
} else{ };
https的問題
iOS 9中默認非HTTS的網(wǎng)絡是被禁止的,當然我們也可以把NSAllowsArbitraryLoads設置為YES禁用ATS费什。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS钾恢,也就是說強制我們用HTTPS,如果不這樣的話提交App可能會被拒絕吕喘。但是我們可以通過NSExceptionDomains來針對特定的域名開放HTTP可以容易通過審核赘那。
隱私權(quán)限
iOS 10 開始對隱私權(quán)限更加嚴格,如果你不設置就會直接崩潰氯质,現(xiàn)在很多遇到崩潰問題了募舟,一般解決辦法都是在info.plist文件添加對應的Key-Value就可以了。
NSPhotoLibraryUsageDescription
App需要您的同意,才能訪問相冊
NSCameraUsageDescription
App需要您的同意,才能訪問相機
NSMicrophoneUsageDescription
App需要您的同意,才能訪問麥克風
NSLocationUsageDescription
App需要您的同意,才能訪問位置
NSLocationWhenInUseUsageDescription
App需要您的同意,才能在使用期間訪問位置
NSLocationAlwaysUsageDescription
App需要您的同意,才能始終訪問位置
NSCalendarsUsageDescription
App需要您的同意,才能訪問日歷
NSRemindersUsageDescription
App需要您的同意,才能訪問提醒事項
NSMotionUsageDescription App需要您的同意,才能訪問運動與健身
NSHealthUpdateUsageDescription
App需要您的同意,才能訪問健康更新
NSHealthShareUsageDescription
App需要您的同意,才能訪問健康分享
NSBluetoothPeripheralUsageDescription
App需要您的同意,才能訪問藍牙
NSAppleMusicUsageDescription
App需要您的同意,才能訪問媒體資料庫
權(quán)限以及相關(guān)設置
iOS10調(diào)用相冊會Crash下面信息:
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.
大體意思就是這個App缺少一個獲取私有(敏感)數(shù)據(jù)的權(quán)限描述闻察,需要我們在info.plist文件中必須含有一個名字叫做NSPhotoLibraryUsageDescription的值來解釋為什么應用需要使用這個數(shù)據(jù)拱礁,沒錯,獲取相冊資源的鍵值就是NSPhotoLibraryUsageDescription
去plist文件中添加了下面的鍵值:
[圖片上傳中辕漂。呢灶。。(5)]
再點擊獲取圖片資源钉嘹,就彈出了一個獲取權(quán)限的問候鸯乃,不會發(fā)生崩潰了:
[圖片上傳中。跋涣。缨睡。(6)]
Privacy - Microphone Usage Description //麥克風權(quán)限
Privacy - Contacts Usage Description //通訊錄權(quán)限
Privacy - Camera Usage Description //攝像頭權(quán)限
Privacy - NSSiriUsageDescription //Siri的權(quán)限
Privacy - Bluetooth Peripheral Usage Description //藍牙
Privacy - Reminders Usage Description //提醒事項
Privacy - Motion Usage Description //運動與健康
Privacy - Media Libaray Usage Description //媒體資源庫
Privacy - Calendars Usage Description //日歷
xib設定好固定尺寸在代碼中獲取控件尺寸都變成(0,0,1000,1000)
UIView中要從- (void)updateConstraints或者- (void)drawRect:(CGRect)rect獲取控件尺寸鸟悴。
(void)updateConstraints
{
[super updateConstraints];
}
(void)drawRect:(CGRect)rect
{
[super drawRect:rect];
}
UIViewController中要從- (void)viewDidLayoutSubviews獲取控件尺寸。
(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
}
Xcode 8使用Xib awakeFromNib的警告問題
在Xcode 8之前我們使用Xib初始化- (void)awakeFromNib {}都是這么寫也沒什么問題奖年,但是在Xcode 8會有如下警告:
[圖片上傳中细诸。。陋守。(7)]
如果不喜歡這個警告的話震贵,應該明確的加上[super awakeFromNib];我們來看看官方說明:
隱藏狀態(tài)欄的功能壞掉:
升級到 iOS 10.0后,在查看全屏圖片的時候水评,需要在 Present 之前給要 present 的 view controller 設置 modalPresentationCapturesStatusBarAppearance = true猩系。然后就好啦
TestViewController *testVC = [[TestViewController alloc] init];
testVC.modalPresentationCapturesStatusBarAppearance = true;
[self presentViewController:testVC animated:YES completion:nil];
//iOS 10 狀態(tài)欄的設置
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
************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)信息蝙眶,關(guān)于用戶輸入的內(nèi)容的預期的語義意義。例如褪那,您可以指定一個文本字段幽纷,用戶填寫收到一封電子郵件確認 uitextcontenttypeemailaddress。當您提供有關(guān)您期望用戶在文本輸入?yún)^(qū)域中輸入的內(nèi)容的信息時博敬,系統(tǒng)可以在某些情況下自動選 擇適當?shù)逆I盤友浸,并提高鍵盤修正和主動與其他文本輸入機會的整合。
UIScrollView自帶刷新功能
iOS 10 以后只要是繼承UIScrollView那么就支持刷新功能:
@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;
ImagePickerController.cameraViewTransform問題
(本條更新于:2016-09-21) 很多人反映自定義相機出現(xiàn)了問題偏窝,cameraViewTransform不能用了收恢,其實網(wǎng)上關(guān)于這個的資料不是很多,在這里提供參考辦法如下:
通過監(jiān)聽AVCaptureSessionDidStartRunningNotification來解決