美文网首页iOS DevMobDevGroupiOS
Xcode中的 workspace, project, targ

Xcode中的 workspace, project, targ

作者: JamesYu | 来源:发表于2015-09-03 22:41 被阅读13802次

    最近在做SDK兼容性测试发现一个问题,就是编译出来的SDK,在iOS8以下的系统中不能用。查了下,发现是编译设置错了,虽然我target设置的是支持iOS6以上的,但是工程设置的还是iOS8以上。xib文件编译的版本是根据project设置,而不是target,这个也是为什么在低于iOS8中不能用的原因。正好之前对SDK开发进行了工程拆分和重组,也使用了workspace,顺便也了解了些编译相关的东西。

    Xcode Project

    Xcode中的 project里面包含了所有的源文件,资源文件和构建一个或者多个product的信息。project利用他们去编译我们所需的product,也帮我们组织它们之间的关系。一个project可以包含一个或者多个target。project定义了一些基本的编译设置,每个target都继承了project的默认设置,每个target可以通过重新设置target的编译选项来定义自己的特殊编译选项。

    project包含了以下信息:

    • 源文件

      • 代码的头文件和实现文件
      • 静态库,动态库,
      • 资源文件(如文本,xml,plist等)
      • 图片资源
      • 界面资源文件(xib, storyboard等)
    • 在文件结构的导航中,采用group去组织文件(实际开发中,尽量使用实体文件夹)

    • project的编译级别配置文件如(debug, release)

    • target

    • 运行环境如:debug,test

    project可以单独存在,或者存在于一个workspace中。

    target

    target定义了构造一个product所需的文件和编译指令。一个target对应于一个product。target说白了就是
    告诉编译系统要编译的文件和编译设置。编译指令就是根据build settings and build phases来确定的。

    target之间可以进行依赖。如果一个target的编译需要另外一个target作为他的输入,那么我们就可以说前者依赖于后者。如果这两个target在同一个workspace里面,Xcode可以发现他们的依赖关系,这种依赖称之为隐式依赖。当然你可以通过设置,明确他们的依赖关系。

    workspace

    workspace是Xcode的一种文件,用来管理工程和里面的文件,一个workspace可以包含若干个工程,甚至可以添加任何你想添加的文件。workspace提供了工程和工程里面的target之间隐式和显式依赖
    关系,用来管理和组织工程里面的所有文件。

    workspace中的工程共享一个编译目录

    workspace中的工程默认都是在同一个编译目录下,也就是workspace的编译目录。由于每个工程中的文件都在workspace的编译目录下,所以每个工程之间的文件都是相互可以引用的。因此,如果workspace中的多个工程使用了同一个库的时候,我们就不需要给每个工程都拷贝一个。

    Xcode会检查编译目录里面的所有文件去发现隐式的依赖关系。比如,一个工程用来编译成库给其他工程去引用,Xcode可以自动的先编译这个工程的库,然后再去编译其他的工程。虽然你没有在编译选项里面去设置这些依赖关系。当然如果你真的需要的话,你也可以去设置,提供一个显式的编译依赖关系。

    workspace中每个工程依然都是独立的。如果你想单独的使用这个工程,并且不希望影响其他工程,或者被其他工程影响,你可以直接打开工程而不通过workspace。一个工程可以被多个workspace所拥有,在任意的组合中依然可以直接运行,而不需要去重新配置工程或者workspace。

    Xcode Scheme

    scheme定义了编译集合中的若干target,编译时的一些设置以及要执行的测试集合。我们可以定义多个scheme,但是每次只能使用其中一个。我们可以设置scheme保存在project中还是workspace中。如果保存在project中,那么任意包含了这个工程的workspace都可以使用。如果保存在workspace中,那么只有这个workspace可以使用。

    参考:官方文档

    相关文章

      网友评论

      • UncleFool:还是不明白
      • xiacheng:你好,我现在遇到一个问题,设置scheme为share后,有时打开工程会发现有好几个scheme(自己没有手动创建),这是为什么?
      • 863c73f31933:楼上,我这边target和project都是一个,不过在target和project中iOS Deployment Target的值设置不同,这个会有影响不?
      • 十一岁的加重:请教一个workspace里有十多个project,是怎么处理的啊
      • 坏人_李哈哈:如果project里的build settings和target里的build settings冲突,比如说code signing设置了不同的证书,打包和真机测试时会如何处理呢?
        米蘭尛鐵匠:@坏人_李哈哈 “每个target都继承了project的默认设置,每个target可以通过重新设置target的编译选项来定义自己的特殊编译选项。”文章第一段。
      • d28645104c16:谢谢分享
      • 6f089276331d:不错,收藏了

      本文标题:Xcode中的 workspace, project, targ

      本文链接:https://www.haomeiwen.com/subject/pamlcttx.html