[SwiftUI] 作ったビューを SwiftPackage にしてみる

SwiftPackageManagerEyeCatch

サイコロビューを SwiftPackage で利用しやすくする方法を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Big Sur 11.2
  • Xcode 12.4
  • iOS 14.4

作成したビューの Swift Package 化

作成したサイコロビュー(DiceView) を Swift Package 化して、再利用しやすくしてみます。

Swift Package の作成

Xcode の “File” メニューから “New” – “Swift Package…” を選択します。
ここでは、”SDSDiceView” という名称にしました。

ポイントとしては、同じダイアログ下部にある “Add to” には、現在のプロジェクトを ”Group”には、SwiftPackage を登録したいグループを選択する必要があります。

この設定をすることで、Swift Package を clone してきた フォルダを プロジェクト内部に D&D で登録した状態となります。

View の public 化

Swift Package 化するとデフォルトのアクセス制限では、モジュール内部に遮蔽されてしまいます。
必要な要素を Public にすることが必要となります。

具体的には、以下の要素を public 指定する必要があります。

  • SDSDiceView struct そのもの
  • SDSDiceView#init
  • SDSDiceView#body

# SwiftPackage 化の際に、View 名を DiceView から SDSDiceView に変更しています。

public 化された SDSDiceView

リソースアクセスの変更

SwiftPackage 内のリソースには、Bundle.module 経由でアクセスすることになります。
# Bundle.module は、Package 内部から参照できる static 定義になっています。

上記の Public 化と合わせて修正します。

なお、この変更を行わないと、リソースを main の Bundle に探しに行き、アプリ実行時にリソースが見つけられずエラーとなります。

注意
Package.swift で Target に resources 設定を行わないと、Bundle.module は定義されません

リモートリポジトリの作成

SourceControl ナビゲータに移動して、右クリックから New “SDSDiceView” Remote… を選択して、リポジトリを GitHub に作成します。

MEMO
SwiftPackage としては、GitHub 以外でも問題ありません。参照できるリポジトリであれば OK です。

SwiftPackage として参照する

使う側のビューでは、import 宣言が必要となります。

モジュール名を SDSDiceView にしましたので、”import SDSDiceView” が必要となります。

SDSDiceView と使う側のビュー

ここで作成した SDSDiceView は、こちら にあります。

まとめ

これで、サイコロを振るようなアプリでは簡単に DiceView が使えるようになりました。

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

# SwiftUI2.0 が登場したことで少し古くなってしまいましたが、いまでも 定番本です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です