diff --git a/CI/macos/02_build_obs.sh b/CI/macos/02_build_obs.sh index 81f6f38b9..23587da9d 100755 --- a/CI/macos/02_build_obs.sh +++ b/CI/macos/02_build_obs.sh @@ -118,6 +118,8 @@ _configure_obs() { -DCMAKE_INSTALL_PREFIX=${BUILD_DIR}/install \ -DCMAKE_BUILD_TYPE=${BUILD_CONFIG} \ -DOBS_CODESIGN_IDENTITY="${CODESIGN_IDENT:--}" \ + -DOBS_CODESIGN_TEAM="${CODESIGN_TEAM:-}" \ + -DOBS_PROVISIONING_PROFILE="${PROVISIONING_PROFILE:-}" \ ${YOUTUBE_OPTIONS} \ ${TWITCH_OPTIONS} \ ${RESTREAM_OPTIONS} \ diff --git a/CMakePresets.json b/CMakePresets.json index da0120b3c..af75200c0 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -71,6 +71,7 @@ "ENABLE_SPARKLE": true, "OBS_SPARKLE_KEY": {"type": "STRING", "value": ""}, "OBS_CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}", + "OBS_CODESIGN_TEAM": "$penv{CODESIGN_TEAM}", "SPARKLE_APPCAST_URL": {"type": "STRING", "value": "https://obsproject.com/osx_update/updates_arm64_v2.xml"}, "SPARKLE_PUBLIC_KEY": {"type": "STRING", "value": "HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM="}, "VIRTUALCAM_DEVICE_UUID": {"type": "STRING", "value": "7626645E-4425-469E-9D8B-97E0FA59AC75"}, @@ -88,6 +89,7 @@ "ENABLE_SPARKLE": true, "OBS_SPARKLE_KEY": {"type": "STRING", "value": ""}, "OBS_CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}", + "OBS_CODESIGN_TEAM": "$penv{CODESIGN_TEAM}", "SPARKLE_APPCAST_URL": {"type": "STRING", "value": "https://obsproject.com/osx_update/updates_x86_64_v2.xml"}, "SPARKLE_PUBLIC_KEY": {"type": "STRING", "value": "HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM="}, "VIRTUALCAM_DEVICE_UUID": {"type": "STRING", "value": "7626645E-4425-469E-9D8B-97E0FA59AC75"}, diff --git a/UI/cmake/macos/entitlements-extension.plist b/UI/cmake/macos/entitlements-extension.plist new file mode 100644 index 000000000..aad0d6974 --- /dev/null +++ b/UI/cmake/macos/entitlements-extension.plist @@ -0,0 +1,20 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.device.camera + + com.apple.security.device.audio-input + + com.apple.security.cs.disable-library-validation + + com.apple.developer.system-extension.install + + com.apple.security.application-groups + + $(TeamIdentifierPrefix)com.obsproject.obs-studio + + + diff --git a/cmake/macos/compilerconfig.cmake b/cmake/macos/compilerconfig.cmake index 29b035baf..987ea0923 100644 --- a/cmake/macos/compilerconfig.cmake +++ b/cmake/macos/compilerconfig.cmake @@ -51,7 +51,8 @@ if(NOT XCODE) add_link_options(LINKER:-dead_strip) endif() - add_compile_options("$<$:${_obs_c_options}>" "$<$:${_obs_c_options}>") + add_compile_options("$<$:${_obs_c_options}>" "$<$:${_obs_c_options}>" + "$<$,$>:-Onone>") option(ENABLE_COMPILER_TRACE "Enable clang time-trace (requires Ninja)" OFF) mark_as_advanced(ENABLE_COMPILER_TRACE) @@ -69,4 +70,4 @@ if(NOT XCODE) set(CMAKE_COLOR_DIAGNOSTICS ON) endif() -add_compile_definitions($<$:DEBUG> $<$:_DEBUG>) +add_compile_definitions("$<$,$>:DEBUG;_DEBUG>") diff --git a/cmake/macos/helpers.cmake b/cmake/macos/helpers.cmake index 53811a61e..0136630d2 100644 --- a/cmake/macos/helpers.cmake +++ b/cmake/macos/helpers.cmake @@ -79,8 +79,27 @@ function(set_target_properties_obs target) COMMENT "Copy ${executable} to application bundle") endforeach() - _check_entitlements() - configure_file(cmake/macos/exportOptions.plist.in ${CMAKE_BINARY_DIR}/exportOptions.plist) + if(VIRTUALCAM_DEVICE_UUID + AND VIRTUALCAM_SOURCE_UUID + AND VIRTUALCAM_SINK_UUID) + set(entitlements_file "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements-extension.plist") + else() + set(entitlements_file "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist") + endif() + + if(NOT EXISTS "${entitlements_file}") + message(FATAL_ERROR "Target ${target} is missing an entitlements file in its cmake directory.") + endif() + + set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${entitlements_file}") + + if(NOT CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE STREQUAL "Automatic") + set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER + "${OBS_PROVISIONING_PROFILE}") + configure_file(cmake/macos/exportOptions-extension.plist.in ${CMAKE_BINARY_DIR}/exportOptions.plist) + else() + configure_file(cmake/macos/exportOptions.plist.in ${CMAKE_BINARY_DIR}/exportOptions.plist) + endif() add_custom_command( TARGET ${target} @@ -126,16 +145,28 @@ function(set_target_properties_obs target) COMMENT "Add OBS::python import module") endif() + if(TARGET mac-camera-extension) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND + "${CMAKE_COMMAND}" -E copy_directory "$" + "$/Library/SystemExtensions/$" + COMMENT "Add Camera Extension to application bundle") + endif() + _bundle_dependencies(${target}) install(TARGETS ${target} BUNDLE DESTINATION "." COMPONENT Application) + elseif(${target} STREQUAL mac-camera-extension) + set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) else() set_property(TARGET ${target} PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL NO) set_property(GLOBAL APPEND PROPERTY _OBS_EXECUTABLES ${target}) set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) + _add_entitlements() endif() - - _add_entitlements() elseif(target_type STREQUAL SHARED_LIBRARY) set_target_properties( ${target} diff --git a/cmake/macos/xcode.cmake b/cmake/macos/xcode.cmake index cb02bc378..651fab452 100644 --- a/cmake/macos/xcode.cmake +++ b/cmake/macos/xcode.cmake @@ -20,18 +20,27 @@ set(CMAKE_XCODE_ATTRIBUTE_MARKETING_VERSION ${OBS_VERSION_CANONICAL}) # Set deployment target set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET}) +if(NOT OBS_PROVISIONING_PROFILE) + set(OBS_PROVISIONING_PROFILE + "" + CACHE STRING "OBS provisioning profile name for macOS" FORCE) +else() + set(CMAKE_XCODE_ATTRIBUTE_PROVISIONING_PROFILE_NAME "${OBS_PROVISIONING_PROFILE}") +endif() + if(NOT OBS_CODESIGN_TEAM) # Switch to manual codesigning if no codesigning team is provided set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${OBS_CODESIGN_IDENTITY}") else() - if(DEFINED OBS_CODESIGN_IDENTITY AND NOT OBS_CODESIGN_IDENTITY STREQUAL "-") + if(OBS_CODESIGN_IDENTITY AND NOT OBS_CODESIGN_IDENTITY STREQUAL "-") # Switch to manual codesigning if a non-adhoc codesigning identity is provided set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${OBS_CODESIGN_IDENTITY}") else() # Switch to automatic codesigning via valid team ID set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic) + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development") endif() set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${OBS_CODESIGN_TEAM}") endif() diff --git a/plugins/mac-virtualcam/CMakeLists.txt b/plugins/mac-virtualcam/CMakeLists.txt index 1fdca9e4d..05f51700c 100644 --- a/plugins/mac-virtualcam/CMakeLists.txt +++ b/plugins/mac-virtualcam/CMakeLists.txt @@ -19,3 +19,4 @@ target_include_directories(obs-mach-protocol INTERFACE "${CMAKE_CURRENT_SOURCE_D add_subdirectory(src/obs-plugin) add_subdirectory(src/dal-plugin) +add_subdirectory(src/camera-extension)