更主要想要知道:
在Targets中的第二列和第三列是什么含义。。。
以及:
Targets和Project中的设置,有何关系?
Build Settings中的Levels中的,某个配置属性的值
分4列:
- Resolved
- ProjectName App?
- ProjectName Project?
- iOS Default
主要是要搞清楚,这4列,尤其是
第二列和第三列的区别
因为之前第三列设置了值
但是无意间忽略了第二列
结果就是没生效
就是下面4列:
Xcode Target vs Project
A target defines a single product
Xcode: project settings vs. target settings – Stack Overflow
WorkSpace Vs Project Vs Target in Xcode – Stack Overflow
iOS:[译]Xcode Concepts–概念Target、Project、Build Setting、Workspace、Scheme – houseq 的专栏 – 博客频道 – CSDN.NET
“a build Setting是一个变量,包含着怎么build product的处理信息。例如,Xcode传给编译器的选项。
build settings有project level和target level俩中级别。project-level中的build setting适用项目中所有的targets,只要该build setting没有被相应的target重写。
每一个target管理着build one product的source files。一个build 设置包含一系列build 特定product 的build settings。例如,通常有debug 和release俩中分开的build 设置。
一个build setting在Xcode中的包含俩部分:setting title 和 definition。前者标示着该build setting并且可被用在其他的settings。后者是一个常量或者一个表达式,确定了build setting的值。一个build setting可能也有一个显示名称,在Xcode界面中显示build setting。
另外,当你选择某个project template创建一个新的project,default build setting也相应的由Xcode生成了,你也可以为project或者某个target创建自定义build settings。一个conditional build setting的值取决于它的先决条件有没有被满足。这种机制允许你,例如,根据targeted architecture确定build a product的sdk。 ”
搜:
xcode build setting levels resolved project iOS Default
xcode build setting levels
Xcode Build Settings Reference
抽空再去搞清楚:
Build Settings中的不同的levels的含义
目前理解了一点了:
Project是针对于整个项目的
Target是针对于单个目标的,一般的项目都默认有三个目标:
ProjectName
ProjectNameTests
ProjectNameUITests
然后Project的level是高于Target的level的
-》高优先级的设置,默认是用于低优先级的设置的
-》但是如果设置了低优先级(Target中)的值,会覆盖掉高优先级(Project中)的值
然后好像明白此处的现象了:
以下用ProjectName表示你的app,你的项目的名字
下面图中,是Resolved和Target空的值:
应该是由于:
第一列:带app的图标的,名字叫做:Resolved,估计含义是:最终的值,表示各种不同level合并后的值
第二列:带app的图标的,名字叫做:ProjectName,图标和Resolved一样,表示当前的Target-》此处是TARGETS中的第一个target-》所以图片也是一样的
如果换成:
ProjectNameTests或ProjectNameUITests,则都是没有图标的了:
第三列:带Xcode项目图标(ProjectName.xcodeproj的文件的那种图标),名字叫做:ProjectName,表示是Project项目这种level的设置-》其值就是你在PROJECT中设置的值:
$(SRCROOT)/JianDao-Bridging-Header.h
第四列:方框中带个小iPhone的图标,名字是:iOS Default,表示的是对应的iOS版本的默认的值?
而此处的各种level的值是如何获得,如何产生的,应该是:
第四列的iOS Default,这个不用我们关心,会自动设置为默认值
第三列的带Xcode项目图标的ProjectName,则是根据我们在PROJECT中设置的值来的
-》点击编辑此值的话:
会同样修改掉PROJECT那里的值:
-》所以此处只是为了方便在编辑更低优先级(Target)中的值时,提供让你修改对应的,更高优先级的(Project中)的选项的机会
第二列的带app图标的ProjectName的值,则是我们此处,可以自己手动设置的值了
对应的,此处的设置的值,会覆盖override了高优先级的Project中的值
第一列是app的图标的Resolved,表示解决了冲突?合并后的值,最终的生效的值
-》由于遵循优先级低的覆盖优先级高的,所以依次是:
第二列(Target的)覆盖第三列(Project的),第三列(Project的)覆盖第四列(iOS Default)
-》所以就会出现:
我此处,之前不知道什么时候,把此处的
Object-C Bridging Header
的第二列(Target的)清空了
-》导致了最终的有效的值是空的,而不是第三列(Project中)设置的
$(SRCROOT)/JianDao-Bridging-Header.h
-》导致代码找不到导入的对应的库而程序出错了。
[总结]
如果对于上述逻辑觉得麻烦,那么就直接选中那个Combined:
这样看到的值,就始终都是最终的,生效的值
-》此处的Combined看到的值,等价于Levels中Resolved的值
-》都是指的是最终有效的值
-》这样就会避免设置值的时候,搞混淆,没有生效了。
-》比如此处,去设置对应的头文件的路径:
即可。
转载请注明:在路上 » [已解决]Xcode中Project和Target之间的关系