這周就是春節了,週報在春節期間不會更新,祝大家過個好年。
新聞
Swift 4.1 新增 -Osize
優化模式降低程式碼尺寸
Swift 4.1 將隨 iOS 11.3、Xcode 9.3 一起釋出。Optimization Level
新增 -Osize
模式,降低編譯後程式碼尺寸。按官方描述,啟用 -Osize
後程式碼尺寸將降低 5%-30%,而效能影響可以忽略不計(小於 5%)。
另外,還從 Optimization Level
獨立出 Compilation Mode
,可選 Single File
和 Whole Module
。
iOS 關鍵元件 iBoot
原始碼洩露
有匿名開發者在 GitHub 上傳了 iOS 核心元件
iBoot
的原始碼,iBoot
是 iOS 關鍵的原始碼之一,它確保了作業系統的可信任啟動,換句話說,它是載入 iOS 的程式,是開啟 iPhone 執行的第一個程式,它載入並驗證核心是否被蘋果正確簽名,然後執行,就像 iPhone 的 BIOS 一樣。
Apple 已確認這一事件並表示洩漏的是 iOS 9 的程式碼。
蘋果公司與內蒙古簽訂協議,將在中國國內建設第二個資料中心
蘋果公司將在內蒙古烏蘭察布市,建設中國第二個資料中心,於 2020 年開始投入運營,繼而形成“南貴北烏”兩個資料中心的格局。
文章
iOS KVO crash 自修復技術實現與原理解析
一年前網易杭研的部落格《大白健康系統--iOS APP 執行時 Crash 自動修復系統》引發了很多討論。利用 runtime 動態特性,對一些常見 crash 進行保護:
- unrecognized selector crash
- KVO crash
- NSNotification crash
- NSTimer crash
- Container crash(陣列越界,插 nil 等)
- NSString crash (字串操作的 crash)
- Bad Access crash (野指標)
部落格介紹了實現原理,未公佈程式碼。現在根據小道訊息,網易的這個庫內部並未全面使用,開源計劃已經擱置。社群有熱心群眾出於學習心態,按照文章思路寫了一個類似的程式碼庫:BayMaxProtector 。
本文則針對如何防護 KVO crash 提出新的方案:通過建立雜湊表儲存觀察者、keyPath 的資訊,在物件 dealloc 時進行狀態的更新。
[譯] Swift 演算法學院 - 查詢陣列中第 K 大值
介紹了查詢陣列中第 K 大值的演算法。更多的基於 Swift 的演算法例子可以看 raywenderlich/swift-algorithm-club。
資料結構 & 演算法 in Swift (二):演算法概述和排序演算法
本篇是《資料結構 & 演算法 in Swift》系列連載的第二篇,首先簡單地講解了演算法基礎,包括演算法的概念、時間複雜度與空間複雜度以及遞迴。然後結合 Swift 程式碼實現講解了排序演算法,包括選擇排序、插入排序、歸併排序和快速排序。
iOS 架構之 View 層的架構方案
在前兩年 Casa 分享的 iOS 應用架構談 view 層的組織和呼叫方案 之後,這是圈內現在新鮮出爐的又一篇 view 層架構分析文章。Casa 的文章最後站在更巨集觀的角度去提出 view 層架構模式需要遵循的"拆分三大心法"和"設計四大心法"。
這篇篇幅相對要少一些,該作者從「如何評價一個架構方案」-> 「MVC / MVVM / MVP / VIPER 等幾種主流的架構模式簡析」-> 「團隊內最終的方案」,循序漸進地分享了適合自己團隊的架構方案實踐過程,對於初入架構設計的同學會相對更加友好一些。筆者建議先讀懂這篇文章後,再細細咀嚼 Casa 的文章。
Crash 符號化
作者一共寫了三篇文章,從 基本流程與相關命令 到 symbolicatecrash 原始碼淺析與優化 以及最後的 Mach-O 與 atos,由淺入深的解釋了 iOS Crash 從產生到符號化的整個過程。
Swift 中關於操作符的那些事兒
這篇文章主要是介紹了一個處理 Error 的技巧,通過自定義操作符來簡化錯誤處理的程式碼,沒有複雜的邏輯和抽象,簡單實用,強烈推薦?
WebAssembly 能幹什麼?8 個 WebAssembly 應用案例
WebAssembly 的特點是在瀏覽器裡面他執行的比 js 快,雖然還是一個提案中的技術,但是各大瀏覽器廠商都已經跟進,因此有了很多 WebAssembly 實際應用案例,這篇文章就介紹了 8 個案例,從這裡面的介紹可以看到 WebAssembly 普遍被應用到了這幾個方向
- 將其他語言編譯成 WebAssembly 做到可以在瀏覽器裡執行;
- WebAssembly 在遊戲引擎與圖形渲染方面的運用;
- 是加速原本的 js 程式碼的執行。
[譯]在 Git 中保護 iOS 專案的敏感資訊
如果要開源的程式碼涉及敏感資訊,比如 API Key,HMAC secrets 或密碼,那麼比較好的方式是把它們放在新建的 xcconfig 檔案裡,Git 再忽略這些檔案。 最後新建不把值包含進去的示例配置 xcconfig 檔案。
其它開發者此時只需要將示例配置檔案填值,再重新命名一下即可輕鬆執行不包含敏感資訊的專案。
Swift 4.1 improves Codable with keyDecodingStrategy
Swift 4.0 中增加了 Codable
來方便的解析 Json,然而 Json 作為一個通用的資料格式通常用於和其他平臺互動,其他平臺的命名規範如果不是駝峰式就需要宣告 json key 對映。4.1 中增加了 keyEncodingStrategy
配置兩種常見命名規範的自動轉換:
let jsonString = """
[{
"name": "MacBook Pro",
"screen_size": 15,
"cpu_count": 4
}]
"""
struct Mac: Codable {
var name: String
var screenSize: Int
var cpuCount: Int
}
let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let encoded = try encoder.encode(macs)
複製程式碼
Parallel programming with Swift 1. Basics 2. Operation
第一篇介紹了使用 Swift 進行並行程式設計時的多種方式,從 Process 到更高階的抽象 Operation,如何控制併發的順序,鎖和訊號的使用。
第二篇主要是講 Operation,包括 API,生命週期,依賴以及封裝的介紹。
這一系列由淺入深,配圖清晰,順便推薦一下他們團隊 Flawless 的部落格,裡面有很多技術分享,質量都很高。
漫畫:Git 二分 Debug,火速定位出錯程式碼!
詳細介紹了 Git 提供的二分法除錯工具:git bisect。它可以按照我們選定的 commit 列表,進行二分分割,快速定位出出錯的 commit。來幫我們縮小最小改動的程式碼,從而快速定位問題。作者還採用了漫畫的形式,幫助讀者加深印象。
工具
PodsUpdater--A macOS app which helps you manage dependency releases in your Podfile
一款協助你管理專案中 CocoaPods 依賴的小工具,能夠清晰展示你專案內的依賴版本以及該依賴的最新版本,並提供自動適配相容版本的功能。
分享筆者在使用過程中遇到一個坑,原因是某個比較舊的私有源配置的是 http 的 url,導致出現了fatal: could not read Username for 'http://git.privatesource.com': Device not configured
,即該工具執行 pod repo update
的時候並沒有許可權去拉取你的私有源。解決方式也很簡單,把舊的源裡 url 修改成 ssh 的 url 即可,配置檔案路徑為 /Users/your_username/.cocoapods/repos/-private-podrepo/.git/config
CoreML 模型倉庫
iOS11 所推出的 CoreML 讓 App 開發者可以不用學習瞭解 Deep Learning ,不用親自訓練模型,拿訓練好的模型就可以在 App 裡快速使用。並且搭配開放了幾個視訊識別物體的模型 Object Detect,那麼除了蘋果開放的識別物體模型,現在還有哪些地方可以找到更多的訓練好的 CoreML 模型呢?這裡面介紹 3 個 Link,裡面有很多訓練好的有趣的模型,比如照片轉油畫 / 面部情緒識別 / 人物年齡猜測 / 文章分類 / 文字情緒識別等等,iOS 開發者的福音,可以拿來做一些有趣的個人 idea App
Carbon
Carbon 是一個可以線上將程式碼生成高逼格圖片的工具,它具有以下特點:
- 可從 GitHub gist 直接匯入;
- 高度自定義,可調整語法主題、窗體樣式等引數;
- 分享便捷,一鍵釋出 / 儲存圖片。
GitHub 地址:github.com/dawnlabs/ca…
CTF Wiki
CTF(Capture The Flag,奪旗賽)起源於 1996 年 DEFCON 全球黑客大會,是網路安全技術人員之間的競技比賽。
CTF Wiki 是一個自由的站點,主要包含了 CTF 中的基礎知識、常見題型、解題思路以及常用工具等,可以幫助你更快地瞭解 CTF 競賽以及網路安全相關知識,對安全領域相關知識感興趣的同學千萬不要錯過。
GitHub 地址:github.com/ctf-wiki/ct…
本期編輯
@沒故事的卓同學,@四娘,@mmoaay,@享耳先森,@EyreFree,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal
說明
? 表示需翻牆