Упаковать бинарник в dmg пакет для macOS
Здравствуйте, моя цель собирать rust исходники и из них создавать .dmg файл для установки в macOS в окружении linux.
С первым пунктом, собирать rust исходники, у меня проблем нет, а вот для создания .dmg пакета проблемы появились.
Сейчас делаю так (кусок из gitlab-ci.yml):
package:osx:
stage: package
image: ubuntu:24.04
needs:
- job: build-client:aarch64-apple-darwin
artifacts: true
rules: *rules-client
script:
- apt-get update && apt-get install -y xmlstarlet hfsprogs hfsplus p7zip-full
- export PACKAGE_VERSION=$(grep ^version client/Cargo.toml | cut -d'"' -f2)
- |
export APP_NAME="Contextmenu"
export DMG_NAME="$APP_NAME.dmg"
export MOUNT_DIR="/tmp/$APP_NAME-dmg"
- mkdir -p misc/package/osx/${APP_NAME}.app/{MacOS,Resources}
- cp client/dist/contextmenu-client-macos-aarch64 misc/package/osx/${APP_NAME}.app/MacOS
- cd misc/package/osx/
- xmlstarlet ed --inplace -u "/plist/dict/key[.='CFBundleVersion']/following-sibling::string[1]" -v "$VERSION" -u "/plist/dict/key[.='CFBundleShortVersionString']/following-sibling::string[1]" -v "$VERSION" ${APP_NAME}.app/Info.plist
- mkdir dmg-root
- cp -vr $APP_NAME.app dmg-root/
- ln -s /Applications dmg-root/Applications
- dd if=/dev/zero of=$DMG_NAME bs=1M count=128 status=progress
- mkfs.hfsplus -v "$APP_NAME" $DMG_NAME
- mkdir -p $MOUNT_DIR
- mount -o loop -t hfsplus $DMG_NAME $MOUNT_DIR
- |
cp -a dmg-root/. $MOUNT_DIR/
sync
umount $MOUNT_DIR
- 7z l ${DMG_NAME}
artifacts:
name: "contextmenu-client-macos-aarch64-dmg"
paths:
- misc/package/osx/Contextmenu.dmg
На всякий случай привожу Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- App identity -->
<key>CFBundleName</key>
<string>ContextMenu</string>
<key>CFBundleDisplayName</key>
<string>ContextMenu</string>
<key>CFBundleIdentifier</key>
<string>com.contextmenu.client</string>
<!-- Executable -->
<key>CFBundleExecutable</key>
<string>contextmenu-client</string>
<!-- Versioning -->
<key>CFBundleVersion</key>
<string>1.86.4</string>
<key>CFBundleShortVersionString</key>
<string>1.86.4</string>
<!-- Bundle type -->
<key>CFBundlePackageType</key>
<string>APPL</string>
<!-- Platform -->
<key>LSMinimumSystemVersion</key>
<string>11.0</string>
<!-- UI behavior -->
<key>LSUIElement</key>
<true/>
<!--
<key>CFBundleIconFile</key>
<string>AppIcon.icns</string>
-->
</dict>
</plist>
На выходе я получаю валидный .dmg архив, но при установке в macOS, отображается ошибка пакет повреджен или что-то в этом духе.
У кого был опыт создания .dmg пакетов для macOS в Linux среде?
Подскажите куда копать, пожалуйста.