4

に行くと、/usr/bin何百もの実行可能ファイルまたは実行可能ファイルへのリンクが表示されます。

私のアプリケーション(XcodeのObj-Cで記述されたMacアプリ)は、これらの実行可能ファイルのいくつかに依存しています。残念ながら、実行可能ファイルは手動でインストールする必要があります。実行可能ファイルを確認してから、ユーザーにインストールを促す必要があります。

私のコードは次のとおりです。

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/executable"];

NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
NSFileHandle *file = [pipe fileHandleForReading];

[task setArguments:[NSArray arrayWithObjects:sender, target, nil]];
[task launch];

アプリ内の実行可能ファイルをどこかにコピーして、そこから呼び出すことができるかどうか疑問に思いました。そうすれば、ユーザーは自分でそれを取得する必要がなくなります。

そして、それはMac App Storeで許可されますか?

4

5 に答える 5

1

ご参考までに、Swift 3 では次のことができます。

let bundle = Bundle.main
let task = Process()
let path = bundle.path(forResource: "executableName", ofType: "")
task.launchPath = path
于 2016-11-02T12:51:26.970 に答える
1

更新して明確にするために、以下が Xcode 11 と Swift 5 で機能することがわかりました。

まず、目的の実行可能ファイル (私の場合は pandoc) を Xcode プロジェクトにドラッグ アンド ドロップしました。これを「bin」という名前のグループ/フォルダーに配置しました。

実行可能ファイルを含めたいターゲットを必ず選択してください!

次に、次のコードを使用しました。

let task = Process()
let bundle = Bundle.main
let execURL = bundle.url(forResource: "pandoc", withExtension: nil)
guard execURL != nil else {
    print("Pandoc executable could not be found!")
    return 
}
task.executableURL = execURL!
task.arguments = ["--version"]
do {
    try task.run()
    print("Pandoc executed successfully!")
} catch {
    print("Error running Pandoc: \(error)")
}
于 2020-01-25T22:30:45.563 に答える
0

さて、私は遊んで自分で答えを見つけようとしました。そして、私はそれを理解したと言ってうれしいです!

executableしたがって、必要な場所に Xcode プロジェクトにコピーするだけです。次に、変更

[task setLaunchPath:@"/usr/bin/executable"];

[task setLaunchPath:[[NSBundle mainBundle] pathForResource:@"executable" ofType:@""]];

そしてタダ!

于 2012-08-18T05:08:36.680 に答える
0

Swift では、次のことができます。

let bundle = NSbundle.mainBundle()
let task = NSTask()

task.launchPath = bundle.pathForResource("executableName", ofType: "")

バンドルされた実行可能ファイルが、/lib などのサブディレクトリではなく、ディレクトリ ツリーの最上位にあることを確認してください。そうしないと、動作しない可能性があります。

于 2016-06-05T12:37:07.250 に答える