
После добавления зависимостей Firebase через CocoaPods в iOS-проект, при сборке я столкнуться с не приятной ошибкой:
unsupported option '-G' for target 'arm64-apple-ios10.0'
Ошибка указывает на то, что флаг -G не поддерживается компилятором для платформы iOS. Проблема кроется в библиотеке BoringSSL-GRPC, которая используется Firebase под капотом (в частности, через gRPC).
BoringSSL:
Это ответвление библиотеки OpenSSL, разработанный Google. Он используется для безопасного шифрования, передачи данных по HTTPS и других криптографических операций.
GRPC:
Это протокол удалённого вызова процедур (RPC), также от Google. Он позволяет разным сервисам (например серверу и приложению) обмениваться данными.
Причина
Внутри Pods/BoringSSL-GRPC, во вкладке Build Phases → Compile Sources, почти у всех .c и .cc файлов вручную прописан флаг:
-DOPENSSL_NO_ASM -GCC_WARN_INHIBIT_ALL_WARNINGS -w -DBORINGSSL_PREFIX=GRPC -fno-objc-arc
Это значит что каждый файл вручную компилируется с -G, и этот флаг передаётся в компилятор, который для iOS его не поддерживает.
Решение
Чтобы не удалять библиотеку (она нужна для работы Firebase), мы используем post_install в Podfile, чтобы программно удалить флаг -G и — GCC_WARN_INHIBIT_ALL_WARNINGS у всех файлов этой зависимости:

post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym' if target.respond_to?(:product_type) && target.product_type == "com.apple.product-type.bundle" config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end # Проверка на наличие метода source_build_phase if target.respond_to?(:source_build_phase) && target.source_build_phase target.source_build_phase.files.each do |file| if file.settings && file.settings['COMPILER_FLAGS'] flags = file.settings['COMPILER_FLAGS'].split flags.reject! { |flag| flag == '-G' || flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' } file.settings['COMPILER_FLAGS'] = flags.join(' ') end end end end end
Пояснение
-
source_build_phase позволяет получить доступ к каждому исходному файлу зависимости.
-
Проверяем, есть ли у файла COMPILER_FLAGS.
-
Если есть — удаляем флаги -G и -GCC_WARN_INHIBIT_ALL_WARNINGS.
-
Post_install блок автоматически обрабатывает все файлы после pod install.
-
После того как внесли изменения в Podfile чистим кэш:
Выполнить в терминале —
rm -rf Pods Podfile.lock
pod deintegrate
-
Устанавливаем заново:
Выполнить в терминале — pod install —repo-update
-
Чистим билд в Xcode:
Shift + Cmd + K
Готово )
Мой полезный телеграмм канал — https://t.me/hubonedeveloper
ссылка на оригинал статьи https://habr.com/ru/articles/929748/
Добавить комментарий