開發者所需要知道的 iOS 11 SDK 新特性
來自:OneV s Den
作者:王巍 (@onevcat)
年紀大了過了能熬夜看 WWDC 的時代了,但是還是在小小寶的哭鬧和媽媽大人換尿布的催促中起了個大早。於是算趁著「熱乎」把 WWDC 2017 的 Keynote 看完了。和往年差不多,雖然 WWDC 是一個開發者會議,但是 Keynote 並不是專門針對我們開發者的,它還承擔了公司狀況說明,新品發布等功能。作為技術人員,可能接下來的 session 會更有意義。要用一句話來評價今年 Keynote 所展現出來的內容的話,就是小步革新。大的技術方面可以說只有 ARKit 可堪研究,但是我們還是看到了類似跨 app 拖拽,新的 Files 應用這樣進一步突破 iOS 原有桎梏的更新 (iMessage 轉賬什麼的就不提了,我大天朝威武,移動支付領域領先世界至少三年)。iOS 11,特別是配合新的硬體,相信會給用戶帶來不錯的體驗。
作為 iOS 開發者,和往年一樣,我整理了一下在可能需要關注的地方。
新增框架
新加入 SDK 的大的框架有兩個,分別是負責簡化和集成機器學習的 Core ML 和用來創建增強現實 (AR) 應用的 ARKit。
Core ML
自從 AlphaGo 出現以來,深度學習毫無疑問成了行業熱點。而 Google 也在去年就轉變 Mobile-first 到 AI-first 的戰略。可以說一線的互聯網企業幾乎都在押寶 AI,目前看來機器學習,特別是深度學習是最有希望的一條道路。
如果你不是很熟悉機器學習的話,我想我可以在這裡「僭越」地做一些簡介。你可以先把機器學習的模型看作一個黑盒函數,你給定一些輸入 (可能是一段文字,或者一張圖片),這個函數會給出特定的輸出 (比如這段文字中的人名地名,或者圖片中出現的商店名牌等)。一開始這個模型可能非常粗糙,完全不能給出正確的結果,但是你可以使用大量已有的數據和正確的結果,來對模型進行訓練,甚至改進。在所使用的模型足夠優化,以及訓練量足夠大的情況下,這個黑盒模型將不僅對訓練數據有較高的準確率,也往往能對未知的實際輸入給出正確的返回。這樣的模型就是一個訓練好的可以實際使用的模型。
對機器學習模型的訓練是一項很重的工作,Core ML 所扮演的角色更多的是將已經訓練好的模型轉換為 iOS 可以理解的形式,並且將新的數據「餵給」模型,獲取輸出。抽象問題和創建模型雖然並不難,但是對模型的改進和訓練可以說是值得研究一輩子的事情,這篇文章的讀者可能也不太會對此感冒。好在 Apple 提供了一系列的工具用來將各類機器學習模型轉換為 Core ML 可以理解的形式。籍此,你就可以輕鬆地在你的 iOS app 里使用前人訓練出的模型。這在以前可能會需要你自己去尋找模型,然後寫一些 C++ 的代碼來跨平台調用,而且難以利用 iOS 設備的 GPU 性能和 Metal (除非你自己寫一些 shader 來進行矩陣運算)。Core ML 將使用模型的門檻降低了很多。
Core ML 在背後驅動了 iOS 的視覺識別的 Vision 框架和 Foundation 中的語義分析相關 API。普通開發者可以從這些高層的 API 中直接獲益,比如人臉圖片或者文字識別等。這部分內容在以前版本的 SDK 中也存在,不過在 iOS 11 SDK 中它們被集中到了新的框架中,並將一些更具體和底層的控制開放出來。比如你可以使用 Vision 中的高層介面,但是同時指定底層所使用的模型。這給 iOS 的計算機視覺帶來了新的可能。
Google 或者 Samsung 在 Android AI 上的努力,大多是在自帶的應用中集成服務。相比起來,Apple 基於對自己生態和硬體的控制,將更多的選擇權交給了第三方開發者。
ARKit
Keynote 上的 AR 的演示可以說是唯一的亮點了。iOS SDK 11 中 Apple 給開發者,特別是 AR 相關的開發者帶來了一個很棒的禮物,那就是 ARKit。AR 可以說並非什麼新技術,像是 Pokémon Go 這樣的遊戲也驗證了 AR 在遊戲上的潛力。不過除了 IP 和新鮮感之外,個人認為 Pokémon Go 並沒有資格代表 AR 技術的潛力。現場的演示像我們展示了一種可能,粗略看來,ARKit 利用單鏡頭和陀螺儀,在對平面的識別和虛擬物體的穩定上做得相當出色。幾乎可以肯定,那麼不做最早,只做最好的 Apple 似乎在這一刻回到了舞台上
ARKit 極大降低了普通開發者玩 AR 的門檻,也是 Apple 現階段用來抗衡 VR 的選項。可以暢想一下更多類似 Pokémon Go 的 AR 遊戲 (結合實境的虛擬寵物什麼的大概是最容易想到的) 能在 ARKit 和 SceneKit 的幫助下面世,甚至在 iPad Pro 現有技能上做像是 AR 電影這樣能全方位展示的多媒體可能也不再是單純的夢想。
而與之相應的,是一套並不很複雜的 API。涉及的 View 幾乎是作為 SceneKit 的延伸,再加上在真實世界的定為也已經由系統幫助處理,開發者需要做的大抵就是將虛擬物體放在屏幕的合適位置,並讓物體之間互動。而利用 Core ML 來對相機內的實際物體進行識別和交互,可以說也讓各類特效的相機或者攝影 app 充滿了想像空間。
Xcode
編輯器和編譯器
速度就是生命,而開發者的生命都浪費在了等待編譯上。Swift 自問世以來就備受好評,但是緩慢的編譯速度,時有時無的語法提示,無法進行重構等工具鏈上的欠缺成為了最重要的黑點。Xcode 9 中編輯器進行了重寫,支持了對 Swift 代碼的重構 (雖然還很基礎),將 VCS 提到了更重要的位置,並添加了 GitHub 集成,可以進行同區域網的無線部署和調試。
新的編譯系統是使用 Swift 重寫的,在進行了一些對比以後,編譯速度確實有了不小的提升。雖然不知道是不是由於換成了 Swift 4,不過正在做的公司項目的總編譯時間從原來的三分半縮短到了兩分鐘半左右,可以說相當明顯了。
Xcode 9 中的索引系統也使用了新的引擎,據稱在大型項目中搜索最高可以達到 50 倍的速度。不過可能由於筆者所參加的項目不夠大,這一點體會不太明顯。項目里的 Swift 代碼依然面臨失色的情況。這可能是索引系統和編譯系統沒有能很好協同造成的,畢竟還是 beta 版本的軟體,也許應該多給 Xcode 團隊一些時間 (雖然可能到最後也就這樣了)。
由於 Swift 4 編譯器也提供了 Swift 3 的兼容 (在 Build Setting 中設置 Swift 版本即可),所以如果沒有什麼意外的話,我可能會在之後的日常開發中使用 Xcode 9 beta,然後在打包和發布時再切回 Xcode 8 了。畢竟每次完整編譯節省一分半鐘的時間,還是一件很誘人的事情。
這次的 beta 版本質量出人意料地好,也許是因為這一兩年來都是小幅革新式的改良,讓 Apple 的軟體團隊有相對充足的時間進行開發的結果?總之,Xcode 9 beta 現在已經能很好地工作了。
Named Color
這是個人很喜歡的一個變化。現在你可以在 xcassets 里添加顏色,然後在代碼或者 IB 中引用這個顏色了。大概是這樣的:
像是使用 IB 來構建 UI 的時候,一個很頭疼的事情就是設計師表示我們要不換個主題色。你很可能需要到處尋找這個顏色進行替換。但是現在你只需要在 xcassets 里改一下,就能反應到 IB 中的所有地方了。
其他值得注意的變更
剩下的都是些小變化了,簡單瀏覽了下,把我覺得值得一提的列舉出來,並附上參考的鏈接。
拖拽 -很標準的一套 iOS API,不出意外地,iOS 系統幫助我們處理了絕大部分工作,開發者幾乎只需要處理結果。UITextView 和 UITextField 原生支持拖拽,UICollectionView 和UITableView 的拖拽有一系列專用的 delegate 來表明拖拽的發生和結束。而你也可以對任意UIView 子類定義拖拽行為。和 mac 上的拖拽不同,iOS 的拖拽充分尊重了多點觸控的屏幕,所以可能你需要對一次多個的拖拽行為做些特別處理。
新的 Navigation title 設計 -iOS 11 的大多數系統 app 都採用了新的設計,放大了導航欄的標題字體。如果你想採用這項設計的話也非常簡單,設置 navigation bar 的 prefersLargeTitles 即可。
FileProvider 和 FileProviderUI -提供一套類似 Files app 的界面,讓你可以獲取用戶設備上或者雲端的文件。相信會成為以後文檔相關類 app 的標配。
不再支持 32 位 app -雖然在 beta 1 中依然可以運行 32 位 app,但是 Apple 明確指出了將在後續的 iOS 11 beta 中取消支持。所以如果你想讓自己的程序運行在 iOS 11 的設備上,進行 64 位的重新編譯是必須步驟。
DeviceCheck -每天要用廣告 ID 追蹤用戶的開發者現在有了更好地選擇 (當然前提是用來做正經事兒)。DeviceCheck 允許你通過你的伺服器與 Apple 伺服器通訊,並為單個設備設置兩個 bit 的數據。簡單說,你在設備上用 DeviceCheck API 生成一個 token,然後將這個 token 發給自己的伺服器,再由自己的伺服器與 Apple 的 API 進行通訊,來更新或者查詢該設備的值。這兩個 bit 的數據用來追蹤用戶比如是否已經領取獎勵這類信息。
PDFKit -這是一個在 macOS 上已經長期存在的框架,但卻在 iOS 上姍姍來遲。你可以使用這個框架顯示和操作 pdf 文件。
IdentityLookup -可以自己開發一個 app extension 來攔截系統 SMS 和 MMS 的信息。系統的信息 app 在接到未知的人的簡訊時,會詢問所有開啟的過濾擴展,如果擴展表示該消息應當被攔截,那麼這則信息將不會傳遞給你。擴展有機會訪問到事先指定的 server 來進行判斷 (所以說你可以光明正大地獲取用戶簡訊內容了,不過當然考慮到隱私,這些訪問都是匿名加密的,Apple 也禁止這類擴展在 container 里進行寫入)。
Core NFC -在 iPhone 7 和 iPhone 7 Plus 上提供基礎的近場通訊讀取功能。看起來很 promising,只要你有合適的 NFC 標籤,手機就可以進行讀取。但是考慮到無法後台常駐,實用性就打了折扣。不過筆者不是很熟這塊,也許能有更合適的場景也未可知。
Auto Fill -從 iCloud Keychain 中獲取密碼,然後自動填充的功能現在開放給第三方開發者了。UITextInputTraits 的 textContentType 中添加了 username 和 password,對適合的 text view 或者 text field 的 content type 進行配置,並填寫 Info.plist 的相關內容,就可以在要求輸入用戶名密碼時獲取鍵盤上方的自動填充,幫助用戶快速登錄。
暫時先這麼多,我之後如果發現什麼有意思的事情再逐漸補充。如果你覺得還有什麼值得一提的變化,也歡迎在評論里留言,我也會添加進去。
本文編號2336,以後想閱讀這篇文章直接輸入2336即可。
輸入m獲取文章目錄
推薦
iOS開發
更多推薦《18個技術類微信公眾號》
涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。
點擊展開全文
※娛樂界、時尚界、政界、體育界統統都跨界編程了!你怕了么?
※RedMonk 2017年6 月編程語言排行:JavaScript 第一,Java 第二
※提高代碼質量必看的5本書籍
※震驚了!使用空格鍵的程序員賺錢多!
TAG:程序猿 |
※WPA2中的WiFi「Krack」漏洞:你需要知道的
※NVIDIA下個月推出4K 144Hz HDR顯示器,或許我們需要新的顯卡
※iOS11越獄也許你需要它Workflow MiniSSH規則!
※OK還是NG?2018的最新髮型你需要知道!
※繽特力VOYAGER 6200UC體驗:即便是商務通訊也需要降噪
※需要抓緊!Supreme x NBA x AF1 中國區發售信息來了!
※iOS 11.2.6害慘iPhone X 8 7及AirPods,ios需要繼續更新了
※ARM推出iSIM新技術:今後不再需要實體SIM卡
※開工日 你需要一套全新LOOK
※生活需要大內存,OPPO R15的6GB運存+128GB將全面普及
※ThinkPad X1 Yoga 2018款測評:操作靈活是需要付出代價的
※蘋果HomePod只兼容蘋果設備,iOS需要升級到11及以上版本
※NOLO VR CEO張道寧:VR行業需要一些技術型公司
※關於賓士AMG GT Coupe 四門轎跑,只需要知道5點就夠了
※EA SEED團隊訓練《戰地1》AI BOT,完整訓練需要300小時
※新聞集團CEO:Facebook谷歌需要向內容出版商付費
※還在為MacBook Pro介面少發愁嗎?你可能需要這款USB-C擴展塢
※AMD Ryzen第二代發布日期,新聞和功能:你需要知道的一切
※IDC發布2018年VR/AR行業十大預測——從水逆到逆襲你需要知道的
※關於Harden Vol.2 你需要知道這些