Xcode14 设置Display Name不生效问题

news2024/9/21 4:37:13

一、前言

早在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.coloradmin.cn/o/462733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

作为数据库迁移和现代化的一部分,您可以继续使用存储的程序和调度作业,将远程实例中的数据整合到集中式数据存储中。 Amazon Schema Conversion Tool(Amazon SCT)可帮助您将传统的 Oracle 和 SQL Server 函数转换为其等效的开源函…

PDF 预览和下载你是怎么实现的?

前言 在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能,**PDF** 类型文件的来源又包括 H5 移动端 和 **PC 端**,而针对这两个不同端的处理会有些许不同,下文会有所提及。 针对 PDF 预览 的文章不在少数,但似乎都没有提…

排查和解决CentOS系统上Nacos服务启动报错“java.net.UnknownHostException: jmenv.tbsite.net“问题

背景 环境是CentOS7操作系统,nacos服务宕掉了,启动服务的时候报错。 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.FilterRegistrationBean]: Factory method ‘di…

太酷啦,Transformer 的有效上下文长度可扩展至百万级

夕小瑶科技说 原创作者 | 智商掉了一地、iven 用 Recurrent Memory Transformer 架构:可输入长度取决于内存大小 Transformer 因其在自然语言处理领域的成功应用而备受瞩目,同时在计算机视觉领域的研究中,诸多的多模态大模型如 ViT、CLIP、BL…

iperf3使用教程

文章目录 简介1.下载2. 使用测试实例:案例一 TCP通信测试案例二:UDP测试案例三 传输东西进行测试 iperfs3简单使用样例 简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCT…

软件测试方法——等价类划分法详解

1、等价类划分法的介绍和概念 划分 指互不相交的一组子集,这些子集的并是整个集合。 对测试的意义:完备性和无冗余性。 等价类 等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,具有等…

23.4.25总结

复习了MYSQL数据库的主键和外键的知识: 在设计表时,可以通过外键这个按钮,更改Update rule(更新规则)和Delete rule(删除规则)。 外键行为 默认情况下是:NO ACTION、RESTRICT 两…

传统机器学习(七)支持向量机(1)超平面、SVM硬间隔、软间隔模型和损失函数

传统机器学习(七)支持向量机(1) 1 算法概述 1.1 超平面的理解 1.1.1 超平面公式 我们对“平面”概念的理解,一般是定义在三维空间中的,如下: 假设M和M0为平面上的两点,n为该平面的法向量,那么,通过下图…

4.25~~~~~

接着之前PE文件结构的预习 DOS 定位到NT 怎么操作的? 用的是e_lfanew,然后是相对于文件头的偏移量(也就是raw表示方法) 现在有个问题,为什么e_lfanew 这个变量不直接存储PE头 的绝对地址呢? 比如说&…

python 基础语法学习之变量与运算符

一、注释 注释: 就是对代码的解释,方便阅读,被注释的代码不执行 分类 单行注释 # 1.单行注释 以#号开头 ,右边的所有东西都被当做说明文字 ,程序不进行编译运行。 print(hello world)多行注释 # 2.多行注释 三个单引号 或…

学习日记(刷题,学java)

先看看题目 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&…

Chapter 4 :Constraining I/O Delay(ug903)

4.1 About Constraining I/O Delay 要在设计中准确地建模外部时序上下文,必须为输入和输出端口提供时序信息。由于XilinxVivado集成设计环境(IDE)只能识别FPGA边界内的时序,因此必须使用以下命令来指定超出这些边界的延迟…

Linux 系统文件权限管理(参考菜鸟教程)

一、查看文件用户,用户组,其他用户的文件权限,属主,属主用户组等信息 ls -l如图所示:  1、第一个字符代表这个文件是目录、文件或链接文件等等。 当为 d 则是目录当为 - 则是文件;若是 l 则表示为链接…

SpringBoot+Shiro+Jwt+Vue+elementUI实现前后端分离单体系统Demo

记录一下使用SpringBoot集成Shiro框架和Jwt框架实现前后端分离Web项目的过程,后端使用SpringBoot整合ShiroJwt(auth0),前端使用vueelementUI框架,前后端的交互使用的是jwt的token,shiro的会话关闭,后端只需要使用Shiro…

Sqlmap Tamper 编写/改写 学习

sqlmap的 --tamper 参数可以引入用户自定义的脚本修改注入时的payload ,达到sql注入时对一些敏感字符的一些绕过 下载 sqlmap 自带的 tamper 脚本就在 /sqlmap/tamper 目录下,是用 python 编写的,所以我们可以用 python 语言自己编写一些脚本…

bismark和bsmap比对原理

1,bismark比对方法比较简单粗暴,它制作两种类型的基因组:1),将所有的C转化为T的基因组;2),将所有的G转化为A的基因组。它将bisulfate(重chong硫酸盐)处理后的…

【Kafka】面试题总结

Kafka 1、什么是消息队列2、消息队列有什么用3、Kafka 的多分区以及多副本机制有什么好处呢4、Zookeeper 在 Kafka 中的作用知道吗5、Kafka 如何保证消息的消费顺序6、Kafka 如何保证消息不丢失7、Kafka 如何保证消息不重复消费7、Kafka为什么快/吞吐量大 1、什么是消息队列 我…

【JavaScript】对象继承精华提炼

继承机制 每个函数都有一个prototype属性,指向一个对象,该对象是原型对象;构造函数生成实例时,该属性会自动成为实例对象的原型;原型对象上的所有属性和方法,都能被实例对象共享继承;原型对象的…

使用HALCON标定板快速标定,纠正成像畸变

使用HALCON标定板快速标定,纠正成像畸变 1生成标定板描述文件 gen_caltab (7, 7, 0.00375, 0.5, caltab.descr, caltab.ps)gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文…

Linux环境下安装RocketMQ(单机、集群)

目录 前置要求: 一、下载RocketMQ 二、上传解压 三、配置rocketmq的环境变量 四、查看rocketmq的目录结构 五、启动 5.1 启动nameserver 5.2 启动broker 六、测试发送消息 七、关闭 八、RocketMQ集群搭建 8.1 RocketMQ集群模式介绍 8.2 搭建 8.2.1 准…