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

plist.Info so that app takes icon based on command line arguments

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

这可能吗?

最糟糕的情况:任何 objective-c 检查路径以查看那里是否有任何命令行参数的方法?然后我将 运行 setApplicationIconImage 以编程方式(最坏的情况意味着如果上述不可能)(然后我还必须以编程方式使用 [NSWindow miniwindowImage] 获取小型化 windows 并绘制他们的 msyelf 上的迷你图标,还听取 NSWindowWillMiniaturizeNotification 的未来通知并在该通知触发时进行抽奖,所以这是最坏的情况)

我不确定我是否完全理解你。

但我认为您不需要编辑 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
    }

为了获得更好的答案,您需要解释得更清楚一些。