如何链接到第三方Swift框架

如何链接到第三方Swift框架,swift,Swift,在过去的24小时里,我尝试使用两个不同的第三方Swift库:和。我认为这应该是相当容易的,因为这两个项目只是提供了如何使用它们的草图。然而,两者都没有为我提供足够的细节。我尝试了以下所有方法:将项目添加到我的工作区,将编译好的框架拖放到我的项目导航器中,将框架添加到“链接二进制库”阶段。在所有情况下,我都会收到一个链接器错误,通知我找不到框架 我只需要一个链接到实际的文档,解释如何做到这一点。我没能找到它 编辑:甚至忘记第三方库。你如何使用自己的图书馆?我写了一个Cocoa框架库。现在,我已将命

在过去的24小时里,我尝试使用两个不同的第三方Swift库:和。我认为这应该是相当容易的,因为这两个项目只是提供了如何使用它们的草图。然而,两者都没有为我提供足够的细节。我尝试了以下所有方法:将项目添加到我的工作区,将编译好的框架拖放到我的项目导航器中,将框架添加到“链接二进制库”阶段。在所有情况下,我都会收到一个链接器错误,通知我找不到框架

我只需要一个链接到实际的文档,解释如何做到这一点。我没能找到它

编辑:甚至忘记第三方库。你如何使用自己的图书馆?我写了一个Cocoa框架库。现在,我已将命令行项目添加到同一工作区。如果我能从我的命令行应用程序访问我的新框架,那当然好了。我点击了我的命令行项目。单击构建阶段并将我的自定义框架拖到链接二进制库部分。一切都很好。运行我的应用程序时,我遇到以下错误:

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

好吧,我想还没有多少用户熟悉Swift框架

嗯,我从一个框架开发者那里得到了一些帮助,关于我提出的如何使用他们的框架的问题。我仍然有一些问题,但其他人可能有兴趣关注对话,了解其中的一些步骤

本期提供了详细说明。请随便试用。我会将此标记为已关闭

更新 我在评论中提到了这一点,但可能没有人看到。我正试图编写一个命令行工具。目前在XCode 6.1中,似乎不可能在命令行工具中使用第三方框架。事实上,我已经针对另一个项目写了一个问题,指出他们的命令行目标不再运行:


也许这在以前的beta版中有效,但似乎不再可行。

尝试在构建设置中检查运行路径搜索路径。检查框架目录的相对路径是否正确

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

查看以下文档(),它描述了在命令行工具中嵌入Swift框架的过程

这与其说是一个解决方案,不如说是一个变通办法,但它确实有效。理想情况下,苹果公司的员工在使用Swift创建命令行应用程序时,应该用粗体、红色的大字写上友好的标志,以避免我们在此类问题上浪费时间

我遵循了Swift 1.1和Swift 1.2的流程,没有任何问题。将argv转换为swift的唯一技巧是,您可以在main.m中的objective-c中使用:

int main(int argc,const char*argv[]{
@自动释放池{
NSMutableArray*paramArray=[[NSMutableArray alloc]init];

对于(int i=0;i是的,这就是我的意思。您应该能够将框架的项目文件从Finder拖放到您想要使用它的项目中(此时框架项目不能在Xcode中打开)。我一直都这样做;)这些都是所谓的子项目,它们会自动与您的项目一起生成。您只需在要将框架添加到的项目中添加框架的目标(使用二进制或类似的链接,当您单击项目文件时,它位于最底部的第一个选项卡中).Thank@HAS。我很高兴知道这应该是可行的。事实证明,这比听起来更困难。如果你看我下面的答案,你会发现我仍然遇到两个问题:最初是链接器错误,现在是复制文件阶段的错误(不确定是否真的需要复制文件阶段。我认为XCode应该足够聪明,知道它需要我告诉它链接到的文件。)我更仔细地查看了dyld错误。我认为它是说找不到我的Parsing.framework库。相反,它是说找不到swift库。我继续得到一个运行时错误:
dyld:library未加载:@rpath/libswittappkit.dylib
我试图编写一个命令行应用程序,根据一个contswiftz项目的发行人,你不能在命令行项目中使用DYLIB,我认为如果你尝试这样做时XCode通知你,这会很好。我还想写一个命令行工具。在XCode 6.4中,这仍然不可能吗?XCode 7.1.1,尝试为我显式创建的框架创建一个示例CLI应用程序对于CLI应用程序,以及…得到这个愚蠢的错误。所以这似乎仍然是一个问题。天啊,这太愚蠢了,苹果。我想我会把这件事重写为简单的Swift代码。谢谢。请参阅我的最新评论。根据我的发现,我试图在XCode 6.1中做的事情是不可能的。但是我问我遇到的每个人,如果他们可以。你能写一个命令行工具并将其链接到第三方框架吗?如果可以,你会有一些数据与我的发现相矛盾。回答你的问题:我的“运行路径搜索路径”条目为空。我复制/粘贴了您对某个值的建议。现在我收到一个错误
dyld:Library not loaded:@rpath/libswiftCore.dylib
。因此,我们似乎已经稍微改变了问题的症状。在它寻找libswiftAppKit之前,但我不确定这一点。这都是几周前的事,我正在尝试另一个版本但是我现在要做的是一样的(链接到一个框架),只是一个不同的项目。这是我第一次被告知这是目前不可能的:谢谢,我来看看。@Colemanda这要求命令行工具是用Objective-C编写的?你知道Swift2/XCode 7是否仍然如此吗?你是否能够将其作为命令行应用程序安装在真正的shell上运行,而且不只是在XCode的伪终端上运行它?@Balthazar是的,没有任何问题。我没有为它创建安装程序,但它在bash中执行得很好。只需要添加
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;
}