XcodeでSwift Package Manager(SwiftPM)のパッケージを追加・更新・解決するときに、repository not found と表示されて依存関係を取得できないことがあります。このエラーは、リポジトリURLの誤り、リポジトリの移動・削除、Private Repositoryへの認証失敗、GitHubなどのアクセス権不足、キャッシュされた古いURLなどが原因で発生します。
エラーの例
fatal: repository 'https://github.com/example/sample-package.git/' not found
repository not found
Could not resolve package dependencies
主な原因
- Package Dependencyに登録したGit URLが間違っている
- リポジトリ名やOrganization名が変更された
- 対象リポジトリが削除・非公開化された
- Private Repositoryに対するGitHub・GitLab等の認証情報が無効
- 現在のアカウントにリポジトリの読み取り権限がない
- HTTPSとSSHの接続方式が環境と合っていない
- XcodeやSwiftPMが古いリポジトリ情報をキャッシュしている
代表的な発生状況
新しいMacへプロジェクトを移した直後、チームメンバーからプロジェクトを受け取った直後、Private RepositoryのトークンやSSHキーを変更した後、パッケージ提供元がGitHub上でリポジトリ名を変更した後などに発生しやすいエラーです。また、CI環境ではローカルMacと異なり認証情報が設定されていないため、同じプロジェクトでもCIだけで失敗することがあります。
確認手順
1. Xcodeに登録されているURLを確認する
Xcodeのプロジェクト設定からPackage Dependenciesを開き、対象パッケージのRepository URLを確認します。ブラウザで同じURLを開き、現在もリポジトリが存在するか確認してください。
2. Gitコマンドでアクセスできるか確認する
git ls-remote https://github.com/example/sample-package.git
ここでも repository not found が返る場合、Xcode固有の問題ではなくURLまたはGit認証の問題である可能性が高いです。
3. Private Repositoryか確認する
ブラウザでログインしていると開けるのにGitでは取得できない場合、Personal Access Token、Credential Helper、SSHキーなどの認証を確認します。
解決方法1:正しいRepository URLへ修正する
リポジトリが移動・改名されている場合は、XcodeのPackage Dependenciesから古い依存関係を削除し、新しいURLで追加し直します。
https://github.com/organization/package-name.git
URL末尾の.gitの有無はホスティングサービスによって両方利用できる場合がありますが、提供元が案内している正式なClone URLを使用するのが安全です。
解決方法2:Private Repositoryの認証を修正する
HTTPSでPrivate Repositoryへ接続する場合は、古いパスワードや失効したトークンが保存されていないか確認します。GitHubなどでは通常のアカウントパスワードではなくPersonal Access Token等が必要になる場合があります。
git ls-remote https://github.com/organization/private-package.git
このコマンドで認証に失敗する場合は、Xcodeより先にGit側の認証設定を直してください。
解決方法3:SSH接続を確認する
SSH URLを使用している場合は、SSHキーがホスティングサービスへ登録されているか、現在のMacから認証できるか確認します。
ssh -T git@github.com
使用するURLの例:
git@github.com:organization/package-name.git
解決方法4:XcodeでPackageを再解決する
URLと認証に問題がない場合は、XcodeのFile > Packages > Reset Package Cachesを実行し、その後Resolve Package Versionsを実行します。Xcodeのバージョンによってメニュー名や配置が多少異なる場合があります。
解決方法5:Package.resolvedを確認する
古いリポジトリURLや取得不能なrevisionがPackage.resolvedに固定されている場合があります。チーム開発では勝手に削除する前に差分を確認してください。必要に応じて依存関係を再解決します。
xcodebuild -resolvePackageDependencies -project MyApp.xcodeproj -scheme MyApp
解決方法6:リポジトリのアクセス権を確認する
Organization配下のPrivate Repositoryでは、招待の承認、Teamへの所属、SSO認証、トークンのRepository権限などが必要になる場合があります。ブラウザで表示できるだけでなく、Git clone相当の読み取り権限があることを確認してください。
CIで発生する場合
ローカルでは成功しCIだけでrepository not foundになる場合、CI環境に認証情報が渡されていない可能性があります。SSHキー、Deploy Key、アクセストークン、Keychain設定などをCI側で確認します。秘密情報をPackage.swiftやリポジトリURLへ直接埋め込まないでください。
注意点
repository not foundは、実際にはリポジトリが存在していても、アクセス権のないユーザーに対してセキュリティ上「存在しない」ように返される場合があります。そのため、URLが正しい場合は認証と権限を重点的に確認してください。
キャッシュ削除やPackage.resolvedの削除だけで直そうとせず、まずgit ls-remoteでリポジトリへ直接アクセスできるかを確認すると原因を切り分けやすくなります。
まとめ
Xcode Swift Packageの「repository not found」は、最初にRepository URL、次にGit認証、その次にアクセス権を確認するのが基本です。Gitコマンドで取得できるのにXcodeだけ失敗する場合は、Package Cacheのリセットや依存関係の再解決を試します。Private RepositoryではHTTPSトークンやSSHキー、Organization権限、CIの認証設定まで確認すると解決しやすくなります。
