Bug: Address Sanitizer Does not work with Physical Device
Description
Using Address Sanitizer in physical device cause error
dyld[17268]: Library not loaded: @rpath/libclang_rt.asan_ios_dynamic.dylib
Referenced from: <C7946C17-CFDB-39C7-8EDC-C760B1E67372> /private/var/containers/Bundle/Application/A614A60F-3AC2-4585-9E18-F89AC83FF032/AddressSanitizerApp.app/AddressSanitizerApp
Reason: tried: '/usr/lib/system/introspection/libclang_rt.asan_ios_dynamic.dylib' (no such file, not in dyld cache), '/usr/lib/swift/libclang_rt.asan_ios_dynamic.dylib' (no such file, not in dyld cache),
Extra info:
https://github.com/flutter/flutter/issues/108469
It looks like the ios asan dylib is no longer vended with the clang toolchain that the engine consumes, but Xcode has the dylib, so we could try to use that one.
Reproduction steps
- Add target_environments device in example/sanitizers/xcodeproj_targets.bzl
load("@rules_xcodeproj//xcodeproj:defs.bzl", "xcode_schemes", "top_level_target")
SCHEME_AUTOGENERATION_MODE = "none"
_ADDRESS_SANITIZER_TARGET = "//AddressSanitizerApp"
_THREAD_SANITIZER_TARGET = "//ThreadSanitizerApp"
_UNDEFINED_BEHAVIOR_SANITIZER_TARGET = "//UndefinedBehaviorSanitizerApp"
XCODEPROJ_TARGETS = [
top_level_target(_ADDRESS_SANITIZER_TARGET, target_environments = ["simulator", "device"]),
_THREAD_SANITIZER_TARGET,
_UNDEFINED_BEHAVIOR_SANITIZER_TARGET,
]
- Setup Provisioning profile in the example/sanitizers/AddressSanitizerApp/
load("@build_bazel_rules_apple//apple:apple.bzl", "local_provisioning_profile")
local_provisioning_profile(
name = "app_debug_profile",
profile_name = "iOS Team Provisioning Profile: xyz",
team_id = "XYZ",
)
ios_application(
provisioning_profile = ":app_debug_profile",
)
- Generate the project
bazel run //:xcodeproj - Run the AddressSanitizer in the real device.
Expected behavior
Work the same as the simulator.
rules_xcodeproj version
1.14.2
Xcode version
15.1
Bazel version
7.0.0
rules_apple version
3.1.1
rules_swift version
1.13.0
Additional information
I check the rules_apple and rules_swift version from the examples/rules_ios/MODULE.bazel
Thanks for reporting. I can repro this issue. I think codesigning these dylibs will fix this issue. (Vanilla Xcode projects do codesign these dylibs when building for device)
'/private/var/containers/****/AddressSanitizerApp.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib'
(code signature invalid in <**-**-**-**>
'/private/var/containers/Bundle/Application/****/AddressSanitizerApp.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib' (errno=1)
Thanks for the investigation @chiragramani, have you found a way to sign it and attach it to the device?