From 15989effb4401134c30ed5b62cd83e3f83999dc2 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 24 Mar 2026 09:51:23 +0800 Subject: [PATCH] feat(dmg): customize macOS DMG installer appearance - Add DMG background image with drag-to-install arrow guide - Configure window size (660x400), app and Applications icon positions - Center icons horizontally with visual arrow between them --- .github/workflows/release.yml | 65 ++++++++++++++++++++--------- src-tauri/icons/dmg-background.png | Bin 0 -> 3897 bytes src-tauri/tauri.conf.json | 17 +++++++- 3 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 src-tauri/icons/dmg-background.png diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 00ce28dfe..5ee469e39 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -509,6 +509,51 @@ jobs: echo "Collected signatures (if any alongside artifacts):" ls -la release-assets/*.sig || echo "No signatures found" + - name: Upload release artifacts to workflow + uses: actions/upload-artifact@v4 + with: + name: release-assets-${{ runner.os }}-${{ matrix.arch || runner.arch }} + path: release-assets/* + if-no-files-found: error + + - name: List generated bundles (debug) + if: always() + shell: bash + run: | + echo "Listing bundles in src-tauri/target..." + find src-tauri/target -maxdepth 4 -type f -name "*.*" 2>/dev/null || true + + - name: Clean up Apple signing keychain + if: runner.os == 'macOS' && always() + shell: bash + run: | + if [ -n "${ORIGINAL_DEFAULT_KEYCHAIN:-}" ]; then + security default-keychain -s "$ORIGINAL_DEFAULT_KEYCHAIN" || true + fi + if [ -f "$RUNNER_TEMP/build.keychain-db" ]; then + security delete-keychain "$RUNNER_TEMP/build.keychain-db" || true + fi + + publish-release: + name: Publish GitHub Release + runs-on: ubuntu-22.04 + needs: release + permissions: + contents: write + steps: + - name: Download built release artifacts + uses: actions/download-artifact@v4 + with: + pattern: release-assets-* + path: release-assets + merge-multiple: true + + - name: List downloaded release artifacts + shell: bash + run: | + set -euo pipefail + ls -la release-assets + - name: Upload Release Assets uses: softprops/action-gh-release@v2 with: @@ -535,28 +580,10 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: List generated bundles (debug) - if: always() - shell: bash - run: | - echo "Listing bundles in src-tauri/target..." - find src-tauri/target -maxdepth 4 -type f -name "*.*" 2>/dev/null || true - - - name: Clean up Apple signing keychain - if: runner.os == 'macOS' && always() - shell: bash - run: | - if [ -n "${ORIGINAL_DEFAULT_KEYCHAIN:-}" ]; then - security default-keychain -s "$ORIGINAL_DEFAULT_KEYCHAIN" || true - fi - if [ -f "$RUNNER_TEMP/build.keychain-db" ]; then - security delete-keychain "$RUNNER_TEMP/build.keychain-db" || true - fi - assemble-latest-json: name: Assemble latest.json runs-on: ubuntu-22.04 - needs: release + needs: publish-release permissions: contents: write steps: diff --git a/src-tauri/icons/dmg-background.png b/src-tauri/icons/dmg-background.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb3b19c93bfc918790b5e7161c3ec54798a21a7 GIT binary patch literal 3897 zcmd5<3s6&68oo-!fzlELO>uPAOz7R6$L7< z@Gz!og%uGj?*Jhp1w@h{AYcd~yeWidATRRT+uiNVZo92I)9&nI6mj~j!w=<4d4zyH2kHgdgg4m(g+n?8RD-JySf+-JZtS0QOr53u2`&i4{*?6PdgF-d_G!LPYM2B zA4vTW1H6B(K{XFzY5O8OMV#SvwaHW_su{4))l1%oH>C1mmuD};I}=(vdu(0fRw|( zJGMU^wZJAPB%P)Xd;|PKwEuLu!k<-$v3iLbQO4UbV~u^70;g5=ih41RV?J)FH=(6V zOl~W`4)L)$8dYGps-Esizv}~9DIXeWemeT}@?D;#`-B$57@XBuRi80bq|IH2SQ>rY zdU_{lMr~;M?!W{ity9}V3R{$|W_E2%=qEE&=q|4R!k(v>PYcw~Sf;uoH`csT@Qf)f z{QhFKp`LOmdOB^jZ}%D;rN-EojFJ-^jhW;O9RbrNeXcO?8S@aO--{8^l*%X+Ui6JLrn0CIi*^Mdn=FLl@SjfH;Q0s zEw>Wu?Cb`zGBSjs^+g^oc!-r{q!5b2@hOLuI}9D;r^a~Nv-vjNYN6Rh?E?e}MNcz1 z{*w7F*Q*NDfWeR(SH$>MKg!tS1`TNNwkq_D^BPca?C7HTVl=B};MEDbkc5MbP?axR zjk8>oQ2}Ui>s6vGLAFoNzZ^y249A6M?{>f~Ju9VL9^~O3KBS%=>w9W3Sb-eq%jJ#h zSJGXao#jhTMpGUm(ci`JTGS9^uC48W{_^OPdlgv0&W?@_ZvzZXSXXQ6T{APu9ZgpD z(S@Xz|fr z*}F@F=#(hO$$*mx-#mh3Dintk%Xv*kKSmgLhZ2d^{76L1P=^*Q+d#I#X+s%ypCghi z=%M{d`g-O;_R3e933dWLMf#n|0zsgm+@^f~R6bqh03itkRgHQ3Shrn^cf;(QE-B^h zs(4XXS=o_9@d7V)xkDvaSc~1B;8iUa>gwv%?1c();!?vTsfWI@e(%UO&M?dC^#Fz< zWu|V~maLGpWq1jVjg5_xS9;6xOJ-5=32kIPF1ew!vXUU^<*@1k{Qc$gnH<)gFe3v4 z24;D2k-xZ@G{ZKv!%)$@(yfk8jTJS~skd(3A{$+9#&YLp3F6p@Me{`0VG_q)8rxBc zmA93i61^Pr;jl%fl!S{ix?9xxa|oG?Ff=5i3>`OKPjVFItq8pi3ZPp`qJ6jvXVYh_mza7eFB0-Q8i?r{?LgWy09F zIKS@snRUU~$uGV*z;uPzCZoOxjFv6(`?iF+Prk?#?#m=3UJ`IK37p0RW?6cA`gAvm z>@4LG)vJoHu zDSo;~Y7TOFjI>|6s`kVYDfN9>WlD(;WT%?mNmyTCi;TP} z4lB}D-%@W3L87EO>*K5K2O03~ktZgY%+TQAC$zk=4d8fW76Ctg1`1NFA$Cwk@YS>R+#PK;ZIC`*~)g59b6vly1_|Rkg zY$c(1vibmRF3WaJ=bC=rP%|~~W=2L_T-@?#Ev`L%x^`cFmdYPg9XbF9hhqq;2XIkx zepkrRDq}A%tyvbrUZE(wXeXQ2Lro)3lE0~`35i`^3H4z;)msB%y|j*G`RlpW1hnPI7&&mYC*TpWuBv}ltgRva8OWDC75yf155-N z0s3fZqv`fh=Z_#F@OXA^sdaKKJ^+Co?Y+-yma(={k1L}#F7CfwoorWvdvJDIOn9Jk ztr$9Q`U!P>ahPg~yMOOqGgv7nJDg1AmQiOXU*zYP)bkSP_wLC9a3jdt^W#g1M3jV! zF?x;VT~Q;@U%9<(E{kSYJphM}vZee&*l=x3Pu|)x%GQyk2FSl z1)zsG7#hUNs_G)U@39zDB!_o0C>dRD*)BO}GkB^g9XV4cOL71cxvTI>Yq%)PH%cv0 zA*4rg>hN;elZrf%Xw8UFvrL_(G|wMRF(5HdUxh^5Hb5%13` I4hN_H9YHeVzW@LL literal 0 HcmV?d00001 diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 1551b39fc..d7b911b58 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -50,7 +50,22 @@ } }, "macOS": { - "minimumSystemVersion": "12.0" + "minimumSystemVersion": "12.0", + "dmg": { + "background": "icons/dmg-background.png", + "windowSize": { + "width": 660, + "height": 400 + }, + "appPosition": { + "x": 180, + "y": 220 + }, + "applicationFolderPosition": { + "x": 480, + "y": 220 + } + } } }, "plugins": {