dyld: Symbol not found: swift34swift50override_conformsToProtocol

I am getting following error from one of the pod frameworks while running the app (Build is a success).

dyld: Symbol not found: __ZN5swift34swift50override_conformsToProtocolEPKNS_14TargetMetadataINS_9InProcessEEEPKNS_24TargetProtocolDescriptorIS1_EEPFPKNS_18TargetWitnessTableIS1_EES4_S8_E.

Referenced from: X framework

Expected in: frameworks/DeviceKit.framework/DeviceKit

mac OS 10.15

Xcode 12.4

React native 0.63

cocoapods: 1.10.1

Post not yet marked as solved Up vote post of Theja-Dasari Down vote post of Theja-Dasari
11k views
  • I have the same problem !!!!

Add a Comment

Replies

look, i found this:

When the *** not found symbol appears, the following situations will generally occur

  1. You added library ***, but the supported CPU structure is not consistent with the mobile phone you are running. Right now, use lipo-info to see the supported CPU structure per library.
  2. The *** version used does not match what you need. The above is the solution.
  • I'm getting this exact issue using Xcode 12.5.1, works with Xcode 12.4. Any clue what has changed?

  • Resolved the problem after moving my Podfile back to an earlier version of AWS Amplify. For Xcode 12.5.1, it seems anything after AWS 1.12.0 gave the above error.

Add a Comment

I had the same error message, I recompiled the dependency in question to a XCFramework and it fixed the issue.

This issue happens for chained dependencies. Suppose you have App -> A.framework -> B.framework. If you change B's target OS version and rebuilt B, this error occures.

The solution is to rebuilt A as well.

Of course, if you don't have the source code of A, you will have to revert to the old version of B

from iOS developer @ authing

In my case, in Podfile I have code that replaces IPHONEOS_DEPLOYMENT_TARGET for all pod targets with 'some' min version. Originally I had a '13.0' version. When I changed '13.0' to '9.0', did pod update, clean the project, and build & run again, the error didn't appear again.

Below is a piece of that code I have now:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']) < Gem::Version.new('9.0')
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
      end
    end
  end
end

Hope my answer will help somebody and save time.

I am working with a framework from a private vendor through CocoaPods. The framework is targeted as iOS 12 but one of its dependencies (SwiftDate) is actually targeted for iOS 13, which raised the following error in Xcode: Compiling for iOS 12.0, but module 'SwiftDate' has a minimum deployment target of iOS 13.0

To fix that I did what @ababykina suggested and applied iOS 13 to all pods in post_install

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'
    end
  end
end

By doing so I got the crash mentioned in the original post:

dyld[30013]: Symbol not found: __ZN5swift34swift50override_conformsToProtocolEPKNS_14TargetMetadataINS_9InProcessEEEPKNS_24TargetProtocolDescriptorIS1_EEPFPKNS_18TargetWitnessTableIS1_EES4_S8_E
  Referenced from: [...]/TestSDK.app/Frameworks/TheVendor.framework/TheVendor
  Expected in:     [...]/TestSDK.app/Frameworks/Alamofire.framework/Alamofire

The error mentioned the issue at hand: Alamofire was missing in my case.

From what I understand when you force a IPHONEOS_DEPLOYMENT_TARGET to a higher value than actually supported you'll see no error, yet it will not be included in the app afterwards and causes this crash. And indeed the vendor's podspec mentioned Alamofire 5.5.0 which targets iOS 10, and not 13 or up.

To fix this I had to isolate the offending dependency in post_install and execute pod install

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == 'SwiftDate'
      target.build_configurations.each do |config|
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
      end
    end
  end
end

And now it runs properly.

Hope this helps.

  • Hi, you literally saved my life. I was looking for this solution for a week. THANK YOU!!!

Add a Comment