构建纯Swift可可触摸框架

问题描述 投票:35回答:5

我正在使用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文件存在。

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

swift cocoa cocoa-touch xcode6
5个回答
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.

稍微更新

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


11
投票

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

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


2
投票

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

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

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


2
投票

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

不要删除您的公共框架标头。如果您这样做,您将在链接时获得模块映射警告。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.