0
1

More than 1 year has passed since last update.

【Swift】MintでSwiftGenを導入する

Last updated at Posted at 2022-10-14

はじめに

SwiftGenを初めて使ってみたので忘れないように記録しておきます。

SwiftGenとは

公式からはこのように説明されていました

SwiftGen is a tool to automatically generate Swift code for resources of your projects (like images, localised strings, etc), to make them type-safe to use.

英語は苦手なので日本語も載せておきます

SwiftGenは、プロジェクトのリソース(画像やローカライズされた文字列など)に対してSwiftコードを自動生成し、タイプセーフで利用できるようにするツールです。

どういうことか?
通常、画像を表示させようと思ったら以下のようになります。

Image("share")

しかし、SwiftGenを使用すれば以下のように書くことができます。

Image(Asset.share.name)

これは便利ですね

今回使用するサンプルプロジェクト

スクリーンショット 2022-10-14 20.30.01.png
スクリーンショット 2022-10-14 20.32.11.png

やりかた

Mintfile

ターミナル
cd プロジェクトフォルダ

Mintfileを作成します

ターミナル
touch Mintfile

Mintfileを開きます

ターミナル
open Mintfile

MintfileにSwiftGenを記載します

Mintfile
SwiftGen/SwiftGen

SwiftGenをインストールします

ターミナル
mint bootstrap

swiftgen.yml

swiftgen.ymlを作成します

ターミナル
touch swiftgen.yml

swiftgen.ymlを開きます

ターミナル
open swiftgen.yml

swiftgen.ymlを編集します

swiftgen.yml
xcassets:
  inputs:
    # あなたのプロジェクトのパスに変えてください
    - swiftgen-mint-sample/Assets.xcassets
  outputs:
    - templateName: swift5
      # あなたのプロジェクトのパスに変えてください
      output: swiftgen-mint-sample/Assets.swift

Run Script

① プロジェクトを選択します
② ターゲットを選択します
③ 「Build Phases」を選択します
④ 「+」を押します
⑤ 「New Run Script Phase」を押します
スクリーンショット 2022-10-14 20.12.51.png

追加した「Run Script」にコードを追加します
スクリーンショット 2022-10-14 20.16.07.png

export PATH=/opt/homebrew/bin:$PATH

if which mint >/dev/null; then
    # SwiftGen
    xcrun --sdk macosx mint run swiftgen
else 
    echo 'warning: mint not installed.'
fi

ビルド

シュミレーターでも実機でも良いのでビルドします
スクリーンショット 2022-10-14 20.33.06.png

生成されたファイルをXcodeで読み込む

生成されたファイルがあるフォルダを選択します
スクリーンショット 2022-10-14 20.35.39.png

右クリックをして「Add File to “プロジェクト名”...」を選択します
スクリーンショット 2022-10-14 20.36.33.png

生成された「Assets.swift」を選択して、「Add」を押します
スクリーンショット 2022-10-14 20.38.08.png

このようになっていれば完成です
スクリーンショット 2022-10-14 20.39.40.png

使い方

スクリーンショット 2022-10-14 20.40.50.png

import SwiftUI

struct ContentView: View {
    var body: some View {
        Image(Asset.share.name)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

おわり

これから積極的に使っていきたいです!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1