news 2026/6/21 1:50:34

MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)

MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)

有没有想过Mac上那些app是怎么做出来的?里面都包含了什么东西?今天就来做一个最简单的Mac APP。

背景

Mac的app安装方式就是把xx.app拖拽到/Applications目录下,且/Applications目录下有很多文件夹(对应着一个个的软件)。每个xx.app其实都是一个文件夹,里面有可执行文件、资源、元信息等,只是Mac把这种特殊的文件夹显示为应用图标并且在你双击这种文件夹的时候直接按照元信息运行其中的可执行程序罢了。

超小的.app制作

新建一个空的文件夹如“testMacAPP”,进入这个文件夹,创建一个main.cpp并写入如下内容:

#include<cstdlib>intmain(){system("osascript -e 'tell application \"Terminal\" to activate'");system("osascript -e 'tell application \"Terminal\" to do script \"echo Hello from C++ App; read\"'");return0;}

在此文件夹下创建Hello.app/Contents/MacOS子文件夹,编译上述cpp源码并将可执行程序放到Hello.app/Contents/MacOS文件夹下:

clang++ main.cpp-oHello.app/Contents/MacOS/Hello

接下来在Hello.app/Contents文件夹下创建Info.plist文件并写入以下内容:

<?xml version="1.0" encoding="UTF-8"?><plistversion="1.0"><dict><key>CFBundleExecutable</key><string>Hello</string><key>CFBundleIdentifier</key><string>xyz.letmefly.example.simpleapp.hello</string><key>CFBundleName</key><string>Let's Hello</string></dict></plist>

然后你的app就做好了。最终结构如下:

testMacAPP ├── Hello.app │ └── Contents │ ├── Info.plist │ └── MacOS │ └── Hello └── main.cpp

这个Hello.app文件夹就是一个可以双击运行的Mac app。

现在打开testMacApp文件夹,可以看到Hello.app不是一个普通文件夹的图标,而是一个默认应用的图标。

双击这个应用,会弹出弹窗问是否允许这个应用控制“终端”,点击允许后重新运行下这个应用,可以看到弹出了一个终端,上面有如下类似的字样:

echoHello from C++ App;read➜ ~echoHello from C++ App;readHello from C++ App

等你随便输入一些东西并按下回车后将会变成一个普通的终端。

小app一键生成脚本

也可以运行下面的脚本一键生成:

mkdir-pHello.app/Contents/MacOScat>main.cpp<<'EOF' #include <cstdlib> int main() { system("osascript -e 'tell application \"Terminal\" to activate'"); system("osascript -e 'tell application \"Terminal\" to do script \"echo Hello from C++ App; read\"'"); return 0; } EOFclang++ main.cpp-oHello.app/Contents/MacOS/Hellochmod+x Hello.app/Contents/MacOS/Hellocat>Hello.app/Contents/Info.plist<<'EOF' <?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>Hello</string> <key>CFBundleIdentifier</key> <string>xyz.letmefly.example.simpleapp.hello</string> <key>CFBundleName</key> <string>Let's Hello</string> </dict> </plist> EOF

The End

The End, Thanks!

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 1:41:47

多模态生成式AI的核心是跨模态语义对齐,而非简单图文拼接

1. 多模态生成式AI不是“把图片和文字拼在一起”&#xff0c;而是让模型真正理解跨感官的语义对齐最近在几个行业闭门会上&#xff0c;常听到一种说法&#xff1a;“我们加了多模态模块&#xff0c;现在能同时处理图文了。”结果一问细节&#xff0c;发现只是把图像编码器和文本…

作者头像 李华
网站建设 2026/6/21 1:33:46

【字节跳动】# 加密盐值与私有通信协议规范白皮书

加密盐值与私有通信协议规范白皮书 文档版本&#xff1a;V1.0 密级&#xff1a;内部机密&#xff5c;禁止对外分发、逆向、日志明文输出 适用范围&#xff1a;用户数据签名、内网/端服务私有加密通信、身份校验、防篡改防重放体系 生效日期&#xff1a;2026-06-20 目录 术语与定…

作者头像 李华
网站建设 2026/6/21 1:31:50

扩散模型多目标去噪对齐:无需重训练的精确融合方法

1. 项目概述&#xff1a;当扩散模型需要“一心多用”在生成式AI的浪潮里&#xff0c;扩散模型无疑是当前最耀眼的明星之一。从生成栩栩如生的图像到合成连贯的语音&#xff0c;其强大的创造能力有目共睹。然而&#xff0c;当我们希望一个模型能同时精通多个任务时——比如&…

作者头像 李华
网站建设 2026/6/21 0:58:33

emWin窗口管理器高级API实战:运动、工具提示与内存设备

1. 项目概述&#xff1a;深入emWin窗口管理器WM的核心API在嵌入式GUI开发领域&#xff0c;SEGGER的emWin图形库以其高效、稳定和功能全面而著称。作为其核心组件&#xff0c;窗口管理器&#xff08;Window Manager, WM&#xff09;不仅是界面元素的组织者&#xff0c;更是实现流…

作者头像 李华
网站建设 2026/6/21 0:38:48

如何用XOutput协议转换工具解决经典游戏手柄兼容性难题

如何用XOutput协议转换工具解决经典游戏手柄兼容性难题 【免费下载链接】XOutput A small DirectInput to Xinput wrapper 项目地址: https://gitcode.com/gh_mirrors/xou/XOutput 你是否曾为心爱的老款游戏手柄无法在现代PC游戏中正常使用而烦恼&#xff1f;XOutput作为…

作者头像 李华