Mac平台下如何制作pkg安装包以及rpath设置

news2024/11/19 21:18:29

打包工具介绍

  • Mac平台规范包可以使用Packages工具。
  • 下载地址

打包前准备工作

  • 创建一个目录 macProject
    • macProject目录中是以下目录结构
    •   myProject.app
        	└── Contents
        		├── Info.plist
        		├── MacOS
        				├── res
        				├── libmymath.dylib
        		├── Frameworks
        		└── Resources
        				├── wolf.icns
      
  • Info.plist : 主要描述的是一些工程的配置。具体字段解释
    关键字类型说明
    CFBundleExecutableString可执行程序文件名。即与启动图标绑定的可执行程序
    CFBundleIconFileString图标文件文件名
    CFBundleIdentifierString应用程序唯一标识
    CFBundleNameString程序安装后在界面上显示的名称
    LSUIElementBoolean置为 true 可以将应用程序设置为无界面(UI-less)模式。这意味着应用程序在启动时不会显示任何窗口或图标,只会在菜单栏上显示一个小点
    LSBackgroundOnlyBoolean设置为 true 可以确保应用程序在后台运行,并且不会成为活动应用程序。
    • 文件内容格式如下。如果没有特殊需求,使用以下字段就够用了。
    •   <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
        <plist version="1.0">
        <dict>
        	<key>CFBundleExecutable</key>
        	<string>res</string>
        	<key>CFBundleIconFile</key>
        	<string>AppIcon</string>
        	<key>CFBundleIdentifier</key>
        	<string>com.csdn.smallgraywolf</string>
        	<key>CFBundleName</key>
        	<string>smallgraywolf</string>
        </dict>
        </plist>
      
      
  • Frameworks : 一般放置了此程序所使用的第三方 Framework,比如QT库
  • MacOS : 存放程序和我们自己的动态库,mac平台下动态库是dylib后缀
  • Resources : 存放资源文件,可以将图标资源放在这里。图标资源格式必须是icns格式,可以直接在网页上将PNG格式或其他格式图片转为icns格式

打包

  • 直接在用应用程序中双击打开Packages创建一个打包工程

    • 1、选择Distribution,点击next,创建一个打包工程名MyPackage
      在这里插入图片描述
      在这里插入图片描述

    • 2、点击MyPackage

      • 2.1、Settings项:主要填写应用程序唯一标识符 Identifier和版本号 Version
        在这里插入图片描述

      • 2.2、Payload项:在Applications下面添加我们的应用程序,也就是刚才创建好的文件夹 myProject.app
        在这里插入图片描述

      • 2.3、Scripts项:需要添加两个文件preinstall(安装程序前执行的shell脚本命令)和postinstall(安装程序后执行的shell脚本命令)

        • 这个根据需求添加,不需要的话不需要添加
          在这里插入图片描述
    • 3、文件选择完成后,点击菜单栏的build,在打包工程文件的同级目录下会生成一个build目录,build目录中会生成一个pkg安装包
      在这里插入图片描述

      在这里插入图片描述

    • 到这里安装包就已经制作成功了

  • 直接双击就可以安装
    在这里插入图片描述

  • 安装完成后,在应用程序中就可以找到我们的应用,直接双击图标就可以运行
    在这里插入图片描述

  • 在启动台中也能找到我们的安装程序
    在这里插入图片描述

  • 我们的程序会安装到这个目录下 /Applications/myProject.app

应用程序卸载

  • mac平台下卸载应用程序时,直接在应用程序中,右击图标,移到废纸篓即可
    在这里插入图片描述

Mac平台下rpath设置

  • 这里要注意下,我们编译的程序,如果依赖动态库,默认的加载路径是我们的编译路径,但如果安装在别人电脑上,编译路径是不存在的,因此我们要修改程序的rpath,让程序加载当前路径下的动态库。
  • 我们要设置让res去加载当前路径下的动态库。这个工作我们在打包前就要做好。
  •   install_name_tool -add_rpath @executable_path res
    
  • otool工具介绍
    • otool命令全称object file displaying tool,是针对目标文件的展示工具,可以帮助我们发现应用中使用了哪些系统库,以及调用了哪些对象的方法和属性。
    • otool -L : 查看目标文件链接了哪些库
    • otool -l : 查看目标文件的详细信息
  • mac平台下需要通过 install_name_tool 命令行工具设置rpath
    • 添加rpath : install_name_tool -add_rpath <加载路径> <目标文件>
    • 删除rpath : install_name_tool -delete_rpath <加载路径> <目标文件>
    • 修改rpath : install_name_tool -change <原加载路径> <新加载路径> <目标文件>

Mac下安装Homebrew

  • Homebrew是MacOS(或 Linux)的软件包管理器。通过它,我们可以方便的对Mac上的各种应用软件进行管理,例如:安装、更新、查看、搜索、卸载等。
  • 可以使用以下命令安装
  •   /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
    

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

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

相关文章

Hive多行转多列,多列转多行

hive中的行列转换包含单行、多行、单列、多列&#xff0c;所以一共有四种组和转换结果。 一、多行转多列 原始数据表 目标结果表 分析&#xff1a;目标表中的a和b是用分组形成&#xff0c;所以groupby字段选用原始表中col1&#xff0c;c、d、e是原始表中的行值&#xff0c;…

数据结构(王道)——线性表的存储结构之循环表

一、循环单链表 定义&#xff1a; 循环单链表代码实现 创建并初始化、判断循环单链表是否为空、判断结点p是否为循环单链表的表尾结点的代码操作。 二、循环双链表 定义&#xff1a; 循环双链表代码实现 创建并初始化、判断循环双链表是否为空、判断结点p是否为循环双链表的…

橙河网络:怎么搭建海外问卷网站呢?

大家好&#xff0c;我是橙河&#xff0c;如果你想要搭建海外问卷网站赚钱&#xff0c;看我这篇文章就行了。 搭建网站&#xff0c;本身并不复杂&#xff0c;自己会敲代码就自己搞&#xff0c;不会就花点钱外包给别人。 搭建好问卷网站以后&#xff0c;重点来了&#xff0c;你需…

Learning Spatial and Spatio-Temporal Pixel

Learning Deformable Kernels for Image and Video Denoising 作者&#xff1a; Xiangyu Xu 商汤科技SenseTime Research 论文思想&#xff1a;一是将传统的双边滤波算法与CNN结合起来&#xff0c;二是用变形卷积来做多帧对齐的问题&#xff0c;三还是在raw上进行处理的。 …

WSL2 忘记用户密码

步骤一&#xff1a;将默认用户切换为root 在Windows里启动命令提示符&#xff0c;输入&#xff1a; ubuntu2004 config --default-user root这就已经将我的ubuntu20.04的默认用户切换为了root&#xff0c; 不同的WSL版本可能命令的第一个符号不一样&#xff0c;区别如下图&am…

Acrel-3000电能管理系统某公司项目中的应用 安科瑞 许敏

摘要&#xff1a;用户对自身用能的管理意识提升&#xff0c;促使用户侧电力配电系统在商业、工业以及民用区域的普及。系统针对用户侧主要的用能节点&#xff0c;设计安装智能仪表&#xff0c;再通过后台系统来实时监控各用能回路的工作状态、用电量、用水量、用气量数数据的采…

自动驾驶商用驶入“快车道”,汽车软件厂商如何“抢市”?

L3级及以上自动驾驶的商业化进程正在驶入“快车道”。 一方面&#xff0c;高阶自动驾驶的相关法规及标准不断出台&#xff0c;为自动驾驶行业的发展注入了“强心剂”。 比如工业和信息化部副部长辛国斌就曾表示&#xff0c;将启动智能网联汽车准入和上路通行试点&#xff0c;…

【嵌入式开发 Linux 常用命令系列 5 -- history 与 “!“ 巧妙配合】

文章目录 history 命令介绍history 命令与 “&#xff01;”运行先前执行的命令先前命令的参数传递给新命令两个或多个参数的处理设置 history 命令显示行数以及时间 上篇文章&#xff1a;嵌入式开发 Linux 常用命令系列 4 – git 常用配置及常用命令 history 命令介绍 histo…

虚拟内存、内存分页、分段、段页式内存管理

虚拟内存 为什么有虚拟内存&#xff1f; CPU是直接操作内存的物理地址。在这种情况下&#xff0c;如果两个程序占用的内存有重叠&#xff0c;要想同时运行两个程序是不可能的。 为啥它会内存有重叠啊&#xff1f;我不理解。难道不是这块内存被这个程序使用之后另外的程序就无…

Java内部类(InnerClass)

文章目录 概述1 什么是内部类2 为什么要声明内部类呢3 内部类的分类 成员内部类1 概述2 创建成员内部类对象 局部内部类1 非匿名局部内部类 匿名内部类 概述 1 什么是内部类 将一个类A定义在另一个类B里面&#xff0c;里面的那个类A就称为内部类&#xff08;InnerClass&#…

React中使用Redux

1.为什么要使用redux redux是一个专门用于状态管理的一个库&#xff0c;和vue中的vuex功能类似。其中核心点就是状态的管理。虽然我们无论在vue还是在react中我们组件间的通行都可以使用消息总线或者父子组件间的消息传递来进行操作。但是如果我们需要A组件的状态在其他十个或者…

Python开发项目基于卷积神经网络的车牌识别仿真软件

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

MongoDB初体验-安装使用教程2023.7

前言&#xff1a;博主第一次接触MongoDB&#xff0c;看了一圈网上现有的教程&#xff0c;不是缺少细节就是有问题没交代清楚&#xff0c;特整理了一下自己安装运行的过程&#xff0c;从下载安装到开机自启&#xff0c;全程细节齐全、图文并茂、简单易懂。 目录 1. 从官网下载2…

1-4 架构师所需要具备的技术栈与能力

架构师所需要具备的技术栈与能力 全局图解 全局图解

JavaWeb(4)——HTML、CSS、JS 快速入门

一、JavaScript 数组 数组筛选&#xff08;查找&#xff0c;将原来数组中的某些数据去除&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

2023年中国传媒大学程序设计大赛(同步赛)F.舞台矩形

一个简单的线段树维护最值&#xff0c;容易犯错的地方在于y相等的时候不应该省略 这个地方调了一会发现自己傻了 #include<bits/stdc.h> #define ls u<<1 #define rs u<<1|1 using namespace std; const int N 1e510; typedef long long ll; const ll INF …

DAPP(七)——React与智能合约的架构整合

合并一下react和智能合约&#xff0c;创建react脚手架 create-react-app myapp 将合约中对应的文件 复制到 react脚手架的根目录中 结果如下&#xff1a; 下载合约所要的依赖&#xff1a; npm i openzeppelin-solidity 可以在脚手架终端执行truffle的命令语句&#xff0c;t…

maven配置java outofmemory选项

在maven之中选择Add VM options&#xff0c;这样命令就多出来一个关于VM options配置的属性&#xff0c;此时就可以输入对于VM的设置

SpringMVC 中的数据绑定如何使用 @ModelAttribute 注解

SpringMVC 中的数据绑定如何使用 ModelAttribute 注解 引言 SpringMVC 是一个基于 Spring 框架的 Web 框架&#xff0c;它提供了一种简单、灵活的方式来开发 Web 应用程序。在开发 Web 应用程序时&#xff0c;我们需要将用户提交的数据绑定到我们的 Java 对象上。SpringMVC 提…

Orleans 微软基于 Actor 的分布式框架

一、Actor模型工作原理 Actor模型是一种并发编程模型&#xff0c;它基于消息传递实现&#xff0c;是一种轻量级的并发模型。在Actor模型中&#xff0c;每个Actor都是一个独立的执行单元&#xff0c;它可以接收和发送消息&#xff0c;并且可以执行一些本地操作&#xff0c;但是不…