【问题标题】:Need to ask for AppleScript permissions in an electron app需要在电子应用程序中请求 AppleScript 权限
【发布时间】:2022-12-14 07:34:55
【问题描述】:

Electron 应用程序在子 python 进程中使用 NSAppleScript,它需要对每个浏览器进行自动化控制。我已将问题具体归结为这个问题,因为如果我在终端中运行应用程序并控制 safari,它就可以工作,而如果不控制 safari,它就不会。我使用这些权限的全部目的是获取 URL,因此如果有更简单的方法,我愿意听取它。

我如何使用 electron、python 或 AppleScript 请求用户的许可,以及在 info.plist、parent.entitlements、child.entitlements 等文件中是否有我需要的特定内容?非常感谢你提前。

请注意,electron-forge 是正在使用的编译器。

所有相关代码sn-ps如下

if browser_name == "Safari":
        browser_tab_name = NSAppleScript.alloc().initWithSource_(
        str(f"""
        tell application "{browser_name}"
            get URL of current tab of window 1
        end tell
        """))

这是我在一个浏览器中使用 AppleScript 的方式之一。我还使用 AppleScript 查找基于铬的浏览器的 URL

这是我的 package.json

{
  "name": "PowerTimeTracking",
  "productName": "PowerTimeTracking",
  "version": "0.1.0",
  "description": "An app to improve productivity by blocking apps that waste time and showing where time goes.",
  "main": "src/index.js",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "package-arm": "electron-forge package --arch=arm64",
    "make": "electron-forge make",
    "make-arm": "electron-forge make --arch=arm64",
    "publish": "electron-forge publish",
    "lint": "echo \"No linting configured\""
  },
  "keywords": [],
  "author": {
    "name": "Shorya Malani",
    "email": "shoryamal@gmail.com"
  },
  "license": "MIT",
  "config": {
    "forge": {
      "electronPackagerConfig":{
        "icon": "./src/assets/icon.icns",
        "extendInfo":{
          "NSAppleScriptEnabled": true,
          "NSAppleEventsUsageDescription":"Applescript is needed to get tab urls of websites."
        }
      },
      "packagerConfig": {
        "osxSign": {
          "identity": "Developer ID Application: Shorya Malani (YD5J62KXTT)",
          "hardened-runtime": true,
          "entitlements": "parent.entitlements",
          "entitlements-inherit": "parent.entitlements",
          "signature-flags": "library"
        }
      },
      "makers": [
        {
          "name": "@electron-forge/maker-squirrel",
          "config": {
            "name": "forgepowertimetracking"
          }
        },
        {
          "name": "@electron-forge/maker-zip",
          "platforms": [
            "darwin"
          ]
        },
        {
          "name": "@electron-forge/maker-deb",
          "config": {}
        },
        {
          "name": "@electron-forge/maker-rpm",
          "config": {}
        }
      ]
    }
  },
  "dependencies": {
    "@electron/osx-sign": "^1.0.1",
    "electron-squirrel-startup": "^1.0.0",
    "node-fetch": "^2.6.7",
    "python-shell": "^3.0.1"
  },
  "devDependencies": {
    "@electron-forge/cli": "^6.0.0-beta.63",
    "@electron-forge/maker-deb": "^6.0.0-beta.63",
    "@electron-forge/maker-rpm": "^6.0.0-beta.63",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.63",
    "@electron-forge/maker-zip": "^6.0.0-beta.63",
    "electron": "19.0.1"
  },
  "build": {
    "extraResources": [
      "py",
      {
        "from": "python",
        "to": "python",
        "filter": [
          "**/*"
        ]
      }
    ]
  }
}

<?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.inherit</key>
        <true/>
        <key>NSAppleScriptEnabled</key>
        <true/>
        <key>com.apple.security.automation.apple-events</key>
    <true/>
</dict>
</plist>

这是 child.entitlements

<?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.files.user-selected.read-write</key>
    <true/>

    <key>com.apple.security.files.desktop.read-write</key>
    <true/>
    <key>com.apple.security.automation.apple-events</key>
    <true/>
    <key>com.apple.security.inherit</key>
    <true/>
    <key>NSAppleEventsUsageDescription</key>
    <string>yes</string>
    <key>com.apple.security.temporary-exception.apple-events</key>
    <true/>
  </dict>
</plist>

这是 parent.entitlements

【问题讨论】:

    标签: python macos electron applescript electron-forge


    【解决方案1】:

    如果有人在同一点上感到困惑,我发现我的问题实际上比我想象的要简单得多。检查您的 info.plist(您可以通过右键单击完成的应用程序并单击显示内容找到它,然后它应该在资源中)包括 NSAppleEventsUsageDescription。如果它不能确保您将 electronPackagerConfig 更改为 PackagerConfig,因为它在某些版本的电子中已更改,现在将忽略 electronPackagerConfig。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多