Vijay Singh Kholiya
Vijay Singh Kholiya

Reputation: 413

Framework not found FirebaseInstanceID on Xcode

I get below error from Xcode. Tried many solutions available on Internet but of no use.

  ld: framework not found FirebaseInstanceID

Solutions I tried:

  1. https://stackoverflow.com/a/31298214/10182352
  2. framework not found FirebaseInstanceID in Xcode
  3. https://stackoverflow.com/a/52386172/10182352

Tried deleting Podfile.lock and Podfile and initiated again by:

pod init
pod install
pod update

My Podfile looks like:

# Uncomment this line to define a global platform for your project
platform :ios, '10.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 parse_KV_file(file, separator='=')
  file_abs_path = File.expand_path(file)
  if !File.exists? file_abs_path
    return [];
  end
  generated_key_values = {}
  skip_line_start_symbols = ["#", "/"]
  File.foreach(file_abs_path) do |line|
    next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
    plugin = line.split(pattern=separator)
    if plugin.length == 2
      podname = plugin[0].strip()
      path = plugin[1].strip()
      podpath = File.expand_path("#{path}", file_abs_path)
      generated_key_values[podname] = podpath
    else
      puts "Invalid plugin specification: #{line}"
    end
  end
  generated_key_values
end

target 'Runner' do
  use_frameworks!
  use_modular_headers!
  # Flutter Pod
  copied_flutter_dir = File.join(__dir__, 'Flutter')
  copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
  copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
  unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
    # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
    # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
    # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.

    generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
    unless File.exist?(generated_xcode_build_settings_path)
      raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
    end
    generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
    cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];

    unless File.exist?(copied_framework_path)
      FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
    end
    unless File.exist?(copied_podspec_path)
      FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
    end
  end

  # Keep pod path relative so it can be checked into Podfile.lock.
  pod 'Flutter', :path => 'Flutter'

  # Plugin Pods

  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
  # referring to absolute paths on developers' machines.
  system('rm -rf .symlinks')
  system('mkdir -p .symlinks/plugins')
  plugin_pods = parse_KV_file('../.flutter-plugins')
  plugin_pods.each do |name, path|
    symlink = File.join('.symlinks', 'plugins', name)
    File.symlink(path, symlink)
    pod name, :path => File.join(symlink, 'ios')
  end
end

# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
install! 'cocoapods', :disable_input_output_paths => true

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

pod 'FirebaseCore'
pod 'Firebase/Analytics'
pod 'Firebase/Performance'
pod 'Crashlytics', '~> 3.12.0'
pod 'GoogleSignIn', '~> 4.4.0'

Error from XCode

I have also make sure that I have opened xcodeworkspace not xcodeproject.

For more clarification, I have removed this framework from my Frameworks tab search paths too.

Removed FirebaseInstanceID framework

Upvotes: 5

Views: 9749

Answers (5)

Murat Uygar
Murat Uygar

Reputation: 547

pod deintegrate
pod install

Resolved my problem.

Upvotes: 0

Roman Solodyashkin
Roman Solodyashkin

Reputation: 829

Remove -l"FirebaseInstanceID" from linker list. [Target/Build Settings/Linking/Other linker flags]. When updating the pod, it removed the library, but did not remove key from target.linker.list. After manual deletion pod.update not returns it back.

Upvotes: 2

Marco Rossi
Marco Rossi

Reputation: 239

@Paul your answer was spotless. I managed to eradicate this annoying problem following your suggestion:

  1. Open MyRockingApp.xcodeproj
  2. Linking -> Other Linker Flags -> Debug/Release
  3. Delete -framework "FirebaseInstanceID"

Thank you very much!

Upvotes: 22

Paul Beusterien
Paul Beusterien

Reputation: 29547

I suspect the Xcode project has a lingering reference to FirebaseInstanceID. The latest versions of the pods listed do not need it.

It should work to remove references to FirebaseInstanceID from the Xcode project.

Upvotes: 1

Vijay Singh Kholiya
Vijay Singh Kholiya

Reputation: 413

After 12 hours of constantly going through the DOCs of Firebase and implementing every answers on Stack Overflow I managed to eradicate this error. Below steps are what I did for this:

  1. The framework mentioned above isn't included in the PODs which I have installed. So you need to explicitly download the framework from https://firebase.google.com/download/ios

  2. Once the SDK is downloaded, firstly clear the DerivedData by going to Xcode -> Preferences -> Locations -> Derived Data. Move into that directory and delete the DerivedData folder.

  3. Delete Podfile.lock and Pods folder and do pod init and pod install.

  4. Open XCode and copy the path of framework SDK that you downloaded. For me it is: /user/Downloads/Firebase/FirebaseMessaging/FirebaseInstanceID.xcframework/ios-i386_x86_64-simulator and copy this in Framework Search Paths which is under Build Settings.

  5. Drag and drop the folder named FirebaseInstanceID.framework into Frameworks list as shown in second image of the question(left side).

Upvotes: 3

Related Questions