From e100494c6a5a8a900f327783b844e2bb356ec53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=B1=BC=E5=BC=80=E5=8F=91?= Date: Tue, 19 May 2026 09:46:30 +0800 Subject: [PATCH] feat: add DMG background with Gatekeeper installation guide --- tauri-app/src-tauri/dmg-background.png | Bin 0 -> 32151 bytes tauri-app/src-tauri/dmg-background.py | 54 +++++++++++++++++++++++++ tauri-app/src-tauri/tauri.conf.json | 17 +++++++- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 tauri-app/src-tauri/dmg-background.png create mode 100644 tauri-app/src-tauri/dmg-background.py diff --git a/tauri-app/src-tauri/dmg-background.png b/tauri-app/src-tauri/dmg-background.png new file mode 100644 index 0000000000000000000000000000000000000000..64b75b6fec1a0fcd66d17727eb7dca3b39135928 GIT binary patch literal 32151 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 literal 0 HcmV?d00001 diff --git a/tauri-app/src-tauri/dmg-background.py b/tauri-app/src-tauri/dmg-background.py new file mode 100644 index 0000000..20e97a4 --- /dev/null +++ b/tauri-app/src-tauri/dmg-background.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +"""生成 DMG 背景图,包含安装指引""" + +import subprocess +from PIL import Image, ImageDraw, ImageFont + +# 动态获取中文字体路径 +result = subprocess.run( + ["fc-match", "-f", "%{file}", "PingFang SC"], + capture_output=True, text=True +) +font_path = result.stdout.strip() if result.returncode == 0 else None + +# DMG 窗口尺寸 +W, H = 1320, 800 + +# 颜色 +BG_COLOR = (245, 245, 247) +TEXT_COLOR = (29, 29, 31) +ACCENT_COLOR = (0, 122, 255) +ARROW_COLOR = (150, 150, 155) + +img = Image.new("RGB", (W, H), BG_COLOR) +draw = ImageDraw.Draw(img) + +# 加载字体 +if font_path: + font_title = ImageFont.truetype(font_path, 48, index=0) + font_body = ImageFont.truetype(font_path, 32, index=2) + font_small = ImageFont.truetype(font_path, 24, index=2) +else: + font_title = ImageFont.load_default() + font_body = font_title + font_small = font_title + +# 标题 +draw.text((W//2, 60), "美家卡智影", fill=TEXT_COLOR, font=font_title, anchor="mm") + +# 拖拽指引 +draw.text((W//2, 720), "将左侧图标拖拽到右侧 Applications 文件夹", fill=TEXT_COLOR, font=font_body, anchor="mm") + +# 安装说明框 +box_x, box_y = 260, 500 +box_w, box_h = 800, 160 +draw.rounded_rectangle([box_x, box_y, box_x + box_w, box_y + box_h], radius=20, fill=(255, 255, 255), outline=ARROW_COLOR, width=2) + +# 说明文字 +draw.text((W//2, box_y + 40), "⚠️ 首次安装提示", fill=ACCENT_COLOR, font=font_body, anchor="mm") +draw.text((W//2, box_y + 95), '由于未注册 Apple 开发者,首次打开时请右键点击应用,选择"打开"', fill=TEXT_COLOR, font=font_small, anchor="mm") + +# 保存 +img_1x = img.resize((660, 400), Image.LANCZOS) +img_1x.save("tauri-app/src-tauri/dmg-background.png", "PNG") +print("Generated tauri-app/src-tauri/dmg-background.png") diff --git a/tauri-app/src-tauri/tauri.conf.json b/tauri-app/src-tauri/tauri.conf.json index 8e92b7c..2f8f23c 100644 --- a/tauri-app/src-tauri/tauri.conf.json +++ b/tauri-app/src-tauri/tauri.conf.json @@ -70,7 +70,22 @@ ], "macOS": { "minimumSystemVersion": "13.0", - "infoPlist": "Info.plist" + "infoPlist": "Info.plist", + "dmg": { + "background": "dmg-background.png", + "windowSize": { + "width": 660, + "height": 400 + }, + "appPosition": { + "x": 180, + "y": 170 + }, + "applicationFolderPosition": { + "x": 480, + "y": 170 + } + } }, "windows": { "nsis": {