PC パソコン

Xcode「The watchOS Simulator deployment target ‘WATCHOS_DEPLOYMENT_TARGET’ is set to 8.0」の解決方法

Xcode 27でwatchOSターゲットをビルドすると、アプリ側のDeployment TargetをwatchOS 9以降に設定していても、Swift Packageの処理中に「The watchOS Simulator deployment target ‘WATCHOS_DEPLOYMENT_TARGET’ is set to 8.0」と失敗することがあります。本記事では、パッケージ側の暗黙の最小バージョンとXcodeのPackage PIF builderに起因するケースを切り分けます。

代表的なエラーログ

/.../SourcePackages/checkouts/swift-algorithms/Package.swift:
The watchOS Simulator deployment target 'WATCHOS_DEPLOYMENT_TARGET' is set to 8.0,
but the range of supported deployment target versions is 9.0 to 27.0.x.

パスやパッケージ名は環境によって変わります。重要なのは、アプリではなくSourcePackages/checkouts以下のターゲットがwatchOS 8.0として評価されている点です。

原因

Xcode 27はwatchOS 8.0をDeployment Targetとして受け付けません。一方、watchOSの最小バージョンをPackage.swiftに明示していないSwift Packageが、古いPackage PIF builderまたは修正前の処理経路で8.0として扱われることがあります。その結果、アプリ本体をwatchOS 9以上にしていても依存パッケージのターゲットだけが検査に失敗します。

Apple Developer ForumsではAppleのFrameworks Engineerが、この問題はSwift Package Manager PR #10188で対処されたと案内しています。スレッドではXcode 27 beta 2での修正報告がある一方、旧PIF builderを明示的に有効にしていた環境ではRCでも再発した例が報告されています。

発生条件と対象バージョン

  • Xcode 27系でwatchOSターゲットをビルドする
  • 依存するSwift PackageがwatchOSの最小バージョンを明示していない
  • 修正前のXcode 27 betaを使用している、または旧Package PIF builder設定が残っている
  • アプリ側のDeployment Targetだけを変更しても、依存パッケージ側が8.0として生成される

公式フォーラム上の修正確認はXcode 27 beta 2です。現在のXcode 27でも発生する場合は、まず旧PIF builder設定と依存パッケージの解決状態を確認してください。

推奨する解決手順

  1. Xcodeを最新のXcode 27へ更新する。 修正前のbetaを使い続けないでください。
  2. 旧PIF builder設定を解除する。 過去に設定を変更した覚えがある場合は、次のコマンドで新しいbuilderを有効にし、Xcodeを完全終了して再起動します。
defaults write com.apple.dt.Xcode IDEEnableNewPackagePIFBuilder -bool YES
  1. Package Resolutionを更新する。 XcodeのFile > Packages > Reset Package Cachesを実行し、Resolve Package Versionsを行います。CIではDerivedDataとパッケージキャッシュの扱いも確認します。
  2. 依存パッケージを更新する。 パッケージ作者がwatchOS対応または修正を含む版を公開していれば、その版へ更新します。
  3. 自分が管理するPackage.swiftでは最小watchOSを明示する。
let package = Package(
    name: "ExamplePackage",
    platforms: [
        .watchOS(.v9)
    ],
    products: [
        // ...
    ],
    targets: [
        // ...
    ]
)

最小バージョンは実際にサポートし、使用APIを検証した値にしてください。

代替策

外部パッケージが未修正で更新もできない場合は、一時的にforkまたはPackage mirrorを用意し、Package.swiftへ.watchOS(.v9)を追加する方法があります。ただし、これはパッケージがwatchOS 9で動作することを自分で検証できる場合に限ります。

コマンドラインビルドへWATCHOS_DEPLOYMENT_TARGET=9.0を渡す回避例もフォーラムにありますが、Xcode UI内のすべてのビルド経路に適用できるとは確認されていません。恒久策としては、Xcode更新、新PIF builder、適切なPackage.swiftの組み合わせを優先してください。

確認方法

  1. Xcodeを再起動し、Package Resolutionをやり直す。
  2. watchOSのDebugビルドだけでなくArchiveも実行する。
  3. 失敗ログにWATCHOS_DEPLOYMENT_TARGET = 8.0が残っていないことを確認する。
  4. 必要に応じて次のコマンドで対象Schemeの設定を確認する。
xcodebuild -scheme YourWatchScheme -showBuildSettings | grep WATCHOS_DEPLOYMENT_TARGET

複数ターゲットがある場合は、アプリ、Watch App、Watch Extension、Swift Package由来の各ターゲットを個別に確認します。

注意点

Deployment TargetをwatchOS 9へ引き上げると、watchOS 8端末はサポート対象外になります。単にエラーを消すためだけに値を上げず、製品の対応OS方針、利用API、App Store配布要件を確認してください。

また、DerivedData削除だけでは、旧PIF builder設定やパッケージmanifestの不足は修正されません。キャッシュ削除で一時的に直ったように見えても、CIや別の開発端末で再発する場合は構成を見直してください。

まとめ

このエラーは、Xcode 27が要求するwatchOS 9以上の範囲と、Swift Package側で8.0として生成されたDeployment Targetの不一致です。最新のXcode 27を使用し、新しいPackage PIF builderを有効にしたうえで依存関係を再解決します。自分で管理するパッケージでは、実際の互換性を検証して.watchOS(.v9)を明示するのが確実です。

参照した公式情報