@@ -122,3 +122,73 @@ jobs:
122122 releaseDraft : true
123123 prerelease : false
124124 args : --target ${{ matrix.target }}
125+
126+ # macOS: 对构建产物重新进行 adhoc 深度签名,修复 Gatekeeper "文件已损坏" 问题
127+ # 并将重签名后的 DMG 重新上传到 GitHub Release,替换 tauri-action 上传的旧版本
128+ - name : Re-sign and repackage DMG (macOS only)
129+ if : matrix.platform == 'macos-latest'
130+ env :
131+ GITHUB_TOKEN : ${{ secrets.RELEASE_TOKEN }}
132+ shell : bash
133+ run : |
134+ set -euo pipefail
135+
136+ # 找到 tauri 输出目录中的 DMG 文件
137+ DMG_PATH=$(find src-tauri/target/${{ matrix.target }}/release/bundle/dmg -name "*.dmg" | head -1)
138+ if [ -z "$DMG_PATH" ]; then
139+ echo "No DMG found, skipping re-sign step"
140+ exit 0
141+ fi
142+
143+ echo "Found DMG: $DMG_PATH"
144+ DMG_NAME=$(basename "$DMG_PATH")
145+ WORK_DIR=$(mktemp -d)
146+
147+ # 挂载原始 DMG
148+ MOUNT_POINT="$WORK_DIR/mount"
149+ mkdir -p "$MOUNT_POINT"
150+ hdiutil attach "$DMG_PATH" -mountpoint "$MOUNT_POINT" -nobrowse -quiet
151+
152+ # 找到 .app
153+ APP_PATH=$(find "$MOUNT_POINT" -name "*.app" -maxdepth 1 | head -1)
154+ echo "Found app: $APP_PATH"
155+
156+ # 复制 .app 到临时目录
157+ APP_COPY="$WORK_DIR/$(basename "$APP_PATH")"
158+ cp -R "$APP_PATH" "$APP_COPY"
159+
160+ # 卸载原始 DMG
161+ hdiutil detach "$MOUNT_POINT" -quiet
162+
163+ # 移除隔离属性和旧签名,进行深度 adhoc 重签名
164+ xattr -cr "$APP_COPY"
165+ codesign --deep --force --sign - "$APP_COPY"
166+
167+ echo "Re-signed app:"
168+ codesign -dv "$APP_COPY" 2>&1 || true
169+
170+ # 重新打包为 DMG
171+ NEW_DMG="$WORK_DIR/$DMG_NAME"
172+ hdiutil create -volname "WeCut" -srcfolder "$APP_COPY" \
173+ -ov -format UDZO "$NEW_DMG"
174+
175+ echo "New DMG created: $NEW_DMG"
176+
177+ # 删除 Release 中旧的同名 DMG 资产,再上传新的
178+ TAG="${{ github.ref_name }}"
179+ ASSET_ID=$(gh release view "$TAG" --repo ${{ github.repository }} --json assets \
180+ --jq ".assets[] | select(.name == \"$DMG_NAME\") | .id" 2>/dev/null || echo "")
181+
182+ if [ -n "$ASSET_ID" ]; then
183+ echo "Deleting old release asset: $ASSET_ID"
184+ gh release delete-asset "$TAG" "$DMG_NAME" --repo ${{ github.repository }} --yes 2>/dev/null || true
185+ fi
186+
187+ echo "Uploading re-signed DMG to release: $TAG"
188+ gh release upload "$TAG" "$NEW_DMG#$DMG_NAME" \
189+ --repo ${{ github.repository }} --clobber
190+
191+ echo "Done: $DMG_NAME uploaded successfully"
192+
193+ # 清理
194+ rm -rf "$WORK_DIR"
0 commit comments