🍎
isowords式のマルチモジュール構成のセットアップ手順
isowords を参考に、SwiftPMを利用したマルチモジュール構成をセットアップする。
手順
-
xcworkspace作成
-
rootディレクトリ配下にPackageディレクトリを作成
swift package init
- xcworkspaceにdrag&drop
-
xcodeproj(本体アプリ)作成
- xcworkspaceに追加
- 適宜ディレクトリを調整するのに合わせて、
xcworkspace/content.xcworkspacedata
のlocation= groupのFileRefを調整する
<?xml version="1.0" encoding="UTF-8"?> <Workspace version = "1.0"> <FileRef location = "group:ReactorSwiftUIExample/ReactorSwiftUIExample.xcodeproj"> </FileRef> <FileRef location = "group:Demo.swiftpm"> </FileRef> <FileRef location = "group:Package"> </FileRef> </Workspace>
-
Package/Package.swift
にライブラリ・モジュールを定義let package = Package( name: "Package", products: [ // Framework(BuildTargetとリンクする実行可能バイナリ) .library(name: "AppFeature", targets: ["FeatureA"]), ], dependencies: [ ], targets: [ // Module(importができる単位) .target(name: "FeatureA", dependencies: ["FeatureB"]), .target(name: "FeatureB", dependencies: []) ] )
-
4で作成したライブラリをxcodeprojにLinkする
Demo用のSwift Playgrounds Appの追加
Swift Playgrounds Appを使ってDemo用のAppを作成する。
本体Appで使用してるPackageをDemoAppのDependenciesに追加。必要なモジュールをTarget.dependenciesに追加することで必要最小限の構成でアプリを起動できる。
// Demo.swigtpm/Package.swift
let package = Package(
...
dependencies: [
.package(name: "Package", path: "../Package")
],
targets: [
.executableTarget(
name: "AppModule",
dependencies: [
// PackageのFatureAモジュールをDemoAppで使用できるように
.product(name: "FeatureA", package: "Package", condition: nil)
]
)
]
)
ここまで設定すると以下のようなXcode/Finder上の表示となる。
Xcode | Finder |
---|---|
![]() |
![]() |
Discussion