无法将动态框架添加到命令行工具

时间:2016-09-14 17:29:46

标签: swift3 xcode8 command-line-tool

目标

我将命令行工具目标添加到iOS应用程序并与swift框架链接。 (使用RealmSwiftyJSON进行测试)

预期结果

使用这些库构建命令行工具。

实际结果

Xcode输出: dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: .../Xcode/DerivedData/.../Build/Products/Debug/RealmSwift.framework/Versions/A/RealmSwift Reason: Incompatible library version: RealmSwift requires version 1.0.0 or later, but libswiftCore.dylib provides version 0.0.0

重现步骤

创建空的Swift命令行工具并链接Realm框架

代码示例

CommandLineTest.zip

框架和工具的版本

领域版本:github "realm/realm-cocoa" "master" SwiftyJSON版本:github "acegreen/SwiftyJSON" "swift3"

Xcode版本:8 GM(在App Store上)

依赖经理+版本:Carthage 0.18

1 个答案:

答案 0 :(得分:8)

命令行工具最适合使用静态存档,因为所有内容都作为单个二进制文件分发。看看Realm,我不知道有一个静态存档选项。他们确实有一个我为macOS编译的iOS静态框架,但这并不是你想要的。您可能想尝试更多地使用Realm的源代码来查看是否可以使用Realm来生成静态存档。

与此同时,作为解决方法,您需要告诉Xcode在运行时在哪里找到dylib,并在某处安装它们。

  1. 在您的构建设置中,转到"运行路径搜索路径"并添加" @rpath"。
  2. 在Build Phases中,在Copy Files下,单击+按钮,从项目中添加Realm.framework和RealmSwift.framework。
  3. 因为Realm是使用较旧版本的Swift编译的,所以你还需要指定"使用Legacy Swift语言版本"在构建设置中。
  4. 这将使您的项目构建并找到Realm库,但现在它将无法找到libswiftCore.dylib。这是因为通常命令行工具与Swift库静态链接,但只要添加框架/ dylib,链接器就不再包含静态版本。

    1. 返回构建阶段,复制文件,并添加以下内容:
    2. libswiftObjectiveC.dylib
      libswiftIOKit.dylib
      libswiftFoundation.dylib
      libswiftDispatch.dylib
      libswiftDarwin.dylib
      libswiftCoreGraphics.dylib
      libswiftCore.dylib
      

      您可以在Xcode安装中找到它们./Contents/Developer/Toolchains/Swift_2.3.xctoolchain/usr/lib/swift/macosx /

      警告:请记住,您需要使用命令行工具分发框架和dylib,并且它们需要与工具位于同一目录中。您可以通过指定不同的运行路径将它们放在系统的其他位置,但是您仍然需要使用工具分发它们。

      关于.app软件包的好处在于它为您提供了放置这些内容的地方,用户只需将其拖放即可安装它。如果您可以获得Realm的静态存档版本,则可以将所有内容分发到一个二进制文件中。