mac-virtualcam: Add Camera Extension to main CMake plugin project

Camera Extensions require specific entitlements for the hosting app,
which also require a provisioning profile. To avoid breaking local
builds that do not require the camera extension, an additional
entitlements file that will not trigger the provisioning profile
requirement will be used if the virtualcam (but not the Camera
Extension) is configured.
This commit is contained in:
PatTheMav 2023-02-26 23:26:01 +01:00 committed by Ryan Foster
parent aae2f7e8ff
commit 3f85e447a8
7 changed files with 73 additions and 7 deletions

View file

@ -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} \

View file

@ -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"},

View file

@ -0,0 +1,20 @@
<!--?xml version="1.0" encoding="UTF-8"?-->
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>$(TeamIdentifierPrefix)com.obsproject.obs-studio</string>
</array>
</dict>
</plist>

View file

@ -51,7 +51,8 @@ if(NOT XCODE)
add_link_options(LINKER:-dead_strip)
endif()
add_compile_options("$<$<COMPILE_LANGUAGE:C>:${_obs_c_options}>" "$<$<COMPILE_LANGUAGE:CXX>:${_obs_c_options}>")
add_compile_options("$<$<COMPILE_LANGUAGE:C>:${_obs_c_options}>" "$<$<COMPILE_LANGUAGE:CXX>:${_obs_c_options}>"
"$<$<AND:$<COMPILE_LANGUAGE:Swift>,$<CONFIG:DEBUG>>:-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($<$<CONFIG:DEBUG>:DEBUG> $<$<CONFIG:DEBUG>:_DEBUG>)
add_compile_definitions("$<$<AND:$<COMPILE_LANGUAGE:C,CXX>,$<CONFIG:DEBUG>>:DEBUG;_DEBUG>")

View file

@ -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 "$<TARGET_BUNDLE_DIR:mac-camera-extension>"
"$<TARGET_BUNDLE_CONTENT_DIR:${target}>/Library/SystemExtensions/$<TARGET_BUNDLE_DIR_NAME:mac-camera-extension>"
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}

View file

@ -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()

View file

@ -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)