diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index f5d680fc79df..c3de779bdcd0 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -37,6 +37,7 @@ jobs: ARTIFACT: QGroundControl.dmg PACKAGE: QGroundControl QT_VERSION: 6.8.3 + QGC_MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} steps: - name: Checkout repo diff --git a/CMakeLists.txt b/CMakeLists.txt index d319924f4dde..2f6306c2f4c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -363,6 +363,8 @@ elseif(APPLE) set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${QGC_MACOS_ENTITLEMENTS_PATH}") endif() + cmake_path(GET QGC_MACOS_ICON_PATH FILENAME MACOSX_BUNDLE_ICON_FILE) + set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES MACOSX_BUNDLE TRUE @@ -378,13 +380,13 @@ elseif(APPLE) ) if(MACOS) - set(MACOSX_BUNDLE_ICON_FILE "macx.icns") - set(app_icon_macos "${QGC_MACOS_ICON_PATH}/${MACOSX_BUNDLE_ICON_FILE}") + set(app_icon_macos "${QGC_MACOS_ICON_PATH}") set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${app_icon_macos}) + target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${app_icon_macos}") - set_source_files_properties(${QGC_MACOS_ENTITLEMENTS_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QGC_MACOS_ENTITLEMENTS_PATH}) + set(app_entitlements_macos "${QGC_MACOS_ENTITLEMENTS_PATH}") + set_source_files_properties(${app_entitlements_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + target_sources(${CMAKE_PROJECT_NAME} PRIVATE "${app_entitlements_macos}") elseif(IOS) enable_language(OBJC) diff --git a/cmake/CreateMacDMG.cmake b/cmake/CreateMacDMG.cmake index a1007da3a796..5c6938cae4e9 100644 --- a/cmake/CreateMacDMG.cmake +++ b/cmake/CreateMacDMG.cmake @@ -1,18 +1,17 @@ - -set(STAGING_BUNDLE_PATH ${CMAKE_BINARY_DIR}/staging/${TARGET_APP_NAME}.app) - -message(STATUS "Signing bundle: ${STAGING_BUNDLE_PATH}") +message(STATUS "Signing bundle: ${QGC_BUNDLE_PATH}") execute_process( - COMMAND codesign --force --deep -s - "${STAGING_BUNDLE_PATH}" + COMMAND codesign --force --deep -s - "${QGC_BUNDLE_PATH}" + COMMAND_ECHO STDOUT COMMAND_ERROR_IS_FATAL ANY ) file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/package) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/package) -file(COPY ${STAGING_BUNDLE_PATH} DESTINATION ${CMAKE_BINARY_DIR}/package) +file(COPY ${QGC_BUNDLE_PATH} DESTINATION ${CMAKE_BINARY_DIR}/package) message(STATUS "Creating DMG: ${TARGET_APP_NAME}.dmg") execute_process( COMMAND create-dmg --volname "${TARGET_APP_NAME}" --filesystem "APFS" "${TARGET_APP_NAME}.dmg" "${CMAKE_BINARY_DIR}/package/" + COMMAND_ECHO STDOUT COMMAND_ERROR_IS_FATAL ANY ) diff --git a/cmake/CustomOptions.cmake b/cmake/CustomOptions.cmake index ac1aec6d9372..2125034a2f10 100644 --- a/cmake/CustomOptions.cmake +++ b/cmake/CustomOptions.cmake @@ -64,10 +64,10 @@ option(QT_USE_TARGET_ANDROID_BUILD_DIR "Use Target Android Build Dir" OFF) # MacOS set(QGC_MACOS_PLIST_PATH "${CMAKE_SOURCE_DIR}/deploy/macos/MacOSXBundleInfo.plist.in" CACHE FILEPATH "MacOS PList Path") -set(QGC_MACOS_BUNDLE_ID "org.qgroundcontrol.QGroundControl" CACHE STRING "MacOS Bundle ID") # MACOS -set(QGC_MACOS_ICON_PATH "${CMAKE_SOURCE_DIR}/deploy/macos" CACHE PATH "MacOS Icon Path") # MACOS +set(QGC_MACOS_BUNDLE_ID "${QGC_PACKAGE_NAME}" CACHE STRING "MacOS Bundle ID") +set(QGC_MACOS_ICON_PATH "${CMAKE_SOURCE_DIR}/deploy/macos/qgroundcontrol.icns" CACHE FILEPATH "MacOS Icon Path") set(QGC_MACOS_ENTITLEMENTS_PATH "${CMAKE_SOURCE_DIR}/deploy/macos/qgroundcontrol.entitlements" CACHE FILEPATH "MacOS Entitlements Path") -# option(QGC_MACOS_UNIVERSAL_BUILD "Build MacOS Universal Build (arm64;x86_64)" ON) # MACOS +# option(QGC_MACOS_UNIVERSAL_BUILD "Build MacOS Universal Build (arm64;x86_64)" ON) # Linux set(QGC_APPIMAGE_ICON_PATH "${CMAKE_SOURCE_DIR}/resources/icons/qgroundcontrol.png" CACHE FILEPATH "AppImage Icon Path") diff --git a/cmake/Install.cmake b/cmake/Install.cmake index d28dceb610d1..63c45a05b71e 100644 --- a/cmake/Install.cmake +++ b/cmake/Install.cmake @@ -9,27 +9,21 @@ install( ) set(deploy_tool_options_arg "") -if(MACOS OR WIN32) - set(deploy_tool_options_arg "-qmldir=${CMAKE_SOURCE_DIR}") - if(MACOS_SIGNING_IDENTITY) +if(Qt6_VERSION VERSION_GREATER_EQUAL 6.7.0 AND (MACOS OR WIN32)) + set(deploy_tool_options_arg -qmldir="${CMAKE_SOURCE_DIR}/src/QMLControls") + if(MACOS AND DEFINED ENV{QGC_MACOS_SIGNING_IDENTITY}) message(STATUS "Signing MacOS Bundle") - set(deploy_tool_options_arg "${deplay_tool_options_arg} -sign-for-notarization=${MACOS_SIGNING_IDENTITY}") + list(APPEND deploy_tool_options_arg -sign-for-notarization=$ENV{QGC_MACOS_SIGNING_IDENTITY}) endif() endif() -# Set extra deploy QML app script options for Qt 6.7.0 and above -set(EXTRA_DEPLOY_QML_APP_SCRIPT_OPTIONS) -if(Qt6_VERSION VERSION_GREATER_EQUAL 6.7.0) - list(APPEND EXTRA_DEPLOY_QML_APP_SCRIPT_OPTIONS DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg}) -endif() - qt_generate_deploy_qml_app_script( TARGET ${CMAKE_PROJECT_NAME} OUTPUT_SCRIPT deploy_script - ${EXTRA_DEPLOY_QML_APP_SCRIPT_OPTIONS} MACOS_BUNDLE_POST_BUILD NO_UNSUPPORTED_PLATFORM_ERROR DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM + DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg} ) install(SCRIPT ${deploy_script}) @@ -75,7 +69,9 @@ elseif(WIN32) install(CODE "set(QGC_WINDOWS_INSTALLER_SCRIPT ${CMAKE_SOURCE_DIR}/deploy/windows/nullsoft_installer.nsi)") install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateWinInstaller.cmake") elseif(MACOS) - install(CODE "set(TARGET_APP_NAME ${QGC_APP_NAME})") - install(CODE "set(MACDEPLOYQT ${Qt6_DIR}/../../../bin/macdeployqt)") + install(CODE " + set(QGC_BUNDLE_PATH $) + set(TARGET_APP_NAME ${CMAKE_PROJECT_NAME}) + ") install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateMacDMG.cmake") endif() diff --git a/custom-example/cmake/CustomOverrides.cmake b/custom-example/cmake/CustomOverrides.cmake index 1dea3240e8d5..28565e10a293 100644 --- a/custom-example/cmake/CustomOverrides.cmake +++ b/custom-example/cmake/CustomOverrides.cmake @@ -1,6 +1,9 @@ set(QGC_APP_NAME "Custom-QGroundControl" CACHE STRING "App Name" FORCE) -set(QGC_MACOS_ICON_PATH "${CMAKE_SOURCE_DIR}/custom/res" CACHE PATH "MacOS Icon Path" FORCE) +if(EXISTS "${CMAKE_SOURCE_DIR}/custom/res/custom_qgroundcontrol.icns") + set(QGC_MACOS_ICON_PATH "${CMAKE_SOURCE_DIR}/custom/custom_qgroundcontrol.icns" CACHE FILEPATH "MacOS Icon Path" FORCE) +endif() + set(QGC_APPIMAGE_ICON_PATH "${CMAKE_SOURCE_DIR}/custom/res/icons/custom_qgroundcontrol.png" CACHE FILEPATH "AppImage Icon Path" FORCE) if(EXISTS ${CMAKE_SOURCE_DIR}/custom/deploy/windows/installheader.bmp) diff --git a/custom-example/res/macx.icns b/custom-example/res/custom_qgroundcontrol.icns similarity index 100% rename from custom-example/res/macx.icns rename to custom-example/res/custom_qgroundcontrol.icns diff --git a/deploy/macos/qgroundcontrol.entitlements b/deploy/macos/qgroundcontrol.entitlements index 1b44cd3cd24f..a8c10726e18b 100644 --- a/deploy/macos/qgroundcontrol.entitlements +++ b/deploy/macos/qgroundcontrol.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client + diff --git a/deploy/macos/macx.icns b/deploy/macos/qgroundcontrol.icns similarity index 100% rename from deploy/macos/macx.icns rename to deploy/macos/qgroundcontrol.icns