You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tauri/Angular macOS应用签名后运行脚本崩溃,权限配置致签名失败

问题分析与解决方案

你的方向完全正确——macOS应用签名后受沙箱机制约束,执行bash脚本涉及文件系统读写和子进程创建,必须通过权限配置解除沙箱限制,否则会触发崩溃。以下是经验证的正确配置示例:

1. 正确配置 tauri.conf.json

在tauri > bundle > macos节点下添加权限文件引用,同时确保沙箱相关配置正确:

{
  "tauri": {
    "bundle": {
      "macos": {
        "entitlements": "entitlements.mac.plist",
        "entitlementsInherit": "entitlements.mac.plist",
        "frameworks": [],
        "minimumSystemVersion": "10.13",
        "signingIdentity": "Developer ID Application: Your Team Name (TEAM_ID)",
        "providerShortName": null,
        "gatekeeperAssess": false
      }
    }
  }
}

注意:signingIdentity要替换为你实际的开发者ID,GitHub Actions中可通过环境变量动态传入。

2. 编写合法的 entitlements.mac.plist

创建项目根目录下的entitlements.mac.plist文件,仅申请必要权限(过度申请会导致签名失败):

<?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.files.user-selected.read-write</key>
  <true/>
  <!-- 允许创建子进程(执行bash脚本需要) -->
  <key>com.apple.security.cs.allow-subprocesses</key>
  <true/>
  <!-- 如果脚本需要访问特定系统目录,可添加对应权限,比如桌面:
  <key>com.apple.security.files.downloads.read-write</key>
  <true/>
  <key>com.apple.security.files.desktop.read-write</key>
  <true/>
  -->
  <!-- 沙箱启用(必须保留,否则签名会失败) -->
  <key>com.apple.security.app-sandbox</key>
  <true/>
  <!-- 允许网络请求(如果脚本不需要可删除) -->
  <key>com.apple.security.network.client</key>
  <true/>
</dict>
</plist>

关键注意点:

  • 必须保留com.apple.security.app-sandbox为true,Apple要求签名应用必须启用沙箱(除非是企业签名的特殊场景)
  • 仅添加你实际需要的权限,多余权限会被Apple签名工具拒绝

3. GitHub Actions签名配置示例

确保Actions中使用正确的证书和配置,避免签名失败:

jobs:
  build:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
      - name: Install dependencies
        run: npm install
      - name: Import Apple Certificates
        uses: apple-actions/import-codesign-certs@v2
        with:
          p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
          p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
      - name: Build Tauri app
        run: npm run tauri build
        env:
          TAURI_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
          TAURI_KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}

注意:APPLE_CERTIFICATE是你的开发者证书base64编码,APPLE_SIGNING_IDENTITY要和tauri.conf.json中的一致。

4. 脚本执行的额外注意事项

  • 确保bash脚本的路径正确:如果脚本打包在应用包内,使用Tauri提供的appDir路径获取,比如在Angular中:
import { appDir } from '@tauri-apps/api/path';
import { invoke } from '@tauri-apps/api/core';

async function runScript() {
  const scriptPath = await appDir();
  // 假设脚本在src-tauri/scripts下,打包后会在appDir内的scripts文件夹
  const fullPath = `${scriptPath}/scripts/your-script.sh`;
  await invoke('run_shell_script', { path: fullPath });
}
  • 脚本中避免使用相对路径,全部用绝对路径操作文件,防止沙箱路径限制导致找不到文件。

内容的提问来源于stack exchange,提问作者Uros Stanimirovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:19:52