2012-07-05 125 views
2

我使用位於here說明創建嵌入式輔助應用程序將打開主應用程序,並註冊助手應用程序的登錄項目。沙盒OS X幫助應用程序無法打開主應用程序

的助手應用程序正在啓動在登錄,但無法打開主應用程序。

該系統的控制檯一遍又一遍重複以下錯誤約5分鐘,然後開始:500px Uploader Helper: LSOpenFromURLSpec() returned -10827 for application 500px Uploader path (null).

Screenshot from Console.app

的助手應用程序正在使用它的應用程序委託給下面的代碼啓動主要應用:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     BOOL success = [[NSWorkspace sharedWorkspace] launchApplication:@"500px Uploader"]; 

     if (success) 
     { 
      NSLog(@"YEAHHHH"); 
      exit(EXIT_SUCCESS); 
     } 
     else 
     { 
      NSLog(@"NOOOOO"); 
      exit(EXIT_FAILURE); 
     } 
    }); 
} 

根據other questions on SO,這是開在沙盒環境中應用的推薦方式。

我試圖推遲發射,直到沒有成功的第一次運行循環之後。一位同事證實,這個問題與我的開發環境無關。我也嘗試使用絕對路徑作爲launchApplication:的參數。 launchApplication:也無法在/Applications中打開其他應用程序。

有誰知道的任何理由,這可能無法正常工作或者爲什麼它會開始幾分鐘後,開始工作?

+0

您的應用程序被命名爲「500px的提供者」,但您的控制檯日誌似乎認爲,這就是所謂的「500像素」 - 需要以某種方式逃脫空格字符的URL構建? – 2012-07-05 23:17:19

+0

錯誤-10827表示未找到應用程序。 http://www.cocoabuilder.com/archive/cocoa/98754-error-10827-from-launch-services.html – 2012-07-05 23:18:51

+0

如果我從助手應用程序刪除沙盒限制,它雖然工作。 – 2012-07-05 23:20:33

回答

2

不知道爲什麼你的代碼不能正常工作(這些沙箱問題仍然相當實驗性的),但它看起來像一個路徑問題,對我來說,那就是LSOpenFromURLSpec沒有找到你的主要的應用程序。我用下面的代碼來幫助應用程序啓動我的主應用程序(和它的作品):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Check if main app is already running; if yes, do nothing and terminate helper app 
    BOOL alreadyRunning = NO; 
    NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications]; 
    for (NSRunningApplication *app in running) { 
     if ([[app bundleIdentifier] isEqualToString:@"com.timschroeder.LaunchAtLoginApp"]) { 
      alreadyRunning = YES; 
     } 
    } 

    if (!alreadyRunning) { 
     NSString *path = [[NSBundle mainBundle] bundlePath]; 
     NSArray *p = [path pathComponents]; 
     NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:p]; 
     [pathComponents removeLastObject]; 
     [pathComponents removeLastObject]; 
     [pathComponents removeLastObject]; 
     [pathComponents addObject:@"MacOS"]; 
     [pathComponents addObject:@"LaunchAtLoginApp"]; 
     NSString *newPath = [NSString pathWithComponents:pathComponents]; 
     [[NSWorkspace sharedWorkspace] launchApplication:newPath]; 
    } 
    [NSApp terminate:nil]; 
} 

更新:我見過的sample project類似的問題通過的another question和那裏的作者上傳代碼工作正常,如果只有主應用程序被放置在/ Applications或〜/ Applications文件夾中。也許這也是你的問題。

+0

我試過類似的邏輯,它導致同樣的問題。 – 2012-07-05 23:21:03

+0

當我這樣做時出現以下錯誤:'12-07-05 7:23:33.226 PM 500px Uploader Helper:LSOpenFromURLSpec()爲application/Applications/500px Uploader.app path(null)返回-10827 .' – 2012-07-05 23:24:06

+0

然後,問題可能不在您的幫手應用程序的代碼中,而是在您的主應用程序的構建設置中。這是非常棘手的,但你可以看看我引用的教程,你引用的教程:http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/ – Tim 2012-07-05 23:27:15

0

我有這個問題。這是由我自己從捆綁軟件中啓動幫助程序引起的。很顯然,沙盒不適用?所以:

  1. 打開應用程序包和點擊在LoginItems的助手應用程序總是導致LSOpenFromURLSpec() returned -10827
  2. 註銷並重新登錄,我的助手應用程序啓動的主要應用精細,沒有任何問題。

這意味着測試助手應用程序的唯一方法是註銷並重新登錄。只是運行應用程序總是會失敗。