Add logic to sign and notarize macOS binaries. (#787)

* Add logic to sign and notarize macOS binaries.

* Attributes need to be preserved when copying into a DMG.
ms-uninstall-pycache
Mooneer Salem 2024-12-15 14:22:04 -08:00 committed by GitHub
parent e86bc18213
commit 1f7bd43f1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 12 deletions

View File

@ -13,6 +13,7 @@ export LPCNET_BRANCH=v0.5
export UT_ENABLE=${UT_ENABLE:-0}
export LPCNET_DISABLE=${LPCNET_DISABLE:-1}
export UNIV_BUILD=${UNIV_BUILD:-1}
export CODESIGN_IDENTITY=${CODESIGN_IDENTITY:--}
# Prerequisite: build dylibbundler
if [ ! -d macdylibbundler ]; then
@ -98,5 +99,10 @@ if [ -d .git ]; then
git pull
fi
mkdir -p build_osx && cd build_osx && rm -Rf *
cmake -DPython3_ROOT_DIR=$PWD/../Python.framework/Versions/3.12 -DUNITTEST=1 -DBUILD_OSX_UNIVERSAL=${UNIV_BUILD} -DUNITTEST=$UT_ENABLE -DCMAKE_BUILD_TYPE=Debug -DBOOTSTRAP_WXWIDGETS=1 -DUSE_STATIC_SPEEXDSP=1 -DUSE_STATIC_PORTAUDIO=1 -DUSE_STATIC_SAMPLERATE=1 -DUSE_STATIC_SNDFILE=1 -DHAMLIB_INCLUDE_DIR=${HAMLIBDIR}/include -DHAMLIB_LIBRARY=${HAMLIBDIR}/lib/libhamlib.dylib -DCODEC2_BUILD_DIR=$CODEC2DIR/build_osx ${LPCNET_CMAKE_CMD} ..
if [ "$CODESIGN_KEYCHAIN_PROFILE" != "" ]; then
export CODESIGN_KEYCHAIN_PROFILE_ARG=-DMACOS_CODESIGN_KEYCHAIN_PROFILE=$CODESIGN_KEYCHAIN_PROFILE
fi
cmake -DPython3_ROOT_DIR=$PWD/../Python.framework/Versions/3.12 -DUNITTEST=1 -DBUILD_OSX_UNIVERSAL=${UNIV_BUILD} -DUNITTEST=$UT_ENABLE -DCMAKE_BUILD_TYPE=Debug -DBOOTSTRAP_WXWIDGETS=1 -DUSE_STATIC_SPEEXDSP=1 -DUSE_STATIC_PORTAUDIO=1 -DUSE_STATIC_SAMPLERATE=1 -DUSE_STATIC_SNDFILE=1 -DHAMLIB_INCLUDE_DIR=${HAMLIBDIR}/include -DHAMLIB_LIBRARY=${HAMLIBDIR}/lib/libhamlib.dylib -DCODEC2_BUILD_DIR=$CODEC2DIR/build_osx ${LPCNET_CMAKE_CMD} -DMACOS_CODESIGN_IDENTITY=${CODESIGN_IDENTITY} ${CODESIGN_KEYCHAIN_PROFILE_ARG} ..
make VERBOSE=1 -j8

View File

@ -143,6 +143,10 @@ if(APPLE)
set(LPCNET_DYLIBBUNDLER_ARG -s ${LPCNET_BUILD_DIR}/src)
endif(NOT LPCNET_DISABLE)
if(NOT MACOS_CODESIGN_IDENTITY)
set(MACOS_CODESIGN_IDENTITY -)
endif(NOT MACOS_CODESIGN_IDENTITY)
add_custom_command(
TARGET FreeDV
POST_BUILD
@ -151,25 +155,38 @@ if(APPLE)
COMMAND cp ARGS ${CMAKE_CURRENT_SOURCE_DIR}/freedv.icns FreeDV.app/Contents/Resources
COMMAND rm ARGS -rf FreeDV.app/Contents/Frameworks
COMMAND mkdir ARGS FreeDV.app/Contents/Frameworks
COMMAND cp ARGS -r ${Python3_ROOT_DIR}/../../../Python.framework FreeDV.app/Contents/Frameworks
COMMAND cp ARGS -a ${Python3_ROOT_DIR}/../../../Python.framework FreeDV.app/Contents/Frameworks
COMMAND install_name_tool ARGS -add_rpath @loader_path/../Frameworks/Python.framework FreeDV.app/Contents/libs/librade*.dylib
COMMAND cp ARGS ../rade_src/radae_*e.py FreeDV.app/Contents/Resources
COMMAND cp ARGS -r ../rade_src/radae FreeDV.app/Contents/Resources
COMMAND cp ARGS -r ../rade_src/model19_check3 FreeDV.app/Contents/Resources
COMMAND cp ARGS -a ../rade_src/radae FreeDV.app/Contents/Resources
COMMAND cp ARGS -a ../rade_src/model19_check3 FreeDV.app/Contents/Resources
# Precompile Python code to improve startup time
COMMAND cd FreeDV.app/Contents/Resources && ../Frameworks/Python.framework/Versions/Current/bin/python3 -c "import radae_txe\; import radae_rxe\;" && cd ../../..
# Codesign binary so that it can execute
COMMAND codesign --force --options runtime --timestamp --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/entitlements.plist --sign - ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app
COMMAND codesign --force --options runtime --timestamp --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/entitlements.plist --sign ${MACOS_CODESIGN_IDENTITY} ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app `find ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app -name '*.so' -o -name '*.dylib'` `find ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app/Contents/Frameworks/Python.framework/Versions/3.12/bin -name 'Python' -o -name 'python3.12*'` `find ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app/Contents/Frameworks/Python.framework/ -name 'Python'` ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app/Contents/MacOS/FreeDV ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app/Contents/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/torch/bin/* ${CMAKE_CURRENT_BINARY_DIR}/FreeDV.app/Contents/Frameworks/Python.framework/Versions/3.12/Python
)
add_custom_target(dmg
COMMAND mkdir dist_tmp
COMMAND cp -r FreeDV.app dist_tmp
COMMAND hdiutil create -srcfolder dist_tmp/ -volname FreeDV -format UDZO -fs HFS+ ./FreeDV.dmg
COMMAND rm -rf dist_tmp
DEPENDS FreeDV)
if (MACOS_CODESIGN_KEYCHAIN_PROFILE)
add_custom_target(release
COMMAND /usr/bin/ditto -c -k --keepParent ./FreeDV.app FreeDV-appbundle.zip
COMMAND xcrun notarytool submit ./FreeDV-appbundle.zip --keychain-profile ${MACOS_CODESIGN_KEYCHAIN_PROFILE} --wait
COMMAND rm -rf FreeDV-appbundle.zip
COMMAND xcrun stapler staple ./FreeDV.app
COMMAND mkdir dist_tmp
COMMAND cp -a FreeDV.app dist_tmp
COMMAND hdiutil create -srcfolder dist_tmp/ -volname FreeDV -format UDZO -fs HFS+ ./FreeDV.dmg
COMMAND rm -rf dist_tmp
DEPENDS FreeDV)
else(MACOS_CODESIGN_KEYCHAIN_PROFILE)
add_custom_target(release
COMMAND mkdir dist_tmp
COMMAND cp -a FreeDV.app dist_tmp
COMMAND hdiutil create -srcfolder dist_tmp/ -volname FreeDV -format UDZO -fs HFS+ ./FreeDV.dmg
COMMAND rm -rf dist_tmp
DEPENDS FreeDV)
endif (MACOS_CODESIGN_KEYCHAIN_PROFILE)
endif(APPLE)
# Custom commands for signing Windows binaries