本專案已使用The Composable Architecture 重構,最新程式碼在composable-architecture 分支。
用SwiftUI 仿寫的微信。
雖然只是一個仿寫的項目,但我還是按照實際生產開發的要求去編寫,而不僅僅是停留在簡單的UI 層面。
本專案的目標是盡量使用純SwiftUI 框架來實現。如果SwiftUI 暫時還不支援的,我們先不實現,等SwiftUI 支援了再實現。
Redux 在React 專案中使用非常廣泛。而SwiftUI 聲明式程式設計的理念與React 非常類似。所以在SwiftUI 中使用Redux 再適合不過了。什麼是Redux?如何實作Redux?我可以去看我之前寫的一篇文章《在SwiftUI 中實作Redux》
本專案就使用了Redux 架構,相關的檔案在Redux
資料夾下。
本項目多語言的處理參考了Kickstarter iOS 中的方法。使用bin/strings-script
腳本和ExternalResources/locales.json
自動產生多語言檔案和Strings
類型。需要新增對應的語句時,只需要在locales.json
新增對應的翻譯,然後執行make strings
指令,就可以在專案中使用Strings.xxx()
得到目前語種的語句。
本專案包含了大量的單元測試,以確保關鍵邏輯的準確性。
SwiftUIRedux:我自己寫的Redux 函式庫。寫的思路可以去看我之前寫的一篇文章《在SwiftUI 中實作Redux》
Kickstarter-Prelude: 一些方便使用的Swift 類型的擴充。我從Kickstarter 的Kickstarter-Prelude 專案拿過來的程式碼,製作成Swift Package 函式庫。
URLImage:顯示網路圖片。
LBJMediaBrowser:我自己寫的預覽圖片和影片的庫。
本計畫的使用者註冊與登入、聊天、聯絡人和個人資訊等都透過Google 的Firebase 實現,盡量模擬實際開發的邏輯。
註冊和登入
聊天
聯絡人
發現
我
本專案因為使用了Google 的Firebase,所以中國大陸用戶運行前請連接VPN。
測試帳號:[email protected] / 11111111。
如果您樂意為本項目添加新功能,我非常歡迎。請使用GitHub Issues 寫出自己想要做的功能,實現日後提交PR。
我有程式碼潔癖,很注重程式碼的簡潔性和可讀性。寫程式碼的時候請按照我的風格來。如果覺得在程式碼中有地方可以改進的,歡迎指出。謝謝!