[SwiftPM] SwiftPackage に サンプルプロジェクトを追加する

SwiftPackageManagerEyeCatch

     
SwiftPackage に サンプルプロジェクト を含める手順を考えてみました。

環境&対象

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

  • macOS Monterey 12.4 beta2
  • Xcode 13.3.1
  • iOS 15.4

サンプルプロジェクトの扱い

SwiftPackage を公開したとき、ドキュメントやサンプルコードが用意されていると、実際に使ってもらう時のハードルが下がります。

ドキュメントやサンプルコードの他に、実際にすぐに動作させることができる プロジェクトがあると、動かしながら動作を確認することができますので、より分かりやすくなります。

ということで、example.xcodeproj のようなプロジェクトを SwiftPackage のそばに置いておくと便利な気がします。

ですが、サンプルプロジェクトを SwiftPackage に含めようとすると、手が止まります。

SwiftPackage は、Package.swift を使って管理されていますが、この Package.swift に サンプルプロジェクトを追加する方法がありません・・・

Package.swift は、.xcodeproj を理解しません

Swift Package は、Package.swift をダブルクリックすることで Xcode でも開けますが、.xcodeproj(Xcodeの通常のプロジェクト情報を持つファイル) があっても 使ってくれません。

そもそも、Package.swift に サンプルプロジェクトの情報を記述しても、サンプルプロジェクトはあくまでリファレンス的なものですので、あくまで補足的なものです。

つまり、サンプルプロジェクトを Package.swift に記述する方法はないようです。

別リポジトリにする手もあります

サンプルプロジェクトを用意する1つの方法は、SwiftPackage とは別のリポジトリを作成し、そのリポジトリへのリンク等を Readme に記載しておくことです。(実際に、このような形で公開されているリポジトリも多くあります。)

この方法も良いのですが、次に紹介する方法で 1つのリポジトリで管理することもできます。

サブフォルダの中に .xcodeproj

SwiftPackage は、Package.swift に記述された対象しか理解しません。つまり、サブフォルダを作成して、何かを配置しておいても エラーという扱いになりません。

このことを利用して、サブフォルダに サンプルプロジェクトを置いておくことができます。

1つのリポジトリに置いておくことで、メンテナンスのときの手間を少しですが、減らすこともできると思います。

サブフォルダであることは必要?
(試していませんが).xcodeproj ファイルを Package.swift と同じ場所に配置することも可能だと思います。ですが、2つのフォルダ構成が1つのフォルダを共有する形になってしまうので、不必要に複雑化してしまい、お勧めしません。

Swift Package に example project を追加する

実際に、Swift Package に サンプルプロジェクトを追加していってみます。

SDSCustomView という すでに存在する SwiftPackage に、サンプルプロジェクトを追加してみます。
追加前のフォルダは以下のようになっています。

SwiftPackageFolder

projectを作る

Xcode 上で、「File」 -「New」-「Project...」を使って、サンプルプロジェクトを作成します。

プロジェクトの保存場所に SwiftPackage の Package.swift がある フォルダを選択してください。

このときに、作成するプロジェクトでは、git を有効にしないでください。(有効できなくなっているはずです)

注意
git 操作を行うときは、コマンドラインであれば、Package.swift の存在するフォルダから。
Xcode であれば、Package.swift で開いた状態で git 操作を行なってください。
あくまで git のルートディレクトリは、Package.swift の存在するディレクトリです。

以下のスクリーンショットは、"FixedWidthLabelExample" というプロジェクトを作成した状態です。

ProjectAdded

以降は、サンプルプロジェクトへの設定です。(今回の例で言うと FixedWidthLabelExample プロジェクト)

project に SwiftPackage を追加する

SwiftPackage の使用サンプルになるプロジェクトですので、SwiftPackage を追加しないといけません。

「File」-「Add Package...」で表示されるダイアログで、左下の "Add Local..." を押下し、追加したい SwiftPackage のフォルダを選択します。

addSPM

追加したい SwiftPackage として、Package.swift が配置されているフォルダを選択します。(サンプルプロジェクトの .xcodeproj が配置されているフォルダの1つ上のフォルダ)

その後、プロジェクトエクスプローラで、プロジェクト、Target と選択した画面で、先ほど追加した SwiftPackage を Target に追加します。

addLocalStep2
addLocalStep3

サンプルプロジェクト にコードを書く

ここまでの設定で、import を適切に記述すれば、SwiftPackage は使える状態になりましたので、あとは、サンプルコードを記述するだけ(?)です。

サンプルプロジェクトを追加したフォルダ

最終的に、以下のようなフォルダ構成になります。

FolderFinal

①をダブルクリックすると、SwiftPackage が開き、②をダブルクリックするとサンプルプロジェクトが開きます。

まとめ

SwiftPackage に サンプルプロジェクトを含める方法を説明しました。

MEMO
特に正式な方法があるわけではないので、ここに書いた以外の方法で含めてもOKです。
SwiftPackage に サンプルプロジェクトを含める方法
  • サブフォルダに、.xcodeproj を入れる
  • プロジェクトには、Add Local をつかって、SwiftPackage を追加する
  • Target にライブラリを手動で追加する

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

コメントを残す

メールアドレスが公開されることはありません。