From 8a61b03f32590ca64fd12f16fbc005c4b6e83651 Mon Sep 17 00:00:00 2001 From: Doris Verria Date: Wed, 15 Dec 2021 23:40:17 +0100 Subject: Multimedia examples: Add camera and audio input entitlements Apple needs apps to specify proper entitlements in order to grant the executable permissions to use services like camera and microphone. The multimedia examples using microphone and camera were sometimes crashing because of missing entitlements. To fix, add an entitlement file to all examples using these services, and add a post-build command to codesign the executables with the specified entitlements. Task-number: QTBUG-98419 Change-Id: I6a578def1f6a41b4d106ee49c0c32fad304ef3cb Reviewed-by: Alexandru Croitor (cherry picked from commit 767315b2049f0685f12de3418c658313851e8c0f) Reviewed-by: Qt Cherry-pick Bot --- examples/multimedia/audiorecorder/CMakeLists.txt | 11 +++++++++++ examples/multimedia/audiorecorder/audiorecorder.entitlements | 8 ++++++++ examples/multimedia/audiorecorder/audiorecorder.pro | 10 ++++++++++ examples/multimedia/declarative-camera/CMakeLists.txt | 11 +++++++++++ .../declarative-camera/declarative-camera.entitlements | 8 ++++++++ examples/multimedia/declarative-camera/declarative-camera.pro | 10 ++++++++++ examples/multimedia/video/qmlvideo/CMakeLists.txt | 11 +++++++++++ examples/multimedia/video/qmlvideo/qmlvideo.entitlements | 8 ++++++++ examples/multimedia/video/qmlvideo/qmlvideo.pro | 10 ++++++++++ examples/multimedia/video/recorder/CMakeLists.txt | 11 +++++++++++ examples/multimedia/video/recorder/recorder.entitlements | 10 ++++++++++ examples/multimediawidgets/camera/CMakeLists.txt | 8 ++++++++ examples/multimediawidgets/camera/camera.entitlements | 10 ++++++++++ examples/multimediawidgets/camera/camera.pro | 10 ++++++++++ 14 files changed, 136 insertions(+) create mode 100644 examples/multimedia/audiorecorder/audiorecorder.entitlements create mode 100644 examples/multimedia/declarative-camera/declarative-camera.entitlements create mode 100644 examples/multimedia/video/qmlvideo/qmlvideo.entitlements create mode 100644 examples/multimedia/video/recorder/recorder.entitlements create mode 100644 examples/multimediawidgets/camera/camera.entitlements (limited to 'examples') diff --git a/examples/multimedia/audiorecorder/CMakeLists.txt b/examples/multimedia/audiorecorder/CMakeLists.txt index 2e2817d57..de8bd4ffb 100644 --- a/examples/multimedia/audiorecorder/CMakeLists.txt +++ b/examples/multimedia/audiorecorder/CMakeLists.txt @@ -29,6 +29,8 @@ set_target_properties(audiorecorder PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_LIST_DIR}/audiorecorder.entitlements" ) # special case begin target_include_directories(audiorecorder PUBLIC @@ -53,3 +55,12 @@ install(TARGETS audiorecorder BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +if(APPLE AND NOT IOS) + if(NOT CMAKE_GENERATOR STREQUAL "Xcode") + add_custom_command(TARGET audiorecorder + POST_BUILD + COMMAND codesign --sign - --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/audiorecorder.entitlements ${CMAKE_CURRENT_BINARY_DIR}/audiorecorder.app + ) + endif() +endif() diff --git a/examples/multimedia/audiorecorder/audiorecorder.entitlements b/examples/multimedia/audiorecorder/audiorecorder.entitlements new file mode 100644 index 000000000..b572d9c04 --- /dev/null +++ b/examples/multimedia/audiorecorder/audiorecorder.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.device.audio-input + + + diff --git a/examples/multimedia/audiorecorder/audiorecorder.pro b/examples/multimedia/audiorecorder/audiorecorder.pro index dfd0364a4..5de038410 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.pro +++ b/examples/multimedia/audiorecorder/audiorecorder.pro @@ -21,3 +21,13 @@ INSTALLS += target QT+=widgets include(../shared/shared.pri) + +macos { + macx-xcode { + code_sign_entitlements.name = CODE_SIGN_ENTITLEMENTS + code_sign_entitlements.value = $$PWD/$${TARGET}.entitlements + QMAKE_MAC_XCODE_SETTINGS += code_sign_entitlements + } else { + QMAKE_POST_LINK += "codesign --sign - --entitlements $$PWD/$${TARGET}.entitlements $${OUT_PWD}/$${TARGET}.app" + } +} diff --git a/examples/multimedia/declarative-camera/CMakeLists.txt b/examples/multimedia/declarative-camera/CMakeLists.txt index 8abdd6a2a..be903f2b7 100644 --- a/examples/multimedia/declarative-camera/CMakeLists.txt +++ b/examples/multimedia/declarative-camera/CMakeLists.txt @@ -28,6 +28,8 @@ set_target_properties(declarative-camera PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_LIST_DIR}/declarative-camera.entitlements" ) # special case begin target_include_directories(declarative-camera PUBLIC @@ -82,3 +84,12 @@ install(TARGETS declarative-camera BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +if(APPLE AND NOT IOS) + if(NOT CMAKE_GENERATOR STREQUAL "Xcode") + add_custom_command(TARGET declarative-camera + POST_BUILD + COMMAND codesign --sign - --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/declarative-camera.entitlements ${CMAKE_CURRENT_BINARY_DIR}/declarative-camera.app + ) + endif() +endif() diff --git a/examples/multimedia/declarative-camera/declarative-camera.entitlements b/examples/multimedia/declarative-camera/declarative-camera.entitlements new file mode 100644 index 000000000..6cfee69ba --- /dev/null +++ b/examples/multimedia/declarative-camera/declarative-camera.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.device.camera + + + diff --git a/examples/multimedia/declarative-camera/declarative-camera.pro b/examples/multimedia/declarative-camera/declarative-camera.pro index 2d6e2e759..58bb9d76c 100644 --- a/examples/multimedia/declarative-camera/declarative-camera.pro +++ b/examples/multimedia/declarative-camera/declarative-camera.pro @@ -9,3 +9,13 @@ RESOURCES += declarative-camera.qrc target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/declarative-camera INSTALLS += target include(../shared/shared.pri) + +macos { + macx-xcode { + code_sign_entitlements.name = CODE_SIGN_ENTITLEMENTS + code_sign_entitlements.value = $$PWD/$${TARGET}.entitlements + QMAKE_MAC_XCODE_SETTINGS += code_sign_entitlements + } else { + QMAKE_POST_LINK += "codesign --sign - --entitlements $$PWD/$${TARGET}.entitlements $${OUT_PWD}/$${TARGET}.app" + } +} diff --git a/examples/multimedia/video/qmlvideo/CMakeLists.txt b/examples/multimedia/video/qmlvideo/CMakeLists.txt index c3eff7876..516f9b5c3 100644 --- a/examples/multimedia/video/qmlvideo/CMakeLists.txt +++ b/examples/multimedia/video/qmlvideo/CMakeLists.txt @@ -33,6 +33,8 @@ set_target_properties(qmlvideo PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_LIST_DIR}/qmlvideo.entitlements" ) target_compile_definitions(qmlvideo PUBLIC @@ -123,3 +125,12 @@ install(TARGETS qmlvideo BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" ) + +if(APPLE AND NOT IOS) + if(NOT CMAKE_GENERATOR STREQUAL "Xcode") + add_custom_command(TARGET qmlvideo + POST_BUILD + COMMAND codesign --sign - --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/qmlvideo.entitlements ${CMAKE_CURRENT_BINARY_DIR}/qmlvideo.app + ) + endif() +endif() diff --git a/examples/multimedia/video/qmlvideo/qmlvideo.entitlements b/examples/multimedia/video/qmlvideo/qmlvideo.entitlements new file mode 100644 index 000000000..6cfee69ba --- /dev/null +++ b/examples/multimedia/video/qmlvideo/qmlvideo.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.device.camera + + + diff --git a/examples/multimedia/video/qmlvideo/qmlvideo.pro b/examples/multimedia/video/qmlvideo/qmlvideo.pro index 4fa9d2b3b..7d5717c3c 100644 --- a/examples/multimedia/video/qmlvideo/qmlvideo.pro +++ b/examples/multimedia/video/qmlvideo/qmlvideo.pro @@ -85,3 +85,13 @@ INSTALLS += target EXAMPLE_FILES += \ qmlvideo.png \ qmlvideo.svg + +macos { + macx-xcode { + code_sign_entitlements.name = CODE_SIGN_ENTITLEMENTS + code_sign_entitlements.value = $$PWD/$${TARGET}.entitlements + QMAKE_MAC_XCODE_SETTINGS += code_sign_entitlements + } else { + QMAKE_POST_LINK += "codesign --sign - --entitlements $$PWD/$${TARGET}.entitlements $${OUT_PWD}/$${TARGET}.app" + } +} diff --git a/examples/multimedia/video/recorder/CMakeLists.txt b/examples/multimedia/video/recorder/CMakeLists.txt index e885d0abe..a0067cd11 100644 --- a/examples/multimedia/video/recorder/CMakeLists.txt +++ b/examples/multimedia/video/recorder/CMakeLists.txt @@ -31,4 +31,15 @@ target_link_libraries(recorder set_target_properties(recorder PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_LIST_DIR}/recorder.entitlements" ) + +if(APPLE AND NOT IOS) + if(NOT CMAKE_GENERATOR STREQUAL "Xcode") + add_custom_command(TARGET recorder + POST_BUILD + COMMAND codesign --sign - --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/recorder.entitlements ${CMAKE_CURRENT_BINARY_DIR}/recorder.app + ) + endif() +endif() diff --git a/examples/multimedia/video/recorder/recorder.entitlements b/examples/multimedia/video/recorder/recorder.entitlements new file mode 100644 index 000000000..97c1f6d58 --- /dev/null +++ b/examples/multimedia/video/recorder/recorder.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + + diff --git a/examples/multimediawidgets/camera/CMakeLists.txt b/examples/multimediawidgets/camera/CMakeLists.txt index 9d0f6eb7e..53b858f78 100644 --- a/examples/multimediawidgets/camera/CMakeLists.txt +++ b/examples/multimediawidgets/camera/CMakeLists.txt @@ -47,7 +47,15 @@ set_target_properties(camera PROPERTIES if(APPLE AND NOT IOS) set_target_properties(camera PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist.in" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_LIST_DIR}/camera.entitlements" ) + if(NOT CMAKE_GENERATOR STREQUAL "Xcode") + add_custom_command(TARGET camera + POST_BUILD + COMMAND codesign --sign - --entitlements ${CMAKE_CURRENT_SOURCE_DIR}/camera.entitlements ${CMAKE_CURRENT_BINARY_DIR}/camera.app + ) + endif() elseif(IOS) set_target_properties(camera PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ios/Info.plist.in" diff --git a/examples/multimediawidgets/camera/camera.entitlements b/examples/multimediawidgets/camera/camera.entitlements new file mode 100644 index 000000000..97c1f6d58 --- /dev/null +++ b/examples/multimediawidgets/camera/camera.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + + diff --git a/examples/multimediawidgets/camera/camera.pro b/examples/multimediawidgets/camera/camera.pro index e1d98c06e..87590cb2b 100644 --- a/examples/multimediawidgets/camera/camera.pro +++ b/examples/multimediawidgets/camera/camera.pro @@ -38,3 +38,13 @@ include(../../multimedia/shared/shared.pri) ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android OTHER_FILES += android/AndroidManifest.xml + +macos { + macx-xcode { + code_sign_entitlements.name = CODE_SIGN_ENTITLEMENTS + code_sign_entitlements.value = $$PWD/$${TARGET}.entitlements + QMAKE_MAC_XCODE_SETTINGS += code_sign_entitlements + } else { + QMAKE_POST_LINK += "codesign --sign - --entitlements $$PWD/$${TARGET}.entitlements $${OUT_PWD}/$${TARGET}.app" + } +} -- cgit v1.2.3