老司機 iOS 週報 #50 | 2019-01-02

老司機iOS週報發表於2019-03-03

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

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

新聞

? 我們一週歲了~

這是週報成立一週年的第 50 期,也是我們新年的第 1 期。過去 2018 年裡,在編輯團隊的努力和大家的支援下,我們達成了以下幾點小成就:

  • 一共連續為大家貢獻了 49 期週報
  • GitHub 累計獲得 2000+ star
  • 掘金賬號 收穫大家 8500+ 關注,近 2400 次獲贊,平均每篇約獲贊 40 次,總閱讀數約 12.5w,並從近一個月開始嘗試不定期推送沸點
  • 微博話題 #iOS 週報 共 188w 閱讀
  • SwiftOldDriver 精選 發表 23 篇文章,獲得 255 個訂閱
  • 聯合兄弟團隊 知識小集SwiftGG 翻譯組 共同參與了掘金 WWDC 2018 專題活動,並在近期組織了 iOS 再就業聯盟
  • 週報編輯團隊也不斷成長,目前已有來自一線 iOS 開發的 28 位夥伴加入我們

另外,我們在 12 月初向大家發起了問卷活動,收集大家對週報的建議和希冀,目前我們正在整理和彙總,並儘快在最近幾期週報中根據建議作出調整。祝願週報在 2019 年和大家一起繼續成長~

? 老司機週報x知識小集xSwiftGG:iOS 內推職位召集

最近很多公司的裁員的訊息相信大家都有所耳聞,與此同時也有不少公司逆勢而上在持續招聘技術人員。因此我們三大組織決定牽頭收集一些可靠的招聘,元旦結束後在我們的資訊釋出渠道上釋出 iOS 內推職位專題文章

? 他們的 2018 年總結

2018 已經悄然離開,2019 已經站在我們面前。這一年,相信大家都有收穫,也有過遺憾,這都是常事。下面幾篇文章,是幾位小夥伴自己的年終總結或者是 2018 年 iOS 的技術發展總結,相信看了他們的總結之後,大家也會有所收穫。

文章

? ? The Layer Cake

Flutter 現在有多火,相信已經無需多說。尤其 1.0 版本釋出後,各個廠也都有在進行先關的調研,不少已經在實際專案中使用了。之所以選擇 Flutter,一方面是因為跨平臺,另一方面我相信很大一部分原因是因為其高效的渲染效能。相信很多同學對 Flutter 如何進行渲染的也比較好奇,本文講了 Flutter 的渲染層級及如果工作的,並且在處理負責檢視結構中如何保持高效。本文對於正在學習或使用 Flutter 的同學,在思考 Flutter 的架構以及效能的優化等問題上,會很有幫助。

? Advanced UIView shadow effects using shadowPath

雖然扁平化設計的 iOS 7 捨棄了大量的陰影,但最近幾年陰影正在不斷迴歸,以增加介面的深度。謹慎地使用陰影可以對 UI 中的內容進行區分、增加深度、吸引使用者的視線。這篇文章介紹了用陰影實現的幾種效果,全部通過操作圖層屬性實現。這些效果有的很簡單有的很複雜,希望它們可以激發你的創造力!

? A guide to writing your own iOS CI/CD integration script

FastlaneJenkins 是構建 CI/CD(持續整合/持續部署)工作流的常用工具。本文另闢蹊徑,不使用第三方工具,只基於蘋果的基礎工具鏈構建一個包含編譯、測試、檢查程式碼覆蓋、簽名、分發等相對完整的 CI/CD 工作流。
如果你還不瞭解 CI/CD 原理,不妨對著本文做一遍,相信可以快速掌握其執行過程。

? ISO-8601, YYYY, yyyy, and why your year may be wrong

小寫 yyyy 是我們常用的格式化日期 引數,如果誤寫成大寫 YYYY,會有什麼問題?
大部分情況下,它們似乎沒有區別,但在每年的最後一週,YYYY 又會給我們帶來意外的結果。
本文作者將帶你瞭解 YYYY 對應的 ISO 週日歷,從而真正理解它們的不同。

? 系統學習 iOS 動畫之一:檢視動畫

動畫製作很有趣,可以為使用者介面注入活力。如果使用得當,動畫還可以向使用者傳達資訊,並將使用者注意力吸引到介面的重要部分。

作者學習《iOS Animations by Tutorials》系列筆記共 7 篇包括如下幾部分內容:檢視動畫自動佈局動畫圖層動畫檢視控制器的轉場動畫3D 動畫其它型別的動畫等。

本文是作者系列筆記中的第一篇,文章以例項的形式由淺入深的講解了彈簧動畫、過渡動畫、關鍵幀動畫的實現過程。推薦對動畫感興趣的讀者跟著教程實踐一遍,相信你會有收穫。

? 函數語言程式設計 – 酷炫 Applicative(應用函子)Swift 描述

函數語言程式設計中,三個核心概念分別是 Functor,Applicative 和 Monad。其中,講 Functor 和 Monad 的資料都不少,但 Applicative 一直都處於一個爹不親孃不愛的地位,屬實尷尬。核心原因還是其應用範圍比較有限。本文以 Swift 語言為載體,介紹了 Functor 和 Applicative 的基本知識,講述的方法借鑑了函數語言程式設計領域教學中比較經典的“盒模型”,沒有複雜的數學概念,算是比較不錯的入門教材。最後還找到了一個 Applicative 的應用場景作為例子,對函數語言程式設計感興趣的同學可以仔細閱讀,雖然 Applicative 的應用範圍比較狹窄,但對於一些細分領域的問題,的確可以構造出非常優雅的解決方案。

? 『譯』Hacking Hit Tests

35 期週報我們曾向大家推薦了它的原文,而這周 SwiftGG 則為大家做了翻譯,再次溫習 iOS 系統基於 Hit Test 的觸控事件處理機制。

? How to test iOS networking code the easy way

測試網路層程式碼總是很困難,因為程式碼執行地飛快,並且不好重現。文中給出的方案便是 URLProtocol,一個用於處理特定協議資料的抽象類。你可以編寫一個 URLProtocol 的子類來注入你需要的資料,而無需改變你原有的程式碼,不妨一試。

? ? Building an Interactive Voice App Using Custom Siri Shortcuts in iOS 12

Siri Shortcut 是 Apple 在 iOS 12 中基於 SiriKit 框架引入的新 API。它為開發人員提供了自定義使用者在應用程式中經常使用的活動建立快捷方式的方法。使用者通過向 Siri 發出語音命令來呼叫快捷方式,可以通過記錄與快捷方式關聯的自定義短語來自定義實際短語。你可以實現例如:

  • 訂購一些東西(例如披薩,咖啡,早餐?)
  • 資訊搜尋
  • 連線到任何 API
  • 做我們想要的任何自定義動作
  • 執行 Siri
  • 還有更多…

本文還提供了一系列實現上述功能的參考程式碼,希望能給感興趣的朋友提供幫助。

? GitHub Actions: Continuous Delivery of Swift Packages

GitHub Actions 是 GitHub 在 GitHub Universe 2018 開發者大會上釋出的新功能,它能夠讓開發者直接在 GitHub 上根據特定的事件自動執行預設的任務。

本文記錄了通過構建 Swift Packages 來使用這個功能的整個流程,也總結了使用過程中發現的一些問題。雖然 GitHub Actions 還處於公測階段,但大家對這個功能都表示很看好。因為它能讓每個開源專案都有自己統一開放的自動化工作流程,它使得 GitHub 服務從程式碼託管延伸到整個軟體開發週期,它很有可能會改變大家使用 GitHub 甚至維護開源專案的方式,所以就讓我們拭目以待吧。

? 深入淺出 iOS 編譯

在日常開發中,並不會常用到編譯原理相關的知識,但不代表我們不需要了解它。本文系統的講了 iOS 編譯的各個環節,連簽名環節都有涉及,深入淺出,也比較容易看懂。在編譯原理層面,分為前端和後端,在眾多概念中比較重要的是 Parser 和 CodeGen,瞭解一定的編譯原理相關知識,對我們做更深層次的架構、語法設計會很有幫助。

工具

SwiftRewriter – Swift code formatter using SwiftSyntax

基於 SwiftSyntax 的 Swift 程式碼格式化工具,要求 Swift 4.2 和 Xcode 10。可以方便靈活的定義和組合自己想要的程式碼格式。

Shapeshift

快速讓一組 Swift 檔案相容 iPad 上的 Playground,甚至可以將轉換後的檔案放置在 iCloud Drive 中的 Swift Playground documents 資料夾內,以便立即拿起 iPad 開始程式設計!?

Woodpecker

我們曾在 18 年初的 第 5 期週報 推薦過 Woodpecker 這款工具,它可以在 Mac 上檢視 App 資訊,提高開發測試效率。但現在這款工具 Mac 商店已提供免費下載,免費版本可使用絕大多數功能。

目前功能:

  • 只需一步,即可檢視、修改沙盒檔案;
  • 監控 App 網路 http(s) 請求,無需設定代理;
  • 檢視,修改 UserDefaults;
  • 線上除錯 WebView;
  • 簡單強大的外掛支援。

@張小剛喲 自薦

Code Friend

使用提供的 JavaScript 介面,可以簡單快捷地開發出 Xcode 外掛的 Xcode 外掛。

USB Keyboard

通過 USB 連線 iPhone 到 Mac 後,可以實現在 Mac 端打字,iPhone 上輸入的輸入法應用。

woza

越獄 iOS 的砸殼工具,類似 clutch、dump-decrypted,是 AloneMonkey 開發的 frida-ios-dump 的 node 版本。另外,woza-desktop 是 woza 的桌面版本,實現了“點點滑鼠就能砸殼”的目的。

程式碼

? Stinger

知名 iOS AOP 庫 Aspect 的另一種實現思路。使用 libffi 及解析方法簽名構建殼函式,替換原方法實現以感知方法呼叫和捕獲引數;使用同一 cif 模板及函式指標直接執行原實現和所有切面 block;不使用訊息轉發指標替換原實現,hook 相容性更好;呼叫方法不經過訊息轉發過程,執行原實現及切面程式碼過程中無手動構建 invocation 等,效率更高。

正在實現 hook 單個例項物件。

? LeetCodeAnimation

現在無論是準備參加校招還是社招,怎麼能不去刷刷 LeetCode 呢?但是刷題的過程是枯燥乏味的,而現在廣大程式設計師同胞的福音來了, LeetCodeAnimation 的作者立志將 LeetCode 上所有的題目都用動畫的形式演示出來,相對枯燥的演算法,使用動畫演示將更容易理解銘記。目前已實現了部分演算法,並將持續更新。

音視訊

ggtalk | 創業那點事:聽蓮叔和羊叔回憶崢嶸歲月

這一期內容,對於大多數程式設計師都挺有指導意義,羊叔和蓮叔分享了自己曾經創業的經歷,同時引出了關於程式設計師職業發展話題的討論。面對可能高回報但同樣高風險的創業機會,作為工程師應該如何判斷,如何抉擇,創業公司的股份和期權能不能拿,意味著什麼,這些問題,你都能在節目中找到答案。

內推

關注我們

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

老司機 iOS 週報 #50 | 2019-01-02

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

本期編輯

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

說明

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

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

相關文章