2014-06-05 109 views
34

我正在用Xcode-6探索Swift,并且迄今为止这么好,尽管我认为新集合需要一点点工作,因为我已经设法分解了几次编译器。构建纯Swift可可触摸框架

问题是现在我被困在试图建立一个框架包然后在另一个项目使用。该项目的构建没有问题,并且所有测试都通过成功。当我去创建归档(我假设是需要什么)我收到错误:

:0: error: underlying Objective-C module 'Sample' not found

现在,我想这已经是与我Sample.h的告诉我

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

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

任何人都可以点亮这一个,因为我找不到任何可用的文档呢?

+0

为什么存档框架? – vladof81

+0

您是否尝试过构建纯Swift框架项目并将其用于同一工作区中的客户端应用程序?如果是这样,它工作吗? – Omer

回答

25

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

Xcode 6目前不支持构建可分发的Swift框架,并且Apple可能不会将此功能构建到Xcode中,直到其有利于他们这样做。现在,框架意味着嵌入到您的应用程序的项目中,而不是分布式的。如果您观看任何会议视频或查看示例项目,这总是安排。 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.

轻微更新

工程师提到,这不是不可能使一个框架分布,只是它不支持。

+4

这与Apple的文档直接冲突:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html – rougeExciter

+2

这些文档仍然是“预发布”,因此它的主题改变另外,他们并没有说它不可能建立一个框架并在一个单独的项目中使用它。他们只是说不支持。你有没有尝试构建一个Swift框架目标在不同的项目中使用? – Aaron

+0

是的,我正在保持粉末干燥,试图找到有效和无效的界限,但目前这一切都工作正常。我怀疑存在以下约束(至少):如果他们修改了swift语言,尽管有承诺的二进制兼容性,应用程序及其所有框架必须使用相同的二进制版本构建。 – rougeExciter

0

我认为这是XCode 6中的一个错误,或者苹果不允许在Beta版中将框架从XCode归档。

如果编译到配置文件XCode正确生成框架。 (见DerivedData创建的Release文件夹)

11

我能够去到目标的框架和头下的构建阶段选项卡上,让过去的错误,删除MyFramework.h文件

不过我当我使用框架在包含应用程序和应用程序扩展之间共享代码时,出现了“底层Objective-C模块未找到”错误,这两者都是纯Swift。

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

+0

这帮了我同样的问题虽然它并没有真正告诉我什么是错的......反正,谢谢!:) – Dschee

2

您可能会发现这个有用:Creation of pure swift module

简而言之:这可能使静态的框架,但有一个问题:它不会在最终用户的工作”项目,如果“ProjectName-包括Swift.h头文件。

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

+0

你可以扩展它吗? – OlivaresF

1

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

请勿删除您的公共框架标题。如果您愿意,您会在链接时收到模块映射警告。