[SwiftPM] XcodeのSPM Packageとアプリ開発を並行して行う方法

SwiftPackageManagerEyeCatch

     
⌛️ < 1 min.
SPMのパッケージをパッケージだけではなく、パッケージを使ったアプリ側の開発も並行して行う手順を説明します。

SwiftPackageManagerのPackageをGithubでサンプルコード付きで公開する手順

  • XcodeでPackageを作る
  • Githubで公開する
  • Xcodeでアプリ向けのプロジェクト(AppProject)を作る
  • AppProjectにGithubで公開したPackageを追加する
  • 公開したPackageをローカルに追加する
  • AppProjectごと公開する
注意

このAppleのドキュメントに従うと、XcodeでSPMからインポートしたディレクトリを追加するように読めるのですが、実際にローカルに取得されたディレクトリ を追加しようとすると、Xcodeがクラッシュします。
エラーコードは以下。

Application Specific Information:
ProductBuildVersion: 11E608c
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-16139/IDEFoundation/ProjectModel/Containers/IDEContainer.m:578
Details:  Error: Mismatch between existing container extension:  and requested container extension:  for file path: 
Object:   
Method:   +_retainedContainerAtFilePath:fileDataType:workspace:options:error:
Thread:   {number = 1, name = main}
Open FDs: 55/9472

自分でローカルに持っているパッケージをXcodeのアプリ側のプロジェクトにインポートすると問題なく動作します。




XcodeでPackageを作る

ここの記事で説明しています。

Githubで公開する

XcodeからRemoteにCommitする時に、選択することで公開できます。

Xcodeでアプリ向けのプロジェクト(AppProject)を作る

普通にXcodeでアプリ向けのプロジェクトを作ってください。

AppProjectにGithubで公開したPackageを追加する

プロジェクトの設定で、先にGithubに公開したライブラリを指定して取り込みます。
一番初めに取り込むときは、GithubのURLがフルパスで必要かもしれません。

公開したPackageをローカルに追加する

ここからが、ポイントとなります。
作成したPackageをGithubに公開するために作ったXcodeプロジェクトがあると思いますが、そのディレクトリをこのアプリのためのプロジェクトにドラッグ&ドロップで追加します。

この時に、すでに追加しているSwiftPackageを削除してはいけません。Xcodeが自動的にDependencyをアップデートしてくれます。(つまりローカルのファイルを使うようになります。)

AppProjectごと公開する

アプリも、SPMのパッケージと同様に、RemoteにCreateするとGithubに登録することができます。

アプリコードとPackageコードを並行して修正

この状態で、アプリのコードとPackageのコードを並行して修正することが可能となっています。

コードを編集して公開しようと、Pushするときに、Push対象をダイアログで確認されます。

PushToGithub

開発が終わった時

アプリ/パッケージ開発が終わったら、アプリから、ドラッグ&ドロップで追加したパッケージを削除します。(この時リファレンスだけを削除してください)

削除するとXcodeが、SPMのパッケージへの依存関係を再構築してくれます。




まとめ:SPMパッケージとアプリを並行して開発できます

特に両方とも自分で開発していると、アプリの開発とパッケージの開発を並行して行うことが必要となりますが、この環境を作ることで、シームレスに両方の開発ができるようになります。

大変便利です。

説明は以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です