【问题标题】:Distribute Universal framework written in Swift分发用 Swift 编写的通用框架
【发布时间】:2020-04-10 00:36:24
【问题描述】:

我正面临分发已编译的 swift 框架的问题。我的框架严重依赖 libxml2 动态库。为了避免Swift module compatibility 出现问题,我设置了构建标志BUILD_LIBRARY_FOR_DISTRIBUTION = YES。

所以我使用 Xcode 11.3 Swift v5.1.3 来构建我的框架。我已将它集成到 Demo.app 项目中。正如所料,Demo.app 在 Xcode 11.3 中运行良好。

但是,我尝试在 Xcode 11.0 Swift 5.1 中构建 Demo.app 时遇到另一个错误。 我遇到了错误:

#import "libxml/HTMLparser.h"
        ^
/Applications/Xcode_11.0.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator13.0.sdk/usr/include/libxml2/libxml/HTMLparser.h:15:10: error: 'libxml/xmlversion.h' file not found
#include <libxml/xmlversion.h>
         ^
/.../DemoApp/ThirdParty/testXML.framework/Modules/testXML.swiftmodule/x86_64-apple-tvos-simulator.swiftinterface:6:8: error: could not build Objective-C module 'libxml2'
import libxml2
       ^
/.../DemoApp/AppDelegate.swift:11:8: error: failed to load module 'testXML'
import testXML

这里是repo with both framework and app projects

我在同一台 Mac 上使用两个 Xcode 版本。

【问题讨论】:

  • 如果新版本正常工作,能够在旧版本上构建对您来说重要吗?我误读了这个问题吗?
  • @TofuWarrior:让我重新表述一下:分发构建在与旧 Swift 版本兼容的最新 swift 版本上的二进制文件对我来说很重要。例如。使用 swift 5.1.3 构建,但与 5.0 兼容。
  • @AliaksandrB。你能解决这个问题吗?我遇到了同样的问题:(

标签: swift xcode libxml2 dylib abi


【解决方案1】:

您的项目在我的 Xcode 11.3 tvOS 模拟器上运行良好。不过有一点我注意到了。 您构建的框架仅包含 x86_64 架构(仅限模拟器),无法在物理设备上运行。

对于 11.3 之前的 Xcode,您似乎需要将 $(SDKROOT)/usr/include/libxml2${SRCROOT}/libxml2 添加到 Build Settings。这解决了我在 Xcode 11.2.1 上的问题

【讨论】:

  • 感谢您的回复。我没有创建一个胖框架,因为它只是一个演示。它也适用于 Xcode 11.3,但不适用于 11.0 等早期版本
  • 我已复制并修复了您的问题,请在您这边尝试
  • 对我还是不行,能否给我发一个固定Demo项目的链接?谢谢
猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多