Skip to content

Commit 323f47c

Browse files
committed
docs: 使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种) (#1649)
1 parent 06601e1 commit 323f47c

12 files changed

Lines changed: 231 additions & 3 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ Codes/target
3838
# Executables
3939
*.exe
4040
*.out
41-
*.app
41+
# *.app

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @Author: LetMeFly
33
* @Date: 2022-05-19 18:48:53
44
* @LastEditors: LetMeFly.xyz
5-
* @LastEditTime: 2026-06-15 17:32:12
5+
* @LastEditTime: 2026-06-20 15:38:39
66
-->
77
# LetLeet Blog
88

@@ -99,6 +99,7 @@
9999
|Linux Swap 文件完全指南:从创建到调优 - Written By AI(Claude-Opus4.6)|<a href="https://blog.letmefly.xyz/2026/03/15/Other-Linux-SwapMemSetting/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/159080576">CSDN博客</a>|
100100
|MacOS - 记录MacOS发烫的好几天 - 幕后黑手竟然是|<a href="https://blog.letmefly.xyz/2025/09/01/Other-MacOS-Logging_several_days_of_macOS_overheating/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/151087541">CSDN博客</a>|
101101
|MacOS - Clang使用bits/stdc++.h - 非官方(竞赛用) - 通用方法|<a href="https://blog.letmefly.xyz/2025/09/27/Other-MacOS-ClangUsingBits_stdcpp_h/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/152164818">CSDN博客</a>|
102+
|MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)|<a href="https://blog.letmefly.xyz/2026/06/20/Other-MacOS-SimpleAppDemo/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/162148634">CSDN博客</a>|
102103
|图论笔记 - 极简极入门级|<a href="https://blog.letmefly.xyz/2023/10/27/Other-Math-GraphTheory-Notes/">本平台博客</a>|无|
103104
|码蹄集需要频繁登录?如何做到“一劳永逸”——码蹄集只登录一次久久不掉线的教程|<a href="https://blog.letmefly.xyz/2022/08/30/Other-MatijiAutoLogin/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/126610331">CSDN博客</a>|
104105
|内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)-含详细原理配置说明介绍|<a href="https://blog.letmefly.xyz/2024/10/21/Other-Net_Traversal-How2UseCloudflareConnectingRDP(RemoteDesktopProtocol)WithoutPublicIP/">本平台博客</a>|<a href="https://letmefly.blog.csdn.net/article/details/143114828">CSDN博客</a>|

Solutions/Other-English-LearningNotes-SomeWords.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ categories: [自用]
341341
|fumble|v. 失球,笨手笨脚地做(某事),笨拙地找(某物),笨嘴拙舌地说话<br/>n. 笨拙的手部动作,乱摸,掉球|
342342
|<font color="#28bea0" title="二次复习">doom</font>|v. 使...注定失败/遭殃/死亡<br/>n. 厄运,毁灭,劫数,死亡|
343343
|||
344-
|<font color="#28bea0" title="二次复习">bestow</font>|v. 授予,献给|
344+
|<font color="#28bea0" title="二次复习">bestow</font><details><summary>例句</summary>He <font color="#28bea0">bestowed</font> high praise <font color="#28bea0">on</font> the winners.<br/>他对获胜者给予了高度赞扬。</details>|v. 授予,献给|
345345
|||
346346
|<font color="#28bea0" title="三次复习">ominous</font>|adj. 不详的,恶兆的,不吉利的|
347347
|lounge|n. (机场等的)等候室,休息室,起居室<br/>v. 懒洋洋地站/坐/躺着|
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
---
2+
title: MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)
3+
date: 2026-06-20 15:25:21
4+
tags: [VsCode, 简单, Mac, MacOS]
5+
categories: [技术思考]
6+
---
7+
8+
# MacOS:使用纯C++创建一个简单的MacAPP的Demo(可以双击运行的那种)
9+
10+
有没有想过Mac上那些app是怎么做出来的?里面都包含了什么东西?今天就来做一个最简单的Mac APP。
11+
12+
## 背景
13+
14+
Mac的app安装方式就是把xx.app拖拽到/Applications目录下,且/Applications目录下有很多文件夹(对应着一个个的软件)。每个xx.app其实都是一个文件夹,里面有可执行文件、资源、元信息等,只是Mac把这种特殊的文件夹显示为应用图标并且在你双击这种文件夹的时候直接按照元信息运行其中的可执行程序罢了。
15+
16+
## 超小的.app制作
17+
18+
新建一个空的文件夹如“testMacAPP”,进入这个文件夹,创建一个main.cpp并写入如下内容:
19+
20+
```cpp
21+
#include <cstdlib>
22+
23+
int main() {
24+
system("osascript -e 'tell application \"Terminal\" to activate'");
25+
system("osascript -e 'tell application \"Terminal\" to do script \"echo Hello from C++ App; read\"'");
26+
return 0;
27+
}
28+
```
29+
30+
在此文件夹下创建`Hello.app/Contents/MacOS`子文件夹,编译上述cpp源码并将可执行程序放到`Hello.app/Contents/MacOS`文件夹下:
31+
32+
```bash
33+
clang++ main.cpp -o Hello.app/Contents/MacOS/Hello
34+
```
35+
36+
接下来在`Hello.app/Contents`文件夹下创建`Info.plist`文件并写入以下内容:
37+
38+
```xml
39+
<?xml version="1.0" encoding="UTF-8"?>
40+
<plist version="1.0">
41+
<dict>
42+
<key>CFBundleExecutable</key>
43+
<string>Hello</string>
44+
45+
<key>CFBundleIdentifier</key>
46+
<string>xyz.letmefly.example.simpleapp.hello</string>
47+
48+
<key>CFBundleName</key>
49+
<string>Let's Hello</string>
50+
</dict>
51+
</plist>
52+
```
53+
54+
然后你的app就做好了。最终结构如下:
55+
56+
```
57+
testMacAPP
58+
├── Hello.app
59+
│ └── Contents
60+
│ ├── Info.plist
61+
│ └── MacOS
62+
│ └── Hello
63+
└── main.cpp
64+
```
65+
66+
这个Hello.app文件夹就是一个可以双击运行的Mac app。
67+
68+
现在打开`testMacApp`文件夹,可以看到`Hello.app`不是一个普通文件夹的图标,而是一个默认应用的图标。
69+
70+
双击这个应用,会弹出弹窗问是否允许这个应用控制“终端”,点击允许后重新运行下这个应用,可以看到弹出了一个终端,上面有如下类似的字样:
71+
72+
```bash
73+
echo Hello from C++ App; read
74+
~ echo Hello from C++ App; read
75+
Hello from C++ App
76+
```
77+
78+
等你随便输入一些东西并按下回车后将会变成一个普通的终端。
79+
80+
## 小app一键生成脚本
81+
82+
也可以运行下面的脚本一键生成:
83+
84+
```bash
85+
mkdir -p Hello.app/Contents/MacOS
86+
87+
cat > main.cpp << 'EOF'
88+
#include <cstdlib>
89+
90+
int main() {
91+
system("osascript -e 'tell application \"Terminal\" to activate'");
92+
system("osascript -e 'tell application \"Terminal\" to do script \"echo Hello from C++ App; read\"'");
93+
return 0;
94+
}
95+
EOF
96+
97+
clang++ main.cpp -o Hello.app/Contents/MacOS/Hello
98+
chmod +x Hello.app/Contents/MacOS/Hello
99+
100+
cat > Hello.app/Contents/Info.plist << 'EOF'
101+
<?xml version="1.0" encoding="UTF-8"?>
102+
<plist version="1.0">
103+
<dict>
104+
<key>CFBundleExecutable</key>
105+
<string>Hello</string>
106+
107+
<key>CFBundleIdentifier</key>
108+
<string>xyz.letmefly.example.simpleapp.hello</string>
109+
110+
<key>CFBundleName</key>
111+
<string>Let's Hello</string>
112+
</dict>
113+
</plist>
114+
EOF
115+
```
116+
117+
# The End
118+
119+
<center><font size="6px" face="Ink Free">The End, Thanks!</font></center>
120+
121+
> 同步发文于[CSDN](https://letmefly.blog.csdn.net/article/details/162148634)和我的[个人博客](https://blog.letmefly.xyz/),原创不易,转载经作者同意后请附上[原文链接](https://blog.letmefly.xyz/2026/06/20/Other-MacOS-SimpleAppDemo/)~
122+
>
123+
> 千篇源码题解[已开源](https://github.com/LetMeFly666/LeetCode)

toSay.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!--
2+
* @Author: LetMeFly
3+
* @Date: 2026-06-20 19:14:48
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2026-06-20 19:15:07
6+
-->
7+
12306官网这会儿好像出毛病了:
8+
9+
```
10+
公用名 (CN) default.chinanetcenter.com
11+
组织 (O) 网宿科技股份有限公司厦门分公司
12+
组织单位 (OU) <未包含在证书中>
13+
公用名 (CN) DigiCert Basic OV G2 TLS CN RSA4096 SHA256 2022 CA1
14+
组织 (O) DigiCert, Inc.
15+
组织单位 (OU) <未包含在证书中>
16+
颁发日期 2025年11月3日星期一 08:00:00
17+
截止日期 2026年11月17日星期二 07:59:59
18+
证书 692ac821f10acfab5654d6fa167d31b70701951ffe7da8cdeb5a29de805c9cbd
19+
公钥 fa89e334653e647b8b30cf56ac16e8d5f446eaee50c60c9885c5c95366417806
20+
```

todo

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# 取消注释*.app
2+
13
# newSolution.py go自动4space2tab
24
# 源码转md时自动tab24space
35
# auto remove last empty line

tryGoPy/testMacAPP/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<plist version="1.0">
3+
<dict>
4+
<key>CFBundleExecutable</key>
5+
<string>Hello</string>
6+
7+
<key>CFBundleIdentifier</key>
8+
<string>xyz.letmefly.example.simpleapp.hello</string>
9+
10+
<key>CFBundleName</key>
11+
<string>Let's Hello</string>
12+
</dict>
13+
</plist>

tryGoPy/testMacAPP/Hello.app/Contents/MacOS/.gitkeep

Whitespace-only changes.

tryGoPy/testMacAPP/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!--
2+
* @Author: LetMeFly
3+
* @Date: 2026-06-20 15:01:29
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2026-06-20 15:08:03
6+
-->
7+
```bash
8+
clang++ main.cpp -o Hello.app/Contents/MacOS/Hello
9+
```

0 commit comments

Comments
 (0)