必備的 Google Chrome Extension

每次換工作都是一次整理工作環境的機會,我的 Google Chrome 也藉此重裝,雖然現在的工作跟以往完全不一樣,但我發現有些 extension 是不管在之前還是現在的工作、不管是公司還是家裏都會安裝的。以下就是我必備的五個 extension:

我的 Mac 設定

工程師都會有自己習慣的電腦設定,身為一個 iOS 開發者的我自然也不例外。本文記錄了我自己的環境建置,方便以後換電腦或換工作時可以快速 setup,也歡迎有需要的人拿去修改或留言推薦你喜歡的工具。

利用 CoreML 來判別圖片

在 WWDC 2018 蘋果推出了 Create ML ,讓開發者可以輕鬆的建立並訓練適合自己需求的機器學習模型,它支援圖片、自然語言、表格資料的學習。最近這幾天我就想到要訓練一個自家的模型,用來檢查使用者是否打算上傳不恰當的圖片。

如何用 Appium 測試 iOS App

前一陣子我們開始嘗試 UI 自動化測試,我們首先嘗試 Appium,藉此機會幫安裝過程做個記錄。

iOS App 如何支援 RTL 語言

公司的產品越做越大,前一陣子幫公司的 app 加上阿拉伯文介面,開發過程也累積了一些支援 RTL 語系的心得,藉這個機會跟大家分享。

如何為各個 Pod 指定 Swift 版本

最近升上 Swift 4.2,發現我用到的 Pods 有些還沒支援 4.2 導致編譯錯誤。解決方法也很簡單,只要指定每個 Pod target 的 SWIFT_VERSION4.0 即可。

但是我們不能手動在 Xcode 裡頭調整,因為 CocoaPods 會把 Pods 的 SWIFT_VERSION 設為跟你的 project 一樣,所以下次 pod install 又會被改掉。

為何 Git-Flow 可能不適合你

Git-FlowVincent Driessen 在 2010 年提出的一套 Git 分支模型,簡單的說,它有 masterdevelop 這兩個主要的分支,以及 feature / release / hotfix 這三個支援型分支,至於各個分支的用途看圖片應該就懂了,或是看原文有更詳細的說明。

由於當時大家對如何使用 Git 還處於摸索的階段,所以當這套規範被提出並且大家發現真的滿好用的之後,它很快就被廣泛的接受。

如何解決 NSTimer 造成的 retain cycle

最近在替公司 app 做健康檢查,找到一些 memory leaks 的問題,其中一個就是由 NSTimer 所引起的 retain cycle。

NSTimer 是個很容易造成 retain cycle 的物件,無論是新手或是老手都很可能一個不留意就踩到這個坑。舉個很常見的例子,這樣寫就產生 retain cycle 了:

為何 Startup 不該用 Swift

最近跟朋友聊天,聊到說我不建議 startup 使用 Swift 開發 app,趁著有空紀錄一下為何我會這麼說。

還是得先聲明一下,Swift 是一個很酷的語言,我沒有不喜歡它,只是站在公司的角度,我認為 startup 不應該使用 Swift 開發它們的主力產品,而是應該用 Objective-C。

主要是因為以下幾點理由: