比方说,我需要给用户一个首选项面板来选择是否使用该应用程序为"标准"(与停靠图标和菜单)或代理应用程序(只有状态栏菜单)的能力.
我想我需要在执行期间以编程方式修改应用程序的"Info.plist",将参数"Application is agent"更改为YES/NO.
这是正确的方法吗?
PS你可以在"麻雀"中找到这种行为.
Rob*_*ger 15
您不应该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
Run Code Online (Sandbox Code Playgroud)
确保您不要忘记将Application Services框架添加到项目中.
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |