老司機 iOS 週報 #61 | 2019-04-01
老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
新聞
:star2:Swift 5 正式釋出
Swift5 正式更新,官方提供了更新筆記說明,我們週報編輯團隊的@Tom 組織@老老老老老老老驢,@小非86,@邦ben 和 @極速男孩 為大家做了第一手的翻譯工作,方便大家瞭解這次對於 Swift 發展史很重要的迭代。
mPaaS 是支付寶移動開發所依賴的平臺服務,它承載了支付寶這種超級 App 的日常迭代。過去半年左右的時間,mPaaS 持續向社群輸出自己的一套軟體開發和管理方案。之前 mPaaS 服務只對企業級使用者開放,而這周支付寶宣佈這套開發平臺也正式向個人開發者開放。個人覺得,就算不使用這個平臺服務,通過瀏覽其功能的相關文件和介面規範,也能獲得不錯的收穫。
在蘋果將 Workflow 納入自家門下之後,越來越多的 私有 API 開放給了捷徑應用。就在本週,捷徑釋出了其 2.2 版本。原先需要開啟 Notes APP,再進行捷徑操作。如今已變成了後臺 API 訪問的形式。除此之外,還增強旅行時間功能,其基於 Apple Maps,有更多的變數可以讓你去選擇,例如時長、距離、最佳路線等。
新手推薦
程式碼註釋通常有兩種形式:要麼沒有和要麼毫無用處 。作者認為 自解釋的程式碼是不存在的
,應該讓註釋成為程式碼的一部分。如果你對程式碼註釋有任何疑問,推薦閱讀此文。
Swift 4.2 優化設計了 Hashable 協議,引入了新的 default implementation func hash(into: inout Hasher)
,並以 Hash-flooding 攻擊為知識背景詳細介紹了為什麼 Apple 官網文件不建議繼續使用 var hashValue
的原因。
@ sunsetwan 推薦
本文作者使用兩個例子,一正一反,運用對比論證的手法,生動形象地說明了 Typealias 的恰當用法。 別名的使用,在於將很長的宣告型別縮短,增加可讀性。常用於在 Swift closure (類比 Objective-C block typedef
場景)。
typealias Success = (_ data: Data, _ message: String, _ status: Int, _ isEnabled: Bool) -> () 複製程式碼
@ sunsetwan 推薦
文章
馬蜂窩團隊根據他們對 Flutter 在馬蜂窩商家端的一個小嚐試,總結了他們對 Flutter 一些看法。文章主要分為三個部分:
- 第一部分,主要說了馬蜂窩為什麼想嘗試 Flutter 技術,並總結了 Flutter 基本架構和實現原理
- 第二部分,主要講了 Flutter 在馬蜂窩商家端 App 中的應用實踐,如何在兩端整合、如何互動以及部分效能對比。
- 第三部分,主要總結了如何管理「頁面混合棧」以及對 Flutter 應用總結。
如果還沒有開始嘗試 Flutter 朋友,這會是一篇很不錯的參考文章哦。
本文是作者在過去一年對 VIPER 架構最佳實踐系列分享的第二篇。主要包括以下內容:
- 使用 VIPERA 程式碼生成工具自動生成 VIPER 各個模組
- 以 App 首頁業務為例結合 Promises 分別實現 View、Interactor、Presenter、Entities、Router 、Services
- VIPER 模組間通訊
結合 Promises 基於 VIPER 架構可以使程式碼結構更加清晰,更容易做單元測試,更易複用, 點選這裡 閱讀原始碼。
對 VIPER 架構感興趣的讀者可以擴充套件閱讀作者這個系列教程第一篇:各種架構及 VIPER 基本概念,第三篇:面向協議程式設計在 VIPER 架構上的實踐。
:star2: :dog2: iOS 開發中的 Web 應用概述
移動開發領域近年來已經逐漸告別了野蠻生長的時期,進入了相對成熟的時代。而一直以來 Native 和 Web 的爭論從未停止,通過開發者孜孜不倦的努力,Web 的效率和 Native 的體驗也一直在尋求著平衡。本文聚焦 iOS 開發和 Web 開發的交叉點,希望能通過簡要的介紹,幫助開發者一窺 Hybrid 和大前端的構想。
本文解釋了支付寶 App 的一些架構實現細節,支付寶的架構設計需要滿足的目標有
- 多應用的生態:不限於形式,原生模組、離線包、小程式。
- 開放:底層同一個架構,業務很方便的遷移。
- 動態化:業務可以隨時線上更新,無需發版,隨時響應線上活動,比如雙十一、雙十二,春節掃福等活動
- 高可用、高效能、高靈敏度:完善的監控運維體系、發現問題後多層次的修復技術、客戶端良好的效能啟動體驗,強大的網路效能,防刷抗流量等。
從整體上來說,一個超級 App 的發展過程,對於前後端的架構設計都會提出不同的演化目標。目前支付寶也開源了面向移動開發的一站式解決方案 mPass,能有效地減少研發成本,提升開發效率,可以多關注一下。
令 Swift 程式設計師們熱淚盈眶,翹首以盼的 Swift5.0 已經發布了,帶來了 ABI 穩定等一系列激動人心的特性。按照 Swift 一貫的節奏,當一個版本釋出時,人們往往就已經開始關注下一個版本,比如這篇文章為我們簡單的介紹了一下 Swift5.1 中目前已經基本確定的新特性,比如 Self 的新用法,optional 列舉的匹配以及陣列的 difference 直接計算等,個人覺得最好玩的應該是最後一個點。基於這個特性應該可以做很多有趣的文字應用。感興趣的同學可以仔細看看文章。
Swift 中的 switch-case
語句非常強大,靈活配合 turple
, case let
, where
能寫出可讀性很高的程式碼。
但是,你知道 switch-case
語句模式匹配的具體過程嗎?是否支援自定義型別?標準型別的模式匹配如何擴充套件?你可能想不到,簡單的重寫 ~=
運算子就能實現這些強大的功能。本文帶你快速瞭解這一模式匹配過程。
Xcode 8 提供了 Xcode Source Editor Extension方式來開發 Xcode 外掛。本文詳細介紹了外掛的製作過程如 Menu Items 設定、XcodeKit Inputs and Outputs 處理、以及一些開發除錯中的一些 Tips 等。在往期週報中已有不少相關內容的推薦,對 Xcode Extensions 感興趣的讀者不妨一看。
基於服務的架構是一種元件模型,它將應用拆分成多個功能單元(服務)暴露給上層進行呼叫,並通過這些服務之間定義良好的介面和契約聯絡起來。
這篇文章講的就是這種架構在 iOS 裡的使用,作者講述了他對於服務的定義,介面的構建,架構具體的分層,依賴注入的實現,並且基於這一套理論實現了一個使用者資訊管理功能。
工具
對大型應用來說,進行編譯打包通常比較耗時。通過對編譯時間的分析可以發現,大約有兩分鐘的時間用於生成 dSYM 檔案,也就是 Release 模式下的符號表。為了不阻塞編譯構建,dSYM 可以通過非同步的方式去生成。具體的做法為:
- 將一次編譯構建拆分為兩次
- 第一次編譯不生成 dSYM 檔案
- 第二次編譯再生成 dSYM 檔案,由於使用了相同的程式碼和快取,因此速度非常快
當前這個工具僅用於修改 UUID,不區分是否是 dSYM 檔案,且僅支援 armv7 和 arm64 架構。
:star2:LLDB 知多少
LLDB 是我們 iOS 開發最為熟悉的除錯工具了,本文就從 LLDB 基本概念和它的命令結構展開,總結了幾個常用的除錯命令,同時也介紹了兩款功能強大的 LLDB 外掛,讓我們重新認識了 LLDB。正如作者所希望的,在大家瞭解了 LLDB 之後,還是要通過不斷的練習來掌握更多的除錯技巧,進一步提高開發效率。
DevSwitch
一款可以快速切換應用商店的地區,來檢視你的應用的評論和功能的工具。
程式碼
隨著 Flutter 的熱度不斷增加,社群相關的工具庫也在不斷增加。如果之前有開發過 RN 的同學可能知道 blankapp 這個團隊,他們為 RN 開發了很多易用的元件之前。目前,他們團隊也開始為 Flutter 開發一些工具,flipperkit 這個工具主要用來在開發過程中方便的進行 debug,支援網路資訊、UserDefaults 資訊的檢視等等,而且整合安裝很方便,推薦大家嘗試。
音視訊
本期 ggtalk 邀請的嘉賓是曾經在人民郵電出版社擔任過文字編輯和線上運營工作的劉女士以及《Xcode 江湖錄》的作者星星。圍繞“如何出版一本書”這一主題,本期討論的內容(按照時間順序)大致分成三個部分:
- 介紹圖書出版的流程以及回答稿酬計算方式等關於出版圖書的一些相關問題
- 星星和樑傑的出書和翻譯經歷
- 關於國內的出版現狀,電子書和“碎片化閱讀”的討論
本期的討論對想自己出書或是翻譯國外圖書的朋友有比較大的幫助。
內推
老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。
如果你想 找工作 ,點這裡: www.yuque.com/iosalliance…
如果你想 招人 ,點這裡: www.yuque.com/iosalliance…
當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。
關注我們
我們開通了公眾號,每期釋出時公眾號(OldDriverWeekly)會推送訊息,歡迎關注。

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