2019-02-26 Xcode 里targets 和 scheme 的区别

targets

Projects can have multiple targets—multiple apps and multiple configurations of the same app. A target specifies a product to build, such as an iOS, macOS, tvOS, or watchOS app. Most projects you create from a template have one target for the main app and other targets for test apps. For watchOS apps, there’s a target for the iOS app, the WatchKit extension, and the WatchKit app.

每当你复制一个targets 时,项目里就会多一个对应的 info.plist 文件,编辑这个info.plist文件,可以打包出不同配置( build setting 以及 build phases)的app

scheme

A scheme is a collection of settings that specify the targets to build, the build configuration, and the executable environment. Xcode creates a default scheme for each target in your project

scheme 是用来决定运行哪个 target 的。
当你运行(Build),打包(archive)app的时候,其实是在运行或打包某一个scheme的配置


image.png

如上,如果点击运行,就是在运行 test_ios_proj copy 这个scheme。这个scheme是在复制 test_ios_proj这个targets生成了test_ios_proj copy这个targets的时候自动生成的相同的名字的scheme,默认情况下,这个scheme 的run的时候 配置的运行的targets 就是 test_ios_proj copy ,但是你可以编辑修改选择。编辑这个scheme,如下图,有三个targets,可以选择其他 targets,使得选择这个scheme在run的时候,运行的是其他targets

  • 所有的scheme


    所有的scheme

    image.png
  • scheme后面的Shared 选项如果没勾选,那么这个scheme就是自己的scheme,只能自己使用,这个scheme的配置就在.xcodeproj/username.xcuserdata/xcschemes(username是你的名字)目录下面,而这个目录是不会被版本控制的。

  • 如果Shared 选项勾选了,那么这个scheme就是共享的scheme,这个scheme的项目配置就在.xcodeproj/xcshareddata/xcschemes目录下, 这个目录是被 source control的,别人就可以使用你的这个scheme

什么?你看不到这些目录?可以看看我的这篇文章:.xcodeproj的真实面貌

每一个scheme 都是属于某一个 Container的,很多第三方库也会有scheme。比如 Lottie 这个scheme 的ContainerLottie project 这个导入的第三方库

  • 编辑某一个scheme
    可以选择不同的 configuration 和不同的 targets
    image.png
编辑某一个scheme

configuration

configurationproject 的配置,被 targets 所继承 (下图我复制新增了一个releaseStagingconfiguration)

image.png

然后可以在 Preprocessor Macros 中新增不同 configuration 的宏(macros) ,在代码中就可以直接使用。

还可以添加不同的 User-Defined Setting,如下图,具体使用见我的另一篇文章
可以针对不同的configuration 定义不同的值,以便在设置(plist)中以$(xxxx) 的方式使用。
Build Settings也可以把Bundle Identifier用这种方法做环境分离打出不同环境的包,这样不同环境的包就可以在手机上并存了。(当然也可以在不同targets的plist文件里修改,然后打包不同的targets)
plist里所有值都可以按上面方法做到环境分离。

image.png
image.png

点击某一个文件,右边的 inspector area 有个 Target Membership ,显示了这个文件在哪个 target 中生效,同一个文件可以同时归属多个 target。

  • 左边导航栏有四个 Group , 前三个对应初始的三个 Target ,并且都在第四个 Products 中有对应的一个文件; 复制出来的 Target 并没有对应的 group ,但是在 Products 中有对应的一个文件(.app 或者 .xctest 文件), 一个Target对应一个Product。

  • 当添加新的Target的时候,在创建类或其他文件时,在Targets中会多出对应的Target,注意你要选中放到那个Target中。

你可能感兴趣的:(2019-02-26 Xcode 里targets 和 scheme 的区别)