После добавления зависимостей 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.

  1. После того как внесли изменения в Podfile чистим кэш:

    Выполнить в терминале -

    rm -rf Pods Podfile.lock

    pod deintegrate

  2. Устанавливаем заново:

    Выполнить в терминале - pod install --repo-update

  3. Чистим билд в Xcode:

    Shift + Cmd + K

Готово )

Мой полезный телеграмм канал - https://t.me/hubonedeveloper

Комментарии (1)


  1. AlanFrost
    22.07.2025 00:39

    Или можно обновить библиотеки фаербейза до плюс-минус актуальных. Т.к. проблема связана именно с попыткой собрать новым хкодом уж очень старые либы фаербейза.

    В моём случае всё завелось уже на 12.4.1