jep*_*peb 5 macos cocoa objective-c appstore-sandbox
我在Main.app/Library/LoginItems文件夹中有一个应用程序Main.app和一个应用程序Helper.app.Main.app可以由用户启动,然后用户可以将Helper.app设置为登录项.(使用SMLoginItemSetEnabled()),这非常有效.当用户将Helper.app设置为登录项时,它也会启动.
但是,也可以在不将其设置为登录项的情况下启动Helper.app.我试过这样做
[[NSWorkspace sharedWorkspace] launchApplication: newPath];
Run Code Online (Sandbox Code Playgroud)
这给了一个lsboxd:不允许进程启动...错误,并与
[NSTask launchedTaskWithLaunchPath:newPath arguments: [NSArray array]];
Run Code Online (Sandbox Code Playgroud)
这给了一个拒绝禁止沙盒重新启动错误.(大概是因为Helper.app 在 Main.app 里面?)
newPath的发现如下:
NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[[[NSBundle mainBundle] bundlePath] pathComponents]];
[pathComponents addObject:@"Contents"];
[pathComponents addObject:@"Library"];
[pathComponents addObject:@"LoginItems"];
[pathComponents addObject:@"Helper.app"];
[pathComponents addObject:@"Contents"];
[pathComponents addObject:@"MacOS"];
[pathComponents addObject:@"Helper"];
NSString *newPath = [NSString pathWithComponents:pathComponents];
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?:)
谢谢,
您还可以使用 NSTask 和 launchctl。示例 或者您可以使用 NSTask 和 bash 脚本。例子:
#Run Menu
if [ $(ps -u $USERNAME | grep -v grep | grep -m1 '/Library/Menu/Menu.app/Contents/MacOS/Menu' | awk '{print $5}') ]; then
echo "Menu already running";
else
echo "Menu not running"
if [ $(users $USERNAME ) == $USERNAME ]; then
echo "User logined"
echo "running menu for user $USERNAME"
sudo -u $USERNAME /Library/Menu/Menu.app/Contents/MacOS/Menu&
else
echo "User not logined"
fi
fi
Run Code Online (Sandbox Code Playgroud)