mac release script & bundle

This commit is contained in:
JohannesItten
2026-09-05 12:08:26 +03:00
parent 3768397bfd
commit 8f59049579
16 changed files with 422 additions and 1 deletions
Vendored
BIN
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

+104
View File
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="143.653mm"
height="143.653mm"
viewBox="0 0 143.653 143.65301"
version="1.1"
id="svg5"
inkscape:export-filename="mxl-on-blue-square.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300"
xml:space="preserve"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="mxl-on-blue-square.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.2479451"
inkscape:cx="200.32933"
inkscape:cy="276.05381"
inkscape:window-width="2494"
inkscape:window-height="1009"
inkscape:window-x="66"
inkscape:window-y="663"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs2" /><g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="bg"
style="display:inline"
transform="matrix(0.61643941,0,0,1,4.1386047,-120.68901)"
sodipodi:insensitive="true"><rect
style="fill:#1b4098;fill-opacity:1;stroke:none;stroke-width:1.23722"
id="rect3467"
width="233.0367"
height="143.653"
x="-6.7137251"
y="120.68901"
inkscape:label="bg" /></g><g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="2" /><g
inkscape:label="1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(21.246118,-169.37755)"
style="display:inline"><g
id="g6784"><g
id="g860"
transform="translate(3.0120144,38.690999)"><g
aria-label="M"
id="text113-7"
style="fill:#ffffff;stroke-width:0.264582"
transform="translate(-3.704032)"><path
d="m 34.799623,220.64854 -7.823154,-25.26436 v 0 c 0.03387,0.67733 -0.06773,1.65945 0,2.94638 0.101599,1.25306 -0.06773,2.60772 0,4.06397 0.06773,1.45626 0,2.79399 0,4.01318 v 14.24083 h -7.721555 v -36.27098 h 11.683932 l 8.077152,24.17641 H 35.51503 l 8.331151,-24.17641 h 11.633132 v 36.27098 H 47.45296 v -14.44403 c 0,-1.15146 -0.03387,-2.42145 0,-3.80998 0.06773,-1.42239 -0.03387,-2.76011 0,-4.01317 0.06773,-1.28693 -0.03387,-2.26906 0,-2.94639 v 0 l -8.229552,25.21357 z"
id="path10652"
sodipodi:nodetypes="ccccssccccccccccscccccc" /></g><g
aria-label="X"
id="text113-0-35"
style="fill:#ffffff;stroke-width:0.264582"><path
d="m 84.156766,220.64854 h -9.956741 l -7.772355,-12.59832 -7.772354,12.59832 h -9.550344 l 12.03953,-18.64349 -11.328334,-17.62749 h 9.601144 l 7.264357,12.19193 7.010359,-12.19193 h 9.601143 l -11.379133,18.23709 z"
id="path10672" /></g><g
aria-label="L"
id="text113-0-6-2"
style="fill:#ffffff;stroke-width:0.264582"><path
d="m 81.382722,220.64854 v -36.27098 h 8.635949 v 29.20983 h 14.376319 v 7.06115 z"
id="path10669" /></g></g><rect
style="fill:#ffffff;stroke-width:0.235289"
id="rect526-1"
width="23.011999"
height="7.7199998"
x="-6.2462406"
y="223.06856" /><rect
style="fill:#ffffff;stroke-width:0.235289"
id="rect526-7-2"
width="23.011999"
height="7.7199998"
x="-6.2462406"
y="232.58556" /><rect
style="display:inline;fill:#ffffff;stroke-width:0.259539"
id="rect526-7-2-2"
width="28"
height="7.7199998"
x="-6.2462406"
y="242.10254" /><rect
style="fill:#ffffff;stroke-width:0.235289"
id="rect526-7-0-3-0"
width="23.011999"
height="7.7199998"
x="-6.2462406"
y="251.61954" /></g></g></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

+123
View File
@@ -0,0 +1,123 @@
#!/bin/bash
set -euo pipefail
# ELF building
export MXL_SOURCE=/Users/jitten/extra/mxl
export MXL_BUILD="${MXL_SOURCE}/build/Darwin-Clang-Release"
WORK_DIR="$(mktemp -d)"
trap 'rm -rf "${WORK_DIR}"' EXIT
# libmxl.pc in the build tree hardcodes the install/ prefix; rewrite it so
# cgo's pkg-config lookup gets the build tree's lib/include dirs.
sed -e "s|${MXL_SOURCE}/install|${MXL_SOURCE}/build|g" \
-e "s|^includedir=.*|includedir=${MXL_BUILD}/lib/include|" \
"${MXL_BUILD}/lib/libmxl.pc" > "${WORK_DIR}/libmxl.pc"
export PKG_CONFIG_PATH="${WORK_DIR}:${MXL_BUILD}/lib${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
export CGO_CFLAGS="-I${MXL_SOURCE}/lib/include"
export CGO_LDFLAGS="-L${MXL_BUILD}/lib"
PLAYER_ELF_PATH="./build/mxl-player"
go build \
-trimpath \
-ldflags="-s -w" \
-o "${PLAYER_ELF_PATH}" \
./cmd/mxl-player
# MacOS .app package
export APP_BUNDLE="./release/mac/MXL-player.app"
rm -rf "${APP_BUNDLE}"
mkdir -p "${APP_BUNDLE}/Contents/MacOS"
mkdir -p "${APP_BUNDLE}/Contents/Frameworks"
mkdir -p "${APP_BUNDLE}/Contents/Resources"
cp "${PLAYER_ELF_PATH}" "${APP_BUNDLE}/Contents/MacOS/mxl-player"
chmod 0755 "${APP_BUNDLE}/Contents/MacOS/mxl-player"
# App icon
ICONSET="${WORK_DIR}/MXL-player.iconset"
mkdir -p "${ICONSET}"
for s in 16 32 128 256 512; do
sips -z $s $s ./assets/mxl-on-blue-square.png \
--out "${ICONSET}/icon_${s}x${s}.png" > /dev/null
sips -z $((s*2)) $((s*2)) ./assets/mxl-on-blue-square.png \
--out "${ICONSET}/icon_${s}x${s}@2x.png" > /dev/null
done
iconutil -c icns "${ICONSET}" \
-o "${APP_BUNDLE}/Contents/Resources/AppIcon.icns"
# Info.plist
cat << EOF > "${APP_BUNDLE}/Contents/Info.plist"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN"
"https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key>
<string>MXL Player</string>
<key>CFBundleDisplayName</key>
<string>MXL Player</string>
<key>CFBundleIdentifier</key>
<string>io.github.jitten.mxl-player</string>
<key>CFBundleExecutable</key>
<string>mxl-player</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.video</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
</dict>
</plist>
EOF
plutil -lint "${APP_BUNDLE}/Contents/Info.plist"
# copy runtime libs (install IDs must stay untouched: libmxl is already
# @rpath/libmxl.1.dylib from the build tree; SDL3/MoltenVK are dlopen'ed by
# leaf name, so their IDs are never referenced)
cp -L "${MXL_BUILD}/lib/libmxl.1.dylib" \
"${APP_BUNDLE}/Contents/Frameworks/libmxl.1.dylib"
cp -L "$(brew --prefix sdl3)/lib/libSDL3.0.dylib" \
"${APP_BUNDLE}/Contents/Frameworks/libSDL3.0.dylib"
cp -L "$(brew --prefix molten-vk)/lib/libMoltenVK.dylib" \
"${APP_BUNDLE}/Contents/Frameworks/libMoltenVK.dylib"
# resolve @rpath/libmxl.1.dylib and the dlopen'ed SDL3/MoltenVK leaf names
# against the bundle's Frameworks dir
install_name_tool \
-add_rpath "@loader_path/../Frameworks" \
"${APP_BUNDLE}/Contents/MacOS/mxl-player"
# install_name_tool invalidated the executable's ad-hoc signature; re-sign
codesign --force --sign - "${APP_BUNDLE}"
codesign --verify "${APP_BUNDLE}"
env -u SDL3_LIBRARY \
-u VULKAN_LIBRARY \
-u DYLD_LIBRARY_PATH \
"${APP_BUNDLE}/Contents/MacOS/mxl-player"
# compress, preserve MacOS bundle meta
ditto -c -k \
--sequesterRsrc \
--keepParent \
"${APP_BUNDLE}" \
./release/mac/mxl-player-0.1.0-macos-arm64.zip
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -5,7 +5,7 @@ Collapsed=0
[Window][Settings & Info] [Window][Settings & Info]
Pos=0,0 Pos=0,0
Size=700,1080 Size=700,804
Collapsed=0 Collapsed=0
[Window][Stats] [Window][Stats]
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN"
"https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key>
<string>MXL Player</string>
<key>CFBundleDisplayName</key>
<string>MXL Player</string>
<key>CFBundleIdentifier</key>
<string>io.github.jitten.mxl-player</string>
<key>CFBundleExecutable</key>
<string>mxl-player</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.video</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
</dict>
</plist>
Binary file not shown.
@@ -0,0 +1,155 @@
<?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>
<key>files</key>
<dict>
<key>Resources/AppIcon.icns</key>
<data>
aOS6hffTaTtxQc0zhZI1xOsNz0I=
</data>
</dict>
<key>files2</key>
<dict>
<key>Frameworks/libMoltenVK.dylib</key>
<dict>
<key>cdhash</key>
<data>
ETd5I/t5G4xenebaPwHV0Q99lls=
</data>
<key>requirement</key>
<string>cdhash H"11377923fb791b8c5e9de6da3f01d5d10f7d965b"</string>
</dict>
<key>Frameworks/libSDL3.0.dylib</key>
<dict>
<key>cdhash</key>
<data>
NNHvv93cCnUaCS7Jl7MJkRtCOKs=
</data>
<key>requirement</key>
<string>cdhash H"34d1efbfdddc0a751a092ec997b309911b4238ab"</string>
</dict>
<key>Frameworks/libmxl.1.dylib</key>
<dict>
<key>cdhash</key>
<data>
MbqPNJYzYRFJ+VJyBwbTvnpRM0M=
</data>
<key>requirement</key>
<string>cdhash H"31ba8f349633611149f952720706d3be7a513343"</string>
</dict>
<key>Resources/AppIcon.icns</key>
<dict>
<key>hash2</key>
<data>
30ycN9D9rWpkLESaFOwycI8ufPkx8qO20cW46sVar2Q=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<true/>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
Binary file not shown.