0

Mac AppStore に提出するアプリを作成しました。SMJobBless API を使用してヘルパー ツールをインストールしていたため、何らかの理由で拒否されました。

このヘルパー ツールはアプリのほとんどの機能に必要ないため、削除しました。私のアプリケーションは承認されました。

そのため、現在、インターネットでダウンロードできるヘルパー ツールのスタンドアロン インストーラーをパッケージ化しています。

ただし、ファイルを所定の場所にインストールした後、ヘルパー ツールは実行を拒否します...ヘルパー ツールには、/Library/LaunchDaemons に入る plist と、/Library/PrivilegedHelperTools に入るバイナリがあります。

SMJobBless は、ファイルを所定の場所に移動するだけでなく、何をしているのでしょうか。自分のツールを launchctl に登録していますか? 手動でlaunchctlに追加するためにさまざまなことを試しましたが、成功しませんでした.ヘルパーツールは、チェックイン要求を要求した後に終了します。

ヘルパー ツールには次のものが含まれています。

@autoreleasepool {
    launch_data_t       req             = launch_data_new_string(LAUNCH_KEY_CHECKIN);
    launch_data_t       resp            = launch_msg(req); // AT THIS POINT, RESP IS NULL. Why?
    launch_data_t       machData        = launch_data_dict_lookup(resp, LAUNCH_JOBKEY_MACHSERVICES);
    launch_data_t       machPData       = launch_data_dict_lookup(machData, [kHelperBundleName UTF8String]);
    mach_port_t         mp              = launch_data_get_machport(machPData);
    launch_data_free                    (resp);
    launch_data_free                    (req);
    // Prepare connexion.
    NSMachPort          *rp             = [[NSMachPort alloc] initWithMachPort:mp];
    PrivilegedHelperProxy
                        *phProxy        = [[[PrivilegedHelperProxy alloc] init] autorelease];
    NSConnection        *con            = [NSConnection connectionWithReceivePort:rp sendPort:nil];
    [rp release];
    [con setRootObject:phProxy];
    [[NSRunLoop currentRunLoop] run];
}
return                                  EXIT_SUCCESS;

このサービスは、SMJobBless API 経由でインストールされたときに問題なく実行され、ルート プロキシは APP 内からアクセスできました...

では、SMJobBless API の呼び出しと同様に、このヘルパー ツールを適切に機能させるために、インストーラーに必要な手順は何でしょうか?

ありがとう、ピエール。

4

1 に答える 1

0

解決しました。ヘルパー ツールの PList エントリに ProgramArguments が含まれていませんでした (これは、SMJobBless API の問題ではないようです)。これらを PList に追加すると、ヘルパー ツールが正しく実行され、インストーラーによって正しく登録されます。

とにかく、ありがとう!ピエール。

于 2012-06-22T02:58:44.327 に答える