@@ -117,14 +117,108 @@ jobs:
117117 '-DDEFAULT_TEXTURES_PATH=${application.dir}/../share/projectMSDL/textures/' \
118118 -DENABLE_INSTALL_BDEPS=ON
119119 cmake --build cmake-build-frontend-sdl2 --parallel
120+ cmake --install cmake-build-frontend-sdl2 --prefix "${{ github.workspace }}/install"
121+
122+ - name : Import Code Signing Certificates
123+ env :
124+ MACOS_CERTIFICATE_APPLICATION : ${{ secrets.MACOS_CERTIFICATE_APPLICATION }}
125+ MACOS_CERTIFICATE_INSTALLER : ${{ secrets.MACOS_CERTIFICATE_INSTALLER }}
126+ MACOS_CERTIFICATE_PASSWORD : ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
127+ run : |
128+ echo "$MACOS_CERTIFICATE_APPLICATION" | base64 --decode > app_cert.p12
129+ echo "$MACOS_CERTIFICATE_INSTALLER" | base64 --decode > installer_cert.p12
130+
131+ KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
132+ security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
133+ security default-keychain -s build.keychain
134+ security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
135+
136+ security import app_cert.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
137+ security import installer_cert.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PASSWORD" -T /usr/bin/productsign
138+
139+ security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
140+
141+ rm app_cert.p12 installer_cert.p12
142+
143+ - name : Sign Application Bundle
144+ run : |
145+ APP_PATH="${{ github.workspace }}/install/projectM.app"
146+ IDENTITY="Developer ID Application: Mischa Spiegelmock (5926VBQM6Y)"
147+
148+ # Sign all dylibs first
149+ find "$APP_PATH/Contents/PlugIns" -name "*.dylib" -exec \
150+ codesign --force --options runtime --sign "$IDENTITY" {} \;
151+
152+ # Sign the main executable
153+ codesign --force --options runtime --sign "$IDENTITY" \
154+ "$APP_PATH/Contents/MacOS/projectMSDL"
155+
156+ # Sign the entire bundle
157+ codesign --force --options runtime --sign "$IDENTITY" "$APP_PATH"
158+
159+ # Verify
160+ codesign --verify --deep --strict "$APP_PATH"
161+
162+ - name : Notarize Application
163+ env :
164+ API_KEY : ${{ secrets.MACOS_NOTARY_API_KEY }}
165+ API_KEY_ID : ${{ secrets.MACOS_NOTARY_KEY_ID }}
166+ API_ISSUER_ID : ${{ secrets.MACOS_NOTARY_ISSUER_ID }}
167+ run : |
168+ mkdir -p ~/.private_keys
169+ echo "$API_KEY" > ~/.private_keys/AuthKey_${API_KEY_ID}.p8
170+
171+ ditto -c -k --keepParent \
172+ "${{ github.workspace }}/install/projectM.app" \
173+ "projectM-notarize.zip"
174+
175+ xcrun notarytool submit "projectM-notarize.zip" \
176+ --key ~/.private_keys/AuthKey_${API_KEY_ID}.p8 \
177+ --key-id "$API_KEY_ID" \
178+ --issuer "$API_ISSUER_ID" \
179+ --wait
180+
181+ xcrun stapler staple "${{ github.workspace }}/install/projectM.app"
120182
121183 - name : Package projectMSDL
122184 run : |
123- cd cmake-build-frontend-sdl2
124- cpack -G productbuild
185+ # Get version from CMake
186+ VERSION=$(grep "project(projectMSDL" frontend-sdl2/CMakeLists.txt | sed -E 's/.*VERSION ([0-9.]+).*/\1/')
187+
188+ # Build component package from signed app
189+ pkgbuild \
190+ --root "${{ github.workspace }}/install" \
191+ --identifier "org.projectm-visualizer.projectmsdl" \
192+ --version "$VERSION" \
193+ --install-location "/Applications" \
194+ --component-plist "frontend-sdl2/src/resources/projectMSDL-component.plist" \
195+ "projectMSDL-component.pkg"
196+
197+ # Build product archive with installer UI
198+ productbuild \
199+ --distribution "frontend-sdl2/src/resources/distribution.xml" \
200+ --package-path "." \
201+ --resources "frontend-sdl2/src/resources" \
202+ --sign "Developer ID Installer: Mischa Spiegelmock (5926VBQM6Y)" \
203+ "projectM-${VERSION}-macOS-universal.pkg"
204+
205+ - name : Notarize Package
206+ env :
207+ API_KEY_ID : ${{ secrets.MACOS_NOTARY_KEY_ID }}
208+ API_ISSUER_ID : ${{ secrets.MACOS_NOTARY_ISSUER_ID }}
209+ run : |
210+ PKG_FILE=$(ls projectM-*.pkg | head -1)
211+
212+ xcrun notarytool submit "$PKG_FILE" \
213+ --key ~/.private_keys/AuthKey_${API_KEY_ID}.p8 \
214+ --key-id "$API_KEY_ID" \
215+ --issuer "$API_ISSUER_ID" \
216+ --wait
217+
218+ xcrun stapler staple "$PKG_FILE"
125219
126220 - name : Upload Artifact
127221 uses : actions/upload-artifact@v4
128222 with :
129223 name : projectMSDL-macOS-Universal
130- path : cmake-build-frontend-sdl2/ *.pkg
224+ path : projectM- *.pkg
0 commit comments