2

ここにある手順を使用して、メインアプリケーションを開き、ヘルパーアプリをログインアイテムとして登録する埋め込みヘルパーアプリケーションを作成しています。

ヘルパーアプリは現在ログイン時に起動していますが、メインアプリケーションを開くことができません。

システムのコンソールは、次のエラーを約5分間繰り返してから、起動します。500px Uploader Helper: LSOpenFromURLSpec() returned -10827 for application 500px Uploader path (null).

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);
        }
    });
}

SOに関する他の質問によると、これはサンドボックス環境でアプリケーションを開くための推奨される方法です。

最初の実行ループが終了するまで起動を遅らせようとしましたが、成功しませんでした。同僚が、問題が私の開発環境に関連していないことを確認しました。また、の引数として絶対パスを使用してみましたlaunchApplication:launchApplication:で他のアプリケーションを開くこともできません/Applications

これが機能しない理由や、数分後に機能し始める理由を誰かが知っていますか?

4

2 に答える 2

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];
}

更新:別の質問の作成者によってアップロードされたサンプル プロジェクトで同様の問題が発生しました。メイン アプリのみが /Applications または ~/Applications フォルダーに配置されている場合、コードは正常に機能しました。おそらく、これはここでもあなたの問題です。

于 2012-07-05T23:13:22.597 に答える
0

この問題がありました。バンドルから自分でヘルパー アプリケーションを起動したことが原因でした。明らかに、それはサンドボックスでは問題ありませんか? そう:

  1. App bundle を開いて LoginItems のヘルパー アプリをクリックすると、常に次のようになります。LSOpenFromURLSpec() returned -10827
  2. ログアウトして再度ログインすると、ヘルパー アプリはメイン アプリを問題なく起動します。

これは、ヘルパー アプリをテストする唯一の方法は、ログアウトして再度ログインすることであることを意味します。アプリを実行するだけでは、常に失敗します。

于 2012-07-06T20:56:01.320 に答える