OS X: установка во время выполнения имени приложения, которое отображается в Dock и строке меню.

У меня есть приложение, которое может быть запущено с правами текущего пользователя или с правами root.

На самом деле существует вероятность того, что приложение запустится дважды одновременно — один раз под текущим пользователем и один раз под root.

Мне нравится информировать пользователя, когда приложение работает под root. В настоящее время я показываю это в заголовке окна, но я бы предпочел изменить имя приложения, чтобы оно читалось как «Имя приложения (корень)», где это уместно. Таким образом, имя будет отображаться как в строке меню, так и в доке с этой «корневой» информацией, и это позволит пользователю определить, какой из двух экземпляров приложения в доке является корневой версией.

Кто-нибудь знает, можно ли изменить имя приложения с помощью кода, то есть самого приложения или его средства запуска?

Если нет, мой единственный вариант — добавить значок к значку Dock с надписью «root», но это мое последнее средство, так как оно не будет работать ни для строки меню, ни для других инструментов, которые отображают имена приложений (т.е. другие средства запуска приложений, такие как DragThing).


person Thomas Tempelmann    schedule 16.12.2009    source источник


Ответы (3)


…there are at least five application names floating around, at least in concept: (1) the file name the Finder sees, which in the case of an application package is the package (bundle) name; (2) the name of the executable inside the package, (3) the long name used in many places for display purposes only; (4) the short name used as the application menu title and in a few other places where a long name won’t fit for display purposes; and (5) the process name of a running application. They aren’t always the same, especially in Microsoft and Adobe products.

Билл Чизман

Насколько я могу судить, имя в доке — это имя пакета приложения (без .app) в файловой системе.

Значение под ключом CFBundleName в файле info.plist отображается в строке меню.

Насколько я знаю, изменение любого из них во время выполнения не сработает… но вы можете иметь две версии вашего приложения, корневую и некорневую, внутри вашего пользовательского пакета .app. Когда пользовательское приложение запускается, оно проверяет, работает ли оно от имени пользователя root или нет, и запускает соответствующую копию реального приложения, которое имеет CFBundleName и имя файла, которое вы хотите.

Хотел бы я знать более элегантное решение.

person Vincent Gable    schedule 17.12.2009
comment
Хорошо образованный ответ, спасибо :) Ваше предложение с двумя копиями дает мне идею: я мог бы создать некоторые символические ссылки на альтернативную копию внутри моего приложения. Я попробую это. - person Thomas Tempelmann; 17.12.2009
comment
Эй, это сработало! Я создал папку с именем Appname (Root).app внутри основной папки моего приложения, создал в ней папку Contents, создал символические ссылки на все элементы Contents приложения и, наконец, поместил туда измененный Info.plist с соответствующим именем пакета. - person Thomas Tempelmann; 18.12.2009

Этот ярлык исходит из вашего Info.plist, и я не верю, что к нему когда-либо обращались после того, как он был запущен. Если вы хотите иметь родительское приложение, которое ничего не делает, кроме запуска реального приложения (возможно, из своего собственного пакета) после изменения его Info.plist, то это может дать вам эффект, на который вы надеетесь. Тем не менее, вы получите две иконки, подпрыгивающие во время запуска.

person Azeem.Butt    schedule 17.12.2009
comment
Верно, я так и думал. Однако изменение Info.plist не вариант. - person Thomas Tempelmann; 17.12.2009

Приложения OS X обычно не работают с несколькими экземплярами. Посмотрите, например, на любое приложение, разработанное Apple. Было бы более распространенным разрешить несколько документов/окон, в этом случае каждое окно может быть либо корневым, либо некорневым окном.

Однако наиболее распространенным способом разрешить корневую аутентификацию является наличие значка замка, по которому можно щелкнуть, чтобы переключиться в корневой режим с запросом пароля, это можно увидеть на многих панелях Системных настроек.

person Tobias Cohen    schedule 17.12.2009
comment
Тобиас, я не понимаю, к чему ты клонишь. Я знаю, как запустить приложение в корневом режиме и аутентифицировать его (я, используя AuthorizationExecuteWithPrivileges), это был не мой вопрос. Проблема в том, что приложение обычно запускается в режиме без полномочий root, и пользователь может запросить его запуск в режиме root (через AuthorizationExecuteWithPrivileges). По причинам дизайна я не могу легко измениться, пользователь может получить два запущенных экземпляра приложения, и мне нравится указывать ему, какой из них есть какой. - person Thomas Tempelmann; 17.12.2009