c++cmakecodesign

How to perform post install codesign in CMake?


I have a simple C++ application built using CMake. In macOS it can be allowed to dump core on crash by doing something like:

 add_custom_command(TARGET mytarget POST_BUILD
    COMMAND /usr/libexec/PlistBuddy -c "Add :com.apple.security.get-task-allow bool true" coredump.entitlements
    COMMAND codesign -s - -f --entitlements coredump.entitlements $<TARGET_FILE:mytarget>
    COMMAND rm -f coredump.entitlements
    VERBATIM)

This works for the built program (e.g. running as ./build/bin/mytarget) but after make install the installed program fails to start, error: Killed: 9

How can I perform the codesign step again after CMake install, or make the initial signing persistent through a make install?


Solution

  • Thanks to @Osyotr for pointing me in the right direction. I ended up with the following:

    set(ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mytarget.entitlements")
    install(CODE "execute_process(COMMAND
       codesign -s - -f --entitlements \"${ENTITLEMENTS}\" \"${CMAKE_INSTALL_PREFIX}/bin/mytarget\"
       )" COMPONENT Runtime)