【Xcode/iOS】Swift Package Managerでマルチモジュール化する方法!

【Xcode/iOS】Swift Package Managerでマルチモジュール化する方法!

この記事からわかること

  • Swift Package Managerとは?
  • Xcode/SPMマルチモジュール化する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

この記事はSPM(Swift Package Manager)を使用してマルチモジュール化を軽くやってみたという記事になっています。

SPMでマルチモジュール化する方法

SPMでアプリの構造自体をマルチモジュール化していくためにはSPMの使い方を把握しておく必要があります。詳細は以下の記事を参考にしてください。

今回は機能ごとに3つのモジュールに分けて管理するような想定で作成してみます。例として以下のようにしましたが実際のアプリではドメインごとにモジュールを作成してその中に画面やViewModelを閉じ込めていくようにしていけば良いと思います。

このマルチモジュール想定での「Package.swift」の中身が以下になります。


import PackageDescription

let package = Package(
    name: "Sample-Mulch-Module-App",
    platforms: [
        .iOS(.v16)
    ],
    products: [
        .library(name: "CoreModule", targets: ["CoreModule"]),
        .library(name: "NetworkModule", targets: ["NetworkModule"]),
        .library(name: "UIModule", targets: ["UIModule"])
    ],
    targets: [
        .target(
            name: "CoreModule",
            // マルチモジュールにするので明示的にパスを指定する
            path: "Sources/CoreModule"
        ),
        .target(
            name: "NetworkModule",
            // 依存するモジュールを指定する
            dependencies: ["CoreModule"],
            path: "Sources/NetworkModule"
        ),
        .target(
            name: "UIModule",
            // 依存するモジュールを指定する
            dependencies: [
                "CoreModule",
                "NetworkModule"
            ],
            path: "Sources/UIModule"
        )
    ]
)

中身はすごい適当ですが全てに依存しているUIModuleではCoreModuleNetworkModuleを使用することができます。しかし例えばNetworkModuleではCoreModuleは使えてもUIModuleは使用できないようになります。


import SwiftUI
import CoreModule
import NetworkModule

public struct MyUIView: View {
    public var body: some View {
        Button {
            Network.printOnline()
        } label: {
            Text(Core.text)
        }
    }
}

このようにマルチモジュール化することによって必要なモジュール単位での依存に抑えることができるのでコードが複雑に入り混じり影響範囲が掴めなくなってしまうような構成を避けることができます。

おすすめ記事:GitHub Sample-Mulch-Module-App

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index