WWDC 2018 iOS 開發者日記
已發表: 2022-03-10美國夏天的傳統界限是陣亡將士紀念日和勞動節,但 iOS 開發人員通過 WWDC 和 iPhone 發布來標記夏天。 儘管本週紐約市的天氣涼爽多雨,但我仍處於夏天的心情中,並期待著夏天的更新和 WWDC 的承諾。
現在是 6 月 4 日早上,我正在回顧我在 WWDC 2017 上的筆記。去年,我寫道 ARKit 和 Core ML 是兩大亮點。 看到 Apple 專注於機器學習 (ML) 令人耳目一新,但在 2017 年剩下的時間裡並沒有太多跟進。ARKit 已經引起了一些興趣,但沒有殺手級應用程序(也許是 Pokemon Go,但在 ARKit 之前很流行) . 在 Core ML 發布後,Apple 並未將其添加到其初始的 Core ML 可下載模型庫中。
Apple 確實發布了 Turi Create,Lobe 上個月發布了一個新的有趣的 Core ML 模型製造商。 在 Apple/ML 領域,Swift 的創造者 Chris Lattner 正在對 Swift for TensorFlow 採取不同的方法。 但從外部看,Core ML 似乎主要有一個明顯的用途:圖像分類。 似乎沒有太多精力圍繞著探索截然不同的應用程序(儘管我們都知道 ML 是自動駕駛汽車和谷歌 Duplex 等令人驚嘆的演示的核心)。
Apple 使用 ML 的另一種方式是在 Siri 中,今年早些時候,我寫了一篇關於 SiriKit 的文章,並提到了它與 Alexa 和 Google 相比的感知和實際缺陷。 我探討的一個問題是 Siri 對預定義意圖的強調如何限制了它的範圍,但並沒有產生你可能從有限焦點中獲得的承諾的準確性。
去年推出的 HomePod 僅凸顯了 Siri 的困境,一項廣泛報導的客戶滿意度調查顯示,對 iPhone X 的滿意度為 98%,但對 Siri 的滿意度僅為 20%。
考慮到所有這些,我個人希望聽到 Apple 將在 AR、ML 和 Siri 方面做出一些重大改進。 具體來說,作為一名 iOS 開發人員,我希望看到更多的 Core ML 模型,不僅涵蓋圖像分類,還可以幫助製作模型。 對於 Siri,我希望看到更多的意圖,並且可能有一些跡象表明意圖將是一個全年都會添加的東西。 這是一個遠景,但對於 AR,下一步是設備。 但與此同時,我希望提高空間精度。
最後,我喜歡 Xcode Playgrounds 和 iPad Playground 書籍,但它們需要更快更穩定,所以我也希望能有一些東西。
在 WWDC 的早上,我發了一條推文:
這不是預測。 這只是我想在 2017 年使用的東西的清單,但發現它們動力不足或太難讓我開始使用,並希望 Apple 能做出一些改進。
我今天的計劃是現場觀看主題演講,然後觀看 Platforms State of the Union。 這些很好地概述了本週剩餘時間要關注的內容。
第一天結束:主題演講和平台國情咨文
WWDC 的第一天是主題演講,面向公眾消費,平台狀態聯盟是整個活動的概述,並為開發人員提供了一些細節,以便他們可以選擇參加哪些會議。
值得注意的非 iOS 開發者公告摘要
WWDC 並不完全是關於 iOS 開發的,所以這裡有一個在其他平台上發生的或者不是非常關注開發人員的事情的快速列表。
- 為了擺脫它,根本沒有硬件公告。 Mac Pro 上沒有預覽和更新。 我們將不得不等待秋季的 iPhone 和後續活動。
- iOS 12 有一個新的 Shortcuts 應用程序,這似乎是他們收購 Workflow 的結果。 這是一種通過拖放“編寫”一系列步驟的方法。 您還可以將快捷方式分配給 Siri 關鍵字,我將在下面介紹。
- iOS 會自動將來自同一應用程序的通知分組,並讓您將它們作為一個組進行操作。
- Animojis 現在可以模仿你伸出你的舌頭,而新的Memojis 是高度可配置的人臉,你可以自定義它們看起來像你自己。
- FaceTime 支持最多 32 人的群組視頻聊天。
- 有一個新的Screen Time 應用程序可以為您提供有關手機和應用程序使用情況的報告(幫助您控制自己並減少分心)。 它也是新的家長控制的基礎。
- Apple TV 有一個小更新:支持杜比全景聲和來自國際空間站的新屏幕保護程序。
- 手錶有一個競爭模式,可以挑戰其他人進行與鍛煉相關的挑戰。 它還會嘗試自動檢測鍛煉的開始和結束,以防您忘記開始或停止鍛煉,現在它有徒步旅行和瑜伽鍛煉。
- 手錶還具有新的對講機模式,您可以為受信任的聯繫人啟用該模式。
- Watch 上有更多原生的音頻 SDK, Apple 的 Podcasts 應用程序現在可用。 我預計第三方播客應用程序也將利用這些新的 SDK。
- Mac 獲得了活動的重點(希望這表明重新受到關注)。 它將被稱為macOS Mojave,並具有暗模式。
- Mac App Store 有重大更新,但值得注意的是,它現在獲得了與 iOS App Store 去年相同的視覺和內容處理。 沙盒有足夠多的變化, Panic 決定將 Transit 移回那裡。
- Finder 中的快速查看現在可以對文件執行一些簡單的操作(例如旋轉圖像),並且可以通過 Automator 進行自定義。
- Mojave 將是支持 32 位應用程序和框架的 macOS 的最後一個版本,這意味著 Quick Time Framework 將消失。 它似乎已被操作系統本身的一些視頻捕獲功能所取代。
- Apple 宣布他們正在內部使用UIKit 的端口來製作 Mac 應用程序,並展示了 Stocks、News、Home 和 Voice Memos 的端口。 新框架將於 2019 年發布。
我最興奮的 iOS 開發者公告
iOS 開發者也得到了一些好消息。 他們談到了我希望看到改進的四個主要領域:
- SiriKit 現在有自定義意圖,這打開了很多可能性。
- Create ML 是一種使用 Xcode Playgrounds 通過遷移學習訓練模型的新方法,它允許您使用自己的訓練數據來擴充現有模型。
- Xcode Playground 現在允許您將代碼添加到頁面底部並在不重新啟動的情況下運行它。 在 9 月份發布真正的版本之前,很難知道 Playgrounds 是否會更加穩定,但這將使嘗試代碼的速度更快。
- ARKit 2 與一種名為 USDZ 的新增強現實文件格式一起發布,該文件格式是開放的,由 Adobe 和 Pixar 開發。 Adobe 已經宣布了一些工具支持。 它將允許用戶和開發人員存儲和共享 AR 資產和體驗。 此外,ARKit 2 允許多個設備處於同一個 AR 環境中,並支持 3D 對象檢測。
我們沒有得到 AR 設備,但感覺我們很快就會得到一台。 它需要來自 Apple(而不是第三方),因為運行 ARKit 需要 iOS 設備。
設置您的機器
您需要的一切現在都可以在開發人員門戶中獲得。 要使用文章中的代碼,您需要 Xcode 10 Beta。 我不建議您使用 iOS 12 Beta,但如果您真的想要,請轉到您設備上的門戶並下載 iOS 12 Beta 配置文件。
你需要一個帶有測試版的設備的唯一主要的事情是 ARKit 2。其他一切都應該在 Xcode 10 的模擬器中運行得足夠好。 從第一個測試版開始,模擬器中的 Siri Shortcut 支持是有限的,但足以認為這將在未來的版本中得到修復。
第 2 天結束:使用 Siri 自定義 Intents
去年,我寫了你需要如何適應 Apple 的預定義意圖,以便在你的應用程序中使用 SiriKit。 該機制於 2016 年引入,並在 2017 年甚至在 WWDC 活動之間添加。 但很明顯,亞馬遜的自定義意圖方法在將語音控制引入更多樣化的應用程序方面更勝一籌,蘋果上週將這一點添加到了 SiriKit 中。
需要明確的是,這是第一個實現,所以它還沒有 Alexa Skills 那樣廣泛,但它為 Siri 開闢了相當多的可能性。 正如我在上一篇文章中所討論的,自定義意圖的主要限制是開發人員需要完成所有語言翻譯。 SiriKit 通過要求用戶提供他們想要使用的短語來解決這個問題,但是自定義意圖仍然需要比預定義意圖更多的翻譯。
而且它們建立在與預定義意圖相同的基礎上,因此我所涵蓋的所有內容仍然適用。 實際上,我將向您展示如何將新的自定義意圖添加到 List-o-Mat,這是我為原始 SiriKit 文章編寫的應用程序。
(免費)如果您已經支持 Spotlight,則支持 Siri 快捷方式
如果您使用NSUserActivity
在您的應用程序中指示用戶可以通過切換或搜索啟動的內容,那麼讓 Siri 也可以使用它們是微不足道的。
您需要做的就是將以下行添加到您的活動對像中:
activity.isEligibleForPrediction = true
這僅適用於啟用 Spotlight 的活動(其中isEligibleForSearch
為true
)。
現在,當用戶執行此活動時,它被視為捐贈用於 Siri。 Siri 會推薦非常常用的活動,或者用戶可以在快捷方式應用程序中找到它們。 在任何一種情況下,用戶都可以分配他們自己的口語短語來啟動它。 您對通過 Spotlight 啟動活動的支持足以支持它通過快捷方式啟動。
在 List-o-Mat 中,我們可以通過構造活動對象並將它們分配給ListViewController
來使 Spotlight 和 Siri 可以使用各個列表。 用戶可以通過 Siri 用自己的短語打開它們。
在我們的例子中它是多餘的,因為我們有一個打開列表的預定義意圖,但是大多數應用程序沒有那麼幸運,現在有了這個簡單的機制。 因此,如果您的應用有 Siri 的預定義意圖不支持的活動(例如播放播客),您可以讓它們符合預測條件,而不必擔心自定義意圖。
配置 SiriKit 以使用自定義 Intent
如果您確實需要使用自定義意圖,則需要將 SiriKit 添加到您的應用程序中,這需要一些配置。
為自定義意圖配置 SiriKit 的所有步驟都與預定義意圖相同,這在我的 SiriKit 關於 Smashing 的文章中有詳細介紹。 總結一下:
- 您正在添加一個擴展程序,因此您需要一個新的 App ID,並且配置文件和您的應用程序的權利需要添加了 Siri。
- 您可能需要一個 App Group(這是擴展程序和應用程序通信的方式)。
- 你的項目中需要一個 Intents 擴展
- 您需要更新 Siri 特定的.plist密鑰和項目權利。
所有細節都可以在我的 SiriKit 文章中找到,所以我將只介紹在 List-o-Mat 中支持自定義意圖所需的內容。
將復制列表命令添加到 List-o-Mat
自定義意圖僅在沒有預定義意圖的情況下使用,Siri 實際上在其列表和備註 Siri 域中提供了大量列表和任務支持。
但是,使用列表的一種方法是作為重複例程或過程的模板。 為此,我們需要復制現有列表並取消選中其所有項目。 內置列表意圖不支持此操作。
首先,我們需要添加一種手動執行此操作的方法。 這是 List-o-Mat 中這種新行為的演示:
為了讓 Siri 可以調用此行為,我們將“捐贈意圖”,這意味著每次您執行此操作時我們都會告訴 iOS。 然後,它最終會在早上得知,您喜歡複製此列表並將其作為快捷方式提供。 用戶還可以查找捐贈的意圖並手動分配短語。
創建自定義意圖
下一步是在 Xcode 中創建自定義意圖。 有一個新的文件模板,所以:
- 選擇 File → New File 並選擇“SiriKit Intent Definition File”。
- 將文件命名為ListOMatCustomIntents.intentdefinition ,然後選擇將文件放在 App 和 Intent Extension 目標中。 這將自動為實現意圖協議但實現您的自定義行為的兩個目標生成類。
- 打開定義文件。
- 使用左下角的 + 按鈕添加一個意圖並將其命名為“CopyList”。
- 將類別設置為“創建”並填寫標題和副標題以描述意圖:
- 添加一個名為“list”的字符串參數。
- 使用列表參數添加快捷方式類型,並為其命名為“複製列表”。
如果你查看 Intent plist,你會看到這個 Intent 已經為你配置好了:
捐贈意圖
當我們在我們的應用程序中進行我們希望 Siri 知道的用戶交互時,我們會將其捐贈給 Siri。 Siri 會跟踪上下文信息,例如時間、星期幾,甚至位置,如果它注意到某種模式,它會為用戶提供快捷方式。
當我們點擊 Copy 菜單時,添加以下代碼:
@available(iOS 12, *) func donateCopyListInteraction(listName: String) { let copyListInteraction = CopyListIntent() copyListInteraction.list = listName copyListInteraction.suggestedInvocationPhrase = "Copy \(listName)" let interaction = INInteraction(intent: copyListInteraction, response: nil) interaction.donate { [weak self] (error) in self?.show(error: error) } }
這只是創建了一個自動生成的CopyListIntent
類的對象並將其捐贈給 Siri。 通常,iOS 會收集這些信息並等待適當的時間顯示它,但對於開發,您可以打開“設置”應用,進入“開發者”部分,然後打開 Siri 快捷方式調試設置。
注意:在撰寫本文時,在第一個 beta 版本中,此調試設置僅適用於設備,不適用於模擬器。 由於設置在那裡,我希望它可以在進一步的測試版中開始工作。
當您執行此操作時,您捐贈的快捷方式會顯示在 Spotlight 的 Siri 建議中。
點擊它會調用你的 Intent 擴展,因為我們允許後台執行。 接下來我們將添加對此的支持。
處理自定義意圖
我們已經有了一個 Intents 擴展,並且由於自定義意圖定義文件已經添加到該文件中,因此它還具有生成的意圖類。 我們需要做的就是添加一個處理程序。
第一步是向擴展添加一個名為CopyListIntentHandler
的新類。 這是它的代碼:
import Intents @available(iOS 12, *) class CopyListIntentHandler: ListOMatIntentsHandler, CopyListIntentHandling { func handle(intent: CopyListIntent, completion: @escaping (CopyListIntentResponse) -> Void) { // Find the list var lists = loadLists() guard let listName = intent.list?.lowercased(), let listIndex = lists.index(where: { $0.name.lowercased() == listName}) else { completion(CopyListIntentResponse(code: .failure, userActivity: nil)) return } // Copy the list to the top, and respond with success copyList(from: &lists, atIndex: listIndex, toIndex: 0) save(lists: lists) let response = CopyListIntentResponse(code: .success, userActivity: nil) completion(response) } }
自定義意圖只有一個確認和處理階段(不支持自定義參數解析)。 由於默認的confirm()
返回成功,我們只需實現handle()
,它必須查找列表,複製它,並讓 Siri 知道它是否成功。
您還需要通過添加以下代碼從已註冊的意圖處理程序分派到此類:
if #available(iOS 12, *) { if intent is CopyListIntent { return CopyListIntentHandler() } }
現在你可以點擊 Siri 的建議,它會彈出這個:
點擊創建按鈕將復制列表。 由於我們在意圖定義文件中選擇的類別,按鈕顯示為“創建”。
唷,那是很多。 這些新的 Siri 快捷方式是 iOS 12 中的主要功能,它有一個新的大型開發人員界面可供探索。 此外,由於我碰巧有一個很好的(並且記錄在案的)Siri 示例可以使用,因此本週嘗試向其中添加新功能是合理的。
您可以在 GitHub 中看到更新的 List-o-Mat。 在 Xcode 10 和 iOS 12 發布之前,它都在自己的分支中。
接下來的幾天,我將主要關注 Apple 示例代碼或製作更小的項目。
第 3 天結束:Xcode 遊樂場
前一整天都在 Xcode 10 beta 中度過,它沒有崩潰一次,似乎已經準備好進行開發了。 所以現在我想探索新的 Playgrounds 功能。
我對遊樂場的主要要求是讓它們更穩定、更快。 為了讓它們更快,Apple 添加了一個重要功能——REPL 模式。
在 Xcode 10 之前,當您在一個已自動運行(這是默認設置)的 Playground 中時,每一行代碼實際上都會重新構建整個文件並從頭開始運行它。 如果你建立了任何狀態,它就會丟失。 但是,真正的問題是這對於迭代開發來說太慢了。 當我使用 Playgrounds 時,我將它們設置為手動運行,但即使這樣也很慢。
在 Xcode 10 中,手動運行更為規範,但運行後,您可以在頁面底部添加更多行並繼續執行。 這意味著您可以迭代地探索數據和繪製視圖,而無需不斷地重新構建和從頭開始。
首先,我使用 Single View 模板創建了一個 iOS 操場(文件 → 新建 → 操場)。
通過下拉播放按鈕下方的菜單(左下角的三角形)打開手動運行。 這會在左側放置一個垂直條,顯示播放頭的當前位置(有點像斷點)。
您可以點擊任何一行,然後點擊其左側的播放按鈕。 這將使 Playground 運行到這一點。 然後,您可以通過在 Playground 中點擊下方的線條來走得更遠。 至關重要的是,您可以在底部添加更多行並在每行之後鍵入Shift + Enter以將播放頭移動到該點。
這是我在無需重新啟動 Playground 的情況下更改視圖標籤的 GIF。 在我鍵入的每一行之後,我按Shift + Enter 。
Playgrounds 現在還支持您的類型的自定義呈現,Apple 正在大力推動每個 Swift 框架包含一個 Playground 來記錄它。
第 4 天結束:創建 ML
去年,Apple 在為其設備編寫機器學習編程方面取得了巨大飛躍。 Xcode 中有一種新的 ML 模型文件格式和對它的直接支持。
潛力在於這些模型文件將有一個大型庫,將有創建它們的工具,並且更多的應用程序開發人員將能夠將 ML 合併到他們的項目中,而無需知道如何創建模型。
這還沒有完全實現。 WWDC 之後,Apple 沒有添加到模型存儲庫中,儘管有第三方存儲庫,但它們大多具有圖像分類演示的變體模型。 ML 不僅僅用於圖像分類,但沒有出現廣泛的示例選擇。
因此,很明顯,任何真正的應用程序都需要其開發人員來訓練新模型。 蘋果為此發布了 Turi Create,但它遠非簡單。
在 WWDC 2018 上,Apple 對 Core ML 做了幾件事:
- 他們擴展了 Core ML 的自然語言處理 (NLP) 部分,為我們提供了一個新的主要示例領域。
- 他們在 Core ML 中添加了遷移學習的概念,允許您將訓練數據添加到現有模型中。 這意味著您可以從庫中獲取模型,並將它們自定義為您自己的數據(例如,讓它們識別您提供的圖像中的新對象)。
- 他們發布了 Create ML,它在 Xcode Playgrounds 內部實現,允許您拖放數據以進行訓練並生成模型擴展(使用遷移學習)。
這是使機器學習民主化的又一個很好的步驟。 這裡沒有太多代碼可以寫。 要擴展圖像分類器,您只需要收集和標記圖像。 擁有它們後,您只需將它們拖入 Create ML。 您可以在此 Create ML WWDC 視頻中看到演示。
本週結束:玩新的 AR 演示
ARKit 是去年的另一個重要補充,AR 設備的到來似乎更加明顯。
我去年文章中的 ARKit 代碼仍然是入門的好方法。 大多數新功能都是為了讓 AR 更準確、更快。
在那之後,如果你已經安裝了一個測試版,你肯定會想下載新的 SwiftShot ARKit 演示應用程序。 這個應用程序利用了 ARKit 的新功能,尤其是多人遊戲體驗。 同一網絡和同一地點的兩台或多台設備可以相互通信並看到相同的 AR 體驗。
當然,要玩這個,你需要兩台或更多你願意安裝 iOS 12 測試版的設備。 我正在等待公開測試版執行此操作,因為我只有一個測試版安全設備。
更容易使用的 AR 應用是新的 Measure 應用,它允許您測量在 AR 相機視圖中看到的真實物體的長度。 已經有第三方應用程序可以做到這一點,但 Apple 的應用程序經過優化並預裝了 iOS 12。
WWDC 視頻和示例代碼的鏈接
因此,我期待今年夏天在 Xcode 10 和 iOS 12 上做更多的事情,同時我們等待新手機和蘋果可能在夏末發布的任何設備。 與此同時,iOS 開發人員可以享受陽光,使用我們的新測試版 Watch OS 跟踪我們的徒步旅行,並在有機會時觀看這些 WWDC 視頻。
您可以從 Apple 開發者門戶流式傳輸 WWDC 2018 視頻。 還有這個用於觀看 WWDC 視頻的非官方 Mac 應用程序。
以下是本文中引用的視頻:
- WWDC 2018 主題演講
- WWDC 2018 平台國情咨文
- Siri 快捷方式簡介
- 在 Xcode 中充分利用 Playgrounds
- 介紹 Create ML,如果您想要更高級的東西,Turi Create 指南
要開始使用 Xcode 10 和 iOS 12:
- 下載測試版(在設備上訪問以獲取測試版配置文件)
- 帶有 Siri Shortcut 更新的 List-o-Mat
- Swift Shot(多人 ARKit 2 遊戲)