Mac打包Unix可执行文件为pkg

Mac打包Unix可执行文件为pkg

方式一:通过packages页面打包

1.下载packages app

  • Distribution:自定义化更高,包括修改安装页面的内容提示
    我这里主要演示Distribution模式的项目:通过unix可执行文件+postinstall.sh脚本实现通过mac的pkg安装系统服务

在这里插入图片描述

2.点击new project,创建新项目

在这里插入图片描述

3. 设置project version等信息

一个 project 可以对应多个 packages,这里我们先修改 package 信息,后面修改全局的 project 信息。
在这里插入图片描述

可以设置安装完成后,是否重启应用、退出用户

在这里插入图片描述

4. 在packages的payload里添加unix文件

在payload 添加需要安装的文件
选中 contents 里面的文件夹,然后选择下面的+ 按钮,即可添加文件到指定位置。

  • 因为我需要将unix打包到pkg文件里,所以这里点击+按钮,将我本地文件添加到对应目录
    在这里插入图片描述
    文件可以添加到这个目录树下的任意地方。
    这是我添加了之后的效果。
    在这里插入图片描述

5. 添加 pre-install 脚本、post-install 脚本

  • preinstall:针对单程序安装包(pkg),该脚本会在preflight脚本运行之后运行;针对多程序安装包(mpkg),该脚本会在用户按下Install铵钮后执行,只会在用户第一次安装该程序时执行。
  • postinstall:该脚本在程序安装完之后才运行。

因为我pkg安装包执行后会将unix文件安装到Application下,所以我这里直接在post-install脚本里以sudo方式运行即可:

postinstall.sh:

#!/bin/bash
sudo /Applications/ziyi_darwin_arm64# 记录日志到指定文件
echo "postinstall.sh executed at $(date)" >> /var/log/postinstall.logexit 0

在这里插入图片描述

6. 设置安装页面介绍文案presentation

在这里插入图片描述

在这里插入图片描述

7. build项目,打包pkg

选中Build-点击Build And Run:
在这里插入图片描述

然后就弹出了安装页面,至此大工搞成:
在这里插入图片描述

我们打包好的pkg文件默认放在了~/项目名/build目录下

在这里插入图片描述

访问服务接口,可以看到服务已经安装成功:
在这里插入图片描述

方式二:通过pkgbuild命令打包

pkgbuild的所有参数如下:-root:指定要打包的文件夹的路径。-identifier:指定包的标识符(ID)。-install-location:指定安装包的安装位置。-scripts:指定安装前后脚本文件的路径。-version:指定包的版本号。-sign:指定签名文件的路径,以进行安全签名。-keychain:指定要用于签名的钥匙链。-timestamp:指定时间戳服务器的URL,用于验证签名。-verbose:显示详细信息。-nopayload:仅创建空载荷。-filter:指定要包含或排除的文件和文件夹。-template:指定要使用的pkgproj模板文件的路径。sudo pkgbuild --root /Users/ziyi2/GolandProjects/ziyi/build --identifier com.test.pkg.project --version 1.0.1 --install-location /tmp/ziyi_pkg   --scripts /Users/ziyi2/scripts  /Users/ziyi2/Desktop/project.pkg
# --root /Users/ziyi2/GolandProjects/ziyi/build:指定要打包的文件夹
# --install-location /tmp/ziyi_pkg 指定安装包的安装位置(tmp目录,默认如果文件超过3天没人访问则被删除)
# --scripts /Users/ziyi2/scripts 指定preinstall、postintall脚本所在文件夹(在安装前、安装后执行的脚本)
#### 注意:脚本文件名必须为:preinstall、postintall且有可执行权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--compiler(31)

File: rust/compiler/rustc_ast_passes/src/node_count.rs 在Rust源代码的rust/compiler/rustc_ast_passes/src/node_count.rs文件中,它定义了Rust编译器中的AST节点计数器。该文件的作用是统计不同类型的AST节点在程序中的数量,以便在优化和调试过程中能…

【Python】Excel多sheet逐行合并为一个sheet

我有一个excel,内含多个sheet,我要将不同sheet合并在一个sheet中,依然保存在这个excel文件中,命名为合并,要求列名依次对应,逐行合并,请为我写出python代码 import pandas as pd# 读取 Excel 文…

acwing KMP算法

【数据结构】KMP算法&#xff08;详解&#xff09; #include <iostream> #include <string> #include <vector>using namespace std; const int N 1e6 10; int n1, n2; char s1[N], s2[N]; vector<int> next_val(N);void get_next() {// next数组中…

详解Keras:keras.preprocessing.image

keras.preprocessing.image Keras 库中的一个模块&#xff0c;用于处理和增强图像数据&#xff0c;它提供了一些实用的函数&#xff0c;如图像的加载、预处理、增强等。 常用函数 1、load_img 用于加载图像文件&#xff0c;并返回一个 NumPy 数组表示该图像 示例 from ker…

unity编辑器Scene界面输出位置及路径

工程Asset下新建Editor文件夹&#xff1b; Editor文件夹下新建脚本LogPosition using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class LogPosition : EditorWindow {//最终输出的数据.static string logtext;//增…

@PathVariable详解

PathVariable 用于获取URL路径中的参数值 通过 PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中&#xff1a;URL 中的 {xxx} 占位符可以通过PathVariable(“xxx”) 绑定到操作方法的入参中。 一般与RequestMapping(method RequestMethod.GET)一起使用 …

K8S-应用访问

1 service对象定位 2 Service 实践 手工创建Service 根据应用部署资源对象&#xff0c;创建SVC对象 kubectl expose deployment nginx --port80 --typeNodePortyaml方式创建Service nginx-web的service资源清单文件 apiVersion: v1 kind: Service metadata:name: sswang-ngi…

04 帧 Frame

文章目录 04 帧 Frame4.1 相机相关信息4.2 特征点提取4.2.1 特征点提取 ExtractORB()4.3 ORB-SLAM2对双目/RGBD特征点的预处理4.3.1 双目视差公式4.3.2 双目图像特征点匹配 ComputeStereoMatches()4.3.3 根据深度信息构造虚拟右目图像&#xff1a;ComputeStereoFromRGBD() 4.4 …

静态网页设计——环保网(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1BC4y1v7ZY/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

【教学类-45-02】X-Y之间的三连减题(a-b-c=)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-45-01】X-Y之间的三连加题(abc)-CSDN博客文章浏览阅读5次。【教学类-45-01】X-Y之间的三连加题(abc)https://blog.csdn.net/reasonsummer/article/details/135436915 有了三连加怎么能没有三连减&#xff0c;修改参数&am…

移动通信原理与关键技术学习(第四代蜂窝移动通信系统)

前言&#xff1a;LTE 标准于2008 年底完成了第一个版本3GPP Release 8的制定工作。另一方面&#xff0c;ITU 于2007 年召开了世界无线电会议WRC07&#xff0c;开始了B3G 频谱的分配&#xff0c;并于2008 年完成了IMT-2000&#xff08;即3G&#xff09;系统的演进——IMT-Advanc…

shell 正则表达式RE 正则符号拓展源 以及脚本中的正则匹配 递归查找文件内容 sed过滤文件内容

目录 正则表达式拓展元字符正则判断数据类型递归查找文件内容sed 的使用 正则表达式 # 支持扩展正则表达式&#xff0c;即o{3}表示匹配3个字母"o"。 grep -E "o{3}" /etc/passwd # 指定使用Perl兼容的正则表达式&#xff0c;即\s表示匹配一个空格。 grep…

python协程asyncio的应用,async,await,loop

关于协程&#xff0c;asyncio&#xff0c;async&#xff0c;await&#xff0c;loop的概念&#xff0c;参照上一篇文章可迭代对象&#xff0c;迭代器&#xff0c;生成器&#xff0c;协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念&#xff0c;但是这些东西实际上该怎…

mybatisPlus CodeGenerator 代码生成

在 test 目录下新建 CodeGenerator 类&#xff0c;用于 mybatis-plus 自动生成 java 代码 package com.edward;import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplu…

【linux】Ubuntu 22.04.3 LTS截屏

一、快捷键 交互式录屏 ShiftCtrltAltR 交互式截图 Print 对窗口进行截图 AltPrint 截图 ShiftPrint 快捷键可能取决于使用的桌面环境和个人的键盘快捷键设置。如果上述快捷键不起作用&#xff0c;可能需要检查系统设置中的键盘快捷键部分&#xff0c;以了解系统中截图的…

Hive精选10道面试题

1.Hive内部表和外部表的区别&#xff1f; 内部表的数据由Hive管理&#xff0c;外部表的数据不由Hive管理。 在Hive中删除内部表后&#xff0c;不仅会删除元数据还会删除存储数据&#xff0c; 在Hive中删除外部表后&#xff0c;只会删除元数据但不会删除存储数据。 内部表一旦…

【大数据】Zookeeper 数据写入与分布式锁

Zookeeper 数据写入与分布式锁 1.数据是怎么写入的2.基于 Zookeeper 实现分布式锁 1.数据是怎么写入的 无论是 Zookeeper 自带的客户端 zkCli.sh&#xff0c;还是使用 Python&#xff08;或者其它语言&#xff09;实现的客户端&#xff0c;本质上都是连接至集群&#xff0c;然…

Redis 键中冒号的用途是什么?可以使匹配查询更快吗?

Redis 键中冒号的用途是什么在Redis中&#xff0c;冒号&#xff08;:&#xff09;用作键的分隔符&#xff0c;它的主要作用是创建层次结构和命名空间。通过在键中使用冒号&#xff0c;可以将键分为多个部分&#xff0c;从而更好地组织和管理数据。 以下是冒号在Redis键中的用途…

Linux - Linux文件、目录、磁盘模式的知识点

概述 本系列博客一共4篇&#xff0c;是对Linux系统知识的查漏补缺&#xff0c;Linux文件、目录、磁盘模式的一次扫盲知识点&#xff0c;下一篇学习shell的知识点。 Linux文件权限与目录配置 1.修改文件属性与权限 以前对于文件的权限总是记不住&#xff0c;也记不清给什么权…

IMS基本架构

IP Multimedia Core Network Subsystem (IMS)商用已久&#xff0c;相对于CS domain的语音方案&#xff0c;IMS则是基于IETF定义的会话控制功能与多媒体传输功能通过IP-CAN实现的 全IP完整语音解决方案。 IMS能为无线和有线用户实现语音、视频、消息、数据等服务。便于运营商通过…