4

サンドボックス化されたアプリケーションがあります。ヘルパー アプリケーションを起動するたびに (メイン アプリケーションのバンドル内から) 起動する必要があります。ただし、これは失敗します。

NSError *error;
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:helperURL
                               options:NSWorkspaceLaunchDefault
                               configuration:nil
                               error:&error];

エラーは次のとおりです。

アプリケーション「ヘルパー」は、破損しているため起動できませんでした。

サンドボックスの資格を無効にするとアプリが正常に起動するため、エラーは誤解を招く可能性があります。ここで報告されているように、どうやらこれはバグです。

私の質問は次のとおりです。回避策はありますか?

ここでSMLoginItemSetEnabled説明されているように、私は使用できます:

ヘルパー アプリケーションをすぐに開始するために渡しtrue、ユーザーがログインするたびに開始する必要があることをfalse示します。

ただし、App Store レビュー ガイドライン 2.26 のため、最初にユーザーに確認しないとこの API を使用できません。

自動起動するように設定されているアプリ、またはユーザーの同意なしに起動時またはログイン時に他のコードが自動的に実行されるように設定されているアプリは拒否されます

したがって、この回避策を使用すると、ユーザーに「ログインするたびにヘルパーを起動してもよろしいですか? そうでない場合、このアプリを使用できません!」と尋ねることになります。明らかに、それは理想的ではありません...

4

2 に答える 2

2

実行可能な回避策はNSTask、スポーン/usr/bin/openしてヘルパーアプリのパスを与えるために使用することです。

NSTask *task = [NSTask new];
[task setLaunchPath: @"/usr/bin/open"];
[task setArguments: [NSArray arrayWithObjects: helperPath, nil]];
[task launch];

これはサンドボックスから正常に実行され、MacAppStoreのレビューガイドラインと互換性があるようです。

更新:さらに詳しく調べると、この手法はエラーで失敗することがよくあります

実行可能ファイルがないため、アプリケーションを開くことができません。

サンドボックスをオフにした場合、このエラーは発生しません。したがって、より良い解決策があるはずです...

于 2012-04-30T01:10:29.427 に答える
0

SMLoginItemSetEnabled を使用できます。一度ユーザーの同意を求める必要があります。結局、SMLoginItemSetEnabled で初めて起動されたヘルパー アプリケーションは、ユーザーがログインするたびに自動的に起動されます。

于 2014-05-12T14:41:03.067 に答える