먼저 entitlements.plist
파일의 역할에 대해 확인한다.
entitlements.plist
는 macOS 및 iOS 애플리케이션에서 앱이 사용할 권한(Entitlements)을 정의하는 속성 리스트 파일(Plist)이다.
이 파일은 앱이 특정 기능을 사용하거나 시스템 리소스에 접근할 수 있도록 macOS/iOS의 보안 시스템과 상호 작용하는 데 필요하다.
<?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.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<false/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
</dict>
</plist>
키 | 설명 | 값 |
---|---|---|
com.apple.security.app-sandbox | 앱 샌드박스 활성화 | true or false |
com.apple.security.network.client | 클라이언트 네트워크 요청 허용 (예: HTTP 요청) | true or false |
com.apple.security.network.server | 서버 역할 수행 허용 (예: 소켓 서버) | true or false |
com.apple.security.files.user-selected.read-write | 사용자가 선택한 파일에 읽기/쓰기 가능 | true or false |
com.apple.security.cs.allow-jit | JIT 컴파일 허용 (예: WebAssembly 실행) | true or false |
https://github.com/tauri-apps/tauri/issues/8258
https://github.com/tauri-apps/plugins-workspace/issues/2273
sandbox 옵션이 활성화된 앱에서는 download
, relaunch
와 같은 메서드 사용이 불가하다.
sandbox 옵션을 false로 처리하면 약간의 보안 문제와 앱스토어 업로드가 불가능한 이슈가 있다.
app.set_activation_policy(tauri::ActivationPolicy::Accessory);
앱을 액세서리 모드로 실행시킬 수 있다.
액세서리 모드로 실행된 앱은 Dock에 아이콘이 추가되지 않는다.
액세서리 모드로 실행된 앱은 자신의 메뉴를 노출시키지 않는다는 특징이 있다.
https://github.com/tauri-apps/tauri/discussions/6093
pub fn run() {
Builder::default()
.setup(|app| {
#[cfg(target_os = "macos")]
app.set_activation_policy(tauri::ActivationPolicy::Accessory);
Ok(())
});
}
Rust의 #[cfg(target_os = "macos")]
는
컴파일러 구성 속성(Attribute)인 cfg(Configuration) 속성을 사용하여 특정 OS에서만 코드를 활성화하는 기능이다.
https://v2.tauri.app/distribute/sign/macos
// tauri.conf.json
{
"build": {},
"bundle": {
"active": true,
"category": "DeveloperTool",
"icon": ["icons/icon.icns", "icons/icon.png"],
"macOS": {
"entitlements": "./entitlements.plist",
"signingIdentity": "Developer ID Application: Corp (***)"
},
"createUpdaterArtifacts": true
},
"app": {}
}
signingIdentity
설정을 통해 빌드 시에 서명을 자동 처리할 수 있다.
.env
에 APPLE_ID
, APPLE_PASSWORD
, APPLE_TEAM_ID
값을 제공해 공증을 자동 처리할 수 있다.
한가지 문제가 있는데
서명과 공증의 대상은 .app
파일이다. 때문에 생성된 dmg 파일을 대상으로 공증 여부를 확인해보면 공증이 되지 않았음을 알 수 있다.
codesign
, xcrun notarytool submit
을 통해 dmg 파일에 대한 별도의 공증 처리가 필요하다.