一、前言
早在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”。
作者:CocoaKier
链接:https://juejin.cn/post/7197361396219772983
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文地址:https://blog.csdn.net/txl910514/article/details/130380760
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_16287.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!