老司機 iOS 週報 #53 | 2019-01-21

老司機iOS週報發表於2019-01-21

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

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

新聞

熱修復、生態、混合工程 | Flutter 2019 產品路線圖正式公佈

Flutter 的 2019 產品線路圖已正式公佈,熱修復、生態、混合工程,可謂精確打擊現有的痛處。特別是熱更新,不過更多細節要等到今年的 Google I/O 大會。

文章

? ? Functional networking in Swift

一篇非常不錯的、手把手教學的 Swift 函數語言程式設計教程。通過使用 Swift 的函式式特性以及 Future 和 Promise 的思想,一步步的把一個常見的網路請求模型改造得非常優雅,並且整個改造的過程,一步步的減少型別,一步步的減少副作用,使用無狀態的函式組合來實現邏輯。從這篇文章也可以看到,函數語言程式設計最重要的是思想,而不是某個具體的庫。當我們學會了思想,即便不依賴任何第三方庫,我們也可以快速搭建出很 pure,很優雅的架構。

? ? 關於 Flutter Layout 你應該知道的

本文介紹了 Flutter 的幾種佈局方式以及需要注意的問題,介紹了 Unbounded ConstraintsFlexStack 等。瞭解文中所提到的這些,基本日常使用 Flutter 關於佈局方面的也就夠用了。

? Xcode tips and tricks – part one

本文是 Xcode tips and tricks 系列的第一個合輯,包含了 10 個使用 Xcode 的小技巧。每個小技巧都配有簡潔的文字和一個小視訊,小視訊長度都不超過 20 秒。用這種形式學習小技巧,效果非常不錯,簡潔直觀,一目瞭然,希望作者一直更新下去。本篇文章不需要翻牆,但觀看視訊需要翻牆。

? swift-sh

Swift 有一個活躍的社群,現在帶來了 swift-sh 以供實現指令碼功能,同時提供了包管理,且在 GitHub 中開源,見 mxcl/swift-sh

  • 通過註釋 import DeckOfPlayingCards // @NSHipster ~> 4.0.0 引入 Github 中 NSHipster 中的 DeckOfPlayingCards 包。
  • 可以指定依賴的 remote 地址,import Remote // https://example.com/Remote.git
  • #!/usr/bin/swift sh 指令碼中宣告執行方式,swift sh,系統在執行的時候,會去尋找 swift-sh 的執行。
  • swift-sh 使用內建 eject 命令簡化從指令碼到包的轉換,$ swift sh eject ./bridge

當前的限制:

  • 缺乏從外部模組匯入單個宣告。

? High Performance Numeric Programming with Swift: Explorations and Reflections

利用 Swift 進行數學程式設計並不是一個很熱門的領域,例如訓練機器學習模型,但作者經過幾周的研究與實驗構建了幾個數學庫,可以達到與精心優化過的向量化 C 語言相同的速度,同時還能夠保持簡潔易用。在這篇文章裡,作者會為你展示如何使用 Swift 進行有效的數學程式設計,其中的例子主要都來自 BaseMath 庫,這個庫為 Float 和 Double 型提供了通用的數學函式。

? 客戶端單週發版下的多分支自動化管理與實踐

過去,大多數 App 的發版時間一般為 3 到 4 周,但如今,為了快速驗證產品策略,又或者趕固定時間的運營活動,許多產品的發版節奏較過去變得更快。但快速的發版節奏帶來的必然是並行開發與工程程式碼版本管理的一系列問題。本文介紹了美團團隊是如何來解決這一問題的,並且基於文中提到的流程已經穩定進行了 10 個小版本的開發。

? 【譯】Language Server Protocol

這篇文章是 Language Server Protocol 的譯文版。Matt 大神解釋了什麼是 LSP,LSP 是怎麼工作的,以及潛在的可能帶來的好處,我們可以一起重溫下。

相關閱讀:Swift Development with Visual Studio Code

? iOS 拾遺——為什麼必須在主執行緒操作 UI

我們都知道 UI 相關方法必須在主執行緒呼叫,究其原因的或許不多。

本文由淺入深,從多方面闡述為什麼不能在主執行緒操作 UI。包含 UIKit 非執行緒執行緒安全的設計、UIApplication 事件響應、底層 Core Animation Pipeline。另外,還介紹了 TextureComponentKit 的實現來,希望能夠帶給大家一點思考。

推薦人:杜瑋-Dywane

? React Native 工程中 TSLint 靜態檢查工具的探索之路

程式碼的靜態檢查,可以在程式碼的規範性、安全性、可靠性、可維護性等方面起到重要作用。 iOS 可以使用 Clang Static Analyzer 、 OCLint 等工具, Android 可以使用 CheckStyle、Lint、Findbugs、PMD 等工具,而對使用 TypeScript 的 React Native 工程,TSLint 則成為了主要程式碼靜態檢查的工具。

本文闡述了使用 TSLint 的原因,並對 TSLint 的使用做了詳細的介紹,既可以直接使用 TSLint 的規則,也可以自定義編寫 TSLint 規則。使用 TSLint 後可以有效規避一些低階錯誤,同時可以快速定位問題程式碼,將開發狀態從“亡羊補牢”進化到“防患未然”。

? ? Generate & Host your iOS Documentation

程式碼註釋和說明文件對於我們維護和使用類庫來講,都是很有用的。很多時候我們也都是通過匯出程式碼註釋作為文件,因為這樣能減少重複編寫文件帶來的額外工作量,也能避免程式碼和文件描述不一致帶來的坑。

本文就介紹了一款能夠從 Swift 和 Objective-C 程式碼中提取註釋來生成 HTML 格式文件的命令列工具 —— Jazzy;同時也介紹瞭如何通過 Travis CI 來自動生成和部署文件到 GitHub Pages,保證了程式碼和文件的及時同步。這個思路完全可以用到公司內部的私有工作流程當中,通過工具和自動化提高工作效率。

? 不同 WKWebView 之間實現瀏覽狀態隔離

很多時候面對 webView 相關的登入狀態,大家都是習慣一旦在一個 webView 進行了登入,在建立新的 webView 開啟新的頁面應該也能做到自動登入同步,這是一個比較常見的使用者場景。但本文的作者所面對的場景恰恰是登陸隔離,即一個 webView 保持了登入,其他 webView 不會自動登入,面對這個需求,大家可以看看作者在這裡面的研究與探索。

? OBJECT SERIALIZATION IN IOS

在這篇文章中,作者嘗試將關於 iOS 開發中主要格式和資料序列化型別的知識系統化。還將 ObjC(NSCoding)與 Swift 4(Codable)的方法進行比較,並列出一些特定的用例,例如它們之間的互操作以及使用複雜物件圖的能力。

  • 序列化作為一個單獨的過程
  • NSCoding
  • NSCoder 和 NSKeyedArchiver
  • JSON
  • PLIST
  • 其他格式
  • Codable
  • 一些基準和比較
  • NSKeyedArchiver 編碼可編碼
  • 編碼複雜的物件圖
  • Codable 作為 NSCoding 的替代品(作為結論)

設計

「Keep 設計開發語言」實踐與思考

其實這篇文章並不是說程式設計的,但是依然值得程式設計師們讀一讀。為什麼呢?因為:

  1. 你有多少次和 UX 發生了爭執,原因是 UX 不停的改設計?
  2. 你有多少次搞不清楚 UI 中元件的佈局,大小,對話方塊的設計要怎麼樣,然後只能不停的去問 UX 或者 PM?
  3. 你有多少次因為程式碼沒有很好的模組化不得寫別人寫過的重複 UI 元件而加班?

那就是時候在公司內部和 UX 團隊一起建立起一套完整的屬於你們的設計語言了。這不僅是為了你們的產品質量,更是減少重複勞動,解放程式設計師的最佳方案。

什麼?你問我怎麼開始搞?那還不快看看這篇來自 Keep 團隊的文章參考參考?趕緊的。

工具

Bagel

Bagel 是一個輕量級的原生 iOS 網路偵錯程式。它的方便之處在於不需要使用證書和設定代理。只要將 iOS 裝置和 Mac 電腦連線到同一個網路,就可以在 Bagel 的 Mac 客戶端檢視當前在 iOS 裝置上執行的 APP 的網路通訊情況。

awesome-mac

無論你是 macOS 小白,還是 macOS 的高階玩家,你總能從 awesome-mac 的軟體列表中找到一些你沒有見到過的實用軟體工具推薦。這份列表來自廣大開發者的多年積累和精品推薦。它涵蓋了日常生活至開發軟體推薦一應俱全。

音視訊

ggtalk | 狹義跳槽論:面試官,大廠新人和準備起跳的某 C

本期 ggtalk 聊了程式設計師非常喜聞樂見的話題,採訪了翻譯組最近剛跳槽或者準備跳槽的三位同學,聊聊為什麼跳槽,跳槽的主要考慮是什麼,收益和風險如何權衡。聽下來感覺很有共鳴,三位同學遇到的絕大多數情況其實其他程式設計師也會遇到。最近有跳槽想法的同學不妨可以參考。

Swift Community Podcast #1

兩個社群大 V John SundellGarric Nahapetian 加上 Swift 創始人之一 Chris Lattner,他們開始了一檔全新的部落格節目,主講 Swift 相關的各種內容。

第一期主要講了這個節目開始的緣由和各自開始鍾情於 Swift 的一些小故事。第二期的話題正在徵集中,目前評論區裡已經有人提出了 TensorFlow / Scripting / Concurrency 等熱門話題,大家有感興趣的話題也可以去貢獻一下。

一起來開發泊學 App 吧

如果你正在自學使用 Swift 做 iOS 開發,並期望找到一份相關的工作,但卻苦於沒有專案練手和熟悉整個 App 的開發流程。或者你十分嚮往成為一個獨立開發者,但又不知從何開始。又或者你想看看 Swift 充當服務端開發語言時會有怎麼樣的表現。那小編十分推薦你看看泊學上的這個系列視訊,你得到的會遠比一些培訓班得到的多。目前已經推出以下 4 個系列,且內容仍在持續更新中:

  • 設計 iPhone 版泊學 App:基於 Apple 官方的 iOS design guideline,我們用 Sketch 從零開始設計泊學自己的 iOS App。在這個真實的專案中,瞭解 Sketch 的使用經驗和常用外掛。
  • Vapor Up and Running:如果,你已經掌握了 Swift 程式語言,再用它學習服務端開發,就變成了一個價效比很高的事情。這個系列裡,我們會從零開始,基於 Vapor,詳細地講述每一個服務端開發領域常用的技術場景。
  • Vapor Fluent:在這個系列裡,我們會實現一個類似論壇的 App。通過這個過程,來了解 Vapor 中的 Fluent 元件。通過它,我們就可以無需瞭解 SQL 的細節,而是用 Swift 的方式和資料庫打交道。
  • 基於 MVVM 構建泊學 App:在這個系列裡,我們以實現 Boxue App 舉例,以一個獨立開發者的視角,儘可能在程式碼的可維護性、可測試性、可重用性以及可協作性,達成讓自己滿意的實踐。

內推

關注我們

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

老司機 iOS 週報 #53 | 2019-01-21

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

本期編輯

@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@Parsifal@aaaron7@kyo@tom510230@anotheren@水水@looping@老老老老老老老驢@小非86@邦ben@紅紙@含笑飲砒霜@JimQ@XanderXu@老峰@zvving@J_Knight_

說明

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

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

相關文章