SwiftPMでiOSプロジェクトを構成してみる
概要
2021年4月22日のSwift愛好会にて、d_dateさんが「Swift PM centered iOS Development」というタイトルで発表いただいた談義が興味深く、自分でも実際にこのプロジェクト構成で組んでみようと思ったため、自分が行った手順を紹介します。
プロジェクト構成の概要
談義内で紹介されていたプロジェクト構成について、簡単に説明しておきます。
複数人で開発していると.xcodeproj
がコンフリクトすることがあり、その解決策としてXcodeGenを使っているプロジェクトも多いと思います。
ただXcodeGenを使用するには学習コストがかかり、またproject.ymlの管理もしなければなりません。
そこでエントリポイント以外に関するコードをPackageに書くことで.xcodeproj
に変更を加えずに開発することができます。
構成手順
大きな流れとしては以下のようになります。
- workspaceの作成
- Staging projectとProduction projectの作成
- workspaceにxcodeprojを追加
- Packageを追加
1.Workspaceの作成
まずディレクトリを作成しておきます。
mkdir SwiftPMForiOS
その後Xcodeを開き、「File」 -> 「New」 -> 「Workspace」から先程作成したディレクトリ配下にworkspaceを作成します。
2.Projectの作成
先にアプリケーション用のファイル/ディレクトリを配置するための、Appディレクトリを作成しておきます。
mkdir SwiftPMForiOS/App
次に「File」 -> 「New」 -> 「Project」でStaging用のprojectを作成します。
保存先は先程作成したworkspaceと同じ階層にしておきます。
ここまでの作業で現在の構成は以下のようになっていると思います。
Staging配下のものをApp配下に移動し、ディレクトリ名もiOSに変更しておきます。不要なStagingディレクトリは削除しておきます。すると以下のような構成になると思います。
この状態でStaging.xcodeprojを開くと以下のように赤くなっているので、Xcodeの右側にあるInspectorから正しいディレクトリ/ファイルのパスを指定してください。
またBuild Settingsの以下項目も修正しておきます。
項目名 | 変更前 | 変更後 |
---|---|---|
Development Assets | Staging/Preview Content" | iOS/Preview Content |
Info.plist File | Staging/Info.plist | iOS/Info.plist |
上記と同様の手順でProduction用のprojectも作成してください。
4.WorkspaceにProjectを追加
「パッケージの内容を表示」からcontents.xcworkspacedataをエディタで開き、以下のような設定にしておきます。
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:App/Staging.xcodeproj">
</FileRef>
<FileRef
location = "group:App/Production.xcodeproj">
</FileRef>
<FileRef
location = "group:">
</FileRef>
</Workspace>
location = "group:"
については、次のPackageを追加する際にXcodeから参照されるために必要なので、あらかじめ記述しておきます。
ここまでの作業で以下のような構成になっていると思います。
5.Packageを追加
Packageを以下のように追加します。
すると以下のような構成になるので、
SamplePackageディレクトリ配下のものをルートディレクトリ直下に移動し、SamplePackageディレクトリを削除します。
このままではAppディレクトリもPackageに含まれてしまうので、Appディレクトリ直下にPackage.swiftを用意し、以下を記述することで参照されないようにします。
import PackageDescription
let package = Package(
name: "client",
products: [],
targets: []
)
Projectに作成したライブラリをリンクします。
最終的に以下の様な構成になります。
まとめ
今回紹介した構成のプロジェクトをgithubに上げて置いたので、良ければ参考にしてください。
また自分でプロジェクトを構成するのが面倒な方、リポジトリをzipでダウンロードしworkspace名とルートディレクトリ名を任意の名前に変更するとすぐ使うことができます。
Discussion