构建纯Swift可可触摸框架

时间:2014-06-05 21:45:55

标签: swift cocoa cocoa-touch xcode6

我正在使用Xcode-6探索Swift,到目前为止一直很好,尽管我认为新的集合需要一些工作,因为我已经设法破坏了编译器几次。

问题是我现在无法尝试创建 的框架包,然后在另一个项目中使用 。项目构建没有问题,所有测试都成功通过。当我去创建Archive(我假设是必需的)时,我收到错误:

  

:0:错误:未找到基础Objective-C模块'Sample'

现在我假设这与我的Sample.h的内容有关,它告诉我

// In this header, you should import all the public headers of your framework using statements like #import <Sample/PublicHeader.h>

这很好,除了我只使用了这个框架的swift枚举,结构和类,因此不存在.h文件。

任何人都可以对这一点有所了解,因为我找不到任何文件吗?

5 个答案:

答案 0 :(得分:24)

编辑(7/27/2018)

以下答案中的信息可能不再准确。您的里程可能会有所不同。


我和一位工程师坐下来问了这个确切的问题。这是他们的回应:

Xcode 6目前不支持构建可分发的Swift框架,并且Apple可能不会在Xcode中构建此功能,直到它们有利于他们这样做。现在,Frameworks旨在嵌入到您应用的项目中,而不是分布式。如果您观看任何会话视频或查看示例项目,这始终是安排。 Another reason is that Swift is very new and likely to change. Thus your Swift-based framework is not guaranteed to work on the platform you originally built it on.

轻微更新

工程师提到制作分发框架并非不可能,只是因为它不受支持。

答案 1 :(得分:11)

我能够通过转到框架的目标并在Headers下的Build Phases选项卡上删除MyFramework.h文件来解决错误

然而,我得到的是#34;底层的Objective-C模块未找到&#34;当我使用框架在包含应用程序和应用程序扩展之间共享代码时出错,这两者都是纯粹的Swift。

Image showing MyFramework.h for the MyFramework target on the Build Phases tab under Headers

答案 2 :(得分:2)

您可能会觉得这很有用:Creation of pure swift module

简而言之:可以创建静态框架,但是有一个问题:如果包含“ProjectName-Swift.h”标题,它在最终用户的项目中不起作用。

但是,如果你只使用swift,它的工作正常。

答案 3 :(得分:2)

假设您正在创建一个真正纯粹的Swift模块,您必须禁用Objective-C兼容性标头和任何生成的接口标头,以便编译器不会因为它可以为框架找到Objective-C模块而关闭。 enter image description here

删除您的公共框架标头。如果你这样做,你会在链接时收到模块地图警告。

答案 4 :(得分:0)

我认为这是XCode 6中的一个错误,或者Apple在测试版中不允许从XCode归档Framework。

如果编译成配置文件,XCode会正确生成框架。 (请参阅DerivedData中创建的Release文件夹)