Xcode的4.0.1使我们能够更容易地创建和使用在iOS项目的第三方库。但是我觉得这个过程仍然是很复杂的,它需要说明。 Xcode的文件表明,它会自动检测隐式依赖关系和工作区之间的指数类,但我还没有发现这是此案。在这里,我将介绍我发现项目之间以及与其他开发人员的代码,用于创建和共享的步骤。
- 背景
- 如何静态库
- 创建一个静态库
- 未来的改进
背景
工作区:
Xcode的4引入了多个项目的容器的工作区的概念。有许多组合选择如何共享整个项目的代码时我们所要建设的工作区,其中的关键行为。
默认情况下,一个工作区中的所有Xcode项目建在同一目录中,统称为工作区建立目录。
Xcode的构建目录中的文件检查,发现隐式依赖。
在工作区中的每个项目,继续拥有自己独立的身份。
工作区:
Xcode的4引入了多个项目的容器的工作区的概念。有许多组合选择如何共享整个项目的代码时我们所要建设的工作区,其中的关键行为。
默认情况下,一个工作区中的所有Xcode项目建在同一目录中,统称为工作区建立目录。
Xcode的构建目录中的文件检查,发现隐式依赖。
在工作区中的每个项目,继续拥有自己独立的身份。
计划:
在工作区,或在一个项目中,这是我们有计划的工作区的成员。计划取代的活动目标,构建的Xcode3的配置,并可执行设置和定义目标,以建立,建立的顺序,以及采取何种行动时构建完成。我们想要我们的共享代码轻松地安装到使用它的任何项目的计划。在Xcode4过渡指南涵盖这更详细的新结构。
在工作区,或在一个项目中,这是我们有计划的工作区的成员。计划取代的活动目标,构建的Xcode3的配置,并可执行设置和定义目标,以建立,建立的顺序,以及采取何种行动时构建完成。我们想要我们的共享代码轻松地安装到使用它的任何项目的计划。在Xcode4过渡指南涵盖这更详细的新结构。
添加一个新的项目工作区
我们要结束与一个单一的包含任何静态库,我们都将依赖于我们的应用程序的项目和项目的工作区。值得注意的是,这些项目都是在工作区中的所有兄弟姐妹,我们的静态库没有增加一条,作为我们的应用程序的项目中的引用。
新增建设目标的依赖关系
所有的项目,我们需要在我们的工作区,我们可以选择我们的应用程序的构建目标,并添加一个静态库“链接的二进制库”建设阶段。
添加“与库的链接二进制库和框架”构建阶段
静态库添加到“链接二进制使用库”建设阶段
添加静态库的头
我们还需要确保我们的应用程序的构建目标可以找到这个静态库中使用的公共头。打开“生成设置”选项卡,找到“用户头搜索路径”设置。设置这个“$(BUILT_PRODUCTS_DIR)”(或“$(BUILT_PRODUCTS_DIR)/static_library_name”如果我们要更具体,但我们将更新此设置我们每次添加另一个库),并检查“递归”检查框。现在,我们建的目标将搜索共享我们的工作区的建立目录找到可连接的头文件。
设置用户头搜索路径
用户头搜索路径设置
“用户头搜索路径”设置定义所报的进口(例如“#进口”MyLibraryClass.h“)的头,而”页眉搜索路径“设置为括号内的进口(如可用”#import)与这些头文件定义。我发现的Xcode将只在引用的形式自动完成的头名,所以我总是添加库用户头文件搜索路径,即使从我的项目的角度来看,他们可能更系统级(角括号内的)库。
当使用静态库,其中包括类别,我们也将添加“ObjC”标志,以“其他链接程序标志”构建设置。这将强制链接器从库中加载所有的Objective - C类和类别。如果库中包含只类别“all_load”或“force_load”,以及可能需要。参见技术问答QA1490这些设置的更详细的解释。
我们还需要确保我们的应用程序的构建目标可以找到这个静态库中使用的公共头。打开“生成设置”选项卡,找到“用户头搜索路径”设置。设置这个“$(BUILT_PRODUCTS_DIR)”(或“$(BUILT_PRODUCTS_DIR)/static_library_name”如果我们要更具体,但我们将更新此设置我们每次添加另一个库),并检查“递归”检查框。现在,我们建的目标将搜索共享我们的工作区的建立目录找到可连接的头文件。
设置用户头搜索路径
用户头搜索路径设置
“用户头搜索路径”设置定义所报的进口(例如“#进口”MyLibraryClass.h“)的头,而”页眉搜索路径“设置为括号内的进口(如可用”#import)与这些头文件定义。我发现的Xcode将只在引用的形式自动完成的头名,所以我总是添加库用户头文件搜索路径,即使从我的项目的角度来看,他们可能更系统级(角括号内的)库。
当使用静态库,其中包括类别,我们也将添加“ObjC”标志,以“其他链接程序标志”构建设置。这将强制链接器从库中加载所有的Objective - C类和类别。如果库中包含只类别“all_load”或“force_load”,以及可能需要。参见技术问答QA1490这些设置的更详细的解释。