假设我需要让用户能够通过首选项面板选择是将该应用程序用作“标准”(使用停靠栏图标和菜单)还是作为代理应用程序(仅限状态栏菜单)。
我认为我需要在执行期间以编程方式修改应用程序的“Info.plist”,将参数“Application is agent”更改为YES / NO。
这是正确的方法吗?
P.S。您可以在“Sparrow”中找到此行为。
答案 0 :(得分:14)
您不应在运行时修改应用的Info.plist
文件(或应用包中的任何内容)。这是不好的做法,如果代码已签名,也会破坏您的应用。现在这一点更为重要,因为应用商店中的所有应用都必须经过代码签名。
更好的选择是使用应用程序服务功能TransformProcessType()
将您的应用程序从后台移动到前台应用程序。
首先,将应用LSUIElement
中的Info.plist
密钥设置为YES
,然后在启动时检查用户默认值,以确定您的应用是否应作为代理运行:< / p>
#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
确保您不要忘记将Application Services框架添加到项目中。