python二进制程序打包为 mac app(dmg)-材料准备
前言
刚刚利用Pyinstaller打包了一个应用, 打包最终产物是一个二进制文件配合一些资源文件
本篇研究如何将终产物变成一个 app, 进一步变成 dmg, 就和你网上下载的工具一样
准备工作
- 二进制打包产物
- 一张logo图(png文件)1024x1024
你问我为啥要这么大图?不好意思,苹果规定的,我也不知道😂!
- mac 电脑一台
新建一个文件夹
嗯, 就是一个正常的文件夹, 名字叫 garbevents(你们自己随意哈), 后面所有的修改除重命名本文件夹以外, 「都在这个文件夹里进行」。
别问,就是这样你跟着我做
logo制作
这个东西是咱们的应用图标,接下来我们一起做logo!
- 我们的文件大小是256x256的,需要调整大小
- 用mac 自带的图片查看器,挑战分辨率为1024x1024
- 接下来开始生产苹果专用的logo文件
// 这里直接在桌面路径下操作 // 把刚刚生成的图片命名为icon.png cd /Users/lijiawei/desktop // 新建临时文件夹 mkdir tmp.iconset // 生成特定分辨率的图片,并保存到临时文件夹 sips -z 16 16 icon.png --out tmp.iconset/icon_16x16.png sips -z 32 32 icon.png --out tmp.iconset/icon_16x16@2x.png sips -z 32 32 icon.png --out tmp.iconset/icon_32x32.png sips -z 64 64 icon.png --out tmp.iconset/icon_32x32@2x.png sips -z 128 128 icon.png --out tmp.iconset/icon_128x128.png sips -z 256 256 icon.png --out tmp.iconset/icon_128x128@2x.png sips -z 256 256 icon.png --out tmp.iconset/icon_256x256.png sips -z 512 512 icon.png --out tmp.iconset/icon_256x256@2x.png sips -z 512 512 icon.png --out tmp.iconset/icon_512x512.png sips -z 1024 1024 icon.png --out tmp.iconset/icon_512x512@2x.png // 生成.icns文件 iconutil -c icns tmp.iconset -o icon.icns
- 依次执行完上面的神秘代码之后,你会得到一个icon.icns文件,如下所示
Contents 文件夹
新建一个 Contents 文件夹, 至于为什么要这么命名, 其实是苹果对于 app 的规定, 遵守就好
里面的东西如下:
lijiawei@bogon Documents % tree garbevents garbevents └── Contents ├── MacOS │ └── gbweb ├── Resources │ └── icon.icns └── info.plist 3 directories, 3 files
- info.plist app 的清单文件, 后面看
- MacOS python打包的二进制产物复制进来
- Resource 资源文件都会在这里,图标之类的
info.plist
这个是清单文件,一个 xml, 但是语法比较怪 ,key 和 value 分别是某个标签的 content。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>gbweb</string> <key>CFBundleIconFile</key> <string>icon.icns</string> <key>CFBundleIdentifier</key> <string>garbevents</string> <key>NSHighResolutionCapable</key> <false/> <key>LSUIElement</key> <false/> </dict> </plist>
这是我的,你们记得修改为自己的内容
- CFBundleExecutable: 你要运行的二进制, 这里是 json_to_dart
- CFBundleIconFile: 应用图标的指向, 相对 Resources 文件的路径
- CFBundleIdentifier: 应用唯一标示, 这里根据你的情况写
- NSHighResolutionCapable: 是否支持高清(Retina 屏,建议设置为 true)
- LSUIElement: 是否后台运行,就是有没有前台进程
重命名.app
到最外面重命名文件夹, 加上.app 后缀, 就会自动变成一个 app 了
运行
到此为止,你就得到了一个app,你可以双击运行他!到了这步已经可以使用了, 但是一般情况下, 会使用 dmg 格式来分发应用!
下篇文章我们讲一下,如何发分应用!