老司機 iOS 週報 #36 | 2018-09-17

老司機iOS週報發表於2019-03-04

老司機 iOS 週報,只為你呈現有價值的資訊。

你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。

新聞

DCloud 釋出又一個跨端開發框架 uni-app

隨著微信、支付寶、百度陸續釋出小程式,手機廠商聯盟釋出快應用,移動網際網路快速向以 js 為核心的動態 App 發展。手機硬體效能日益提升,動態 App 體驗也越來越好。一方面前端工程師迎來歷史性的機遇,另一方面又發現開發如此多版本讓開發者苦不堪言。

DCloud 大力投入資源為開發者打造動態 App 時代的最佳解決方案:uni-app。開發者使用 vue 技術,開發一次,可以同時生成 iOS、Android、微信小程式。接下來 uni-app 還將覆蓋到 H5、其他廠商小程式及快應用。

提交 app 適配 iOS 12,watchOS 5, and tvOS 12

現在,可以使用 Xcode10 GM 版本構建您的應用,並對 iOS 12, watchOS 5, and tvOS 12的最新版本進行測試。從2019年3月開始,蘋果會要求所有 iPhone 的應用更新都要使用 iOS12 SDK,以支援 iPhone XS Max;而手錶的應用更新需要使用 watchOS 5 SDK 以支援 Apple Watch Series 4.

文章

? ? 老司機推薦書單

週報編輯們根據各自喜好推薦給程式設計師的書單。每一本被推薦的書都有它的獨到之處,按照自己的興趣挑幾本去買來看看吧。

? 你的標籤是什麼?

每個人都會被打上標籤,可能是正向的善於解決問題、Web 安全專家或者是擅長創新。也可能是負向的粗心、眼高手低。程式設計師不能一直埋頭苦幹,要適當建立起自己的標籤,尤其對職場新人而言,好的標籤會讓你脫穎而出,更多的機會會垂青於你。

? Swift for TensorFlow 官方教程

Swift for TensorFlow 是今年的 TensorFlow 峰會上,Chris 團隊釋出的一項新的技術,旨在為 Swift 提供內建的、first class 的機器學習的能力。Swift for TensorFlow 使用一系列很有趣的技術來實現了同時具備可用性和效能,有興趣的同學可以進一步瞭解。同時,Swift for TensorFlow 也提供了 jupyter kernal 得支援,使得可以使用 notebook 來寫 swift。

機器學習入門教程最經典就是識別鳶尾花,iris detection。本篇教程就是 Swift for TensorFlow 版本的 iris detection,對 Swift 做機器學習感興趣的筒子不要錯過。

? 鐐銬之舞:美團安全工程師 Black Hat USA 演講

這是一篇來自美團安全團隊的分享。美團安全團隊在今年的 Black Hat USA 上做了關於 App Store Malware Automatic Hunting System 的演講分享。團隊設計了一套可自動大規模獲取應用樣本的 Crawl 系統,通過使用基於樹莓派的構建叢集來實現沙盒自動分析系統,最終實現了自動化收集樣本並對樣本進行自動化安全分析的APT攻擊捕獲及分析系統。

這篇文章中很多概念對於不做安全或者對安全領域接觸較少的同學來說比較難理解,但是不妨邊搜尋概念和知識點邊讀,可增加一些安全方面的基礎概念知識。

? How Apps Adapt to the Series 4 Apple Watch Screen Sizes

9 月 21 日新一代 Apple Watch Series 4 就要開始發貨了,包含 40、44 毫米兩個新螢幕尺寸,文章介紹了 watchOS App 如何適配新的裝置:對於 watchOS 4 的 App, watchOS 5 預設相容,只是還是以老的 38、44 毫米顯示,以 Xcode 10 編譯後,再輔以適當的調整,就能在不同螢幕尺寸上以實際大小顯示。

? JSPatch 的 dealloc 憂傷

有挖過 JSPatch 原始碼的同學應該都會留意到,它為了讓 JS 能夠更安全合理地 Hook dealloc,做了以下的處理:

  1. 呼叫 dealloc 時 self 不包裝成 weakObject,而是包裝成 assignObject 傳給 JS,解決了 over-released crash 問題;
  2. 呼叫 ORIGdealloc 時因為 selectorName 改變,ARC 不認這是 dealloc 方法,所以需要欺騙 ARC,解決了物件正常釋放的問題;

這樣的處理可謂巧妙,但這位細心的讀者卻發現了另一個遺留問題 – JS 的 dealloc 方法和 OC 裡面的 dealloc 方法會同時被呼叫。於是他針對這個問題進行了深挖,從 OC 物件的 dealloc 原理開始,一步步嘗試,最終僅使用幾行程式碼便解決了這個遺留問題。目前該問題已經反饋給 Bang,相信很快便會發版解決。值得一提的是,這是小編看到的第一篇從解決實際問題角度出發,來解讀 Runtime 中 dealloc 原理的好文,好奇作者解決方案的同學快點開文章連結閱讀吧。

? iOS 中的多程式,下拉關閉系統的詞典介面(Tweak 開發)

本文作者就下拉關閉系統的詞典介面需求的實現過程進行了記錄,從發現 _UIRemoteViewController 到找目標程式,再到 hook delegate 實現功能。整個過程都比較常規,但是 iOS 多程式這塊確實是個冷門,資料也很少,iOS 開發一般是接觸不到這塊知識的,就算知道,也很難在實際開發中得到運用。不過當作擴充套件知識瞭解一下還是很有意思的,特別是文中提到的 Ole Begemann 寫的那幾篇 關於 Remote View Controllers 的博文

? 關於 iOS 私有 API 掃描

作者就網易遊戲開源的 iOS private api checker 專案,一一闡述瞭如何構建私有 API 庫、該專案又是如何識別 APP 中的私有 API、該方案存在哪些問題。並提出了行之有效的改進建議。
構建私有 API 庫需要先構建 documented API 資料集,而新版 Xcode 的 API 文件不再使用 docSet 這種格式。這篇文章分享了 Xcode 9 在 Mac 上儲存 documented API 的細節。

推薦人:balloonsys

? Preparing Your App For iOS 12 Notifications

iOS 12 帶來了一些新的與使用者通知相關的功能,如新的授權選項、動態的快速操作與在通知內進行的使用者互動。瞭解並適配這些新特性以助於改進應用通知在 iOS 12 中的體驗。

推薦人:RocZhang9673

? 一次高效的依賴注入

本文分析了 iOS 目前依賴注入的幾個開源庫。 並選擇 EXTConcreteProtocol 進行了詳細的分析,給出了實際專案中遇到的問題與解決方案。

? DRIVING CARS WITH ARKIT

這篇小短文會教你如何利用 ARKit 製作一款擴增實境的奧迪 Q7 駕駛 app。利用平面檢測模擬真實的駕駛效果,而不至於漂浮在半空中。

? 利用 ARkit,eBay 用頭部運動控制 iPhone X 螢幕進行購物

電商巨頭 eBay 日前揭曉了一項新技術 HeadGaze,利用了蘋果 ARKit 平臺和 iPhone X 的原深感前置攝像頭(支援 Face ID)來支援殘障人士通過頭部運動來與 iPhone X 螢幕進行互動,並已經將底層技術開源託管至 GitHub。簡而言之,HeadGaze 會通過虛擬觸針緊跟使用者的頭部運動,把遊標移向滾軸或其他互動式按鈕。系統可檢測遊標停留在一個位置的時間,並在達到一定閥值時予以觸發,實現啟用點選操作。

? 利用柯里化去除重複程式碼

柯里化是把接受多個引數的函式,變換成接受一個單一引數(最初函式的第一個引數)的函式,並且返回接受餘下的引數且返回結果的新函式,的函數語言程式設計方式,本文通過一個實際案例嘗試了使用柯里化來完成對程式碼的精簡,對於理解柯里化是很好的案例。

? JSPatch VS Aspects

JSPatch 應該已經無需過多介紹。Aspects 是 iOS 上的一個輕量級面向切面程式設計(AOP)的庫。本文先後介紹了 JSPatch 和 Aspects 如何利用 forwardInvocation 將實現自己的功能,同時介紹了 iOS 上訊息轉發機制的 Hook 原理。而Hook 是有風險的,那麼專案中同時接入這兩個庫會有什麼樣的問題呢?文章作者通過實踐列出了可能遇到的一些問題。現實中,一個工程往往會接入更多的一些三方庫,以及自己的一些功能也可能使用 Hook,所以,在對 Hook 的處理上要格外小心,關於如何正確使用這一點,作者也給出了自己的答案。

工具

pointfreeco/swift-html

swift-html 是一款 server side swift 的工具,能夠幫助swift使用者在開發伺服器後端的時候方便快捷的生成html,從而進行後端渲染頁面,並且型別安全,可擴充套件性強。

程式碼

VideoFlint/Cabbage

Cabbage 是一個基於 AVFoundation 封裝,易於使用和方便擴充套件的視訊編輯框架,能夠縮短開發者在短視訊功能上的開發時間。

推薦人:vitoziv

專欄

? WWDC18 內參

6 月的時候我們聯合一些開發者翻譯了一些 WWDC 18 的 session(老司機x知識小集xSwiftGG WWDC 18 專題目錄),當時為了儘快呈現一些內容給大家,也只是挑選了一部分 session 講解。於是剩下的幾篇 session 的內容就留到了這個專欄上釋出。

如果沒有時間看 session 的同學強烈推薦購買支援一下作者們了。

音視訊

提交映象到 DockerHub
Docker 提供了一種和 git 類似的機制來管理我們對容器的修改,因此我們也可以利用這種機制來提交和分享映象。這段視訊裡,我們就來分享 DockerHub 的用法。

構建 Vapor 開發環境 1
這段視訊裡,我們和大家分享如何讓 Nginx 容器作為一個反向代理,把需要動態請求的部分,轉發給 Vapor。

構建 Vapor 開發環境 2
Docker 提供了一個 link 的功能,我們可以使用它把之前建立的 Nginx 和 Vapor 容器連線起來,這樣,就有一個最原始的 Vapor 開發環境了。

關於 iPhone Xs, iPhone Xs Max, iPhone Xr, 和 Apple Watch Series 4 的適配
蘋果官方提供了新的視訊,用於指導開發者如何適配新的手機和新的watch,Apple Watch Series 4 堪稱超級感測器的集合,因此對於開發者來說需要適配的東西還是蠻多的,建議大家在9月份釋出新版app之前都先用Xcode10-GM版過一下模擬器,看看有沒有明顯的問題。

Building Apps for iPhone XS, iPhone XS Max, and iPhone XR
Designing for Apple Watch Series 4
Developing Complications for Apple Watch Series 4
P.S. 我們團隊發現如果用 Xcode10-GM 打包 IPA,裡面的 Assets.car 檔案,包含了重複的 png 圖片資訊,而之前 Xcode9.4.1 卻沒有此問題。Xcode10-GM 版的這個 bug,會導致 iOS9.0 ~ iOS9.2 的機子在使用 Assets.xcassets 裡面的圖片後,發生隨機 Crash。
解決方法有二:要不不使用 Assets.xcassets 而改用 Bundle 取圖片(對舊專案改動較大),要不就將 APP 支援的最低版本升級到 iOS9.2 以上。目前已將此 bug 報告給蘋果,希望在 Xcdoe 10 正式版中得到改善。

內推

關注我們

我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。

老司機 iOS 週報 #36 | 2018-09-17

同時也支援了 RSS 訂閱:github.com/SwiftOldDri…

本期編輯

@沒故事的卓同學@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驢

說明

? 表示需翻牆,? 表示編輯推薦

預計閱讀時間:? 很快就能讀完(1 – 10 mins);? 中等 (10 – 20 mins);? 慢(20+ mins)

相關文章