老司機 iOS 週報 #46 | 2018-12-03

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

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

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

新聞

Apple 舉辦程式設計一小時活動

在 12 月 1 日至 14 日期間,Apple 將在全國的 Apple Store 零售店舉辦「程式設計一小時」活動,現在已開放報名。你將有機會從程式設計基礎知識入手,用 Swift 語言寫程式碼,為機器人程式設計。也許這一小時的課程,將開啟你對程式設計一生的熱愛。

App Store Connect Holiday Schedule

因聖誕假期,App Store 將在 12 月 23 日至 27 日停止應用稽核。

文章

? Animations are assets: using Core Animation archives on iOS

作者在逆向過程中發現了 Animations 也可以作為資源歸檔,並且在2016年的時候已經上線了一款使用該技術的 APP。 簡單而言,就是將 Core Animation 新增完動畫效果的 layer 利用 NSKeyedArchiver/NSKeyedUnarchiver 進行歸檔,然後在 APP 需要動畫的時候進行載入,文中附有 Demo

  • 使用 Kite軟體 進行方便動畫的製作,並且匯出 CAAR 檔案(也可以自行程式碼 archiver 後匯出)。
  • 因為匯出的檔案是一個 CoreAnimation layer tree,你可以實現顏色改變,形變等 CoreAnimation layer 的動畫效果。
  • CAAR 檔案獨立,意味著你可以放在 Asset CatalogBundle,甚至伺服器下發。
  • 不需要依賴另外的第三方動畫框架。

延展閱讀:

? iOS 12 Password Tools: Improving User Security and Experience

在本教程中,您將使用這些 iOS 12 安全工具,使您的使用者能夠:

  • 在您的網站和您的應用之間共享和同步密碼。
  • 儲存並更新iOS密碼。
  • 自動生成安全密碼。
  • 訪問通過簡訊傳送的驗證安全程式碼,無需離開應用。

? Extending optionals in Swift

Swift 中的可選值實際是定義了一個 Optional<Wrapped> 列舉,所以我們可以通過擴充套件列舉,讓我們以一種更好的方式處理可選值。

我們可以給列舉新增一個擴充套件方法,當值為 nil 的時候丟擲 error,直接將方法接入到呼叫末尾,則能輕鬆將缺失值轉換為一個錯誤。

當然你也可以發揮更多想象力,新增擴充套件將值的邏輯判斷程式碼、型別匹配程式碼等等操作封裝起來,最終得到一個更好,更容易閱讀的呼叫鏈。

? When to use UserDefaults, Keychain, or Core Data

本文總結了我們開發過程中常用的幾種資料儲存方式的使用場景,以及它們的使用方法和注意點。都是比較初級的知識,但作者寫得很詳細,總結的也很到位。

  • UserDefaults

    用來儲存不敏感的少量資料,比如需要持久化的使用者設定、遊戲分數、播放的歌曲名等。

  • Keychain

    用來儲存相對敏感的少量資料,比如使用者密碼、內購狀態、令牌金鑰等。

  • Core Data

    用來儲存資料量大的列表、關係型資料,以及需要查詢和篩選的資料,比如 Todo 列表、文章評論等。

? A Comparison of Swift and Kotlin Languages

儘管 Swift 和 Kotlin 在語法上有太多相似的地方,但也仍然有很多核心特性上的差異。本文重點介紹了 Swift 和 Kotlin 之間的異同。

從程式碼風格和語法層面詳細對比了屬性,資料結構,方法,閉包,可選型別,流程控制,類,擴充套件,協議,功能性語法等重要語言特性的相似點和不同點。同時推薦了許多其他對比 Swift 和 Kotlin 的文章。

? 手把手教你給企業微信 Mac 客戶端去除水印

目前,許多公司使用了企業微信作為內部聊天工具,既然是企業級的,免不了介面會有水印,這可以使公司的內部資訊被員工截圖散播出去時候可以有效的溯源等等。

水印有兩種情況,一種是在客戶端合成的,另一種是 server 下發的圖片就帶有水印。前者通過反編譯客戶端進行去除,而後者相對較難,只能通過影象技術去做。企業微信 Mac 的客戶端水印就屬於前者。

所以,文中筆者就嘗試反編譯的手段成功去除了水印。不過,本文更適合作為反編譯的實戰教學文章來觀看,一方面是截圖公司的資訊散佈出去本事也並不好,另一方面是不能保證微信企業客戶端沒有暗水印。

? Evaluating SwiftSyntax for use in SwiftLint

之前 SwiftLint 是基於 SourceKit 封裝了一套 API 去處理語法規則的。現在 SwiftSyntax 出來之後,本來打算使用它去簡化之前的語法規則,結果發現執行效率竟然變低了。文中筆者給出了具體原因:SwiftSyntax 對於每個檔案解析都新開一個 Swift 編譯器例項拖慢了整體速度。

? 解讀 App Store 稽核黑箱政策 —— 遠沒有你想象的那麼邪惡

作者在 App Store 上架了 15 款應用,與 App Store 稽核的往來超過幾百次,在這篇文章裡,作者分享了他對 App Store 的理解和看法,具體包括 App Store 採用黑箱稽核的原因、為何難以得到清楚的答覆、雙標情況以及對於 App Store 稽核的幾點建議。

工具

ReadyForBAT - iOS 面試準備之思維導圖

作者在學習完慕課網 iOS 面試實戰專案後利用思維導圖做了總結。這套導圖覆蓋面較廣,可以給正在跳槽或者準備年後跳槽的各位同行用作參考,好好梳理一遍自己的知識體系。

Komondor - Git Hooks for Swift projects

Komondor 是一款幫助簡化 Git Hook 設定的工具,它依賴於 Swift Package Manager 的執行,只要在 Package.swift 里加上依賴,然後像這樣去指定 hook 就可以完成設定:

import PackageConfig

let config = PackageConfig([
    "komondor": [
        "pre-push": "swift test",
        "pre-commit": [
            "swift test",
            "swift run swiftFormat .",
            "swift run swiftlint autocorrect --path Sources/",
            "git add .",
        ],
    ],
])
複製程式碼

程式碼

appstoreconnect-swift-sdk

上個月蘋果終於將 WWDC 2018 裡提到的 App Store Connect API 開放給廣大開發者。這是一個基於 Swift 編寫的 SDK,可以讓開發者方便地使用蘋果開放的這些介面。

音視訊

ggtalk | 聊聊 Swift 這四年(上)

Swift 自第一次推出到現在,已經有了四年的時間。這四年語言本身經過了很多發展,很多改變,而國內的 iOS 開發行業,Swift 開發者的生活和工作,也發生了很多變化。從 14,15年的黃金時代到16年的 ‘iOS 沒人要了’,再到18年的 ‘iOS 又有人要了’,今年,Swift 5.0 終於提出要把 ABI 穩定放在首位,這應該算一個 Swift 重要的一個里程碑。在這樣一個時間點,ggtalk 請了幾個使用 Swift 的程式設計師,一起聊了聊 Swift 的這四年(ggtalk 是國內 Swift 社群 SwiftGG 推出的程式設計師閒聊節目)。有空的時候可以聽聽,相信同樣寫 Swift 的你,會有共鳴。

內推

關注我們

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

老司機 iOS 週報 #46 | 2018-12-03

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

本期編輯

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

說明

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

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

相關文章