老司機 iOS 週報 #78 | 2019.08.05

老司機iOS週報發表於2019-08-05

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

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

新手推薦

? ? swift-best-practices

隨著 Swift 的穩定,越來越多的專案開始嘗試 Swift 這門「新」的語言,當然會有一部分新手不太清楚如何正確的在專案中使用 Swift。swift-best-practices 就告訴了你答案。內容包括但不侷限於這幾點:基礎 MVVM 結構、通用控制器型別、文件的編寫等。

? iOS 開發輿圖

@老峰:本文是來自戴銘的 iOS 開發全景圖以及一些相關資料整理,成體系地羅列了 iOS 開發的知識點與技能棧,方便我們在日常開發中查漏補缺,主要包括以下內容:

  • iOS 基礎:列表、佈局、圖示、圖形、多媒體、AppServices、動畫
  • iOS 系統:XUN、dyld、Mach-O
  • 程式語言
  • 開發工具
  • 計算機基礎
  • 通用知識
  • 視野

文章

? ? Deriving Reactive from Imperative: An Introduction to Duals

@蓮叔:Swift 的函數語言程式設計從 Swift 語言釋出之初、宣佈支援 First Class Function 開始,就一直備受關注,開源社群陸續貢獻了 RAC4,RxSwift 等基於 Swift 函式式特性實現的、方便使用者更輕鬆的在日常的業務開發中應用函式式特性的開發框架。最近 Apple 官方推出了 Combine 框架,給社群增加了更多的信心。

雖然如此,但很多同學對函數語言程式設計仍然覺得雲裡霧裡,本篇文章開闢了一個新的視角,對比了指令式程式設計與函數語言程式設計的其中一個分支:響應式程式設計, 並從函數語言程式設計的角度,論證了一定程度上,響應式程式設計和指令式程式設計是對偶關係。作者首先從範疇輪的角度解釋了什麼叫對偶,並基於指令式程式設計中的 IteratorProtol 以及 Sequence,來對比響應式程式設計中的 Subscriber 和 Publisher,並用之前對於對偶的定義來論證了他們存在的對偶關係。

整篇文章視角新穎,能夠帶給人很多思考,讀起來不算輕鬆,建議花時間消化消化。

? 分析一個 App 需要的技術手段

含笑飲砒霜:有時候看見喜歡的 App 可能會想要對它的實現一探究竟,本文作者以微信為例,站在逆向的角度,列舉了分析一個 App 所需要的技術手段,包括:

  • 砸殼 - ipa 獲取
  • 手機越獄
  • CaptainHook Hook 程式碼
  • Logos 語法
  • 查詢可執行檔案技巧
  • class-dump 使用
  • Cycript 除錯程式
  • MachOView
  • 在 Cycript 和 LLDB 中使用私有的方法除錯
  • 使用 NSInvocation 呼叫方法
  • 檢視 App 中的字串
  • UIDebug 工具

使用上述技術手段,可以獲取到 App 的相關資訊,包括:

  • 標頭檔案
  • 第三方庫
  • UI 檢視
  • 繼承層級
  • 資料庫設計
  • 沙盒目錄
  • Pod 整合
  • 檢視網路請求資料
  • 檢視動態庫

推薦閱讀

? iOS Memory 記憶體詳解

@J_Knight_:本文以 iOS 記憶體作為主題,以一般的作業系統的記憶體機制、iOS 系統記憶體、iOS APP 記憶體管理等三個層面進行了介紹。在文章後面還提供了一些記憶體分析的方法以及參考資料。想比較全面瞭解 iOS 記憶體相關知識的讀者可以看一下這篇文章。

? Rule-based logic in Swift

@享耳先森:對於系統設計而言,只考慮技術架構的話其實相對簡單(比如使用 MVVM 還是其他架構模式),雖然架構模式非常重要,但我們還是可以通過對一些次要程式碼或結構進行改進來提升程式碼質量,所謂見微知著。本文通過 URL 匹配這一點入手,介紹如何將原來難以維護的程式碼抽象出一些規則來進行重構。

? Swift 5 之後 "Method Swizzling"?

@四娘:Swift 5.1 裡新增了一個私有功能叫做 Dynamic Method Replacement,可以簡單地理解為一個型別安全的 Method Swizzle。

瓜神在這篇文章裡給我們介紹了這個功能的使用方法以及內部的實現,並且通過閱讀原始碼解決了連環 Hook 失效的問題。

工具

? iOS Continuous Integration with GitLab CI, Fastlane & OTA Installation

@水水: 本文介紹了基於 GitLab 的持續整合、Fastlane、無線下載安裝。在本文中,我們將討論的點有:

  • 為什麼選擇 Gitlab?
  • Gitlab CI 和 Runner
  • Gitlab Runner 安裝
  • Fastlane 簡介
  • CocoaPods,Bundler 和 Ruby gems 許可權
  • 配置 Fastlane
  • 為我們的 TestProject 配置Gitlab CI
  • 來自 Gitlab 的無線 IPA 安裝

值得一提的是,Gitlab.com 為我們提供了免費的 CI。希望本文介紹的工具對正在做持續整合的團隊或個人有所助益。

Swift 5 for Android is here

一份程式碼,多端執行一直是我們移動端非常關注的點,業界也有很多不同的方案,如 Flutter、Qt、React Native、Weex 等等,而這些大多是採用 C++ 或者 JS 作為開發語言。Swfit 作為蘋果力推的開發語言,社群成員從一開始就希望它可以移植到更多的平臺,像之前 Github 上就有用 Swfit 來開發 web 的 demo。如今,SCADE 為我們帶來了 Swift for Android,它使用 iOS 和 Android 各自的 Native 控制元件,保持了平臺 UI 的差異性,然後通過統一的 Swfit API 進行呼叫。同時,它的圖形引擎支援很多動畫效果,並且在螢幕適配上也很簡單,這可以讓我們開發更加複雜的應用。

程式碼

SwiftUIX: An extension to the standard SwiftUI library.

@張嘉夫:SwiftUI 標準庫的擴充套件,力求完善尚未成熟的 SwiftUI,提供了大量元件、擴充套件和工具。

apple_bleee

@anotheren:這是一份通過藍芽/Wi-Fi獲取 iPhone 使用者資訊程式碼示例,攻擊者可以在特定條件下,獲取到受害者的部分裝置資訊甚至手機號碼。嚴格的來說這不是一種系統漏洞,這是 Apple 生態的一部分,這種東西一方面能夠使人享受整個 Apple 生態圈的便利,但是另一方面也會造成少數竊取個人隱私的可能。具體也可以看看少數派的這篇文章

音視訊

? 用 Flutter 開發 iOS 應用

@CrazyCoderShi:Google 官方為了能讓 iOS 開發出身的同學用上 Flutter 真的是操碎了心,用盡了辦法。這次 Google 官方在 B 站釋出了一個視訊,內容是講解如何用 Flutter 開發 iOS 應用,由官方的兩名工程師講解,不僅僅講解技術,更帶有不少平臺設計美學講解。喜歡視訊學習的同學不要錯過,彈幕和評論也很精彩喲?

內推

老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。

如果你想找工作,點這裡:www.yuque.com/iosalliance…

如果你想招人,點這裡:www.yuque.com/iosalliance…

當然,也歡迎你關注我們每一期的週報,我們會在每期週報底部及時更新編輯內推崗位。

關注我們

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

老司機 iOS 週報 #78 | 2019.08.05

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

說明

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

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

相關文章