PC パソコン

Xcode「Could not resolve package dependencies」の解決方法

XcodeでSwift Package Managerの依存関係を読み込む際に「Could not resolve package dependencies」と表示され、ビルドやパッケージ追加が進まないことがあります。このエラーは、バージョン条件の競合、Package.resolvedの不整合、リポジトリへの接続や認証、キャッシュ破損などが原因で発生します。

主な原因

  • 複数パッケージのバージョン条件が両立していない
  • Package.resolvedの内容と現在の依存関係が合っていない
  • パッケージのGitリポジトリへ接続できない
  • Private PackageのSSH鍵・認証情報が不足している
  • XcodeやSwiftPMのキャッシュが破損している
  • 指定したブランチ・タグ・コミットが存在しない

代表的な発生状況

新しいSwift Packageを追加した直後、既存パッケージのバージョンを変更した後、別のMacでプロジェクトを開いた時、CI環境へ移した時、あるいはGit側でタグやブランチ構成が変わった時に発生しやすいエラーです。

確認手順

1. エラー詳細を確認する

XcodeのReport NavigatorやPackage Dependenciesの表示から、どのパッケージで解決に失敗しているか確認します。

2. Package.resolvedを確認する

プロジェクト内のPackage.resolvedに、現在利用したいパッケージのバージョンやリビジョンが記録されているか確認します。

3. リポジトリへ接続できるか確認する

git ls-remote https://github.com/example/package.git

Private Packageの場合は、SSHまたはHTTPS認証が正しく設定されているかも確認します。

解決方法

方法1:Xcodeでパッケージを再解決する

Xcodeの「File」→「Packages」から依存関係の更新・再解決を実行します。軽微なキャッシュ不整合であればこれだけで直ることがあります。

方法2:コマンドラインで依存関係を解決する

xcodebuild -resolvePackageDependencies -project MyApp.xcodeproj

Workspaceを使用している場合は、次のように実行できます。

xcodebuild -resolvePackageDependencies -workspace MyApp.xcworkspace -scheme MyApp

方法3:Package.resolvedを見直す

チーム開発やCIでは、Package.resolvedをGit管理し、全環境で同じ解決結果を使う方法が安定します。内容が古い場合は、依存関係を正しく再解決したうえで更新します。

方法4:バージョン条件の競合を解消する

Package.swiftやXcodeのPackage Dependency設定で、同じ依存ライブラリに対して互換性のないバージョン条件が指定されていないか確認します。

.package(url: "https://github.com/example/library.git", from: "2.0.0")

別パッケージが1.x系を要求している場合などは、互いに満たせるバージョンへ条件を調整する必要があります。

方法5:キャッシュを削除して再取得する

Xcodeを終了したうえでDerivedDataを削除し、再度パッケージ解決を行います。

rm -rf ~/Library/Developer/Xcode/DerivedData/*

必要に応じてXcodeのPackage Cacheのリセットも行います。

方法6:Private Packageの認証を確認する

SSH URLを使用している場合は、鍵とknown_hostsを確認します。

ssh -T git@github.com

CIでxcodebuildを直接使う場合は、SSH設定やknown_hosts、必要な認証情報がCI実行ユーザーで利用できることを確認してください。

方法7:システムGit設定を使う

プロキシ、URL置換、独自SSH設定などMac側のGit設定を利用したい場合は、xcodebuildに次のオプションを追加できます。

xcodebuild -resolvePackageDependencies -scmProvider system -project MyApp.xcodeproj

注意:Package.resolvedを削除すると、許可された範囲内で別バージョンが選択されることがあります。特に本番ビルドやCIでは、単純に削除する前に差分とバージョン条件を確認してください。

CIで発生する場合

CIでは自動解決に任せず、検証済みのPackage.resolvedをリポジトリへコミットして同じ依存バージョンを使う方法が安全です。Xcode CloudでもPackage.resolvedを利用した依存関係の固定が推奨されています。

まとめ

「Could not resolve package dependencies」は、Swift Package Managerが依存関係の組み合わせを確定できない時に発生します。まず失敗しているパッケージを特定し、Package.resolved、バージョン条件、Git接続・認証を確認してください。そのうえでXcodeまたはxcodebuildで再解決し、必要に応じてキャッシュを整理すると、多くのケースを解消できます。