本文介绍: 早在Xcode13苹果就对Info.plist做了一次大改革,新建的OC项目默认Info.plist文件是“空的”,Swift项目甚至干脆连Info.plist文件没有了,苹果这样做是为了建立一个新的Info.plist管理方式,把Info.plist物理文件中的配置挪到Xcode buildSetting中。然而大部分开发者比如我)并不买账,仍然使用旧的Info.plist文件模式如何恢复到旧的Info.plist文件模式,新模式有什么弊端,更多内容见我之前的文章

一、前言

早在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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注