在Xcode4使用开源的静态库

Xcode的4.0.1使我们能够更容易地创建和使用在iOS项目第三方库。但是我觉得这个过程仍然是复杂的,需要说明 Xcode的文件表明,它会自动检测隐式依赖关系工作区之间指数我还没有发现这是此案这里我将介绍发现项目之间以及与其他开发人员代码,用于创建和共享步骤

  1. 背景
  2. 如何静态库
  3. 创建一个静态库
  4. 未来的改进
背景

工作区:

Xcode的4引入了多个项目容器的工作区概念有许多组合选择如何共享整个项目代码我们所要建设工作区,其中关键行为

默认情况下,一个工作区中的所有Xcode项目在同一目录中统称工作区建立目录
Xcode的构建目录中文件检查发现隐式依赖
在工作区中每个项目继续拥有自己独立的身份

计划

工作区在一个项目中这是我们计划的工作区成员计划取代活动目标构建的Xcode3配置,并可执行设置定义目标,以建立建立的顺序,以及采取何种行动构建完成我们想要我们共享代码轻松地安装到使用它任何项目计划在Xcode4过渡指南涵盖更详细新结构

 
 目标:

计划我们一个或多个建设目标,定义一个源文件的建立用来建立这些文件的设置任何其他目标必须完成的第一批产品依赖最终我们希望我们的代码消费者状态他们的项目建设目标取决于我们共享代码Xcode中建立这个共享代码使其可积极构建目标我们可以通过提供一个项目,其中包含要共享代码和静态库建设的目标,到构建产品其他开发人员可以添加作为构建目标依赖

使用静态库
  • 创建工作将项目添加到一个工作区
  • 新增建设目标的依赖关系
  • 添加静态库
  • 配置项目的计划
  • 固定索引


    创建工作

    Xcode的文件菜单中我们可以创建一个新的空工作打开一个现有项目选择另存为工作区... ...”创建一个新的工作区包含我们的项目这将创建一个“。xcworkspace中的文件系统

    An empty Xcode 4 workspace
    一个空Xcode4工作区
 将项目添加到一个工作区

一旦我们有一个工作我们可以工作区的Navigator右键单击创建一个新的项目或增加现有的“xcodeproj”包
Adding a new project to a workspace

添加一个新的项目工作区

Adding an existing project to a workspace

我们要结束一个单一的包含任何静态库我们将依赖于我们的应用程序项目项目工作区值得注意这些项目都是在工作区中所有兄弟姐妹我们静态库没有增加一条,作为我们的应用程序项目引用


新增建设目标的依赖关系

所有的项目我们需要我们的工作区我们可以选择我们的应用程序构建目标添加一个静态链接的二进制库”建设阶段

Libraries and frameworks available to add to the "Link Binary With Libraries" build phase
添加与库链接二进制库和框架构建阶段

A static library added to the "Link Binary With Libraries" build phase
静态库添加到链接二进制使用库建设阶段

 
 
添加静态库

我们还需要确保我们的应用程序构建目标可以找到这个静态库使用公共打开生成设置”选项卡找到用户头搜索路径设置设置这个“$BUILT_PRODUCTS_DIR”(“$BUILT_PRODUCTS_DIR/static_library_name如果我们要更具体我们将更新此设置我们每次添加另一个库,并检查“递归”检查框。现在我们目标将搜索共享我们工作区建立目录找到可连接头文件

Setting the User Header Search Paths
设置用户头搜索路径

User Header Search Paths set
用户头搜索路径设置

用户头搜索路径设置定义所报进口例如“#进口MyLibraryClass.h”页眉搜索路径“设置括号内的进口(如可用”#import)与这些头文件定义我发现的Xcode引用形式自动完成所以我总是添加库用户头文件搜索路径,即使我的项目角度来看,他们可能系统级括号内的

当使用静态库,其中包括类别我们也将添加ObjC”标志其他链接程序标志构建设置这将强制链接器加载所有的Objective - C类和类别如果库包含类别all_loadforce_load,以及可能需要参见技术问答QA1490这些设置的更详细的解释

 
 配置项目的计划

Xcode中在这一点上已发现我们的应用程序项目静态库项目之间依赖自动配置我们计划,正确不幸的是,我没有发现这是在实践中情况相反我们将不得不修改我们目前的计划,并添加静态库建设目标之前,我们的应用程序构建目标

Setting the scheme's target build order
设置该计划的目标构建顺序


固定索引

在这一点上我们应该可以包括依赖静态库使用仍然成功地构建我们的应用程序不幸的Xcode不显示尽管工作的文件指出这些链接静态库在代码完成的任何类索引在整个工作区延长内容感知功能代码完成和重构范围
作为一种变通方法我们可以静态库项目拖动我们的应用程序项目公共,增加他们作为参考这些头文件不需要包括我们的建设目标,只需在我们的项目的头将允许他们班出现在代码完成


创建一个静态库

如果我们计划发布一些我们自己的代码重用作为一个静态库,有几件事情我们应该做的,以确保上述过程是容易的,我们图书馆的用户尽可能简单。

命名空间的类适当
创建一个构建目标
公开的公​​共头
设置安装目录
设置的公共头路径
排除从VCS用户的特定文件

命名空间的类适当

使用类,协议,功能,和库中的常数,在图书馆的用户的项目名称,以防止碰撞的适当的前缀。

创建一个构建目标

在为我们的用户链接项目提供一个静态库的构建目标。 Xcode提供的模板创建静态库的项目,或加入静态库的建立对现有项目的目标。

公开的公​​共头

确定头文件库的用户应该是可见的。提供一个明确的命名组包含这些头文件,使我们的图书馆的用户可以轻松地找到他们作为“修复索引”上面所描述的解决方法的一部分。这也有助于我们澄清我们的图书馆提供的公共接口是什么,什么类的实施细则,有可能改变作为图书馆的发展。

对于每一个公共头文件,确保它设置为“公”,在“目标会员”督察窗格。只有公共头将要为我们的用户导入提供。

Making a header file public
制作一个头文件中的公共


设置安装目录

我们的静态库建设的目标将是一个用户的工作区的成员,该工作区的安装规则。因此,我们建立产品的静态库可安装在Xcode的喜好设置位置,路径中得出的数据,或通过我们的建设目标指定的路径。由于我们无法控制用户的设置,我们应该确保我们的图书馆是在所有情况下的表现。我设置的“安装目录”设置为“$(BUILT_PRODUCTS_DIR)”建立使静态库构建的产品,可以在发现一个已知的位置,并设置“跳过安装”建立设置为“Yes”,以避免意外安装的iOS库在“/ usr /本地/库”。

Setting the installation directory
设置安装目录


设置的公共头路径

我们需要指定一个位置复制静态库的公共头,使他们可以在我们的用户包括头搜索路径。设置“公共页眉文件夹路径”,“$(TARGET_NAME)”将创建一个文件夹后,我们的静态库命名为构建目标在共享工作区的建立目录和索引“用户头搜索路径”设置上面所述。

Setting the public headers path for the static library
设置为静态库的公共头文件路径


排除从VCS用户的特定文件

我们的工作区和项目,包括一些有关我们的用户帐户只包含数据的文件,窗口位置,打开的文件,等等。有没有必要检查到源代码控制这些,至少不会在我们的发行版分支,所以让我们使用GIT或任何VCS设置一些合理的忽略规则。 Github上提供了一个方便的设置。gitignore文件

未来的改进

希望的Xcode 4最终将不辜负它的文档的承诺,并一贯自动检测整个工作区的隐式依赖关系和索引文件正确。当然,似乎这种行为作斗争的其他开发人员的数量:[1],[2],[3] [4] [5] [6] [7] [8]。在此之前,索引的改善,我觉得这个过程至少在某种程度上是不是试图维持在Xcode 3模拟器和设备兼容的静态库构建简单和清洁。
我发现这种模式最好直接复制到我的项目的第三方类,因为它使我可以轻松地保持版本的历史,使我的工作区中的静态库项目的更新和避免太密切合作,以私人的结构和内容耦合我的项目静态库。
请让我知道如果你可以看到这种模式可以改善,或者如果你发现你自己的选择意味着共享代码的任何地区。
 
posted @ 2011-12-13 16:24  程序是啥  阅读(2828)  评论(0编辑  收藏  举报