[SwiftPM] Swift Package Manager にリソースを追加してプロジェクトから使うまで

SwiftPackageManagerEyeCatch

Swift Package Manager がコードだけでなく、リソース等を保持できるようになったので、プロジェクトからどのように使うかを説明します。

いきなり、SPMパッケージを作り始めるのもあまりないと思いますので、プロジェクトから一部をSPMに抜き出す形での利用を想定します。




ベースとなるプロジェクトの作成

Xcode12 から MultiPlatform というプロジェクトを作ることができるようになりましたので、その設定で作ります。

プロジェクトの作成

名前は、ResourceSPM にしました。

共有リソース相当の作成

ここでは、関数を1つ作り、その関数が、SPMに保持されているイメージを返すとしました。

関数名は、SPMResource としました。

SPMResource.swift

そこで使われるリソースとなるイメージファイルも作成し追加しました。

ImageResourceInSPM

Assets.xcassetsに追加しています。後で、SPM側のassetsに移行することを想定しています。

共有リソースを使うContentView.swift

共有リソースを使うようなViewを作成しました。

ContentView.swift

SPMを使っていないアプリイメージ

以下のようなイメージになります。

AppImageWithoutSPM

ここで使われているイメージをSwift Packageに移行することがゴールです。

Swift Package の作成/追加

プロジェクトにSwiftPackageを追加するために、新しいSwiftPackageを作成します。

Swift Packageの作成

まずは、新しくSwift Packageを作成します。

“SPMWithResource”という名前で作りました。作成中のプロジェクトに含めるようにします。

IntoProject
作成すると以下のようになります。

ProjectDirectory

SPMWithResource パッケージ中の”Sources”フォルダが、共有するコードやリソースを配置するフォルダです。

共有コードの移行

共有するコードとして作った、”SPMResource.swift”を移動します。
ファイルのD&Dで簡単にできます。

FileMovedForSPM

共有リソースの移行

イメージを移行するためには、移行先に、Asset Catalogを新規で追加します。
Project Navigator上の右クリックで表示されるメニュー中の”New File”からダイアログを表示し、”Asset Catalog”を選択することで追加できます。
名称を、”Image”としました。

AddedAssets

あとは、Assetの中の要素に対して、カット&ペーストを行うことで、新しく作成したAsset Catalogの中にイメージを移行させることができます。

MovedImage

サポートプラットフォームの明確化

SPMのリソースサポートは新しい機能ですので、サポートできるバージョンを追記しておきます。

Package.swiftに以下のように追記します。

コード

packageを外部化する

Source Control Navigatorに移動すると以下のようになっているはずです。

SCN

Swift Packageとして、使用したいものは、下側の”SPMWithResource”ですので、こちらに対して、外部化します。

右クリックして表示される、New “SPMWithResource” remote を選択して、外部化します。

上記の実行後、右クリックで表示される”View on Github”を選択するとGithubのページへジャンプすることもできます。(後からこのURLが必要となります)

packageを参照する

上記で作成したURLを、プロジェクトが依存するSwiftPackageとして設定します。

AddSPM

いつもの、SwiftPackage管理画面で、”+”ボタンを押した後のフィールドに、先のURLをペーストして、リターンキーを押します。

selectBranch

今時点ではバージョン等を設定していないと思いますので、Branchのmainを選択します。 (Xcodeの表示するダイアログのデフォルトでは、masterとなっていますが、最近Githubのメインブランチをmasterからmainにする変更が入っていて、Xcodeはそれに追いついていないようです)

次に表示されるダイアログではターゲット等を設定しますが、特に変更することはなく、OKを押せば良いはずです。

packageをimportする

Pakcageを利用するコード側でpackageをimportする必要があります。
ですので、ContentViewに”import SPMWithResource”を追加します。

コード




ローカルのPackageから、リモートのPackageへ移行する

ローカルのPackageがプロジェクトに直接含まれている状態です。

変更する必要があれば、この状態で変更して、Packageをコミットしてプッシュすることで、Packageの内容をアップデートすることもできます。

Package内容のアップデートが不要になった段階で、プロジェクトからローカルのPackageを削除して、リモートのPackageを使うように設定変更するのがおすすめです。

こうすることで、プロジェクトでの作業で、意図せず、Packageを変更してしまうことを避けられます。

説明が多いですが、やることは簡単で、プロジェクト直下に見えているPackageのディレクトリを削除するだけです。

削除するために、すこしドキドキしますが、プロジェクトには、SPMの情報が設定されているので、以下のように自動的にリモートのパッケージを参照する形に切り替わります。

refertoRemote




まとめ:プロジェクトを作成したあとに、一部をPackageに移行し、その後Packageをリモート化する方法は、4つのステップです

以下の手順に分けて説明しました。

  • プロジェクトを作成しました
  • イメージファイル等のリソースを含めた一部をPackageに移行しました
  • Packageをリモート化しました
  • 一部をPackageに移行した後のプロジェクトの設定変更手順も説明しました

説明は以上です。




コメントを残す

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