老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
小專欄
北美軟體工程師面試簡單介紹
好多同學都比較好奇北美的軟體工程的面試和國內的有什麼不同,具體情況又是如何的,這篇小專欄就簡單的給大家介紹了一下北美的 Software Engineer 的面試情況,有興趣的不妨讀一讀了解一下。
新聞
App Store Connect API Now Available
WWDC 2018 中蘋果提及了 App Store Connect 將迎來一次比較大的更新,其中有兩個內容比較受國內開發者關注 - TestFlight Public Links 和 App Store Connect API。前者已經在前一段時間釋出了,而後者這周也正式釋出。
相關功能介紹可以在 What’s New in App Store Connect 和 Automating App Store Connect 中進一步瞭解。
文章
? ? 支付寶客戶端架構解析:iOS 容器化框架初探
你是否好奇一款航母級 App 他的內部客戶端架構是怎樣實現的?到底什麼樣的架構設計才能滿足幾十上百人共同開發迭代一款 App ?這篇文章會帶大家深入到支付寶的 mPaaS 框架之中,瞭解一下支付寶客戶端業務容器化的實踐 -- 將業務隔離成相對獨立的模組,而整個框架作為容器管理著眾多子業務子模組,並著力追求模組與模組之間高內聚、低耦合,靈活的外掛式開發。
mPaaS iOS 框架源自於支付寶客戶端,為了實現這種上千個工程之間的低耦合和相關依賴呼叫,mPaaS 框架直接接管了 App 的生命週期,負責整個 App 啟動託管、App 生命週期管理、處理與分發 UIApplication 的代理事件。mPaaS 框架提供了容器化環境,業務開發人員在這個容器化環境中使用 微應用
和 微服務
進行具體的業務需求開發。
? ? The power of key paths in Swift
由於 Swift 是一門追求編譯時安全和靜態型別的語言,它缺少其它更注重執行時的語言(Objective-C、Ruby 和 JavaScript 等)所擁有的動態特徵。例如在 Objective-C 裡,我們可以在執行時動態訪問物件的任意方法和屬性,甚至可以替換其實現。雖然動態性的缺失是 Swift 的一大優勢之一,有助於寫出容易預測、正確率更高的程式碼,但在某些時候,如果能用更動態的方式來使用程式碼,會很有幫助。幸運的是,Swift 正在不斷推出更多更動態的功能,同時仍然保持型別安全的原則,key path 就是其中之一。在這篇文章裡,會為你展示 key path 在 Swift 中的使用方式,以及利用它實現的一些強大功能。此外,還可以參考這篇文章 Swift Tip: Auto Layout with Key Paths。
? ? Protocol Oriented Programming(POP) in Swift: Is it better than Object Oriented Programming(OPP)?
自從 Swift 2.0 引入面向協議程式設計(POP)這一概念以來,已經有成百上千篇關於這一概念的討論文章,本次作者以專注編碼 30 年老司機的身份,在實際開發中大量運用 POP 模式之後,寫出了他心目中的 POP。本文將由以下幾點展開討論:
- 為什麼 Swift 被認為是一門面向協議的語言;
- 比較 POP 與 OOP 的異同,指出他們主要區別在於能否實現多繼承;
- 對比值語義與引用語義的區別;
- 分析了蘋果在 WWDC 2016 提出的 “區域性推斷(Local reasoning)”;
- 舉了 Protocol 的幾個使用場景:如實現委託模式、作為型別和實現多型;
- Review 作者在 Swift 專案中的實踐程式碼;
至於作者對 POP 最終的態度,點進來看看吧,另外有興趣的話不妨看看作者的前一篇關於 POP 的入門文章。
? React Native 重構路線圖釋出!
Facebook 6月中旬釋出了他們即將“大規模重構 RN” 的訊息,時隔四個月,近期終於公佈了他們的一些計劃細節,不過大部分都是工具鏈,流程上的增強。頗有一種褲子都脫了就給我看這個的感覺,不知道是不是對“大規模重構”有什麼誤解。這些增強雖然普通開發者可能感觸不深,但對於一個團隊做技術選型時候肯定是有幫助的,但是不是真能抵擋住 Flutter 的衝擊呢?我表示不樂觀。
? Speeding Up Custom Script Phases
文章主要介紹了三種方案來加速 Xcode 自定義指令碼的執行。
- 第一種:勾選配置項中的
when installing
,標識 APP 只在Archive
模式下才執行指令碼。 - 第二種:新增你自己的邏輯程式碼來標識指令碼的執行程度。
- 第三種:利用兩個可選項 Input Files 和 Output Files,這兩個列表中填寫為檔案路徑或資料夾路徑,它們就是 Xcode 來判斷指令碼是否需要執行的依據。
對於最後一種方案,文中表達不是很明確,我花了點時間做了一個實踐,最後歸結如下,Xcode 會重新執行指令碼的條件如下:1. 兩者中任一檔案
有修改
。 2:兩者中任一資料夾
內有檔案新增/刪除/替換
。
在 Xcode 10 之後指令碼增加為4個可選項,除上面表述的兩個外,還有 Input File List 和 Output File List。如有興趣可以參考 [New Feature] Generate xcfilelist for Script Build Phases 文中對於 File List 的看法。
? Running Other Apps' Siri Shortcuts Through Deep Links in Swift
文中作者展示了使用 Deep Link 來開啟捷徑的案例。通過 shortcuts//
這個 URL Scheme 來跳轉捷徑應用。若 URL 中的 Path 為 run-shortcut
則可以去執行捷徑,當然我們可以通過引數 name
來指定執行對應的捷徑,input
引數來為你的捷徑增加入參,x-success
/x-cancel
/x-error
引數來為你的捷徑提供執行狀態的回撥處理。此外,作者還介紹了具有匯入功能的捷徑 URL 和 一些捷徑 APP 的配置頁面。
? Let's Set Up Your iOS Environments
本文介紹了一些對於新手來說非常實用的 Xcode Project 設定的小知識:使用 .xcconfig 檔案來合理設定工程。這東西可能在工程體量還不是很大的時候,顯得不是那麼的重要,但是當工程逐漸變大,結構也變的越來越複雜的時候,有一個清晰合理的結構,容易配置的工程對整個團隊來說都是一個福音。
? Text Kit Tutorial: Getting Started
TextKit
是 iOS 7 開始推出的圖文混排框架,其基於底層的 CoreText
。UIKit
中的 UILabel
、UITextView
、UITextField
都構建在 TextKit
之上。本文介紹介紹了兩部分內容:如何適配 Dynamic Type
特性;如何實現圖文混排及文字環繞圖片佈局。
? 【基本功】深入剖析Swift效能優化
這篇文章的核心內容出自 Understanding Swift Performance,主要講了 Swift 的一些優勢以及蘋果做了哪些方面的優化。所以推薦每個 Swift 的開發者都要仔細看一下這個 Session 的內容。
當然,因為 Swift 在不斷的優化,視訊內容的部分東西已經有點點過時了。我稍微補充一下:
- Existential Container 目前雖然是用 3 個 word 儲存資料,但是在 ABI 穩定之前,這個大小一直還沒有確認。同時,文中所說的 Existential Container 是 5 個 word 也不太恰當,更合理的是大於 4 個 word。比如
Any
的 Existential Container 只有 4 個 word,而Codeble
的 Existential Container 大小為 6 個 word。 - 其次,對於 Indirect Storage With Copy-On-Write 的說法,在 Understanding Swift Performance 指的是 Swift 3 的時候,類似於 Array 這類基礎庫的大數 struct 如何解決 Copy 問題。而不是對於所有 struct 實現了這個 COW。但是 Swift 4 的時候,蘋果改變了策略,在編譯器這邊做了一定的優化,實現了“自動”實現 COW。
? One Quick Way to Drastically Reduce your iOS App’s Download Size
大家都知道,app 的下載體積越小,使用者需要等待的時間就越短,尤其是對於用 Swift 開發的 app,體積動輒幾十兆,令人頭疼。本文作者分析了影響 app 體積的幾個方面和一些優化的方法,包括 bitcode、使用 xcrun 命令分析各部分所佔空間等等。
? 深入理解 Autolayout 與列表效能 -- 背鍋的 Cassowary 和偷懶的 CPU
Autolayout 的效能一直為人所詬病,也是列表卡頓的原因之一。本文作者從 Autolayout 的演算法角度進行分析,介紹了 Cassowary 的基本原理,並根據文字渲染結果做了一些詳細的測試,判斷效能問題是蘋果實現不當所致,而不完全是演算法的原因。最後也介紹了作者自己實現的 Panda 框架,基於 Autolayout 演算法的概念進行優化,感興趣的朋友可以試一下。
? Class written in Swift
純 Swift 類的函式呼叫跟 OC 中的執行時訊息傳送機制是不同的,是在編譯階段就確定了呼叫哪一個函式。雖然 Runtime 的介面可以使用,但是卻並不能保證返回結果的正確性。作者在自己寫的某個開源庫上的一個 issue,由於和 Swift 類有關,研究了下 Swift 編寫的類。對於在使用 Swfit 過程中,在 Debug 或者其他情況有疑問的同學,可以看一下本文的分析。
? Specializing protocols in Swift
這周的 Swift by Sundell 介紹了一個很有趣的泛型功能 —— 泛型協議特例化。這是 Swift 4 時引入的功能,讓我們在繼承泛型協議的同時約束 associatedType 的型別,聽起來很拗口難懂,目前在標準庫裡有一個非常標準的示例 SubSequence
,大家一看就能理解:
protocol Sequence {
associatedtype SubSequence : Sequence
...
}
protocol Collection: Sequence where SubSequence: Collection { ... }
複製程式碼
Collection
通過 where
從句對子序列的型別進行約束,讓 Collection
的子序列必須也遵循 Collection
(而不只是 Sequence
)。
如果你覺得這個例子離業務太遠的話,那就可以看看 Sundell 在文章裡介紹的一些離業務更近的用例。
工具
iOS Project Template
這是一個可進行程式碼簽名、持續整合、專案分發的專案模版。它為新專案提供了一個起點,可以方便的進行專案構建。這個模版中提供了一個 Core
框架,要想用於自己的專案,還需要修改一些檔案的某些配置和內容。感興趣的朋友可以試試看,或許它能夠幫到你。
Eliminate Unused Swift Code
這是一個可以移除 Swift 專案中所有沒用到的程式碼的工具,幫助你把專案變得更加乾淨。注意目前版本的 CocoaPods(1.5.3) 會導致它不能正常工作,升級到 1.6.0.beta.2 即可。這個工具免費即可使用,但是充錢可以變得更強。
程式碼
CodyFire
CodyFire 是基於 Alamofire 的 Codable 協議 API 請求管理庫,使你龐大的網路請求程式碼,變的更簡潔,易於維護。Swift 由於型別安全的特性,對於像 JSON 這類弱型別的資料處理一直是一個比較頭疼的問題。Swift 4 中新增的 Codable 協議解決了字典與模型之間轉換的問題,Codable 協議也讓 API controller 的構建程式碼變的十分優雅。 CodyFire 能自動根據所運用的環境,切換 baseURL,能方便的新增公共頭、對異常狀態統一處理、對請求進行取消、設定超時,或者預防請求返回過快,新增互動式延時(不用再擔心,網路太快,等待動畫沒有很好的執行。小編和 CodyFire 作者都非常喜歡這個功能)。還能序列或並行,使用鏈式呼叫進行多個請求,並對結果進行統一處理。
內推
-
北京-百度網盤 持續招 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,@紅紙,@含笑飲砒霜,@JimQ
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)