在開發一個新的App時不只要考慮當前版本的需求,更要考慮到後期的版本迭代和維護工做 《Clean Code》一書中也提出代碼大部分時候是用來維護的,而不是用來實現功能的
。因此在前期的框架設計,技術調查上應該慎之又慎。本次我將從我的開發者角度圍繞着代碼的可維護性、可測試性、可複用性來實現一個簡單的聊天App。git
新建一個工程,命名爲RPChat
,此處開發語言選擇Swift
:github
(1)、在工程中設置Info.plist中設置Allow Arbitrary Loads爲YES,參考:stackoverflow Transport security has blocked a cleartext HTTP緩存
(2)、打開Assets.xcassets
按照指定的圖片大小添加App的Logo圖片。bash
添加三個framework
分別命名爲RPChat_iOS、RPChatUIKit、RPChatDataKitsession
carthage version
複製代碼
cd /Users/****/Desktop/GitHub/RPChat
複製代碼
touch Cartfile
複製代碼
使用VSCode打開Cartfile
文件,輸入用到的第三方開源庫:app
github "Alamofire/Alamofire" // Http請求封裝
github "ReactiveX/RxSwift" // 用於管理App中的事件
github "onevcat/Kingfisher" // 用於App中的緩存和下載圖片
github "SwiftyJSON/SwiftyJSON" // 生成Model
gitHub "CoderMJLee/MJRefresh" // UItableView下拉組件
github "robbiehanson/CocoaAsyncSocket"
複製代碼
執行更新命令:框架
carthage update --platform iOS
複製代碼
更新完成後,打開工程,選擇TARGETS -->Build Phases--> Link Binary With Libries 點擊加號,選擇 Add File --> Carthage --> Build --> iOS 添加所需的FrameWork
,ide
下面的gif演示瞭如何添加第三方的FrameWork
;測試
接下來,點擊+,選擇New Run Script Phase
,此時新建了Run Script
,在執行命令中添加:ui
/usr/local/bin/Carthage copy-frameworks
複製代碼
在Input Files
中引入咱們要用到的庫的路徑:
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
複製代碼
其做用是把Carthage
引入的第三方庫在打包的時候,拷貝到特定目錄。
在上傳到git倉庫時,不須要傳Carthage
下的文件,因此選擇忽略,在.gitignore
文件中添加
*.DS_Store
Carthage/
xcuserdata/
.idea/
複製代碼
修改最低支持版本爲iOS 11
此時發現再Build工程,發現已經有不少Error
,這是版本兼容的問題,因爲Xcode 11
新建的工程默認爲當前最高版本,Xcode新增了一個SceneDelegate
文件,具體做用請參考官方文檔:Optimizing App Launch。如今要在AppDelegate
和中SceneDelegate
作兼容老版本處理。 方法就是對當前系統作一個判斷,而後再根據不一樣系統版本分開處理。
在SceneDelegate
直接加上@available(iOS 13.0, *)
便可, 在AppDelegate
作擴展處理:
代碼以下:
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
}
複製代碼
@available(iOS 13.0, *)
extension AppDelegate {
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}
}
複製代碼
String File
文件,命名爲Localizable
點擊到Localizable.strings文件,點擊右側Localize...按鈕添加須要國際化的語言。
此時來作個測試,在ViewController
新建一個名爲testLab
的UILabel
;
@IBOutlet weak var testLab: UILabel!
複製代碼
展開Localize.strings
文件,在英文中添加test;
,在簡體中文中添加:
"test" = "測試";
複製代碼
在ViewController
中調用,
testLab.text = NSLocalizedString("test", comment: "")
複製代碼
此時點擊Run能夠看到testLab
顯示內容爲test
;
修改模擬器語言爲簡體漢語,再次運行:
(1)、一樣的方法新建一個名爲InfoPlist
的String
文件。
(2)、在InfoPlist.strings(English)
文件中添加:
CFBundleName = "CatchU";
複製代碼
(3)、在 InfoPlist.strings(Chinese,Simplified)
中添加
CFBundleName = "暢聊吧";
複製代碼
(4)、 打開Info.Plist
設置Bundle name
屬性爲$CFBundleName
本篇主要講了App的新建和相關配置,包括:
frameworks
去實現App不一樣層次的功能Carthage
管理工程中用的第三方開源庫