Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

xcode の Capabilities - App Sandbox について

教えていただけますか?

久しぶりに xcode を使って macOS cocoa アプリケーションを作っているのですが

NSFileManager で createDirectoryAtPath: withIntermediateDirectories: attributes: error: を使って アプリケーション内の/Contents/ の下へ PlugIns ディレクトリが無かったので作成しようとしたのですが、


Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “PlugIns” in the folder “Contents”

NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=1 \"Operation not permitted\"";
}


のエラーでディレクトリを作成出来ません。


なので古い以前作成したプロジェクトと較べてみたのですが、
Capabilities の App Sandbox が
古いプロジェクトでは、OFF

Xcode10.1で作成したプロジェクトでは、ON, User Selected File が Read Only
でした。

User Selected File が Read / Write, None でも駄目でした。

Capabilities の App Sandbox はどのような効果があるのでしょうか?
App Sandbox が OFF だと何か問題ありますか?
AppStore で弾かれるとか?


よろしくお願いします。

Mac mini, macOS Mojave (10.14.1)

投稿日 2018/11/30 11:11

返信
スレッドに付いたマーク ベストな回答

投稿日 2018/11/30 19:30

> アプリケーション内の/Contents/の下へPlugInsディレクトリが無かったので作成しようと


PlugInsの中に何を入れますか?通常は、Projectを作った後、File→New→TargetでExtensionを追加します。(これがPlugIns配下に作られます)


何か特殊なことをやる場合でも、/Applications配下を改変するのはよくありません。通常は、~/Library/Application Supportにアプリケーション名やバンドルIDのフォルダーを作って、そこにデータをいれます。


或いは、Editor→Add Bundle Phase→Add Copy Files Bundle Phaseで、既存のものをコピーすることも可能です。


因みに、NSFileManagerのcreateDirectoryAtPathで操作する場合、".entitlements"を右クリックして"source code"で開き、com.apple.security.temporary-exception.files.absolute-path.read-writeキーを設定します。


App Sandbox Temporary Exception Entitlements

https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AppSandboxTemporaryExceptionEntitlements.html#//apple_ref/doc/uid/TP40011195-CH5-SW7


> CapabilitiesのApp Sandboxはどのような効果があるのでしょうか?


そのアプリケーションが安全なアプリケーションであることを保証し、ユーザーに安心を与えます。


> App SandboxがOFFだと何か問題ありますか?


自分で使う分にはいいと思いますよ。


> AppStoreで弾かれるとか?


弾かれますね。

返信: 7
スレッドに付いたマーク ベストな回答

2018/11/30 19:30 psyche への返信

> アプリケーション内の/Contents/の下へPlugInsディレクトリが無かったので作成しようと


PlugInsの中に何を入れますか?通常は、Projectを作った後、File→New→TargetでExtensionを追加します。(これがPlugIns配下に作られます)


何か特殊なことをやる場合でも、/Applications配下を改変するのはよくありません。通常は、~/Library/Application Supportにアプリケーション名やバンドルIDのフォルダーを作って、そこにデータをいれます。


或いは、Editor→Add Bundle Phase→Add Copy Files Bundle Phaseで、既存のものをコピーすることも可能です。


因みに、NSFileManagerのcreateDirectoryAtPathで操作する場合、".entitlements"を右クリックして"source code"で開き、com.apple.security.temporary-exception.files.absolute-path.read-writeキーを設定します。


App Sandbox Temporary Exception Entitlements

https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AppSandboxTemporaryExceptionEntitlements.html#//apple_ref/doc/uid/TP40011195-CH5-SW7


> CapabilitiesのApp Sandboxはどのような効果があるのでしょうか?


そのアプリケーションが安全なアプリケーションであることを保証し、ユーザーに安心を与えます。


> App SandboxがOFFだと何か問題ありますか?


自分で使う分にはいいと思いますよ。


> AppStoreで弾かれるとか?


弾かれますね。

2018/11/30 16:57 hohokihai への返信

ありがとうございます。

試してみます。


[[NSBundle mainBundle]builtInPlugInsPath];

で取得できるパスにプラグインを置くのかと思い、

Build して確認したところ、


/Users/ユーザー名/Library/Developer/Xcode/DerivedData/アプリケーション名-cglwjynbbaopvybxnnjxuszwzycv/Build/Products/Debug/アプリケーション名.app/Contents/PlugIns


だったので、前述の質問の通りです。

2018/12/03 18:52 psyche への返信

> 次の様に扱うプラグインです。


あ、そんなのもありましたね。


> 自作のアプリケーションに機能追加で自作のプラグインを使用できるようにしたいと考えています。

> そういう仕様もAppStoreでNGでしょうか?


AppStoreの中では、Zen Pinball 2というピンボールゲームがあって、アプリ本体は無料ですが、かなりの数の有料ステージがあります。どのような構成になっているか知らないので私には何とも言えないのですが、何らかの方法はあるのだと思います。


また、Cocoa Packet Analyzerという通信をトレースするアプリでは、プラグインはWebサイトで別途公開していますね。

http://www.tastycocoabytes.com/cpa/plugins.php

xcode の Capabilities - App Sandbox について

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。