Xcode14 设置Display Name不生效问题

news/2024/5/20 15:12:14/文章来源:https://blog.csdn.net/txl910514/article/details/130380760

一、前言

早在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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_670524.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据虚拟地址,如何求出页号和偏移量?

方法掌握 虚拟地址划分成虚拟页号和虚拟页偏移量。 物理地址同样可划分为物理页号和物理页偏移量 如何划分,关键点在于页面的大小。 假设给你一个十进制表示的地址20000,一个页面的大小为4KB,那么如何找出地址20000的具体位置呢&#xff1f…

合并两个有序链表

文章目录 1.题目描述2.解题思路方法1:方法2: 1.题目描述 题目链接:力扣21,合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.解题思路 方法1:…

脚本函数基础

shell脚本编程系列 函数是一个脚本代码块,可以为其命名并在脚本中的任何位置重用它。每当需要在脚本中使用该代码块时,直接写函数名即可。称作调用函数。 创建函数 方式1: function name {commands }name定义了该函数的唯一名称&#xff0…

1分钟学会Midjourney十种绘图风格关键词

Midjourney最新V5版的卡通模型中最流行的就是皮克斯,今天介绍十种绘图风格。我们统一用如下描述词来绘制,每次只是风格不一样,对比看看。 首先我们先画一个皮克斯风格(Pixar),打开ai绘图软件,点击左上角的图像绘制&a…

camunda流程引擎send task节点用途

Camunda的Send Task用于向外部系统或服务发送消息。消息可以是同步或异步的,可以发送到队列、主题或其他类型的消息中间件。Send Task通常用于将消息发送到外部系统,而无需等待响应或结果。相反,它只是向外部系统发出信号,通知其执…

android不可不知调试技巧

目录 1、条件断点 2、评估表达式(Evaluate Expression) 3、日志断点 4、方法断点 5、异常断点 6、Field WatchPoint 1、条件断点 假设我们列表循环的某个元素时候才暂停,就用这种方式。具体方式在循环列表打断点,对着断点右…

焕新时刻,移动云品牌升级燃动十一城

4月25日,在2023移动云大会上,移动云品牌形象全方位焕新,启用新品牌LOGO和品牌标语,在政府领导、院士专家、行业大咖等3000多位参会嘉宾见证下,吹响品牌进阶新号角。 24日晚,移动云品牌焕新亮灯仪式率先在苏…

【计网】WebSocket协议

目录 一、背景 二、WebSocket握手过程 三、SpringBoot中使用WebSocket协议 1、服务器 2、客户端 一、背景 一般的web开发以请求响应为主即客户端发送一个请求,服务器返回一个响应,这就使得类似聊天等需求基于HTTP协议进行实现时比较消费资源&#xf…

CF - Playing in a Casino

题意:一个数的幸运值计算规则是用里面最大的数字-最小的数字所得值 给出一个范围,求这个范围里幸运值最大的是哪个数 解: 这道题相对来说就很简单了,注意数值限制范围在1道1e6,虽然这道题确实暴力就能做出来&#xf…

【数据分析之道-Pandas(二)】DataFrame

文章目录 专栏导读1、DataFrame简介2、DataFrame创建2.1字典创建DataFrame2.2列表创建DataFrame2.3ndarrays 创建DataFrame2.4CSV文件创建DataFrame 3、DataFrame基本操作3.1添加列3.2删除列 专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者&…

13 JS04——运算符

目标: 1、运算符 2、算数运算符 3、递增和递减运算符 4、比较运算符 5、逻辑运算符 6、赋值运算符 7、运算符优先级 一、运算符 1、概念 运算符(operator)也被称作操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 2…

C++线程的简单学习及了解

此篇文章只是线程的简单了解。 文章目录 前言一、线程的优缺点二、C线程库 1.thread类的简单介绍2.线程函数参数总结 前言 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控…

【Linux】进程地址空间的初步理解

目录 程序地址空间空间布局图引入物理地址与虚拟地址的概念虚拟地址空间虚拟地址与物理地址是如何对应的?※父子进程独立性的理解(重点)fork两个返回值的原理地址空间为什么要存在?补充理解 程序地址空间空间布局图 (这…

【JavaEE】SpringBoot的日志

目录 日志作用 SpringBoot日志框架 日志打印 日志级别 类型 作用 修改级别 日志永久化 配置日志文件目录 配置日志文件名 简化日志打印和永久化——lombok 日志作用 问题定位:可以帮助开发人员快速找到问题出现的位置系统监控:可以把系统的运…

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …

为何电商这么难做…...你是否忽略了这个问题?

物流时效是影响买家体验的重要环节,物流服务优劣也是买家网上购物时的重要参考依据。但电商企业对于快递公司的时效承诺、服务质量基本处于被动接受的状况,直到买家投诉才知道快递公司服务缺失,若买家不投诉也没法主动知道大量的订单是否按约…

word自带公式编辑

快捷键: 公式编辑:alt“” 上标:x^i 空格 下标:x_i 空格 实数R:\doubleR 空格 偏微分算子:“\partial” 极限:“\limit”(按空格后会显示一串很长的式子,再空格就变…

【论文写作】-我的第一篇论文形成记(投稿过程、课题来源、python与数学学习、实验设计、论文思路建立与写作、回复审稿人)

我的第一篇论文形成记 投稿过程背景记录课题来源-本科毕业设计python及数学学习实验设计调参阶段实验阶段 论文思路建立论文写作回复审稿人总结 投稿过程 2022年12月28日 投AIChE 2023年01月05日 AlChE编辑认为方向不太符合期刊定位,建议投其他期刊 2023年01月06日…

Vector - CAPL - 检查DUT发出与dbc定义一致

目录 ChkCreate_UndefinedMessageReceived 代码示例 有回调函数 无回调函数 Trace报文 报告显示 ChkCreate_UndefinedMessage

PowerDesigner 15 安装、汉化、逆向生成ER图、物理模型转逻辑模型、生成sql及简单使用

文章目录 前言PowerDesigner 15 安装、汉化、逆向生成ER图、物理模型转逻辑模型、生成sql及简单使用1. 安装2. 汉化3. 使用4. 逆向生成ER图4.1. 创建新模型4.2. 根据sql逆向生成er图 5. 物理模型新建表6. 物理模型转逻辑模型7. 生成sql语句 前言 如果您觉得有用的话&#xff0c…