iOS 10開發(fā) & Xcode 8新特性及常見問題解決

iOS 10 開發(fā)這次更新主要表現(xiàn)在以下這幾個(gè)方面灼卢。

1.語音識(shí)別
蘋果官方在文檔中新增了API Speech,那么在以前我們處理語音識(shí)別非常的繁瑣甚至很多時(shí)候可能需要借助于第三方框架處理,那么蘋果推出了這個(gè)后酱固,我們以后處理起來就非常的方便了,speech具有以下特點(diǎn):

  • 可以實(shí)現(xiàn)連續(xù)的語音識(shí)別
  • 可以對(duì)語 音文件或者語音流進(jìn)行識(shí)別
  • 最佳化自由格式的聽寫(可理解為多語言支持)和搜索式的字符串

**核心代碼: **

#import <Speech/Speech.h> 
/** 語音識(shí)別同樣的需要真機(jī)進(jìn)行測(cè)試 琐簇,因?yàn)樾枰布闹С终艚。€需要訪問權(quán)限 */ 
//1.創(chuàng)建本地化標(biāo)識(shí)符 
NSLocale *local =[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];  
//2.創(chuàng)建一個(gè)語音識(shí)別對(duì)象 
SFSpeechRecognizer *sf =[[SFSpeechRecognizer alloc] initWithLocale:local];  
//3.將bundle 中的資源文件加載出來返回一個(gè)url 
NSURL *url =[[NSBundle mainBundle] URLForResource:@"太想愛你(張信哲)mp3" withExtension:nil];  
//4.將資源包中獲取的url 傳遞給 request 對(duì)象
SFSpeechURLRecognitionRequest *res =[[SFSpeechURLRecognitionRequest alloc] initWithURL:url];  
//5.發(fā)送一個(gè)請(qǐng)求 
[sf recognitionTaskWithRequest:res resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
 if (error!=nil) {
 NSLog(@"語音識(shí)別解析失敗,%@",error); }else{//解析正確NSLog(@"---%@",result.bestTranscription.formattedString); 
} 
    }];

2.UITabBarController 中的改進(jìn)
在iOS 10之前,tabBarItem上的文字顏色婉商,默認(rèn)是 藍(lán)色似忧,上面的新消息提醒數(shù)字badge 默認(rèn)是紅色的,未選中的TabBarItem的文字顏色默認(rèn)是黑色的丈秩,我們修改的話盯捌,也只能修改它的默認(rèn)顏色 ,其它的就不能進(jìn)行個(gè)性化定制蘑秽,使用起來非常的不方便饺著,iOS10之后我們可以輕松個(gè)性化定制了。

核心代碼:

//1.創(chuàng)建出三個(gè)UIViewcontroller 對(duì)象  
OneViewController *oneVc =[[OneViewController alloc] init];  
//2.設(shè)置每一個(gè)控制器上的
tabbar oneVc.view.backgroundColor =[UIColor redColor];     
//設(shè)置標(biāo)題 
oneVc.tabBarItem.title = @"首頁";    
TwoViewController *twovC =[[TwoViewController alloc] init];  twovC.view.backgroundColor =[UIColor purpleColor];   
//設(shè)置標(biāo)題 twovC.tabBarItem.title = @"圈子"; 
ThreeViewController *threVC =[[ThreeViewController alloc] init];
threVC.view.backgroundColor =[UIColor blueColor];  
//設(shè)置標(biāo)題 threVC.tabBarItem.title = @"社交";   
//2.將創(chuàng)建好的三個(gè)普通控制器加入到tabbarController 控制器中  
[self addChildViewController:oneVc];  
[self addChildViewController:twovC]; 
[self addChildViewController:threVC];    
//改變tabbar 上面的文字默認(rèn)顏色  oneVc.tabBarController.tabBar.tintColor =[UIColor yellowColor];  
twovC.tabBarController.tabBar.tintColor =[UIColor yellowColor];  
threVC.tabBarController.tabBar.tintColor =[UIColor yellowColor];   //使用iOS 10新推出的 修改 tabbar 未選中的tintColor 顏色  
//這一句代碼將 tabbar 未選中的時(shí)候的默認(rèn)色- 黑色改為紅色
oneVc.tabBarController.tabBar.unselectedItemTintColor =[UIColor redColor];   
//tabbarItem 中屬性  
//數(shù)字提醒的顏色 在iOS 10之前的版本默認(rèn)都是數(shù)字提醒都是紅色 oneVc.tabBarItem.badgeColor =[UIColor orangeColor]; oneVc.tabBarItem.badgeValue =@"90";  
//將tabBarItem 中數(shù)字提醒默認(rèn)的白色改掉 使用富文本修改 
[oneVc.tabBarItem setBadgeTextAttributes:@{ NSForegroundColorAttributeName:[UIColor blackColor] } forState:UIControlStateNormal];

3.iOS10.0中字體跟隨系統(tǒng)設(shè)置變化大小
在以前如果說我們想改變APP中程序的字體大小肠牲,我們只能自定義字體或者使用runtime進(jìn)行處理瓶籽,或者都得設(shè)置UIFont,非常的不方便埂材,從iOS 10蘋果官方允許我們自定義設(shè)置

核心代碼:

/*在iOS 10當(dāng)中塑顺,當(dāng)咱們用戶將手機(jī)的字體大小進(jìn)行了設(shè)置調(diào)整之后,那么app中設(shè)置相關(guān)代碼字體也會(huì)跟著一起變化 俏险,支持常見一些字體UI控件 比如UILabel UIButton **/ 
[super viewDidLoad];  
//設(shè)置字體的改變大小 
self.labels.font =[UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
//允許改變  
/* 蘋果官方明確的告訴你必須和 preferredFontForTextStyle 或者preferredFontForTextStyle:(NSString *)style compatibleWithTraitCollection 進(jìn)行結(jié)合使用 注意這里不支持模擬器操作 **/  
self.labels.adjustsFontForContentSizeCategory = YES;

4.UIViewPropertyAnimator屬性動(dòng)畫器
那么在iOS 10之前严拒,我們使用UIView 做動(dòng)畫效果或者自定義一些layer 的動(dòng)畫,如果開始了竖独,一般無法進(jìn)行停止操作更不能暫停操作裤唠,而且一些非常復(fù)雜的動(dòng)畫處理也比較麻煩,但是在iOS10莹痢,蘋果退出了一個(gè)全新的API UIViewPropertyAnimator种蘸,可供我們處理動(dòng)畫操作UIViewPropertyAnimator 是 iOS 10 中新增的一個(gè)執(zhí)行 View 動(dòng)畫的類墓赴,具有以下特點(diǎn):

  • 可中斷性
  • 可擦除
  • 可反轉(zhuǎn)性
  • 豐富的動(dòng)畫時(shí)間控制功能

官方文檔: Snip20160618_30.pngSnip20160618_31.png

核心代碼:

#import "ViewController.h"
@interface ViewController ()

@property(nonatomic,strong)UIView *myView;
@property(nonatomic,strong)UIViewPropertyAnimator *myViewPro;
@end

@implementation ViewController
- (void)viewDidLoad { 
[super viewDidLoad];  
//1.創(chuàng)建一個(gè)View對(duì)象 
UIView *Views =[[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; 
Views.backgroundColor =[UIColor yellowColor]; [self.view addSubview:Views]; 
//2.創(chuàng)建一個(gè)外部的變量進(jìn)行引用  
self.myView = Views;   
//3.創(chuàng)建一個(gè)view 動(dòng)畫器 
UIViewPropertyAnimator *viewPro =[UIViewPropertyAnimator runningPropertyAnimatorWithDuration:1.0 delay:30.0 options:UIViewAnimationOptionCurveLinear animations:^{ 

//使用View動(dòng)畫器修改View的frame 
self.myView.frame = CGRectMake(230, 230, 130, 130); } completion:nil]; 
 
self.myViewPro = viewPro;
}

//結(jié)束
- (IBAction)stop:(id)sender{  
// YES 和NO 適用于設(shè)置當(dāng)前這個(gè)屬性動(dòng)畫器是否可以繼續(xù)使用 [self.myViewPro stopAnimation:YES];
}

//繼續(xù)
- (IBAction)continued:(id)sender {   
//UITimingCurveProvider /** 
@property(nullable, nonatomic, readonly) UICubicTimingParameters *cubicTimingParameters; @property(nullable, nonatomic, readonly) UISpringTimingParameters *springTimingParameters;  **/ 
//設(shè)置彈簧效果 DampingRatio取值范圍是 0-1  
//這個(gè)取值 決定彈簧抖動(dòng)效果 的大小 ,越往 0 靠近那么就越明顯
 UISpringTimingParameters *sp =[[UISpringTimingParameters alloc] initWithDampingRatio:0.01];  
//設(shè)置一個(gè)動(dòng)畫的效果// 
UICubicTimingParameters *cub =[[UICubicTimingParameters alloc] initWithAnimationCurve:UIViewAnimationCurveEaseInOut];
  //durationFactor 給一個(gè)默認(rèn)值 1就可以 
[self.myViewPro continueAnimationWithTimingParameters:sp durationFactor:1.0];
}

//暫停
- (IBAction)puase:(id)sender {  
[self.myViewPro pauseAnimation];
}

//開始
- (IBAction)start:(id)sender {  
[self.myViewPro startAnimation];
}

效果圖: 222.gif
5.UIColor 新增方法
在iOS10之前航瞭,UIColor中設(shè)置顏色只能通過RGB 來表示诫硕,在iOS原生還不支持#16進(jìn)制寫法,還得自己寫分類去處理刊侯,我們知道RGB表示的顏色是優(yōu)先的章办,而且也是不精準(zhǔn)的,那么在iOS10中滨彻,蘋果官方新增了colorWithDisplayP3Red方法藕届。

核心代碼:

+ (UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
//方法可以更加精準(zhǔn)的設(shè)置顏色了。

6.UIApplication對(duì)象中openUrl被廢棄
在iOS 10.0以前的年代亭饵,我們要想使用應(yīng)用程序去打開一個(gè)網(wǎng)頁或者進(jìn)行跳轉(zhuǎn)休偶,直接使用[[UIApplication sharedApplication] openURL 方法就可以了,但是在iOS 10 已經(jīng)被廢棄了辜羊,因?yàn)槭褂眠@種方式踏兜,處理的結(jié)果我們不能攔截到也不能獲取到,對(duì)于開發(fā)是非常不利的只冻,在iOS 10全新的退出了
[[UIApplication sharedApplication] openURL:nil options:nilcompletionHandler: nil];有一個(gè)成功的回調(diào)block 可以進(jìn)行監(jiān)視庇麦。

蘋果官方解釋: //說明在iOS 10.0中openUrl方法已經(jīng)廢棄了 改為openURL:nil options:nil completionHandler:^(BOOL success /* // Options are specified in the section below for openURL options. An empty options dictionary will result in the same // behavior as the older openURL call, aside from the fact that this is asynchronous and calls the completion handler rather // than returning a result. // The completion handler is called on the main queue.

核心代碼:

 [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success) {  
}];

6.SiriKit
在 iOS 10 里面開發(fā)者可以使用 Siri SDK计技,毫無疑問這也是 iOS 10 最重要的 SDK喜德。從此開發(fā)者可以使用原生API提供語音搜索、語音轉(zhuǎn)文字消息甚至更多常見語音功能垮媒。

7.User Notifications
這個(gè) API 讓你可以處理本地或遠(yuǎn)程的用戶通知舍悯,并且可以基于某個(gè)條件,例如時(shí)間或者地理位置睡雇。這個(gè)異常強(qiáng)大萌衬,貌似可以攔截并替換自己 app 發(fā)下來的 payload,并且在之前版本SDK的本地通知框架已經(jīng)被廢棄了它抱,在上一篇帖子有所講到以及代碼都有展示秕豫。

8.CallKit
繼2014年蘋果推出VoIP證書后,這次VoIP 接口的開放观蓄,以及一個(gè)全新的 App Extension混移,簡(jiǎn)直是VOIP的福音,可見蘋果對(duì)VOIP的重視侮穿。callkit框架 VoIP應(yīng)用程序集成與iPhone的用戶界面歌径,給用戶一個(gè)很棒的經(jīng)歷。用這個(gè)框架來讓用戶查看和接聽電話的鎖屏和VoIP管理聯(lián)系人電話在手機(jī)APP的收藏夾和歷史的觀點(diǎn)亲茅。callkit還介紹了應(yīng)用程序的擴(kuò)展回铛,使呼叫阻塞和來電識(shí)別狗准。您可以創(chuàng)建一個(gè)應(yīng)用程序擴(kuò)展,可以將一個(gè)電話號(hào)碼與一個(gè)名稱聯(lián)系起來茵肃,或者告訴系統(tǒng)當(dāng)一個(gè)號(hào)碼應(yīng)該被阻止腔长。

9.第三方鍵盤的改進(jìn)
非常非常重要,第三方鍵盤一直都不能很方便的擁有長(zhǎng)按地球鍵的功能免姿,現(xiàn)在有了饼酿。通過 handleInputModeListFromView:withEvent: 可以彈出系統(tǒng)鍵盤列表。同時(shí)使用 documentInputMode 可以檢測(cè)輸入上下文中的語言胚膊,你可以對(duì)輸入方式進(jìn)行一些類似于對(duì)齊方式的調(diào)整故俐。

10.iOS10 對(duì)隱私權(quán)限的管理
比如訪問的攝像頭、麥克風(fēng)等硬件紊婉,都需要提前請(qǐng)求應(yīng)用權(quán)限药版、允許后才可以使用,或者現(xiàn)在要提前聲明喻犁,雖然以往要求不嚴(yán)格槽片。在iOS10中比如遇到崩潰。

崩潰日志:

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data. 你需要在info.plist文件 添加一個(gè)NSContactsUsageDescription的Key肢础,Value添加一個(gè)描述还栓。 ssss.png 視頻播放 需要在info.Plist中配置 >官方解釋:This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSAppleMusicUsageDescription key with a string value explaining to the user how the app uses this data.
訪問用戶的隱私數(shù)據(jù),并且沒有向用戶說明,必須在plist(info.plist)中配置這個(gè)key NSAppleMusicUsageDescription 并且向用戶說明.fff.png

11.Xcode7 和Xcode 8項(xiàng)目中的xib兼容問題
在Xcode8上打開項(xiàng)目要小心,尤其是對(duì)于xib過程传轰,在變動(dòng)后可不要隨意點(diǎn)保存剩盒,否則當(dāng)你回頭用Xcode7打開時(shí)時(shí)發(fā)現(xiàn)報(bào)錯(cuò)了,Xcode保存的xib在xcode7上是識(shí)別不了的慨蛙!

12.ApplePay(蘋果支付)
ApplePay更新內(nèi)容:

  • 可用于 SFSafariViewController
  • 可用于沒有UI的extensions中
  • 在 iMessage 應(yīng)用中也支持 ApplePay

13.CoreData提升了并發(fā)訪問性能

14.刷新控件(UIRefresh Control)
iOS系統(tǒng)自帶的刷新控件支持所有的 UIScrollView 以及其子類辽聊,比如說 UICollectionView,UITableView。

核心代碼:

#import <Foundation/Foundation.h>
@class UIRefreshControl;NS_CLASS_AVAILABLE_IOS(10_0)
@protocol UIRefreshControlHosting <NSObject>
@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl __TVOS_PROHIBITED;
@end

Xcode 8 新特性(正在整理..)

xcode8 常見問題:

1.更新Xcode 8 卡在“正在安裝...”:
筆者連續(xù)重裝了三次都無限卡在“還有5分鐘...”期贫,最終采用最粗暴直接的方式跟匆,F(xiàn)inder --> 應(yīng)用程序,卸載Xcode 7.3 并在AppStore中直接安裝Xcode 8 。

2.控制臺(tái)打印多余打印
貌似是xcode自帶的項(xiàng)目追蹤信息通砍,每次項(xiàng)目運(yùn)行以后都會(huì)在控制臺(tái)打印以下信息

控制臺(tái)多余打印.png

禁用該Xcode Debug Console方法:Product --> Scheme --> Edit Scheme 在打開的窗口中選擇run 在 Environment Variables中添加OS_ACTIVITY_MODE對(duì)應(yīng)的value為disable后close退出即可玛臂。
控制臺(tái)環(huán)境變量.png

3.注釋快捷鍵(command + /)失效
這個(gè)是因?yàn)闉榱颂O果解決xcode ghost,把插件屏蔽了解決方法封孙,命令運(yùn)行:
$ sudo /usr/libexec/xpccachectl
注意:然后必須重啟電腦后生效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迹冤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子敛瓷,更是在濱河造成了極大的恐慌叁巨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐籽,死亡現(xiàn)場(chǎng)離奇詭異锋勺,居然都是意外死亡蚀瘸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門庶橱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮勃,“玉大人,你說我怎么就攤上這事苏章〖偶危” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵枫绅,是天一觀的道長(zhǎng)泉孩。 經(jīng)常有香客問我,道長(zhǎng)并淋,這世上最難降的妖魔是什么寓搬? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮县耽,結(jié)果婚禮上句喷,老公的妹妹穿的比我還像新娘。我一直安慰自己兔毙,他們只是感情好唾琼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澎剥,像睡著了一般锡溯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肴裙,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天趾唱,我揣著相機(jī)與錄音涌乳,去河邊找鬼蜻懦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夕晓,可吹牛的內(nèi)容都是我干的宛乃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蒸辆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼征炼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躬贡,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤谆奥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拂玻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酸些,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宰译,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魄懂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沿侈。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖市栗,靈堂內(nèi)的尸體忽然破棺而出缀拭,到底是詐尸還是另有隱情,我是刑警寧澤填帽,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布蛛淋,位于F島的核電站,受9級(jí)特大地震影響篡腌,放射性物質(zhì)發(fā)生泄漏铣鹏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一哀蘑、第九天 我趴在偏房一處隱蔽的房頂上張望诚卸。 院中可真熱鬧,春花似錦绘迁、人聲如沸合溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棠赛。三九已至,卻和暖如春膛腐,著一層夾襖步出監(jiān)牢的瞬間睛约,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工哲身, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辩涝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓勘天,卻偏偏與公主長(zhǎng)得像怔揩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脯丝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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