Xcode 26の初期ベータに含まれるSwift Package Managerでswift package migrateを実行すると、移行処理が始まる前にerror: expected stringで終了することがあります。Appleはこの問題をXcode 26 Beta 4で修正しました。
代表的なログ
$ swift package migrate --to-feature <FeatureName>
error: expected string
オプションや機能名を正しく指定していても、コマンド側の既知問題によって同じ短い診断だけが返る場合があります。
原因
Xcode 26 Beta 1〜3に同梱されたSwift Package Managerのmigrateコマンドに不具合があり、移行要求の解析または処理が正常に進まないことが原因です。Appleのリリースノートは「swift package migrate fails with an “expected string” error」としてIssue 152533205を記録しています。Appleは公開リリースノートで、それ以上の内部実装上の原因までは説明していません。
Package.swiftの文字列リテラルに誤りがある場合も似た診断は起こり得ます。ただし、正しいパッケージでXcode 26初期ベータへ変更した直後にmigrateだけが失敗する場合は、この既知問題を先に疑います。
発生条件・対象バージョン
- Xcode 26 Beta 1、Beta 2、またはBeta 3を使用している
- Swift 6.2の移行支援機能として
swift package migrateを実行する - パッケージのビルド自体は可能でも、移行コマンドが
expected stringで停止する
公式修正版はXcode 26 Beta 4です。安定版Xcode 26以降にも修正が含まれます。
推奨する解決手順
xcodebuild -versionとswift --versionで使用中の環境を確認します。- Xcode 26 Beta 4以降、できれば最新の安定版Xcodeへ更新します。
- 複数のXcodeがある場合は、コマンドラインが修正版を参照するよう切り替えます。
- パッケージのルートへ移動し、作業ツリーがクリーンであることを確認します。
- 通常のビルドを確認してから、必要な機能名で移行コマンドを再実行します。
xcodebuild -version
xcrun swift --version
xcode-select -p
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
cd /path/to/MyPackage
git status
swift build
swift package migrate --to-feature <FeatureName>
代替策
- 修正版Xcodeを備えた別のMacまたはCI環境で移行コマンドを実行する。
- 更新まで移行を延期し、現在のSwift言語モードで通常のビルドを継続する。
- コンパイラが示す移行診断とFix-itを個別に確認し、変更を小さな単位で適用する。
AppleはXcode 26 Beta 1〜3向けの確実な設定変更による回避策を公開していません。Package.swiftを根拠なく書き換えたり、非公式なフラグを追加したりするより、修正版への更新を優先してください。
確認方法
xcodebuild -versionがXcode 26 Beta 4以降であることを確認します。xcrun --find swiftで修正版Xcode内のSwiftが選ばれていることを確認します。swift package migrateを再実行し、expected stringが消えることを確認します。- 生成された変更を
git diffで確認します。 swift buildとswift testを実行して移行後の動作を検証します。
注意点
swift package migrateはソースやPackage.swiftへ変更を適用する可能性があります。実行前にコミットするかバックアップを取り、変更内容を必ずレビューしてください。修正版でも同じエラーが出る場合は、コマンド構文、引用符、機能名、Package.swiftの構文を改めて確認し、本件とは別の入力エラーとして切り分けます。
まとめ
swift package migrate: error: expected stringはXcode 26 Beta 1〜3のSwift Package Managerにある既知問題です。Xcode 26 Beta 4以降へ更新し、コマンドラインが正しいXcodeを参照していることを確認してから再実行します。
