plist.Info,以便app根据命令行参数获取图标

时间:2015-01-22 19:40:21

标签: objective-c macos core-foundation app-bundle

我有.app。我想编辑plist.Info,这样如果-P "main"的命令行参数在路径中,它将使用我的资源文件夹中的另一个图标。如果用户右键点击并说“#34;留在码头"它将与命令行参数保持对接,因此在下次单击时它将使用相同的命令行参数启动。

这可能吗?

最糟糕的演员场景:任何Objective-c方式检查路径以查看是否有任何命令行参数?然后我将以程序方式运行setApplicationIconImage(最坏的情况意味着如果上述情况不可行)(然后生病也必须以[NSWindow miniwindowImage]编程获取微型窗口并在他们的msyelf上绘制迷你图标还会收听NSWindowWillMiniaturizeNotification的未来通知,并在通知触发时进行抽奖,因此这是最糟糕的情况)

1 个答案:

答案 0 :(得分: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
    }

为了得到更好的答案,你需要更清楚地解释一下。