老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
新聞
TestFlight 開始支援邀請連結
在今年的 WWDC 中,蘋果就已經透露將在下半年推出 TestFlight 的公開連結邀請功能,現在這個功能已經正式開放。
另外 dustturtle 也第一時間分享了自己的實踐成果 - 千呼萬喚始出來 - TestFlight public link 功能正式釋出了!。
Apple’s use of Swift in iOS 12
iOS 中使用 swift 的地方在持續增加,在 iOS 12 中包含 swift 的庫相比 iOS 11 增加了一倍。
Swift 5.0 Release Process
Swift5.0 離我們越來越近了,瞭解一下最近的進展吧
- 二進位制不向下相容,容易理解,Swift 新版本就沒有向下相容過
- 必須強制遷移 Swift3.0 的程式碼,不然你只能使用 Swift4.2 來編譯了
- 現在提供了 Swift5.0 的嚐鮮版
- 預計2018年11月16日對於 Swift5.0 是一個很關鍵的時間結點(真的嗎?)
- 希望你們會喜歡 Swift5.0 的新程式設計思想(又變?)
專欄
iOS 上修改私有方法的幾種方式解析
iOS 開發中,或多或少都會有遇到修改私有方法的需求,這篇文章總結了目前我們能夠使用的方式,並從面試官的角度推薦應聘者應該怎麼回答這類開放性問題。
文章
? Mirror 的工作原理
這篇文章主要介紹了 Mirror 的工作原理,Mirror 簡單來說就是用來做型別反射的 API,可以在執行時裡獲取例項的型別資訊,例如 Playground 裡的變數資料預覽就是基於這一套 API 來完成的。
文章主要分為兩個部分,第一部分是元型別的抽象(型別的型別),執行時函式動態派發的實現原理,第二部分就是 enum / struct / class / tupe 四種元型別各自的實現。
通篇看完感覺其實 Mirror 的實現非常直截了當,因為 Swift 的泛型功能要求它必須有足夠豐富完整的 Metadata,才能在執行時更好的描述泛型例項的存在,完成函式派發,屬性存取和型別轉換的工作。
在這麼一個背景下,Mirror 的實現基本就是從已有 Metadata 裡獲取型別資料,然後展示出來,或者是通過 Metadata 定位成員變數的相對位置,然後進行存取操作。
? AR Face Tracking Tutorial for iOS: Getting Started
Ray Wenderlich 的又發新教程了。這次是教你如何用 TrueDepth Camera 來做 AR 面部追蹤。
和往常一樣,他家教程類文章會有非常詳細的步驟和截圖,帶你一步一步的操作,非常適合對文章中涉及的知識領域不是很熟悉的同學們。
另外這篇文章也是免費教程的一部分,所以並不需要進行任何付費。
? Why #if DEBUG Conditional Should Be Avoided in Library Code
文章作者分享了一次自己使用 Carthage 匯入自己的庫時遇到的坑,來說明了為什麼在 SDK 的開發中儘量避免條件編譯指令,因為你不知道使用你 SDK 的人的編譯環境會有怎樣的變數,文章很短,算是一次有趣的小分享。
? [譯] Metal 渲染管線教程
Apple 在 2018 的 WWDC 上正式宣佈 OpenGL ES 標記為 deprecated,推薦使用 Metal 來做 3D 渲染,很有勇氣。在細緻的瞭解 Metal 後,就能發現蘋果的勇氣不是沒有原因的,Metal 幾乎最大限度的利用了 iOS 的硬體特性來提升效能,是 iOS 的首要選擇。
本篇文章的文風很像很多經典的 OpenGL 教程,從渲染的概念,流程講起,並一步步教你如何畫出第一個三維的物體,強烈推薦有興趣的同學仔細閱讀。
推薦人:史前圖騰
? beeshell:開源的 React Native 元件庫
文章介紹了美團所開發的基於 React Native 的元件庫,提供了一系列基礎 UI 元件,包括按鈕、彈窗、表單、輸入框等等,覆蓋了 iOS 和安卓兩端,並分析了一些設計理念。
? 從 FE 視角看大前端
大前端是現在比較流行的話題與方向,相信也有很多移動端的同學對這個方向有很濃厚的興趣,而這篇文章的目標閱讀群體剛好適合對前端 FE 感興趣的 Native 開發同學, 聚焦在 PC 和 H5 瀏覽器層面。可以讓你對前端開發有全景方式的瞭解, 以及引發大家的興趣。很多 native 開發可能苦於前端眾多的名詞,眾多的框架不知從何下手,這篇文章剛好適合你。
? UIFieldBehavior
文章以懸浮框為例,講解了 iOS 物理引擎 UIKit Dynamics 中的 UIFieldBehavior 的相關內容。首先描述了 Field Behaviors 是什麼,接著講解了 Spring Fields 怎麼用,最後結合 Behaviors 的一些特性實現了一個適用於開發除錯的懸浮框。
推薦人:WXGBridgeQ
? 巧妙實現 debugOnly 函式
作者在學習 Vapor 的原始碼看到一段不需要巨集定義的 debugOnly 函式實現。程式碼如下:
func debugOnly(_ body: () -> Void) {
assert({ body(); return true }())
}
複製程式碼
對於大部分專案來說,這個功能看似沒有什麼用處,但是仔細考慮一下,對於一個可以被任何一個專案依賴的 SDK 來說,這個 debugOnly 實現可以說是很完美了。
? Bloom Filters and Swift 4.2
文中實現了 Bloom Filter,並使用了 Swift 4.2 中 Hasher 新特性來優化程式碼。
? 驢媽媽客戶端頻道頁模組化設計思路
對於做偏運營類的應用開發,有一項很重要的技術需求就是能夠做到對應用內容進行實時更新,而且是越靈活越好。本文就詳細介紹了驢媽媽客戶端團隊在 SOLID 原則的指導下,重點圍繞面向介面、資料驅動、模組隔離這三個點設計了適合自身業務場景的模組化框架。它既滿足了縮短內容上線週期的需求,也為建立一個統一規範的業務元件庫提供了思路和方向,同時框架的整體設計也是非常值得參考和學習的。
? INSIDE AUDIOKIT SYNTH ONE: A BRIEF TOUR FOR DEVELOPERS
本文的大部分內容是作者在對 Synth One 應用新增 AUv3 擴充套件時的開發筆記。後來他為了分享自己搗鼓開源專案 AudioKit 和 Synth One 的經歷,就寫了這篇文章,也希望藉此幫助那些想要做類似 iOS 音樂合成器開發的人能夠快速瞭解框架內部的設計。
? 程式碼評審的不可能三角
Code Review 是保證程式碼質量的重要手段之一,但許多研發團隊中它常常由於各種原因並未得到真正的落地。為什麼會這樣呢?本文作者用一個非常簡單的觀點理解了這個現象,並據此給出一點優化的想法。希望本文的想法對同樣被評審困擾的同學有幫助 :)
? 利用函式組合提升程式碼可維護性
在平時的開發中,我們可能會遇到一些場景,開發起來,程式碼寫的很繁瑣,例如文中作者舉的例子:
process1(_ param: String) -> String
process2(_ param: String) -> String
process3(_ param: String) -> String
process4(_ param: String) -> String
複製程式碼
這種情況,如果直接採用函數語言程式設計,可讀性又不會太好。而為了重構讓程式碼變得具有更好的可維護性,作者利用函式的組合來解決這個問題。除了上面函式簽名致的例子,作者還提到了函式簽名不一致,以及非同步操作這兩種情況的解決方案。
推薦人:matthew
? MMKV中的簡單LRU快取(LRUCache)
本文簡明地分析了開源庫 MMKV 中 LRUCache 的實現。MMKV 中的 LRUCache 實現簡單易懂,文章中的原始碼也加上了註釋,大家看一遍這篇文章就能明白具體的實現原理。
? Migrating to Unified Logging, Swift Edition
本文介紹了一種更優雅的打log方式,使得開發人員不要再混亂地管理log程式碼
- 正確對待 OSLog,他本來就幫你分了 log 的等級
- Console.app 能夠幫你更好地檢視客戶端的 log (如果你用的是 os_log 的話)
- 儘量使用 os_log
- 更多應該注意的細節
程式碼
andreamazz/SubtleVolume
SubtleVolume 是一個音量條元件,也支援在 iPhone X(S/R) 的劉海上做文章,如果你的播放器需要一個自定義音量條,不妨看看它。
設計
一定要會的Sketch設計方法和工作流
泊學關於 Sketch 入門相關的視訊課程。
內推
-
北京-百度網盤 持續招 iOS 開發:社招、應屆、實習均可。專案在技術上很有挑戰性,團隊技術氛圍極好。誠心希望各路大神前來切磋,也歡迎計算機基礎好的小白來共同學習。簡歷發郵箱 xuyafei01@baidu.com,暫不考慮的也歡迎微博私信 @小非86 聊聊~
-
北京-螞蟻金服 招iOS/安卓/前端開發:負責支付寶會員及帳號業務線,地點北京國貿,金臺夕照地鐵站出口 100 米。有興趣的同學歡迎將簡歷傳送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一個郵箱)或者微博私信 @折騰範兒_味精 瞭解情況。
-
上海即刻:如果你認識聰明勤奮、膽大心細、有追求的工程師,那就來加入我們吧!任何推薦或簡歷可直接發給 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通過行業無人機協同工作流 Mesh 進入物聯網與人工智慧領域, 併成功為房地產、建築、測繪、電力巡檢等行業提供無人機解決方案。感興趣可以微博上私信 @沒故事的卓同學 瞭解。
-
深圳頭條研發中心誠招各路 iOS 好手一起做取悅自己的專案:如想了解更多深圳頭條的資訊,可以加小T微信:tomtan,切磋技術和聊情懷都可以喔~~~~
-
北京位元組跳動 iOS 團隊持續招人中:簡歷可以傳送到郵箱 raozhizhen@gmail.com,或者新增我(@AidenRao)的微信 jingmu1994 瞭解更多公司及崗位資訊。
-
北京百度教育事業部招 iOS 開發:百度教育事業部,地點:北京西二旗。部門下面有百度閱讀,百度文庫,百度愛聽等 App 產品。團隊技術氛圍濃厚,有興趣的同學歡迎將簡歷傳送到我的郵箱:lizelei@baidu.com。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@沒故事的卓同學,@四娘,@享耳先森,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,kyo,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驢,@小非86
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)