Objective c OSX用于同一应用程序的两个停靠图标
我有两个相同应用程序的版本:位于/Applications(app1)中的版本1和位于/ApplicationSupport(app2)中的版本2。在本文中,我希望在启动app1时重定向到app2,这意味着退出app1并启动app2。(我已经使用命令行工具实现了这一点,它将等待app1完成,然后启动app2) 此应用程序的LSUIElement=1(主要是状态项),但该应用程序可能会出现在dock中:如果从状态项打开窗口,则我会:Objective c OSX用于同一应用程序的两个停靠图标,objective-c,xcode,macos,exec,dock,Objective C,Xcode,Macos,Exec,Dock,我有两个相同应用程序的版本:位于/Applications(app1)中的版本1和位于/ApplicationSupport(app2)中的版本2。在本文中,我希望在启动app1时重定向到app2,这意味着退出app1并启动app2。(我已经使用命令行工具实现了这一点,它将等待app1完成,然后启动app2) 此应用程序的LSUIElement=1(主要是状态项),但该应用程序可能会出现在dock中:如果从状态项打开窗口,则我会: TransformProcessType(&psn, k
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
当窗户关闭时,我会:
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
问题
t我面临的问题是,如果用户为app1选择Keep in dock,app1重定向到app2,则用户将在dock中显示两个应用程序图标
我正在寻找克服这种行为的方法
问题:
有人使用TransformProcessType和execl吗?我认为这是不可能实现的,因为Dock将图标从加载的应用程序中保留下来。我有一个不好的想法,这可能会奏效。您可以尝试使用app1中的
dlopen
或类似内容动态加载app2,然后从加载的映像调用main。这样操作系统就不知道你启动了另一个应用程序,Dock也不知道。我担心NSBundle
或其他类之后可能会出错。我创建了一个LSUIElement=0的测试应用程序,似乎execl工作正常。只显示一个停靠图标!但是,如果我将LSUIElement设置为1,并在app2上显示带有TransformProcessType(&psn,kProcessTransformToForegroundApplication)的dock图标,则dock中会显示一个额外的图标(app1中的一个图标和app2中的另一个图标)。不知道我能不能克服这个问题。