Sponsor Link
目次
SwiftPackageManagerのPackageをGithubでサンプルコード付きで公開する手順
- XcodeでPackageを作る
- Githubで公開する
- Xcodeでアプリ向けのプロジェクト(AppProject)を作る
- AppProjectにGithubで公開したPackageを追加する
- 公開したPackageをローカルに追加する
- AppProjectごと公開する
エラーコードは以下。
1 2 3 4 5 6 7 8 |
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: <DVTExtension 0x7fa4f8c64a40: Swift Package Proxy (Xcode.IDEFoundation.Container.SwiftPackageProxy) from com.apple.dt.IDE.IDESwiftPackageSupport> and requested container extension: <DVTExtension 0x7fa4f8c65280: Swift Package (Xcode.IDEFoundation.Container.SwiftPackage) from com.apple.dt.IDE.IDESwiftPackageSupport> for file path: <DVTFilePath:0x7fa5059b6ce0:'/Users/UserName/Library/Developer/Xcode/DerivedData/AppWithSPM-hfgspyxgilxmvydqwpphihjuigcn/SourcePackages/checkouts/SPMForApp'> Object: <IDEContainer> Method: +_retainedContainerAtFilePath:fileDataType:workspace:options:error: Thread: <NSThread: 0x7fa4f8d1c160>{number = 1, name = main} Open FDs: 55/9472 |
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対象をダイアログで確認されます。
開発が終わった時
アプリ/パッケージ開発が終わったら、アプリから、ドラッグ&ドロップで追加したパッケージを削除します。(この時リファレンスだけを削除してください)
削除するとXcodeが、SPMのパッケージへの依存関係を再構築してくれます。
まとめ:SPMパッケージとアプリを並行して開発できます
特に両方とも自分で開発していると、アプリの開発とパッケージの開発を並行して行うことが必要となりますが、この環境を作ることで、シームレスに両方の開発ができるようになります。
大変便利です。
説明は以上です。
Sponsor Link