20 / 12 / 13

「重学 Xcode」Xcode 中 Workspace / Project / Target / Scheme

Project

Project是构建一个或多个软件产品所需的所有文件,资源和信息的存储库。


Target

Target指定要构建的产品,并包含构建需要被包含在Project或Workspace中的一组文件说明。

一个Project 可以包含一个或者多个Target。

Target可以相互独立,也可以依赖于另一个Target。


Build Settings & Debug / Release

在Project editor还可以看到一些产品信息和构建信息。分为Project 和 Target 级别,这两个级别都有Build Settings,在构建产品时会用到构建配置信息,如适配的最低版本号,构建的目标CPU架构等。在构建产品时,会使用Project级别的Build Configuration(如适配的最低版本号),如果Target中没有修改过的话,否则使用Target级别中的Build Configuration。

Build Settings 中的部分Build Configuration分为Debug和Release两部分。

  • Debug Build Configuration表示调试构建,得到的最终可产品是调试版本,特点:含完整的符号信息,以方便调试,代码没有经过优化。
  • Release Build Configuration表示发布构建,得到的最终可产品是发布版本,特点:不包含符号信息,不能进行调试(断点没有效果),代码会进行优化,执行速度比Debug版本快,大小比Debug版本小。

Build Active Architecture Only表示只构建适用于当前CPU架构的产品,Debug版本值为YES,只构建当前CPU架构的产品,Release版本值为NO,不仅仅只构建当前CPU架构的产品。所以调试构建的速度要比发布构建更快。

  • 不同CPU架构需要的指令是不同的,以下是不同的架构和设备的对应关系。
    • 真机:
      • armv7:4~4s
      • armv7s:5~5c
      • arm64:5s+
    • 模拟器i386:
      • 4s~5c
      • x86_64:5s+

Scheme

Scheme 定义了一组可以构建的Target,构建时所使用的构建信息,可执行的一组测试。Scheme是可以编辑的。


Workspace

Workspace是一个Xcode文档,可以包含多个 Project,以及要包括的任何其他文件。

  • 被包含在WorkSpace中的Project中的Target还可能存在隐式或者显式的依赖关系。

    显示依赖:在Xcode中显示添加Target依赖关系.

    隐式依赖:Xcode会自动遍历WorkSpace中所有的文件检查隐式依赖关系,如果Target A 引用 Target B 的编译的库,那么Target A 隐式依赖于Target B。如使用cocoaPods管理第三方,我们自己建的Target 引用cocoaPods创建的另一个项目Pods编译的库。

  • 默认情况下,Workspace中的所有Xcode Project共享一个编译目录,其中所有Project中的文件都是可以相互引用的,如果多个Project引用同一个库,只需要导入一次即可,而不需要每个Project都导入一次。

  • WorkSpace的每个Project依然还是独立的个体。如果要打开一个既不影响其他项目,也不被WorkSapce中的其他项目影响的Project,可以选择直接打开.xcodeproj而不打开。