2

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

在此处输入图像描述

我正在使用包含一个框架作为其目标的第 3 方项目,并且在 Products 下是具有 .framework 扩展名的框架。请看下面的截图:

在此处输入图像描述

在构建设置中四处寻找,我可以看到打包和链接下存在差异,其他地方可能存在更多差异。所以,这让我很好奇如何建立一个项目来生成一个 .framework 而不是 .a 库。

刚刚有人向我指出我正在尝试创建一个静态框架。有人知道可以指导我完成更改目标产品并帮助我理解差异的好教程、博客或书籍吗?

谢谢你。

4

2 回答 2

4

Xcode 6 和最新的平台 SDK 允许为 iOS 构建(动态)框架。今年的 WWDC 有几场会议涵盖了如何使用框架。

带有 iOS SDK 的以前版本的 Xcode 不直接支持为 iOS 构建框架目标。虽然可以构建静态 iOS 框架,但它不受支持且有些脆弱。使用 Xcode 6 和最新的 iOS SDK,构建框架就像创建一个新的框架目标一样简单。在以前的 Xcode 版本中,它涉及的更多一些,并且 Xcode 本身不会在它应该识别的所有地方识别构建产品。将这些框架用作依赖项等只是在以前版本的 Xcode 中不起作用。

Xcode 5 中的静态框架

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

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. 从静态库目标开始。确保您的代码可以构建为静态库。
  2. 创建一个新的捆绑目标。
  3. 从构建中删除平台、基础 SDK、包装器扩展、产品名称(如果需要)和 OS X 部署目标设置。
  4. 将上述设置应用于此目标,最好使用构建配置文件。
  5. 将您的代码、资源等添加到目标。检查目标的构建阶段以确保一切都在您期望的位置。对于标头,使用标头构建阶段而不是复制文件构建阶段。
  6. 如果您使用的是前缀标头,请确保它为您的目标平台使用正确的标头(即 UIKit.h 而不是 Cocoa.h)

这将构建一个静态框架产品。Xcode 5 将无法将其用作方案等中的依赖项。框架的文件布局将与动态框架不同。

于 2014-08-06T00:00:11.190 回答
0

我找到了一个关于如何构建自定义 iOS 框架的很棒的教程。尽管成品是一个通用框架,这不是我的最终目标,但作者选择创建一个空项目。不包括目标产品的产品。添加目标产品有多种选择,我不确定使用哪一种。因此,我添加了所有具有 Bundle 图标的 Target Products,并将属性和设置与 QLM 项目中的框架 Target Product 进行了比较。看起来 QLM 使用了捆绑目标产品。不过,我仍在处理属性和设置,所以不确定我可能会遇到什么问题。

无论如何,我将其发布为一个可能的答案,希望有人可能有更多信息来创建这种类型的项目目标产品。我鼓励任何有创建此类目标产品经验且可以回答问题的人这样做。任何其他信息都需要投票和/或答案点。

谢谢你。

于 2014-08-06T18:06:40.503 回答