diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt
index 6805dd9d0..557188d10 100644
--- a/client/CMakeLists.txt
+++ b/client/CMakeLists.txt
@@ -278,9 +278,7 @@ if(ANDROID)
)
endif()
-qt_add_executable(${PROJECT} ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC})
-qt_add_translations(${PROJECT} TS_FILES
- ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru.ts)
+
if(IOS)
message("Client iOS build")
@@ -296,10 +294,12 @@ if(IOS)
find_library(FW_STOREKIT StoreKit)
find_library(FW_USERNOTIFICATIONS UserNotifications)
- set(LIBS ${LIBS} FW_AUTHENTICATIONSERVICES FW_UIKIT FW_FOUNDATION FW_STOREKIT FW_USERNOTIFICATIONS)
+ set(LIBS ${LIBS} ${FW_AUTHENTICATIONSERVICES} ${FW_UIKIT} ${FW_FOUNDATION} ${FW_STOREKIT} ${FW_USERNOTIFICATIONS})
add_compile_definitions(MVPN_IOS)
+ message("shahzain ${CMAKE_CURRENT_LIST_DIR}")
+
set(HEADERS ${HEADERS}
${CMAKE_CURRENT_LIST_DIR}/protocols/ios_vpnprotocol.h
${CMAKE_CURRENT_LIST_DIR}/platforms/ios/iosnotificationhandler.h
@@ -332,10 +332,8 @@ if(IOS)
- set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
- add_subdirectory(ios/networkextension)
- add_dependencies(${PROJECT} networkextension)
- set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_APP_EXTENSIONS networkextension)
+
+
# Q_ENABLE_BITCODE.value = NO
# Q_ENABLE_BITCODE.name = ENABLE_BITCODE
@@ -348,20 +346,20 @@ if(CMAKE_OSX_SYSROOT STREQUAL "iphoneos")
- set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.amnezia.${PROJECT}"
- OUTPUT_NAME "AmneziaVPN"
- XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1"
- XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "X7UJ388FXK"
- MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/ios/app/Info.plist
- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development")
- find_library(LIB_LIBCRYPTO NAMES "libcrypto.a"
- PATHS ${PROJECT_SOURCE_DIR}/3rd/OpenSSL/lib/ios/iphone/ NO_DEFAULT_PATH)
+ # find_library(LIB_LIBCRYPTO NAMES "libcrypto.a"
+ # PATHS ${PROJECT_SOURCE_DIR}/3rd/OpenSSL/lib/ios/iphone/ NO_DEFAULT_PATH)
- find_library(LIB_SSL NAMES "libssl.a"
- PATHS ${PROJECT_SOURCE_DIR}/3rd/OpenSSL/lib/ios/iphone/ NO_DEFAULT_PATH)
+ #find_library(LIB_SSL NAMES "libssl.a"
+ # PATHS ${PROJECT_SOURCE_DIR}/3rd/OpenSSL/lib/ios/iphone/ NO_DEFAULT_PATH)
- # set(LIBS ${LIBS} LIB_LIBCRYPTO LIB_SSL)
+
+
+ #set(LIBS ${LIBS} LIB_LIBCRYPTO LIB_SSL)
+
+ # target_link_libraries(${PROJECT} PRIVATE ${LIB_LIBCRYPTO})
+
+ # target_link_libraries(${PROJECT} PRIVATE ${LIB_SSL})
endif()
@@ -394,8 +392,91 @@ endif()
# }
#endif()
+
+qt_add_executable(${PROJECT} ${SOURCES} ${HEADERS} ${RESOURCES} ${QRC})
+qt_add_translations(${PROJECT} TS_FILES
+ ${CMAKE_CURRENT_LIST_DIR}/translations/amneziavpn_ru.ts)
+
# NETWORKEXTENSION=1
+if(IOS)
+ enable_language(OBJC)
+ enable_language(OBJCXX)
+ enable_language(Swift)
+ include(src/cmake/osxtools.cmake)
+
+ set_target_properties(${PROJECT} PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO")
+
+
+ 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 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_SOURCE_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_target_properties(${PROJECT} PROPERTIES
+ OUTPUT_NAME "AmneziaVPN"
+ MACOSX_BUNDLE ON
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/ios/app/Info.plist.in
+ 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_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_SOURCE_DIR}/ios/app/main.entitlements"
+ XCODE_ATTRIBUTE_MARKETING_VERSION "${CMAKE_PROJECT_VERSION}"
+ XCODE_GENERATE_SCHEME TRUE
+)
+target_include_directories(${PROJECT} PRIVATE ${CMAKE_SOURCE_DIR})
+
+ target_compile_options(${PROJECT} PRIVATE
+ -DGROUP_ID=\"${BUILD_IOS_GROUP_IDENTIFIER}\"
+ -DVPN_NE_BUNDLEID=\"${BUILD_IOS_APP_IDENTIFIER}.network-extension\"
+ )
+
+
+ target_sources(${PROJECT} PRIVATE
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/Shared/Keychain.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/IPAddressRange.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/InterfaceConfiguration.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/Shared/Model/NETunnelProviderProtocol+Extension.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/TunnelConfiguration.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/Shared/Model/TunnelConfiguration+WgQuickConfig.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/Endpoint.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/Shared/Model/String+ArrayConversion.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/PeerConfiguration.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/DNSServer.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardApp/LocalizationHelper.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/Shared/FileManager+Extension.swift
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKitC/x25519.c
+ ${CMAKE_SOURCE_DIR}/3rd/wireguard-apple/Sources/WireGuardKit/PrivateKey.swift
+)
+
+ target_sources(${PROJECT} PRIVATE
+ platforms/ios/iosvpnprotocol.swift
+ platforms/ios/ioslogger.swift
+ )
+ add_subdirectory(ios/networkextension)
+ add_dependencies(${PROJECT} networkextension)
+ set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_APP_EXTENSIONS networkextension)
+
+endif()
if(ANDROID)
diff --git a/client/ios/app/Info.plist.in b/client/ios/app/Info.plist.in
new file mode 100644
index 000000000..07dc596fe
--- /dev/null
+++ b/client/ios/app/Info.plist.in
@@ -0,0 +1,53 @@
+
+
+
+
+ CFBundleAllowMixedLocalizations
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ ${QT_INTERNAL_DOLLAR_VAR}{PRODUCT_NAME}
+ CFBundleExecutable
+ ${MACOSX_BUNDLE_EXECUTABLE_NAME}
+ CFBundleIdentifier
+ ${MACOSX_BUNDLE_GUI_IDENTIFIER}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${MACOSX_BUNDLE_BUNDLE_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ ${MACOSX_BUNDLE_SHORT_VERSION_STRING}
+ CFBundleVersion
+ ${MACOSX_BUNDLE_BUNDLE_VERSION}
+ NSHumanReadableCopyright
+ ${MACOSX_BUNDLE_COPYRIGHT}
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ LSSupportsOpeningDocumentsInPlace
+
+ UILaunchStoryboardName
+ AmneziaVPNLaunchScreen
+ UIRequiredDeviceCapabilities
+
+ UIRequiresFullScreen
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationPortrait
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIUserInterfaceStyle
+ Light
+ com.wireguard.ios.app_group_id
+ group.org.amnezia.amneziavpn
+ UIViewControllerBasedStatusBarAppearance
+
+
+
\ No newline at end of file
diff --git a/client/platforms/ios/WireGuard-Bridging-Header.h b/client/platforms/ios/WireGuard-Bridging-Header.h
index 40b6c89de..0ce523562 100644
--- a/client/platforms/ios/WireGuard-Bridging-Header.h
+++ b/client/platforms/ios/WireGuard-Bridging-Header.h
@@ -2,7 +2,7 @@
* 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/WireGuardKitGo/wireguard-go-version.h"
#include "3rd/wireguard-apple/Sources/WireGuardKitC/WireGuardKitC.h"
#include
diff --git a/client/platforms/ios/ioslogger.swift b/client/platforms/ios/ioslogger.swift
index e364d365a..644f75819 100644
--- a/client/platforms/ios/ioslogger.swift
+++ b/client/platforms/ios/ioslogger.swift
@@ -37,7 +37,7 @@ public class Logger {
appVersion += " (\(appBuild))"
}
- let goBackendVersion = WIREGUARD_GO_VERSION
+ let goBackendVersion = "1"
Logger.global?.log(message: "App version: \(appVersion); Go backend version: \(goBackendVersion)")
}
}
diff --git a/client/protocols/ios_vpnprotocol.mm b/client/protocols/ios_vpnprotocol.mm
index 8decd8853..14b7ee9a8 100644
--- a/client/protocols/ios_vpnprotocol.mm
+++ b/client/protocols/ios_vpnprotocol.mm
@@ -10,10 +10,12 @@
#include
-#include "ipaddressrange.h"
+#include "platforms/ios/ipaddressrange.h"
#include "ios_vpnprotocol.h"
#include "core/errorstrings.h"
#include "AmneziaVPN-Swift.h"
+#include "UIKit/UIKit.h"
+
namespace
{
diff --git a/client/src/cmake/osxtools.cmake b/client/src/cmake/osxtools.cmake
new file mode 100644
index 000000000..9e711d464
--- /dev/null
+++ b/client/src/cmake/osxtools.cmake
@@ -0,0 +1,148 @@
+if(NOT APPLE)
+ message(FATAL_ERROR "OSX Tools are only supported on Apple targets")
+endif()
+
+if(CMAKE_COLOR_MAKEFILE)
+ set(COMMENT_ECHO_COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --blue --bold)
+else()
+ set(COMMENT_ECHO_COMMAND ${CMAKE_COMMAND} -E echo)
+endif()
+
+if(CODE_SIGN_IDENTITY)
+ find_program(CODESIGN_BIN NAMES codesign)
+ if(NOT CODESIGN_BIN)
+ messsage(FATAL_ERROR "Cannot sign code, could not find 'codesign' executable")
+ endif()
+ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${CODE_SIGN_IDENTITY})
+endif()
+
+## A helper to copy files into the application bundle
+function(osx_bundle_files TARGET)
+ cmake_parse_arguments(BUNDLE
+ ""
+ "DESTINATION"
+ "FILES"
+ ${ARGN})
+
+ if(NOT BUNDLE_DESTINATION)
+ set(BUNDLE_DESTINATION Resources)
+ endif()
+
+ foreach(FILE ${BUNDLE_FILES})
+ add_custom_command(TARGET ${TARGET} POST_BUILD
+ COMMAND_EXPAND_LISTS
+ COMMAND ${COMMENT_ECHO_COMMAND} "Bundling ${FILE}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory $/${BUNDLE_DESTINATION}
+ COMMAND ${CMAKE_COMMAND} -E copy ${FILE} $/${BUNDLE_DESTINATION}/
+ )
+ endforeach()
+endfunction(osx_bundle_files)
+
+## A helper to bundle an asset catalog.
+function(osx_bundle_assetcatalog TARGET)
+ cmake_parse_arguments(XCASSETS
+ ""
+ "CATALOG;PLATFORM"
+ "DEVICES"
+ ${ARGN})
+
+ if(XCASSETS_PLATFORM)
+ set(XCASSETS_TARGET_ARGS --platform ${XCASSETS_PLATFORM})
+ elseif(IOS)
+ set(XCASSETS_TARGET_ARGS --platform iphoneos)
+ else()
+ set(XCASSETS_TARGET_ARGS --platform macosx)
+ endif()
+ foreach(DEVNAME ${XCASSETS_DEVICES})
+ list(APPEND XCASSETS_TARGET_ARGS --target-device ${DEVNAME})
+ endforeach()
+ list(APPEND XCASSETS_TARGET_ARGS --minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET})
+
+ ## Compile the asset catalog
+ set(XCASSETS_GEN_PLIST ${CMAKE_CURRENT_BINARY_DIR}/xcassets_generated_info.plist)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car ${XCASSETS_GEN_PLIST}
+ MAIN_DEPENDENCY ${XCASSETS_CATALOG}/Contents.json
+ COMMENT "Building asset catalog"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/xcassets
+ COMMAND actool --output-format human-readable-text --notices --warnings
+ ${XCASSETS_TARGET_ARGS}
+ --app-icon AppIcon
+ --output-partial-info-plist ${XCASSETS_GEN_PLIST}
+ --development-region en --enable-on-demand-resources NO
+ --compile ${CMAKE_CURRENT_BINARY_DIR}/xcassets ${XCASSETS_CATALOG}
+ )
+
+ ## Patch the asset catalog into the target bundle.
+ if(NOT IOS)
+ set(XCASSETS_RESOURCE_DIR "Resources")
+ endif()
+ add_custom_command(TARGET ${TARGET} POST_BUILD
+ COMMENT "Bundling asset catalog"
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/xcassets $/${XCASSETS_RESOURCE_DIR}
+ COMMAND ${CMAKE_SOURCE_DIR}/scripts/macos/merge_plist.py ${XCASSETS_GEN_PLIST} -o $/Info.plist
+ )
+
+ target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car)
+ set_source_files_properties(
+ ${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car
+ ${XCASSETS_GEN_PLIST}
+ PROPERTIES
+ GENERATED TRUE
+ HEADER_FILE_ONLY TRUE
+ )
+
+ target_sources(${TARGET} PRIVATE ${XCASSETS_GEN_PLIST})
+ set_source_files_properties(${XCASSETS_GEN_PLIST} PROPERTIES GENERATED TRUE)
+endfunction()
+
+## A helper to code-sign an executable.
+function(osx_codesign_target TARGET)
+ ## Xcode should perform automatic code-signing for us.
+ if(XCODE)
+ return()
+ endif()
+
+ if(CODE_SIGN_IDENTITY)
+ cmake_parse_arguments(CODESIGN
+ "FORCE"
+ ""
+ "OPTIONS;FILES"
+ ${ARGN})
+
+ set(CODESIGN_ARGS --timestamp -s "${CODE_SIGN_IDENTITY}")
+ if(CODESIGN_FORCE)
+ list(APPEND CODESIGN_ARGS -f)
+ endif()
+ if(CODESIGN_OPTIONS)
+ list(JOIN CODESIGN_OPTIONS , CODESIGN_OPTIONS_JOINED)
+ list(APPEND CODESIGN_ARGS "--option=${CODESIGN_OPTIONS_JOINED}")
+ endif()
+
+ ## Process the entitlements as though Xcode has done variable expansion.
+ ## This only supports the PRODUCT_BUNDLE_IDENTIFIER and DEVELOPMENT_TEAM
+ ## for now.
+ get_target_property(CODESIGN_ENTITLEMENTS ${TARGET} XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS)
+ if(CODESIGN_ENTITLEMENTS)
+ add_custom_command(TARGET ${TARGET} POST_BUILD
+ COMMAND ${CMAKE_SOURCE_DIR}/scripts/utils/make_template.py ${CODESIGN_ENTITLEMENTS}
+ -k PRODUCT_BUNDLE_IDENTIFIER=$
+ -k DEVELOPMENT_TEAM=$
+ -o ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_codesign.entitlements
+ )
+ list(APPEND CODESIGN_ARGS --entitlements ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_codesign.entitlements)
+ endif()
+
+ ## If no files were specified, sign the target itself.
+ if(NOT CODESIGN_FILES)
+ set(CODESIGN_FILES $)
+ endif()
+
+ foreach(FILE ${CODESIGN_FILES})
+ add_custom_command(TARGET ${TARGET} POST_BUILD VERBATIM
+ COMMAND ${COMMENT_ECHO_COMMAND} "Signing ${TARGET}: ${FILE}"
+ COMMAND ${CODESIGN_BIN} ${CODESIGN_ARGS} ${FILE}
+ )
+ endforeach()
+ endif()
+endfunction()
\ No newline at end of file