From 2990508fcf83efb2abac136a4604f258b93b1415 Mon Sep 17 00:00:00 2001 From: vkamn Date: Fri, 22 May 2026 21:49:16 +0800 Subject: [PATCH 1/2] feat: move amnezia hardcode from sources to cmake --- client/CMakeLists.txt | 42 ++++++--- client/amneziaApplication.cpp | 9 +- client/cmake/clientBrandingDefaults.cmake | 90 +++++++++++++++++++ client/cmake/ios.cmake | 26 +++--- client/cmake/macos_ne.cmake | 20 ++--- client/cmake/sources.cmake | 1 + .../api/subscriptionController.cpp | 4 +- client/core/controllers/coreController.cpp | 4 +- .../core/controllers/coreSignalHandlers.cpp | 4 +- client/core/controllers/serversController.cpp | 2 +- client/core/utils/appUiConfig.h.in | 10 +++ client/core/utils/swiftInterop.h | 25 ++++++ client/core/utils/swiftInteropConfig.h.in | 7 ++ client/ios/networkextension/CMakeLists.txt | 54 +++++------ client/macos/networkextension/CMakeLists.txt | 46 +++++----- client/main.cpp | 5 +- client/platforms/ios/StoreKitController.mm | 2 +- client/ui/controllers/qml/pageController.cpp | 3 +- .../ui/controllers/settingsUiController.cpp | 6 +- client/ui/models/serversModel.cpp | 2 +- common/logger/logger.cpp | 8 +- version.h.in | 6 +- 22 files changed, 265 insertions(+), 111 deletions(-) create mode 100644 client/cmake/clientBrandingDefaults.cmake create mode 100644 client/core/utils/appUiConfig.h.in create mode 100644 client/core/utils/swiftInterop.h create mode 100644 client/core/utils/swiftInteropConfig.h.in diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 2f138157d9..db2cad0fbf 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) -set(PROJECT AmneziaVPN) +include(${CMAKE_CURRENT_LIST_DIR}/cmake/clientBrandingDefaults.cmake) + +set(PROJECT ${CLIENT_TARGET_NAME}) project(${PROJECT}) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -66,21 +68,26 @@ qt6_add_resources(QRC ${QRC} ${CMAKE_CURRENT_LIST_DIR}/images/images.qrc ${CMAKE_CURRENT_LIST_DIR}/images/flagKit.qrc ${CMAKE_CURRENT_LIST_DIR}/client_scripts/clientScripts.qrc - ${CMAKE_CURRENT_LIST_DIR}/ui/qml/qml.qrc + ${CLIENT_QML_QRC_FILE} ${CMAKE_CURRENT_LIST_DIR}/server_scripts/serverScripts.qrc + ${CLIENT_EXTRA_QRC} ) # -- i18n begin -set(AMNEZIAVPN_TS_FILES - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru_RU.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_zh_CN.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_fa_IR.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ar_EG.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_my_MM.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_uk_UA.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ur_PK.ts - ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_hi_IN.ts -) +if(CLIENT_TS_FILES) + set(AMNEZIAVPN_TS_FILES ${CLIENT_TS_FILES}) +else() + set(AMNEZIAVPN_TS_FILES + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_ru_RU.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_zh_CN.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_fa_IR.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_ar_EG.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_my_MM.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_uk_UA.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_ur_PK.ts + ${CMAKE_CURRENT_LIST_DIR}/translations/${CLIENT_TS_PREFIX}_hi_IN.ts + ) +endif() qt6_add_translations(${PROJECT} TS_FILES ${AMNEZIAVPN_TS_FILES} @@ -121,6 +128,17 @@ include_directories(mozilla/shared) include_directories(mozilla/models) configure_file(${CMAKE_CURRENT_LIST_DIR}/../version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/core/utils) +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/core/utils/appUiConfig.h.in + ${CMAKE_CURRENT_BINARY_DIR}/core/utils/appUiConfig.h + @ONLY +) +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/core/utils/swiftInteropConfig.h.in + ${CMAKE_CURRENT_BINARY_DIR}/core/utils/swiftInteropConfig.h + @ONLY +) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${PROJECT} PRIVATE "MZ_DEBUG") diff --git a/client/amneziaApplication.cpp b/client/amneziaApplication.cpp index 008cc345d2..5d99ea5bf8 100644 --- a/client/amneziaApplication.cpp +++ b/client/amneziaApplication.cpp @@ -23,6 +23,7 @@ #include "ui/controllers/qml/pageController.h" #include "ui/models/installedAppsModel.h" #include "version.h" +#include "core/utils/appUiConfig.h" #include "platforms/ios/QRCodeReaderBase.h" @@ -98,7 +99,7 @@ void AmneziaApplication::init() { m_engine = new QQmlApplicationEngine; - const QUrl url(QStringLiteral("qrc:/ui/qml/main2.qml")); + const QUrl url(QStringLiteral(APP_QML_ENTRYPOINT)); QObject::connect( m_engine, &QQmlApplicationEngine::objectCreated, this, [this, url](QObject *obj, const QUrl &objUrl) { @@ -138,7 +139,7 @@ void AmneziaApplication::init() m_coreController.reset(new CoreController(m_vpnConnection, m_settings, m_engine)); - m_engine->addImportPath("qrc:/ui/qml/Modules/"); + m_engine->addImportPath(QStringLiteral(APP_QML_IMPORT_PATH)); if (m_parser.isSet(m_optImport)) { const QString data = m_parser.value(m_optImport); @@ -224,7 +225,7 @@ void AmneziaApplication::loadFonts() { QQuickStyle::setStyle("Basic"); - QFontDatabase::addApplicationFont(":/fonts/pt-root-ui_vf.ttf"); + QFontDatabase::addApplicationFont(QStringLiteral(APP_UI_FONT_RESOURCE)); } bool AmneziaApplication::parseCommands() @@ -251,7 +252,7 @@ bool AmneziaApplication::parseCommands() #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(MACOS_NE) void AmneziaApplication::startLocalServer() { - const QString serverName("AmneziaVPNInstance"); + const QString serverName(APP_INSTANCE_NAME); QLocalServer::removeServer(serverName); QLocalServer *server = new QLocalServer(this); diff --git a/client/cmake/clientBrandingDefaults.cmake b/client/cmake/clientBrandingDefaults.cmake new file mode 100644 index 0000000000..d3a789a841 --- /dev/null +++ b/client/cmake/clientBrandingDefaults.cmake @@ -0,0 +1,90 @@ +if(NOT CLIENT_TARGET_NAME) + set(CLIENT_TARGET_NAME "AmneziaVPN" CACHE STRING "Client executable target name") +endif() +if(NOT CLIENT_APPLICATION_NAME) + set(CLIENT_APPLICATION_NAME "AmneziaVPN" CACHE STRING "Application display and executable name") +endif() +if(NOT CLIENT_SERVICE_NAME) + set(CLIENT_SERVICE_NAME "AmneziaVPN-service" CACHE STRING "Service executable name") +endif() +if(NOT CLIENT_ORGANIZATION_NAME) + set(CLIENT_ORGANIZATION_NAME "AmneziaVPN.ORG" CACHE STRING "QSettings organization name") +endif() +if(NOT CLIENT_APP_INSTANCE_NAME) + set(CLIENT_APP_INSTANCE_NAME "AmneziaVPNInstance" CACHE STRING "Single-instance local server name") +endif() +if(NOT CLIENT_QML_ENTRYPOINT) + set(CLIENT_QML_ENTRYPOINT "qrc:/ui/qml/main2.qml" CACHE STRING "Main QML entrypoint URL") +endif() +if(NOT CLIENT_QML_IMPORT_PATH) + set(CLIENT_QML_IMPORT_PATH "qrc:/ui/qml/Modules/" CACHE STRING "Additional QQmlEngine import path") +endif() +if(NOT CLIENT_QML_PAGES_PREFIX) + set(CLIENT_QML_PAGES_PREFIX "qrc:/ui/qml/Pages2/" CACHE STRING "PageController QML pages prefix") +endif() +if(NOT CLIENT_UI_FONT_RESOURCE) + set(CLIENT_UI_FONT_RESOURCE ":/fonts/pt-root-ui_vf.ttf" CACHE STRING "UI font resource path") +endif() +if(NOT CLIENT_SWIFT_MODULE_NAME) + set(CLIENT_SWIFT_MODULE_NAME "${CLIENT_APPLICATION_NAME}" CACHE STRING "Swift module name for Objective-C interop header") +endif() +if(NOT CLIENT_SWIFT_OBJC_HEADER_NAME) + set(CLIENT_SWIFT_OBJC_HEADER_NAME "${CLIENT_SWIFT_MODULE_NAME}-Swift.h" CACHE STRING "Generated Swift Objective-C header name") +endif() +if(NOT CLIENT_NETWORK_EXTENSION_NAME) + set(CLIENT_NETWORK_EXTENSION_NAME "${CLIENT_APPLICATION_NAME}NetworkExtension" CACHE STRING "Display name for Apple network extension targets") +endif() +if(NOT CLIENT_IOS_NE_TARGET_NAME) + set(CLIENT_IOS_NE_TARGET_NAME "networkextension" CACHE STRING "iOS network extension build target name") +endif() +if(NOT CLIENT_MACOS_NE_TARGET_NAME) + set(CLIENT_MACOS_NE_TARGET_NAME "${CLIENT_NETWORK_EXTENSION_NAME}" CACHE STRING "macOS network extension build target name") +endif() +if(NOT CLIENT_IOS_NE_ENTITLEMENTS_FILE) + set(CLIENT_IOS_NE_ENTITLEMENTS_FILE "AmneziaVPNNetworkExtension.entitlements" CACHE STRING "iOS network extension entitlements filename") +endif() +if(NOT CLIENT_MACOS_NE_ENTITLEMENTS_FILE) + set(CLIENT_MACOS_NE_ENTITLEMENTS_FILE "AmneziaVPNNetworkExtension.entitlements" CACHE STRING "macOS network extension entitlements filename") +endif() +if(NOT CLIENT_IOS_LAUNCHSCREEN_FILE) + set(CLIENT_IOS_LAUNCHSCREEN_FILE "AmneziaVPNLaunchScreen.storyboard" CACHE STRING "iOS launch screen storyboard filename") +endif() +if(NOT CLIENT_IOS_APP_ENTITLEMENTS_PATH) + set(CLIENT_IOS_APP_ENTITLEMENTS_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/app/main.entitlements" CACHE FILEPATH "iOS app entitlements file path") +endif() +if(NOT CLIENT_MACOS_APP_ENTITLEMENTS_PATH) + set(CLIENT_MACOS_APP_ENTITLEMENTS_PATH "${CMAKE_CURRENT_LIST_DIR}/../macos/app/app.entitlements" CACHE FILEPATH "macOS app entitlements file path") +endif() +if(NOT CLIENT_IOS_LAUNCHSCREEN_PATH) + set(CLIENT_IOS_LAUNCHSCREEN_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/app/${CLIENT_IOS_LAUNCHSCREEN_FILE}" CACHE FILEPATH "iOS launch screen storyboard path") +endif() +if(NOT CLIENT_IOS_NE_ENTITLEMENTS_PATH) + set(CLIENT_IOS_NE_ENTITLEMENTS_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/networkextension/${CLIENT_IOS_NE_ENTITLEMENTS_FILE}" CACHE FILEPATH "iOS network extension entitlements file path") +endif() +if(NOT CLIENT_MACOS_NE_ENTITLEMENTS_PATH) + set(CLIENT_MACOS_NE_ENTITLEMENTS_PATH "${CMAKE_CURRENT_LIST_DIR}/../macos/networkextension/${CLIENT_MACOS_NE_ENTITLEMENTS_FILE}" CACHE FILEPATH "macOS network extension entitlements file path") +endif() +if(NOT CLIENT_QML_QRC_FILE) + set(CLIENT_QML_QRC_FILE "${CMAKE_CURRENT_LIST_DIR}/../ui/qml/qml.qrc" CACHE FILEPATH "QML resources manifest") +endif() +if(NOT CLIENT_EXTRA_QRC) + set(CLIENT_EXTRA_QRC "" CACHE STRING "Optional semicolon-separated extra QRC files") +endif() +if(NOT CLIENT_TS_PREFIX) + set(CLIENT_TS_PREFIX "amneziavpn" CACHE STRING "Translation filename prefix") +endif() +if(NOT CLIENT_TS_FILES) + set(CLIENT_TS_FILES "" CACHE STRING "Optional semicolon-separated absolute TS file paths") +endif() +if(NOT CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER) + set(CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER "distr ios.org.amnezia.AmneziaVPN" CACHE STRING "iOS app provisioning profile specifier for release") +endif() +if(NOT CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER_DEBUG) + set(CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER_DEBUG "dev ios.org.amnezia.AmneziaVPN" CACHE STRING "iOS app provisioning profile specifier for debug") +endif() +if(NOT CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER) + set(CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER "distr ios.org.amnezia.AmneziaVPN" CACHE STRING "iOS network extension provisioning profile specifier for release") +endif() +if(NOT CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER_DEBUG) + set(CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER_DEBUG "dev ios.org.amnezia.AmneziaVPN" CACHE STRING "iOS network extension provisioning profile specifier for debug") +endif() diff --git a/client/cmake/ios.cmake b/client/cmake/ios.cmake index 86df23d25f..1a43edb67e 100644 --- a/client/cmake/ios.cmake +++ b/client/cmake/ios.cmake @@ -57,18 +57,18 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Info.plist.in MACOSX_BUNDLE_ICON_FILE "AppIcon" - MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" - MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN" + MACOSX_BUNDLE_INFO_STRING "${CLIENT_APPLICATION_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "${CLIENT_APPLICATION_NAME}" MACOSX_BUNDLE_GUI_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/app/main.entitlements" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CLIENT_IOS_APP_ENTITLEMENTS_PATH}" XCODE_ATTRIBUTE_MARKETING_VERSION "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" - XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN" - XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN" + XCODE_ATTRIBUTE_PRODUCT_NAME "${CLIENT_APPLICATION_NAME}" + XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "${CLIENT_APPLICATION_NAME}" XCODE_GENERATE_SCHEME TRUE XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" @@ -76,7 +76,7 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks" - XCODE_EMBED_APP_EXTENSIONS networkextension + XCODE_EMBED_APP_EXTENSIONS ${CLIENT_IOS_NE_TARGET_NAME} ) if(DEFINED DEPLOY) @@ -84,8 +84,8 @@ if(DEFINED DEPLOY) XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual - XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "distr ios.org.amnezia.AmneziaVPN" - XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "dev ios.org.amnezia.AmneziaVPN" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER}" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "${CLIENT_IOS_PROVISIONING_PROFILE_SPECIFIER_DEBUG}" ) else() set_target_properties(${PROJECT} PROPERTIES @@ -97,11 +97,11 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" - XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "AmneziaVPN-Swift.h" + XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "${CLIENT_SWIFT_OBJC_HEADER_NAME}" XCODE_ATTRIBUTE_SWIFT_OBJC_INTEROP_MODE "objcxx" ) set_target_properties(${PROJECT} PROPERTIES - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${BUILD_VPN_DEVELOPMENT_TEAM}" ) target_include_directories(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) target_compile_options(${PROJECT} PRIVATE @@ -123,15 +123,15 @@ target_sources(${PROJECT} PRIVATE ) target_sources(${PROJECT} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard + ${CLIENT_IOS_LAUNCHSCREEN_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy ) set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard + ${CLIENT_IOS_LAUNCHSCREEN_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy ) add_subdirectory(ios/networkextension) -add_dependencies(${PROJECT} networkextension) +add_dependencies(${PROJECT} ${CLIENT_IOS_NE_TARGET_NAME}) diff --git a/client/cmake/macos_ne.cmake b/client/cmake/macos_ne.cmake index ac1796ad08..585e6e8ac1 100644 --- a/client/cmake/macos_ne.cmake +++ b/client/cmake/macos_ne.cmake @@ -67,17 +67,17 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Info.plist.in MACOSX_BUNDLE_ICON_FILE "AppIcon" - MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" - MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN" + MACOSX_BUNDLE_INFO_STRING "${CLIENT_APPLICATION_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "${CLIENT_APPLICATION_NAME}" MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/macos/app/app.entitlements" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CLIENT_MACOS_APP_ENTITLEMENTS_PATH}" XCODE_ATTRIBUTE_MARKETING_VERSION "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" - XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN" - XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN" + XCODE_ATTRIBUTE_PRODUCT_NAME "${CLIENT_APPLICATION_NAME}" + XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "${CLIENT_APPLICATION_NAME}" XCODE_GENERATE_SCHEME TRUE XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" @@ -88,7 +88,7 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks" - XCODE_EMBED_APP_EXTENSIONS AmneziaVPNNetworkExtension + XCODE_EMBED_APP_EXTENSIONS ${CLIENT_MACOS_NE_TARGET_NAME} ) if(DEPLOY) @@ -109,11 +109,11 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" - XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "AmneziaVPN-Swift.h" + XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "${CLIENT_SWIFT_OBJC_HEADER_NAME}" XCODE_ATTRIBUTE_SWIFT_OBJC_INTEROP_MODE "objcxx" ) set_target_properties(${PROJECT} PROPERTIES - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${BUILD_VPN_DEVELOPMENT_TEAM}" ) target_include_directories(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) target_compile_options(${PROJECT} PRIVATE @@ -143,7 +143,7 @@ set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE ) add_subdirectory(macos/networkextension) -add_dependencies(${PROJECT} AmneziaVPNNetworkExtension) +add_dependencies(${PROJECT} ${CLIENT_MACOS_NE_TARGET_NAME}) get_target_property(QtCore_location Qt6::Core LOCATION) message("QtCore_location") @@ -152,5 +152,5 @@ message(${QtCore_location}) get_filename_component(QT_BIN_DIR_DETECTED "${QtCore_location}/../../../../../bin" ABSOLUTE) add_custom_command(TARGET ${PROJECT} POST_BUILD - COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $ -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $ -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR} ) diff --git a/client/cmake/sources.cmake b/client/cmake/sources.cmake index ddc44d47be..1618676192 100644 --- a/client/cmake/sources.cmake +++ b/client/cmake/sources.cmake @@ -62,6 +62,7 @@ set(HEADERS ${HEADERS} ${CLIENT_ROOT_DIR}/ui/utils/qmlUtils.h ${CLIENT_ROOT_DIR}/core/utils/api/apiUtils.h ${CLIENT_ROOT_DIR}/core/utils/osSignalHandler.h + ${CLIENT_ROOT_DIR}/core/utils/swiftInterop.h ${CLIENT_ROOT_DIR}/core/utils/utilities.h ${CLIENT_ROOT_DIR}/core/utils/managementServer.h ${CLIENT_ROOT_DIR}/core/utils/constants.h diff --git a/client/core/controllers/api/subscriptionController.cpp b/client/core/controllers/api/subscriptionController.cpp index 39b30add20..8b9e691c8b 100644 --- a/client/core/controllers/api/subscriptionController.cpp +++ b/client/core/controllers/api/subscriptionController.cpp @@ -31,7 +31,7 @@ #if defined(Q_OS_IOS) || defined(MACOS_NE) #include "platforms/ios/ios_controller.h" - #include + #include "core/utils/swiftInterop.h" #endif using namespace amnezia; @@ -666,7 +666,7 @@ void SubscriptionController::removeApiConfig(const QString &serverId) .arg(hostName) .arg(""); - AmneziaVPN::removeVPNC(vpncName.toStdString()); + SWIFT_INTEROP_NAMESPACE::removeVPNC(vpncName.toStdString()); #endif apiV2->dns1.clear(); diff --git a/client/core/controllers/coreController.cpp b/client/core/controllers/coreController.cpp index 77b951f9e3..4ae2d88212 100644 --- a/client/core/controllers/coreController.cpp +++ b/client/core/controllers/coreController.cpp @@ -18,7 +18,7 @@ #if defined(Q_OS_IOS) #include "platforms/ios/ios_controller.h" - #include + #include "core/utils/swiftInterop.h" #endif CoreController::CoreController(const QSharedPointer &vpnConnection, SecureQSettings* settings, @@ -253,7 +253,7 @@ void CoreController::initAppleController() { #ifdef Q_OS_IOS IosController::Instance()->initialize(); - QTimer::singleShot(0, this, [this]() { AmneziaVPN::toggleScreenshots(m_appSettingsRepository->isScreenshotsEnabled()); }); + QTimer::singleShot(0, this, [this]() { SWIFT_INTEROP_NAMESPACE::toggleScreenshots(m_appSettingsRepository->isScreenshotsEnabled()); }); #endif } diff --git a/client/core/controllers/coreSignalHandlers.cpp b/client/core/controllers/coreSignalHandlers.cpp index 934f20f6ae..b20be137c8 100644 --- a/client/core/controllers/coreSignalHandlers.cpp +++ b/client/core/controllers/coreSignalHandlers.cpp @@ -48,7 +48,7 @@ #ifdef Q_OS_IOS #include "platforms/ios/ios_controller.h" - #include + #include "core/utils/swiftInterop.h" #endif CoreSignalHandlers::CoreSignalHandlers(CoreController* coreController, QObject* parent) @@ -404,7 +404,7 @@ void CoreSignalHandlers::initIosImportHandler() void CoreSignalHandlers::initIosSettingsHandler() { #ifdef Q_OS_IOS - connect(m_coreController->m_appSettingsRepository, &SecureAppSettingsRepository::screenshotsEnabledChanged, [](bool enabled) { AmneziaVPN::toggleScreenshots(enabled); }); + connect(m_coreController->m_appSettingsRepository, &SecureAppSettingsRepository::screenshotsEnabledChanged, [](bool enabled) { SWIFT_INTEROP_NAMESPACE::toggleScreenshots(enabled); }); #endif } diff --git a/client/core/controllers/serversController.cpp b/client/core/controllers/serversController.cpp index e7b71fd4a5..450a9ea6f5 100644 --- a/client/core/controllers/serversController.cpp +++ b/client/core/controllers/serversController.cpp @@ -8,7 +8,7 @@ #include "core/models/serverDescription.h" #if defined(Q_OS_IOS) || defined(MACOS_NE) - #include + #include "core/utils/swiftInterop.h" #endif diff --git a/client/core/utils/appUiConfig.h.in b/client/core/utils/appUiConfig.h.in new file mode 100644 index 0000000000..06f1d5ac73 --- /dev/null +++ b/client/core/utils/appUiConfig.h.in @@ -0,0 +1,10 @@ +#ifndef APP_UI_CONFIG_H +#define APP_UI_CONFIG_H + +#define APP_INSTANCE_NAME "@CLIENT_APP_INSTANCE_NAME@" +#define APP_QML_ENTRYPOINT "@CLIENT_QML_ENTRYPOINT@" +#define APP_QML_IMPORT_PATH "@CLIENT_QML_IMPORT_PATH@" +#define APP_QML_PAGES_PREFIX "@CLIENT_QML_PAGES_PREFIX@" +#define APP_UI_FONT_RESOURCE "@CLIENT_UI_FONT_RESOURCE@" + +#endif diff --git a/client/core/utils/swiftInterop.h b/client/core/utils/swiftInterop.h new file mode 100644 index 0000000000..f5d48bf292 --- /dev/null +++ b/client/core/utils/swiftInterop.h @@ -0,0 +1,25 @@ +#ifndef SWIFTINTEROP_H +#define SWIFTINTEROP_H + +#if defined(Q_OS_IOS) || defined(MACOS_NE) +#include "core/utils/swiftInteropConfig.h" + +#ifndef SWIFT_INTEROP_OBJC_HEADER +#ifdef AMNEZIA_SWIFT_OBJC_HEADER +#define SWIFT_INTEROP_OBJC_HEADER AMNEZIA_SWIFT_OBJC_HEADER +#else +#define SWIFT_INTEROP_OBJC_HEADER "AmneziaVPN-Swift.h" +#endif +#endif +#ifndef SWIFT_INTEROP_NAMESPACE +#ifdef AMNEZIA_SWIFT_NAMESPACE +#define SWIFT_INTEROP_NAMESPACE AMNEZIA_SWIFT_NAMESPACE +#else +#define SWIFT_INTEROP_NAMESPACE AmneziaVPN +#endif +#endif + +#include SWIFT_INTEROP_OBJC_HEADER +#endif + +#endif diff --git a/client/core/utils/swiftInteropConfig.h.in b/client/core/utils/swiftInteropConfig.h.in new file mode 100644 index 0000000000..cb8d02d026 --- /dev/null +++ b/client/core/utils/swiftInteropConfig.h.in @@ -0,0 +1,7 @@ +#ifndef SWIFT_INTEROP_CONFIG_H +#define SWIFT_INTEROP_CONFIG_H + +#define SWIFT_INTEROP_OBJC_HEADER "@CLIENT_SWIFT_OBJC_HEADER_NAME@" +#define SWIFT_INTEROP_NAMESPACE @CLIENT_SWIFT_MODULE_NAME@ + +#endif diff --git a/client/ios/networkextension/CMakeLists.txt b/client/ios/networkextension/CMakeLists.txt index 4da051897e..696c4aed9d 100644 --- a/client/ios/networkextension/CMakeLists.txt +++ b/client/ios/networkextension/CMakeLists.txt @@ -2,24 +2,24 @@ enable_language(Swift) set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) -add_executable(networkextension) -set_target_properties(networkextension PROPERTIES +add_executable(${CLIENT_IOS_NE_TARGET_NAME}) +set_target_properties(${CLIENT_IOS_NE_TARGET_NAME} PROPERTIES XCODE_PRODUCT_TYPE com.apple.product-type.app-extension BUNDLE_EXTENSION appex MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in - MACOSX_BUNDLE_INFO_STRING "AmneziaVPNNetworkExtension" - MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPNNetworkExtension" + MACOSX_BUNDLE_INFO_STRING "${CLIENT_NETWORK_EXTENSION_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "${CLIENT_NETWORK_EXTENSION_NAME}" MACOSX_BUNDLE_GUI_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}.network-extension" MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}.network-extension" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/AmneziaVPNNetworkExtension.entitlements + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CLIENT_IOS_NE_ENTITLEMENTS_PATH} XCODE_ATTRIBUTE_MARKETING_VERSION "${APP_MAJOR_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${BUILD_ID}" - XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPNNetworkExtension" + XCODE_ATTRIBUTE_PRODUCT_NAME "${CLIENT_NETWORK_EXTENSION_NAME}" XCODE_ATTRIBUTE_APPLICATION_EXTENSION_API_ONLY "YES" XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" @@ -29,20 +29,20 @@ set_target_properties(networkextension PROPERTIES ) if(DEPLOY) - set_target_properties(networkextension PROPERTIES + set_target_properties(${CLIENT_IOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual - XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "distr ios.org.amnezia.AmneziaVPN" - XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "dev ios.org.amnezia.AmneziaVPN" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "${CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER}" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "${CLIENT_IOS_NE_PROVISIONING_PROFILE_SPECIFIER_DEBUG}" ) else() - set_target_properties(networkextension PROPERTIES + set_target_properties(${CLIENT_IOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic ) endif() -set_target_properties(networkextension PROPERTIES +set_target_properties(${CLIENT_IOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/WireGuardNetworkExtension-Bridging-Header.h" @@ -50,8 +50,8 @@ set_target_properties(networkextension PROPERTIES XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" ) -set_target_properties("networkextension" PROPERTIES - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" +set_target_properties("${CLIENT_IOS_NE_TARGET_NAME}" PROPERTIES + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${BUILD_VPN_DEVELOPMENT_TEAM}" ) find_library(FW_ASSETS_LIBRARY AssetsLibrary) @@ -59,17 +59,17 @@ find_library(FW_MOBILE_CORE MobileCoreServices) find_library(FW_UI_KIT UIKit) find_library(FW_LIBRESOLV libresolv.9.tbd) -target_link_libraries(networkextension PRIVATE ${FW_ASSETS_LIBRARY}) -target_link_libraries(networkextension PRIVATE ${FW_MOBILE_CORE}) -target_link_libraries(networkextension PRIVATE ${FW_UI_KIT}) -target_link_libraries(networkextension PRIVATE ${FW_LIBRESOLV}) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${FW_ASSETS_LIBRARY}) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${FW_MOBILE_CORE}) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${FW_UI_KIT}) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${FW_LIBRESOLV}) -target_compile_options(networkextension PRIVATE -DGROUP_ID=\"${BUILD_IOS_GROUP_IDENTIFIER}\") -target_compile_options(networkextension PRIVATE -DNETWORK_EXTENSION=1) +target_compile_options(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE -DGROUP_ID=\"${BUILD_IOS_GROUP_IDENTIFIER}\") +target_compile_options(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE -DNETWORK_EXTENSION=1) set(WG_APPLE_SOURCE_DIR ${CLIENT_ROOT_DIR}/3rd/amneziawg-apple/Sources) -target_sources(networkextension PRIVATE +target_sources(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${WG_APPLE_SOURCE_DIR}/WireGuardKit/WireGuardAdapter.swift ${WG_APPLE_SOURCE_DIR}/WireGuardKit/PacketTunnelSettingsGenerator.swift ${WG_APPLE_SOURCE_DIR}/WireGuardKit/DNSResolver.swift @@ -102,22 +102,22 @@ target_sources(networkextension PRIVATE ${CLIENT_ROOT_DIR}/platforms/ios/iosglue.mm ) -target_sources(networkextension PRIVATE +target_sources(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/PrivacyInfo.xcprivacy ) -set_property(TARGET networkextension APPEND PROPERTY RESOURCE +set_property(TARGET ${CLIENT_IOS_NE_TARGET_NAME} APPEND PROPERTY RESOURCE ${CMAKE_CURRENT_SOURCE_DIR}/PrivacyInfo.xcprivacy ) -target_include_directories(networkextension PRIVATE ${CLIENT_ROOT_DIR}) -target_include_directories(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +target_include_directories(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${CLIENT_ROOT_DIR}) +target_include_directories(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) find_package(openvpnadapter REQUIRED) -target_link_libraries(networkextension PRIVATE amnezia::openvpnadapter) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE amnezia::openvpnadapter) find_package(awg-apple REQUIRED) -target_link_libraries(networkextension PRIVATE amnezia::awg-apple) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE amnezia::awg-apple) find_package(hev-socks5-tunnel REQUIRED) -target_link_libraries(networkextension PRIVATE heiher::hev-socks5-tunnel) +target_link_libraries(${CLIENT_IOS_NE_TARGET_NAME} PRIVATE heiher::hev-socks5-tunnel) diff --git a/client/macos/networkextension/CMakeLists.txt b/client/macos/networkextension/CMakeLists.txt index 82c7965378..14bb8c90c3 100644 --- a/client/macos/networkextension/CMakeLists.txt +++ b/client/macos/networkextension/CMakeLists.txt @@ -1,23 +1,23 @@ enable_language(Swift) -message("Client message >> macos build >> AmneziaVPNNetworkExtension") +message("Client message >> macos build >> ${CLIENT_MACOS_NE_TARGET_NAME}") set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) -add_executable(AmneziaVPNNetworkExtension) +add_executable(${CLIENT_MACOS_NE_TARGET_NAME}) message("executable_path is: @executable_path/../../Frameworks") -set_target_properties(AmneziaVPNNetworkExtension PROPERTIES +set_target_properties(${CLIENT_MACOS_NE_TARGET_NAME} PROPERTIES XCODE_PRODUCT_TYPE com.apple.product-type.app-extension # MACOSX_BUNDLE YES BUNDLE_EXTENSION appex MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" - MACOSX_BUNDLE_INFO_STRING "AmneziaVPNNetworkExtension" - MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPNNetworkExtension" + MACOSX_BUNDLE_INFO_STRING "${CLIENT_NETWORK_EXTENSION_NAME}" + MACOSX_BUNDLE_BUNDLE_NAME "${CLIENT_NETWORK_EXTENSION_NAME}" 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 + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CLIENT_MACOS_NE_ENTITLEMENTS_PATH} XCODE_ATTRIBUTE_MARKETING_VERSION "${APP_MAJOR_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" - XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPNNetworkExtension" + XCODE_ATTRIBUTE_PRODUCT_NAME "${CLIENT_NETWORK_EXTENSION_NAME}" XCODE_ATTRIBUTE_APPLICATION_EXTENSION_API_ONLY "YES" XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" @@ -29,7 +29,7 @@ set_target_properties(AmneziaVPNNetworkExtension PROPERTIES if(DEPLOY) message("DEPLOY is ON") - set_target_properties(AmneziaVPNNetworkExtension PROPERTIES + set_target_properties(${CLIENT_MACOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual @@ -37,12 +37,12 @@ if(DEPLOY) XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "dev macos.org.amnezia.amneziaVPN.NE" ) else() - set_target_properties(AmneziaVPNNetworkExtension PROPERTIES + set_target_properties(${CLIENT_MACOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic ) endif() -set_target_properties(AmneziaVPNNetworkExtension PROPERTIES +set_target_properties(${CLIENT_MACOS_NE_TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/WireGuardNetworkExtension-Bridging-Header.h" @@ -50,8 +50,8 @@ set_target_properties(AmneziaVPNNetworkExtension PROPERTIES XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" ) -set_target_properties("AmneziaVPNNetworkExtension" PROPERTIES - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" +set_target_properties("${CLIENT_MACOS_NE_TARGET_NAME}" PROPERTIES + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${BUILD_VPN_DEVELOPMENT_TEAM}" ) find_library(FW_ASSETS_LIBRARY AssetsLibrary) @@ -63,17 +63,17 @@ find_library(FW_LIBRESOLV libresolv.9.tbd) # Set the root directory set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) -target_link_libraries(AmneziaVPNNetworkExtension PRIVATE ${FW_LIBRESOLV}) +target_link_libraries(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE ${FW_LIBRESOLV}) -target_compile_options(AmneziaVPNNetworkExtension PRIVATE -DGROUP_ID=\"${BUILD_IOS_GROUP_IDENTIFIER}\") -target_compile_options(AmneziaVPNNetworkExtension PRIVATE -DNETWORK_EXTENSION=1) +target_compile_options(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE -DGROUP_ID=\"${BUILD_IOS_GROUP_IDENTIFIER}\") +target_compile_options(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE -DNETWORK_EXTENSION=1) set(WG_APPLE_SOURCE_DIR ${CLIENT_ROOT_DIR}/3rd/amneziawg-apple/Sources) message("WG_APPLE_SOURCE_DIR is: ${WG_APPLE_SOURCE_DIR}") message("CLIENT_ROOT_DIR is: ${CLIENT_ROOT_DIR}") -target_sources(AmneziaVPNNetworkExtension PRIVATE +target_sources(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE ${WG_APPLE_SOURCE_DIR}/WireGuardKit/WireGuardAdapter.swift ${WG_APPLE_SOURCE_DIR}/WireGuardKit/PacketTunnelSettingsGenerator.swift ${WG_APPLE_SOURCE_DIR}/WireGuardKit/DNSResolver.swift @@ -106,22 +106,22 @@ target_sources(AmneziaVPNNetworkExtension PRIVATE ${CLIENT_ROOT_DIR}/platforms/ios/XrayConfig.swift ) -target_sources(AmneziaVPNNetworkExtension PRIVATE +target_sources(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/PrivacyInfo.xcprivacy ) -set_property(TARGET AmneziaVPNNetworkExtension APPEND PROPERTY RESOURCE +set_property(TARGET ${CLIENT_MACOS_NE_TARGET_NAME} APPEND PROPERTY RESOURCE ${CMAKE_CURRENT_SOURCE_DIR}/PrivacyInfo.xcprivacy ) -target_include_directories(AmneziaVPNNetworkExtension PRIVATE ${CLIENT_ROOT_DIR}) -target_include_directories(AmneziaVPNNetworkExtension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +target_include_directories(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE ${CLIENT_ROOT_DIR}) +target_include_directories(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) find_package(openvpnadapter REQUIRED) -target_link_libraries(AmneziaVPNNetworkExtension PRIVATE amnezia::openvpnadapter) +target_link_libraries(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE amnezia::openvpnadapter) find_package(awg-apple REQUIRED) -target_link_libraries(AmneziaVPNNetworkExtension PRIVATE amnezia::awg-apple) +target_link_libraries(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE amnezia::awg-apple) find_package(hev-socks5-tunnel REQUIRED) -target_link_libraries(AmneziaVPNNetworkExtension PRIVATE heiher::hev-socks5-tunnel) +target_link_libraries(${CLIENT_MACOS_NE_TARGET_NAME} PRIVATE heiher::hev-socks5-tunnel) diff --git a/client/main.cpp b/client/main.cpp index a2c66f828b..45a0b370c2 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -5,6 +5,7 @@ #include "amneziaApplication.h" #include "core/utils/osSignalHandler.h" #include "core/utils/migrations.h" +#include "core/utils/appUiConfig.h" #include "version.h" #ifdef Q_OS_WIN @@ -19,9 +20,9 @@ bool isAnotherInstanceRunning() { QLocalSocket socket; - socket.connectToServer("AmneziaVPNInstance"); + socket.connectToServer(APP_INSTANCE_NAME); if (socket.waitForConnected(500)) { - qWarning() << "AmneziaVPN is already running"; + qWarning() << APPLICATION_NAME << "is already running"; return true; } return false; diff --git a/client/platforms/ios/StoreKitController.mm b/client/platforms/ios/StoreKitController.mm index 14a1e39a44..a6f25d8870 100644 --- a/client/platforms/ios/StoreKitController.mm +++ b/client/platforms/ios/StoreKitController.mm @@ -4,7 +4,7 @@ #import "StoreKitController.h" #import -#import +#import "core/utils/swiftInterop.h" #include #include diff --git a/client/ui/controllers/qml/pageController.cpp b/client/ui/controllers/qml/pageController.cpp index b51ece70b0..94d2d67d70 100644 --- a/client/ui/controllers/qml/pageController.cpp +++ b/client/ui/controllers/qml/pageController.cpp @@ -2,6 +2,7 @@ #include "ui/utils/converter.h" #include "core/utils/errorStrings.h" +#include "core/utils/appUiConfig.h" #if defined(MACOS_NE) #include "platforms/ios/ios_controller.h" #endif @@ -63,7 +64,7 @@ QString PageController::getPagePath(PageLoader::PageEnum page) { QMetaEnum metaEnum = QMetaEnum::fromType(); QString pageName = metaEnum.valueToKey(static_cast(page)); - return "qrc:/ui/qml/Pages2/" + pageName + ".qml"; + return QStringLiteral(APP_QML_PAGES_PREFIX) + pageName + QStringLiteral(".qml"); } void PageController::closeWindow() diff --git a/client/ui/controllers/settingsUiController.cpp b/client/ui/controllers/settingsUiController.cpp index 6037aed76a..84d4e39427 100644 --- a/client/ui/controllers/settingsUiController.cpp +++ b/client/ui/controllers/settingsUiController.cpp @@ -17,7 +17,7 @@ #endif #if defined(Q_OS_IOS) || defined(MACOS_NE) - #include + #include "core/utils/swiftInterop.h" #endif SettingsUiController::SettingsUiController(SettingsController* settingsController, @@ -83,7 +83,7 @@ void SettingsUiController::toggleLogging(bool enable) { m_settingsController->toggleLogging(enable); #if defined(Q_OS_IOS) - AmneziaVPN::toggleLogging(enable); + SWIFT_INTEROP_NAMESPACE::toggleLogging(enable); #endif if (enable == true) { qInfo().noquote() << QString("Logging has enabled on %1 version %2 %3").arg(APPLICATION_NAME, APP_VERSION, GIT_COMMIT_HASH); @@ -182,7 +182,7 @@ void SettingsUiController::clearSettings() emit changeSettingsFinished(tr("All settings have been reset to default values")); #if defined(Q_OS_IOS) || defined(MACOS_NE) - AmneziaVPN::clearSettings(); + SWIFT_INTEROP_NAMESPACE::clearSettings(); #endif } diff --git a/client/ui/models/serversModel.cpp b/client/ui/models/serversModel.cpp index 018146f997..e2e51600a0 100644 --- a/client/ui/models/serversModel.cpp +++ b/client/ui/models/serversModel.cpp @@ -13,7 +13,7 @@ #include "core/utils/networkUtilities.h" #if defined(Q_OS_IOS) || defined(MACOS_NE) - #include + #include "core/utils/swiftInterop.h" #endif #include "core/utils/api/apiUtils.h" diff --git a/common/logger/logger.cpp b/common/logger/logger.cpp index 3ef0219c08..c4b7a4b314 100644 --- a/common/logger/logger.cpp +++ b/common/logger/logger.cpp @@ -17,7 +17,7 @@ #endif #ifdef Q_OS_IOS - #include + #include "core/utils/swiftInterop.h" #endif QFile Logger::m_file; @@ -146,7 +146,7 @@ QString Logger::getLogFile() QString qtLog = file.readAll(); #ifdef Q_OS_IOS - return QString().fromStdString(AmneziaVPN::swiftUpdateLogData(qtLog.toStdString())); + return QString().fromStdString(SWIFT_INTEROP_NAMESPACE::swiftUpdateLogData(qtLog.toStdString())); #else return qtLog; #endif @@ -163,7 +163,7 @@ QString Logger::getServiceLogFile() QString qtLog = file.readAll(); #ifdef Q_OS_IOS - return QString().fromStdString(AmneziaVPN::swiftUpdateLogData(qtLog.toStdString())); + return QString().fromStdString(SWIFT_INTEROP_NAMESPACE::swiftUpdateLogData(qtLog.toStdString())); #else return qtLog; #endif @@ -194,7 +194,7 @@ void Logger::clearLogs(bool isServiceLogger) file.close(); #ifdef Q_OS_IOS - AmneziaVPN::swiftDeleteLog(); + SWIFT_INTEROP_NAMESPACE::swiftDeleteLog(); #endif if (isLogActive) { diff --git a/version.h.in b/version.h.in index 1421bd6872..d5eaf0486f 100644 --- a/version.h.in +++ b/version.h.in @@ -9,8 +9,8 @@ #define APP_MAJOR_VERSION "@APP_MAJOR_VERSION@" #endif -#define APPLICATION_NAME "AmneziaVPN" -#define SERVICE_NAME "AmneziaVPN-service" -#define ORGANIZATION_NAME "AmneziaVPN.ORG" +#define APPLICATION_NAME "@CLIENT_APPLICATION_NAME@" +#define SERVICE_NAME "@CLIENT_SERVICE_NAME@" +#define ORGANIZATION_NAME "@CLIENT_ORGANIZATION_NAME@" #endif // VERSION_H From 8c72dd1072ea7212036bf6c7a57ea587b5ab176a Mon Sep 17 00:00:00 2001 From: vkamn Date: Mon, 25 May 2026 16:48:27 +0800 Subject: [PATCH 2/2] feat: move amnezia hardcode from sources to cmake --- CMakeLists.txt | 4 +++- client/CMakeLists.txt | 3 +++ client/cmake/clientBrandingDefaults.cmake | 6 ++++++ client/cmake/ios.cmake | 2 +- client/platforms/ios/StoreKitController.mm | 1 + client/secureQSettings.cpp | 5 ++++- 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c01a6e229f..7a24393c1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,9 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(PROJECT AmneziaVPN) -set(AMNEZIAVPN_VERSION 4.9.0.0) +if(NOT AMNEZIAVPN_VERSION) + set(AMNEZIAVPN_VERSION 4.9.0.0 CACHE STRING "Client app version") +endif() set(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP ON CACHE BOOL "" FORCE) set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index db2cad0fbf..bdad1348a9 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -58,6 +58,9 @@ qt_add_executable(${PROJECT} MANUAL_FINALIZATION) target_include_directories(${PROJECT} PUBLIC $ ) +target_compile_definitions(${PROJECT} PRIVATE + CLIENT_KEYCHAIN_NAME_STR=\"${CLIENT_KEYCHAIN_NAME}\" +) if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_interface.rep) diff --git a/client/cmake/clientBrandingDefaults.cmake b/client/cmake/clientBrandingDefaults.cmake index d3a789a841..7692f27dd2 100644 --- a/client/cmake/clientBrandingDefaults.cmake +++ b/client/cmake/clientBrandingDefaults.cmake @@ -13,6 +13,9 @@ endif() if(NOT CLIENT_APP_INSTANCE_NAME) set(CLIENT_APP_INSTANCE_NAME "AmneziaVPNInstance" CACHE STRING "Single-instance local server name") endif() +if(NOT CLIENT_KEYCHAIN_NAME) + set(CLIENT_KEYCHAIN_NAME "${CLIENT_APPLICATION_NAME}-Keychain" CACHE STRING "QtKeychain service name used for encrypted settings keys") +endif() if(NOT CLIENT_QML_ENTRYPOINT) set(CLIENT_QML_ENTRYPOINT "qrc:/ui/qml/main2.qml" CACHE STRING "Main QML entrypoint URL") endif() @@ -58,6 +61,9 @@ endif() if(NOT CLIENT_IOS_LAUNCHSCREEN_PATH) set(CLIENT_IOS_LAUNCHSCREEN_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/app/${CLIENT_IOS_LAUNCHSCREEN_FILE}" CACHE FILEPATH "iOS launch screen storyboard path") endif() +if(NOT CLIENT_IOS_MEDIA_ASSETS_PATH) + set(CLIENT_IOS_MEDIA_ASSETS_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/app/Media.xcassets" CACHE FILEPATH "iOS app Media.xcassets path") +endif() if(NOT CLIENT_IOS_NE_ENTITLEMENTS_PATH) set(CLIENT_IOS_NE_ENTITLEMENTS_PATH "${CMAKE_CURRENT_LIST_DIR}/../ios/networkextension/${CLIENT_IOS_NE_ENTITLEMENTS_FILE}" CACHE FILEPATH "iOS network extension entitlements file path") endif() diff --git a/client/cmake/ios.cmake b/client/cmake/ios.cmake index 1a43edb67e..d73ca06127 100644 --- a/client/cmake/ios.cmake +++ b/client/cmake/ios.cmake @@ -124,7 +124,7 @@ target_sources(${PROJECT} PRIVATE target_sources(${PROJECT} PRIVATE ${CLIENT_IOS_LAUNCHSCREEN_PATH} - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets + ${CLIENT_IOS_MEDIA_ASSETS_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy ) diff --git a/client/platforms/ios/StoreKitController.mm b/client/platforms/ios/StoreKitController.mm index a6f25d8870..8fc1f10710 100644 --- a/client/platforms/ios/StoreKitController.mm +++ b/client/platforms/ios/StoreKitController.mm @@ -4,6 +4,7 @@ #import "StoreKitController.h" #import +#include #import "core/utils/swiftInterop.h" #include diff --git a/client/secureQSettings.cpp b/client/secureQSettings.cpp index 6c6c6b0a7a..3879da29bc 100644 --- a/client/secureQSettings.cpp +++ b/client/secureQSettings.cpp @@ -18,7 +18,10 @@ using namespace QKeychain; namespace { constexpr const char *settingsKeyTag = "settingsKeyTag"; constexpr const char *settingsIvTag = "settingsIvTag"; - constexpr const char *keyChainName = "AmneziaVPN-Keychain"; +#ifndef CLIENT_KEYCHAIN_NAME_STR +#define CLIENT_KEYCHAIN_NAME_STR "AmneziaVPN-Keychain" +#endif + constexpr const char *keyChainName = CLIENT_KEYCHAIN_NAME_STR; } SecureQSettings::SecureQSettings(const QString &organization, const QString &application, QObject *parent, bool enableEncryption)