老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
新聞
Swift Server 工作組
Swift Server 工作組現在正式宣佈進入下一個階段,工作組接下來的目標是建立一套健康強壯的生態系統,讓開發者可以更容易找到高質量的庫和工具。其實早在 2016 年這個工作組就已經成立了,當時的目標是建立一套通用的底層 API,供上層的 Swift 服務端框架使用,這就是 Swift-NIO,那麼接下來實際要做些什麼呢?
類似於 Swift 的核心開發團隊,這個工作組會負責提供總體的技術方向和制定標準,圍繞 Swift Server 去構建一系列的服務端生態,工作組的成員包括了來自蘋果,IBM 和 Vapor 的工程師,他們也會積極參與開發,並且希望社群也可以參與到這個過程中,目前工作組已經在論壇裡列了一份草稿去描述未來的工作方向,包括了工具鏈,Database Driver,分散式系統架構等等。
BTW,Swift 官網把 Server Work Group 放到了 Focus Areas 那一欄裡,表現出了對於服務端重視。(同一欄裡的還有 ABI Stability)
10 月 3 號起所有 App 必須在 App Store Connect 裡配置隱私政策連結
10 月 3 日起,所有新的應用和更新的應用程式都必須在 App Store Connect 裡配置隱私政策連結。隱私政策必須清晰且直白的告知使用者,他們的應用會收集什麼資料,以及根據他們的隱私保護協議,這些被收集好的資料會被如何利用,幷確認是否有第三方機構有權接觸到這些資料。
文章
? Early returning functions in Swift
Early Return, 顧名思義,就是早點兒 return 的意思。作者指出當我們做一些分支邏輯的時候,結合 guard 來在不滿足條件的時候直接 return 掉 function,可以使得我們的程式碼更加清晰,以及更易於 debug。不過我個人認為對於類似的邏輯,更合理的邏輯應該是用 do{} while(false)
, 在不滿足條件的時候直接 break 這樣確保函式有一個單一的 exit point,更有可維護性。除了 Early Return,文章還推薦使用函式來封裝複雜的條件判斷,使程式碼更具可讀性。
總體來說,文章深度一般,但是探討的 case 還是比較有趣的,可以看看。
? TODO FIXME And Compiler Directives
Swift 4.2 中新增了兩個新的編譯器命令,#warning("message")
和 #error("message")
,可以讓你的程式碼在編譯的時候,產生警告及錯誤。
? iOS App 連線外設的幾種方式
如果開發的應用功能涉及到和硬體互動,那麼知道 iOS app 連線外設有幾種方式就很重要了。
- 無線的連線是日常裡非常常見的藍芽、WIFi。
- 有線分成兩派:
- MFI:蘋果認證的外設。親兒子 CarPlay 是特供的 NCM。其他外設則是基於 External Accessory Protocol,通過引入 ExternalAccessory.framework 進行通訊。但是 MFI 的申請門檻非常高。
- 沒什麼卵用的 USB 熱點共享。
spirit-jsb 推薦
? iOS 如何精確還原 UI 稿多行文字間距
大家開發中一定遇到過文字間距如何精確還原的問題,不論是 PhotoShop + 標註工具
還是 Sketch
。文章介紹了通過設定 minimumLineHeight
maximumLineHeight
,然後利用 baselineOffset
修正完美還原多行文字間距。
? Why you’re not supposed to call description
大家在使用 Swift 的時候,一定會經常把一些任意的字串、整型或者物件作為除錯資訊的一部分來輸出到控制檯。可能你注意過 CustomStringConvertible 和 CustomDebugStringConvertible 這兩個協議,還有 String(describing:) 但是卻不太清楚其中有什麼區別。本文作者講解了這幾個型別分別做些什麼,以及為什麼使用時呼叫 String(describing:) 和 String(reflecting:) 是最佳的選擇。
? Practical Dynamic Type
在 iOS 11 之前,如果想根據 iOS 系統字型大小來動態調整字型尺寸,只能觀察 UIContentSizeCategoryDidChange,並在變動發生時手動渲染檢視。但 iOS 11 推出了一些改進,方便 app 針對視弱使用者開發輔助功能,作者在這篇文章裡展示瞭如何實際利用 iOS 11 對 Dynamic Type 的提升,對視弱使用者提供完整的輔助功能,同時還能支援之前的 iOS 版本。
? iOS App 後臺任務的坑
Peak 最近一直在調研和分享 Background Crash 相關的知識,比如 32 期週報中推薦的『iOS App 後臺 Crash 調查』一文。而這篇文章則是他最近這段時間調研結果的總結。文中提到,涉及 Background Task 的 Crash 主要有以下三種型別:
- 0xdead10cc - 為了保證 Extension 和 Host App 對 DB 操作的資料庫完整性,系統強殺應用;
- 0xbada5e47 - 發起過多的 Background Task,或者 Background Task 在超時之後會呼叫 expiry handler 超過幾秒鐘,都會被系統強殺;
- 0x8badf00d - 主執行緒卡死,被系統的 WatchDog 強殺;
另外此類 Crash 第三方的收集框架捕獲不到,所以需要藉助蘋果自帶的 Crash 日誌才能排查。
? 打造高可擴充的 iOS KeyValueStore
本文循序漸進地講解了如何打造一個高可擴充的 iOS KeyValueStore。從最開始一個 Key,一個 Data 的表,逐步講解如何支援儲存後設資料,分組,索引。行文流暢,沒有廢話,值得一看。
? MacOS 的安全和隱私指南
本文翻譯自 drduh 的一篇文章, macOS Security and Privacy Guide。如今使用者電腦的安全及隱私問題越來越被重視起來,無論是公司還是個人。本文對於想要提高個人 Mac 的安全性以及隱私性的人比較有幫助。文章從 Web、 VPN、防火牆、系統服務等很多點詳細討論了 MacOS 的安全和隱私問題,讀完這篇文章,相信對於這方面的很多疑問都可以迎刃而解。
? Swift Knowledge Base updates for Swift 4.2
Swift 4.2 正式版再過幾天就要釋出了,這一次更新雖然只跨了一個小版本,但還是帶來了許多實用的新特性,還沒來得及瞭解的同學推薦看一下這篇文章。
? Hacking Hit Tests
來自 Soroush Khanlou 的一篇文章。文章介紹了 HitTest 這個來自 UIKit 的快被大家遺忘了的方法。
在一些特定情況下,開發者可能會需要 Override HitTest 方法來達到一些特定的目的。作者就遇到了類似的情況。而 Override HitTest 在很多時候能給開發帶來更多的可能。相信大家若是對 HitTest 有更深入的瞭解,也能對 iOS 開發有更深的理解。
? CLI: improved
作為開發人員,一般都離不開命令列工具,本文的作者分享了自己在命令列工具上的一些積累和經驗,幫助大家更好地提升工作效率
cat
的升級工具ping
的升級工具- 你可以使用 prettyping,這個工具對ping的返回結果做了一層GUI的封裝
ctrl+r
(回溯過往輸入的命令)的升級工具- 你可以使用 fzf 來更好地進行回溯匹配
top
的升級工具- 你可以使用 htop 獲得更多的互動命令來顯示系統硬體資訊
find
的升級工具du
的升級工具man
的升級工具- 你可以使用 tldr 更好地閱讀幫助文件
grep
的升級工具- 有些時候,
grep
的對於複雜的過濾規則力不從心,這個時候可以考慮用ack || ag
來代替
- 有些時候,
grep et al
的升級工具- 你可以使用 jq 來更好地處理 json 轉換的問題
- 更多更好的工具等待挖掘中
設計
? Lessons Learned From the RWDevCon 2018 Design Lab
在今年 RWDevCon 2018 大會的 Design Lab 中,兩個資深 UI/UX 設計師解答了 Ray Wenderlich 讀者有關 app 設計的問題,其中包含了很多常見解決方案,具體分為以下四個方面:格式塔理論、原生元件及行為、競品研究和產品文案。閱讀這篇文章可以讓你在建立移動應用時避免犯同樣的錯誤。
書
Mac 高效開發指南
bestswifter 同學一直非常的重視工作效率,本書從系統配置、Mac 工作流、編輯器之神:Vim、Git 從入門到進階、終極武器 Zsh 等方面去打造一個高效的工作流,致力於提高 Mac 工作效率的實用手冊。不管你是入門新人,還是擼碼老手,都能從書中學習到很多你平時不會注意的,提升工作效率的點。效率上去了,你才能有更多的時間,去對自我進行提升。
音視訊
泊學技術視訊
構建自己的Docker映象 Docker用類似git的方式管理了我們對容器的修改,這也就意味著,我們可以“提交”這些修改,檢視修改的歷史記錄,以及製作新的映象。
使用Dockerfile自動化映象構建 如何自動化映象的定製過程呢?你可以把每一步修改的動作寫在Dockerfile裡,然後執行docker build就好了。
通過Docker執行任意版本的Swift 這段視訊裡,我們基於Swift官方提供的二進位制程式,製作一個可以執行任意版本Swift的映象,有了它,我們就能更方便、安全的實驗各種Swift新特性了。 [視訊連結]
內推
-
北京-螞蟻金服 招iOS/安卓/前端開發:負責支付寶會員及帳號業務線,地點北京國貿,金臺夕照地鐵站出口 100 米。有興趣的同學歡迎將簡歷傳送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一個郵箱) 或這微博私信 @折騰範兒_味精 瞭解情況。
-
上海即刻:如果你認識聰明勤奮、膽大心細、有追求的工程師,那就來加入我們吧!任何推薦或簡歷可直接發給 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通過行業無人機協同工作流 Mesh 進入物聯網與人工智慧領域, 併成功為房地產、建築、測繪、電力巡檢等行業提供無人機解決方案。感興趣可以微博上私信 @沒故事的卓同學 瞭解。
-
深圳頭條研發中心誠招各路 iOS 好手一起做取悅自己的專案:如想了解更多深圳頭條的資訊,可以加小T微信:tomtan,切磋技術和聊情懷都可以喔~~~~
-
北京位元組跳動 iOS 團隊持續招人中:簡歷可以傳送到郵箱 raozhizhen@gmail.com,或者新增我(@AidenRao)的微信 jingmu1994 瞭解更多公司及崗位資訊。
-
北京百度教育事業部招 iOS 開發:百度教育事業部,地點:北京西二旗。部門下面有百度閱讀,百度文庫,百度愛聽等 App 產品。團隊技術氛圍濃厚,有興趣的同學歡迎將簡歷傳送到我的郵箱:lizelei@baidu.com。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@沒故事的卓同學,@四娘,@享耳先森,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,kyo,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驢
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)