iOS

LocalPackageをXcodeからPackageとして公開する

xcode-publish-package

LocalPackageをXcodeからPackageとして公開する

Xcode11からXcode上でSwift Package Managerのパッケージを作成・利用できるようになりました。公開されているパッケージをライブラリとして利用したり、プロジェクトのコードの一部をLocal Packageとしてプロジェクトから切り離してモジュール化することができます。 私も開発をする際に、コード整理や再利用性も考慮して、共通のextensionやcomponentsをLocal Packageに切り出しています。しかしこのままでは新規にアプリを作成するときに、そのコードをコピーしないといけないので、Local PackageをGitHubにプロジェクトにアップロードし、パッケージとして公開したので、その手順をまとめました。 またプロジェクトのCommit, PushなどのGitの操作をXcodeから操作できるようになり、今回初めて操作したのですが、思ったよりも操作しやすかったので、今回のGitの操作は、Xcodeを利用しています。

Local Packageを公開する

まずはプロジェクト内にLocal Packageを作成します。 私の場合は、以下のように4つのLocalPackageを作成していました。 それぞれ共通のコンポーネントやextension、ネットワーク処理やUtilsをまとめたものです。 SwiftComponentsSwiftExtensionに依存しているので、公開するのはそのパッケージにも依存していないものからにします。 xcode-publish-package0


準備として、該当のLocal Package をコピーして、別のディレクトリに移動します。 そしてその中のPackage.swiftをクリックすると、そのパッケージだけをXcodeで開くことができます。 Gitの操作をする前に、ビルドが通るかどうかを確認するために一回ビルドしてみましょう! またREADMEにそのパッケージの情報を記載したい場合は、記載しましょう(私は自分用のパッケージなので、書きませんでした笑) ビルドが通ったら、いよいよパッケージをGitHubにアップします。 上部のメニューから「Source Control」→「New Git Repositories」を選択します。 xcode-publish-package1
そしてそのまま、Createします。 そうすると、既存の実装が以下のようにInitial Commitとしてコミットされます。 xcode-publish-package6
Xcodeでコミット履歴を確認するためには、Xcodeの左側のメニューの左側から2番目のアイコンをタップして、その後パッケージ名のところを選択します。 xcode-publish-package10 次にタグを設定します。 公開されたパッケージを利用できるようにするためには、1.0.0のようなタグを設定する必要があります。 以下のキャプチャのように、パッケージ名の箇所でメニューを開き、「Tag “main”」を選択します。 xcode-publish-package3

そして以下のように例えば1.0.0などと設定し、タグを作成します。 xcode-publish-package4
次にリモートリポジトリを追加します。 今回は新規のリポジトリを作成します。 GitHubにログインしていない場合は、GitHubにログインします。 私の場合は、GitHubのIDとGitHub Personal Access Tokenを使用してログインしました。トークンの発行方法は、こちらで確認できます。 あとはリポジトリ名やリポジトリの詳細を記載します。 今回は誰でも閲覧・利用できるパッケージにするので、VisibilityPublicにして、Createします。 xcode-publish-package2
そして最後にリモートリポジトリにPushします。 Xcodeの上部のメニューの「Source Control」→「Push」を選択します。 以下のような画面が表示されたら、Include tagsにチェックをつけて、Pushします。 xcode-publish-package5
これで、Local PackageをGitHubに公開し、どのアプリからでも利用できるようになりました。 既存のLocal Packageを使用しているアプリからそのパッケージを削除し、新規に作成したパッケージのURLを利用して、Remote Packageを追加します。 なお私の場合は、SwiftUtilsなどは上記で追加したSwiftExtensionsに依存しているので、既存のLocal Packageを、新規に作成したRemote Packageに置き換えます。 元々以下のようなPackage.swiftになっているのを、
xcode-publish-package7

以下のように、Remote PackageのURLに置き換えます。 xcode-publish-package8
これで作業としては、上記と同じことをすることで、このパッケージも公開することができます。 SwiftUtilsの最終的なPackage.swiftは以下のようになりました。 xcode-publish-package9 

まとめ

今回はローカルで作成したパッケージをGitHubに公開し、別のアプリからでも共通に利用できるようにしました。 個人開発でよく利用するextensionやコンポーネントなどは共通で使いまわせるようにしておくと便利です。 実際の使い方としては、最初はLocal Packageとして開発を続け、後々実装が落ち着いた時にRemote Packageとして利用するようになると思います。 1つのプロジェクトにすべてのコードや処理をまとめてしまうと、依存性がめちゃくちゃになってしまったり、一部の処理を別のアプリで使おうと思った時に使い回しにくくなってしまう時があります。その時に機能やコンポーネント単位でモジュールとして切り出すと、コードの見通しや再利用性も高まります。 このSwift PackageはApple純正のものでXcodeで公式にサポートされているため、利用しやすいですし、今後も機能追加されていくことが予想されるので、一部機能のモジュール化には非常に利用しやすいと思います。

+2

COMMENT

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

CAPTCHA