diff --git a/Makefile b/Makefile index 4497d2e..aeebc39 100644 --- a/Makefile +++ b/Makefile @@ -82,3 +82,19 @@ sign: release @echo "🔏 Signing..." codesign --force --deep --sign - $(APP_BUNDLE) @echo "✅ Signed (ad-hoc)" + +# ============================================================ +# DMG (分发) +# ============================================================ +DMG_NAME := $(APP_NAME)-$(shell date +%Y%m%d).dmg +DMG_TMP := $(BUILD_DIR)/dmg_temp + +dmg: sign + @echo "💿 Creating DMG..." + @rm -rf $(DMG_TMP) $(DMG_NAME) + @mkdir -p $(DMG_TMP) + @cp -R $(APP_BUNDLE) $(DMG_TMP)/ + @ln -s /Applications $(DMG_TMP)/Applications + @hdiutil create -volname "$(APP_NAME)" -srcfolder $(DMG_TMP) -ov -format UDZO "$(DMG_NAME)" > /dev/null 2>&1 + @rm -rf $(DMG_TMP) + @echo "✅ DMG created: $(DMG_NAME)" diff --git a/Sources/App/AppDelegate.swift b/Sources/App/AppDelegate.swift index d223bfc..bdd84c0 100644 --- a/Sources/App/AppDelegate.swift +++ b/Sources/App/AppDelegate.swift @@ -70,9 +70,13 @@ final class AppDelegate: NSObject, NSApplicationDelegate { self.recordingPanel.updateText(text) } - speechRecognizer.onError = { [weak self] error in + speechRecognizer.onError = { error in + let nsError = error as NSError + // kAFAssistantErrorDomain code 1110 = 未检测到语音,属正常情况,不报错 + if nsError.domain == "kAFAssistantErrorDomain" && nsError.code == 1110 { + return + } print("[App] Speech error: \(error)") - self?.recordingPanel.updateText("Error: \(error.localizedDescription)") } speechRecognizer.onStateChange = { [weak self] isActive in diff --git a/Sources/Resources/AppIcon.icns b/Sources/Resources/AppIcon.icns new file mode 100644 index 0000000..3f847c4 Binary files /dev/null and b/Sources/Resources/AppIcon.icns differ diff --git a/VoiceInput-20260424.dmg b/VoiceInput-20260424.dmg new file mode 100644 index 0000000..15d1816 Binary files /dev/null and b/VoiceInput-20260424.dmg differ diff --git a/scripts/create_app_bundle.sh b/scripts/create_app_bundle.sh index 00ebf08..657e0ba 100755 --- a/scripts/create_app_bundle.sh +++ b/scripts/create_app_bundle.sh @@ -24,8 +24,14 @@ mkdir -p "$RESOURCES_DIR" cp "$EXEC_SRC" "$MACOS_DIR/VoiceInput" chmod +x "$MACOS_DIR/VoiceInput" -# 复制 Info.plist +# 复制 Info.plist 和图标 cp "$PROJECT_DIR/Sources/Resources/Info.plist" "$CONTENTS_DIR/Info.plist" +if [ -f "$PROJECT_DIR/Sources/Resources/AppIcon.icns" ]; then + cp "$PROJECT_DIR/Sources/Resources/AppIcon.icns" "$RESOURCES_DIR/AppIcon.icns" +fi + +# 更新 Info.plist 引用图标 +/usr/libexec/PlistBuddy -c "Add :CFBundleIconFile string AppIcon" "$CONTENTS_DIR/Info.plist" 2>/dev/null || true # 创建 PkgInfo echo -n 'APPL????' > "$CONTENTS_DIR/PkgInfo"