天天看點

Xcode 10、iOS 12 、 swift 4.2

原文位址:點選打開連結

概觀

Xcode 10可在Mac App Store中使用,包括适用于iOS 12,watchOS 5,macOS 10.14和tvOS 12的SDK.Xcode 10支援iOS 8及更高版本,tvOS 9及更高版本以及watchOS 2及更高版本的裝置上調試。Xcode 10需要Mac運作macOS 10.13.6或更高版本。

一般

新功能

為快速檢視彈出視窗添加了導出選項,用于資料類型,例如NSData。(41370369)

現在,新建立的方案預設由Xcode項目的所有使用者共享。要建立個人方案,請取消選中“管理方案”表中的“共享”複選框。(40223696)

從鍵盤上選擇Schemes and Run Destinations。按“Ctrl + 0”打開Scheme彈出視窗,按“Ctrl + Shift + 0”打開Run Destination彈出視窗。彈出視窗後,鍵入足夠的字元以突出顯示相應的條目,使用箭頭鍵突出顯示它,然後按Return鍵選擇它。(8999215)

打開庫時按住Option鍵将使其在手動關閉之前保持可見,而不是在每次使用後自動關閉。(40880961)

庫内容已從“檢查器”區域的底部移動到疊加視窗,該視窗可以像Spotlight搜尋一樣移動和調整大小。它會在拖動項目時解除,但在拖動之前按住Option鍵會使庫保持打開狀态以進行額外的拖動。

可以通過新的工具欄按鈕,“視圖”>“庫”菜單或⇧⌘L鍵盤快捷鍵打開庫。内容動态比對活動編輯器,是以相同的UI提供對代碼片段,Interface Builder,SpriteKit或SceneKit項的通路。通過長按工具欄按鈕,“視圖”>“庫”菜單或⇧⌘M鍵盤快捷鍵,可以使用媒體庫。(37318979,39885726)

“項目編輯器”中的“功能”頁籤為macOS應用程式和應用程式擴充提供了新的“強化運作時”功能。啟用此功能後,您的應用會選擇使用macOS 10.14提供的新安全保護,并且您的應用需要經過公證。(39674498)

已知的問題

打開存儲在iCloud Drive中的Xcode項目和工作空間,或更改存儲在iCloud Drive中的打開的工作空間或項目的源控制分支,可能會導緻Xcode挂起。(34086758)

已解決的問題

Objective-C header(.h)檔案的New File模闆包含和宏。(22753521)NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END

修複了從“查找導航器”中進行選擇時不會突出顯示查找結果的文本範圍的問題。(37820835)

項目設定驗證了解通過引用其他建構設定而設定的建構設定值。(30549576)

“管理方案”表中未選中“顯示”的方案不再顯示在“産品”>“方案”子菜單中。(24579413)

輕按兩下導航現在預設為與單擊相同。可以在“首選項”的“導航”面闆中更改此設定。(37294346)

修複了在代碼段編輯器中按Tab鍵時發生崩潰的問題。(41296805)

Apple Clang編譯器

新功能

xcode的10增加了對C ++ 17個頭部的支援,和。(39271859)

已解決的問題

Clang現在可以正确處理可能影響代碼完成支援的無效Objective-C屬性。(33761186)

資産目錄

新功能

命名顔色現在可以象征性地引用系統顔色。(39196638)

支援ARKit 3D 資産。(38086640)ARReferenceObject

支援CarPlay資産。(35543584)

支援在macOS 10.14及更高版本上通過Light,Dark和High Contrast外觀改變圖像和顔色資源。(38735965)

資産目錄和視圖調試器的背景可以明确地設定為亮或暗,以便前景元素以足夠的對比度顯示。(39073926)

已解決的問題

預設情況下,watchOS PDF資産的資産目錄中不再啟用自動縮放,無論選擇如何。(35788204)

修複了打開屬于外部項目引用的資産目錄時可能發生的挂起問題。(14235592)

建構系統

請參閱Xcode 10的建構系統發行說明。

指令行工具

新功能

指令行工具包在macOS SDK中安裝macOS系統頭檔案。使用已安裝工具編譯的軟體将在Xcode中提供的macOS SDK中搜尋标題:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

或指令行工具:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

取決于使用哪個選擇xcode-select。

預設情況下,指令行工具将在SDK中搜尋系統标頭。但是,某些軟體可能無法針對SDK正确建構,并且需要在基礎系統中安裝macOS标頭/usr/include。如果您是此類軟體的維護者,我們建議您更新項目以使用SDK,或者送出錯誤報告以解決阻止您這樣做的問題。作為一種解決方法,提供了一個額外的包,它将把标頭安裝到基本系統。在将來的版本中,将不再提供此包。您可以在以下位置找到此套餐:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

要確定您使用的是指令行工具的預期版本,請運作xcode-select -s <Xcode的路徑>或安裝後。xcode select -s /Library/Developer/CommandLineTools

建立ML

新功能

MLDataTable,并支援數學運算,基于範圍的切片,多列子選擇,類型轉換和其他資料預處理方法。(38199042)MLDataColumnMLUntypedColumn

增強功能支援裁剪圖像的功能。(42077294)

已知的問題

在指令行工具中不支援建立ML。(40637430)

已解決的問題

關閉字段時,更改模型名稱可以正确儲存。(40437531)

調試

新功能

您可以使用Debug> View Debugging> Appearance菜單,調試欄中的Override Appearance菜單或觸摸條在運作時更改macOS應用程式的外觀。(39448599)

Xcode的視圖調試器添加了一個選項,可以選擇淺色和深色畫布背景顔色。(39159102)

NSVisualEffectView現在,屬性顯示在視圖調試器檢查器中。(18124270)

Disk Gauge Report中的files表包含已關閉的檔案,以便開發人員了解其大小。(39359014)

視圖調試器向視圖檢查器添加appearance和屬性。(38198002)effectiveAppearance

調試附件表允許開發人員打開Malloc Stack Logging(Live Allocations)。(35447219)

磁盤計量報告包括一個新表,顯示該程序的總讀寫大小。(39359147)

檢查器中顯示的命名顔色,而視圖調試現在訓示其名稱以及它們是否為系統顔色。(38193961)

金屬架構調試器。(33194071)

Metal Frame Debugger允許您調試Metal着色器。捕獲Metal工作負載,選擇繪制/分派調用并單擊調試欄上的新調試按鈕以開始調試着色器。

在Debug Navigator中選擇指令編碼器項将顯示一個圖表,顯示編碼器如何通過資源使用互相依賴。放大以擷取有關附件和編碼器的更多資訊。

每個繪制調用都有新的“幾何”項,您可以在其中檢視後變換頂點資料的三維可視化以及頂點輸入和輸出。

已解決的問題

Memory Gauge Report現在可以在所有平台上一緻地報告實體足迹。(20472364)

當存在大量靜态Swift子產品時,第一個Swift表達式評估的性能已得到優化。(40905971)

在嘗試在該模拟器上運作應用程式之前,Xcode等待模拟器可用。(39116182)

Debug> View Debugging菜單中的選項(如Show View Frames)現在按預期繼續目标應用程式。(26649378)

棄用通知

棄用

使用libstdc ++建構時不推薦使用Xcode 8,并且在針對iOS時Xcode 10不支援。C ++項目現在必須遷移到libc ++,并建議設定macOS 10.9或更高版本或iOS 7或更高版本的部署目标。除了更改C ++标準庫建構設定外,開發人員還應稽核寫死連結器标志和目标依賴項,以删除對libstdc ++的引用(包括-lstdc ++, - lddc ++。6.0.9,libstdc ++。6.0.9.tbd和libstdc ++。6.0。 9.dylib)。還需要針對libc ++重建項目依賴項,例如針對libstdc ++建構的靜态歸檔。(40885260)

Libgcc已經過時了。Xcode 10無法再建構具有macOS 10.4和10.5部署目标的應用程式。(42818150,38035243)

已删除對Subversion的支援。(33361671)

在儀器中不再支援僅适用于macOS和Simulator的基于dtrace的自定義檢測。基于os_signpost的新定制儀器包允許更大的靈活性和對資料表示的控制,并支援所有平台。(38812912)

Xcode 10是最後一個支援Swift 3的版本。通過打開項目并選擇Edit> Convert> To Current Swift Syntax …将項目從Swift 3代碼遷移到Swift 4.2文法…(43101816)

macOS 10.14 SDK不再包含對編譯32位應用程式的支援。如果開發人員需要為i386編譯,則需要Xcode 9.4或更早版本。(39858111)

裝置

已知的問題

運作iOS 12的裝置可能無法從Xcode的裝置視窗擷取請求的螢幕截圖。(42873539)

解決方法:在裝置上截取螢幕截圖。

使用以前版本的Xcode建構的Xcode 10運作WatchKit應用程式可能會出現安裝錯誤“WatchKit應用程式具有無效的存根可執行檔案”。(40567857)

解決方法:清理建構檔案夾并再次運作應用程式。

文檔檢視器

新功能

快速幫助使用單列布局,更好地利用它所呈現的可用空間。(39518057)

文檔檢視器和快速幫助中的代碼清單與使用者目前選擇的主題顔色相比對。(39435799)

儀器

新功能

在儀器10 - 線程狀态中使用系統跟蹤檢測時,有一種新的線程模式可供線程使用 - 它隻顯示線程狀态通道。之前的OS Fundamentals圖形樣式(系統調用,VM故障和線程狀态通道)仍然可用。(37727022)

已删除對儀器8之前的系統跟蹤儀器的支援。包含來自這些儀器的資料的某些跟蹤檔案将不再在儀器中打開。可以從developer.apple.com下載下傳Xcode 10之前的Xcode版本,以便檢視這些舊檔案。(38506479)

您現在可以建構和分發自己的自定義儀器。(37987666)

已知的問題

如果Xcode尚未完成準備開發的任何連接配接裝置,則儀器可能無法啟動。(43066159)

解決方法:等待Xcode的裝置設定階段完成,然後打開Instruments。

儀器可能無法在iOS模拟器中配置庫或架構單元測試。(39334812)

當停止包含路标(例如,或樂器)的錄制時,錄制按鈕可能不會長時間重新激活。(43361649)pointsOfInterestos_signpost(:dso:log:name:signpostID:)os_log(:dso:log::?

解決方法:在Mac上啟動控制台,選擇目标裝置,然後讓控制台繼續運作。控制台和目标之間的這種連接配接足以使儀器在錄制結束時不挂起。

已解決的問題

在iOS 11.3之前的iOS版本上進行性能分析時,大多數模闆都失敗了。(39759266)

Interface Builder

請參閱Xcode 10的Interface Builder發行說明。

本土化

新功能

Xcode 10支援新的Xcode Localization Catalog(.xcloc)導出和導入格式,用于本地化資料,可以包含XLIFF檔案和其他可本地化的内容,如圖像檔案。(28662326)

Xcode提供了為尚未使用它但支援多個本地化的項目啟用Base Internationalization。(13178091)

已解決的問題

在Export For Localization指令生成的XLIFF中,項目目錄外部檔案的内容将通過相對于項目目錄的路徑而不是絕對路徑引用。(38680116)

現在的Xcode提取下面的相應值的鍵的本地化:,,,。(40853982)Info.plistUTExportedTypeDeclarationsUTImportedTypeDeclarationsUIApplicationShortcutItemsINAlternativeAppNames

金屬

新功能

直接調用金屬編譯器時,必須-c在建構.metal檔案時使用該标志。不添加該選項将導緻生成的.air檔案被使用時出錯metallib。使用Xcode的建構系統調用Metal編譯器将自動添加标志。(40655432)

遊樂場

新功能

現在,Xcode中的遊樂場會逐漸執行代碼,當您鍵入Shift-Return或按下新代碼行旁邊的“運作”按鈕時,會編譯新的代碼行。這對于您不想重複運作的長任務特别有用,例如訓練機器學習模型或設定實時視圖的狀态,并允許您逐漸疊代您的想法而無需重新啟動操場。(34313149)

已知的問題

在遊樂場中切換到非預設工具鍊可能會導緻Xcode崩潰。(43659135)

解決方法:切換回預設工具鍊,然後打開操場。

已解決的問題

修複了操場無法運作的問題,顯示“無法查找符号”錯誤消息。(38505726)

修複了在帶有内聯結果的遊樂場中發生的崩潰。(38281379)

修複了建立新遊樂場頁面時有時會發生的崩潰,尤其是在遊樂場被鎖定時。(38281509)

修複了阻止iOS遊戲操場模闆正常工作的問題。(38828600)

現在,在遊樂場的輔助源檔案中支援代碼完成。(34363732)

重構

已解決的問題

修複了如果“Reduce motion”輔助功能選項打開,則Refactor> Rename的編輯字段無法獲得鍵盤焦點的問題。(40719848)

伺服器

已解決的問題

某些Xcode Server日志(例如觸發器日志)現在可在內建日志報告中看到。(40462372)

簽名和分發

新功能

支援通過指令行将應用程式上傳到Apple。如果提供的指令包含名為“destination”且值為“upload”的鍵,則該指令将執行上載。此外,必須在Xcode的“帳戶”首選項窗格中添加具有必要的App Store Connect角色和提供者成員身份的Apple ID帳戶。支援使用“app-store”,“developer-id”和“驗證”分發方法。(28555930)xcodebuild -exportArchiveExportOptions.plistxcodebuild

Xcode的管理器中的開發者ID分發選項現在支援将應用程式上傳到Apple進行公證。建構存檔後,可以在管理器中選擇此選項,方法是單擊“分發應用程式”按鈕,然後選擇“開發者ID”方法和“上載”目标。要上傳要公證的應用程式,您必須在Xcode的“帳戶”偏好設定面闆中輸入Apple ID,其中包含必要的App Store Connect角色和提供者成員資格。此外,上傳到公證的應用程式必須使用開發者ID證書進行簽名。如有必要,分發工作流可以建立此證書,但需要具有代理角色的Apple ID帳戶才能執行此操作。

上傳要公證的應用程式後,您可以通過選擇存檔并單擊“顯示狀态日志”按鈕,在“管理器”視窗中檢視應用程式的狀态。當您收到應用程式已經過公證的通知時,您可以通過選擇存檔并單擊“導出應用程式”按鈕從“管理器”視窗中将其導出。導出的應用程式包含裝訂的票證,可以分發。(36409604)

模拟器

新功能

模拟器的“編輯”菜單中的“複制”和“粘貼”項目不再用于與模拟器裝置的粘貼闆同步。“編輯”菜單現在具有用于處理這些操作的顯式菜單項。(38225290)

當使用iOS模拟器目标從xcodebuild或Xcode Server運作測試時,測試失敗将導緻嵌入測試操作結果包中的日志存檔的收集。(42172805)

已知的問題

如果使用鍵盤指令進行快進和快退,視訊輸出可能會停止在外部顯示器上播放。(41917187)

解決方法:從螢幕的右上角拉下控制台,然後再次隐藏它。

模拟裝置中的macOS粘貼闆和粘貼闆之間的同步有時會失敗。(36036706,38052949,41916640)

作業系統可能需要幾分鐘才能在模拟器中首次啟動。(40535421)

在macOS 10.14上,模拟器可能會在啟動時或在模拟器中首次與麥克風互動時提示通路麥克風(例如,使用Siri)。如果拒絕權限,模拟器音頻會話将無法使用任何類型的音頻輸入,無論模拟器中授予的權限如何。使用macOS系統偏好設定,安全性和隐私首選項窗格更改此設定。

您的應用程式仍必須在模拟器中被授予麥克風權限。macOS将其權限政策作為整體應用于所有模拟器運作時版本和模拟器内的所有應用程式。每個模拟器将權限政策應用于各個應用程式,就像裝置一樣 (40113388)

源控制

新功能

改進的源代碼管理身份驗證工作流程可提供更多資訊并提供更強大的控制權來執 (33726987)

與Bitbucket Cloud和Bitbucket Server源代碼控制內建。(31156776)

可以選擇從推闆上推送标簽。(40141815)

與GitLab.com和GitLab自托管源代碼控制內建。(37501192)

通過啟用源控件的項目,源編輯器顯示開發人員在裝訂線中所做的更改,并顯示尚未被拉入項目的其他開發人員所做的更改。(9794871)

使用GitHub,Bitbucket和GitLab的新建立,驗證和上傳工作流程,可以輕松管理SSH密鑰。(31798220)

拉動源控件更改時的Rebase支援。(8937399)

已知的問題

Xcode不支援ed25519加密的SSH密鑰對。(40912136)

解決方法:使用使用不同加密形式的SSH密鑰對。

已解決的問題

源代碼控制作者編輯器的子模式性能得到了改進,可以更快地加載和滾動。(40179372)

來源編輯

請參閱Xcode 10的源代碼編輯器發行說明。

靜态分析儀

新功能

使用Grand Central Dispatch時,靜态分析器會檢查常見的性能反模式,其中包括使用信号量等待回調:

  • (NSString *)requestCurrentTaskName {

    __block NSString *taskName = nil;

    dispatch_semaphore_t sema = dispatch_semaphore_create(0);

    NSXPCConnection *connection =

    [[NSXPCConnection alloc]

    initWithServiceName:@“MyConnection”];

    id remoteObjectProxy = connection.remoteObjectProxy;

    [remoteObjectProxy requestCurrentTaskName:^(NSString *task) {

    taskName = task;

    dispatch_semaphore_signal(sema);

    }];

    dispatch_semaphore_wait(sema,

    dispatch_time(DISPATCH_TIME_NOW, 100)

    );

    return taskName;

    }

    此類模式可能會降低性能并導緻應用程式挂起。預設情況下,該檢查目前處于禁用狀态,但可以使用建構設定“使用Grand Central Dispatch進行性能反模式”來啟用。(37312818)

靜态分析器效率更高,并且會報告大多數程式的其他問題。(36672459)

迅速

有關Xcode 10的資訊,請參閱Swift 4.2發行說明。

測試

新功能

現在可以将方案配置為僅在測試包中運作固定的測試子集,而不是自動包含添加到包中的新測試。這可以在方案編輯器的“測試”窗格中配置為每個測試包的選項。(35050431)

XCTest UI測試現在将已啟動目标應用程式的标準輸出和錯誤流捕獲到結果包中的檔案。(30929875)

Xcode 10支援并行運作測試,這減少了運作測試所需的時間。測試并行化支援macOS單元測試,以及iOS和tvOS模拟器上的單元和UI測試。要啟用并行化,請導航到方案編輯器(“産品”>“方案”>“編輯方案”),選擇“測試”操作,然後選擇“資訊”頁籤,然後在測試目标旁邊,單擊“選項”。最後,選擇“并行執行”(對于macOS測試)或“在Simulator上并行執行”(對于iOS和tvOS測試)。

通過在多個運作程式程序中在目标中分發測試類來進行測試并行化。使用測試日志檢視測試類的并行化方式。您将在日志中看到已啟動的每個運作程式程序的條目,并且在每個運作程式下方,您将看到它執行的類的清單。

在Simulator上并行測試時,每個運作程式程序在所選模拟器的單獨克隆上執行。對于名為“iPhone X”的模拟器,這些克隆将在模拟器中顯示為“iPhone X的克隆1”,“iPhone X的克隆2”等(35224733)

XCTest現在強制不要多次等待執行個體。這可以防止意外誤用,對于反轉期望尤其重要,因為它們會導緻等待完整的逾時持續時間,進而導緻測試執行速度變慢。(41641176)XCTestExpectation

期望可能被多次意外等待的一種方式是,如果它是使用建立的expectation(description:),則等待使用,然後被調用。XCTest現在會在發生這種情況時引發異常,列出應該調整的有問題的預期。wait(for:timeout:)waitForExpectations(timeout:handler:)

例如,以下代碼遇到此問題:

func testFoo() {

let expectation1 = self.expectation(description: “expectation1”)

doSomething { expectation1.fulfill() }

XCTWaiter().wait(for: [expectation1], timeout: 1)

let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }

// API Violation exception because it waits on both expectations,
// but expectation1 has already been waited on.
self.waitForExpectations(timeout: 1)
           

}

以下是兩種可能的修複方法:

func testFoo_fix1() {

let expectation1 = self.expectation(description: “expectation1”)

doSomething { expectation1.fulfill() }

XCTWaiter().wait(for: [expectation1], timeout: 1)

let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }

// Only wait on expectation2, which has not yet been waited on.
self.wait(for: [expectation2], timeout: 1)
           

}

func testFoo_fix2() {

// Create an XCTestExpectation directly, not using XCTestCase convenience API.

let expectation1 = XCTestExpectation(description: “expectation1”)

doSomething { expectation1.fulfill() }

XCTWaiter().wait(for: [expectation1], timeout: 1)

let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }

self.waitForExpectations(timeout: 1) // Waits only for expectation2.
           

}

現在可以将測試包配置為每次運作測試時以随機順序執行其内容。這可以在方案編輯器的“測試”窗格中啟用,作為每個測試包的選項。(11719679)

xcodebuild具有新的指令行選項來控制并行測試的行為。使用-parallel-testing-enabled覆寫每個目标設定為并行化是否已啟用該方案。如果要控制啟動的跑步者數量,請使用-parallel-testing-worker-count或-maximum-parallel-testing-workers。(39648990)

“首選項”中的“正常”窗格現在包含用于控制Xcode在并行運作測試時應嘗試的并行度的UI。“Mac測試并行化”滑塊可用于調整并行運作macOS單元測試時生成的運作器數量。“模拟器測試并行化”滑塊可用于調整在并行運作iOS或tvOS app / UI測試時生成的模拟器克隆的數量。将這些滑塊中的任何一個設定為“自動”(預設值)訓示Xcode選擇預設編号。請注意,在測試時xcodebuild,-parallel-testing-worker-count和-maximum-parallel-testing-workers指令行選項優先于這些值。(41779908)

XCTest已添加新API XCUIElement以捕獲UI的整個狀态,用于導出到外部系統或用于本地檢查。它包含一個表示UI和API快照的類型,用于将該快照導出到标準值類型(字元串和數字)的字典中。(35168151)

已解決的問題

現在,測試日志中會顯示可能導緻丢失或沒有覆寫資料的錯誤。如果您發現任何此類錯誤,請使用Apple Bug Reporter送出錯誤,并附上項目檔案夾的壓縮存檔。(39930570)DerivedData

當與内部和内部的内容互動時,Xcode不再在UI測試記錄期間崩潰。(33593609)WKWebViewSFSafariViewController

修複了導緻基線測量更改丢失的問題,以及%inf将在未使用點作為小數分隔符的區域設定的系統上編輯這些測量值時報告的未來測量值。(31813795)

在Xcode Server bot的目标配置選項中,“并行運作測試”選項已重命名為“同時在所選目标上測試”。此選項使標明的目标同時運作方案的測試。它不會導緻單個目标并行運作測試。要允許每個目标并行運作測試,請取消選中此複選框,并在方案中啟用并行測試或添加-parallel-testing-enabled YES為xcodebuild參數。(39985444)

xcodebuild當在測試導航器或源編輯器(Xcode)中單擊測試gem時,或者在使用-only-testing:(xcodebuild)時,Xcode 現在建構活動方案中的所有目标。以前,隻會建構相關的測試包目标及其依賴關系。Xcode xcodebuild現在還将禁止您運作其測試包不屬于活動(Xcode)或指定(xcodebuild)方案的測試或測試類。(38935442)

主題

發行說明

建構Xcode 10的系統發行說明

更新您的應用以使用新功能,并針對更改測試您的應用。

Xcode 10的Interface Builder發行說明

更新您的應用以使用新功能,并針對更改測試您的應用。

源代碼編輯器Xcode 10發行說明

更新程式設計工作流程以使用新功能,并根據更改測試工作流程。

Swift 4 .2 Xcode 10發行說明

更新您的代碼以使用新的語言功能并根據更改測試您的應用。

繼續閱讀