老司機 iOS 週報 #31 | 2018-08-13

老司機iOS週報發表於2018-08-13

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

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

新聞

備受 iOS 開發者喜愛的 raywenderlich 社群全新改版!

raywenderlich 這次進行大改版,為開發者提供更為優質的教程。此次更新主要有:

  • 教程將全部按照主題分類,目前已經有 iOS & Swift tutorialsAndroid & Kotlin tutorialsUnity tutorials 以及 Unreal Engine tutorials 四大類,未來 rw 也將繼續增加新的分類;
  • 每個分類都會有自己的主頁,可以幫助你更快地找到自己所需要的教程;
  • 全新的學習路徑規劃,真正實現從『入門』到『精通』;
  • 個人主頁上線,掌控自己的學習進度;
  • 教程庫,成千上萬的教程資源供你篩選;

WWDC 2018 視訊已經全部配上簡體中文和日文字幕

在早些時候,蘋果已經為所有視訊配上了英文字幕,僅少部分視訊有中文字幕,這次全部都已配上簡體中文和日文字幕。相比去年第一次有中文字幕,今年的又額外增加了日文字幕,看來日語區的 Apple 開發者也不少。如果你對之前的看的某個 Session 還有疑問,不如趁著中文字幕上線的熱乎勁再回顧一遍。

Dart 重啟!Dart 2 正式釋出,目標成為移動與 Web 開發主流語言

Google Dart 產品經理宣佈 Dart 2 正式釋出,這標誌著 Dart 語言的重啟,目標成為主流的移動和 Web 開發語言。同時,Google 還宣佈重構 Dart Web 平臺,這對開發者來說,是一個高效率、高效能和可擴充套件的組合。 Google 稱,Dart 2 的目的有三個:優化語言開發,增強 Google 對 Web 和移動框架的支援能力,將 Google 內部的一些支援 Dart 的工具和元件帶給外部的開發者。

文章

? Guys, REST APIs are not Databases

作為目前最常見的後端設計風格,REST API 已經成為任何專案中不可缺少的一部分。然而在實際使用的時候,開發者很容易把 REST API 設計成直接對資料庫進行操作。

作者在文章中解釋了為什麼直接對資料庫操作是有問題的,同時也給出了自己的對 REST API 設計的一些理解。

? Refactoring Massive App Delegate

每一個 iOS 程式設計師都需要和 AppDelegate 類打交道,App 生命週期的邏輯一般都會放在這個類中進行處理。該文作者提出了一個“Massive App Delegate”的概念,表示當一個 App 越來越複雜,其 AppDelegate 類也會變得越來越龐大並且難以維護,作者分析了一些有名的開源專案並抽取了一些大家喜歡放在 AppDelegate 類中處理的邏輯列表,並且針對性的提出了三個方向:命令模式,組合模式和中介者模式來更好的組織 AppDelegate 中的程式碼,很有參考價值。

? Type inference-powered serialization in Swift

型別推斷是 Swift 作為強型別語言的一個特性。本文介紹了利用泛型實現型別推斷簡化 Codable 解析 JSON 的操作。閱讀本文可以學習到在實踐中如何應用泛型。

? 面試中的個人競爭力

很多人都覺得自己沒有競爭力,那相信這篇專欄會戳到你的痛點,找工作是不可能的,這輩子都不可能找工作,演算法又不會,原理又不懂,只能做一個 github 的搬運工,才能維持會寫程式碼的樣子。

寫簡歷要挑重點,用最簡潔的篇幅,展現出你個人獨一無二的亮點。面試需要多展現自己的思考過程,思考的深度。但這一切都基於過去的積累,就算是再平凡的工作,也能通過發現問題,探尋本源,自驅優化來鍛鍊自己,提升競爭力,從而贏得好機會的青睞。

? 由 NSObject *obj = [[NSObject alloc] init] 引發的一二事兒

這是一篇隨想型別的文章,由 [[NSObject alloc] init] 開始講起,覆蓋了 Objective-C 記憶體分配、ARC、@propertyatomic 等,看的過程遇到不是很清晰的知識點建議另找資料細讀。

? 剖析 ARM 64 架構中的 objc_msgSend

我們都知道 Objective-C 的"方法呼叫"其實是訊息轉發,[obj foo] 其實都會轉變成 objc_msgSend 呼叫。本文概述了 objc_msgSend 內部的程式碼處理流程,而在具體程式碼實現層面,整個訊息處理流程程式碼可以分為兩個部分:通過彙編程式碼實現的快速路徑部分(fast path),C 語言實現的慢路徑流程(slow path)。其中彙編程式碼對應快取表中查詢方法部分並且未命中時跳轉 C 程式碼來進行下一步處理。本文重點講了 arm64 架構下 objc_msgSend 彙編部分指令細節。

? 構建流暢的人機互動

今年 iOS 花了很大的功夫在優化系統基礎體驗上,甚至在 WWDC 裡專門開一個 session 來講如何構建流暢的人機互動。這篇文章的作者在看了這個 session 之後有感而發寫了這篇文章,在介紹和總結 session 內容的同時,還動手通過程式碼實現了那些 Design Tips,裡面特定互動的最佳實現和動畫實現的思路都非常棒,推薦一看。

? 血淚總結:如何從微信小程式的坑跳進支付寶小程式的大坑

支付寶小程式也在公測之中,開發者可以自由申請進行體驗。不同於微信小程式的社交傳播場景,在一些線下支付場景使用支付寶小程式也能獲得很多流量,對產品也是大有助益,因為遷移成本低,也是值得嘗試。

本文雖說是血淚總結,跳進大坑,但其實從程式碼的角度來看支付寶小程式的程式碼規範與API和微信小程式相比,真的是非常非常的近似,只有一些細節的差異。如果你的微信小程式已經很成熟了,那麼嘗試支付寶小程式將會沒有障礙,畢竟微信已經成熟了如果差異很大就沒人會用支付寶小程式了。不過終究還存著API差異,如果打算一套程式碼然後通過前端工程化的方案同時適配2種小程式,那麼本文作者踩的這些坑值得關注。

? WubaRN分步打包流程

用官方命令打出來的 ReactNative(RN) JSBundle 都會帶上自身框架程式碼。如果每個 Bundle 都自帶框架程式碼的話,對於業務模組多的 App 來講就不是很友好了。所以很多公司都會採取將框架和基礎模組程式碼拆分出來,讓所有業務使用同一份基礎程式碼。

本文是 58無線技術 分享的一篇關於 RN 打包的文章,作者按照打包流程來解釋他們的 WubaRN 拆分打包的思路,同時也介紹瞭如何通過快取來加速打包。還在使用 RN 或對 RN 工程化感興趣的都可以瞭解下。

? NLLanguageRecognizer

在 iOS 12中,蘋果開放了更多機器學習的能力給開發者。NLLanguageRecognizer 便是其中的一員。本文介紹瞭如何使用NLLanguageRecognizer判斷字串是屬於哪種語言,檢查拼寫錯誤和合成聲音。

? 5 分鐘教你成為會賺錢的獨立開發者

作者幾個月前辭去大公司 iOS 工程師的工作,成為了一名全職獨立開發者,目前已經在 App Store 釋出了 17 款 app,累計下載量超過 56W 次,其中兩款應用被 App Store 多次推薦。作者目前的獨立開發月收入已經與辭職之前持平,在這篇文章裡他會為你介紹如何把知識直接通過程式碼變成錢,包括獲得創意、建立付費和內購模式、優化 ASO 等等。

工具

Xcode::Install

Xcode::Install 是一款從命令列更新 Xcode 的工具,它可以幫助你安裝並管理多個版本的 Xcode。它使用了 Apple 的 開發者下載中心 來查詢並下載指定的版本。

Knil

Knil 是一款幫助你測試和驗證 Universal link 是否有效的工具。在 Knil 中輸入對應的 host,它就會幫你把對應的 apple-app-site-association 檔案下載到本地,並列出其中的 path 方便你進行測試。可以直接在 App Store 搜尋下載 Knil。

內推

北京-螞蟻金服 招iOS/安卓/前端開發

螞蟻金服招聘,負責支付寶會員及帳號業務線,地點北京國貿,金臺夕照地鐵站出口 100 米。雖然招聘連結只給了 iOS 的 JD,但前端/安卓/iOS 都要,要求相近。有興趣的同學歡迎將簡歷傳送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一個郵箱) 或這微博私信 @折騰範兒_味精 瞭解情況。

編輯內推

關注我們

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

老司機 iOS 週報 #31 | 2018-08-13

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

本期編輯

@沒故事的卓同學@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驢

說明

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

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

相關文章