From 99621310ba663bec14ae239b8e1225b6ffb89365 Mon Sep 17 00:00:00 2001 From: Macbook Date: Tue, 29 Oct 2024 20:24:40 +0700 Subject: [PATCH] fixbug crash build --- client/3rd/OpenVPNAdapter | 2 +- client/CMakeLists.txt | 30 ++++++++++----- client/cmake/macos_ne.cmake | 7 +++- .../AmneziaVPNNetworkExtension.entitlements | 26 +++++++++++++ client/macos/networkextension/CMakeLists.txt | 37 ++++++++++--------- 5 files changed, 73 insertions(+), 29 deletions(-) diff --git a/client/3rd/OpenVPNAdapter b/client/3rd/OpenVPNAdapter index d49262d7..d10da366 160000 --- a/client/3rd/OpenVPNAdapter +++ b/client/3rd/OpenVPNAdapter @@ -1 +1 @@ -Subproject commit d49262d7ac06811f3484ab3ece687e027cb18880 +Subproject commit d10da3661d9ff41725b75292d6a451763e997415 diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 70003301..35369214 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -51,6 +51,8 @@ set(LIBS ${LIBS} if(IOS OR MACOS_NE) set(LIBS ${LIBS} Qt6::Multimedia) endif() +# message("Client desktop build ", ${MACOS_NE}) +#Macos Network Extension doesn't need Widgets if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) message("Run this block when MACOS_NE is not defined or set to FALSE") @@ -60,6 +62,7 @@ endif() qt_standard_project_setup() qt_add_executable(${PROJECT} MANUAL_FINALIZATION) +# TODO error in there if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) message("Run this block when MACOS_NE is not defined or set to FALSE") qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_interface.rep) @@ -180,6 +183,7 @@ else() message("MACOS_NE is OFF") endif() + if(NOT IOS AND NOT MACOS_NE) message(" Add header for non-IOS and non-MACOS_NE") set(HEADERS ${HEADERS} @@ -187,6 +191,7 @@ if(NOT IOS AND NOT MACOS_NE) ) endif() + if(NOT ANDROID) set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.h @@ -332,6 +337,7 @@ if(APPLE) set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ${BUILD_VPN_DEVELOPMENT_TEAM}) set(CMAKE_XCODE_ATTRIBUTE_GROUP_ID_IOS ${BUILD_IOS_GROUP_IDENTIFIER}) + set(MACOSX_DEPLOYMENT_TARGET "12.0") endif() if(LINUX AND NOT ANDROID) @@ -341,8 +347,9 @@ endif() # Macos Network Extension doesn't need if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) - message("Client desktop build") + message("-----> Client desktop build") add_compile_definitions(AMNEZIA_DESKTOP) + message("-----> Add AMNEZIA_DESKTOP") set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/core/ipcclient.h ${CMAKE_CURRENT_LIST_DIR}/core/privileged_process.h @@ -376,6 +383,7 @@ if(IOS) include(cmake/ios.cmake) include(cmake/ios-arch-fixup.cmake) elseif(APPLE AND NOT IOS AND NOT DEFINED MACOS_NE) + # include(cmake/osxtools.cmake) include(cmake/macos.cmake) elseif(APPLE AND NOT IOS AND MACOS_NE) include(cmake/osxtools.cmake) @@ -418,19 +426,23 @@ endif() target_sources(${PROJECT} PRIVATE ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC} ${I18NQRC}) if(MACOS_NE) - # MacOS specific bundle operations + message("Copy MacOS Network Extension files") + message("QT_HOST_PATH: $ENV{QT_MACOS_ROOT_DIR}") + add_custom_command(TARGET ${PROJECT} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory - "$/Contents/Frameworks" - + "$/Contents/Frameworks" COMMAND ${CMAKE_COMMAND} -E copy_directory - "${QT_HOST_PATH}/lib/QtConcurrent.framework" - "$/Contents/Frameworks/QtConcurrent.framework" - - COMMENT "Copying QtConcurrent.framework from QT_HOST_PATH to the bundle's Frameworks directory" + "$ENV{QT_MACOS_ROOT_DIR}/lib/QtConcurrent.framework" + "$/Contents/Frameworks/QtConcurrent.framework" + + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${CMAKE_SOURCE_DIR}/client/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework" + "$/Contents/Frameworks/OpenVPNAdapter.framework" + + COMMENT "Copying QtConcurrent.framework from QT_MACOS_ROOT_DIR to the bundle's Frameworks directory" ) - # MacOS specific application deployment add_custom_command(TARGET ${PROJECT} POST_BUILD COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $ -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR} diff --git a/client/cmake/macos_ne.cmake b/client/cmake/macos_ne.cmake index 69617ea4..d6f6f426 100644 --- a/client/cmake/macos_ne.cmake +++ b/client/cmake/macos_ne.cmake @@ -1,7 +1,7 @@ message("Client ==> MacOS NE build") set_target_properties(${PROJECT} PROPERTIES MACOSX_BUNDLE TRUE) -set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE INTERNAL "" FORCE) +set(CMAKE_OSX_ARCHITECTURES "x86_64") set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15) set(APPLE_PROJECT_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}) @@ -85,6 +85,11 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_APP_EXTENSIONS networkextension XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic + # XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)" + # XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)" + # XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual + # XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "org.amnezia.AmneziaVPNManual" + # XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "org.amnezia.AmneziaVPNManual" ) set_target_properties(${PROJECT} PROPERTIES diff --git a/client/macos/networkextension/AmneziaVPNNetworkExtension.entitlements b/client/macos/networkextension/AmneziaVPNNetworkExtension.entitlements index 1d6ec4a1..6895004e 100644 --- a/client/macos/networkextension/AmneziaVPNNetworkExtension.entitlements +++ b/client/macos/networkextension/AmneziaVPNNetworkExtension.entitlements @@ -16,10 +16,36 @@ group.org.amnezia.AmneziaVPN + com.apple.security.assets.movies.read-write + + com.apple.security.assets.music.read-write + + com.apple.security.assets.pictures.read-write + + com.apple.security.device.audio-input + + com.apple.security.device.bluetooth + + com.apple.security.device.camera + + com.apple.security.device.usb + + com.apple.security.files.downloads.read-write + + com.apple.security.files.user-selected.read-write + com.apple.security.network.client com.apple.security.network.server + com.apple.security.personal-information.addressbook + + com.apple.security.personal-information.calendars + + com.apple.security.personal-information.location + + com.apple.security.print + keychain-access-groups $(AppIdentifierPrefix)org.amnezia.AmneziaVPN.network-extension diff --git a/client/macos/networkextension/CMakeLists.txt b/client/macos/networkextension/CMakeLists.txt index ec20146a..7fc6cd67 100644 --- a/client/macos/networkextension/CMakeLists.txt +++ b/client/macos/networkextension/CMakeLists.txt @@ -4,11 +4,6 @@ set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) add_executable(networkextension) -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/Info.plist.in - ${CMAKE_CURRENT_BINARY_DIR}/Info.plist -) - if(MACOS_NE) message("MACOS_NE is ON") add_definitions(-DQ_OS_IOS) @@ -16,13 +11,14 @@ if(MACOS_NE) else() message("MACOS_NE is OFF") endif() - +message("executable_path is: @executable_path/../../Frameworks") set_target_properties(networkextension PROPERTIES XCODE_PRODUCT_TYPE com.apple.product-type.app-extension BUNDLE_EXTENSION appex MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" - + MACOSX_BUNDLE_INFO_STRING "AmneziaVPNNetworkExtension" + MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPNNetworkExtension" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}.network-extension" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_NAME "${BUILD_IOS_APP_IDENTIFIER}.network-extension" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/AmneziaVPNNetworkExtension.entitlements @@ -32,9 +28,6 @@ set_target_properties(networkextension PROPERTIES XCODE_ATTRIBUTE_APPLICATION_EXTENSION_API_ONLY "YES" XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" - XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" - - XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks" XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic #XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual @@ -46,7 +39,7 @@ set_target_properties(networkextension PROPERTIES #XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "Mac AppStore AmneziaVPN.network-extension" #XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "Mac AppStore AmneziaVPN.network-extension" - XCODE_ATTRIBUTE_INFOPLIST_FILE "${CMAKE_CURRENT_BINARY_DIR}/Info.plist" + XCODE_ATTRIBUTE_INFOPLIST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../../../Frameworks @loader_path/../../../../Frameworks" ) @@ -92,16 +85,24 @@ find_library(FW_LIBRESOLV libresolv.9.tbd) # Set the root directory set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) -# Embedding the framework using CLIENT_ROOT_DIR +set(CMAKE_FRAMEWORK_PATH ${CLIENT_ROOT_DIR}/3rd/OpenVPNAdapter/build/Release-macos) +message("CMAKE_FRAMEWORK_PATH is: ${CMAKE_FRAMEWORK_PATH}") +# framework OpenVPNAdapter set_property(TARGET networkextension PROPERTY XCODE_EMBED_FRAMEWORKS - "${CLIENT_ROOT_DIR}/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework" + ${CMAKE_FRAMEWORK_PATH}/OpenVPNAdapter.framework ) -# Setting the framework search paths using CLIENT_ROOT_DIR -set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS "${CLIENT_ROOT_DIR}/3rd/OpenVPNAdapter/build/Release-macos") +target_link_libraries(networkextension PRIVATE + ${CMAKE_FRAMEWORK_PATH}/OpenVPNAdapter.framework +) -# Linking the framework using CLIENT_ROOT_DIR -target_link_libraries("networkextension" PRIVATE "${CLIENT_ROOT_DIR}/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework") +target_include_directories(networkextension PRIVATE + ${CLIENT_ROOT_DIR}/3rd/OpenVPNAdapter/build/Release-macos/OpenVPNAdapter.framework/Headers +) + +target_link_libraries(networkextension PRIVATE + "-framework OpenVPNAdapter" +) target_link_libraries(networkextension PRIVATE ${FW_LIBRESOLV}) @@ -173,6 +174,6 @@ target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3 message(${CLIENT_ROOT_DIR}) message(${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/libhev-socks5-tunnel.a) -target_link_libraries("networkextension" PRIVATE "${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/libhev-socks5-tunnel.a") +target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/libhev-socks5-tunnel.a) target_include_directories(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/xray/HevSocks5Tunnel.xcframework/macos-arm64_x86_64/Headers) \ No newline at end of file