ld:使用比ObjC Framework以前的文件(未知的ABI版本YYY)更早的Swift语言(XX)版本编译的SDK.framework

CAM*_*BAP 5 xcode linker objective-c ios swift

介绍

SDK.framework需要将其作为封闭源软件进行分发。为了涵盖Objective-C和快速项目,我决定将其写在Objective-C上

在本地环境中,我有两个项目:

  • SDK(框架源代码)
  • DemoApp(与SDK.framework链接的应用程序)

*这些项目在单独的工作区中

问题

当我SDK.framework在本地编译时,它可以完美工作。

一旦我从CI中获得一个(它具有不同的iOS SDK版本)并尝试与之链接,DemoApp我将收到此错误:

ld:使用比以前的文件更早的Swift语言(4.0)版本编译的SDK.framework(未知的ABI版本0x06)

问题

  1. 因为我的SDK为100%Objective-C框架,所以我不知道为什么它声称使用Swift版本
  2. 我的SDK依赖于其他框架,其中一个是SocketIO-Client-Swift。据我所知,这不应该以上学历,相关错误,因为我编译SocketIO-Client-Swift使用DemoApp,因此它具有相同的快捷版本DemoApp的应用程序

我做了什么

  1. 随着otool -l SDK.framework我检查了所有的元信息,也没有对任何快捷参考
  2. 我曾尝试将其分发为静态库,但在这种情况下,支持Carthage依赖关系管理器将出现问题

小智 2

这很可能是因为您与 Swift 框架链接。即使您的代码是 100% Obj-C,它也包含对 Swift 调用的引用,这些调用是您的 SDK ABI 的一部分。

请考虑使用 SocketIO 的 C++ 版本。

https://github.com/socketio/socket.io-client-cpp