fix: DMG installer arrow background using dmgbuild#6008
Conversation
create-dmg with --skip-jenkins silently skips all Finder styling. dmgbuild writes .DS_Store directly without Finder/AppleScript. Dark omi-style background with white arrow and install text. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Greptile SummaryThis PR replaces the Key changes:
Confidence Score: 4/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Codemagic CI Trigger] --> B{Workflow}
B -->|working_directory: app| C1[pip3 install dmgbuild]
B -->|working_directory: desktop| C2[pip3 install dmgbuild]
C1 --> D1["dmgbuild -s ../desktop/dmg-assets/dmgbuild_settings.py\n-D app_path=APP_PATH\n-D app_name=Omi\n-D assets_dir=$(pwd)/../desktop/dmg-assets"]
C2 --> D2["dmgbuild -s dmg-assets/dmgbuild_settings.py\n-D app_path=STAGING_DIR/omi.app\n-D app_name=omi\n-D assets_dir=$(pwd)/dmg-assets"]
D1 --> E[dmgbuild_settings.py]
D2 --> E
E --> F["Reads background.png\nSets icon_locations\nCreates .DS_Store directly\n(no Finder/AppleScript)"]
F --> G[Output: Omi.dmg]
G --> H[codesign DMG]
H --> I[notarytool submit + staple]
Reviews (1): Last reviewed commit: "fix: switch DMG creation to dmgbuild for..." | Re-trigger Greptile |
| if icon_path: | ||
| badge_icon = icon_path |
There was a problem hiding this comment.
badge_icon should be icon for volume icon
badge_icon composites the supplied image onto the standard macOS folder icon (like a badge). To replicate what create-dmg --volicon did (replace the volume icon entirely with the .icns file), the correct dmgbuild variable is icon:
| if icon_path: | |
| badge_icon = icon_path | |
| if icon_path: | |
| icon = icon_path |
This code path is currently dormant — neither workflow passes -D volume_icon=... — so it won't break CI today, but if someone later enables it they'll get a badged folder instead of the app icon as the volume icon.
| - name: Create DMG installer | ||
| script: | | ||
| set -e | ||
| pip3 install --break-system-packages dmgbuild |
There was a problem hiding this comment.
pip3 install --break-system-packages dmgbuild installs the latest available release on every build with no version pin. A breaking change in a future dmgbuild release could silently corrupt the DMG layout or fail the build. Consider pinning to a known-good version:
| pip3 install --break-system-packages dmgbuild | |
| pip3 install --break-system-packages "dmgbuild==1.6.1" |
The same applies to the second workflow's identical install line (line 2289).
Switches from create-dmg (broken --skip-jenkins) to dmgbuild. Dark background, white arrow, proper icon positions.
Switches from create-dmg (broken --skip-jenkins) to dmgbuild. Dark background, white arrow, proper icon positions.