rules_xcodeproj icon indicating copy to clipboard operation
rules_xcodeproj copied to clipboard

Bug: Address Sanitizer Does not work with Physical Device

Open jeffersonsetiawan opened this issue 2 years ago • 3 comments

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),
Screenshot 2024-01-03 at 18 30 18

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

  1. 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,
]
  1. 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",
)
  1. Generate the project bazel run //:xcodeproj
  2. 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

jeffersonsetiawan avatar Jan 03 '24 11:01 jeffersonsetiawan

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)

chiragramani avatar Jan 06 '24 01:01 chiragramani

Thanks for the investigation @chiragramani, have you found a way to sign it and attach it to the device?

jeffersonsetiawan avatar Jan 06 '24 11:01 jeffersonsetiawan