Xcode8及iOS10適配問(wèn)題匯總

1.Notification(通知)

自從Notification被引入之后君躺,蘋果就不斷的更新優(yōu)化纬乍,但這些更新優(yōu)化只是小打小鬧跋选,直至現(xiàn)在iOS 10開(kāi)始真正的進(jìn)行大改重構(gòu),這讓開(kāi)發(fā)者也體會(huì)到UserNotifications的易用官脓,功能也變得非常強(qiáng)大协怒。

iOS 9 以前的通知

1)、在調(diào)用方法時(shí)卑笨,有些方法讓人很難區(qū)分孕暇,容易寫錯(cuò)方法,這讓開(kāi)發(fā)者有時(shí)候很苦惱赤兴。

2)妖滔、應(yīng)用在運(yùn)行時(shí)和非運(yùn)行時(shí)捕獲通知的路徑還不一致。

3)桶良、應(yīng)用在前臺(tái)時(shí)座舍,是無(wú)法直接顯示遠(yuǎn)程通知,還需要進(jìn)一步處理陨帆。

4)曲秉、已經(jīng)發(fā)出的通知是不能更新的,內(nèi)容發(fā)出時(shí)是不能改變的歧譬,并且只有簡(jiǎn)單文本展示方式,擴(kuò)展性根本不是很好搏存。

iOS 10 開(kāi)始的通知

1)瑰步、所有相關(guān)通知被統(tǒng)一到了UserNotifications.framework框架中。

2)璧眠、增加了撤銷缩焦、更新、中途還可以修改通知的內(nèi)容责静。

3)袁滥、通知不在是簡(jiǎn)單的文本了,可以加入視頻灾螃、圖片题翻,自定義通知的展示等等。

4)腰鬼、iOS 10相對(duì)之前的通知來(lái)說(shuō)更加好用易于管理嵌赠,并且進(jìn)行了大規(guī)模優(yōu)化塑荒,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是一件好事。

5)姜挺、iOS 10開(kāi)始對(duì)于權(quán)限問(wèn)題進(jìn)行了優(yōu)化齿税,申請(qǐng)權(quán)限就比較簡(jiǎn)單了(本地與遠(yuǎn)程通知集成在一個(gè)方法中)。

如果使用了推送:
這里寫圖片描述

推送.jpeg

2.ATS的問(wèn)題

iOS 9中默認(rèn)非HTTS的網(wǎng)絡(luò)是被禁止的炊豪,當(dāng)然我們也可以把NSAllowsArbitraryLoads設(shè)置為YES禁用ATS凌箕。不過(guò)iOS 10從2017年1月1日起蘋果不允許我們通過(guò)這個(gè)方法跳過(guò)ATS,也就是說(shuō)強(qiáng)制我們用HTTPS词渤,如果不這樣的話提交App可能會(huì)被拒絕牵舱。但是我們可以通過(guò)NSExceptionDomains來(lái)針對(duì)特定的域名開(kāi)放HTTP可以容易通過(guò)審核。

NSExceptionDomains方式 設(shè)置域掖肋∑推希可以簡(jiǎn)單理解成,把不支持https協(xié)議的接口設(shè)置成http的接口志笼。

具體方法:

1)沿盅、在項(xiàng)目的info.plist中添加一個(gè)Key:App Transport Security Settings,類型為字典類型纫溃。

2)腰涧、然后給它添加一個(gè)Exception Domains,類型為字典類型紊浩;

3)窖铡、把需要的支持的域添加給Exception Domains。其中域作為Key坊谁,類型為字典類型费彼。

4)、每個(gè)域下面需要設(shè)置3個(gè)屬性:NSIncludesSubdomains口芍、NSExceptionRequiresForwardSecrecy箍铲、NSExceptionAllowsInsecureHTTPLoads。

網(wǎng)絡(luò)安全.jpeg

細(xì)節(jié)提示:在iOS9以后的系統(tǒng)中如果使用到網(wǎng)絡(luò)圖片鬓椭,也要注意網(wǎng)絡(luò)圖片是否是HTTP的哦颠猴,如果是,也要把圖片的域設(shè)置哦小染!
3.iOS 10 隱私權(quán)限設(shè)置

iOS 10 開(kāi)始對(duì)隱私權(quán)限更加嚴(yán)格翘瓮,如果你不設(shè)置就會(huì)直接崩潰,現(xiàn)在很多遇到崩潰問(wèn)題了裤翩,一般解決辦法都是在info.plist文件添加對(duì)應(yīng)的Key-Value就可以了资盅。

(錯(cuò)誤: This app attempts 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.—訪問(wèn)相冊(cè)失敗,請(qǐng)求權(quán)限 
This app attempts 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.–訪問(wèn)相機(jī)(二維碼識(shí)別等)錯(cuò)誤,要求相機(jī)權(quán)限 
隱私權(quán)限設(shè)置.jpeg

以上Value值,圈出的紅線部分的文字是展示給用戶看的,必須添加律姨。

4.Xcode 8 運(yùn)行一堆沒(méi)用的logs解決辦法

Xcode8代碼出現(xiàn)ubsystem: 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, privacy_setting: 2, enable_private_data: 0 2016-09-14 17:18:55.843428 MyApp[6880:340837]

自己新建的一個(gè)工程啥也沒(méi)干就打印一堆爛七八糟的東西振峻,我覺(jué)得這個(gè)應(yīng)該是Xcode 8的問(wèn)題,

具體也沒(méi)細(xì)研究择份,解決辦法是設(shè)置OS_ACTIVITY_MODE : disable
【product】-【scheme】-【Edit Scheme】-【Run】-【Argument】-【Environment Variable】添加keyValue【OS_ACTIVITY_MODE disable】可以停止輸出打印此日志

遺留問(wèn)題:還會(huì)出現(xiàn)Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x10a39a910) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x10a1c4210). One of the two will be used. Which one is undefined.

5.iOS 10 UIStatusBar方法過(guò)期:

在我們開(kāi)發(fā)中有可能用到UIStatusBar一些屬性扣孟,在iOS 10 中這些方法已經(jīng)過(guò)期了,如果你的項(xiàng)目中有用的話就得需要適配荣赶。


UIStatusBar.jpeg

UIStatusBarStyle 和 prefersStatusBarHidden這兩個(gè)屬性是readonly readonly readonly也就是說(shuō)我們?nèi)绻趇OS 10中調(diào)用,你需要使用preferredStatusBar比如這樣:

//iOS 10 

- (BOOL)prefersStatusBarHidden{
    return YES;
}
- (UIStatusBarStyle)preferredStatusBarStyle {    

  return UIStatusBarStyleDefault;

}

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

隨著開(kāi)發(fā)者對(duì)UICollectionView的信賴凤价,項(xiàng)目中用的地方也比較多,但是還是存在一些問(wèn)題拔创,比如有時(shí)會(huì)卡頓利诺、加載慢等。所以iOS 10 對(duì)UICollectionView進(jìn)一步的優(yōu)化剩燥。
UICollectionView cell pre-fetching預(yù)加載機(jī)制UICollectionView and UITableView prefetchDataSource 新增的API針對(duì)self-sizing cells 的改進(jìn)Interactive reordering 
 在iOS 10 之前,UICollectionView上面如果有大量cell,當(dāng)用戶活動(dòng)很快的時(shí)候,整個(gè)UICollectionView的卡頓會(huì)很明顯,為什么會(huì)造成這樣的問(wèn)題,這里涉及到了iOS 系統(tǒng)的重用機(jī)制,當(dāng)cell準(zhǔn)備加載進(jìn)屏幕的時(shí)候,整個(gè)cell都已經(jīng)加載完成,等待在屏幕外面了,也就是整整一行cell都已經(jīng)加載完畢,這就是造成卡頓的主要原因,專業(yè)術(shù)語(yǔ)叫做:掉幀.要想讓用戶感覺(jué)不到卡頓,我們的app必須幀率達(dá)到60幀/秒,也就是說(shuō)每幀16毫秒要刷新一次.
 
iOS 10 之前UICollectionViewCell的生命周期是這樣的:
1)慢逾、用戶滑動(dòng)屏幕,屏幕外有一個(gè)cell準(zhǔn)備加載進(jìn)來(lái),把cell從reusr隊(duì)列拿出來(lái),然后調(diào)用prepareForReuse方法,在這個(gè)方法里面,可以重置cell的狀態(tài),加載新的數(shù)據(jù);
2)、繼續(xù)滑動(dòng),就會(huì)調(diào)用cellForItemAtIndexPath方法,在這個(gè)方法里面給cell賦值模型,然后返回給系統(tǒng);
3)灭红、當(dāng)cell馬上進(jìn)去屏幕的時(shí)候,就會(huì)調(diào)用willDisplayCell方法,在這個(gè)方法里面我們還可以修改cell,為進(jìn)入屏幕做最后的準(zhǔn)備工作;
 
iOS 10 UICollectionViewCell的生命周期是這樣的:
1)侣滩、用戶滑動(dòng)屏幕,屏幕外有一個(gè)cell準(zhǔn)備加載進(jìn)來(lái),把cell從reusr隊(duì)列拿出來(lái),然后調(diào)用prepareForReuse方法,在這里當(dāng)cell還沒(méi)有進(jìn)去屏幕的時(shí)候,就已經(jīng)提前調(diào)用這個(gè)方法了,對(duì)比之前的區(qū)別是之前是cell的上邊緣馬上進(jìn)去屏幕的時(shí)候就會(huì)調(diào)用該方法,而iOS 10 提前到cell還在屏幕外面的時(shí)候就調(diào)用;
2)、在cellForItemAtIndexPath中創(chuàng)建cell变擒,填充數(shù)據(jù)君珠,刷新?tīng)顟B(tài)等操作,相比于之前也提前了;
3)、用戶繼續(xù)滑動(dòng)的話,當(dāng)cell馬上就需要顯示的時(shí)候我們?cè)僬{(diào)用willDisplayCell方法,原則就是:何時(shí)需要顯示,何時(shí)再去調(diào)用willDisplayCell方法;
4)娇斑、當(dāng)cell完全離開(kāi)屏幕以后,會(huì)調(diào)用didEndDisplayingCell方法,跟之前一樣,cell會(huì)進(jìn)入重用隊(duì)列.

在iOS 10 之前,cell只能從重用隊(duì)列里面取出,再走一遍生命周期,并調(diào)用cellForItemAtIndexPath創(chuàng)建或者生成一個(gè)cell.在iOS 10 中,系統(tǒng)會(huì)cell保存一段時(shí)間,也就是說(shuō)當(dāng)用戶把cell滑出屏幕以后,如果又滑動(dòng)回來(lái),cell不用再走一遍生命周期了,只需要調(diào)用willDisplayCell方法就可以重新出現(xiàn)在屏幕中了.
iOS 10 中,系統(tǒng)是一個(gè)一個(gè)加載cell的,二以前是一行一行加載的,這樣就可以提升很多性能;iOS 10 新增加的Pre-Fetching預(yù)加載這個(gè)是為了降低UICollectionViewCell在加載的時(shí)候所花費(fèi)的時(shí)間,在 iOS 10 中,除了數(shù)據(jù)源協(xié)議和代理協(xié)議外,新增加了一個(gè)UICollectionViewDataSourcePrefetching協(xié)議,這個(gè)協(xié)議里面定義了兩個(gè)方法:

- (void)collectionView:(UICollectionView *)collectionView prefetchItemsAtIndexPaths:(NSArray*)indexPaths NS_AVAILABLE_IOS(10_0);  
-(void)collectionView:(UICollectionView*)collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray*)indexPaths  NS_AVAILABLE_IOS(10_0);

在ColletionView prefetchItemsAt indexPaths這個(gè)方法是異步預(yù)加載數(shù)據(jù)的,當(dāng)中的indexPaths數(shù)組是有序的,就是item接收數(shù)據(jù)的順序;

CollectionView cancelPrefetcingForItemsAt indexPaths這個(gè)方法是可選的,可以用來(lái)處理在滑動(dòng)中取消或者降低提前加載數(shù)據(jù)的優(yōu)先級(jí).

注意:這個(gè)協(xié)議并不能代替之前讀取數(shù)據(jù)的方法,僅僅是輔助加載數(shù)據(jù).

Pre-Fetching預(yù)加載對(duì)UITableViewCell同樣適用.

WWDC2016 Session筆記 - iOS 10 UICollectionView新特性

7.iOS 10 UIColor 新增方法

以下是官方文檔的說(shuō)明:

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.
(譯:大多數(shù)圖形架構(gòu)整個(gè)系統(tǒng)策添,包括核心圖形核心形象,金屬毫缆,和AVFoundation唯竹,有擴(kuò)展范圍的像素格式和寬色域的色彩空間大幅改善的支持。通過(guò)將此行為擴(kuò)展到整個(gè)圖形堆棧中苦丁,它比以往任何時(shí)候都更容易支持具有寬顏色顯示的設(shè)備浸颓。此外,UIKit規(guī)范在新擴(kuò)展的sRGB色彩空間工作芬骄,因此很容易與其他顏色混合的sRGB顏色猾愿,更寬的色域不顯著的性能損失鹦聪。)
Here are some best practices to adopt as you start working with Wide Color.
(譯:這里是一些最佳實(shí)踐账阻,采用你開(kāi)始與多種顏色的工作)
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.
(譯:在iOS 10中,該UIColor類使用擴(kuò)展的sRGB色彩空間和初始化不再夾原成分值在0和1之間泽本。如果你的應(yīng)用程序依賴UIKit夾緊元件值(無(wú)論你是創(chuàng)建一個(gè)顏色或要求顏色其組件的值)淘太,你需要改變你的應(yīng)用程序的行為時(shí),你的鏈接和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.
(譯:當(dāng)執(zhí)行在iPad上親一個(gè)UIView的自定義繪制(9.7英寸)蒲牧,基本的繪圖環(huán)境配置一個(gè)擴(kuò)展的sRGB色彩空間撇贺。)
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.
(譯:如果你的應(yīng)用程序提供自定義的圖像對(duì)象,使用新的uigraphicsimagerenderer類控制是否目標(biāo)位圖是使用擴(kuò)展的范圍或標(biāo)準(zhǔn)格式創(chuàng)建冰抢。)
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.
(譯:如果您正在使用較低級(jí)別的接口松嘶,如核心圖形或金屬,在寬色域設(shè)備上執(zhí)行自己的圖像處理挎扰,則應(yīng)該使用擴(kuò)展的范圍顏色空間和支持16位浮點(diǎn)組件值的像素格式翠订。當(dāng)對(duì)顏色值進(jìn)行夾緊是必要的,你應(yīng)該明確地這樣做遵倦。)
Core Graphics, Core Image, and Metal Performance Shaders provide new options for easily converting colors and images between color spaces.
(譯:圖形核心尽超,核心形象,和金屬的性能提供了新的選擇梧躺,很容易著色的顏色和圖像之間的顏色空間轉(zhuǎn)換似谁。)
因?yàn)橹拔覀兌际怯肦GB來(lái)設(shè)置顏色,反正用起來(lái)也不是特別多樣化掠哥,這次新增的方法應(yīng)該就是一個(gè)彌補(bǔ)吧巩踏。所以在iOS 10 蘋果官方建議我們使用sRGB,因?yàn)樗阅芨昧拢矢S富蛀缝。如果你自己為UIColor寫了一套分類的話也可嘗試替換為sRGB,UIColor類中新增了兩個(gè)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ū)域所期望的語(yǔ)義意義屈梁。

使用此屬性可以給鍵盤和系統(tǒng)信息,關(guān)于用戶輸入的內(nèi)容的預(yù)期的語(yǔ)義意義榛了。例如在讶,您可以指定一個(gè)文本字段,用戶填寫收到一封電子郵件確認(rèn)uitextcontenttypeemailaddress霜大。當(dāng)您提供有關(guān)您期望用戶在文本輸入?yún)^(qū)域中輸入的內(nèi)容的信息時(shí)构哺,系統(tǒng)可以在某些情況下自動(dòng)選擇適當(dāng)?shù)逆I盤,并提高鍵盤修正和主動(dòng)與其他文本輸入機(jī)會(huì)的整合战坤。

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

當(dāng)我們手機(jī)系統(tǒng)字體改變了之后曙强,那我們App的label也會(huì)跟著一起變化,這需要我們寫很多代碼來(lái)進(jìn)一步處理才能實(shí)現(xiàn)途茫,但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory來(lái)設(shè)置碟嘴。因?yàn)闆](méi)有真機(jī),具體實(shí)際操作還沒(méi)去實(shí)現(xiàn)囊卜,如果理解錯(cuò)誤幫忙指正娜扇。

UILabel *myLabel = [UILabel new];  /*
UIFont 的preferredFontForTextStyle: 意思是指定一個(gè)樣式错沃,并讓字體大小符合用戶設(shè)定的字體大小。
*/


myLabel.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; /*

指示是否應(yīng)自動(dòng)更新相應(yīng)元素的字體時(shí)雀瓢,裝置的uicontentsizecategory枢析。
這個(gè)屬性生效,元素的字體必須使用+ preferredfontfortextstyle:
或+ preferredfontfortextstyle:compatiblewithtraitcollection:一個(gè)有效的uifonttextstyle刃麸。
*/

//是否更新字體的變化

myLabel.adjustsFontForContentSizeCategory = YES;

10.iOS 10 UIScrollView新增refreshControl


refreshControl.jpeg

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

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

@property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing;

@property (null_resettable, nonatomic, strong) UIColor *tintColor;
@property (nullable, nonatomic, strong) NSAttributedString *attributedTitle UI_APPEARANCE_SELECTOR;

// May be used to indicate to the refreshControl that an external event has initiated the refresh action
- (void)beginRefreshing NS_AVAILABLE_IOS(6_0);
// Must be explicitly called when the refreshing has completed
- (void)endRefreshing NS_AVAILABLE_IOS(6_0);

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

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


判斷系統(tǒng)版本.jpeg

我們得到了答案是:

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

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

//值為10.0 [[UIDevice currentDevice] systemVersion]
所以說(shuō)判斷系統(tǒng)方法最好還是用后面的兩種方法辐益,哦~我忘記說(shuō)了[[UIDevice currentDevice] systemVersion].floatValue這個(gè)方法也是不靠譜的,好像在8.3版本輸出的值是8.2脱吱,記不清楚了反正是不靠譜的智政,所以建議大家用[[UIDevice currentDevice] systemVersion]這個(gè)方法!

Swift判斷如下:

if #available(iOS 10.0, *) {

// iOS 10.0

print("iOS 10.0");

} else { }

12.推送的時(shí)候箱蝠,開(kāi)啟Remote notificationsYou’ve implemented -[application:didReceiveRemoteNotification:fetchCompletionHan
dler:],

but you still need to add “remote-notification” to the list of your supported UIBackgroundModes in your Info.plist.

解決方案:需要在Xcode 中修改應(yīng)用的 Capabilities 開(kāi)啟Remote notifications续捂,請(qǐng)參考下圖:


推送須知.jpeg

13.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.

在模擬器中、發(fā)現(xiàn)“One of the two will be used. Which one is undefined.”日志

查找資料發(fā)現(xiàn)原因:objc runtime 對(duì)所用app使用同一個(gè)命名空間(flat namespace)宦搬,運(yùn)行機(jī)制如下:

首先二進(jìn)制映像被加載牙瓢,檢查程序依賴關(guān)系

每一個(gè)二進(jìn)制映像被加載的同時(shí),程序的objc classes在objc runtime命名空間中注冊(cè)

如果具有相同名稱的類被再次加載间校,objc runtime的行為是不可預(yù)知的矾克。一種可能的情況是任意一個(gè)程序的該類會(huì)被加載(這應(yīng)該也是默認(rèn)動(dòng)作)

14.Xcode 8 Command + / 不能注釋

解決方法:在終端輸入
//sudo /usr/libexec/xpccachectl
重啟電腦即可.
另外:Xcode 推出來(lái)快速文本注釋:Command +Option +/

/**
 <#Description#>

 @param frame <#frame description#>

 @return <#return value description#>
 */
- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        [self initUiConfig];
    }
    return self;
}

15證書(shū)問(wèn)題


證書(shū)問(wèn)題.jpeg

這個(gè)問(wèn)題剛開(kāi)始估計(jì)大家都會(huì)碰到也是第一個(gè)要解決的問(wèn)題
這個(gè)問(wèn)題就是一個(gè)證書(shū)的設(shè)置問(wèn)題,下面看兩張圖
正常我們會(huì)在BuildeSettings中設(shè)置證書(shū):


BuildSettings.jpeg

但是在xcode8.0中我們看到下面的新特性:
Xcode8新特性.jpeg

相信大家都能看到在Genreal下面會(huì)有Siging憔足,沒(méi)錯(cuò)這就是新特性胁附,為了方便用戶來(lái)管理,大家可以選擇Automatically manage signing滓彰。需要輸入開(kāi)發(fā)者賬號(hào)控妻!如果沒(méi)有賬號(hào)也沒(méi)關(guān)系,在下面也可以選擇Debug揭绑、Realease弓候、inHouse模式下對(duì)應(yīng)的證書(shū)也可以!

但是 但是 但是 如果你的證書(shū)如果是通配符類型的他匪,但是你的app包含了比如推送菇存、apple pay、他會(huì)報(bào)錯(cuò)提示你未報(bào)含xx.id的manteid等等邦蜜。所以你要生成針對(duì)你app的bundleid對(duì)應(yīng)的證書(shū)依鸥!

  1. 跳轉(zhuǎn)到app內(nèi)的隱私數(shù)據(jù)設(shè)置頁(yè)面

我們知道用戶沒(méi)開(kāi)啟,肯定要提醒用戶去設(shè)置開(kāi)啟的吧畦徘,所以我們要跳轉(zhuǎn)到app的隱私數(shù)據(jù)界面毕籽。如何調(diào)用呢
iOS10 之前調(diào)用方法:

NSURL*url=[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];
                                   [[UIApplication sharedApplication] openURL:url];
 

但是iOS10 之后不能再調(diào)用此方法進(jìn)行跳轉(zhuǎn)隱私設(shè)置界面.

iOS10之后:
1)定義一個(gè)宏方便調(diào)用

//-----------------------系統(tǒng)權(quán)限設(shè)置路徑(iOS8以后適用)---------------------

//url
#define SettingURL [NSURL URLWithString:UIApplicationOpenSettingsURLString]
//調(diào)到設(shè)置
#define GoToSetting if([[UIApplication sharedApplication] canOpenURL:SettingURL]) { 
                        [[UIApplication sharedApplication] openURL:SettingURL];
}
 

 

調(diào)用

//去設(shè)置
        if (IOS8_OR_LATER) {
            GoToSetting;
        }

2)、方法中直接調(diào)用

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

17 .真彩色的顯示

真彩色的顯示會(huì)根據(jù)光感應(yīng)器來(lái)自動(dòng)的調(diào)節(jié)達(dá)到特定環(huán)境下顯示與性能的平衡效果,如果需要這個(gè)功能的話,可以在info.plist里配置(在Source Code模式下):

UIWhitePointAdaptivityStyle
 

它有五種取值,分別是:

UIWhitePointAdaptivityStyleStandard // 標(biāo)準(zhǔn)模式
UIWhitePointAdaptivityStyleReading // 閱讀模式
UIWhitePointAdaptivityStylePhoto // 圖片模式
UIWhitePointAdaptivityStyleVideo // 視頻模式
UIWhitePointAdaptivityStyleStandard // 游戲模式

如果你的項(xiàng)目是游戲類的,就選擇UIWhitePointAdaptivityStyleStandard這個(gè)模式,五種模式的顯示效果是從上往下遞減,也就是說(shuō)如果你的項(xiàng)目是圖片處理類的,你選擇的是閱讀模式,給選擇太好的效果會(huì)影響性能.

18.Xib文件的注意事項(xiàng)

使用Xcode8打開(kāi)xib文件后井辆,會(huì)出現(xiàn)下圖的提示关筒。


choose Device.png

大家選擇Choose Device即可。
之后大家會(huì)發(fā)現(xiàn)布局啊杯缺,frame亂了蒸播,只需要更新一下frame即可。如下圖


更新frame.png

注意:如果按上面的步驟操作后萍肆,在用Xcode7打開(kāi)Xib會(huì)報(bào)一下錯(cuò)誤
Xib報(bào)錯(cuò).png

解決辦法:需要?jiǎng)h除Xib里面

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

這句話袍榆,以及把< document >中的toolsVersion和< plugIn >中的version改成你正常的xib文件中的值

,不過(guò)不建議這么做塘揣,在Xcode8出來(lái)后包雀,希望大家都快速上手,全員更新亲铡。這就跟Xcode5到Xcode6一樣才写,有變動(dòng),但是還是要盡早學(xué)習(xí)奖蔓,盡快適應(yīng)喲赞草!

19.MJRefresh出現(xiàn)崩潰現(xiàn)象


MJRefresh.jpeg

解決辦法:類庫(kù)增加判斷

if (range.location != NSNotFound) {
            language = [language substringToIndex:range.location];
}   

20.iOS 10 ImagePickerController.cameraViewTransform問(wèn)題

很多人反映自定義相機(jī)出現(xiàn)了問(wèn)題,cameraViewTransform不能用了吆鹤,其實(shí)網(wǎng)上關(guān)于這個(gè)的資料不是很多厨疙,在這里提供參考辦法如下:

通過(guò)監(jiān)聽(tīng)AVCaptureSessionDidStartRunningNotification來(lái)解決

  //#import <AVFoundation/AVFoundation.h>
  //監(jiān)聽(tīng)
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];
  //監(jiān)聽(tīng)方法
  - (void)cameraNotification:(NSNotification *)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
          // 這里實(shí)現(xiàn)
          imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(50,  50);
      });
  }

使用AVFoundation框架
看來(lái)UIImagePickerController視乎不在適用于iOS 10了。所以說(shuō)可以選擇AVFoundation來(lái)解決這個(gè)問(wèn)題疑务。 下面是參考學(xué)習(xí): UIImagePickerController’s cameraViewTransform

21.Xcode8 警告報(bào)錯(cuò) “xx”is missing from working copy 問(wèn)題解決

問(wèn)題描述:
iOS開(kāi)發(fā)時(shí)沾凄,將Xcode升級(jí)到8后,工程運(yùn)行后出現(xiàn)了很多的報(bào)錯(cuò)警告知允,如下圖所示搭独,幾乎每個(gè)文件都有“xx”is missing from working copy的警告。某某文件 is missing from working copy字面意思來(lái)看是類似使用SVN時(shí)出現(xiàn)的刪除某個(gè)文件后廊镜,此文件仍出現(xiàn)在SVN緩存的問(wèn)題牙肝。但是奇怪的是這個(gè)工程我暫時(shí)還沒(méi)有使用SVN,所以個(gè)人推斷原因可能是文件路徑緩存的問(wèn)題嗤朴。(有哪位同仁知道具體原因請(qǐng)麻煩告知)


緩存路徑.png

問(wèn)題具體原因:
同問(wèn)題描述中所述配椭。

問(wèn)題解決:
1.打開(kāi)Mac終端;
2.cd 到出問(wèn)題的工程文件夾下 (to 新手朋友雹姊,就是在終端中輸入 cd 然后 輸入空格股缸,再把出問(wèn)題的那個(gè)文件拖拽到終端的窗口內(nèi),然后點(diǎn)擊回車吱雏。這其實(shí)就是一種獲取文件路徑的快速方法)
3.輸入 find . -type d -name .svn | xargs rm -rf (此命令的意思為刪除置頂文件下的所有SVN相關(guān))
4.重新打開(kāi)Xcode運(yùn)行敦姻,成功瘾境,不在報(bào)錯(cuò)“xx”is missing from working copy。
注意??:此處應(yīng)用的方法為解決svn緩存的方法镰惦,如果是因?yàn)镾VN緩存問(wèn)題出現(xiàn)的個(gè)別某個(gè)文件“xx”is missing from working copy報(bào)錯(cuò)迷守,請(qǐng)?jiān)诘?步中輸入 svn rm --force 丟失文件的名稱,而不是刪除所有svn相關(guān)旺入。

問(wèn)題相關(guān)其他問(wèn)法(為方便各種搜索問(wèn)題習(xí)慣的朋友快速找到此解決方法):
Xcode8升級(jí)后報(bào)錯(cuò)is missing from working copy兑凿;
iOS 報(bào)錯(cuò)is missing from working copy;
升級(jí)Xcode8后很多警告報(bào)錯(cuò)茵瘾;
iOS很多警告報(bào)錯(cuò)is missing from working copy礼华;
某某文件 is missing from working copy;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拗秘,一起剝皮案震驚了整個(gè)濱河市圣絮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雕旨,老刑警劉巖晨雳,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奸腺,居然都是意外死亡餐禁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門突照,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帮非,“玉大人,你說(shuō)我怎么就攤上這事讹蘑∧┛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵座慰,是天一觀的道長(zhǎng)陨舱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)版仔,這世上最難降的妖魔是什么游盲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蛮粮,結(jié)果婚禮上益缎,老公的妹妹穿的比我還像新娘。我一直安慰自己然想,他們只是感情好莺奔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著变泄,像睡著了一般令哟。 火紅的嫁衣襯著肌膚如雪恼琼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天屏富,我揣著相機(jī)與錄音晴竞,去河邊找鬼。 笑死役听,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的表窘。 我是一名探鬼主播典予,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼乐严!你這毒婦竟也來(lái)了瘤袖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昂验,失蹤者是張志新(化名)和其女友劉穎捂敌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體既琴,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡占婉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甫恩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆济。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖磺箕,靈堂內(nèi)的尸體忽然破棺而出奖慌,到底是詐尸還是另有隱情,我是刑警寧澤松靡,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布简僧,位于F島的核電站,受9級(jí)特大地震影響雕欺,放射性物質(zhì)發(fā)生泄漏岛马。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一屠列、第九天 我趴在偏房一處隱蔽的房頂上張望蛛枚。 院中可真熱鬧,春花似錦脸哀、人聲如沸蹦浦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盲镶。三九已至侥袜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溉贿,已是汗流浹背枫吧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇色,地道東北人九杂。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宣蠕,于是被迫代替她去往敵國(guó)和親例隆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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