gpt4 book ai didi

cocoa - 修改Info.plist以在运行时设置 "Application is agent(UIElement)"

转载 作者:行者123 更新时间:2023-12-03 16:07:03 27 4
gpt4 key购买 nike

假设我需要让用户能够通过首选项面板选择是否将该应用程序用作“标准”(带有停靠栏图标和菜单)或作为代理应用程序(仅带有状态栏菜单)。

我认为我需要在执行期间以编程方式修改应用程序的“Info.plist”,将参数“应用程序是代理”更改为是/否。

这是正确的方法吗?

附注您可以在“麻雀”中找到这种行为。

最佳答案

您不应在运行时修改应用的 Info.plist 文件(或应用 bundle 中的任何内容)。这是不好的做法,如果您的应用程序经过代码签名,也会破坏您的应用程序。如今这一点更为重要,因为应用商店中的所有应用都必须经过代码签名。

更好的选择是使用应用程序服务函数 TransformProcessType() 将应用程序从后台移动到前台应用程序。

首先,将应用的 Info.plist 中的 LSUIElement 键设置为 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

确保不要忘记将应用程序服务框架添加到您的项目中。

关于cocoa - 修改Info.plist以在运行时设置 "Application is agent(UIElement)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com