Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

macOS Application バイナリが持つentitlementを知りたい

$ codesign -d --entitlements :- /Applications/Hoge.app

アプリ例その1)

Executable=/Applications/Hoge.app/Contents/MacOS/Hoge
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.cs.allow-jit</key>
	<true/>
        <key>com.apple.security.cs.disable-library-validation</key>
	<true/>
	<key>com.apple.security.get-task-allow</key>
	<true/>
	<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
	<true/>
</dict>
</plist>

4つの意味をみていきます。

1. com.apple.security.cs.allow-jit

JavaScriptCore.framework などJITを使うライブラリの利用を許可します。

2. com.apple.security.cs.disable-library-validation

コードサイニングがないdylibの利用を許可します。

3. com.apple.security.get-task-allow

Xcodeデバッガでのアタッチを許可します。

4. com.apple.security.cs.allow-unsigned-executable-memory

MAP_JITフラグを使った書き込み、実行可能なメモリ領域の利用を許可します。

アプリ例その2)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.automation.apple-events</key>
	<true/>
	<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
	<true/>
	<key>com.apple.security.cs.disable-library-validation</key>
	<true/>
</dict>
</plist>

5. com.apple.security.automation.apple-events

他のアプリへAppleEventを送信することを許可します。ユーザーによる承認が必要になります。

NotarizationについてWWDC19 の動画に概要がまとまっていて分かりやすいです。

All About Notarization
https://developer.apple.com/videos/play/wwdc2019/703/