Target、Project、Workspace的联系和区别

Target

    Target说明了product/binary是如何构建的,包括一系列build settings(如Linking、Packaging等),

build settings

并且Target定义了文件(源码和资源)到底属于哪个项目,添加文件时,需要选择对应的Target(注意:当有多个Target,添加文件时,默认只会选择一个Target,如果该文件需要被多个Target共享,需要手动勾选)。多个Targe可以用来区分不同的项目环境,如采用预定义宏在dev、release、test环境下配置不同的参数

choose target

Project

    Project可以看作是一系列相关的Target的集合,包含了所有Target的文件,每个Target的文件都是Project文件的子集。Project也可以设定build settings作为所有Target的默认settings,如果某个Target需要修改,可以在自己的settings里修改

Project-Build Settings

    XCode可以打开.xcodeproj和.xcworkspace后缀的文件,但不能直接打开Target。但是Project不能直接build/run,所以每个Project至少需要一个Target

需要选择一个Target build/run

    Project可以内嵌subproject作为依赖,这样你就可以在同一个window里面编辑项目和它需要的依赖,并且在build/run的时候,subproject的Target也会出现在选择列表里,当dependency发生变化时,Xcode会重新编译(注:这一条我还没遇到实际的使用情况,所以具体的大家可以去搜网上其他的教程)

Workspace

    当dependency需要被多个Project用到(准确的说是它们的target使用)时,把dependency放在和Project同级的目录就显得比较合适,这时候,Workspace就出现了。Workspace包含了多个同级的Project(Project本身可以有subproject),这些Project可以有依赖关系。同样,Workspace中Project的Target都会出现在build/run的选择列表里

Workspace

    Workspace中的Project依然可以单独打开,但是如果当A Project依赖于B Project,A Project单独打开时,Xcode不能识别依赖,会导致编译错误。同样,当dependency发生变化时,Xcode会重新编译。

总结

1. Project包含需要的文件、配置和对应Target;Workspace包含一些相互依赖的Project

2. Project和Workspace都是项目的组织形式,只是level不一样

3. 一般来说,使用Project就够了,但是使用CocoaPods时,会自动使用使用Workspace来组织项目(生成一个名为Pods的项目包含第三方库)



 

猜你喜欢

转载自blog.csdn.net/huangyimo/article/details/85258114