在這篇教學文章中,我們會學習利用流行的開源程式庫 R.swift,在 iOS App 中自動化 Asset Management。讀完這篇文章之後,你會學懂如何自動化:
- 圖像 (Image)
- 顏色 (Color)
- 本地化 (Localization)
事不宜遲,讓我們開始吧。
自動化 Asset Management
讓我們從一個空的專案開始:
首先,我們要把 R.swift 添加到專案中。讓我們把以下這行程式碼添加到 Podfile,然後執行 pod install
,來利用 CocoaPods 安裝它:
pod ‘R.swift’
安裝好 R.swift 之後,我們需要調整 Target 的 Build Phase。讓我們如此添加一個新的 Run Script Phase:
建立好新的 “Run Script” 之後,我們就可以把它移動到 “Compile Sources” 的上方:
我們之所以要這樣做,是因為程式庫會建立一個 R.generated.swift
檔案,當中包含了所有引用了 App 使用的 Asset 的屬性 (property)。我們想在 App Compile 所有文件之前建立這個檔案。
下一步,我們需要定義實際的 script。讓我們如此添加 “$PODS_ROOT/R.swift/rswift” generate “$SRCROOT/R.generated.swift”
:
配置 R.swift 的最後一個步驟,就是更新 Script 的 Input
和 Output
檔案。讓我們在 Input Files
添加 $TEMP_DIR/rswift-lastrun
,並在 Output Files
添加 $SRCROOT/R.generated.swift
:
現在,如果我們 Build App 並打開專案資料夾,就會看到 R.generated.swift
檔案:
把檔案拖放到 Xcode 專案中,不要勾選 “Copy items if needed”。
完成了!接下來,讓我們看看如何自動化圖像管理吧!
管理圖像
首先,讓我們在 Assets.xcassets
目錄 (catalog) 中添加一個圖像:
Build App 之後,我們就可以簡單地在 ViewController
中引用圖像:
override func viewDidLoad() {
super.viewDidLoad()
let image = R.image.myImage()
}
一般用來獲取圖像的方法都需要用到字串 (string),但在這些,我們就不需要用上這個容易出錯的方法。
接著,讓我們看看如何管理 Color。
管理顏色
讓我們在 Assets.xcassets
添加一個 Color Set:
把 Color Set 命名為 “Primary”,並設定其數值 (value):
現在,如我們之前所做的那樣,Build App 之後,我們就可以在 ViewController
獲取剛剛建立的 UIColor
:
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = R.color.primary()
}
完成了!現在讓我們處理 Localizable 字串吧。
管理本地化
假設我們有兩個可本地化 (Localizable) 字串檔案:
我們想在專案中使用以下的簡單字串:
"hello" = "Hello";//or"hello" = "Привет";
Build App 之後,我們可以簡單地在 ViewController
引用字串:
override func viewDidLoad() {
super.viewDidLoad()
let message = R.string.localizable.hello()
print(message)
}
此外,使用引數 (argument) 引用字串也很容易:
"hello" = "Hello, %@!";
R.swift 會更新 R.generated.swift
檔案,讓我們可以在獲取字串時提供一個參數 (parameter):
let message = R.string.localizable.hello("James")
print(message)
太好了,我們已經成功利用 R.swift 程式庫,更有效地管理圖像、顏色和本地化檔案。
在使用 Git 的時候,我們可以將 R.generated.swift
檔案添加到 .gitignore
中,畢竟它總是會在 Build 專案時重新生成。它還可以為我們避免合併衝突 (merge conflict):
*.generated.swift
資源
你可以在 GitHub 下載範例專案。
總結
R.swift 不僅支援圖像、顏色、和字串。如果你想了解更多,可以參閱這個框架的 GitHub 網站。
特別鳴謝 Anupam Chugh。