Mac AppStoreのosxアプリケーションにコマンドラインユーティリティをバンドルするにはどうすればよいですか(サンドボックスエンタイトルメントを使用)

user2879327

すでに実行可能ファイルにコンパイルしてXcodeプロジェクトに追加したc ++コマンドラインアプリケーションがあります。また、プロジェクトプロパティの[ビルドフェーズ]タブに[ファイルのコピー]セクションを追加し、[実行可能ファイル]の宛先を指定して実行可能ファイルを追加しました。アプリケーションをビルドすると、ビルドされたtest.appでパッケージのコンテンツを表示すると、test.app / Contents / MacOSフォルダーに表示されます。

また、プロジェクトの[機能]タブで[アプリサンドボックス]を有効にしました(これにより、Mac AppStoreからアプリケーションを配布できます。

アプリケーションにバンドルされているこのコマンドライン実行可能ファイルをユーザーに公開して、ユーザーがコマンドライン(ターミナル)から実行できるようにするにはどうすればよいですか?このファイル(またはこのファイルへのシンボリックリンク)をユーザーのPATHに取り込む方法について、検索エンジンまたはStackOverflowで何も見つかりませんでした。NSTaskを使用してシンボリックリンクを作成しようとしましたが、これはApp Sandboxを無効にした場合にのみ機能します(これは理にかなっています)。誰かが以前にこれをしたことがありますか?どのようにしてそれを機能させましたか?または、これらの実行可能ファイルは、アプリケーション内のコードによってのみ実行できますか?

ゴードン・ダヴィソン

これを行う良い方法がわかりません。まず、明確化:PATHは実行可能ファイルを含むディレクトリのリストであり、実行可能ファイルのリストではありません。単一の実行可能ファイルをPATHに追加する方法はありません。代わりに、実行可能ファイルをユーザーのPATH内のディレクトリの1つに配置するか、実行可能ファイルが存在するディレクトリをPATHに追加する必要があります。

OS Xでは、デフォルトのPATHは/ usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / binです。最初の4つのディレクトリはシステムのデフォルトから変更すべきではないため、/ usr / local / binのみが可能です。ただし、それを作成すると(デフォルトでは存在しません)、管理者(実際にはroot)権限が必要になります。これは、AppStoreポリシーでは許可されていません。これで終わりです。

そのため、ユーザーのPATHを変更する必要があります。これをシステム全体で行う「正しい」方法は、ファイルを/etc/paths.dに配置することです。これには、管理者(/ root)権限が必要です。/ etc / pathファイルを技術的に変更することは機能しますが、同じ権限の問題があり、カスタマイズを行う方法が間違っています。

次の可能性は、ユーザーのシェル初期化スクリプトを変更(/作成)することです。これは機能しますが、ユーザーが使用する可能性のあるシェルがいくつかあり、それぞれにユーザーが作成した、または作成していない可能性のあるいくつかの異なる初期化スクリプトがあるため、正しく実行するのは面倒です...

非常に単純なケースを考えてみましょう。bashのみを使用し、初期化スクリプトをまだ持っていないユーザーです。bashの「ログイン」インスタンスが起動すると、〜/ .bash_profile、〜/ .bash_login、〜/ .profileの順で検索され、最初に見つかったものが実行されます。ただし、アプリは使用するシェルを認識していないため、〜/ .profileを作成して、zshとkshも使用するようにすることをお勧めします。したがって、アプリは〜/ .profileを作成し、これをその中に配置します。

PATH="$PATH:/Applications/MyApp.app/Contents/Helpers"

素晴らしいですよね?はい、すばらしいです。ユーザーがPATHを設定したい何かを実行するまで、〜/ .bash_profileが作成され、これがセットアップを上書きします。その後、実行可能ファイルはzshとkshのPATHにありますが、bashにはありません。Whee。

そしてある日、ユーザーは代わりにtcshを使用することを決定し、それ(およびcsh)には、完全に異なるが、同様に厄介な可能性のあるinitファイルの山があります...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ