自定义框架:dyld:找不到符号:_$s11CryptoSwift7PaddingO5pkcs7yA2CmFWC

Custom Framework : dyld: Symbol not found: _$s11CryptoSwift7PaddingO5pkcs7yA2CmFWC

我正在使用使用 3 种不同的可可创建的自定义框架pods。我通过删除创建的 xc 框架在客户端应用程序中使用这个自定义框架。一旦客户端应用程序启动,它就会崩溃并显示以下崩溃日志。我已经看到这个问题在 apple 和 Whosebug 的许多其他地方都有报道,但我找不到适合我的正确答案。现在我已经将客户端应用程序和框架存储库上传到 github,这样任何试图帮助我的人都可以真正看到设置和代码。请任何人提出解决此问题的正确方法。

框架:https://github.com/deepesh259nitk/PaymentsKit

客户端应用程序:https://github.com/deepesh259nitk/PaymentClient

应用程序启动时的崩溃日志

dyld:找不到符号:$s11CryptoSwift7PaddingO5pkcs7yA2CmFWC 参考自:/Users/deepesh.vasthimal/Library/Developer/Xcode/DerivedData/PaymentClient-bnsircrdeaciebedmqaliyxezdqe/Build/Products/Debug-iphonesimulator/PaymentsKit.framework/PaymentsKit 预计在:/Users/deepesh.vasthimal/Library/Developer/CoreSimulator/Devices/A0876375-98D5-4215-A139-68F29E787388/data/Containers/Bundle/Application/D954732B-EDDC-478E-85C4-C5C9B14FDDEE/PaymentClient.app/Frameworks/CryptoSwift.framework/CryptoSwift 在 /Users/deepesh.vasthimal/Library/Developer/Xcode/DerivedData/PaymentClient-bnsircrdeaciebedmqaliyxezdqe/Build/Products/Debug-iphonesimulator/PaymentsKit.framework/PaymentsKit dyld:启动,加载依赖库 DYLDSHAREDCACHEDIR=/Users/deepesh.vasthimal/Library/Developer/CoreSimulator/Caches/dyld/19H2/com.apple.CoreSimulator.SimRuntime.iOS-14-0.18A372 DYLDROOTPATH=/Users/deepesh.vasthimal/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot DYLDLIBRARYPATH=/Users/deepesh.vasthimal/Library/Developer/Xcode/DerivedData/PaymentClient-bnsircrdeaciebedmqaliyxezdqe/Build/Products/Debug-iphonesimulator:/Users/deepesh.vasthimal/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/内省 DYLDINSERTLIBRARIES=/Users/deepesh.vasthimal/Downloads/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libBacktraceRecording.dylib:/Users/de

我尝试过的东西。

  1. 我尝试完全删除 CryptoSwift 以查看错误是否是由于此 pod 引起的,但崩溃随后发生在另一个 pod 的 JOSESwift 上。
  2. 我意识到崩溃的发生是因为它在 CryptoSwift 和 JOSESwift 中都找不到特定的符号。还有当我使用这些库的特定方法时。

例如,如果我使用 CryptoSwift 的 AES 方法,如果您看到我的框架回购协议,通过添加以下代码会发生崩溃,仅包含 pod 不会崩溃,但使用它会导致崩溃。

_$s11CryptoSwift7PaddingO5pkcs7yA2CmFWC

guard let aesObject = try? AES(key: [UInt8](Data()),
               blockMode: CBC(iv: Array(Data())),
               padding: .pkcs7) else {   return "" }
  1. 我还在客户端应用程序中添加了 pods,这样它就不会被添加两次,如果您看到客户端应用程序存储库,您会看到所有 3 个 pods 都已添加。

将以下脚本添加到客户端应用程序的 pod 文件末尾。

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

然后 运行 pod 命令

 pod deintegrate
 pod install 

并修复了崩溃问题。

运行 pod install 再次修复了这个问题,没有向 pod 文件添加任何额外内容。

然而,在每次 pod 解体和 pod 安装都不起作用后,再次进行 pod 安装应该可以解决。