plist.Info, чтобы приложение получало значок на основе аргументов командной строки

У меня есть .app, Я хочу редактировать plist.Info такой, что если аргумент командной строки -P "main" находится в пути, он будет использовать другой значок в моей папке ресурсов. И если пользователь щелкнул правой кнопкой мыши и сказал "держать в доке", он останется в доке с аргументами командной строки, поэтому при следующем щелчке он запустится с такими же аргументами командной строки.

Это возможно?

Худший сценарий приведения: есть ли какой-нибудь объективный способ проверить путь, чтобы увидеть, есть ли там аргументы командной строки? Тогда я бегу setApplicationIconImage программно (наихудший случай означает, что вышеупомянутое невозможно) (а затем придется также программно получить миниатюрные окна с помощью [NSWindow miniwindowImage] и нарисовать мини-значок на их msyelf, а также прослушать будущие уведомления о NSWindowWillMiniaturizeNotification и сделать розыгрыш, когда это уведомление срабатывает, так что это худший вариант)

1 ответ

Решение

Я не уверен, что полностью следую за тобой.

Но я не думаю, что вам нужно редактировать plist.Info, и я думаю, что это не очень хорошо.

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

Вызов сделан из вашей проверки аргумента:

 [self changIcon:(CFBooleanRef)false];

-(void) changIcon:(CFBooleanRef)prefValue
{


    CFStringRef appID = CFSTR("com.yourApp.BundleID");
    CFStringRef Key = CFSTR("swapIcon");
    CFBooleanRef Value = prefValue ;// kCFBooleanTrue;//or kCFBooleanFalse

    // Set up the preference.
    CFPreferencesSetValue(Key,
                          Value,
                          appID,
                          kCFPreferencesCurrentUser,
                          kCFPreferencesAnyHost);

    // Write out the preference data.
    CFPreferencesSynchronize(appID,
                             kCFPreferencesCurrentUser,
                             kCFPreferencesAnyHost);

}

Изменить значок

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

   BOOL  swapIcon = [defaults boolForKey:@"swapIcon"];

    if (swapIcon ) {
         NSImage * b1Image = [NSImage imageNamed:@"bl1"];
         [NSApp  setApplicationIconImage:b1Image];
    }else {
        [NSApp  setApplicationIconImage:nil];//--Nil will make the app use thenormal icon
    }

Для лучшего ответа вам нужно объяснить немного более четко.

Другие вопросы по тегам