PC パソコン

Xcode「Address Sanitizer may fail to launch on 27.0 targets」の解決方法

iOS 27などの27.0系OSを実行先にしたとき、Xcode 26.4以前でAddress Sanitizer(ASan)を有効にしてビルドしたアプリが起動しない場合があります。AppleはXcode 27のリリースノートで「Address Sanitizer may fail to launch on 27.0 targets when the app was built with Xcode 26.4 or older」と案内し、Address Sanitizerを使う場合はXcode 26.5以降でビルドするよう示しています。本記事では、通常のアプリクラッシュとこのツールチェーン互換性問題を切り分け、確実に再ビルドする手順を解説します。

代表的な症状

Address Sanitizer may fail to launch on 27.0 targets
when the app was built with Xcode 26.4 or older.

実際の診断画面では、Run直後にプロセスが終了する、デバッガ接続前にアプリが落ちる、AddressSanitizer Runtimeやdyldに関係する起動エラーが記録される、といった形で現れることがあります。通常ビルドでは起動できるのに、SchemeのDiagnosticsでAddress Sanitizerを有効にした場合だけ失敗するのが重要な手掛かりです。

原因

Address Sanitizerは、コンパイラがアプリへ検査コードを追加し、実行時にASan Runtimeを読み込んでヒープバッファオーバーフロー、use-after-freeなどのメモリエラーを検出する仕組みです。Xcode 26.4以前で生成したASan有効バイナリと、27.0系OSの実行環境との間に互換性問題があるため、アプリ自身の処理へ到達する前に起動が失敗することがあります。

重要:これは「Deployment Targetを27.0に設定しただけで必ず起きる」という意味ではありません。問題になるのは、Xcode 26.4以前でAddress Sanitizerを有効にしてビルドしたアプリを、iOS 27などの27.0系実行先で起動する組み合わせです。

適用条件

  • Xcode 26.4またはそれ以前でアプリをビルドしている。
  • SchemeのRunまたはTestでAddress Sanitizerを有効にしている。
  • iOS 27、iPadOS 27、tvOS 27、watchOS 27、visionOS 27などの27.0系実行先で起動する。
  • ASanを無効にすると起動できる、または26.x系の実行先では起動できる。
  • アプリの通常ログより前に、dyld、Sanitizer Runtime、デバッガ接続付近で終了する。

Appleが示した問題番号は178072780です。公式の回避条件はXcode 26.5以降でAddress Sanitizerビルドを作り直すことです。

推奨する解決手順

1. 使用しているXcodeを確認する

GUIで開いているXcodeと、TerminalやCIが参照するXcodeが異なる場合があります。まず実際のツールチェーンを確認します。

xcode-select -p
xcodebuild -version
swift --version

xcodebuild -versionが26.4以前なら、Xcode 26.5以降へ更新します。2026年9月17日時点ではXcode 27が正式提供されているため、macOSや依存パッケージとの互換性に問題がなければ現行の安定版を利用できます。

2. Developer Directoryを更新後のXcodeへ切り替える

複数のXcodeを並行利用している場合は、目的のバージョンを明示します。

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
xcodebuild -version

CIではシステム全体を変更せず、ジョブ内でDEVELOPER_DIRを指定する方法もあります。

export DEVELOPER_DIR=/Applications/Xcode-27.app/Contents/Developer
xcodebuild -version

3. 新しいXcodeで完全に再ビルドする

古いXcodeで生成したASan有効バイナリが残っていると、Xcodeだけ切り替えても同じ問題が続く可能性があります。Product > Clean Build Folderを実行し、必要に応じてプロジェクト専用のDerivedDataを削除してから再ビルドします。

xcodebuild clean   -scheme MyApp   -destination 'platform=iOS Simulator,name=iPhone 17 Pro'

xcodebuild build   -scheme MyApp   -destination 'platform=iOS Simulator,name=iPhone 17 Pro'   ENABLE_ADDRESS_SANITIZER=YES

DerivedData全体を無条件に削除する必要はありません。更新後のXcodeを使用していることを先に確認し、それでも古い生成物が再利用される場合に対象プロジェクト分だけ整理します。

4. SchemeのAddress Sanitizer設定を確認する

Product > Scheme > Edit Schemeを開き、RunまたはTestのDiagnosticsでAddress Sanitizerを有効にします。Runだけ有効、Testは無効というようにアクションごとに設定が異なるため、失敗した操作と同じアクションを確認してください。

5. 27.0系の実行先で再確認する

具体的なSimulatorまたは実機を選び、ASanを有効にしたまま起動します。コマンドラインでは使用可能な実行先も確認できます。

xcodebuild -scheme MyApp -showdestinations
xcrun simctl list devices available

代替策

Address Sanitizerを一時的に無効化する

アプリ固有の問題かASan互換性問題かを切り分けるため、同じSchemeで一時的にAddress Sanitizerを無効にします。無効化時だけ起動できるなら有力な判断材料になります。ただし、メモリ安全性検査が行われなくなるため、根本解決ではありません。

26.x系OSの実行先で検査する

Xcodeを直ちに更新できない場合、27.0固有機能を必要としない範囲で、対応する26.x Simulatorまたは実機を一時的に使用できます。ただしiOS 27上の挙動や互換性を保証するテストにはなりません。

CIのASanジョブだけ新しいXcodeへ移す

全ジョブを一度に移行できない場合、ASanを使うメモリ検査ジョブだけXcode 26.5以降のRunnerへ切り替え、通常ビルドは段階的に移行できます。成果物やDerivedDataを異なるXcode間で共有しないようにしてください。

確認方法

  • xcodebuild -versionがXcode 26.5以降を示す。
  • xcode-select -pまたはDEVELOPER_DIRが意図したXcodeを指している。
  • 新しいXcodeでClean後にASan有効ビルドを作成した。
  • 27.0系Simulatorまたは実機で、デバッガ接続とアプリ起動が完了する。
  • SchemeのAddress Sanitizerを有効にした状態でも、起動直後にプロセスが終了しない。
  • CIでもローカルと同じXcodeバージョンがログに出力される。

注意点

  • Address Sanitizerはデバッグ用です。ASan Runtimeを含むビルドをApp Store提出用のArchiveとして扱わないでください。
  • ASanを無効にして起動しただけでは、メモリ破損がないことの証明にはなりません。
  • 新しいXcodeでも起動できない場合は、ログの先頭にあるdyldエラー、クラッシュレポート、Sanitizer出力を確認し、アプリ固有のメモリ問題と区別します。
  • Thread SanitizerやUndefined Behavior Sanitizerは目的と実装が異なるため、本件の代替として同一視しないでください。
  • Xcode 26.5以降で修正されるのは起動互換性です。ASanが検出した実際のメモリエラーはコード側で修正する必要があります。

まとめ

「Address Sanitizer may fail to launch on 27.0 targets」は、Xcode 26.4以前で作成したASan有効バイナリを27.0系OSで動かすと起動できない互換性問題です。Xcode 26.5以降へ更新し、Developer Directoryを確認したうえで、古い生成物を使わず完全に再ビルドしてください。ASan無効化や26.x実行先への切り替えは原因確認の一時策にとどめ、メモリ検査は修正済みツールチェーンで継続するのが安全です。

公式情報