【问题标题】:ld: SDK.framework compiled with older version of Swift language (XX) than previous files (unknown ABI version YYY) of ObjC Frameworkld:SDK.framework 使用旧版本的 Swift 语言 (XX) 编译,而不是 ObjC 框架的先前文件(未知 ABI 版本 YYY)
【发布时间】:2018-05-29 22:02:19
【问题描述】:

简介

我正在开发SDK.framework,我需要将其作为闭源软件进行分发。为了涵盖objective-c和swift项目,我决定在objective-c上写它

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

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

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

问题

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

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

ld:SDK.framework 使用旧版本的 Swift 语言 (4.0) 编译,而不是以前的文件(未知 ABI 版本 0x06)

问题

  1. 因为我的 SDK 100% objective-c 框架,我不知道为什么它声称 swift 版本
  2. 我的 SDK 依赖于另一个框架,其中一个是 SocketIO-Client-Swift。 AFAIK 这应该与上面的错误无关,因为我用DemoApp 编译SocketIO-Client-Swift,所以它与DemoApp 应用程序具有相同的swift 版本

我做了什么

  1. 我用otool -l SDK.framework检查了所有元信息,没有任何对swift的引用
  2. 我已经尝试将它作为静态库分发,但在这种情况下,我会遇到支持 Carthage 依赖管理器的问题

【问题讨论】:

  • 用新的 Xcode 版本重新编译它。
  • @JuanBoero 对我来说不是这样,因为这是作为框架(二进制)提供的 SDK,根据您的建议,我需要为任何微小的 libSwift 更改发布一个新版本跨度>

标签: ios objective-c swift xcode linker


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多