用Xcode 7 (Beta 3)构建一个Swift框架,用作嵌入式二进制文件



自从iOS 8中引入嵌入式二进制文件以来,我一直想将我的许多常用代码移植到框架中。我决定等一年再做这件事,今年,随着Xcode 7 Beta和iOS 9的发布,我开始做这件事了。

我在Xcode 7中启动了一个Cocoa Touch框架项目,我想把它编译成一个可用的框架。我可以让它编译我的项目成一个。框架,但有几个问题;也就是说,该框架似乎不能导入到新项目中(我将很快描述为此所做的步骤)。因此,我不确定我的框架是否有任何可见符号。

这是我创建框架所做的:

  1. 将我的框架创建为Cocoa Touch框架。
  2. 转到我的目标的构建阶段,转到Headers,并将我所有的Swift文件添加到"Public"部分,希望能导出我所有的符号,而不必将它们标记为public。我试图将我的项目归档为框架。目前,看起来Xcode 7 Beta 3有一个bug(今天晚些时候会报告),它会生成损坏的存档文件。因此,我无法从"管理器"窗口中获取框架。为了解决这个问题,我将Xcode中的Run动作的模式从Debug更改为Release,构建它并从我的项目的build/iphoneos-release目录中抓取它生成的.framework。这是一个快速的测试,所以我不需要为模拟器生成框架。

下面是我在一个新项目中添加框架的方法:

  1. 创建一个"Frameworks"组(出于组织目的)并将框架拖到那里,当它问我是否要将文件复制到我的项目目录时选择"yes"。
  2. 转到我的目标设置,从"链接库"中删除我的框架(它是自动添加的),将其添加到嵌入式二进制文件中。这再次将框架添加到链接库中,所以我不得不从那里删除它两次。把框架留在链接库中会导致链接器错误(找不到框架-不知道为什么,但我认为这与我的问题无关,我也应该向苹果报告),但是一旦你把它从那里删除,当你把它添加到嵌入式二进制文件中时,它似乎可以编译得很好。试图在文件中导入我的框架。Xcode抱怨没有这样的模块。

不幸的是,尽管嵌入式框架已经出现了一年左右,我还是找不到太多关于这个主题的文章。

所以我的问题是:我是否正确地创建了框架,使我的框架/其他任何东西都有可能因Xcode 7测试版错误而失败?或者有一个不同的过程来创建一个框架,我想使用嵌入式二进制文件?我可能应该提到我想使这个库开放源代码,我认为向想要使用它的人分发一个普通的.framework文件将是整洁的。

我在Xcode 7上有同样的问题。我通过编辑项目的构建设置(包括框架)来解决这个问题。

通过将框架搜索路径字段设置为$(PROJECT_DIR)或设置为包含. Framework文件的目录路径,它应该有助于Xcode找到模块。

最新更新