Где используется CFBundleName

Из этого старого вопроса: В чем разница между "отображаемым именем пакета" ? и "имя пакета" в cocoa информационной области приложения

Он указывает на официальные документы, в которых говорится:

CFBundleName

CFBundleName (String - iOS, OS X) идентифицирует короткое имя расслоение. Это имя должно быть менее 16 символов и должно быть подходит для отображения в строке меню и в окне сведений о приложениях. Вы может включать этот ключ в файле InfoPlist.strings соответствующего .lproj для предоставления локализованных значений для него. если ты локализовать этот ключ, вы должны также включить ключ "CFBundleDisplayName."

Может ли кто-нибудь сказать, как показать это имя в iOS?

Я никогда не мог показать это значение на своем iPhone.

Ответ 1

Мне не кажется, что CFBundleName показывает в любом месте для пользователя, на iOS. Я полагаю, что видел документацию для Mac OS X (которая, очевидно, iOS наследует много устаревшей инфраструктуры), которая говорит, что имя Bundle используется для чего-то еще... Я думаю, что это может быть было имя в верхней строке меню или нижней панели док-станции. Разумеется, в iOS ничего не существует.

Я также нашел этот ответ, который теперь довольно старый (но с довольно небольшим количеством оборотов). В этом ответе утверждается, что имя CFBundleName будет именем папки, в которой хранится приложение. Так, например, CFBundleName = HelloWorld должен производить

+- HelloWorld.app
    - HelloWorldApplication

Если для Исполняемое имя установлено значение HelloWorldApplication. Тем не менее, я просто создал простую программу и запустил ее на iOS 5.0, а папка .app была не с именем равным CFBundleName. Итак, если он когда-либо работал таким образом, он больше не выглядит.

Я видел довольно много ссылок, в которых говорится, что CFBundleName следует оставить в ${PRODUCT_NAME} в Xcode, что я всегда делаю. Не как техническое ограничение, но как критерий проверки Apple, я также видел, как люди утверждают, что CFBundleDisplayName должен быть тесно связан с CFBundleName. Например, это нормально, если это сокращенная версия CFBundleName, но что они могут отклонить приложение, если оно не связано вообще.

Я также проверил список в Settings.app и в iTunes, и я не видел Bundle Name любого из этих мест.

Итак, чтобы ответить на ваш вопрос, я не верю, что эта переменная видна пользователю (на iOS).


Обновление: У меня не, но проверено, могут ли какие-либо функции доступности говорить это имя где угодно.

Кроме того, этот ответ SO утверждает, что CFBundleName будет именем, используемым в URL-адресе iTunes App Store для вашего приложения. Но, см. @tc. комментарий/пример URL ниже...


Обновить 2: на комментарий @honus ниже, один необычный сценарий, где CFBundleName может быть показан пользователю, - это если в вашем приложении нет для CFBundleDisplayName в файле Info.plist. В этом случае CFBundleName будет отображаться под значком приложения в SpringBoard.

Ответ 2

Вы можете получить доступ к этим клавишам.

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

Где infoDicitonary - A dictionary, constructed from the bundle Info.plist file. Там вы можете найти такую ​​информацию о своем приложении. NSBundle

Примечание. Вы можете проверить фактический ключ, открыв файл App-info.plist и щелкнув правой кнопкой мыши в любом месте, затем выбрав опцию Show Raw Keys/Values.

Ответ 3

CFBundleName используется при локализации приложения MacOS Cocoa в Mac OS MenuBar в качестве имени приложения (прямо из меню файла). Так что это ОПРЕДЕЛЕННО имеет смысл. Не знаю, если он используется и показан где-то в другом месте. Но лучше не оставлять это, когда локализуете свое приложение!

Ответ 4

В macOS это используется как средство для определения того, должно ли имя приложения быть локализовано в Finder. Если фактическое имя пакета (разумеется, расширенное с помощью ".app") совпадает с CFBundleName, Finder покажет его локализованное отображаемое имя. Однако пользователь может переименовать приложение в то, что он посчитает более подходящим, и в этом случае macOS нужен способ узнать, было ли имя изменено.

Ответ 5

Если вы откроете свой файл info.plist, нажав его в дереве проекта и выбрав "Открыть как > Исходный код", вы увидите XML-представление plist. По умолчанию эти два ключа имеют одинаковое значение, поэтому вы можете получить доступ к одному из них.

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

Чтобы на самом деле захватить значения, вы можете использовать этот пост SO в качестве ориентира: Как отобразить текущую версию моего приложения для пользователя? Просто замените CFBundleVersion с CFBundleDisplayName.

По существу:

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

Ответ 6

Имя пакета - это имя фактического пакета приложений в файловой системе.

Отображаемое имя пула - это заголовок значка приложения, который пользователь увидит на своем устройстве iOS или в заголовке значка на OSX.