老司機 iOS 週報 #52 | 2019-01-14

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

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

新聞

GitHub 宣佈建立私有倉庫免費且不限量

微軟在今年 6 月收購了 GitHub,而在半年後,它給廣大開發者帶來了第一個福音 - 私有倉庫轉為免費且不限量。但值得一提的是,私有倉庫目前最多僅支援 3 個協作者,如果超過 3 個,仍然需要購買付費服務。

另外,在個人主頁,GitHub 還在本週更新了一個小 feature - 個人主頁的狀態管理。我們可以在自己的主頁為自己設定狀態,包含一個 emoji 以及一句描述。

推薦人:tyrad

Flutter 示範應用現已開源 — 萬物起源 (The History of Everything)

在本月初舉辦的 Flutter Live 活動上,Flutter 團隊向大家展示了一款名為 The History of Everything(萬物起源)的應用,向大家展示了 Flutter 的精美的介面和優秀的效能,現在這款應用的原始碼已經在 GitHub 上開源。這款應用不僅突出了 Flutter 的強大,也展示瞭如何高保真的還原設計師設計並保持原生的應用體驗。它構建了一個精美的時間軸,你可以上下滑動以及任意縮放整個時間軸,時間軸上的歷史事件會隨著縮放跟著消失或者出現。

他們的 2018 年總結

2019 已經過去了2周,相信小夥伴們對於 2018 年都有自己的總結。本期同樣也為大家帶來了小夥伴的年終總結,希望對大家有所幫助。往期 2018 年總結可以查閱 50期51期

文章

? ? It Looks Like You Are Trying to Use a Framework

Frameworks 是打包資源和拆分程式碼的常用方式。拆分 Frameworks 的作用不僅僅是避免構建時的重複編譯,合理的使用 Frameworks,可以讓程式碼庫層次清晰,提升除錯效率,確保程式碼結構保持最大的可重用性。

第一篇文章 包含 Frameworks 相關的基礎知識:

  • 靜態庫
  • 動態庫
  • Frameworks 及其內部結構
  • 在 Xcode 中連結和嵌入 Frameworks
  • 使用 Frameworks 前要考慮的因素
  • 一些方便探索 Frameworks 的命令列工具

第二篇文章 則引導我們在逐步解決構建錯誤的過程中理解 Frameworks,還會介紹 Swift 和 Objective-C 混編時介面間是如何找到對方的。

? ? The Complete Guide to iOS and Swift Job Interviews

這篇文章的作者是 Hacking with Swift 的創始人,文中分享了 iOS 程式設計師找工作的一些心得,值得注意的是,現在 iOS 招聘一般都要求熟悉 Swift 相關知識。

  1. 日常做好一些找工作的準備,譬如寫播客,參加外部的技術交流,參與 GitHub 專案等
  2. 寫一份好的簡歷,讓人知道你過去的工作經歷和價值,注意,複製貼上和假大空的文字描述一點用都沒有
  3. 準備面試,一般最好刷一些面經,也要做好手寫演算法的準備
  4. 面試時平復好緊張的情緒,越緊張越回答不上來問題
  5. 一般公司的面試題在網上都可以看到類似的,不用過於擔心
  6. 初級工程師和高階工程師的面試側重點有些不一樣,不過儘可能地展示一下你的知識深度是沒錯的
  7. 編碼能力現在在面試時都考察得比較多,千萬不要輕視這個事情
  8. 每次面試都做好總結,讓自己在面試中成長

? 開發者如何突破那被限制的視野

儘管作者的一些觀點可能值得商榷,但更多的可以給我們一些指引。文末作者的高度提煉,“輸出倒逼輸入, 只有你真正知道自己要做什麼了, 你學習的方向就會變的異常明確”,更是發人深省。

  1. 自我接納,這是精準學習的前提
  2. 技術儲備,要認識到技術只是一個工具,而工具是可替換的
  3. 動手實踐,轉換視角,學以致用

? 為什麼我覺得 Flutter 短期內不會流行但依然選擇學習它

最近 Flutter 的文章越來越多了,也有越來越多的人去嘗試了 Flutter。有更多的人蔘與到 Flutter 生態中來,對 Google 來說,對 Flutter 團隊來說都是一件樂見之事。

本文作者在自己嘗試了 Flutter 的基礎上,詳細說了自己的開發體驗,也說了自己對 Flutter 的觀點。對於還沒嘗試的同學來說,本文可以提供一個初步的瞭解。

? Swift: memory leak gotcha with 'weak self'

這是一篇挺有意思的文章,講述的是在 Swift 的 closure 多層巢狀中,何時建立弱引用而有可能出現的問題。

相信這個問題,有很多人之前曾經遇到過,或者說曾經思考過那樣的情況應該怎樣處理。有興趣的同學們不妨閱讀。

推薦人:ApolloZhu

? The iOS Menu & Detailing the iOS Menu

這兩篇系列文章講述了 Codea (ipa lua 編輯器) 作者在 iOS 上設計一個 macOS 風格的下拉選單。文章中,可以瞭解到作者一步步的思考過程,以及相關的技術細節想法,例如:毛玻璃效果,貝塞爾繪製圓角,選擇互動動效果等等。同時,程式碼也開源了。

推薦人:ApolloZhu

? State Restoration Tutorial: Getting Started

State Restoration(狀態恢復)是在應用重新啟動時恢復到上一次結束時的狀態。當 APP 切到後臺,很難保證應用不被使用者或系統殺掉。在 iOS 6.0 中,Apple 為我們提供了 UIStateRestoration 來實現應用狀態的保持和恢復。

本文作者通過例項 Pet Finder 向我們展示了應用如何實現狀態恢復,主要有以下幾個步驟:

  1. AppDelegate 中實現 shouldSaveApplicationStateshouldRestoreApplicationState
  2. 設定 views 或 view controllers 恢復識別符號 Restoration ID。
  3. 在需要恢復的 views 或 view controllers 中 實現 encodeRestorableStateWithCoderdecodeRestorableStateWithCoderapplicationFinishedRestoringState 並處理相關的恢復業務邏輯。

另外文中作者也給出了恢復基於程式碼建立的 view controllers 實現方法,狀態恢復尤其適用於恢復使用者草稿狀態的業務場景,有興趣的讀者可以實踐一番。

原文中提供的 Demo 基於 Xcode 7.3、iOS 9.3 和 Swift 2.2,在 Xcode 10 中編譯 Error 99+,編輯在實踐中已對 Demo 進行更新,支援 Swift 4.2。值得注意的是 applicationFinishedRestoringState 是在 viewWillAppear 之後執行,很多資料對此描述有誤。

? ARKit Pods — SCNPath

很多 ARKit 開發者的首選框架是 SceneKit,因為 SceneKit 可以訪問 iOS 的原生功能。SceneKit 提供了一些預設的幾何體,SCNBox、SCNSphere、SCNPyramid 和 SCNShape,但如果你想構建點不一樣的東西,就要深入鑽研來建立自己的幾何體了。作者最新的開源框架用於根據 SCNVector3 點陣列來建立路徑,在這篇文章裡作者用一個實際的例子介紹瞭如何利用開源的 SCNPath pod 來建立路徑。

? Swift Import Declarations

本文中講述了 import 在 Swift 中的使用。

  • 如果 import 複數 module 中有重複的字元,可以使用 ModuleA.func ModuleB.func 來區別呼叫。
  • 可以指定引入某個 Module 的單一方法、變數等,如:import func Module.funcA(第二個為 funcA 型別)。
  • Swift 同名處理優先順序:本地宣告 > 引入指定宣告 > 引入模組。
  • 引入模組中常量,變數的時候,最好使用 import type Module.var 的方式,更好讓其理解作者的意圖。
  • 引入子模組 import Module.subModule,以防止其他子模組的影響,明確使用範圍。(但是並不會是你的程式更快的編譯)。

? [NSMutableAttributedString initWithData:options:documentAttributes:error] 崩潰分析

本文從彙編的角度,逐步定位了 NSMutableAttributedString initWithData:options:documentAttributes:error 概率崩潰的問題,其定位問題的過程、思路和方法值得借鑑。另外文中提到的 優雅解決 iOS 8 UIScrollView delegate EXC_BAD_ACCESS 中的方法也推薦參考。

? Why is there a "lag" in iOS gesture detection near the edges of the screen?

作者分享了一次排查螢幕邊緣手勢延遲 bug 的過程,小編覺得這個 bug 非常有意思,很值得大家花一些時間去了解它,讓大家對手勢有更多一點了解。

? App thinning checklist

本文作者總結了他對 iOS 版的 Microsoft Edge 進行安裝包瘦身時所用到的一些思路、方法和工具,各位可以收藏以便需要做應用瘦身時拿來參考用。文章中提到把監控包大小加入到持續整合環節中是非常值得去實踐的一種做法。

? 餓了麼物流移動端業務可用性監控體系建設

本文介紹了餓了麼物流團隊在移動端業務可用性監控體系建設上的一些探索和實踐,這為有在做可用性監控體系的朋友們提供了一些很好的參考方案和思路。他們把監控體系大致分為了四層,從大盤趨勢到異常實時告警以及使用日誌進行現場還原,同時還可以通過大資料分析業務健康程度。之後分享了一個排查網路層問題的實戰經歷來說明這套監控體系的價值。在文末他們提到了一些目前遇到的問題和接下來的發展方向。

? Implenting Promises in Swift

目前網上很少有 Swift 實現 Promises 相關的文章,所以作者寫了一篇文章分享了相關的內容,並且作者選擇了測試驅動開發,不斷地構建測試,然後再不斷地調整程式碼滿足測試,非常值得一看。

? How to read Apple’s developer documentation

閱讀技術文件是工程師必備的技能之一,但很有趣的是,閱讀技術文件不只是國人入門程式設計的一道坎,其實很多以英語為母語的人也一樣不擅長。Swift 技術網站 Hacking With Swift 過去一年收到最多的文章請求,就是幫助讀者閱讀和理解蘋果的程式碼文件,所以就誕生了這麼一篇文章。

作者首先幫助大家理清技術文件的內容和結構,接著以具體的例子帶著大家一起“查文件”,找到對應的定義,例子和程式碼,最後還鼓勵大家,其實蘋果的文件也有很多不足的地方,大家找不到自己需要的東西的時候也不需要灰心。

? The Many Offline Options for iOS Apps

本文作者比較了 iOS 中的各種儲存資料以達到 App 無網正常使用的方案,根據統計,如果載入速度超過 3 秒,有 40% 的使用者會放棄使用。而在美國,有 15% 的 App 使用時間是處於無網狀態下。因此,一個合理的離線執行方案將會為你的 App 帶來更高的使用者留存率。

  • 使用資料庫:Realm、Core Data、Sqlite 等
  • KV 形式存放資料:plist、NSUserDefaults、NSKeyedArchiver、leveldb 等
  • 使用雲資料庫方案:Realm Platform、Firebase 等
  • 考慮一下將使用者離線下的操作重放
  • 通過 React 的方式來監聽資料變化

工具

iOS 模擬器錄屏工具

Xcode 的模擬器自帶有截圖功能,但是並沒有錄屏功能,通常我們需要使用其他的錄屏工具(QuickTime、LICEcap等),但這個工具讓你可以方便地直接使用 Alfred workflow 或者 CLI 去觸發模擬器錄屏。

程式碼

CoreML-in-ARKit

本專案利用 CoreML 執行機器學習模型來識別出攝像頭拍到的物體,並利用 ARKit 為其加上 3D 標籤,實現簡單的 AR 效果。專案程式碼簡單,創意好,非常適合入門,學習如何使用機器學習模型處理圖片及如何在 AR 場景中新增 3D 標籤。蘋果官方也推出了一個類似的官方 Demo:Using Vision in Real Time with ARKit,供大家參考學習。

iOS 混合開發庫(GICXMLLayout)

很多嘗試過前端開發 Vue 開發的 iOS 同學,都感慨用 Vue 開發前端 UI 介面的時候,非常的方便,非常的強大。優秀的佈局能力/資料繫結 MVVM/模板式的開發。如果能在 iOS 裡也能如此方便的進行UI開發,相信也會大幅度提供頁面開發效率,GICXMLLayout 這個庫就是這樣的一個庫。

GICXMLLayout 能幹什麼?有什麼特點?

  • 使用 XML 來描述 UI、動畫、事件繫結、資料繫結。
  • 資料繫結。
  • 支援 MVVM 模式。
  • 優秀的佈局系統。
  • 模板系統。
  • 簡單、優秀的自定義擴充套件能力。
  • 支援 JavaScript。
  • HotRload & HotUpdate。

相關係列文章推薦去作者的掘金專欄, 作者從專案簡介,到原始碼架構,再到新手專案,靈活擴充套件,還有兩篇專案實戰,總共有八九篇文章深入解析 GICXMLLayout,值得深入學習。

音視訊

? 一起來開發泊學 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 舉例,以一個獨立開發者的視角,儘可能在程式碼的可維護性、可測試性、可重用性以及可協作性,達成讓自己滿意的實踐。

? Teahour.fm | #94 與 Hawstein 和左程雲聊演算法和資料結構

這期的 Teahour,講的是很多程式設計師很關心的演算法和資料結構。特別是這一年來,國內各大公司對演算法和資料結構在面試中的考察變得越來越多,重要性也越來越高。

對於 iOS 程式設計師來說,演算法和資料結構則更應該重視。平時用不到的演算法和資料結構,很可能在面試之時成為你的心頭大患。有興趣的同學不妨聽聽這期節目,算是能夠做到有所瞭解。

ggtalk | 創業那點事:逆流而上的泊學

相信絕大多數 Swift 程式設計師都聽過泊學,泊學是一個通過視訊線上學習程式設計的網站。這一期 ggtalk 邀請到了泊學的兩個創始人來聊了聊創業,小編我聽一半就完全被圈粉,秒充會員看了一波視訊。從整個採訪過程中可以看到泊學雖然整個過程做的很不容易,但絲毫不影響兩個創始人獨具匠心的打造體驗超棒的視訊教程。這就是典型的為了要做有意義的事情而做的創業,而不是簡單想著蹭熱度撈一筆。牆裂看好泊學,推薦大家從聽聽這期節目開始,瞭解泊學。

內推

關注我們

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

老司機 iOS 週報 #52 | 2019-01-14

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

本期編輯

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

說明

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

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

相關文章