目的
- SPMマルチモジュール化の手順を整理すること
- 既にいくつか 手順を整理した記事 は存在していますが、
取り組みやすさ
を優先し自分なりにまとめてみました
- 既にいくつか 手順を整理した記事 は存在していますが、
- 備忘録
ゴール
以下のような、SPMマルチモジュール構成
を採用したプロジェクトを作れるようになること
前提
SwiftUIベースの初期プロジェクト
作成
今回は初期プロジェクトをSPMViewTranslation
とします
手順
パッケージを生成 (1/4)
-
パッケージ用のフォルダを作成 (
SPMViewTranslationPckage
) - フォルダをパッケージ化
.bash
$ cd ~~~~/SPMViewTranslation
$ ls
SPMViewTranslation.xcodeproj SPMViewTranslationUITests
SPMViewTranslation SPMViewTranslationTests
$
$ mkdir SPMViewTranslationPckage // 名称は任意, 初期プロジェクト名とは被らないよう注意
$ cd SPMViewTranslationPckage
$ swift package init // パッケージ化
Creating library package: SPMViewTranslationPackage
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/SPMViewTranslationPackage/SPMViewTranslationPackage.swift
Creating Tests/
Creating Tests/SPMViewTranslationPackageTests/
Creating Tests/SPMViewTranslationPackageTests/SPMViewTranslationPackageTests.swift
$
$ ls
Package.swift Sources Tests
SPMを初期化する際のディレクトリは、SPMViewTranslation と名称を被らせないようにする必要があります。
今回は ディレクトリを SPMViewTranslationPckage
(= SPMViewTranslation + Package) という名称にしています。
SPMViewTranslation と名称が被った場合、パッケージとして読み込んでくれません。注意してください。
ディレクトリ構造
確認
console.bash
$ cd ~~~~/SPMViewTranslation
$ tree -L 2 // brew で tree をインストールする必要がある
├── README.md
├── SPMViewTranslation
│ ├── SPMViewTranslation
│ ├── SPMViewTranslation.xcodeproj
│ ├── SPMViewTranslationTests
│ └── SPMViewTranslationUITests
└── SPMViewTranslationPackage
├── Package.swift
├── Sources
└── Tests
マルチモジュール化 (2/4)
-
SPMViewTranslation.xcodeproj
を開き、GIFのように (Package.swiftの親ディレクトリである)SPMViewTranslationPackage
を .xcodeproj へ追加する。
.bash
$ cd ~~~~/SPMViewTranslation
$ open SPMViewTranslation/SPMViewTranslation.xcodeproj
パッケージの整理 (3/4)
-
不要なフォルダ
を削除
Sources/SPMViewTranslationPackage
Tests/SPMViewTranslationPackageTests
.bash
$ cd ~~~~/SPMViewTranslationPackage // Package です
$
$ ls Sources
SPMViewTranslationPackage
$ rm -rf Sources/SPMViewTranslationPackage
$
$ ls Tests
SPMViewTranslationPackageTests
$ rm -rf Tests/SPMViewTranslationPackageTests
- フォルダの削除に合わせて、Package.swift を変更
Package.swift
import PackageDescription
let package = Package(
name: "SPMViewTranslationPackage",
products: [
],
dependencies: [
],
targets: [
]
)
モジュールの追加 (4/4)
-
Source 配下に Featureフォルダを作成
-
Featureフォルダに FirstView.swift を追加
Package.swift を以下のように設定
import PackageDescription
let package = Package(
name: "SPMViewTranslationPackage",
+ platforms: [.iOS(.v17)], // プロジェクトによって異なる
products: [
+ .library(name: "Feature", targets: ["Feature"])
],
dependencies: [
],
targets: [
+ .target(name: "Feature")
]
)
FirstView.swift
import SwiftUI
struct FirstView: View {
var body: some View {
Text("First View!")
}
}
#Preview {
FirstView()
}
良いSPMマルチモジュールライフを!
参考