问题 使用CFBundleName的位置


从这个老问题: 在cocoa应用程序的信息plist中,“bundle display name”和“bundle name”之间有什么区别

它指向官方文档,其中说:

CFBundleName

CFBundleName (String - iOS,OS X)标识的短名称   束。该名称长度应小于16个字符   适合在菜单栏和应用程序的信息窗口中显示。您   可以在适当的InfoPlist.strings文件中包含此密钥   .lproj子目录为其提供本地化值。如果你   本地化此密钥,您还应该包括密钥   “CFBundleDisplayName。”

任何人都可以告诉如何在iOS中显示此名称?

我从来没有能够在我的iPhone中显示这个值。


6312
2017-08-27 17:36


起源

“你如何在iOS中显示这个名字?”是什么意思?显示在哪里? - Carl Veazey


答案:


它看起来不像我 CFBundleName 节目 随地 iOS上的用户我相信我已经看过Mac OS X的文档(显然iOS继承了很多遗留基础设施),它说的是Bundle Name  用于其他东西...我认为它可能是上方菜单栏或下方Dock栏中的名称。当然,iOS中都不存在任何东西。

我也找到了 这个Stack Overflow回答,现在已经很老了(但有很多赞成票)。这个答案声称CFBundleName将是应用程序存储在其中的文件夹的名称。例如, CFBundleName = HelloWorld 应该产生

+- HelloWorld.app
    - HelloWorldApplication

如果 可执行名称 被设定为 HelloWorldApplication。但是,我刚刚构建了一个简单的程序并在iOS 5.0上运行它,并且.app文件夹是  命名等于 CFBundleName。所以,如果它 曾经 以这种方式工作,它似乎不再存在。

我见过很多参考文献 CFBundleName 应保持设置为 ${PRODUCT_NAME} 在Xcode中,这是我一直以来所做的。不是一个 技术 限制,但作为Apple审查标准,我也看到人们声称 CFBundleDisplayName 必须密切关注 有关 至 CFBundleName。例如,如果它是缩短版本,那就没关系 CFBundleName,但如果它完全不相关,他们可能会拒绝该应用程序。

我还检查了列表 Settings.app,在iTunes中,我没有看到 捆绑名称 其中任何一个地方。

所以,为了回答你的问题,我不相信用户可以看到这个变量(在iOS上)。


更新: 我有 但是,检查是否有任何辅助功能 说话 这个名字在哪里。

也, 这个答案 声称 CFBundleName 将是您的应用程序的iTunes App Store URL中使用的名称。但是,请参阅下面的@ tc。的评论/示例网址...


更新2:per @ honus的评论如下,一 异常 情景在哪里 CFBundleName  能够 如果您的应用有,则向用户显示 没有 进入 CFBundleDisplayName在Info.plist文件中。在这种情况下, CFBundleName 将显示在SpringBoard中的应用程序图标下。


16
2017-09-02 00:45



使用目标/ PRODUCT_NAME / CFBundleName为代号的应用时,我很确定它们永远不会显示在“用户可见”的任何位置。最明显的事件是崩溃日志或控制台日志(如果用户安装了Xcode / iPCU),虽然这可能只是可执行文件名,显然是app .ipa本身,如果用户解压缩它。 产生 App Store URL使用应用程序名称,因为它显示在App Store上(但是 被itunes.apple.com忽略了)。 - tc.
我很确定如果你没有设置CFBundleDisplayName,CFBundleName是将在Springboard上为应用程序显示的名称。 - honus
我喜欢Apple文档。他们非常好,以至于人们必须来这里解释他们的意思。如果没有像SO这样的论坛我们会被搞砸。 - SpaceDog
CFBundleName用于WatchKit应用程序。它显示在手机上的Apple Watch应用程序中。 - kolyuchiy
在iOS上,它在Google登录期间显示为“$ {CFBundleName}”名称,希望使用“google.com”登录“。这是系统对话框,视图层次结构调试器没有显示,但我不知道知道GoogleSignIn框架调用哪个iOS API。 - Sergii Rudchenko


您可以像这样访问这些密钥。

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]

哪里 infoDicitonary 是 A dictionary, constructed from the bundle's Info.plist file。在那里,您可以找到有关您的应用程序的此类信息。 一个NSBundle

注意:您可以通过打开来检查实际密钥 App-info.plist 文件并右键单击任意位置,然后选择该选项 Show Raw Keys/Values


0
2017-08-27 17:43



嗨,我的问题是:如果我在info.plist中设置这个值,它对普通用户意味着什么?他们在哪里可以找到这个价值? - Ryan
这只返回非本地化的值,您可以使用 [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] 如果你想获得本地化的价值。 developer.apple.com/library/mac/documentation/CoreFoundation/... - Mark Ingram


在本地化MacOS Cocoa应用程序时,使用CFBundleName作为应用程序名称在Mac OS MenuBar中(从文件菜单中)。 所以它绝对有意义。 不知道,如果它被使用并显示在其他地方。但最好不要在本地化您的应用时将其遗漏!


0
2018-01-09 14:08





如果您通过上下文在项目树中单击它并选择“打开为>源代码”打开info.plist文件,您将看到plist的XML表示。默认情况下,这两个键具有相同的值,因此您可以访问其中任何一个。

<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>

要实际获取值,您可以使用此SO帖子作为指导: 如何向用户显示我的应用程序的当前项目版本? 只需更换 CFBundleVersion 关键 CFBundleDisplayName

在本质上:

NSString *displayName = [[[NSBundle mainBundle] infoDictionary] 
                                          valueForKey:@"CFBundleDisplayName"];

-1
2017-08-27 18:06



嗨,我的问题是:如果我在info.plist中设置这个值,它对普通用户意味着什么?他们在哪里可以找到这个价值? - Ryan
除非您显示,否则普通用户将看不到它。您必须决定显示名称的位置。您可以向视图添加标签,也可以在导航控制器中显示它。关键在于 您 必须编码。除主屏幕图标外,它不会自动显示在任何地方。 - Matt Long
经过一些测试,在主屏幕图标下显示的是 CFBundleDisplayName不是 CFBundleName - Ryan


Bundle name是文件系统上实际应用程序包的名称。

捆绑显示名称是用户将在其iOS设备上或OSX上的图标标题上看到的应用程序图标的标题。


-4
2017-09-05 06:45



正如我在其他答案中提到的,我也听过人们说过,但我刚刚建立了一个iOS 5应用程序,改变了 捆绑名称,它绝对没有命名 .app 具有该Bundle Name的目录。 - Nate
这是你听到其他人说出来的原因。 - deleted_user
我刚刚构建了应用程序。它不会在iOS 5上使用.app文件夹的名称。如果有原因,那么原因是人们可能是不可靠的信息来源。 - Nate
尝试存档您的应用,然后导出它并检查结果 - deleted_user
我不知道你的意思 出口,但如果我 档案 来自Xcode,它在Organizer中显示的名称不是 CFBundleName (假设我当然改变了CFBundleName)。如果我点击存档并且 在Finder中显示,.xcarchive文件也是 不 按CFBundleName命名。如果我 分发,并将其保存为.ipa,然后解压缩.ipa,内部的.app文件夹未按CFBundleName命名。 - Nate