“我們從小就聽長輩們說起過懶漢,彷彿懶惰很不體面。實際上,沒有我們的這些懶漢,恐怕就沒有社會的進步;沒有我們的這些懶漢,勤勞的人面對的恐怕只會是單調乏味的勞作。”這裡引入小學課本學過的文章《懶惰的智慧》中的一句話,深以為這句話就是對我們程式設計師群體的真實寫照,促進社會進步說的有點誇張,但是提高生產效率還是不在話下的,這也是我本次紀錄的一點兒動力。
好好的開發 iOS,為什麼要玩玩 macOS 呢?自我揣測每一位 iOS Developer(以下簡稱 iOSer) 的內心中都有一個開發 macOS 的衝動,畢竟工具(mac + Xcode)和基礎技術(Objective-C, Swift)都是現成的,iOS 開發的應用需要上架才能使用,而 mac App 甚至都可以省略上架這一步,在朋友間傳播起來也方便得多。
閒話少說,今天談談最近一次開發的 macOS App 開發者之刃 App Store、開發者之刃 首頁。
功能包括:
- 色盤(儲存配色方案)
- 圖示生成器(生成 iOS/macOS/Android 多尺寸圖示檔案)
- 影象壓縮(基於 TinyPng)
- json 轉模型(json 字串轉成 swift 模型物件)
- 開源庫集(github 開源庫分類整理)等功能
- 支援開機自啟動、全域性快捷鍵、自動檢查更新等。
1. 從技術的角度談談做了什麼
1.1 開發了一款 macOS App
主要採用 Swift4.2 編寫“開發者之刃”,相比於 OC,Swift 的優勢想必用過的朋友們都知道。
“開發者之刃”的技術點大概如下:
CocoaPods
管理第三方開源庫- Alamofire 網路框架
- CocoaLumberjack/Swift 日誌紀錄
- SnapKit 自動佈局
- Kingfisher 網路圖片載入快取
- Fabric bug 及使用者行為分析
- LaunchAtLogin 開機自啟動
- 全域性快捷鍵:主要用到
RegisterEventHotKey
方法 - Python 和 Swift 互動:可以看下之前寫的文章《我用 Xcode+python 寫的第一個 OSX app》,關鍵詞:
Process
- 本地快取:未使用資料庫,採用 json 格式存本地檔案,使用的庫:ObjectMapper
對於沒有開發mac 經驗的同學,推薦劍指人心的 《macOS 應用開發基礎教程》,入門是完完全全沒有問題的。“開發者之刃”裡面用到的技術基本上都能在這本書中找到,而且從完全沒有 mac App 開發經驗到上架一個完整的 App,本人是照著書中內容一步步走下來的,這裡也一併感謝下作者。
1.2 順手擼了個服務端
採用 Python 的 Flask 庫搭建的服務端,操作簡單,功能全面。IDE 用的是 PyCharm。
這裡為什麼要用“順手”二字呢?實實在在是沒有服務端的開發經驗,在網易雲課堂上看了一個教程,操起鍵盤就是幹。中間遇到問題就 Google 一下,不能解決的就直接繞過去了,所以到最後功能既不完善,也不繫統,但也勉強夠用。畢竟精力有限,以完善功能為主,系統性的學習還任重而道遠。
服務端的技術點大概如下:
- pip: 包管理工具
- Flask: Web 開發微框架
- SQLAlchemy: 資料庫工具
- Flask-Migrate: 資料庫升級工具
- http 請求、web 頁面:Flask 很容易實現
- Vue: 漸進式 JavaScript 框架,快速構建 web 頁面
半吊子都算不上的服務端開發,這裡就不班門弄斧了,基本功能大概如上所訴。照著網易雲上的視訊 Python Flask系列(1)——基礎 學習的 Flask 基礎,感覺講的挺好,淺顯易懂,寫個簡簡單單的頁面是完全足夠了。
1.3 切了幾張圖
圖可以切,審美就不不必較真了。
技術呢也沒有用到什麼技術(主要是我都不知道有啥技術,完全兩眼一抹黑),這裡就簡單介紹下用的工具吧。
- Sketch:輕量易用的向量設計工具。易用易用,誰用誰知道。
- iconfont:向量圖示管理、交流平臺。免費圖示多種多樣,可下載原始檔,也可指定顏色、大小下載。
- tinypng: 智慧有失真壓縮圖片。“開發者之刃”中的圖片壓縮功能核心就是用的它的服務,壓縮率高,壓縮後的影象幾乎肉眼看不到失真。
2. 談談為什麼要做這個 App
前面提到了,每個 iOSer 的內心中都有一顆開發 mac App 的心,其實說白了,每一個程式設計師的內心中都有嘗試新事物的衝動。
確確實實解決開發中的一些痛點。服務端甩給客戶端一大串 json,我們每次構建物件時煩不勝煩,機械重複的程式碼只是在浪費我們有限的生命與激情,所以有了《json 轉模型》的想法。設計給的色值一天三變,背景色、基礎字型顏色不統一,被他們一句“這個顏色就是之前用的”弄得痛不欲生,自己設計個玩意後,色值轉身就忘,所以有了《色盤》的想法。github 看到優秀的倉庫也不太想 star,實在是 star 的數量過多,想用的時候像是大海撈針,所以有了《開源庫集》的想法。自己寫個 App,要被切各個尺寸的圖弄瘋,切完還得一張張拖到 Assets 中合適的坑中,總之開發中總會遇到一些重複的工作,大概是可以通過程式碼處理的吧。
學習真的會使人快樂。當剛開始接觸一個新的技術時,汲取知識的快感是強烈的,不論是純粹的學習還是單純想炫技,能學到東西總歸是一個非常好的結果。當然要深挖技術時的確會有痛苦,痛並快樂著吧。
3. 作一個簡單的總結
技術:
- mac App 開發:Swift + Xcode
- web 開發:Python + PyCharm
- 切圖:iconfont + Sketch
資源: