diff --git a/.gitignore b/.gitignore index 562b2ee70..88a3b3977 100644 --- a/.gitignore +++ b/.gitignore @@ -129,4 +129,4 @@ captures/ client/3rd/ShadowSocks/ss_ios.xcconfig # UML generated pics -out/ \ No newline at end of file +out/ diff --git a/AmneziaVPN.pro b/AmneziaVPN.pro deleted file mode 100644 index eea6d0342..000000000 --- a/AmneziaVPN.pro +++ /dev/null @@ -1,6 +0,0 @@ -TEMPLATE = subdirs -SUBDIRS = client - -!ios:!android { - SUBDIRS += service -} diff --git a/CMakeLists.txt b/CMakeLists.txt index f1e5d37cc..84084e389 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,13 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) set(PROJECT AmneziaVPN) -project(${PROJECT}) + +project(${PROJECT} VERSION 3.0.7.1 + DESCRIPTION "AmneziaVPN" + HOMEPAGE_URL "https://amnezia.org/" +) +set(RELEASE_DATE "2023-05-15") +set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}) if(ANDROID) set(QT_ANDROID_BUILD_ALL_ABIS ON) @@ -15,4 +21,6 @@ add_subdirectory(client) if(NOT IOS AND NOT ANDROID) add_subdirectory(service) + + include(${CMAKE_SOURCE_DIR}/deploy/installer/config.cmake) endif() diff --git a/README.md b/README.md index 698aba76f..61746d48b 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,9 @@ Amnezia is a VPN client with the key feature of deploying your own VPN server on ## Features - Very easy to use - enter your ip address, ssh login and password, and Amnezia client will automatically install VPN docker containers to your server and connect to VPN. -- OpenVPN and OpenVPN over ShadowSocks protocols support. -- Custom VPN routing mode support - add any sites to client to enable VPN only for them. -- Windows and MacOS support. -- Unsecure sharing connection profile for family use. +- OpenVPN, ShadowSocks, WireGuard, IKEv2 protocols support. +- Split tunneling support - add any sites to client to enable VPN only for them (only for desktops) +- Windows, MacOS, Linux, Android, iOS releases. ## Tech @@ -20,7 +19,7 @@ AmneziaVPN uses a number of open source projects to work: - [OpenVPN](https://openvpn.net/) - [ShadowSocks](https://shadowsocks.org/) - [Qt](https://www.qt.io/) -- [QtSsh](https://github.com/jaredtao/QtSsh) - forked form Qt Creator +- [LibSsh](https://libssh.org) - forked form Qt Creator - and more... ## Checking out the source code @@ -36,39 +35,35 @@ git submodule update --init Want to contribute? Welcome! ### Building sources and deployment -Easiest way to build your own executables - is to fork project and configure [Travis CI](https://travis-ci.com/) -Or you can build sources manually using Qt Creator. Qt >= 14.2 supported. -Look to the `build_macos.sh` and `build_windows.bat` scripts in `deploy` folder for details. +Look deploy folder for build scripts. ### How to build iOS app from source code on MacOS -1. First, make sure you have [XCode](https://developer.apple.com/xcode/) installed, -at least version 12 or higher. +1. First, make sure you have [XCode](https://developer.apple.com/xcode/) installed, at least version 14 or higher. -2. We use `qmake` to generate the XCode project and then we "patch" it to add -extra components such as the wireguard, the browser bridge and so on. We patch -the XCode project using [xcodeproj](https://github.com/CocoaPods/Xcodeproj). To -install it: -```bash -gem install xcodeproj # probably you want to run this command with `sudo` -``` -3. You also need to install go >= v1.16. If you don't have it done already, -download go from the [official website](https://golang.org/dl/) or use Homebrew. -Latest version is recommended. +2. We use QT to generate the XCode project. we need QT version 6.4. Install QT for macos in [here](https://doc.qt.io/qt-6/macos.html) -4. Navigate inside client folder and generate the XCode project using our script: +3. Install cmake is require. We recommend cmake version 3.25. You can install cmake in [here](https://cmake.org/download/) + +4. You also need to install go >= v1.16. If you don't have it done already, +download go from the [official website](https://golang.org/dl/) or use Homebrew. +Latest version is recommended. Install gomobile ```bash -cd client -./scripts/apple_compile.sh ios +export PATH=$PATH:~/go/bin +go install golang.org/x/mobile/cmd/gomobile@latest +gomobile init ``` -If you have more than one version of Qt installed, you'll most likely get -a "`qmake` cannot be found in your `$PATH`" error. In this case run this script -using QT\IOS\_BIN env to set the path for the Qt5 macos build bin folder. -For example, the path could look like this: +5. Build project ```bash -QT_IOS_BIN="/Users/username/Qt/6.4.1/ios/bin" ./scripts/apple_compile.sh ios +export QT_BIN_DIR="/Qt//ios/bin" +export QT_IOS_BIN=$QT_BIN_DIR +export PATH=$PATH:~/go/bin +mkdir build-ios +$QT_IOS_BIN/qt-cmake . -B build-ios -GXcode -DQT_HOST_PATH=$QT_BIN_DIR ``` +Replace PATH-TO-QT-FOLDER and QT-VERSION to your environment + If you get `gomobile: command not found` make sure to set PATH to the location of the bin folder where gomobile was installed. Usually, it's in `GOPATH`. @@ -76,7 +71,7 @@ of the bin folder where gomobile was installed. Usually, it's in `GOPATH`. export PATH=$(PATH):/path/to/GOPATH/bin ``` -5. Xcode should automatically open. You can then run/test/archive/ship the app. +5. Open XCode project. You can then run/test/archive/ship the app. If build fails with the following error ``` diff --git a/client/AmneziaVPN-Swift.h b/client/AmneziaVPN-Swift.h deleted file mode 100644 index 08981bcdf..000000000 --- a/client/AmneziaVPN-Swift.h +++ /dev/null @@ -1,249 +0,0 @@ -#ifndef AmneziaVPN_Swift_h -#define AmneziaVPN_Swift_h -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(ns_consumed) -# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) -#else -# define SWIFT_RELEASES_ARGUMENT -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif -#if !defined(SWIFT_RESILIENT_CLASS) -# if __has_attribute(objc_class_stub) -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) -# else -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_WEAK_IMPORT) -# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if !defined(IBSegueAction) -# define IBSegueAction -#endif -#if __has_feature(modules) -#if __has_warning("-Watimport-in-framework-header") -#pragma clang diagnostic ignored "-Watimport-in-framework-header" -#endif -@import Foundation; -@import ObjectiveC; -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="AmneziaVPN",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - - -@class NSString; -@class NSData; -enum ConnectionState : NSInteger; -@class NSDate; -@class NSNumber; -@class VPNIPAddressRange; - -SWIFT_CLASS("_TtC10AmneziaVPN18IOSVpnProtocolImpl") -@interface IOSVpnProtocolImpl : NSObject -- (nonnull instancetype)initWithBundleID:(NSString * _Nonnull)bundleID privateKey:(NSData * _Nonnull)privateKey deviceIpv4Address:(NSString * _Nonnull)deviceIpv4Address deviceIpv6Address:(NSString * _Nonnull)deviceIpv6Address closure:(void (^ _Nonnull)(enum ConnectionState, NSDate * _Nullable))closure callback:(void (^ _Nonnull)(BOOL))callback OBJC_DESIGNATED_INITIALIZER; -- (nonnull instancetype)initWithBundleID:(NSString * _Nonnull)bundleID config:(NSString * _Nonnull)config closure:(void (^ _Nonnull)(enum ConnectionState, NSDate * _Nullable))closure callback:(void (^ _Nonnull)(BOOL))callback; -- (nonnull instancetype)initWithBundleID:(NSString * _Nonnull)bundleID tunnelConfig:(NSString * _Nonnull)tunnelConfig ssConfig:(NSString * _Nonnull)ssConfig closure:(void (^ _Nonnull)(enum ConnectionState, NSDate * _Nullable))closure callback:(void (^ _Nonnull)(BOOL))callback; -- (void)connectWithDnsServer:(NSString * _Nonnull)dnsServer serverIpv6Gateway:(NSString * _Nonnull)serverIpv6Gateway serverPublicKey:(NSString * _Nonnull)serverPublicKey presharedKey:(NSString * _Nonnull)presharedKey serverIpv4AddrIn:(NSString * _Nonnull)serverIpv4AddrIn serverPort:(NSInteger)serverPort allowedIPAddressRanges:(NSArray * _Nonnull)allowedIPAddressRanges ipv6Enabled:(Boolean)enabled reason:(NSInteger)reason failureCallback:(void (^ _Nonnull)(void))failureCallback; -- (void)connectWithOvpnConfig:(NSString * _Nonnull)ovpnConfig failureCallback:(void (^ _Nonnull)(void))failureCallback; -- (void)connectWithSsConfig:(NSString * _Nonnull)ssConfig ovpnConfig:(NSString * _Nonnull)ovpnConfig failureCallback:(void (^ _Nonnull)(void))failureCallback; -- (void)disconnect; -- (void)checkStatusWithCallback:(void (^ _Nonnull)(NSString * _Nonnull, NSString * _Nonnull, NSString * _Nonnull))callback; -- (nonnull instancetype)init SWIFT_UNAVAILABLE; -+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable"); -@end - -typedef SWIFT_ENUM(NSInteger, ConnectionState, closed) { - ConnectionStateError = 0, - ConnectionStateConnected = 1, - ConnectionStateDisconnected = 2, -}; - -SWIFT_CLASS("_TtC10AmneziaVPN17VPNIPAddressRange") -@interface VPNIPAddressRange : NSObject -- (nonnull instancetype)initWithAddress:(NSString * _Nonnull)address networkPrefixLength:(uint8_t)networkPrefixLength isIpv6:(BOOL)isIpv6 OBJC_DESIGNATED_INITIALIZER; -- (nonnull instancetype)init SWIFT_UNAVAILABLE; -+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable"); -@end - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop -#endif /* AmneziaVPN_Swift_h */ - diff --git a/client/AmneziaVPN.entitlements b/client/AmneziaVPN.entitlements deleted file mode 100644 index dd0d73f29..000000000 --- a/client/AmneziaVPN.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.application-groups - - group.org.amnezia.AmneziaVPN - - keychain-access-groups - - $(AppIdentifierPrefix)group.org.amnezia.AmneziaVPN - - - diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 9b110666d..79e2b0109 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,14 +1,11 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR) set(PROJECT AmneziaVPN) -project(${PROJECT} VERSION 2.1.2) -set(BUILD_ID 1) -SET(QT_BUILD_TOOLS_WHEN_CROSS_COMPILING ON) +project(${PROJECT}) + +set(QT_BUILD_TOOLS_WHEN_CROSS_COMPILING ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17) - cmake_policy(SET CMP0099 OLD) -endif() if(ANDROID) # For a some reason cmake do not applying GNU_SOURCE/BSD_SOURCE flags on Android platform. @@ -16,24 +13,17 @@ if(ANDROID) add_definitions(-D_BSD_SOURCE) endif() -if(CMAKE_XCODE_BUILD_SYSTEM VERSION_GREATER_EQUAL 12) - cmake_policy(SET CMP0114 NEW) -endif() - -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER "Autogen") set_property(GLOBAL PROPERTY AUTOMOC_TARGETS_FOLDER "Autogen") set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "Autogen") -find_package(Qt6 REQUIRED COMPONENTS - Widgets Core Gui Network Xml - RemoteObjects Quick Svg QuickControls2 +find_package(Qt6 REQUIRED COMPONENTS + Widgets Core Gui Network Xml + RemoteObjects Quick Svg QuickControls2 Core5Compat Concurrent ) -set(LIBS ${LIBS} +set(LIBS ${LIBS} Qt6::Widgets Qt6::Core Qt6::Gui Qt6::Network Qt6::Xml Qt6::RemoteObjects Qt6::Quick Qt6::Svg Qt6::QuickControls2 @@ -64,6 +54,8 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) +configure_file(${CMAKE_CURRENT_LIST_DIR}/../version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) + set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/migrations.h ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc.h @@ -82,6 +74,7 @@ set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/ui/uilogic.h ${CMAKE_CURRENT_LIST_DIR}/ui/qautostart.h ${CMAKE_CURRENT_LIST_DIR}/protocols/vpnprotocol.h + ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_LIST_DIR}/core/sshclient.h ) @@ -146,6 +139,11 @@ qt6_add_resources(QRC ${QRC} ${CMAKE_CURRENT_LIST_DIR}/resources.qrc) if(WIN32) add_compile_definitions(MVPN_WINDOWS) + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/platforms/windows/amneziavpn.rc.in + ${CMAKE_CURRENT_BINARY_DIR}/amneziavpn.rc + ) + set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/protocols/ikev2_vpn_protocol_windows.h ) @@ -155,7 +153,7 @@ if(WIN32) ) set(RESOURCES ${RESOURCES} - ${CMAKE_CURRENT_LIST_DIR}/platforms/windows/amneziavpn.rc + ${CMAKE_CURRENT_BINARY_DIR}/amneziavpn.rc ) set(LIBS ${LIBS} @@ -171,6 +169,9 @@ if(WIN32) endif() if(APPLE) + cmake_policy(SET CMP0099 OLD) + cmake_policy(SET CMP0114 NEW) + if(NOT BUILD_OSX_APP_IDENTIFIER) set(BUILD_OSX_APP_IDENTIFIER org.amnezia.AmneziaVPN CACHE STRING "OSX Application identifier") endif() @@ -188,7 +189,6 @@ if(APPLE) set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ${BUILD_VPN_DEVELOPMENT_TEAM}) set(CMAKE_XCODE_ATTRIBUTE_GROUP_ID_IOS ${BUILD_IOS_GROUP_IDENTIFIER}) - #set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../build) if(NOT IOS) set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE INTERNAL "" FORCE) @@ -196,7 +196,7 @@ if(APPLE) set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/ui/macos_util.h) set(SOURCES ${SOURCES} ${CMAKE_CURRENT_LIST_DIR}/ui/macos_util.mm) - set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0) + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15) add_compile_definitions(MVPN_MACOS) # ICON = $$PWD/images/app.icns @@ -207,7 +207,7 @@ if(APPLE) find_library(FW_APPKIT AppKit) find_library(FW_SECURITY Security) - set(LIBS ${LIBS} + set(LIBS ${LIBS} ${FW_COCOA} ${FW_APPLICATIONSERVICES} ${FW_FOUNDATION} ${FW_APPKIT} ${FW_SECURITY} ${FW_CORESERVICES} @@ -216,7 +216,6 @@ if(APPLE) endif() endif() - if(LINUX AND NOT ANDROID) add_compile_definitions(MVPN_LINUX) @@ -226,7 +225,7 @@ endif() if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID)) message("Client desktop build") add_compile_definitions(AMNEZIA_DESKTOP) - + set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/core/ipcclient.h ${CMAKE_CURRENT_LIST_DIR}/core/privileged_process.h @@ -297,26 +296,26 @@ if(IOS) add_compile_definitions(MVPN_IOS) set(HEADERS ${HEADERS} - ${CMAKE_CURRENT_LIST_DIR}/protocols/ios_vpnprotocol.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosnotificationhandler.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/json.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/bigint.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/bigintipv6addr.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddress.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddressrange.h - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QtAppDelegate.h + ${CMAKE_CURRENT_LIST_DIR}/protocols/ios_vpnprotocol.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosnotificationhandler.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/json.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/bigint.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/bigintipv6addr.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddress.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddressrange.h + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QtAppDelegate.h ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QtAppDelegate-C-Interface.h ) set(SOURCES ${SOURCES} - ${CMAKE_CURRENT_LIST_DIR}/protocols/ios_vpnprotocol.mm - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosnotificationhandler.mm - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/json.cpp - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosglue.mm - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddress.cpp - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddressrange.cpp - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.mm - ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QtAppDelegate.mm + ${CMAKE_CURRENT_LIST_DIR}/protocols/ios_vpnprotocol.mm + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosnotificationhandler.mm + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/json.cpp + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosglue.mm + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddress.cpp + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ipaddressrange.cpp + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.mm + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QtAppDelegate.mm ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/MobileUtils.mm ) endif() @@ -331,9 +330,7 @@ qt_add_translations(${PROJECT} TS_FILES ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru.ts) if(APPLE AND NOT IOS) - set_target_properties(AmneziaVPN PROPERTIES - MACOSX_BUNDLE TRUE - ) + set_target_properties(${PROJECT} PROPERTIES MACOSX_BUNDLE TRUE) endif() if(IOS) @@ -341,66 +338,66 @@ if(IOS) enable_language(OBJCXX) enable_language(Swift) - #disable in cicd include(cmake/osxtools.cmake) - # set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) - - set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") - set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon") - - set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) - set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks") - set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_LIST_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos) - - - #need to change for debug and release - set_target_properties(${PROJECT} - PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.amnezia.${PROJECT}" - XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1" - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution" - ) - - set_target_properties(${PROJECT} - PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.amnezia.${PROJECT}" - XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1" - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" - ) set(LIBS ${LIBS} ${CMAKE_CURRENT_LIST_DIR}/3rd/OpenSSL/lib/ios/iphone/libcrypto.a ${CMAKE_CURRENT_LIST_DIR}/3rd/OpenSSL/lib/ios/iphone/libssl.a - ) + ) target_include_directories(${PROJECT} PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS}) - set_target_properties(${PROJECT} PROPERTIES - XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" - XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" - XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "${CMAKE_CURRENT_LIST_DIR}/platforms/ios/WireGuard-Bridging-Header.h" - XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" - XCODE_ATTRIBUTE_SWIFT_OPTIMIZATION_LEVEL "-Onone" - XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "AmneziaVPN-Swift.h" - ) + set(BUILD_ID ${A_PROJECT_BUILD}) set_target_properties(${PROJECT} PROPERTIES - OUTPUT_NAME "AmneziaVPN" - MACOSX_BUNDLE ON + XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/ios/app/Info.plist.in + MACOSX_BUNDLE_ICON_FILE "AppIcon" + MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN" - MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_ID}" - MACOSX_BUNDLE_COPYRIGHT "MPL-2.0" MACOSX_BUNDLE_GUI_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" - MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" + MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_LONG_VERSION_STRING "${CMAKE_PROJECT_VERSION}-${BUILD_ID}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${CMAKE_PROJECT_VERSION}" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_LIST_DIR}/ios/app/main.entitlements" - XCODE_ATTRIBUTE_MARKETING_VERSION "${CMAKE_PROJECT_VERSION}" + XCODE_ATTRIBUTE_MARKETING_VERSION "${APP_MAJOR_VERSION}" + XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" + XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN" + XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN" + XCODE_GENERATE_SCHEME TRUE - MACOSX_BUNDLE_ICON_FILE "AppIcon" + XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" + XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" + 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_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 "match AppStore org.amnezia.AmneziaVPN" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN" + ) + + set_target_properties(${PROJECT} PROPERTIES + XCODE_ATTRIBUTE_SWIFT_VERSION "5.0" + XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES" + XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "${CMAKE_CURRENT_LIST_DIR}/platforms/ios/WireGuard-Bridging-Header.h" + XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" + XCODE_ATTRIBUTE_SWIFT_OBJC_INTERFACE_HEADER_NAME "AmneziaVPN-Swift.h" + ) + + set_target_properties(${PROJECT} PROPERTIES + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" ) target_include_directories(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) @@ -410,8 +407,10 @@ if(IOS) -DVPN_NE_BUNDLEID=\"${BUILD_IOS_APP_IDENTIFIER}.network-extension\" ) + target_sources(${PROJECT} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosvpnprotocol.swift + ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/ioslogger.swift - target_sources(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/3rd/wireguard-apple/Sources/Shared/Keychain.swift ${CMAKE_CURRENT_LIST_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/IPAddressRange.swift ${CMAKE_CURRENT_LIST_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/InterfaceConfiguration.swift @@ -428,75 +427,43 @@ if(IOS) ${CMAKE_CURRENT_LIST_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/PrivateKey.swift ) - target_sources(${PROJECT} PRIVATE - platforms/ios/iosvpnprotocol.swift - platforms/ios/ioslogger.swift - ) - target_sources(${PROJECT} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/ios/app/launch.png ${CMAKE_CURRENT_LIST_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard + ${CMAKE_CURRENT_LIST_DIR}/ios/Media.xcassets ) set_source_files_properties( ${CMAKE_CURRENT_LIST_DIR}/ios/app/launch.png ${CMAKE_CURRENT_LIST_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard - PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" - ) - - target_sources(${PROJECT} PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/ios/Media.xcassets - ) - set_source_files_properties( ${CMAKE_CURRENT_LIST_DIR}/ios/Media.xcassets PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" ) + add_subdirectory(ios/networkextension) add_dependencies(${PROJECT} networkextension) - set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_APP_EXTENSIONS networkextension) set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS "${CMAKE_CURRENT_LIST_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework" ) - set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON) - set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) + set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_LIST_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos) + target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_LIST_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework") - set_target_properties("networkextension" - PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.amnezia.${PROJECT}.network-extension" - XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1" - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution" - ) - - set_target_properties("networkextension" - PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.amnezia.${PROJECT}.network-extension" - XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1" - XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" - ) - - set_target_properties (${PROJECT} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) - set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "match AppStore org.amnezia.AmneziaVPN") - set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN") - - set_target_properties("networkextension" PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) - set_target_properties("networkextension" PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "match AppStore org.amnezia.AmneziaVPN.network-extension") - set_target_properties("networkextension" PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN.network-extension") endif() if(ANDROID) add_custom_command( TARGET ${PROJECT} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_LIST_DIR}/android/AndroidManifest.xml - ${CMAKE_CURRENT_LIST_DIR}/android/build.gradle - ${CMAKE_CURRENT_LIST_DIR}/android/gradle/wrapper/gradle-wrapper.jar - ${CMAKE_CURRENT_LIST_DIR}/android/gradle/wrapper/gradle-wrapper.properties - ${CMAKE_CURRENT_LIST_DIR}/android/gradlew - ${CMAKE_CURRENT_LIST_DIR}/android/gradlew.bat - ${CMAKE_CURRENT_LIST_DIR}/android/gradle.properties - ${CMAKE_CURRENT_LIST_DIR}/android/res/values/libs.xml + ${CMAKE_CURRENT_LIST_DIR}/android/AndroidManifest.xml + ${CMAKE_CURRENT_LIST_DIR}/android/build.gradle + ${CMAKE_CURRENT_LIST_DIR}/android/gradle/wrapper/gradle-wrapper.jar + ${CMAKE_CURRENT_LIST_DIR}/android/gradle/wrapper/gradle-wrapper.properties + ${CMAKE_CURRENT_LIST_DIR}/android/gradlew + ${CMAKE_CURRENT_LIST_DIR}/android/gradlew.bat + ${CMAKE_CURRENT_LIST_DIR}/android/gradle.properties + ${CMAKE_CURRENT_LIST_DIR}/android/res/values/libs.xml ${CMAKE_CURRENT_LIST_DIR}/android/res/xml/fileprovider.xml ${CMAKE_CURRENT_LIST_DIR}/android/src/org/amnezia/vpn/AuthHelper.java ${CMAKE_CURRENT_LIST_DIR}/android/src/org/amnezia/vpn/IPCContract.kt @@ -516,7 +483,7 @@ if(ANDROID) ) set_property(TARGET ${PROJECT} PROPERTY - QT_ANDROID_PACKAGE_SOURCE_DIR + QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/android ) @@ -583,5 +550,5 @@ if(WIN32) ) endif() if(IOS) - #include(cmake/ios-arch-fixup.cmake) + include(cmake/ios-arch-fixup.cmake) endif() diff --git a/client/Info.plist b/client/Info.plist deleted file mode 100644 index fa592af08..000000000 --- a/client/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - ${ASSETCATALOG_COMPILER_APPICON_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundlePackageType - APPL - CFBundleSignature - ${QMAKE_PKGINFO_TYPEINFO} - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NOTE - This file was generated by Qt/QMake. - NSPrincipalClass - NSApplication - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/client/WireGuard-Bridging-Header.h b/client/WireGuard-Bridging-Header.h deleted file mode 100644 index 40b6c89de..000000000 --- a/client/WireGuard-Bridging-Header.h +++ /dev/null @@ -1,29 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "wireguard-go-version.h" -#include "3rd/wireguard-apple/Sources/WireGuardKitC/WireGuardKitC.h" - -#include -#include - -#define WG_KEY_LEN (32) -#define WG_KEY_LEN_BASE64 (45) -#define WG_KEY_LEN_HEX (65) - -void key_to_base64(char base64[WG_KEY_LEN_BASE64], - const uint8_t key[WG_KEY_LEN]); -bool key_from_base64(uint8_t key[WG_KEY_LEN], const char* base64); - -void key_to_hex(char hex[WG_KEY_LEN_HEX], const uint8_t key[WG_KEY_LEN]); -bool key_from_hex(uint8_t key[WG_KEY_LEN], const char* hex); - -bool key_eq(const uint8_t key1[WG_KEY_LEN], const uint8_t key2[WG_KEY_LEN]); - -void write_msg_to_log(const char* tag, const char* msg); - -#import "TargetConditionals.h" -#if TARGET_OS_OSX -# include -#endif diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 891c305a4..5d5ba547a 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -8,7 +8,7 @@ #include "core/servercontroller.h" #include "logger.h" -#include "defines.h" +#include "version.h" #include #include "platforms/ios/QRCodeReaderBase.h" diff --git a/client/client.pro b/client/client.pro deleted file mode 100644 index 2472581b5..000000000 --- a/client/client.pro +++ /dev/null @@ -1,415 +0,0 @@ -QT += widgets core gui network xml remoteobjects quick svg quickcontrols2 -equals(QT_MAJOR_VERSION, 6): QT += core5compat - -TARGET = AmneziaVPN -TEMPLATE = app - -# silent builds on CI env -IS_CI=$$(CI) -!isEmpty(IS_CI){ - message("Detected CI env") - CONFIG += silent #ccache -} - -CONFIG += qtquickcompiler - -include("3rd/QtSsh/src/ssh/qssh.pri") -include("3rd/QtSsh/src/botan/botan.pri") -!android:!ios:include("3rd/SingleApplication/singleapplication.pri") -include ("3rd/SortFilterProxyModel/SortFilterProxyModel.pri") - -include("3rd/qrcodegen/qrcodegen.pri") -include("3rd/QSimpleCrypto/QSimpleCrypto.pri") -include("3rd/qtkeychain/qtkeychain.pri") - -INCLUDEPATH += $$PWD/3rd/QSimpleCrypto/include -INCLUDEPATH += $$PWD/3rd/OpenSSL/include -INCLUDEPATH += $$PWD/3rd/qtkeychain/include -INCLUDEPATH += $$PWD/3rd/libssh/include -DEPENDPATH += $$PWD/3rd/OpenSSL/include - -HEADERS += \ - ../ipc/ipc.h \ - amnezia_application.h \ - configurators/cloak_configurator.h \ - configurators/configurator_base.h \ - configurators/ikev2_configurator.h \ - configurators/shadowsocks_configurator.h \ - configurators/ssh_configurator.h \ - configurators/vpn_configurator.h \ - configurators/wireguard_configurator.h \ - containers/containers_defs.h \ - core/defs.h \ - core/errorstrings.h \ - configurators/openvpn_configurator.h \ - core/scripts_registry.h \ - core/server_defs.h \ - core/servercontroller.h \ - defines.h \ - logger.h \ - managementserver.h \ - platforms/ios/MobileUtils.h \ - platforms/linux/leakdetector.h \ - protocols/protocols_defs.h \ - secure_qsettings.h \ - settings.h \ - ui/notificationhandler.h \ - ui/models/containers_model.h \ - ui/models/protocols_model.h \ - ui/pages.h \ - ui/pages_logic/AppSettingsLogic.h \ - ui/pages_logic/GeneralSettingsLogic.h \ - ui/pages_logic/NetworkSettingsLogic.h \ - ui/pages_logic/NewServerProtocolsLogic.h \ - ui/pages_logic/PageLogicBase.h \ - ui/pages_logic/QrDecoderLogic.h \ - ui/pages_logic/ServerConfiguringProgressLogic.h \ - ui/pages_logic/ServerContainersLogic.h \ - ui/pages_logic/ServerListLogic.h \ - ui/pages_logic/ServerSettingsLogic.h \ - ui/pages_logic/ShareConnectionLogic.h \ - ui/pages_logic/SitesLogic.h \ - ui/pages_logic/StartPageLogic.h \ - ui/pages_logic/ViewConfigLogic.h \ - ui/pages_logic/VpnLogic.h \ - ui/pages_logic/WizardLogic.h \ - ui/pages_logic/protocols/CloakLogic.h \ - ui/pages_logic/protocols/OpenVpnLogic.h \ - ui/pages_logic/protocols/OtherProtocolsLogic.h \ - ui/pages_logic/protocols/PageProtocolLogicBase.h \ - ui/pages_logic/protocols/ShadowSocksLogic.h \ - ui/pages_logic/protocols/WireGuardLogic.h \ - ui/property_helper.h \ - ui/models/servers_model.h \ - ui/uilogic.h \ - ui/qautostart.h \ - ui/models/sites_model.h \ - utilities.h \ - vpnconnection.h \ - protocols/vpnprotocol.h \ - constants.h \ - platforms/ios/QRCodeReaderBase.h - -SOURCES += \ - amnezia_application.cpp \ - configurators/cloak_configurator.cpp \ - configurators/configurator_base.cpp \ - configurators/ikev2_configurator.cpp \ - configurators/shadowsocks_configurator.cpp \ - configurators/ssh_configurator.cpp \ - configurators/vpn_configurator.cpp \ - configurators/wireguard_configurator.cpp \ - containers/containers_defs.cpp \ - core/errorstrings.cpp \ - configurators/openvpn_configurator.cpp \ - core/scripts_registry.cpp \ - core/server_defs.cpp \ - core/servercontroller.cpp \ - logger.cpp \ - main.cpp \ - managementserver.cpp \ - platforms/ios/MobileUtils.cpp \ - platforms/linux/leakdetector.cpp \ - protocols/protocols_defs.cpp \ - secure_qsettings.cpp \ - settings.cpp \ - ui/notificationhandler.cpp \ - ui/models/containers_model.cpp \ - ui/models/protocols_model.cpp \ - ui/pages_logic/AppSettingsLogic.cpp \ - ui/pages_logic/GeneralSettingsLogic.cpp \ - ui/pages_logic/NetworkSettingsLogic.cpp \ - ui/pages_logic/NewServerProtocolsLogic.cpp \ - ui/pages_logic/PageLogicBase.cpp \ - ui/pages_logic/QrDecoderLogic.cpp \ - ui/pages_logic/ServerConfiguringProgressLogic.cpp \ - ui/pages_logic/ServerContainersLogic.cpp \ - ui/pages_logic/ServerListLogic.cpp \ - ui/pages_logic/ServerSettingsLogic.cpp \ - ui/pages_logic/ShareConnectionLogic.cpp \ - ui/pages_logic/SitesLogic.cpp \ - ui/pages_logic/StartPageLogic.cpp \ - ui/pages_logic/ViewConfigLogic.cpp \ - ui/pages_logic/VpnLogic.cpp \ - ui/pages_logic/WizardLogic.cpp \ - ui/pages_logic/protocols/CloakLogic.cpp \ - ui/pages_logic/protocols/OpenVpnLogic.cpp \ - ui/pages_logic/protocols/OtherProtocolsLogic.cpp \ - ui/pages_logic/protocols/PageProtocolLogicBase.cpp \ - ui/pages_logic/protocols/ShadowSocksLogic.cpp \ - ui/models/servers_model.cpp \ - ui/pages_logic/protocols/WireGuardLogic.cpp \ - ui/uilogic.cpp \ - ui/qautostart.cpp \ - ui/models/sites_model.cpp \ - utilities.cpp \ - vpnconnection.cpp \ - protocols/vpnprotocol.cpp \ - platforms/ios/QRCodeReaderBase.cpp - -RESOURCES += \ - resources.qrc - -TRANSLATIONS = \ - translations/amneziavpn_ru.ts - -win32 { - DEFINES += MVPN_WINDOWS - - OTHER_FILES += platforms/windows/amneziavpn.rc - RC_FILE = platforms/windows/amneziavpn.rc - - HEADERS += \ - protocols/ikev2_vpn_protocol_windows.h \ - - SOURCES += \ - protocols/ikev2_vpn_protocol_windows.cpp \ - - VERSION = 2.0.0.0 - QMAKE_TARGET_COMPANY = "AmneziaVPN" - QMAKE_TARGET_PRODUCT = "AmneziaVPN" - - - LIBS += \ - -luser32 \ - -lrasapi32 \ - -lshlwapi \ - -liphlpapi \ - -lws2_32 \ - -lgdi32 - - QMAKE_LFLAGS_WINDOWS += /entry:mainCRTStartup - - !contains(QMAKE_TARGET.arch, x86_64) { - message("Windows x86 build") - LIBS += -L$$PWD/3rd/OpenSSL/lib/windows/x86/ -llibssl -llibcrypto - } - else { - message("Windows x86_64 build") - LIBS += -L$$PWD/3rd/OpenSSL/lib/windows/x86_64/ -llibssl -llibcrypto - } -} - -macx { - DEFINES += MVPN_MACOS - - ICON = $$PWD/images/app.icns - - HEADERS += ui/macos_util.h - SOURCES += ui/macos_util.mm - - LIBS += -framework Cocoa -framework ApplicationServices -framework CoreServices -framework Foundation -framework AppKit -framework Security - - LIBS += $$PWD/3rd/OpenSSL/lib/macos/x86_64/libcrypto.a - LIBS += $$PWD/3rd/OpenSSL/lib/macos/x86_64/libssl.a -} - -linux:!android { - DEFINES += MVPN_LINUX - LIBS += /usr/lib/x86_64-linux-gnu/libcrypto.a - LIBS += /usr/lib/x86_64-linux-gnu/libssl.a - LIBS += $$PWD/3rd/libssh/build/src/libssh.a - LIBS += -lz - - INCLUDEPATH += $$PWD/platforms/linux -} - -win32|macx|linux:!android { - DEFINES += AMNEZIA_DESKTOP - - HEADERS += \ - core/ipcclient.h \ - core/privileged_process.h \ - ui/systemtray_notificationhandler.h \ - protocols/openvpnprotocol.h \ - protocols/openvpnovercloakprotocol.h \ - protocols/shadowsocksvpnprotocol.h \ - protocols/wireguardprotocol.h \ - - SOURCES += \ - core/ipcclient.cpp \ - core/privileged_process.cpp \ - ui/systemtray_notificationhandler.cpp \ - protocols/openvpnprotocol.cpp \ - protocols/openvpnovercloakprotocol.cpp \ - protocols/shadowsocksvpnprotocol.cpp \ - protocols/wireguardprotocol.cpp \ - - REPC_REPLICA += ../ipc/ipc_interface.rep - REPC_REPLICA += ../ipc/ipc_process_interface.rep -} - -android { - message(Platform: android) - message("$$ANDROID_TARGET_ARCH") - versionAtLeast(QT_VERSION, 6.0.0) { - # We need to include qtprivate api's - # As QAndroidBinder is not yet implemented with a public api - QT += core-private - ANDROID_ABIS = $$ANDROID_TARGET_ARCH - } - - DEFINES += MVPN_ANDROID - - INCLUDEPATH += platforms/android - - HEADERS += \ - platforms/android/android_controller.h \ - platforms/android/android_notificationhandler.h \ - protocols/android_vpnprotocol.h \ - platforms/android/androidutils.h \ - platforms/android/androidvpnactivity.h - - SOURCES += \ - platforms/android/android_controller.cpp \ - platforms/android/android_notificationhandler.cpp \ - protocols/android_vpnprotocol.cpp \ - platforms/android/androidutils.cpp \ - platforms/android/androidvpnactivity.cpp - - DISTFILES += \ - android/AndroidManifest.xml \ - android/build.gradle \ - android/gradle/wrapper/gradle-wrapper.jar \ - android/gradle/wrapper/gradle-wrapper.properties \ - android/gradlew \ - android/gradlew.bat \ - android/gradle.properties \ - android/res/values/libs.xml \ - android/res/xml/fileprovider.xml \ - android/src/org/amnezia/vpn/AuthHelper.java \ - android/src/org/amnezia/vpn/IPCContract.kt \ - android/src/org/amnezia/vpn/NotificationUtil.kt \ - android/src/org/amnezia/vpn/OpenVPNThreadv3.kt \ - android/src/org/amnezia/vpn/Prefs.kt \ - android/src/org/amnezia/vpn/VpnLogger.kt \ - android/src/org/amnezia/vpn/VpnService.kt \ - android/src/org/amnezia/vpn/VpnServiceBinder.kt \ - android/src/org/amnezia/vpn/qt/AmneziaApp.kt \ - android/src/org/amnezia/vpn/qt/PackageManagerHelper.java \ - android/src/org/amnezia/vpn/qt/VPNActivity.kt \ - android/src/org/amnezia/vpn/qt/VPNApplication.java \ - android/src/org/amnezia/vpn/qt/VPNPermissionHelper.kt - - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - - for (abi, ANDROID_ABIS): { - - equals(ANDROID_TARGET_ARCH,$$abi) { - LIBS += $$PWD/3rd/OpenSSL/lib/android/$${abi}/libcrypto.a - LIBS += $$PWD/3rd/OpenSSL/lib/android/$${abi}/libssl.a - } - - ANDROID_EXTRA_LIBS += $$PWD/android/lib/wireguard/$${abi}/libwg.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/wireguard/$${abi}/libwg-go.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/wireguard/$${abi}/libwg-quick.so - - ANDROID_EXTRA_LIBS += $$PWD/android/lib/openvpn/$${abi}/libjbcrypto.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/openvpn/$${abi}/libopenvpn.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/openvpn/$${abi}/libopvpnutil.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/openvpn/$${abi}/libovpn3.so - ANDROID_EXTRA_LIBS += $$PWD/android/lib/openvpn/$${abi}/libovpnexec.so - } -} - -ios { - message("Client iOS build") - CONFIG += static - CONFIG += file_copies - - # For the authentication - LIBS += -framework AuthenticationServices - - # For notifications - LIBS += -framework UIKit - LIBS += -framework Foundation - LIBS += -framework StoreKit - LIBS += -framework UserNotifications - LIBS += -framework AVFoundation - - DEFINES += MVPN_IOS - - HEADERS += \ - protocols/ios_vpnprotocol.h \ - platforms/ios/iosnotificationhandler.h \ - platforms/ios/json.h \ - platforms/ios/bigint.h \ - platforms/ios/bigintipv6addr.h \ - platforms/ios/ipaddress.h \ - platforms/ios/ipaddressrange.h \ - platforms/ios/QtAppDelegate.h \ - platforms/ios/QtAppDelegate-C-Interface.h - - SOURCES -= \ - platforms/ios/QRCodeReaderBase.cpp \ - platforms/ios/MobileUtils.cpp - - SOURCES += \ - protocols/ios_vpnprotocol.mm \ - platforms/ios/iosnotificationhandler.mm \ - platforms/ios/json.cpp \ - platforms/ios/iosglue.mm \ - platforms/ios/ipaddress.cpp \ - platforms/ios/ipaddressrange.cpp \ - platforms/ios/QRCodeReaderBase.mm \ - platforms/ios/QtAppDelegate.mm \ - platforms/ios/MobileUtils.mm - - Q_ENABLE_BITCODE.value = NO - Q_ENABLE_BITCODE.name = ENABLE_BITCODE - QMAKE_MAC_XCODE_SETTINGS += Q_ENABLE_BITCODE - -# CONFIG(iphoneos, iphoneos|iphonesimulator) { - iphoneos { - message("Building for iPhone OS") - QMAKE_TARGET_BUNDLE_PREFIX = org.amnezia - QMAKE_BUNDLE = AmneziaVPN - QMAKE_IOS_DEPLOYMENT_TARGET = 13.0 - QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1 - QMAKE_DEVELOPMENT_TEAM = X7UJ388FXK - QMAKE_PROVISIONING_PROFILE = f2fefb59-14aa-4aa9-ac14-1d5531b06dcc - QMAKE_XCODE_CODE_SIGN_IDENTITY = "Apple Distribution" - QMAKE_INFO_PLIST = $$PWD/ios/app/Info.plist - - XCODEBUILD_FLAGS += -allowProvisioningUpdates - - DEFINES += iphoneos - - contains(QT_ARCH, arm64) { - message("Building for iOS/ARM v8 64-bit architecture") - ARCH_TAG = "ios_armv8_64" - - LIBS += $$PWD/3rd/OpenSSL/lib/ios/iphone/libcrypto.a - LIBS += $$PWD/3rd/OpenSSL/lib/ios/iphone/libssl.a - } else { - message("Building for iOS/ARM v7 (32-bit) architecture") - ARCH_TAG = "ios_armv7" - } - } -# } - - -# CONFIG(iphonesimulator, iphoneos|iphonesimulator) { -# iphonesimulator { -# message("Building for iPhone Simulator") -# ARCH_TAG = "ios_x86_64" -# -# DEFINES += iphonesimulator -# -# LIBS += $$PWD/3rd/OpenSSL/lib/ios/simulator/libcrypto.a -# LIBS += $$PWD/3rd/OpenSSL/lib/ios/simulator/libssl.a -# } -# } - - NETWORKEXTENSION=1 -# ! build_pass: system(ruby $$PWD/scripts/xcode_patcher.rb "$$PWD" "$$OUT_PWD/AmneziaVPN.xcodeproj" "2.0" "2.0.0" "ios" "$$NETWORKEXTENSION"|| echo "Failed to merge xcode with wireguard") - - - -#ruby %{sourceDir}/client/ios/xcode_patcher.rb "%{buildDir}/AmneziaVPN.xcodeproj" "2.0" "2.0.0" "ios" "1" - #cd client/ && /Users/md/Qt/5.15.2/ios/bin/qmake -o Makefile /Users/md/amnezia/desktop-client/client/client.pro -spec macx-ios-clang CONFIG+=iphonesimulator CONFIG+=simulator CONFIG+=qml_debug -after -# %{sourceDir}/client/ios/xcode_patcher.rb %{buildDir}/client/AmneziaVPN.xcodeproj 2.0 2.0.0 ios 1 -} - - - diff --git a/client/defines.h b/client/defines.h deleted file mode 100644 index c64eb4584..000000000 --- a/client/defines.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef DEFINES_H -#define DEFINES_H - -#define APPLICATION_NAME "AmneziaVPN" -#define SERVICE_NAME "AmneziaVPN-service" -#define ORGANIZATION_NAME "AmneziaVPN.ORG" -#define APP_MAJOR_VERSION "2.1.2" -#define APP_VERSION "2.1.2.0" - -#endif // DEFINES_H diff --git a/client/ios/app/Info.plist b/client/ios/app/Info.plist deleted file mode 100644 index f5681a204..000000000 --- a/client/ios/app/Info.plist +++ /dev/null @@ -1,92 +0,0 @@ - - - - - CFBundleAllowMixedLocalizations - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - AmneziaVPN - CFBundleDocumentTypes - - - CFBundleTypeName - Amnezia VPN config - LSHandlerRank - Alternate - LSItemContentTypes - - org.amnezia.AmneziaVPN.amnezia-config - - - - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${APP_DISPLAY_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - 7 - ITSAppUsesNonExemptEncryption - - LSRequiresIPhoneOS - - UIFileSharingEnabled - - LSSupportsOpeningDocumentsInPlace - - NSCameraUsageDescription - Amnezia VPN needs access to the camera for reading QR-codes. - UILaunchStoryboardName - AmneziaVPNLaunchScreen - UIRequiresFullScreen - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIUserInterfaceStyle - Light - UTImportedTypeDeclarations - - - UTTypeConformsTo - - public.data - - UTTypeDescription - Amnezia VPN config - UTTypeIconFiles - - UTTypeIdentifier - org.amnezia.AmneziaVPN.amnezia-config - UTTypeTagSpecification - - public.filename-extension - - vpn - - public.mime-type - - text/plain - - - - - - diff --git a/client/ios/networkextension/CMakeLists.txt b/client/ios/networkextension/CMakeLists.txt index bbe591c80..cd6ab2442 100644 --- a/client/ios/networkextension/CMakeLists.txt +++ b/client/ios/networkextension/CMakeLists.txt @@ -4,26 +4,45 @@ set(CLIENT_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) add_executable(networkextension) set_target_properties(networkextension PROPERTIES - OUTPUT_NAME "AmneziaVPNNetworkExtension" XCODE_PRODUCT_TYPE com.apple.product-type.app-extension BUNDLE_EXTENSION appex - MACOSX_BUNDLE ON + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in + MACOSX_BUNDLE_INFO_STRING "AmneziaVPNNetworkExtension" MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPNNetworkExtension" - MACOSX_BUNDLE_BUNDLE_VERSION "${BUILD_ID}" - MACOSX_BUNDLE_COPYRIGHT "MPL-2.0" MACOSX_BUNDLE_GUI_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}.network-extension" - MACOSX_BUNDLE_INFO_STRING "AmneziaVPNNetworkExtension" - MACOSX_BUNDLE_LONG_VERSION_STRING "${CMAKE_PROJECT_VERSION}-${BUILD_ID}" - MACOSX_BUNDLE_SHORT_VERSION_STRING "${CMAKE_PROJECT_VERSION}" + MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}.network-extension" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/AmneziaVPNNetworkExtension.entitlements + XCODE_ATTRIBUTE_MARKETING_VERSION "${APP_MAJOR_VERSION}" + XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${BUILD_ID}" + XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPNNetworkExtension" + + 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_IDENTITY "Apple Distribution" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" + + XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "match AppStore org.amnezia.AmneziaVPN.network-extension" + XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN.network-extension" +) + +set_target_properties(networkextension 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" + XCODE_ATTRIBUTE_SWIFT_OPTIMIZATION_LEVEL "-Onone" XCODE_ATTRIBUTE_SWIFT_PRECOMPILE_BRIDGING_HEADER "NO" - XCODE_ATTRIBUTE_APPLICATION_EXTENSION_API_ONLY "YES" - XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/AmneziaVPNNetworkExtension.entitlements +) + +set_target_properties("networkextension" PROPERTIES + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK" ) find_library(FW_ASSETS_LIBRARY AssetsLibrary) @@ -83,7 +102,7 @@ include(${CLIENT_ROOT_DIR}/cmake/golang.cmake) ## Build the wireguard go library for iOS simulation. ## TODO: Some special handling around GOARCH for execute_process(OUTPUT_VARIABLE SIM_SDKROOT OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND xcrun --sdk iphonesimulator --show-sdk-path) -build_go_archive(${CMAKE_CURRENT_BINARY_DIR}/libwg-sim.a ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKitGo/go.mod +build_go_archive(${CMAKE_CURRENT_BINARY_DIR}/libwg-sim.a ${CLIENT_ROOT_DIR}/3rd/wireguard-apple/Sources/WireGuardKitGo/go.mod GOOS ios GOARCH amd64 CGO_CFLAGS -arch x86_64 -isysroot ${SIM_SDKROOT} @@ -92,7 +111,7 @@ build_go_archive(${CMAKE_CURRENT_BINARY_DIR}/libwg-sim.a ${CMAKE_SOURCE_DIR}/3rd ## Build the wireguard go library for iOS devices. execute_process(OUTPUT_VARIABLE IOS_SDKROOT OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND xcrun --sdk ${CMAKE_OSX_SYSROOT} --show-sdk-path) -build_go_archive(${CMAKE_CURRENT_BINARY_DIR}/libwg-dev.a ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKitGo/go.mod +build_go_archive(${CMAKE_CURRENT_BINARY_DIR}/libwg-dev.a ${CLIENT_ROOT_DIR}/3rd/wireguard-apple/Sources/WireGuardKitGo/go.mod GOOS ios GOARCH arm64 CGO_CFLAGS -arch arm64 -isysroot ${IOS_SDKROOT} @@ -111,4 +130,4 @@ add_custom_target(libwg_builder ## Link and depend on the wireguard library. add_dependencies(networkextension libwg_builder) -target_link_libraries(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/libwg-unified.a) \ No newline at end of file +target_link_libraries(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/libwg-unified.a) diff --git a/client/ios/networkextension/Info.plist b/client/ios/networkextension/Info.plist deleted file mode 100644 index 6941af53b..000000000 --- a/client/ios/networkextension/Info.plist +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CFBundleExecutable - $(EXECUTABLE_NAME) - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - - CFBundleInfoDictionaryVersion - 6.0 - - CFBundleName - $(PRODUCT_NAME) - - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - - CFBundleShortVersionString - $(MARKETING_VERSION) - - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - - ITSAppUsesNonExemptEncryption - - - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - - CFBundleDisplayName - MozillaVPNNetworkExtension - - NSExtension - - NSExtensionPointIdentifier - com.apple.networkextension.packet-tunnel - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).PacketTunnelProvider - - - com.wireguard.ios.app_group_id - group.$(APP_ID_IOS) - - com.wireguard.macos.app_group_id - $(DEVELOPMENT_TEAM).group.$(APP_ID_MACOS) - - \ No newline at end of file diff --git a/client/ios/xcode.xconfig b/client/ios/xcode.xconfig deleted file mode 100644 index 1b4f10005..000000000 --- a/client/ios/xcode.xconfig +++ /dev/null @@ -1,13 +0,0 @@ -DEVELOPMENT_TEAM = - -# MacOS configuration -GROUP_ID_MACOS = <> -APP_ID_MACOS = <> -NETEXT_ID_MACOS = <> -LOGIN_ID_MACOS = <> -NATIVEMESSAGING_ID_MACOS = <> - -# IOS configuration -GROUP_ID_IOS = group.org.mozilla.ios.Guardian -APP_ID_IOS = org.mozilla.ios.FirefoxVPN -NETEXT_ID_IOS = org.mozilla.ios.FirefoxVPN.network-extension diff --git a/client/logger.cpp b/client/logger.cpp index 107d477fc..9a0dd0772 100644 --- a/client/logger.cpp +++ b/client/logger.cpp @@ -9,7 +9,7 @@ #include -#include "defines.h" +#include "version.h" #include "utilities.h" #ifdef AMNEZIA_DESKTOP diff --git a/client/main.cpp b/client/main.cpp index f20c5dd15..2c94bc339 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -3,7 +3,7 @@ #include #include "amnezia_application.h" -#include "defines.h" +#include "version.h" #include "migrations.h" #ifdef Q_OS_WIN diff --git a/client/migrations.cpp b/client/migrations.cpp index 6fac6be71..8086d1db4 100644 --- a/client/migrations.cpp +++ b/client/migrations.cpp @@ -5,7 +5,7 @@ #include #include -#include "defines.h" +#include "version.h" Migrations::Migrations(QObject *parent) : QObject{parent} diff --git a/client/platforms/windows/amneziavpn.rc b/client/platforms/windows/amneziavpn.rc.in similarity index 62% rename from client/platforms/windows/amneziavpn.rc rename to client/platforms/windows/amneziavpn.rc.in index 053650770..f3fd6721b 100644 --- a/client/platforms/windows/amneziavpn.rc +++ b/client/platforms/windows/amneziavpn.rc.in @@ -3,41 +3,33 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDI_ICON1 ICON "../../images/app.ico" -#define VER_FILEVERSION 2,0,0,0 -#define VER_FILEVERSION_STR "2.0.0.0\0" - -#define VER_PRODUCTVERSION 2,0,0,0 -#define VER_PRODUCTVERSION_STR "2.0.0.0\0" - #define VER_COMPANYNAME_STR "AmneziaVPN" -#define VER_FILEDESCRIPTION_STR "AmneziaVPN" -#define VER_INTERNALNAME_STR "AmneziaVPN" +#define VER_FILEDESCRIPTION_STR VER_COMPANYNAME_STR +#define VER_INTERNALNAME_STR VER_COMPANYNAME_STR #define VER_LEGALCOPYRIGHT_STR "AmneziaVPN." #define VER_LEGALTRADEMARKS1_STR "All Rights Reserved" #define VER_LEGALTRADEMARKS2_STR VER_LEGALTRADEMARKS1_STR #define VER_ORIGINALFILENAME_STR "amneziavpn.exe" -#define VER_PRODUCTNAME_STR "AmneziaVPN" - -#define VER_COMPANYDOMAIN_STR "https://amnezia.org/" +#define VER_PRODUCTNAME_STR VER_COMPANYNAME_STR VS_VERSION_INFO VERSIONINFO -FILEVERSION VER_FILEVERSION -PRODUCTVERSION VER_PRODUCTVERSION +FILEVERSION @CMAKE_PROJECT_VERSION_MAJOR@,@CMAKE_PROJECT_VERSION_MINOR@,@CMAKE_PROJECT_VERSION_PATCH@,@CMAKE_PROJECT_VERSION_TWEAK@ +PRODUCTVERSION @CMAKE_PROJECT_VERSION_MAJOR@,@CMAKE_PROJECT_VERSION_MINOR@,@CMAKE_PROJECT_VERSION_PATCH@ BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", VER_COMPANYNAME_STR - VALUE "FileDescription", VER_FILEDESCRIPTION_STR - VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "FileDescription", "@CMAKE_PROJECT_DESCRIPTION@" + VALUE "FileVersion", "@CMAKE_PROJECT_VERSION@" VALUE "InternalName", VER_INTERNALNAME_STR VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", VER_PRODUCTNAME_STR - VALUE "ProductVersion", VER_PRODUCTVERSION_STR + VALUE "ProductVersion", "@CMAKE_PROJECT_VERSION@" END END diff --git a/client/protocols/openvpnprotocol.cpp b/client/protocols/openvpnprotocol.cpp index 150e84be9..cda802e2c 100644 --- a/client/protocols/openvpnprotocol.cpp +++ b/client/protocols/openvpnprotocol.cpp @@ -6,7 +6,7 @@ #include #include "logger.h" -#include "defines.h" +#include "version.h" #include "utilities.h" #include "openvpnprotocol.h" diff --git a/client/scripts/apple_compile.sh b/client/scripts/apple_compile.sh deleted file mode 100755 index 403460faa..000000000 --- a/client/scripts/apple_compile.sh +++ /dev/null @@ -1,254 +0,0 @@ -#!/bin/bash - - -. $(dirname $0)/commons.sh - -if [ -f .env ]; then - . .env -fi - -RELEASE=1 -OS= -NETWORKEXTENSION= -WORKINGDIR=`pwd` - -helpFunction() { - print G "Usage:" - print N "\t$0 [-d|--debug] [-n|--networkextension]" - print N "" - print N "By default, the project is compiled in release mode. Use -d or --debug for a debug build." - print N "Use -n or --networkextension to force the network-extension component for MacOS too." - print N "" - print N "If MVPN_IOS_ADJUST_TOKEN env is found, this will be used at compilation time." - print N "" - print G "Config variables:" - print N "\tQT_MACOS_BIN=" - print N "\tQT_IOS_BIN=" - print N "" - exit 0 -} - -print N "This script compiles AmneziaVPN for MacOS/iOS" -print N "" - -while [[ $# -gt 0 ]]; do - key="$1" - - case $key in - -d | --debug) - RELEASE= - shift - ;; - -n | --networkextension) - NETWORKEXTENSION=1 - shift - ;; - -h | --help) - helpFunction - ;; - *) - if [[ "$OS" ]]; then - helpFunction - fi - - OS=$1 - shift - ;; - esac -done - -fetch() { - if command -v "wget" &>/dev/null; then - wget -nc -O "$2" "$1" - return - fi - - if command -v "curl" &>/dev/null; then - curl "$1" -o "$2" -s -L - return - fi - - killProcess "You must have 'wget' or 'curl' installed." -} - -sha256() { - if command -v "sha256sum" &>/dev/null; then - sha256sum "$1" - return 0 - fi - - if command -v "openssl" &>/dev/null; then - openssl dgst -sha256 "$1" - return 0 - fi - - killProcess "You must have 'sha256sum' or 'openssl' installed." -} - -if [[ "$OS" != "macos" ]] && [[ "$OS" != "ios" ]] && [[ "$OS" != "macostest" ]]; then - helpFunction -fi - -if [[ "$OS" == "ios" ]]; then - # Network-extension is the default for IOS - NETWORKEXTENSION=1 -fi - -if ! [ -d "ios" ] || ! [ -d "macos" ]; then - killProcess "This script must be executed at the root of the repository." -fi - -QMAKE=qmake -if [ "$OS" = "macos" ] && ! [ "$QT_MACOS_BIN" = "" ]; then - QMAKE=$QT_MACOS_BIN/qmake -elif [ "$OS" = "macostest" ] && ! [ "$QT_MACOS_BIN" = "" ]; then - QMAKE=$QT_MACOS_BIN/qmake -elif [ "$OS" = "ios" ] && ! [ "$QT_IOS_BIN" = "" ]; then - QMAKE=$QT_IOS_BIN/qmake -fi - -$QMAKE -v &>/dev/null || killProcess "qmake doesn't exist or it fails" - -print Y "Retrieve the wireguard-go version... " -if [ "$OS" = "macos" ]; then - (cd macos/gobridge && go list -m golang.zx2c4.com/wireguard | sed -n 's/.*v\([0-9.]*\).*/#define WIREGUARD_GO_VERSION "\1"/p') > macos/gobridge/wireguard-go-version.h -elif [ "$OS" = "ios" ]; then - if [ ! -f 3rd/wireguard-apple/Sources/WireGuardKitGo/wireguard-go-version.h ]; then - print Y "Creating wireguard-go-version.h file" - touch 3rd/wireguard-apple/Sources/WireGuardKitGo/wireguard-go-version.h - cat <> $WORKINGDIR/3rd/wireguard-apple/Sources/WireGuardKitGo/wireguard-go-version.h -#define WIREGUARD_GO_VERSION "0.0.0" -EOF - fi - (cd 3rd/wireguard-apple/Sources/WireGuardKitGo && go list -m golang.zx2c4.com/wireguard | sed -n 's/.*v\([0-9.]*\).*/#define WIREGUARD_GO_VERSION "\1"/p') > 3rd/wireguard-apple/Sources/WireGuardKitGo/wireguard-go-version.h -fi -print G "done." - -printn Y "Cleaning the existing project... " -rm -rf AmneziaVPN.xcodeproj/ || killProcess "Failed to remove things" -print G "done." - -printn Y "Extract the project version... " -SHORTVERSION=$(cat version.pri | grep VERSION | grep defined | cut -d= -f2 | tr -d \ ) -FULLVERSION=$(cat versionfull.pri | grep BUILDVERSION | grep defined | cut -d= -f2 | tr -d \ ) -print G "$SHORTVERSION - $FULLVERSION" - -MACOS_FLAGS=" - QTPLUGIN+=qsvg - CONFIG-=static - CONFIG+=balrog -" - -MACOSTEST_FLAGS=" - QTPLUGIN+=qsvg - CONFIG-=static - CONFIG+=DUMMY -" - -IOS_FLAGS=" - Q_OS_IOS=1 -" - -printn Y "Mode: " -if [[ "$RELEASE" ]]; then - print G "release" - MODE="CONFIG-=debug CONFIG+=release CONFIG-=debug_and_release" -else - print G "debug" - MODE="CONFIG+=debug CONFIG-=release CONFIG-=debug_and_release" -fi - -OSRUBY=$OS -printn Y "OS: " -print G "$OS" -if [ "$OS" = "macos" ]; then - PLATFORM=$MACOS_FLAGS -elif [ "$OS" = "macostest" ]; then - OSRUBY=macos - PLATFORM=$MACOSTEST_FLAGS -elif [ "$OS" = "ios" ]; then - PLATFORM=$IOS_FLAGS -else - killProcess "Why are we here?" -fi - -VPNMODE= -printn Y "VPN mode: " -if [[ "$NETWORKEXTENSION" ]]; then - print G network-extension - VPNMODE="CONFIG+=networkextension" -else - print G daemon -fi - -printn Y "Web-Extension: " -WEMODE= -if [ "$OS" = "macos" ]; then - print G web-extension - WEMODE="CONFIG+=webextension" -else - print G none -fi - -if [ "$OS" = "ios" ]; then - print Y "Prepare to build OpenVPNAdapter..." - prepare_to_build_vpn - print Y "Building OpenVPNAdapter..." - compile_openvpn_adapter -else - print Y "No OpenVPNAdapter will be built" -fi - -if [ "$OS" = "ios" ]; then - print Y "Prepare to build ShadowSocks..." - prepare_to_build_ss - print Y "Patching the ShadowSocks project..." - patch_ss - ruby ../../scripts/ss_project_patcher.rb "ShadowSocks.xcodeproj" - print G "done." - print Y "Building ShadowSocks Framework..." - compile_ss_frameworks -else - print Y "No ShadowSocket Library will be built" -fi - -if [ "$OS" = "ios" ]; then - print Y "Prepare to build CocoaAsyncSocket..." - prepare_to_build_cas - print Y "Building CocoaAsyncSocket Framework..." - compile_cocoa_async_socket -else - print Y "No CocoaAsyncSocket will be built" -fi - -if [ "$OS" = "ios" ]; then - print Y "Prepare to build Tun2Socks..." - print Y "Building Tun2Socks Framework..." - compile_tun2socks -else - print Y "No Tun2Socks will be built" -fi - -print Y "Creating the Xcode project via qmake..." -$QMAKE \ - VERSION=$SHORTVERSION \ - BUILD_ID=$FULLVERSION \ - -spec macx-xcode \ - $MODE \ - $VPNMODE \ - $WEMODE \ - $PLATFORM \ - ./client.pro || killProcess "Compilation failed" - -print Y "Patching the xcode project..." -ruby scripts/xcode_patcher.rb "AmneziaVPN.xcodeproj" "$SHORTVERSION" "$FULLVERSION" "$OSRUBY" "$NETWORKEXTENSION" || killProcess "Failed to merge xcode with wireguard" -print G "done." - - if command -v "sed" &>/dev/null; then - sed -i '' '/BuildSystemType<\/key>/d' AmneziaVPN.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings - sed -i '' '/Original<\/string>/d' AmneziaVPN.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings - fi - -print G "All done!" -print Y "Opening project in Xcode..." -open AmneziaVPN.xcodeproj diff --git a/client/scripts/build_phase_run_script.sh b/client/scripts/build_phase_run_script.sh deleted file mode 100644 index 510ec6a43..000000000 --- a/client/scripts/build_phase_run_script.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# add `@executable_path/../../Frameworks` to Runpath Search Paths in Build Settings of extension -# put to run script phase in build phases for extension -# Type a script or drag a script file from your workspace to insert its path. -cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" -if [[ -d "Frameworks" ]]; then - rm -fr Frameworks -fi \ No newline at end of file diff --git a/client/scripts/cas_ios.xcconfig b/client/scripts/cas_ios.xcconfig deleted file mode 100644 index 809670354..000000000 --- a/client/scripts/cas_ios.xcconfig +++ /dev/null @@ -1,18 +0,0 @@ -SUPPORTED_PLATFORMS = iphoneos -TARGETED_DEVICE_FAMILY = 1,2 - -HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/Source -//CLANG_CXX_LANGUAGE_STANDARD = gnu++14 -//CLANG_CXX_LIBRARY = libc++ - -//////////////////////////////////////////////////////////////////////////////// -// -// iOS-specific settings -// -IPHONEOS_DEPLOYMENT_TARGET = 9.3 - -SDKROOT[arch=arm64] = iphoneos -SDKROOT[arch=armv7] = iphoneos -SDKROOT[arch=armv7s] = iphoneos - -VALID_ARCHS[sdk=iphoneos*] = arm64 diff --git a/client/scripts/cl_ios.xcconfig b/client/scripts/cl_ios.xcconfig deleted file mode 100644 index 24a13c9d0..000000000 --- a/client/scripts/cl_ios.xcconfig +++ /dev/null @@ -1,18 +0,0 @@ -SUPPORTED_PLATFORMS = iphoneos -TARGETED_DEVICE_FAMILY = 1,2 - -HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/Sources -//CLANG_CXX_LANGUAGE_STANDARD = gnu++14 -//CLANG_CXX_LIBRARY = libc++ - -//////////////////////////////////////////////////////////////////////////////// -// -// iOS-specific settings -// -IPHONEOS_DEPLOYMENT_TARGET = 9.3 - -SDKROOT[arch=arm64] = iphoneos -SDKROOT[arch=armv7] = iphoneos -SDKROOT[arch=armv7s] = iphoneos - -VALID_ARCHS[sdk=iphoneos*] = arm64 \ No newline at end of file diff --git a/client/scripts/codesign_framework.sh b/client/scripts/codesign_framework.sh deleted file mode 100644 index 9360b961a..000000000 --- a/client/scripts/codesign_framework.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/sh - -# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY! - -# Verify that $CODE_SIGN_IDENTITY is set -if [ -z "${CODE_SIGN_IDENTITY}" ] ; then - echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing!" - - if [ "${CONFIGURATION}" = "Release" ] ; then - exit 1 - else - # Code-signing is optional for non-release builds. - exit 0 - fi -fi - -if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then - echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!" - - if [ "${CONFIGURATION}" = "Release" ] ; then - exit 1 - else - # Code-signing is optional for non-release builds. - exit 0 - fi -fi - -ITEMS="" - -FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -if [ -d "$FRAMEWORKS_DIR" ] ; then - FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//") - RESULT=$? - if [[ $RESULT != 0 ]] ; then - exit 1 - fi - - ITEMS="${FRAMEWORKS}" -fi - -LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/" -if [ -d "$LOGINITEMS_DIR" ] ; then - LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app") - RESULT=$? - if [[ $RESULT != 0 ]] ; then - exit 1 - fi - - ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}" -fi - -# Prefer the expanded name, if available. -CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}" -if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then - # Fall back to old behavior. - CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}" -fi - -echo "Identity:" -echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}" - -echo "Entitlements:" -echo "${CODE_SIGN_ENTITLEMENTS}" - -echo "Found:" -echo "${ITEMS}" - -# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below. -SAVED_IFS=$IFS -IFS=$(echo -en "\n\b") - -# Loop through all items. -for ITEM in $ITEMS; -do - echo "Signing '${ITEM}'" - codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}" - RESULT=$? - if [[ $RESULT != 0 ]] ; then - echo "Failed to sign '${ITEM}'." - IFS=$SAVED_IFS - exit 1 - fi -done - -# Restore $IFS. -IFS=$SAVED_IFS - -# Save it to a file in your project. -# Mine is called codesign-frameworks.sh. -# Add a “Run Script” build phase right after your “Copy Embedded Frameworks” build phase. -# You can call it “Codesign Embedded Frameworks”. -# Paste ./codesign-frameworks.sh (or whatever you called your script above) into the script editor text field. -# Build your app. All bundled frameworks will be codesigned. -# from http://stackoverflow.com/questions/7697508/how-do-you-codesign-framework-bundles-for-the-mac-app-store \ No newline at end of file diff --git a/client/scripts/commons.sh b/client/scripts/commons.sh deleted file mode 100644 index aebd37b21..000000000 --- a/client/scripts/commons.sh +++ /dev/null @@ -1,148 +0,0 @@ -#!/bin/bash - -printv() { - if [ -t 1 ]; then - NCOLORS=$(tput colors) - - if test -n "$NCOLORS" && test "$NCOLORS" -ge 8; then - NORMAL="$(tput sgr0)" - RED="$(tput setaf 1)" - GREEN="$(tput setaf 2)" - YELLOW="$(tput setaf 3)" - fi - fi - - if [[ $2 = 'G' ]]; then - # shellcheck disable=SC2086 - echo $1 -e "${GREEN}$3${NORMAL}" - elif [[ $2 = 'Y' ]]; then - # shellcheck disable=SC2086 - echo $1 -e "${YELLOW}$3${NORMAL}" - elif [[ $2 = 'N' ]]; then - # shellcheck disable=SC2086 - echo $1 -e "$3" - else - # shellcheck disable=SC2086 - echo $1 -e "${RED}$3${NORMAL}" - fi -} - -print() { - printv '' "$1" "$2" -} - -printn() { - printv "-n" "$1" "$2" -} - -error() { - printv '' R "$1" -} - -XCODEBUILD="/usr/bin/xcodebuild" -WORKINGDIR=`pwd` -PATCH="/usr/bin/patch" -export PATH=$GOPATH:$PATH - -prepare_to_build_vpn() { - cat $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/Project.xcconfig > $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig - cat << EOF >> $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig - PROJECT_TEMP_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/OpenVPNAdapter.build - CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos - BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos -EOF -} - -compile_openvpn_adapter() { - cd 3rd/OpenVPNAdapter - if $XCODEBUILD -scheme OpenVPNAdapter -configuration Release -xcconfig Configuration/amnezia.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project OpenVPNAdapter.xcodeproj ; then - print Y "OpenVPNAdapter built successfully" - else - killProcess "OpenVPNAdapter build failed" - fi - cd ../../ -} - -prepare_to_build_ss() { - cat $WORKINGDIR/scripts/ss_ios.xcconfig > $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig - cat << EOF >> $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig -PROJECT_TEMP_DIR = $WORKINGDIR/3rd/ShadowSocks/build/ShadowSocks.build -CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos -BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos -EOF -} - -patch_ss() { - cd 3rd/ShadowSocks -} - -compile_ss_frameworks() { - if $XCODEBUILD -scheme ShadowSocks -configuration Release -xcconfig ss_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project ShadowSocks.xcodeproj ; then - print Y "ShadowSocks built successfully" - else - killProcess "ShadowSocks build failed" - fi - cd ../../ -} - -prepare_to_build_cas() { - cat $WORKINGDIR/scripts/cas_ios.xcconfig > $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig - cat << EOF >> $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig -PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/CocoaAsyncSocket.build -CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos -BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos -EOF -} - -compile_cocoa_async_socket() { - cd 3rd/CocoaAsyncSocket - if $XCODEBUILD -scheme 'iOS Framework' -configuration Release -xcconfig cas_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project CocoaAsyncSocket.xcodeproj ; then - print Y "CocoaAsyncSocket built successfully" - else - killProcess "CocoaAsyncSocket build failed" - fi - cd ../../ -} - -compile_tun2socks() { - cd 3rd/outline-go-tun2socks - go get -d ./... - go get -u golang.org/x/sys - if GOOS=ios GOARCH=arm64 GOFLAGS="-tags=ios" CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_CXXFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_LDFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_ENABLED=1 DARWIN_SDK=iphoneos gomobile bind -a -ldflags="-w -s" -bundleid org.amnezia.tun2socks -target=ios/arm64 -tags ios -o ./build/ios/Tun2Socks.xcframework github.com/Jigsaw-Code/outline-go-tun2socks/outline/apple github.com/Jigsaw-Code/outline-go-tun2socks/outline/shadowsocks ; then - print Y "Tun2Socks built successfully" - else - print "Please check that path to bin folder with gomobile is in your PATH" - print "Usually it's in GOPATH/bin, e.g. /usr/local/go/bin" - killProcess "Tun2Socks build failed" - fi - cd ../../ -} - -prepare_to_build_cl() { - cat $WORKINGDIR/scripts/cl_ios.xcconfig > $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig - cat << EOF >> $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig -PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/CocoaLumberjack.build -CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos -BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos -EOF -} - -compile_cocoalamberjack() { - cd 3rd/CocoaLumberjack - if $XCODEBUILD -scheme 'CocoaLumberjack' -configuration Release -xcconfig cl_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project Lumberjack.xcodeproj ; then - print Y "CocoaLumberjack built successfully" - else - killProcess "CocoaLumberjack build failed" - fi - cd ../../ -} - -killProcess() { - if [[ "$1" ]]; then - error "$1" - else - error Failed - fi - - exit 1 -} diff --git a/client/scripts/pp_ios.xcconfig b/client/scripts/pp_ios.xcconfig deleted file mode 100644 index 3dd0c4d7e..000000000 --- a/client/scripts/pp_ios.xcconfig +++ /dev/null @@ -1,18 +0,0 @@ -SUPPORTED_PLATFORMS = iphoneos -TARGETED_DEVICE_FAMILY = 1,2 - -HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/PacketProcessor -//CLANG_CXX_LANGUAGE_STANDARD = gnu++14 -//CLANG_CXX_LIBRARY = libc++ - -//////////////////////////////////////////////////////////////////////////////// -// -// iOS-specific settings -// -IPHONEOS_DEPLOYMENT_TARGET = 9.3 - -SDKROOT[arch=arm64] = iphoneos -SDKROOT[arch=armv7] = iphoneos -SDKROOT[arch=armv7s] = iphoneos - -VALID_ARCHS[sdk=iphoneos*] = arm64 diff --git a/client/scripts/ss_ios.xcconfig b/client/scripts/ss_ios.xcconfig deleted file mode 100644 index 163b20cb4..000000000 --- a/client/scripts/ss_ios.xcconfig +++ /dev/null @@ -1,20 +0,0 @@ -SUPPORTED_PLATFORMS = iphoneos -TARGETED_DEVICE_FAMILY = 1,2 - -HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/ShadowSocks -//HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/ShadowSocks $(SRCROOT)/ShadowSocks/libcares/include $(SRCROOT)/ShadowSocks/libev/arm64/include $(SRCROOT)/ShadowSocks/libsodium/include $(SRCROOT)/ShadowSocks/mbedtls/include $(SRCROOT)/ShadowSocks/pcre/arm64/include $(SRCROOT)/ShadowSocks/shadowsocks-libev/include - -//CLANG_CXX_LANGUAGE_STANDARD = gnu++14 -//CLANG_CXX_LIBRARY = libc++ - -//////////////////////////////////////////////////////////////////////////////// -// -// iOS-specific settings -// -IPHONEOS_DEPLOYMENT_TARGET = 9.3 - -SDKROOT[arch=arm64] = iphoneos -SDKROOT[arch=armv7] = iphoneos -SDKROOT[arch=armv7s] = iphoneos - -VALID_ARCHS[sdk=iphoneos*] = arm64 diff --git a/client/scripts/ss_patch.diff b/client/scripts/ss_patch.diff deleted file mode 100644 index de8135e4a..000000000 --- a/client/scripts/ss_patch.diff +++ /dev/null @@ -1,87 +0,0 @@ -diff --git a/ShadowPath/Privoxy/pcre/pcreposix.c b/ShadowPath/Privoxy/pcre/pcreposix.c ---- a/ShadowPath/Privoxy/pcre/pcreposix.c -+++ b/ShadowPath/Privoxy/pcre/pcreposix.c -@@ -146,13 +146,13 @@ message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))? - length = strlen(message) + 1; - - addmessage = " at offset "; --addlength = (preg != NULL && (int)preg->re_erroffset != -1)? -+addlength = (preg != NULL && (int)preg->re_nsub != -1)? - strlen(addmessage) + 6 : 0; - - if (errbuf_size > 0) - { - if (addlength > 0 && errbuf_size >= length + addlength) -- sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset); -+ sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_nsub); - else - { - strncpy(errbuf, message, errbuf_size - 1); -@@ -173,7 +173,7 @@ return length + addlength; - void - pcre_regfree(regex_t *preg) - { --(pcre_free)(preg->re_pcre); -+(pcre_free)(preg->re_g); - } - - -@@ -203,12 +203,12 @@ int options = 0; - if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS; - if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE; - --preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL); --preg->re_erroffset = erroffset; -+preg->re_g = pcre_compile(pattern, options, &errorptr, &erroffset, NULL); -+preg->re_nsub = erroffset; - --if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr); -+if (preg->re_g == NULL) return pcre_posix_error_code(errorptr); - --preg->re_nsub = pcre_info(preg->re_pcre, NULL, NULL); -+preg->re_nsub = pcre_info(preg->re_g, NULL, NULL); - return 0; - } - -@@ -235,7 +235,7 @@ int *ovector = NULL; - if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL; - if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL; - --preg->re_erroffset = (size_t)(-1); /* Only has meaning after compile */ -+preg->re_nsub = (size_t)(-1); /* Only has meaning after compile */ - - if (nmatch > 0) - { -@@ -243,7 +243,7 @@ if (nmatch > 0) - if (ovector == NULL) return REG_ESPACE; - } - --rc = pcre_exec(preg->re_pcre, NULL, string, (int)strlen(string), 0, options, -+rc = pcre_exec(preg->re_g, NULL, string, (int)strlen(string), 0, options, - ovector, nmatch * 3); - - if (rc == 0) rc = nmatch; /* All captured slots were filled in */ -diff --git a/ShadowPath/shadowsocks-libev/src/http.h b/ShadowPath/shadowsocks-libev/src/http.h -index 914815a..e312dd3 100644 ---- a/ShadowPath/shadowsocks-libev/src/http.h -+++ b/ShadowPath/shadowsocks-libev/src/http.h -@@ -29,6 +29,6 @@ - #include - #include "protocol.h" - --const protocol_t *const http_protocol; -+extern const protocol_t *const http_protocol; - - #endif -diff --git a/ShadowPath/shadowsocks-libev/src/tls.h b/ShadowPath/shadowsocks-libev/src/tls.h -index 3998913..ddbee11 100644 ---- a/ShadowPath/shadowsocks-libev/src/tls.h -+++ b/ShadowPath/shadowsocks-libev/src/tls.h -@@ -28,6 +28,6 @@ - - #include "protocol.h" - --const protocol_t *const tls_protocol; -+extern const protocol_t *const tls_protocol; - - #endif diff --git a/client/scripts/ss_project_patcher.rb b/client/scripts/ss_project_patcher.rb deleted file mode 100644 index a0582b218..000000000 --- a/client/scripts/ss_project_patcher.rb +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/ruby - -require 'xcodeproj' - -class SSPatcher - attr :project - attr :target_main - - def run(file) - open_project file - open_target_main - - patch_main_target - - @project.save - end - - def open_project(file) - @project = Xcodeproj::Project.open(file) - die 'Failed to open the project file: ' + file if @project.nil? - end - - def open_target_main - @target_main = @project.native_targets - .select { |target| target.name == 'ShadowSocks' } - .first - return @target_main if not @target_main.nil? - - die 'Unable to open ShadowSocks target' - end - - def patch_main_target - @target_main.resources_build_phase.files.each do |f| - puts f.display_name - if f.display_name === "LICENSE" - f.remove_from_project - end - end - end - - def die(msg) - print $msg - exit 1 - end -end - -if ARGV.length < 1 - puts "Usage: - diff --git a/service/buildlib/buildlib.pro b/service/buildlib/buildlib.pro deleted file mode 100644 index 1e51cc1db..000000000 --- a/service/buildlib/buildlib.pro +++ /dev/null @@ -1,13 +0,0 @@ -TEMPLATE=lib -CONFIG += qt dll qtservice-buildlib -mac:CONFIG += absolute_library_soname -win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release build_all -include(../src/qtservice.pri) -TARGET = $$QTSERVICE_LIBNAME -DESTDIR = $$QTSERVICE_LIBDIR -win32 { - DLLDESTDIR = $$[QT_INSTALL_BINS] - QMAKE_DISTCLEAN += $$[QT_INSTALL_BINS]\\$${QTSERVICE_LIBNAME}.dll -} -target.path = $$DESTDIR -INSTALLS += target diff --git a/service/common.pri b/service/common.pri deleted file mode 100644 index d84875376..000000000 --- a/service/common.pri +++ /dev/null @@ -1,10 +0,0 @@ -#exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtservice-uselib -TEMPLATE += fakelib -QTSERVICE_LIBNAME = QtSolutions_Service-head -CONFIG(debug, debug|release) { - mac:QTSERVICE_LIBNAME = $$member(QTSERVICE_LIBNAME, 0)_debug - else:win32:QTSERVICE_LIBNAME = $$member(QTSERVICE_LIBNAME, 0)d -} -TEMPLATE -= fakelib -QTSERVICE_LIBDIR = $$PWD/lib -unix:qtservice-uselib:!qtservice-buildlib:QMAKE_RPATHDIR += $$QTSERVICE_LIBDIR diff --git a/service/server/CMakeLists.txt b/service/server/CMakeLists.txt index 687b382ad..c68a1dd92 100644 --- a/service/server/CMakeLists.txt +++ b/service/server/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Core Network RemoteObjects Core5Compat) qt_standard_project_setup() +configure_file(${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) + set(HEADERS ${CMAKE_CURRENT_LIST_DIR}/../../client/utilities.h ${CMAKE_CURRENT_LIST_DIR}/../../ipc/ipc.h @@ -18,6 +20,7 @@ set(HEADERS ${CMAKE_CURRENT_LIST_DIR}/logger.h ${CMAKE_CURRENT_LIST_DIR}/router.h ${CMAKE_CURRENT_LIST_DIR}/systemservice.h + ${CMAKE_CURRENT_BINARY_DIR}/version.h ) set(SOURCES diff --git a/service/server/logger.cpp b/service/server/logger.cpp index 8b44e0c6d..f9d2ab4cf 100644 --- a/service/server/logger.cpp +++ b/service/server/logger.cpp @@ -5,7 +5,7 @@ #include -#include "defines.h" +#include "version.h" #include "utilities.h" QFile Logger::m_file; diff --git a/service/server/main.cpp b/service/server/main.cpp index fe5666524..8834b0886 100644 --- a/service/server/main.cpp +++ b/service/server/main.cpp @@ -1,6 +1,6 @@ #include -#include "defines.h" +#include "version.h" #include "localserver.h" #include "logger.h" #include "systemservice.h" diff --git a/service/server/server.pro b/service/server/server.pro deleted file mode 100644 index ca7d85cb4..000000000 --- a/service/server/server.pro +++ /dev/null @@ -1,71 +0,0 @@ -TARGET = AmneziaVPN-service -TEMPLATE = app -CONFIG += console qt no_batch -QT += core network remoteobjects -equals(QT_MAJOR_VERSION, 6): QT += core5compat - -HEADERS = \ - ../../client/utilities.h \ - ../../ipc/ipc.h \ - ../../ipc/ipcserver.h \ - ../../ipc/ipcserverprocess.h \ - localserver.h \ - logger.h \ - router.h \ - systemservice.h - -SOURCES = \ - ../../client/utilities.cpp \ - ../../ipc/ipcserver.cpp \ - ../../ipc/ipcserverprocess.cpp \ - localserver.cpp \ - logger.cpp \ - main.cpp \ - router.cpp \ - systemservice.cpp - -win32 { -HEADERS += \ - tapcontroller_win.h \ - router_win.h - -SOURCES += \ - tapcontroller_win.cpp \ - router_win.cpp - -LIBS += \ - -luser32 \ - -lrasapi32 \ - -lshlwapi \ - -liphlpapi \ - -lws2_32 \ - -liphlpapi \ - -lgdi32 \ - -lAdvapi32 \ - -lKernel32 -} - -macx { -HEADERS += \ - router_mac.h \ - helper_route_mac.h - -SOURCES += \ - router_mac.cpp \ - helper_route_mac.c -} - -linux { -HEADERS += \ - router_linux.h - -SOURCES += \ - router_linux.cpp -} - -include(../src/qtservice.pri) - -INCLUDEPATH += "$$PWD/../../client" - -REPC_SOURCE += ../../ipc/ipc_interface.rep -!ios: REPC_SOURCE += ../../ipc/ipc_process_interface.rep diff --git a/service/server/systemservice.cpp b/service/server/systemservice.cpp index 8ec364491..8af7dcb86 100644 --- a/service/server/systemservice.cpp +++ b/service/server/systemservice.cpp @@ -1,4 +1,4 @@ -#include "defines.h" +#include "version.h" #include "localserver.h" #include "systemservice.h" diff --git a/service/service.pro b/service/service.pro deleted file mode 100644 index 4c9a05368..000000000 --- a/service/service.pro +++ /dev/null @@ -1,10 +0,0 @@ -!ios:!android { - TEMPLATE=subdirs - CONFIG += ordered - include(common.pri) - qtservice-uselib:SUBDIRS=buildlib - SUBDIRS+=server -} -win32 { - SUBDIRS+=wireguard-service -} diff --git a/service/src/qtservice.pri b/service/src/qtservice.pri deleted file mode 100644 index 09452981f..000000000 --- a/service/src/qtservice.pri +++ /dev/null @@ -1,21 +0,0 @@ -include(../common.pri) -INCLUDEPATH += $$PWD -DEPENDPATH += $$PWD -!win32:QT += network -win32:LIBS += -luser32 - -qtservice-uselib:!qtservice-buildlib { - LIBS += -L$$QTSERVICE_LIBDIR -l$$QTSERVICE_LIBNAME -} else { - HEADERS += $$PWD/qtservice.h \ - $$PWD/qtservice_p.h - SOURCES += $$PWD/qtservice.cpp - win32:SOURCES += $$PWD/qtservice_win.cpp - unix:HEADERS += $$PWD/qtunixsocket.h $$PWD/qtunixserversocket.h - unix:SOURCES += $$PWD/qtservice_unix.cpp $$PWD/qtunixsocket.cpp $$PWD/qtunixserversocket.cpp -} - -win32 { - qtservice-buildlib:shared:DEFINES += QT_QTSERVICE_EXPORT - else:qtservice-uselib:DEFINES += QT_QTSERVICE_IMPORT -} diff --git a/service/wireguard-service/wireguard-service.pro b/service/wireguard-service/wireguard-service.pro deleted file mode 100644 index f248bbbff..000000000 --- a/service/wireguard-service/wireguard-service.pro +++ /dev/null @@ -1,23 +0,0 @@ -TARGET = wireguard-service -TEMPLATE = app -CONFIG += console -CONFIG -= app_bundle -CONFIG -= qt -LIBS += \ - -luser32 \ - -lrasapi32 \ - -lshlwapi \ - -liphlpapi \ - -lws2_32 \ - -liphlpapi \ - -lgdi32 \ - -lAdvapi32 \ - -lKernel32 - -HEADERS = \ - wireguardtunnelservice.h - -SOURCES = \ - main.cpp \ - wireguardtunnelservice.cpp - diff --git a/version.h.in b/version.h.in new file mode 100644 index 000000000..1421bd687 --- /dev/null +++ b/version.h.in @@ -0,0 +1,16 @@ +#ifndef VERSION_H +#define VERSION_H + +#ifndef APP_VERSION +#define APP_VERSION "@CMAKE_PROJECT_VERSION@" +#endif + +#ifndef APP_MAJOR_VERSION +#define APP_MAJOR_VERSION "@APP_MAJOR_VERSION@" +#endif + +#define APPLICATION_NAME "AmneziaVPN" +#define SERVICE_NAME "AmneziaVPN-service" +#define ORGANIZATION_NAME "AmneziaVPN.ORG" + +#endif // VERSION_H