尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)
📅 发布时间:2026/6/21 1:58:48

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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关新闻

  • 核方法在双样本检验中的应用与优化
  • 如何快速定制暗黑破坏神2角色:d2s-editor存档编辑器实用指南
  • 2026最新TikTok视频无水印下载批量解析教程

最新新闻

  • 大语言模型因果推理去毒:从CAUSALDETOX原理到本地部署实践
  • ControlFoley:基于动态权重仲裁的视频到音频可控生成框架解析
  • 构建面向全双工对话的生成式奖励模型:从AI裁判到强化学习优化
  • 双随机矩阵:缓解图神经网络过平滑问题的有效工具
  • AI训练网络瓶颈诊断:从交换效率到通信模式的全链路分析
  • 数据驱动负载预测与健康感知在船舶混合动力系统能量管理中的应用

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号