2012-04-29 8 views
4

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

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

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

The application “Helper” could not be launched because it is corrupt., NSUnderlyingError=0x10214c700 "The operation couldn’t be completed. (OSStatus error -10827.)"}

を今、私はサンドボックスの権利を無効にするとアプリが起動細かいので、誤差は、誤解を招くおそれがあります。どうやらこれはバグで、報告されているようにhereです。

私の質問はですか?回避策はありますか?

hereが説明するように、私は、SMLoginItemSetEnabledを使用することができます。

Pass true to start the helper application immediately and indicate that it should be started every time the user logs in. Pass false to terminate the helper application and indicate that it should no longer be launched when the user logs in.

をしかし、私は理由のApp Storeレビューガイドライン2.26で、最初のユーザに尋ねることなく、このAPIを使用することはできません。

Apps that are set to auto-launch or to have other code automatically run at startup or login without user consent will be rejected

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

+0

アプリが試していてもlaunchApplicationAtURLが失敗して以来、これはrdar:// 10934199起動は既にユーザーによって手動で開始されている – valexa

+0

あなたのアプリが実行されているかどうかをチェックしてヘルパーアプリを起動するユーザー起動エージェントをインストールする権限を取得できますか? – Colin

答えて

2

実行可能な回避策は/usr/bin/openを起動し、それをヘルパーアプリのパスを与えることNSTaskを使用することです:

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

これは、サンドボックスから正常に動作し、と互換性があるように見えますMac App Storeのレビューガイドライン。

アップデート:さらに検査で、この技術は頻繁に私はサンドボックスをオフにしてきたときに、このエラーは発生しません、エラー

The application cannot be opened because its executable is missing.

で失敗します。したがって、より良いソリューションが必要です。

+0

/usr/bin/opendiffを使用すると、コンソール "xcrun:error:App Sandbox内で使用できません"というエラーメッセージが表示されます。 Appleのガイドラインでは「システムが自動的にサンドボックスアプリケーションに自動的に読み込み可能なファイルを許可する」と述べていますが、次のディレクトリを含む特定のディレクトリでは "/ usr/bin" ...これはもう真実ではないでしょうか? –

0

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

+0

私のために働いていません。私はちょうどメニューバーに座って、窓やドックの存在を持っていないアプリを持っています。 'SMLoginItemSetEnabled'はヘルパーを登録しますが、ヘルパーはメインアプリを起動できません。アプリは、アプリストア用にサンドボックス化されています。 – SpaceDog

関連する問題