Mac pkg 安装包

制作macOS的安装包(.pkg)是一个将多个文件打包成一个安装文件的过程,这样用户可以通过双击.pkg文件来安装程序。

前提条件

  • macOS 计算机
  • 开发的软件和相应的资源文件
  • pkgbuild 命令行工具

步骤

1. 准备你的软件内容

  • 下载文件 Scriptsfolder

2. 创建安装包

  1. 创建一个打包项目 :使用 pkgbuild 创建组件包
  • 打开「终端」应用。

  • 使用 pkgbuild 命令创建组件包。组件包是可安装包的构建块,通常包含应用程序的实际文件。例如:

    css 复制代码
    pkgbuild --root /path/to/your/app \
             --identifier com.example.yourapp \
             --version 1.0 \
             --install-location /Applications/YourApp.app \
             --component-plist /path/to/your/components.plist \
             yourapp-component.pkg
    • --root 指定包含要打包文件的目录。
    • --identifier 是一个唯一标识符,通常使用反向域名表示法。
    • --version 指定应用程序的版本。
    • --install-location 指定安装位置。
    • --component-plist 是可选的,指定组件的属性列表文件。
  1. 添加脚本到项目: 在打包项目中包含安装脚本。通常,这涉及到定义 preinstall 或 postinstall 脚本来执行您的自定义安装步骤。 如果你的安装包需要运行上述 Bash 脚本,这意味着在安装过程中你需要执行一些自定义操作,XML文件复制到与Microsoft Office应用程序(Excel、PowerPoint和Word)相关的目录中。为了在 macOS 安装包中集成并自动运行此脚本,你可以采取以下步骤:

2.1. 将脚本保存为可执行文件

首先,确保你的脚本文件(比方说命名为 install_script.sh)具有可执行权限。可以通过运行以下命令来设置权限:

bash 复制代码
chmod +x install_script.sh

2.2. 创建安装包时包含此脚本

在使用 pkgbuildproductbuild 创建安装包时,确保你的脚本文件被包含在你的应用内容中。

2.3. 设置安装后脚本

在创建安装包的过程中,你需要指定你的 install_script.sh 作为一个"安装后脚本"(postinstall script)。这样,当用户安装你的包时,此脚本会在安装过程的最后自动执行。

使用 pkgbuild 的时候,可以使用 --scripts 参数指定一个包含脚本的文件夹。在这个文件夹中,应该有一个名为 postinstall 的脚本(没有扩展名),这个脚本会在安装之后执行。你可以将你的 install_script.sh 重命名为 postinstall 并放在这个文件夹里。

例如,如果你的脚本和应用内容都已准备好,你可以这样创建你的组件包:

bash 复制代码
chmod +x MyAppScripts/postinstall

使用绝对路径(或确保相对路径正确)来引用脚本目录:

bash 复制代码
pkgbuild --root MyAppContents --identifier com.example.myapp --version 1.0.0 --scripts /path/to/MyAppScripts MyAppComponent.pkg

其中,ScriptsFolder 是包含你的 postinstall 脚本的文件夹。 确保将 /path/to/MyAppScripts 替换为你的 MyAppScripts 目录的实际路径。

2.4. 注意

  • 确保你的 postinstall 脚本符合 macOS 的安全性和兼容性要求,尤其是考虑到 macOS 的权限管理和安全性限制。
  • postinstall 脚本中,你可能需要处理不同用户权限级别的情况,因为脚本将以 root 权限执行。
  • 测试你的安装包在各种环境下的行为,确保它按照预期工作,没有引入安全漏洞。

通过遵循上述步骤,你可以创建一个在安装时会自动执行定制脚本的 macOS 安装包。

签名过程

获取证书、安装证书

  1. 签名 pkg 安装包 : 使用 productsign 命令来给您的 pkg 安装包签名:

    bash 复制代码
    productsign --sign "Developer ID Installer: Your Name (Team ID)" "path/to/your/package.pkg" "path/to/your/signed_package.pkg"

    "Developer ID Installer: Your Name (Team ID)" 替换为您在苹果开发者账户中的安装证书信息,并替换 path/to/your/package.pkgpath/to/your/signed_package.pkg 为您的原始和签名的包路径。

    1.1 注意Developer ID InstallerDeveloper ID Application 是苹果公司提供给非 App Store 分发的 Mac 应用程序的两种不同类型的证书,它们的作用和使用场景略有差异:

Developer ID Application
  • 用途: 这个证书用来对 Mac 应用程序进行签名,确保应用程序的完整性和来源的可靠性。
  • 场景: 当你想要分发不通过 Mac App Store 发布的应用程序时,你会使用这个证书来签名你的应用。用户可以在 Gatekeeper 的保护下安全地下载和安装这些应用程序。
  • 签名工具: 在 Xcode 或使用命令行工具 codesign 时使用这个证书进行签名。
Developer ID Installer
  • 用途: 这个证书用于签名安装包(.pkg),用来分发 Mac 应用程序或安装包含多个文件的复杂软件。
  • 场景: 如果你想要创建一个安装程序(通常是.pkg格式),以便用户可以安装你的应用程序或多组件软件包,你需要使用这个证书来签名你的安装程序。
  • 签名工具: 使用 productsign 命令行工具来签名.pkg安装包。

在实际使用中,如果你仅仅想要分发一个应用程序,你可能只需要 Developer ID Application 证书来签名你的.app文件。而如果你需要用户通过安装程序来安装你的应用或服务,你还需要 Developer ID Installer 证书来签名你的.pkg文件。

两者的共同点在于它们都用于在 Mac 系统的 Gatekeeper 外部分发应用程序,并且都要求开发者通过苹果的认证过程来获取。这些认证确保了应用程序的安全性,防止恶意软件的传播,并提供了一个可信赖的开发者身份验证。

查看安装的证书

bash 复制代码
security find-identity -v 

公证过程

  1. 上传安装包进行公证 : 使用 xcrun altool 命令来上传您的 pkg 文件进行公证:

    bash 复制代码
    xcrun altool --notarize-app --primary-bundle-id "com.example.yourapp" --username "your@appleid.com" --password "app-specific-password" --file "path/to/your/signed_package.pkg"
    • "com.example.yourapp" 是您的 pkg 的唯一标识符。
    • your@appleid.com 是您的苹果开发者账号邮箱。
    • app-specific-password 是为公证过程生成的特定密码。
    • "path/to/your/signed_package.pkg" 是您已经签名的 pkg 文件的路径。
  2. 等待公证过程完成 : 公证可能需要一些时间。您可以使用 xcrun altool 来检查公证状态。

  3. 公证完成后,附加公证信息 : 一旦您收到公证成功的通知,您可以使用 xcrun stapler 工具为您的应用附加公证信息。

    bash 复制代码
    xcrun stapler staple "path/to/your/signed_package.pkg"
  4. 验证 : 要验证一个 .pkg 安装包是否已经成功签名和公证,您可以使用 macOS 的 pkgutilspctl 命令行工具。这些工具能够帮助您检查 .pkg 文件的签名状态,以及它是否通过了 Apple 的公证服务。以下是步骤和示例:

4.1. 检查签名

首先,您可以使用 pkgutil 来检查 .pkg 文件的签名信息:

shell 复制代码
pkgutil --check-signature /path/to/your/package.pkg

/path/to/your/package.pkg 替换为您的 .pkg 文件的实际路径。这个命令会显示出包的签名信息,包括签名者的身份和证书状态。

4.2. 验证公证

然后,使用 spctl 命令来检查 .pkg 文件是否已经通过公证:

shell 复制代码
spctl -a -t install -vv /path/to/your/package.pkg

这条命令会尝试验证 .pkg 文件,确保它符合 macOS 的安全政策,包括是否已经公证。如果文件通过了验证,您会看到一个包含 accepted 的消息。如果包含 source=Notarized Developer ID,这说明 .pkg 文件已经被成功地公证。

4.3. 注意事项

  • 如果您在验证过程中遇到任何错误或拒绝消息,这可能意味着 .pkg 文件没有被正确签名或公证。请确保您按照正确的流程进行签名和公证,并且所有的信息(包括开发者 ID 和团队 ID)都是准确的。
  • 公证过程是针对 macOS Catalina (10.15) 及更新版本的安全机制。在 Catalina 之前的 macOS 版本上,公证状态可能不会被检查。
  • 如果您发现有关公证的问题,确保您使用的是最新版本的 Xcode 和 macOS,并且您的 Apple Developer 账户是有效的。

通过上述步骤,您应该能够验证您的 .pkg 安装包是否已经成功签名和公证。

按照以上步骤,您可以确保您的 pkg 安装包被正确签名和公证,这样当用户下载并安装时,他们会看到它来自一个已知的开发者,并且包含的是被苹果系统信任的代码。

删除加载项

在macOS上删除Microsoft Word加载项(Add-ins),你可以按照以下步骤操作。这些步骤适用于通过Web添加的加载项(Web Add-ins),以及安装在系统上的加载项。请注意,具体步骤可能会根据你的Microsoft Office版本有所不同。

删除Web Add-ins:

  1. 打开Word:首先,打开Microsoft Word应用程序。

  2. 访问加载项管理

    • 对于较新的Office版本(如Office 365或Office 2019),点击插入菜单中的我的加载项获取加载项
    • 在加载项窗口中,你通常可以看到已安装的加载项列表。
  3. 删除加载项

    • 从列表中找到你想要删除的加载项。
    • 可能会有一个小的设置图标、移除按钮或者是其他选项可以点击。点击这个选项,然后选择删除或移除加载项。

这些步骤通常用于管理通过Office Store或开发者给定的URL安装的Web Add-ins。

删除系统加载项:

如果加载项是作为软件包安装在你的系统上,那么删除它们可能需要手动从应用程序的文件夹中删除相关文件或使用卸载程序(如果提供)。

  1. 访问Word加载项文件夹

    • 加载项可能安装在如下路径之一:

      css 复制代码
      /Library/Application Support/Microsoft/Office/Word Add-Ins
      ~/Library/Application Support/Microsoft/Office/Word Add-Ins
    • 这里的 /Library 是系统级别的库文件夹,而 ~/Library 是指当前用户的库文件夹。

  2. 删除加载项文件

    • 在文件夹中找到你想要删除的加载项相关文件。
    • 将这些文件移动到废纸篓,或者右键点击它们并选择"移到废纸篓"。
  3. 重启Word:完成上述步骤后,重启Word以确保更改生效。

请注意,在删除任何文件之前,确保你知道它是做什么用的,以避免意外删除重要文件,可能需要备份这些文件。如果你不确定某个文件是否可以删除,最好是查找更多信息或咨询专业人士。

以上提供的方法适用于大多数情况,但详细步骤可能根据不同的Word版本和你的具体情况有所不同。如果加载项是由第三方软件提供,并且通过安装程序安装,则可能需要查阅该软件的文档来了解如何正确卸载。

相关推荐
_.Switch40 分钟前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光44 分钟前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   44 分钟前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   1 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web1 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
安冬的码畜日常1 小时前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
莹雨潇潇2 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr2 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
Tiffany_Ho3 小时前
【TypeScript】知识点梳理(三)
前端·typescript
安冬的码畜日常4 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js