Когда в Xcode (версия 15.3) отключена опция Address Sanitizer, проект собирается успешно. Однако, как только я включаю эту опцию, сборка завершается с ошибкой: «Не удалось найти путь к двоичному файлу clang, чтобы найти библиотеку Address Sanitizer».
Я нашел libclang_rt.asan_ios_dynamic.dylib в каталоге Xcode и добавил его в этапы сборки -> Библиотека ссылок с библиотеками. Однако я все еще получаю ту же ошибку. Но когда я создаю новый проект и включаю опцию Address Sanitizer, он собирается успешно.





Эта проблема была вызвана неправильными настройками макросов CC и CXX. Когда я проверил файл Pods-[TargetName]-debug.xcconfig, я обнаружил, что для CC установлено значение clang, а для CXX — clang++.
Откройте тернимал, введите xcodebuild -find clang и xcodebuild -find clang++, тогда я смогу получить реальный путь clang и clang++.
Я вручную изменил файл Pods-[TargetName]-debug.xcconfig:CC = /Applications/Xcode-15.3.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clangCXX = /Applications/Xcode-15.3.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++.
После этого ошибка сборки xcode исчезла.
Далее хочу узнать, почему появляются неправильные настройки CC=clang CXX=clang++. Посмотрев исходный код Cocoapods, я обнаружил, что CC и CXX не были жестко запрограммированы. После некоторых исследований я наконец обнаружил, что эта проблема может повториться, если в проекте будет ссылка на библиотеку модулей Snappy.
Подробности о Snappy Podspec
Окончательные решения (добавьте эти строки в свой подфайл):
pre_install do |installer|
fix_cc_cxx_macro_path installer
end
def fix_cc_cxx_macro_path(installer)
installer.pod_targets.each do |pod_target|
pod_target.specs.each do |spec|
next if spec.attributes_hash['xcconfig'].nil?
if spec.attributes_hash.dig('xcconfig', 'CC')
spec.attributes_hash['xcconfig']['CC'] = `xcodebuild -find clang`
end
if spec.attributes_hash.dig('xcconfig', 'CXX')
spec.attributes_hash['xcconfig']['CXX'] = `xcodebuild -find clang++`
end
end
end
end