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 的Container
是 Lottie project
这个导入的第三方库
- 编辑某一个scheme
可以选择不同的configuration
和不同的targets
image.png
configuration
configuration
是 project
的配置,被 targets
所继承 (下图我复制新增了一个releaseStaging
的configuration
)
然后可以在 Preprocessor Macros
中新增不同 configuration
的宏(macros
) ,在代码中就可以直接使用。
还可以添加不同的 User-Defined Setting
,如下图,具体使用见我的另一篇文章
可以针对不同的configuration
定义不同的值,以便在设置(plist)中以$(xxxx)
的方式使用。
Build Settings也可以把Bundle Identifier用这种方法做环境分离打出不同环境的包,这样不同环境的包就可以在手机上并存了。(当然也可以在不同targets的plist文件里修改,然后打包不同的targets)
plist里所有值都可以按上面方法做到环境分离。
点击某一个文件,右边的 inspector area
有个 Target Membership
,显示了这个文件在哪个 target
中生效,同一个文件可以同时归属多个 target。
-
左边导航栏有四个
Group
, 前三个对应初始的三个Target
,并且都在第四个Products
中有对应的一个文件; 复制出来的Target
并没有对应的group
,但是在Products
中有对应的一个文件(.app
或者.xctest
文件), 一个Target对应一个Product。 -
当添加新的Target的时候,在创建类或其他文件时,在Targets中会多出对应的Target,注意你要选中放到那个Target中。
网友评论