Swift Package ManagerでPrivateなレポジトリのパッケージへの依存を含むプロジェクトをBitrise上でビルドしようとして、認証周りで少しハマってしまった。
Swift Package ManagerがmacOSアプリにも対応したため、既存のプロジェクトのパッケージ管理をCocoaPodsからSwift Package Managerに移行する作業を進めている。今まで、CocoaPodsを使っているときはビルド高速化(とパッケージ消失対策)のため、Podsの中身をレポジトリにアップロードするようにしていた。非公開ライブラリであろうと、gitレポジトリにコピーがアップロードされるため、Bitriseから非公開ライブラリのレポジトリにアクセスできなくても問題なくビルドできていた。
Swift Package Managerでパッケージを管理しBitriseでビルドをする場合、基本的に依存パッケージはビルドのタイミングでBitriseのサーバーがFetchしにいく形になる。従って、 パッケージのレポジトリが非公開の場合、Bitriseからそのレポジトリにアクセスするための手段を用意しなければ、パッケージのFetchに失敗してビルドエラーになってしまう。今回移行したプロジェクトは、PrivateなGithubレポジトリにおいてあるパッケージを参照していたためビルドエラーとなり、その対処に少し手間取った。
最初はGithubのDeploy Keyを設定すれば良いのかと思って色々試していたが、この方法はうまくいかなかった。どうやらGithubのDeploy keyは一つのSSH鍵を複数のレポジトリに登録することが許可されていないようだ。
https://devcenter.bitrise.io/jp/faq/adding-projects-with-submodules/
https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users
結論から言うと、このようなケースではCIからのビルド用に別途Githubアカウントを用意するのが推奨されているようだ。
CI用のGithubアカウントを新しく用意し、プロジェクト自体のレポジトリと、参照しているパッケージのレポジトリに対してアクセスできるようにしておく。BitriseのプロジェクトのSSH settingsで確認できるSSHの公開鍵をGithub側に登録する。そうすることで、ビルド時にプロジェクトのレポジトリと非公開ライブラリのレポジトリの両方にアクセスできるようになる。
なお、レポジトリへのアクセス権限に関してはREADのみの権限での追加が推奨されているようだが、現状Organizationでない限りREAD ONLYの追加はできない。残念ながら、Organizationではない個人のPrivateレポジトリでは今のところこの問題を回避する方法がなく、気になる場合はOrganizationの登録を検討する必要がある。