老司機 iOS 週報 #25 | 2018-07-02

老司機iOS週報發表於2018-07-02

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

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

新聞

2018@Swift 大會來了~

由 SwiftGG 翻譯組主辦的第三屆 @Swift 大會將於 2018 年 9 月 15 日在北京舉辦,大會邀請了來自國內外的重量級嘉賓,旨在為 iOS 開發者帶來一場 Swift 的盛宴。現在使用老司機週報的專屬優惠碼:SwiftOldDriver 報名立減 60 元 。

WWDC 2018 Viewing Guide

useyourloaf 對 WWDC2018 的 Session 進行了一個分類,並附帶了少量的延伸閱讀指引。

Zeplin 2.0 釋出 — 引入元件模組

Zeplin 2.0 釋出,帶來了全新的 Components 模組、 assets 重新命名,全尺寸縮圖等諸多新特性。

隨著產品思路的轉變,在開發和設計過程中「元件」的有效管理變得越來越重要,而 Componets 模組要做的就是讓設計師和工程師更好的共享這些元件。 Componets 模組可以將 Sketch 中的 Symbol 上傳到 Zeplin,選中單個元件,數顯皮膚會顯示該元件被用於哪些 Screens。

文章

? JavaScript async/await: The Good Part, Pitfalls and How to Use

ES7 引入的 async/await 極大地提升了 JavaScript 的非同步程式設計能力,可以使用同步風格的程式碼非同步訪問資源、而不至於阻塞主執行緒。但要用好 async/await 還是有一定難度的,在這篇文章裡會從不同角度探索 async/await,並展示如何正確、高效地使用 async/await。

? Handling mutable models in Swift

當我們能給資料結構的每個屬性進行精確、訪問許可權可控的定義,其他模組就算不了解實現細節,也能從屬性本身的定義認識資料結構,同時防止了意料之外的修改。作者權衡了程式碼的正確性和使用時的便利性,利用 Immutable 的性質和 FRP 的思想來描述資料結構,提升了資料結構的易用性和可維護性。

? Learn Core Graphics with Swift Playground

在以前的一些電子書籍中,我們跑書籍中的程式碼,一般都需要我們根據指示建立 demo 工程,然後 copy 或者人肉將程式碼輸入到工程中,再執行檢視效果。整個路徑比較耗時不說,遇到不太專業的書籍程式碼的版本不清晰的估計得調個十遍八遍的才能跑起來。既然書籍都已經電子化了那能不能讓書籍中的程式碼就能直接在書籍中執行呢?在單一環境中完成整個學習的閉環,意義重大。

近年來,人們陸續通過擴充套件部分 REPL 的功能部分實現了互動式的教程體驗,如 iPython、Jupyter Notebook 以及 Xcode 中的 Playground 等。不過在 Apple 推出 iPad 版的 Swift Playground 後更是把動態的、可執行的互動式教程發揮到了極致,畢竟 iPad 本身就是很多人拿來看電子書的裝置。文中作者基於 Swift Playground 寫了一本學習 Core Graphics 的電子書,在學習的同時可以互動時的嘗試不同的繪圖操作並實時檢視效果,簡直不要太棒!有 iPad 的同學可以考慮重新學習一下 CG,或許會有很多新的收穫。

? Airbnb and React Native Expectations

又一篇英文的文章來評論關於 Airbnb 宣佈下線 React Native 的事情,作者提出了一個很好的觀點,使用 React Native 的人,你希望用 React Native 達到什麼樣的期望,解決什麼樣的問題呢? React Native 的最初設計初中真的能符合使用者的預期麼? Airbnb 在運用 React Native 的時候,總共提出了 4 點目標,最終這 4 點目標他們完成的並不好,所以才決定下線。那麼如果作為 React Native 使用者,你的預期又是什麼呢?

作者還針對自身的體會對 Airbnb 的 4 點目標中的 2 點,跨平臺與提升開發效率做出了自己的看法。跨平臺方面,React Native 確實可以實現一套程式碼2個平臺適配,甚至 Airbnb 在實踐中做到包括 Web 在內3個平臺適配,但這之中遇到的很多坑也是造就了不滿足預期目標的原因,而 React Native 最初的設計初衷是 “learn once, write everywhere” ,當我們預期變成 “write once, run everywhere” 的時候,你是否能 handle 的住你的新預期與新規劃呢? 關於開發效率上,Airbnb 因為他們缺乏移動端工程師,使用 JS 技術棧可以最大限度發揮他們前端工程師在移動端的作用,所以他們內部的調研報告裡有 60% 的人覺得,React Native 的開發體驗非常的 amazing,但如果作為原生安卓/蘋果開發者們,面向人群變了,還會是開發體驗的一種提升麼?

? Upgrading To Swift 4.2

從 Swift 4.1 升級到 4.2 的語法改動不大,主要是一些型別、常量的命名由 OC 的一長串改為按照 Swift 風格的巢狀名稱空間。比如 UIApplicationState.active 改為 UIApplication.State.activeUIContentSizeCategoryDidChange 改為 UIContentSizeCategory.didChangeNotification

? DeepLearning 101: Coursera Vs Udemy Vs Udacity

深度學習的熱潮在近幾年越來越明顯,各種框架如雨後春筍般出現,蘋果也相繼在 WWDC17 和 18 推出了 Core ML 和 Create ML 。除了一些全職的博士/教授等科研人員,廣大工程師們如果想系統的學習深度神經網路,最便捷靠譜的途徑就是通過參加各種線上課程。作者橫向比較了幾個目前比較火的深度學習線上課程的不同點,相信能幫助感興趣的人找到適合自己的課程。

? ? ReSwift in Practice

單向資料流是一個經典的設計模式。相比在前端中的 Redux 被廣泛接受,在 iOS 端與之對應的框架 ReSwift 則少被人提及,業內對於 ReSwift 在專案中的實踐文章也少(因為沒人用啊),這篇文章針對在業務中使用 ReSwift 做了一些總結,對於 middleware 的使用也讓人頗受啟發。

務實的說,大多數團隊在專案中引入 ReSwift 並沒有太大的價值。它的使用門檻比帶來的收益大。但是通過學習這個框架深入理解單向資料流的模式是很有意義的一件事。

? Xcode 小技巧:利用 assets 配置針對不同裝置的資源

介紹了利用 assets 中的 Data Set 配置針對不同裝置的資原始檔的方法。

? Swift vs. Kotlin — the differences in memory management

本文對比了 Kotlin 和 Swift 如何進行記憶體管理。Kotlin 使用了基於 CMS 演算法的垃圾回收,而 Swift 則使用了 ARC。本文沒有拘泥於過多底層細節,而是用平白的語言介紹了兩者的區別。是一篇入門開發者也能閱讀學習的文章。

? What’s New in Swift 4.2?

Raywenderlich 出品的 Swift 4.2 更新內容總結,功能示例程式碼非常齊全,而且還介紹了 SE-0193 跨模組行內函數的提案以及 SPM 的一些小更新就,目前已有的更新總結文章對於這兩個方面提到的比較少,所以可以重點看一下這兩個小節。

? Non Empty

在 Swift 裡很多時候你明明知道陣列不為空,但還是需要為 first 或者 last 之類的屬性進行解包才行,更好的方式應該是構造一種非空集合型別去進行約束。

Swift 教學網站 PointFree 最近就開源了一個 NonEmpty 庫,通過給集合型別加上一層封裝,讓我們可以在型別安全的情況下,更加方便的使用非空陣列,避免多餘的解包。

? 幫助你做一個更好的軟體架構師

何謂"架構",架構師的工作是什麼,這是長久以來大家一直在討論的問題。本文是作者通過對軟體架構的本質的思考,總結出若干條軟體架構師必備的技能,從而提出個人的方法論。作者認為對於軟體架構師而言,有以下10個點是必須要考慮的

  • 軟體設計:在合適的設計模式中選擇,並制定出適合團隊的方案
  • 方向選擇:通過多方面的評估,根據自己的能力選擇團隊前進的方向
  • 方案簡化:最簡單的方案往往就是最合適的方案
  • 堅持編碼:站在別人的角度看問題會更好
  • 文件:如果可以的話,儘量採用工具自動生成文件
  • 溝通力:好的溝通能力有助於方案落地
  • 前瞻性:具有前瞻性的軟體架構生命週期會很長
  • 價效比:制訂方案的時候需要考慮方案的投入和收益是否在合理的範圍
  • 諮詢輔導:通過大量的培訓幫助成員提高技術水平
  • 營銷手段:高明的營銷手段能讓大家的目標一致,達到事半功倍的效果

? 美團外賣iOS多端複用的推動、支撐與思考

前兩年,元件化的話題在iOS業界可以說是非常火。元件的通訊解耦方案,是runtime,還是openURL,又或者protocol方案,元件怎麼進行包的管理等等討論的非常多,很多大牛以及公司都給出了自己的答案。我在工作中也在團隊中進行了元件化的一些探索。在整個實踐過程中,我發現,最重要的其實並不是上面提到的這些,而是對現有工程更好的分層,尤其是對於要支撐部門多個App的場景下,基礎庫的下沉,如何設計去提高元件的複用程度從而帶來整體開發效率的提升,這個在我看來可能是最重要的,而相反的是,這部分的文章並不多。這次美團的這篇文章詳細敘述了這一塊的實踐和思考,我覺得各位在有想法進行元件化的時候,不妨先看下這篇文章。

工具

Test Drive

在 playground 上快速嘗試一個 Swift Pod 庫或框架。例如使用命令 testdrive Kingfisher,即會新建一個整合了 Kingfisher 的 playground,提升體驗各種庫和框架的效率。

程式碼

Sift app - 實時監測手機所有 App 的網路情況

Sift 是一個開源 App,可以監測手機上的所有網路請求,根據規則遮蔽請求,最重要的是:可以作為除錯工具,在手機上實時看自己 App 的網路連線狀態。

新一代 Swift ORM: Perfect-CRUD

Perfect-CRUD 是基於 Swift 4 以上版本的關聯式資料庫物件管理系統(ORM),採用Swift 4 Codable (可編碼)協議對映到SQL型別的資料庫表格。其採用了一種豐富多樣又簡潔明瞭的表達形式,通過型別模板(Generics)、欄位路徑(KeyPath)和可編碼(Codable)的實現方式來確保編譯階段對資料型別的安全檢查。 CRUD 是鏈式操作的(每個操作的結果都是可以繼續作為參考進行下一步操作),它還提供了一個非同步的日誌系統用於記錄錯誤以及每一條 SQL 語句。 有興趣的可以到 Perfect-CRUD 下載原始碼體驗一番~

Lynx - 又一個跨平臺開發框架

Lynx 是一個使用 Javascript 來構建 Android 和 iOS 應用程式的跨平臺開發框架。Lynx 首選 Vue.js 作為開發框架,通過適配也可以使用其他前端框架進行開發。Lynx 是直接使用系統 UI 來進行渲染的,同時也支援使用 CSS 進行排版。據文件介紹,Lynx 不僅保留了類似 React Native 的動態特性和開發體驗,還與 Flutter 有著相同流暢的效能體驗。目前專案還處於 alpha 階段,喜歡嚐鮮的同學可以跑下工程的 demo 進行體驗,對跨平臺開發感興趣的可以持續關注。

ZHNJSBox - 乞丐版JSBox

iOS 內建了 JavaScriptCore(戴銘前輩的『深入剖析 JavaScriptCore』為它作了很細緻的分析),這為 JavaScript 與 Native 互動提供了很便利的基礎。目前業內諸多跨平臺方案,如 Weex 和 ReactNative 的 iOS 版本也都是通過 JavaScriptCore 實現的,還有一些動態化方案,如 JSPatch 等也是基於此。JSBox 是 iOS 上基於 JavaScript 的可擴充套件效率利器,它的 JavaScript 與 Native 間的通訊同樣也是依賴於 JavaScriptCore。

ZHNJSBox 是一名 JSBox 深度使用者為研究其實現而寫的一個小專案,實現過程記錄在了『如何實現一個乞丐版 JSBox』一文中,該文還談到了實現中遇到的一些技術瓶頸和如何借鑑 JSPatch 和 ReactNative 這類開源框架解決這些技術問題。如果對於如何利用 JavaScriptCore 搭建自己的動態化系統感興趣,又苦於無從下手的話,這個開源專案是一個不錯的入門選擇。最後,如果僅是對 JSBox 實現原理充滿好奇的話,這裡再次推薦鍾穎小專欄內關於 JSBox 的幾篇文章 - 『JavaScriptCore 與 Promise 那點事』、『使用 JavaScript 來寫 Masonry 程式碼』以及『使用純 JavaScript 編寫 iOS 介面』。

Swift 4.2 功能 Playground 全展示

Ole Begemann 大神出品的 What's New in Swift 系列,使用 Playground 為我們展示 Swift 4.2 的所有新特性,讓大家可以直接上手感受。需要注意的是,現在 Swift 4.2 還在開發中,大家要使用的話需要安裝 Swift 4.2 的工具鏈或者使用 Xcode 10.0 beta。

iOS 應用逆向與安全

@Alone_Monkey 的iOS逆向方面的新書,讓讀者不僅僅侷限在各種逆向工具的使用上,而是從全域性的角度,從原理的角度,來了解逆向與安全這個領域,並且還因為深入到了程式執行的本質從而加深更多iOS開發方面的理解。全書開篇1-3章,快速上手介紹了一些基礎概念,逆向工具的使用。4-6章則全面系統的進行了知識儲備與原理進階。7-8章帶著大家進行逆向實戰與安全防護。非常推薦對逆向工程有興趣的朋友們入手學習。

附帶知識小集團隊 @Lefe_x 的讀書筆記一則:《iOS 應用逆向與安全》讀後感,方便大家更好的初步瞭解書的全貌,不過還是推薦入手一本系統性的學習一下。

內推

位元組跳動 北京 iOS 團隊持續招人中

這是一家非常年輕的創業公司,充滿活力與激情,只招優秀的人,一起做有挑戰的事情。直接內推可以將簡歷及心儀崗位傳送至我的郵箱 raozhizhen@bytedance.com,或者新增我的微信 jingmu1994 瞭解更多公司資訊。有需要的我也可以直接幫你對接技術 Leader 詳聊。

深圳頭條研發中心誠招各路 iOS 好手一起做取悅自己的專案

如想了解更多深圳頭條的資訊,可以加小T微信:tomtan,切磋技術和聊情懷都可以喔~~~~

杭州/廣州/深圳 奇志科技招聘 iOS、前端

奇志科技自 2016 年起通過行業無人機協同工作流 Mesh 進入物聯網與人工智慧領域, 併成功為房地產、建築、測繪、電力巡檢等行業提供無人機解決方案。Mesh 在運用 yarn, rollup, vue 等技術棧的同時,利用 Couchbase 設計多端資料同步方案,並深入研究 React Native。也可以微博上私信 @沒故事的卓同學 瞭解。

百度教育事業部招 iOS 開發

部門下面有百度閱讀,百度文庫,百度愛聽等 App 產品。團隊技術氛圍濃厚,有興趣的同學歡迎將簡歷傳送到我的郵箱:lizelei@baidu.com。

上海-加入即刻

即刻 iOS 團隊從一開始就使用純 Swift 開發,至今已有三年多時間,是國內較早大規模使用 Swift 的團隊。我們比較偏愛 RxSwift 和 Texture 等框架,追求和最優秀的工程師一起,用最高的標準做用起來最爽的 app。 如果你認識聰明勤奮、膽大心細、有追求的工程師,那就來加入我們吧!任何推薦或簡歷可直接發給Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh

關注我們

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

老司機 iOS 週報 #25 | 2018-07-02

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

本期編輯

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

說明

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

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

相關文章