如何链接到第三方Swift框架

时间:2014-11-01 18:29:24

标签: swift

在过去24小时内,我尝试使用两个不同的第三方Swift库:SwiftzSleipnir。我认为它应该相当容易,因为这两个项目只是简单地提供了如何使用它们的草图。但是,两者都没有为我提供足够的细节。我已经尝试了以下所有方法:将项目添加到我的工作区,将已编译的框架拖放到我的项目导航器中,将框架添加到" Link Binary with Libraries"相。在所有情况下,我都会收到链接器错误,通知我无法找到该框架。

我只需要一个指向实际文档的链接,该文档说明了如何执行此操作。我还没有找到它。

编辑:忘掉第三方图书馆了。你如何消费自己的图书馆?我有一个Cocoa Framework库,我写过。现在我已将命令行项目添加到同一工作区。如果我可以从命令行应用程序访问我的新框架,那肯定会很好。我点击了我的命令行项目。单击Build Phases并将我的自定义框架拖到Link Binary with Libraries部分。一切都很好。运行我的应用程序时,我收到以下错误:

dyld: Library not loaded: @rpath/libswiftAppKit.dylib
  Referenced from: /Users/mgwelch/Library/Developer/Xcode/DerivedData/SwiftParsing-
  btkaoklayoffujgrkklfyffpipih/Build/Products/Debug/Parsing.framework/Versions/A/
  Parsing
  Reason: image not foundI

3 个答案:

答案 0 :(得分:6)

好吧,我认为没有多少用户熟悉Swift框架。

好吧,我从框架开发人员那里获得了一些关于如何消费他们的框架的问题的帮助。我仍然有问题,但其他人可能有兴趣跟进对话,看看涉及的一些步骤

https://github.com/typelift/swiftz/issues/114

本期提供了详细说明。随意试试吧。我将此标记为已关闭。

UPDATE 我在评论中说过这一点,但可能没有看到。我正在尝试编写命令行工具。目前使用XCode 6.1,似乎无法在命令行工具中使用第三方框架。事实上,我已经针对另一个项目写了一个问题,说明他们的命令行目标不再运行:https://github.com/railsware/Sleipnir/issues/17

也许这在以前的测试版中有效,但似乎不再可能。

答案 1 :(得分:2)

尝试在Build Settings中检查Runpath Search Paths。检查Frameworks目录的相对路径是否正确。

LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks

答案 2 :(得分:2)

查看以下文档(Embedded Swift frameworks in OS X command line tools),它描述了一个适用于在命令行工具中嵌入Swift框架的过程。

它更像是一种解决方案,而不是一种解决方案,但它确实有效。理想情况下,在Swift中创建命令行应用程序时,Apple的用户应该在大号粗体红色字母中加上一个友好的符号,以避免我们浪费时间来解决这类问题。

我没有任何问题地遵循Swift 1.1和Swift 1.2的流程。将argv转换为swift是唯一棘手的一点,但你可以在main.m中的objective-c中执行此操作:

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        NSMutableArray *paramArray = [[NSMutableArray alloc] init];
        for (int i=0; i<argc ;i++) {
            [paramArray addObject:[[NSString alloc] initWithUTF8String:argv[i]]];
        }
        return (int) [[Whatever sharedInstance]manage:argc param:paramArray];
    }
    return 0;
}