你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Xcode 8 和iOS 10 新特性

Xcode 8 和iOS 10 新特性

編輯:IOS開發綜合

Interface Builder

在Xcode8中,蘋果推出了更加強大的可視化編輯工具以及預覽功能,可以在不運行App的情況下,預覽當前XIB或SB在不同屏幕尺寸下的顯示。選擇一個XIB文件進去,點擊下面紅框的位置,會出現從3.5寸-5.5存一系列屏幕的選項。 直接點擊不同屏幕尺寸,以及橫豎屏,切換不同的屏幕顯示。在iPad上還可以選擇是否分屏。

Interface Builder

新創建的XIB控件尺寸,不再是之前600*600的方塊了,而是默認是6s的長方形XIB文件

Swift 2 和 3

在Xcode 8之前,Xcode的每一個版本都是內置明確版本的swift編程語言。在Xcode 8中就不同了。因為Swift 3有了大量的改變,而且大多數改變是具有破壞性的。
使用Xcode 8創建默認使用的Swift 3。幸運的是Xcode 8中的building setting選項可以讓開發者明確表明繼續使用Swift 2和Swift 2.3。
Swift變化
如果不想立刻就遷移到Swift 3,可以在Builder Setting中進行設置,選擇Use Legacy Swift Language Version設置為YES,就可以繼續使用就版本的Swift2.3。

Xcode插件

升級Xcode8之後會發現,Xcode8中所有第三方插件都失效了,並且連之前菜單欄的插件選項也不存在了。在之前很多iOS開發者,都是通過Alcatraz來管理插件的,現在Alcatraz也是不可用的。但是Xcode8自身也對編譯器進行了升級,將一些比較好的插件功能加入到Xcode中,例如單行高亮顯示等。
在Xcode8中支持了開發插件工程,並且為我們提供了一個插件模板,開發的插件可以上傳到App Store下載。蘋果這麼做有一個原因在於,之前Xcode和插件是運行在同一個進程的,所以插件的崩潰也會導致Xcode崩潰。蘋果現在將插件作為一個單獨的應用程序,分開進程運行,不會對Xcode帶來其他影響。
然後選擇 Editor -> add a new Target。選擇 Xcode Source Editor Extension 並創建,然後你會得到一個詢問是否切換到擴展 scheme 的提示,選擇切換。

Xcode 插件

Runtime Issues

在iOS開發過程中,因為語法錯誤或者缺少頭文件,編譯器可以發現並報黃色或紅色警告。但一些代碼邏輯導致的錯誤(循環引用),編譯器並沒有辦法找到。

#import "ViewController.h"

typedef void (^completionBlock)();

@interface ViewController ()

@property (nonatomic, weak) completionBlock completionblock;

@property (nonatomic, copy) NSString *name;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // 1.Buildtime提示ARC Retain Cycle錯誤
    self.completionblock = ^{
      self.name = @"jason";
    };

    //2.Runtime Issues提示內存洩漏
    NSMutableArray *arr1 = [NSMutableArray array];
    NSMutableArray *arr2 = [NSMutableArray array];

    [arr1 addObject:arr2];
    [arr2 addObject:arr1];
}

通過Xcode8提供的Runtime Issues新特性,查找到運行過程中出現的問題,並通過Graph的方式將問題可視化的展現給開發者。
Runtime Issues新特性

內存調試–Debug Memory Graph

Xcode 8用相當強大的內存調試器來跟蹤內存的洩漏和循環。點擊如下圖所示紅色方框的圖標,然後在左邊區域選擇一個對象,查看與其相關的內存關系。
Debug Memory Graph新特性

Debug MemZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnkgR3JhcGi6zVJ1bnRpbWUgSXNzdWVzv8nS1MXkus/KudPDo6zNqLn9RGVidWcgTWVtb3J5IEdyYXBot9bO9sTatOa52M+1zeqzybrzo6y147v3UnVudGltZSBJc3N1ZXO/ydLUv7S1vdLRvq23os/WtcTE2rTmzsrM4qGjPC9wPg0KPGgyIGlkPQ=="代碼簽名">代碼簽名

在Xcode8之前,都需要自己設置證書和描述文件。如果設置出現錯誤的情況下,還可以通過點擊Fix issue來修復這個錯誤。但這有個問題就在於,Fix issue選項並不是那麼好用,有的時候設置是正確的這裡也提示需要Fix issue。

在Xcode8中可以通過Automatically manage signing選項,讓蘋果為我們管理證書和配置文件,設置也都是由蘋果來完成的。在Xcode8中新建項目,這個選項默認是被勾選的。打勾以後,Xcode為你管理certificates, provisioning profiles和 application identifiers。
代碼簽名

編譯錯誤

升級Xcode之後,Xcode8對之前的一些修飾符和語句不兼容,會導致一些編譯錯誤。

1.一些泛型相關的修飾符,nullable之類的有的會報錯。 2.CAAnimation及其子類,設置代理屬性後,必須在@interface()遵守代理,否則報錯,等等。

控件錯位或者不顯示問題

在使用view.frame之前需要調用如下的語句:

[self.view layoutIfNedded]

來更新frame值,不然frame的寬和高都是1000

Info.plist增加權限字段

Xcode8構建的app,在使用相冊、相機等權限時會崩潰。錯誤信息:

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.

官方文檔解釋:

Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses the user’s photo library, must statically declare the intent to do so. Include the NSPhotoLibraryUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s photo library without a corresponding purpose string, your app exits.

必須在Info.plist文件中增加NSPhotoLibraryUsageDescription鍵,並且填入合適的描述文本

下面是一些常用的字段,如果有缺少的麻煩各位評論區補充一下。
權限字段

UITableView、UICollectionView生命周期適配

這章WWDC介紹了UITableView和UICollectionView的生命周期在iOS10中發生了改變。

在iOS9及之前,一個UICollectionViewCell被重用的過程是這樣的:

一個cell即將出現的屏幕上 prepareForReuse cellForItemAtIndexPath willDisplayCell …… 一個cell完全離開屏幕 didEndDisplayCell 進入reuse queue

但在iOS10中,一個UICollectionViewCell被重用的過程變成了這樣:

一個cell還沒出現在屏幕上 prepareForReuse cellForItemAtIndexPath 一個cell即將出現的屏幕上 …… 一個cell完全離開屏幕 didEndDisplayCell 一段時間後再進入reuse queue

所以,iOS10後,cellForItemAtIndexPath被調用時,並不表示這個cell即將要出現在了屏幕上。還是得老老實實使用willDisplayCell和didEndDisplayCell方法。

系統log

升級Xcode8之後,在調試和運行過程中,發現控制台打印了很多不認識的log,這些log是系統打印的,和開發者沒關系。但是這麼多log看著比較亂,怎麼屏蔽掉呢?

com.apple.siri, category: Intents, enable_level: 1, persist_level: 1, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

在Product -> Scheme -> Edit Scheme -> Run -> Arguments中或者使用快捷鍵? + >,添加OS_ACTIVITY_MODE字段,並設置為Disable即可
消除系統log

推送通知

蘋果的推送在之前iOS8和iOS9的時候就發生過大的更新,推送功能越來越強大。在iOS10之後蘋果推出了UserNotifications框架( 具體可以看瞄神的博客UserNotifications框架 ),可以通過這個框架更好的控制推送通知,可以更新、修改鎖屏頁面的推送消息,可以添加圖片、視頻等功能。
在Xcode8之後,如果需要使用Push Notifications的功能,需要勾選Capabilities -> Push Notifications為YES,否則進行遠程推送就會有問題
推送通知

其他更新

1.Xcode 8不允許開發人員安裝插件,Xcode 8中集成了一些常用的插件。

1.1 在Xcode 8中將光標放在方法上面,通過option + command + / 生成文檔注解 1.2 被編輯的行高亮顯示 1.3 集成KSImageNamed功能

2.Xcode新版字體,SF Mono Regular字體
3.最新版的API文檔樣式

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved