Xcode如何将目标打包为.framework(而不是.a库)

我有一个通用框架项目,其中包含一个图书馆作为其主要目标,并在产品下是与“lib”前缀和.a扩展名的库。 看下面的截图:

在这里输入图像说明

我正在使用第三方项目,其中包含一个框架作为其目标和产品是框架扩展.framework。 看下面的截图:

在这里输入图像说明

在“构build设置”中,我可以看到在“包装”和“链接”下有差异,其他地方可能会有更多的差异。 所以,这让我好奇如何build立一个项目来生成.framework而不是.a库。

我只是指出,我正在尝试创build一个静态框架。 有没有人知道一个好的教程,博客或书籍,可以指导我通过步骤来改变目标产品,并帮助我了解差异?

谢谢。

Xcode 6和最新的平台SDK允许为iOS构build(dynamic)框架。 今年的WWDC有几个会议,涵盖如何使用框架。

先前版本的Xcode与iOS SDK并不直接支持构buildiOS的框架目标。 尽pipe可以构build静态的iOS框架,但它不受支持,而且有些脆弱。 使用Xcode 6和最新的iOS SDK,构build一个框架就像创build一个新的框架目标一样简单。 在以前的Xcode版本中,涉及到更多一点,Xcode本身不能识别所有应该使用的构build产品。 使用这些框架作为依赖关系等等,在以前的Xcode版本中不起作用。

Xcode 5中的静态框架

使用Xcode 5构build一个静态框架很像构build一个静态库。 特定于静态框架的重要项目configuration设置是:

 SDKROOT = iphoneos ONLY_ACTIVE_ARCH = NO SUPPORTED_PLATFORMS = iphonesimulator iphoneos VALID_ARCHS = arm64 armv7 armv7s x86_64 i386 LINK_WITH_STANDARD_LIBRARIES = NO MACH_O_TYPE = staticlib WRAPPER_EXTENSION = framework 
  1. 从静态库目标开始。 确保你的代码可以构build为一个静态库。
  2. 创build一个新的捆绑目标。
  3. 从构build中删除平台,基础SDK,包装器扩展,产品名称(如果需要)和OS X部署目标设置。
  4. 将上面的设置应用于此目标,最好使用构buildconfiguration文件。
  5. 将您的代码,资源等添加到目标。 检查目标的构build阶段,以确保一切都在你期望的地方。 对于标题,使用标题构build阶段而不是复制文件构build阶段。
  6. 如果您使用的是前缀头,请确保它使用的是您的目标平台的正确头(即UIKit.h而不是Cocoa.h)

这将构build一个静态框架产品。 Xcode 5将无法将其用作scheme中的依赖项等。框架的文件布局将不同于dynamic框架。

我find了一个关于如何构build自定义iOS框架的很好的教程 。 即使成品是一个通用框架,这不是我的最终目标,作者select创build一个空的项目。 一个不包括目标产品。 有几个添加目标产品的选项,我不确定要使用哪一个。 因此,我添加了所有具有捆绑图标的目标产品,并将其属性和设置与QLM项目中的目标产品框架进行了比较。 它看起来像QLM使用捆绑目标产品。 尽pipe如此,我仍然在研究属性和设置,所以不确定我可能面临的问题。

无论如何,我发布这个作为可能的答案,希望有人可能有更多的信息来创build这种types的项目目标产品。 我鼓励任何有经验的人创build这种types的目标产品谁可以回答这个问题。 任何额外的信息都需要投票和/或答案。

谢谢。