SwiftPMでプライベートリポジトリのライブラリをSSHで参照する方法
はじめに
SwiftPM(Swift Package Manager)でプライベートリポジトリを参照する方法は3つあります。
- HTTPS
- OAuth2.0
- SSH
HTTPS、OAuth2.0を使用する方法は、暗号化されていないIDやパスワードやトークンなどをGitなどで管理する必要があるため、SSHを使った方法で参照するのが安心です。
SSHを使用してプライベートリポジトリを参照する際に
git@github.com: Permission denied (publickey).
が出てハマったので、備忘録として残しておきます。(解決法はUseKeychain yesをconfigに指定)
SSH接続を使用したプライベートリポジトリのライブラリの参照
プライベートリポジトリのライブラリをSSHで参照する場合、Package.swiftに以下のようにプライベートリポジトリを指定します。
dependencies: [
.package(url: "git@github.com:wanarin/practice-ios-app.git", // リモートリポジトリの場所
from: "1.0.0")
]
プライベートリポジトリの指定先はGitHubの場合、以下のようにCode > Local > SSHで参照できます。
その他は通常のパブリックリポジトリのライブラリを参照する場合と同じように設定することでプライベートリポジトリのライブラリを参照することが出来る様になります。
ハマったこと
Xcodeが使用するSCM(Source Control Management)について
IDEPackageSupportUseBuiltinSCMという設定があり、Xcodeが使用するGitの設定をシステムのものか、Xcode内で設定したものかを切り替えることができます。具体的には、この設定によってXcodeがGitリポジトリにアクセスする際に、システムにインストールされているGitの設定を使用するか、Xcode内で設定したGitの設定を使用するかが決まります。
現在の設定を確認する場合は、以下で確認することが出来ます。
defaults read com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM
YES(or 1)の場合はシステムの設定、NO(or 0)の場合はXcodeの設定を使用するみたいです。
設定を変更したい場合は、以下で変更することが出来ます。
defaults write com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM YES
Xcodeの設定を使用する場合
IDEPackageSupportUseBuiltinSCMをNOにした場合、こちらの設定が必要になるはずです。
(実際には試していないので、動作の保証は出来かねます。)
手順が分かりやすくまとまっているサイトがあったので貼っておきます。
システムの設定を使用する場合
IDEPackageSupportUseBuiltinSCMがYESの場合、こちらの設定が必要になります。
(SSHの設定が完了している方はこちらはスキップしてください。)
SSH接続ができるかは以下のコマンドで確認することが出来ます。
ssh -T git@github.com
> Hi wanarin! You've successfully authenticated, but GitHub does not provide shell access.
SSHの設定が完了していない場合は、GitHubが詳しく説明してくれているのでおすすめです。
上記の設定をする場合に、configファイルの作成を忘れずに行うようにしましょう。
UseKeychainをconfigに指定しておくことで、keychainのキーパスの入力を省略することが出来ます。
指定しておかないとXcode上でキーパスを入力できない為、SSH接続できずにエラーが発生してしまいます!(最初に書いたハマりポイント)
まとめ
プライベートリポジトリを参照すること自体は特に難しいことはないです。
当たり前ですが、SSHの設定を適切に行わないと参照できないので注意しましょう。
Discussion