一、前语
早在Xcode13苹果就对Info.plist做了一次大改革,新建的OC项目默认Info.plist文件是“空的”,Swift项目甚至爽性连Info.plist文件都没有了,苹果这样做是为了建立一个新的Info.plist管理方式,把Info.plist物理文件中的配置挪到Xcode buildSetting中。
但是大部分开发者(比方我)并不买账,依然运用旧的Info.plist文件形式,怎么恢复到旧的Info.plist文件形式,新形式有什么坏处,更多内容见我之前的文章《Xcode13 “消失”的Info.plist文件 》。
二、Xcode14 新变化
Xcode14 苹果又偷摸地改一刀。
假如你依然运用旧的Info.plist文件形式,你会发现在Xcode面板(General – Display Name)设置App姓名不会收效。如下图,咱们把Display Name设置为“娃哈哈”,你会发现App的姓名依然叫“TestTMP”。
Xcode14之前,Xcode面板中的Display Name值和工程中的Info.plist物理文件CFBundleDisplayName字段同步。
从Xcode14开端,Xcode面板中的Display Name值不再和Info.plist物理文件CFBundleDisplayName字段同步,而是和 Build Setting – Info.plist Values(新增的模块)- Bundle Display Name的值同步(如下图)。
留意:这一点不受 Generate Info.plist File 开关(下文介绍)的影响,开关只影响Info.plist文件的生成形式。即 不管开关是YES还是NO,Xcode面板中的Display Name值都是取自Build Setting – Info.plist Values – Bundle Display Name。
1. Generate Info.plist File字段
Build Settings – Generate Info.plist File(GENERATE_INFOPLIST_FILE)这个字段是Xcode13新引进的,它表示是否启用生成Info.plist文件的新形式,YES发动,NO不启用。新建的工程该字段默以为YES,旧的工程该值默以为NO。
当该值为YES时,Xcode运用新的Info.plist文件生成形式。Xcode会在打包时从 Build Setting – Info.plist Values模块 和 Info – Custom iOS Target Properties 中取数据生成终究的Info.plist文件。
当该值为NO时,Xcode运用旧的Info.plist文件生成形式。咱们只需要像以前那样在工程中的Info.plist物理文件中配置参数,Xcode打包时会读取Info.plist物理文件中的配置生成终究包体里的Info.plist文件。
2. Display Name不收效问题的原因
首要,咱们先明确一点:App的姓名终究是由编译出的包体里的Info.plist文件中CFBundleDisplayName字段决定的,假如Info.plist中没有CFBundleDisplayName字段则取CFBundleName字段的值。
因为Xcode14的新特性,Xcode面板中设置的 Display Name只会同步到 Build Setting – Info.plist Values – Bundle Display Name。
因为咱们运用了旧的Info.plist文件形式(即 BuildSetting – Generate Info.plist File 的值为NO),导致 BuildSetting – Info.plist Values – Bundle Display Name 的设置不会同步到终究的生成的包体的Info.plist文件中。从而间接导致了在Xcode面板中设置Display Name不收效的问题。
三、解决计划
下面讨论的是 运用了旧的Info.plist文件生成形式(GENERATE_INFOPLIST_FILE=NO) 的状况,运用新的Info.plist文件生成形式理论上不会有这个问题。
计划一(引荐):
修改 Info.plist 文件中 CFBundleDisplayName(没有该字段则添加)的值为$(INFOPLIST_KEY_CFBundleDisplayName)
$(INFOPLIST_KEY_CFBundleDisplayName)为 Build Setting – Info.plist Values – Bundle Display Name值对应的环境变量(如下图)。
Tips:怎么获取 Build Settings 中字段对应的环境变量名?
选中某个字段,command+C仿制,找个文本编辑器command+V张贴出来,就能够看到了
计划二:
直接在 Info.plist 文件中修改 CFBundleDisplayName(没有该字段则添加)的值为你App的姓名
该计划能够让App姓名收效,但缺点是Xcode面板和Info.plist中不同步。例如 Info.plist中修改CFBundleDisplayName为“娃哈哈”,App的姓名收效了变成了“娃哈哈”,但是Xcode面板中却是旧的值“ABCDE”。