XcodeでSwift Packageを追加・更新するとき、Gitリポジトリへの接続時にauthentication failedと表示され、パッケージを取得できないことがあります。特にPrivate Repositoryを利用している場合、認証情報の期限切れ、権限不足、古い資格情報のキャッシュ、HTTPSとSSHの設定不一致などが原因になりやすいエラーです。
主な原因
- GitHubなどのアクセストークンが無効・期限切れになっている
- 通常のアカウントパスワードをHTTPS認証に使っている
- Private Repositoryへの読み取り権限がない
- macOSのキーチェーンに古い認証情報が残っている
- SSHキーが未登録、またはssh-agentに読み込まれていない
- 組織側のSSOやアクセス制限で認証が拒否されている
- Xcodeが参照しているPackage URLと実際に利用する認証方式が一致していない
代表的な発生状況
Failed to clone repository
authentication failed
Swift Packageの追加、Package Dependenciesの更新、別のMacへの開発環境移行、トークン更新後などに発生します。公開リポジトリでは問題なく、Private Repositoryだけ失敗する場合は認証情報やアクセス権を優先して確認します。
確認手順
1. リポジトリURLを確認する
git remote -v
HTTPSを使う場合は https://...、SSHを使う場合は git@... になっているか確認します。Swift Packageに登録したURLも同じ認証方式にそろえます。
2. ターミナルから接続を確認する
git ls-remote https://github.com/OWNER/REPOSITORY.git
ここでもauthentication failedになる場合、Xcode固有ではなくGit側の認証問題である可能性が高いです。
3. SSHを使っている場合の確認
ssh -T git@github.com
認証に成功しない場合は、SSHキーの登録状況やssh-agentを確認します。
解決方法1:HTTPS認証をアクセストークンでやり直す
GitHubではGit操作のHTTPS認証に通常のアカウントパスワードではなく、Personal Access Tokenなどの対応した認証方法を利用します。トークンが期限切れ、失効、または権限不足なら新しいトークンを用意し、対象リポジトリを読み取れる権限を付与します。
アクセストークンをソースコード、Package.swift、シェル履歴などに直接書き込まないでください。
解決方法2:macOSキーチェーンの古い資格情報を削除する
以前のパスワードや失効済みトークンがキーチェーンに残っていると、新しい資格情報を入力しても古い情報が優先されることがあります。キーチェーンアクセスでGitホスト名を検索し、該当する古いインターネットパスワードを確認・削除してから再認証します。
Git Credential Helperの設定も確認できます。
git config --global credential.helper
解決方法3:SSH認証へ切り替える
HTTPSのトークン管理を避けたい場合はSSHを利用できます。SSHキーを作成し、公開鍵をGitホスティングサービスへ登録します。
ssh-keygen -t ed25519 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
その後、Swift PackageのURLをSSH形式へ変更します。
git@github.com:OWNER/REPOSITORY.git
解決方法4:Private Repositoryの権限を確認する
リポジトリ自体へのアクセス権がなければ、正しいトークンやSSHキーでも取得できません。対象アカウントがRepositoryのRead権限を持つか、組織のSSO承認が必要ではないかを確認します。企業・組織アカウントでは管理者側のポリシーによりトークンやSSHキーが制限されている場合もあります。
解決方法5:XcodeのPackageキャッシュを更新する
認証を修正した後もXcodeが古い取得結果を保持している場合は、XcodeのFile → Packages → Reset Package CachesやResolve Package Versionsを実行します。必要に応じてDerivedDataも削除して再ビルドします。
rm -rf ~/Library/Developer/Xcode/DerivedData/*
DerivedDataの削除はビルドキャッシュを消すだけで、Git側の認証失敗そのものを直す操作ではありません。先に認証情報と権限を修正してください。
解決方法6:コマンドラインからPackage解決を再実行する
CIやXcodeのGUIで原因が分かりにくい場合は、ターミナルから依存関係解決を実行すると詳細なエラーを確認しやすくなります。
xcodebuild -resolvePackageDependencies -project YourProject.xcodeproj
Workspaceを利用している場合は -workspace と -scheme を適切に指定します。
注意点
- トークンをURLへ埋め込んだままGitへコミットしない
- 公開リポジトリで認証を要求される場合は、URLやリダイレクト先も確認する
- 組織のSSOを使っている場合、トークン作成だけでは足りず追加承認が必要なことがある
- HTTPSからSSHへ変更した場合、チームやCI環境でも同じ認証方式を利用できるか確認する
まとめ
Xcode Swift Packageのauthentication failedは、Swiftコードの問題ではなく、Gitリポジトリへの認証に失敗しているケースが中心です。まずリポジトリURLとアクセス権を確認し、HTTPSなら有効なアクセストークン、SSHなら正しく登録されたSSHキーを使用します。古い資格情報がキーチェーンに残っている場合は更新し、認証を直した後にPackageキャッシュをリセットして依存関係を再解決すると切り分けしやすくなります。
