Flutter: Firebase_Analytics — Неопределенные символы для архитектуры x86_64: «_OBJC_CLASS_$_FIRAnalytics», ссылка из:

#swift #xcode #flutter #dart

#swift #xcode #flutter #дротик

Вопрос:

Я обновил свой flutter до последней версии 1.20, а также выполнил шаги для поддержки Xcode 11.4. После выполнения этих шагов появляются следующие ошибки, связанные с архитектурой.

 Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_FIRAnalytics", referenced from:
      objc-class-ref in firebase_analytics(FLTFirebaseAnalyticsPlugin.o)
     (maybe you meant: _OBJC_CLASS_$_FIRAnalyticsConfiguration)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  
  • Доктор флаттера:
 [✓] Flutter (Channel stable, 1.20.0, on Mac OS X 10.15.6 19G73, locale en-US)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
[✓] Android Studio (version 3.6)
[✓] IntelliJ IDEA Community Edition (version 2019.2.2)
[✓] Connected device (2 available)

• No issues found!
  

Кроме того, я использую последнюю версию firebase_analytics: ^ 6.0.0 в моем pubspec.yaml.

  • Подфайл iOS:
      platform :ios, '9.0'
    
    # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
    ENV['COCOAPODS_DISABLE_STATS'] = 'true'
    
    project 'Runner', {
      'Debug' => :debug,
      'Profile' => :release,
      'Release' => :release,
    }
    
    def flutter_root
      generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
      unless File.exist?(generated_xcode_build_settings_path)
        raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
      end
      
      File.foreach(generated_xcode_build_settings_path) do |line|
        matches = line.match(/FLUTTER_ROOT=(.*)/)
        return matches[1].strip if matches
      end
      raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
    end
    
    require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
    
    flutter_ios_podfile_setup
    
    target 'Runner' do
      use_frameworks!
      use_modular_headers!
      
      pod 'Firebase/Core'
      pod 'NVActivityIndicatorView', '~> 4.8.0'
      pod 'SwiftyUserDefaults', '~> 3.0.0'
      pod 'RSMasterTableView', :git => 'https://github.com/DhavalRKansara/RSMasterTableView.git'
      pod 'CryptoSwift'
      pod 'SwiftR' , :git => 'https://github.com/DhavalRKansara/SwiftR.git'
      pod 'SKPhotoBrowser'
      pod 'RSSelectionMenu'
      pod 'JJFloatingActionButton'
      pod 'MaterialComponents/TextFields'
      pod 'MarqueeLabel'
      pod 'Firebase/Analytics'
      
      flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
    end
    
    post_install do |installer|
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
      end
    end   
  

Примечание: я также поднял и проблему с flutterfire на GitHub для того же.

Ответ №1:

Ваш проект Xcode нацелен на x86_64, который предназначен для macOS. Вам нужно будет либо выполнить откат до arm64, либо вы можете запустить эту команду, чтобы воссоздать проект iOS по умолчанию (сначала обязательно создайте резервную копию проекта flutter): (Запускайте эту команду, только если у вас нет каких-либо изменений, внесенных специально в проект xcode, таких как ресурсы или значки)

 flutter create  -i swift .
  

или для objective-c:

 flutter create  -i objc .
  

Если вам действительно нужно разрабатывать для macOS, вам нужно будет создать отдельную папку macos в проекте flutter (https://flutter.dev/desktop).

Выполните эти команды:

 flutter channel dev
  

Для переключения на альфа-канал (macOS все еще нестабилен для flutter)

 flutter upgrade

flutter config --enable-macos-desktop
  

Затем перезагрузите IDE и запустите эту команду, если вы не видите папку macos в своем проекте flutter:

 flutter create .
  

Это добавит / восстановит все отсутствующие файлы (сначала убедитесь, что вы создали резервную копию своего проекта).
Затем просто запустите эту команду для развертывания для macos:

 flutter run -d macos --release