OS X: установка во время выполнения имени приложения, как оно отображается в Dock и строке меню - PullRequest
6 голосов
/ 17 декабря 2009

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 17 декабря 2009
… Существует как минимум пять имен приложений, по крайней мере в концепции: (1) имя файла, которое видит Искатель, которое в случае пакета приложения является именем пакета (bundle); (2) имя исполняемого файла внутри пакета, (3) длинное имя, используемое во многих местах только для целей отображения; (4) короткое имя, используемое в качестве заголовка меню приложения, и в некоторых других местах, где длинное имя не подходит для отображения; и (5) имя процесса работающего приложения. Они не всегда одинаковы, особенно в продуктах Microsoft и Adobe.

- Билл Чизмен

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

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

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

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

0 голосов
/ 17 декабря 2009

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

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

0 голосов
/ 17 декабря 2009

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

...