利用 R.swift 在 iOS App 自動化 Asset Management


本篇原文(標題:How To Automate Asset Management in Your iOS Apps)刊登於作者 Medium,由 Zafar Ivaev 所著,並授權翻譯及轉載。

在這篇教學文章中,我們會學習利用流行的開源程式庫 R.swift,在 iOS App 中自動化 Asset Management。讀完這篇文章之後,你會學懂如何自動化:

  • 圖像 (Image)
  • 顏色 (Color)
  • 本地化 (Localization)

事不宜遲,讓我們開始吧。

自動化 Asset Management

讓我們從一個空的專案開始:

asset-management-1

首先,我們要把 R.swift 添加到專案中。讓我們把以下這行程式碼添加到 Podfile,然後執行 pod install,來利用 CocoaPods 安裝它:

pod ‘R.swift’

安裝好 R.swift 之後,我們需要調整 Target 的 Build Phase。讓我們如此添加一個新的 Run Script Phase:

run-script-1

建立好新的 “Run Script” 之後,我們就可以把它移動到 “Compile Sources” 的上方:

run-script-2

我們之所以要這樣做,是因為程式庫會建立一個 R.generated.swift 檔案,當中包含了所有引用了 App 使用的 Asset 的屬性 (property)。我們想在 App Compile 所有文件之前建立這個檔案。

下一步,我們需要定義實際的 script。讓我們如此添加 “$PODS_ROOT/R.swift/rswift” generate “$SRCROOT/R.generated.swift”

配置 R.swift 的最後一個步驟,就是更新 Script 的 InputOutput 檔案。讓我們在 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")<br>print(message)

太好了,我們已經成功利用 R.swift 程式庫,更有效地管理圖像、顏色和本地化檔案。

在使用 Git 的時候,我們可以將 R.generated.swift 檔案添加到 .gitignore 中,畢竟它總是會在 Build 專案時重新生成。它還可以為我們避免合併衝突 (merge conflict):

*.generated.swift

資源

你可以在 GitHub 下載範例專案。

總結

R.swift 不僅支援圖像、顏色、和字串。如果你想了解更多,可以參閱這個框架的 GitHub 網站

希望這篇教學文章可以幫得上忙。謝謝你的閱讀。

特別鳴謝 Anupam Chugh。

本篇原文(標題:How To Automate Asset Management in Your iOS Apps)刊登於作者 Medium,由 Zafar Ivaev 所著,並授權翻譯及轉載。

作者簡介:Zafar Ivaev,WWDC20 的學者,我寫的文章內容涵蓋 Swift 的特性、和 iOS 開發實作,有時也會寫有關 Flutter 的文章。

譯者簡介:Kelly Chan-AppCoda 編輯小姐。


此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。

blog comments powered by Disqus
Shares
Share This