/Contents/Resourcesにある実行可能ファイルを起動するMac OSXアプリケーションがあります。 アプリケーションはApp Storeでリリースされる予定ではないため、サンドボックスがオンになっていません。NSTaskで実行可能ファイルを起動する - サンドボックスの問題?
起動コード:
toolPath = [[[NSBundle mainBundle] pathForResource:@"myexecutable" ofType:@""] copy];
task = [[NSTask alloc] init];
[task setLaunchPath: toolPath];
pipe = [[NSPipe alloc] init];
[task setArguments:[NSArray arrayWithObjects:@"-someArg", someVariable, nil]];
file = [[NSFileHandle alloc] initWithFileDescriptor:[pipe fileHandleForReading].fileDescriptor];
[task setStandardOutput: stderrPipe];
[task launch];
事がある - Xcodeで実行しているときに、このすべてが正常に動作します。 アプリケーションをデスクトップにエクスポートして実行すると、正常に動作します。
しかし、アプリケーションを圧縮してウェブサーバーにアップロードしてから、同じコンピュータ(または別のMacにドロップボックス)にダウンロードすると、タスクは起動しなくなります。私はシステムコンソールなどで何のエラーも受けない。
私はこの問題についていくつか調査し、OSXが新しいアプリケーションを「隔離された」特別なアクセス権としてマークすることを発見しました。 Xcodeのから自分のアプリケーションをエクスポートした後、実行可能に
権限:だから私は、ダウンロードしたアプリとエクスポートのアプリとの違いを調べた。この時点で
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
アプリが正常に動作し、実行ファイルが起動されるからボタンをクリックします。
、サーバにアップロードされたアプリケーション、ダウンロードをビュンした後、解凍し、そしてアプリケーションを開くと「このアプリケーションは、インターネットからダウンロードした」対話受諾:私はプッシュしたときに何も起こりません。この時点で
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
com.apple.quarantine 26
を私のアプリのボタン。
私は、全体のアプリでxattr -rd com.apple.quarantine
を実行する場合、検疫通知が削除されます。
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
をしかし、実行はまだ起動されないです!
/内容量/ MacOSの:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/コンテンツ/リソース:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
そして、ダウンロードした上で、私は今、私のデスクトップアプリケーションに次の権限を持っているこの時点で
私がxattr -rdを使ったアプリ:
/コンテンツ/ MacOS:
-rwxr-xr-x 1 Username staff 407728 21 Jul 16:31 appName
/コンテンツ/リソース:
-rwxr-xr-x 1 Username staff 65724 21 Jul 16:31 executableName
最初のアプリが正常に動作し、もう一つは、実行可能ファイルを起動することはありません。一体何が起こっているの?それは、同じコンピュータ上で、同じアクセス許可を持つ同じアプリですが、ダウンロードされたものだけでは機能しません。
この問題は、異なるコンピュータ上のすべてのOSXバージョンで発生します。
thx !!!!それは –
の子プロセスを手伝ってくれましたが、このアプリの主なアプリはクラッシュしました。 – Swati
ありがとうございました!私はNSTaskを使用していて、App Sandbox = NO資格を追加すると私を救った。 – iOSDec