Измените Info.plist, чтобы установить «Приложение - агент (UIElement)» во время выполнения - PullRequest
7 голосов
/ 09 августа 2011

Допустим, мне нужно дать пользователю возможность выбирать с помощью панели настроек, использовать ли приложение как «стандартное» (со значком и меню док-станции) или как приложение агента (только с меню в строке состояния).

Я думаю, что мне нужно программно изменить "Info.plist" приложения во время выполнения, изменив параметр "Приложение является агентом" на ДА / НЕТ.

Это правильный путь?

PS Вы можете найти это поведение в «Воробье».

1 Ответ

14 голосов
/ 10 августа 2011

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

Лучшим вариантом является использование функции служб приложений TransformProcessType() для перемещения приложения из фона в приложение переднего плана.

Сначала установите LSUIElement ключ в Info.plist вашего приложения на YES, а затем проверьте пользовательское значение по умолчанию при запуске, чтобы определить, должно ли ваше приложение работать как агент или нет:

#import <ApplicationServices/ApplicationServices.h>

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"LaunchAsAgentApp"]) 
    {
        ProcessSerialNumber psn = { 0, kCurrentProcess };
        TransformProcessType(&psn, kProcessTransformToForegroundApplication);
        SetFrontProcess(&psn);
    }
}

@end

Убедитесь, что вы не забыли добавить платформу служб приложений в свой проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...