diff --git a/client/3rd/OpenVPNAdapter b/client/3rd/OpenVPNAdapter index 7c821a8d..33afba08 160000 --- a/client/3rd/OpenVPNAdapter +++ b/client/3rd/OpenVPNAdapter @@ -1 +1 @@ -Subproject commit 7c821a8d5c1ad5ad94e0763b4f25a875b5a6fe1b +Subproject commit 33afba081c8592e8632128c7f9d6ebe53cae3d08 diff --git a/client/3rd/OpenVPNAdapter.bk b/client/3rd/OpenVPNAdapter.bk new file mode 160000 index 00000000..7c821a8d --- /dev/null +++ b/client/3rd/OpenVPNAdapter.bk @@ -0,0 +1 @@ +Subproject commit 7c821a8d5c1ad5ad94e0763b4f25a875b5a6fe1b diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index b217c509..e712fd4a 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -35,7 +35,7 @@ if(IOS OR MACOS_NE) endif() #Macos Network Extension doesn't need Widgets -if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (NOT MACOS_NE)) +if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (NOT DEFINED MACOS_NE)) set(PACKAGES ${PACKAGES} Widgets) endif() @@ -51,16 +51,16 @@ set(LIBS ${LIBS} if(IOS OR MACOS_NE) set(LIBS ${LIBS} Qt6::Multimedia) endif() -message("Client desktop build ", ${MACOS_NE}) +# message("Client desktop build ", ${MACOS_NE}) #Macos Network Extension doesn't need Widgets -if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE)) +if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT DEFINED MACOS_NE)) set(LIBS ${LIBS} Qt6::Widgets) endif() qt_standard_project_setup() qt_add_executable(${PROJECT} MANUAL_FINALIZATION) -if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE)) +if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT DEFINED MACOS_NE)) qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_interface.rep) qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_process_interface.rep) qt_add_repc_replicas(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/../ipc/ipc_process_tun2socks.rep) @@ -170,12 +170,24 @@ include_directories(mozilla) include_directories(mozilla/shared) include_directories(mozilla/models) -if((NOT IOS) OR (NOT MACOS_NE)) +if(MACOS_NE) + message("MACOS_NE is ON") + add_definitions(-DQ_OS_IOS) + add_definitions(-DMACOS_NE) + message("Add macros for MacOS Network Extension") +else() + message("MACOS_NE is OFF") +endif() + + +if(NOT IOS AND NOT MACOS_NE) + message(" Add header for non-IOS and non-MACOS_NE") set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.h ) endif() + if(NOT ANDROID) set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/ui/notificationhandler.h @@ -220,7 +232,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${PROJECT} PRIVATE "MZ_DEBUG") endif() -if((NOT IOS) OR (NOT MACOS_NE)) +if(NOT IOS AND NOT MACOS_NE) set(SOURCES ${SOURCES} ${CMAKE_CURRENT_LIST_DIR}/platforms/ios/QRCodeReaderBase.cpp ) @@ -328,8 +340,12 @@ if(LINUX AND NOT ANDROID) link_directories(${CMAKE_CURRENT_LIST_DIR}/platforms/linux) endif() +if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) + message("Run this block when MACOS_NE is not defined or set to FALSE") +endif() + # Macos Network Extension doesn't need -if(WIN32 OR (APPLE AND NOT IOS) OR (LINUX AND NOT ANDROID) OR (APPLE AND NOT MACOS_NE)) +if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) message("Client desktop build") add_compile_definitions(AMNEZIA_DESKTOP) @@ -365,11 +381,12 @@ endif() if(IOS) include(cmake/ios.cmake) include(cmake/ios-arch-fixup.cmake) -elseif(APPLE AND NOT IOS AND NOT MACOS_NE) +elseif(APPLE AND NOT IOS AND NOT DEFINED MACOS_NE) include(cmake/osxtools.cmake) include(cmake/macos.cmake) - elseif(APPLE AND NOT IOS AND MACOS_NE) - include(cmake/macos_ne.cmake) +elseif(APPLE AND NOT IOS AND MACOS_NE) + include(cmake/osxtools.cmake) + include(cmake/macos_ne.cmake) endif() target_link_libraries(${PROJECT} PRIVATE ${LIBS}) diff --git a/client/cmake/macos_ne.cmake b/client/cmake/macos_ne.cmake index 85fe4fa6..e60c8e1b 100644 --- a/client/cmake/macos_ne.cmake +++ b/client/cmake/macos_ne.cmake @@ -34,22 +34,22 @@ set(LIBS ${LIBS} set(HEADERS ${HEADERS} - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.h - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.h - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.h - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate-C-Interface.h + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.h + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller_wrapper.h + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosnotificationhandler.h + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate.h + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate-C-Interface.h ) -set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h PROPERTIES OBJECTIVE_CPP_HEADER TRUE) +set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.h PROPERTIES OBJECTIVE_CPP_HEADER TRUE) set(SOURCES ${SOURCES} - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.mm - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.mm - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.mm - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosglue.mm - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QRCodeReaderBase.mm - ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/ios_controller_wrapper.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosnotificationhandler.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/iosglue.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QRCodeReaderBase.mm + ${CMAKE_CURRENT_SOURCE_DIR}/platforms/macos_ne/QtAppDelegate.mm ) set(ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/images/app.icns) @@ -71,7 +71,7 @@ target_include_directories(${PROJECT} PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS}) set_target_properties(${PROJECT} PROPERTIES XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Info.plist.in + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Info.plist.in #MACOSX_BUNDLE_ICON_FILE "AppIcon" MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN" @@ -79,7 +79,7 @@ set_target_properties(${PROJECT} PROPERTIES MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/app/main.entitlements" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/macos/app/main.entitlements" XCODE_ATTRIBUTE_MARKETING_VERSION "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN" @@ -96,14 +96,14 @@ set_target_properties(${PROJECT} PROPERTIES XCODE_EMBED_APP_EXTENSIONS networkextension XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic - #XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual + # XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual - #XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)" - #XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" + # XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)" + # XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development" - #XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "Mac AppStore AmneziaVPN" - #XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "Mac AppStore AmneziaVPN" + # XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "Mac AppStore AmneziaVPN" + # XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "Mac AppStore AmneziaVPN" ) set_target_properties(${PROJECT} PROPERTIES @@ -127,23 +127,23 @@ set(WG_APPLE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd/amneziawg-apple/Sources) target_sources(${PROJECT} PRIVATE # ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosvpnprotocol.swift ${WG_APPLE_SOURCE_DIR}/WireGuardKitC/x25519.c - ${CLIENT_ROOT_DIR}/platforms/ios/LogController.swift - ${CLIENT_ROOT_DIR}/platforms/ios/Log.swift - ${CLIENT_ROOT_DIR}/platforms/ios/LogRecord.swift - ${CLIENT_ROOT_DIR}/platforms/ios/ScreenProtection.swift - ${CLIENT_ROOT_DIR}/platforms/ios/VPNCController.swift + ${CLIENT_ROOT_DIR}/platforms/macos_ne/LogController.swift + ${CLIENT_ROOT_DIR}/platforms/macos_ne/Log.swift + ${CLIENT_ROOT_DIR}/platforms/macos_ne/LogRecord.swift + ${CLIENT_ROOT_DIR}/platforms/macos_ne/ScreenProtection.swift + ${CLIENT_ROOT_DIR}/platforms/macos_ne/VPNCController.swift ) target_sources(${PROJECT} PRIVATE - #${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy + #${CMAKE_CURRENT_SOURCE_DIR}/macos_ne/app/AmneziaVPNLaunchScreen.storyboard + ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Media.xcassets + ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/PrivacyInfo.xcprivacy ) set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE - #${CMAKE_CURRENT_SOURCE_DIR}/ios/app/AmneziaVPNLaunchScreen.storyboard - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets - ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy + #${CMAKE_CURRENT_SOURCE_DIR}/macos/app/AmneziaVPNLaunchScreen.storyboard + ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Media.xcassets + ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/PrivacyInfo.xcprivacy ) add_subdirectory(macos/networkextension) diff --git a/client/cmake/osxtools.cmake b/client/cmake/osxtools.cmake index a28c9680..ff8c8a77 100644 --- a/client/cmake/osxtools.cmake +++ b/client/cmake/osxtools.cmake @@ -141,6 +141,7 @@ function(osx_codesign_target TARGET) endif() foreach(FILE ${CODESIGN_FILES}) + message(STATUS "Signing ${TARGET}: ${FILE}") add_custom_command(TARGET ${TARGET} POST_BUILD VERBATIM COMMAND ${COMMENT_ECHO_COMMAND} "Signing ${TARGET}: ${FILE}" COMMAND ${CODESIGN_BIN} ${CODESIGN_ARGS} ${FILE} diff --git a/client/configurators/ssh_configurator.cpp b/client/configurators/ssh_configurator.cpp index 308f5947..d21360e3 100644 --- a/client/configurators/ssh_configurator.cpp +++ b/client/configurators/ssh_configurator.cpp @@ -102,7 +102,9 @@ QProcessEnvironment SshConfigurator::prepareEnv() pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\cygwin;"); pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "\\openvpn;"); #elif defined(Q_OS_MACX) +#if !defined(MACOS_NE) pathEnvVar.prepend(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/Contents/MacOS"); +#endif #endif env.insert("PATH", pathEnvVar); diff --git a/client/macos/app/AmneziaVPNLaunchScreen.storyboard b/client/macos/app/AmneziaVPNLaunchScreen.storyboard new file mode 100644 index 00000000..92f79f7e --- /dev/null +++ b/client/macos/app/AmneziaVPNLaunchScreen.storyboard @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/macos/app/Info.plist.in b/client/macos/app/Info.plist.in new file mode 100644 index 00000000..a10160be --- /dev/null +++ b/client/macos/app/Info.plist.in @@ -0,0 +1,178 @@ + + + + + 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 + + NSCameraUsageDescription + Amnezia VPN needs access to the camera for reading QR-codes. + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + CFBundleIcons + + CFBundleIcons~ipad + + 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 + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + WireGuard config + UTTypeIconFiles + + UTTypeIdentifier + org.amnezia.AmneziaVPN.wireguard-config + UTTypeTagSpecification + + public.filename-extension + + conf + cfg + + public.mime-type + + text/plain + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + OpenVPN config + UTTypeIconFiles + + UTTypeIdentifier + org.amnezia.AmneziaVPN.openvpn-config + UTTypeTagSpecification + + public.filename-extension + + ovpn + + public.mime-type + + text/plain + + + + + UTTypeConformsTo + + public.data + + UTTypeDescription + AmneziaVPN backup file + UTTypeIconFiles + + UTTypeIdentifier + org.amnezia.AmneziaVPN.backup-config + UTTypeTagSpecification + + public.filename-extension + + backup + + public.mime-type + + text/plain + + + + + CFBundleDocumentTypes + + + CFBundleTypeName + Amnezia VPN config + LSHandlerRank + Alternate + LSItemContentTypes + + org.amnezia.AmneziaVPN.amnezia-config + org.amnezia.AmneziaVPN.wireguard-config + org.amnezia.AmneziaVPN.openvpn-config + org.amnezia.AmneziaVPN.backup-config + + + + + diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 00000000..bbe3d546 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 00000000..0f2ba915 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 00000000..f88f66c7 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 00000000..51829dc1 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png new file mode 100644 index 00000000..0e28bd7b Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 00000000..81066df7 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 00000000..44858c5a Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 00000000..911f5491 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 00000000..bb44c366 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 00000000..bf9a2c19 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 00000000..dbcf6fad Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 00000000..83c3e6b7 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 00000000..f2a56e74 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 00000000..2714c6bf Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 00000000..a7303586 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png new file mode 100644 index 00000000..d0f20363 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 00000000..ccf90ddc Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 00000000..9f7b1037 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 00000000..918e04f6 Binary files /dev/null and b/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json b/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..3d771d98 --- /dev/null +++ b/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,290 @@ +{ + "images" : [ + { + "filename" : "40.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "60.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "58.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "87.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "80.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "120.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "57.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "57x57" + }, + { + "filename" : "114.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "57x57" + }, + { + "filename" : "120.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "180.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "20.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "40.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "58.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "40.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "80.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "50.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "50x50" + }, + { + "filename" : "100.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "50x50" + }, + { + "filename" : "72.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "72x72" + }, + { + "filename" : "144.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "72x72" + }, + { + "filename" : "76.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "152.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "167.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "24x24", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "27.5x27.5", + "subtype" : "42mm" + }, + { + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "33x33", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "40x40", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "44x44", + "subtype" : "40mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "46x46", + "subtype" : "41mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "50x50", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "51x51", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "54x54", + "subtype" : "49mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "86x86", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "98x98", + "subtype" : "42mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "108x108", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "117x117", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "129x129", + "subtype" : "49mm" + }, + { + "idiom" : "watch-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "idiom" : "car", + "scale" : "2x", + "size" : "60" + }, + { + "idiom" : "car", + "scale" : "3x", + "size" : "60" + }, + { + "idiom" : "watch", + "role" : "longLook", + "scale" : "2x", + "size" : "44x44", + "subtype" : "42mm" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/client/macos/app/Media.xcassets/Contents.json b/client/macos/app/Media.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/client/macos/app/Media.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/client/macos/app/PrivacyInfo.xcprivacy b/client/macos/app/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..24e32f37 --- /dev/null +++ b/client/macos/app/PrivacyInfo.xcprivacy @@ -0,0 +1,33 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + 1C8F.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + + diff --git a/client/macos/app/launch.png b/client/macos/app/launch.png new file mode 100644 index 00000000..175b1afc Binary files /dev/null and b/client/macos/app/launch.png differ diff --git a/client/macos/app/main.entitlements b/client/macos/app/main.entitlements new file mode 100644 index 00000000..d9f00bb1 --- /dev/null +++ b/client/macos/app/main.entitlements @@ -0,0 +1,20 @@ + + + + + com.apple.developer.networking.networkextension + + packet-tunnel-provider + + com.apple.security.application-groups + + group.org.amnezia.AmneziaVPN + + com.apple.security.files.user-selected.read-write + + keychain-access-groups + + $(AppIdentifierPrefix)group.org.amnezia.AmneziaVPN + + + diff --git a/client/macos/networkextension/CMakeLists.txt b/client/macos/networkextension/CMakeLists.txt index 5ae76c44..1f63b0ab 100644 --- a/client/macos/networkextension/CMakeLists.txt +++ b/client/macos/networkextension/CMakeLists.txt @@ -30,7 +30,7 @@ set_target_properties(networkextension PROPERTIES XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks" - # XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic + XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic # #XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual # #XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution: Privacy Technologies OU (X7UJ388FXK)" @@ -187,7 +187,7 @@ target_sources(networkextension PRIVATE target_include_directories(networkextension PRIVATE ${CLIENT_ROOT_DIR}) target_include_directories(networkextension PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) -target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/wireguard/ios/arm64/libwg-go.a) +target_link_libraries(networkextension PRIVATE ${CLIENT_ROOT_DIR}/3rd-prebuilt/3rd-prebuilt/wireguard/macos/x86_64/libwg-go.a) # Print the root directory for debugging purposes message("---------") diff --git a/client/platforms/macos_ne/PacketTunnelProvider+OpenVPN.swift b/client/platforms/macos_ne/PacketTunnelProvider+OpenVPN.swift index 3e0a4a07..bb002f27 100644 --- a/client/platforms/macos_ne/PacketTunnelProvider+OpenVPN.swift +++ b/client/platforms/macos_ne/PacketTunnelProvider+OpenVPN.swift @@ -47,7 +47,8 @@ extension PacketTunnelProvider { let configuration = OpenVPNConfiguration() configuration.fileContent = ovpnConfiguration if str.contains("cloak") { - configuration.setPTCloak() + // TODO disable cloak +// configuration.setPTCloak() } let evaluation: OpenVPNConfigurationEvaluation? diff --git a/client/platforms/macos_ne/iosnotificationhandler.mm b/client/platforms/macos_ne/iosnotificationhandler.mm index 5759c892..a1aa3d8d 100644 --- a/client/platforms/macos_ne/iosnotificationhandler.mm +++ b/client/platforms/macos_ne/iosnotificationhandler.mm @@ -2,15 +2,14 @@ * 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 "platforms/ios/iosnotificationhandler.h" +#include "platforms/macos_ne/iosnotificationhandler.h" #import #import -//#import -/* +// Removed the UIResponder and UIApplicationDelegate references as these are not available in macOS @interface IOSNotificationDelegate - : UIResponder { + : NSObject { IOSNotificationHandler* m_iosNotificationHandler; } @end @@ -18,7 +17,7 @@ @implementation IOSNotificationDelegate - (id)initWithObject:(IOSNotificationHandler*)notification { - self = [super init]; + self = [super init]; // Removed `super init` as it refers to UIResponder, which is iOS specific if (self) { m_iosNotificationHandler = notification; } @@ -30,7 +29,7 @@ withCompletionHandler: (void (^)(UNNotificationPresentationOptions options))completionHandler { Q_UNUSED(center) - completionHandler(UNNotificationPresentationOptionAlert); + completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner); } - (void)userNotificationCenter:(UNUserNotificationCenter*)center @@ -79,7 +78,7 @@ void IOSNotificationHandler::notify(NotificationHandler::Message type, const QSt trigger:trigger]; UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; - center.delegate = id(m_delegate); + center.delegate = (id)m_delegate; [center addNotificationRequest:request withCompletionHandler:^(NSError* _Nullable error) { @@ -87,4 +86,4 @@ void IOSNotificationHandler::notify(NotificationHandler::Message type, const QSt NSLog(@"Local Notification failed"); } }]; -}*/ +} diff --git a/client/protocols/vpnprotocol.cpp b/client/protocols/vpnprotocol.cpp index 056089b8..3b2375cb 100644 --- a/client/protocols/vpnprotocol.cpp +++ b/client/protocols/vpnprotocol.cpp @@ -109,7 +109,7 @@ VpnProtocol *VpnProtocol::factory(DockerContainer container, const QJsonObject & #if defined(Q_OS_WINDOWS) case DockerContainer::Ipsec: return new Ikev2Protocol(configuration); #endif -#if defined(Q_OS_WINDOWS) || defined(Q_OS_MACX) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) +#if defined(Q_OS_WINDOWS) || defined(Q_OS_MACX) and !defined MACOS_NE || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) case DockerContainer::OpenVpn: return new OpenVpnProtocol(configuration); case DockerContainer::Cloak: return new OpenVpnOverCloakProtocol(configuration); case DockerContainer::ShadowSocks: return new ShadowSocksVpnProtocol(configuration); diff --git a/client/translations/amneziavpn_ar_EG.ts b/client/translations/amneziavpn_ar_EG.ts index e176d8eb..515abd56 100644 --- a/client/translations/amneziavpn_ar_EG.ts +++ b/client/translations/amneziavpn_ar_EG.ts @@ -258,18 +258,18 @@ Can't be disabled for current server غير قادر علي فتح الملف - - + + Invalid configuration file ملف تكوين غير صحيح - + Scanned %1 of %2. تم فحص%1 من %2. - + In the imported configuration, potentially dangerous lines were found: في التكوين المستورد، تم العثور على سطور يحتمل أن تكون خطرة: @@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected تم الاتصال - + VPN Disconnected تم إنهاء الاتصال - + AmneziaVPN notification إشعار من AmneziaVPN - + Unsecured network detected: تم العثور علي شبكة غير مؤمنة: @@ -2426,12 +2426,12 @@ Already installed containers were found on the server. All installed containers عنوان خادم IP [:منفذ] - + Continue واصل - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties ستظل جميع البيانات التي تدخلها سرية للغاية ولن تتم مشاركتها أو الكشف عنها ل Amnezia أو أي طرف ثالث @@ -2441,42 +2441,42 @@ Already installed containers were found on the server. All installed containers - + SSH Username - + Password or SSH private key كلمة مرور او مفتاح SSH خاص - + How to run your VPN server كيف تقوم بتشغيل خادم ال VPN الخاص بك - + Where to get connection data, step-by-step instructions for buying a VPS اين تحصل علي بيانات الاتصال, تعليمات خطوة ب خطوة لشراء VPS - + Ip address cannot be empty لا يمكن لعنوان IP ان يكون فارغ - + Enter the address in the format 255.255.255.255:88 ادخل العنوان في شكل 255.255.255.255:88 - + Login cannot be empty تسجيل دخول لا يمكن ان يكون فارغ - + Password/private key cannot be empty كلمة مرور/مفتاح خاص لأ يمكن ان يكونو فارغين @@ -2791,42 +2791,47 @@ Already installed containers were found on the server. All installed containers البيانات المٌرسلة: %1 - + + Allowed IPs: %1 + + + + Rename إعادة التسمية - + Client name اسم العميل - + Save احفظ - + Revoke سحب وإبطال - + Revoke the config for a user - %1? سحب وإبطال للمستخدم - %1? - + The user will no longer be able to connect to your server. المستخدم لن يكون قادر علي الاتصال بعد الان. - + Continue واصل - + Cancel إلغاء @@ -4100,12 +4105,12 @@ While it offers a blend of security, stability, and speed, it's essential t main2 - + Private key passphrase عبارة المرور الخاصة بالمفتاح - + Save احفظ diff --git a/client/translations/amneziavpn_fa_IR.ts b/client/translations/amneziavpn_fa_IR.ts index 6cd78e77..468f16b4 100644 --- a/client/translations/amneziavpn_fa_IR.ts +++ b/client/translations/amneziavpn_fa_IR.ts @@ -263,18 +263,18 @@ Can't be disabled for current server نمی‌توان فایل را باز کرد. - - + + Invalid configuration file فایل پیکربندی نامعتبر است. - + Scanned %1 of %2. ارزیابی %1 از %2. - + In the imported configuration, potentially dangerous lines were found: در پیکربندی وارد شده، خطوطی که ممکن است خطرناک باشند، یافت شدند: @@ -405,28 +405,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected وی‎پی‎ان وصل شد - + VPN Disconnected وی‎پی‎ان قطع شد - + AmneziaVPN notification اخطار AmneziaVPN - + Unsecured network detected: شبکه ناامن شناسایی شد: @@ -2544,12 +2544,12 @@ It's okay as long as it's from someone you trust. آدرس آی‎پی سرور (:پورت) - + Continue ادامه - + Enter the address in the format 255.255.255.255:88 آدرس را با فرمت 255.255.255.255:88 وارد کنید @@ -2564,42 +2564,42 @@ It's okay as long as it's from someone you trust. - + SSH Username - + Password or SSH private key رمز عبور یا کلید خصوصی SSH - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties تمام داده‎هایی که شما وارد می‎کنید به شدت محرمانه‎ است و با Amnezia یا هر شخص ثالث دیگری به اشتراک گذاشته نمی‎شود - + How to run your VPN server چگونه سرور VPN خود را اجرا کنید - + Where to get connection data, step-by-step instructions for buying a VPS داده‌های اتصال را از کجا دریافت کنید و دستورالعمل‌های مرحله به مرحله برای خرید یک VPS - + Ip address cannot be empty آدرس آی‎پی نمی‎تواند خالی باشد - + Login cannot be empty نام‎کاربری نمی‎تواند خالی باشد - + Password/private key cannot be empty پسورد یا کلید خصوصی نمی‎تواند خالی باشد @@ -2958,47 +2958,52 @@ It's okay as long as it's from someone you trust. Data sent: %1 داده‌های ارسال شده: %1 + + + Allowed IPs: %1 + + Creation date: تاریخ ایجاد: - + Rename تغییر نام - + Client name نام کلاینت - + Save ذخیره - + Revoke ابطال - + Revoke the config for a user - %1? لغو پیکربندی برای یک کاربر - %1? - + The user will no longer be able to connect to your server. کاربر دیگر نمی‎تواند به سرور وصل شود. - + Continue ادامه - + Cancel کنسل @@ -4316,12 +4321,12 @@ For more detailed information, you can main2 - + Private key passphrase عبارت کلید خصوصی - + Save ذخیره diff --git a/client/translations/amneziavpn_hi_IN.ts b/client/translations/amneziavpn_hi_IN.ts index ab459b7c..92cebd8c 100644 --- a/client/translations/amneziavpn_hi_IN.ts +++ b/client/translations/amneziavpn_hi_IN.ts @@ -259,18 +259,18 @@ Can't be disabled for current server फाइल खोलने में असमर्थ - - + + Invalid configuration file अमान्य कॉन्फ़िगरेशन फ़ाइल - + Scanned %1 of %2. %2 में से %1 स्कैन किया गया. - + In the imported configuration, potentially dangerous lines were found: @@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected कनेक्ट - + VPN Disconnected कनेक्ट - + AmneziaVPN notification AmneziaVPN अधिसूचना - + Unsecured network detected: असुरक्षित नेटवर्क का पता चला: @@ -2494,12 +2494,12 @@ Already installed containers were found on the server. All installed containers सर्वर आईपी पता [:पोर्ट] - + Continue जारी रखना - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties आपके द्वारा दर्ज किया गया सभी डेटा पूरी तरह से गोपनीय रहेगा और एमनेज़िया या किसी तीसरे पक्ष को साझा या प्रकट नहीं किया जाएगा @@ -2509,42 +2509,42 @@ Already installed containers were found on the server. All installed containers 255.255.255.255:22 - + SSH Username SSH उपयोगकर्ता नाम - + Password or SSH private key पासवर्ड या SSH निजी कुंजी - + How to run your VPN server - + Where to get connection data, step-by-step instructions for buying a VPS - + Ip address cannot be empty आईपी ​​पता खाली नहीं हो सकता - + Enter the address in the format 255.255.255.255:88 पता 255.255.255.255:88 प्रारूप में दर्ज करें - + Login cannot be empty लॉगिन खाली नहीं हो सकता - + Password/private key cannot be empty पासवर्ड/निजी कुंजी खाली नहीं हो सकती @@ -2876,47 +2876,52 @@ Already installed containers were found on the server. All installed containers Data sent: %1 डेटा भेजा गया: %1 + + + Allowed IPs: %1 + + Creation date: निर्माण तिथि: - + Rename नाम बदलें - + Client name ग्राहक नाम - + Save सहेजें - + Revoke निरस्त करें - + Revoke the config for a user - %1? किसी उपयोक्ता के लिए कॉन्फ़िगरेशन निरस्त करें - %1? - + The user will no longer be able to connect to your server. उपयोगकर्ता अब आपके सर्वर से कनेक्ट नहीं हो पाएगा. - + Continue जारी रखना - + Cancel रद्द करना @@ -4208,12 +4213,12 @@ While it offers a blend of security, stability, and speed, it's essential t main2 - + Private key passphrase निजी कुंजी पासफ़्रेज़ - + Save सहेजें diff --git a/client/translations/amneziavpn_my_MM.ts b/client/translations/amneziavpn_my_MM.ts index 3e964cc9..7479e454 100644 --- a/client/translations/amneziavpn_my_MM.ts +++ b/client/translations/amneziavpn_my_MM.ts @@ -259,18 +259,18 @@ Can't be disabled for current server ဖိုင်ကိုဖွင့်၍မရပါ - - + + Invalid configuration file Configuration ဖိုင် မမှန်ကန်ပါ - + Scanned %1 of %2. %2 ၏ %1 ကို စကင်န်ဖတ်ထားသည်. - + In the imported configuration, potentially dangerous lines were found: တင်သွင်းသည့် configuration တွင်၊ အန္တရာယ်ရှိနိုင်သည့်စာလိုင်းများကို တွေ့ရှိခဲ့သည်: @@ -401,28 +401,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected VPN ချိတ်ဆက်ထားပါပြီ - + VPN Disconnected VPN ဖြုတ်လိုက်ပါပြီ - + AmneziaVPN notification AmneziaVPN နိုတီ - + Unsecured network detected: လုံခြုံမှုမရှိသောကွန်ရက်မှန်း ထောက်လှန်းမိသည်: @@ -2430,12 +2430,12 @@ Already installed containers were found on the server. All installed containers ဆာဗာ IP လိပ်စာ [:port] - + Continue ဆက်လက်လုပ်ဆောင်မည် - + Enter the address in the format 255.255.255.255:88 လိပ်စာကို 255.255.255.255:88 ဖော်မတ်ဖြင့် ထည့်ပါ @@ -2450,42 +2450,42 @@ Already installed containers were found on the server. All installed containers 255.255.255.255:22 - + SSH Username SSH အသုံးပြုသူအမည် - + Password or SSH private key စကားဝှက် သိုမဟုတ် SSH private key - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties သင်ထည့်သွင်းသည့်ဒေတာအားလုံးကို တင်းကြပ်လုံခြုံစွာလျှို့ဝှက်ထားမည်ဖြစ်ပြီး Amnezia သို့မဟုတ် မည်သည့်ပြင်ပအဖွဲ့အစည်းကိုမျှ မျှဝေမည် သို့မဟုတ် ထုတ်ဖော်မည်မဟုတ်ပါ - + How to run your VPN server သင်၏ဆာဗာကို လည်ပတ်ပုံလည်ပတ်နည်း - + Where to get connection data, step-by-step instructions for buying a VPS ချိတ်ဆက်မှုဒေတာကို ဘယ်မှာရနိုင်မလဲ၊ VPS ဝယ်ယူပုံဝယ်ယူနည်းအတွက် အဆင့်ဆင့် ညွှန်ကြားချက်များ - + Ip address cannot be empty IP လိပ်စာသည် ဗလာမဖြစ်ရပါ - + Login cannot be empty လော့ဂ်အင်အချက်အလက်သည် ဗလာမဖြစ်ရပါ - + Password/private key cannot be empty စကားဝှက်/private key သည် ဗလာမဖြစ်ရပါ @@ -2825,42 +2825,47 @@ Already installed containers were found on the server. All installed containers ပေးပို့လိုက်သည့်ဒေတာ: %1 - + + Allowed IPs: %1 + + + + Rename အမည်ပြောင်းမည် - + Client name ကလိုင်းရင့်အမည် - + Save သိမ်းဆည်းမည် - + Revoke ပြန်ရုပ်သိမ်းမည် - + Revoke the config for a user - %1? အသုံးပြုသူ %1 အတွက် config ကို ပြန်လည်ရုပ်သိမ်းမည်လား? - + The user will no longer be able to connect to your server. ဤအသုံးပြုသူသည် သင့်ဆာဗာသို့ ချိတ်ဆက်နိုင်တော့မည်မဟုတ်ပါ. - + Continue ဆက်လက်လုပ်ဆောင်မည် - + Cancel ပယ်ဖျက်မည် @@ -4105,12 +4110,12 @@ For more detailed information, you can main2 - + Private key passphrase ကိုယ်ပိုင် key စကားဝှက် - + Save သိမ်းဆည်းမည် diff --git a/client/translations/amneziavpn_ru_RU.ts b/client/translations/amneziavpn_ru_RU.ts index 2fb21259..b8f1a242 100644 --- a/client/translations/amneziavpn_ru_RU.ts +++ b/client/translations/amneziavpn_ru_RU.ts @@ -263,18 +263,18 @@ Can't be disabled for current server Невозможно открыть файл - - + + Invalid configuration file Неверный файл конфигурации - + Scanned %1 of %2. Отсканировано %1 из %2. - + In the imported configuration, potentially dangerous lines were found: В импортированной конфигурации были обнаружены потенциально опасные строки: @@ -405,28 +405,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected VPN подключен - + VPN Disconnected VPN выключен - + AmneziaVPN notification Уведомление AmneziaVPN - + Unsecured network detected: Обнаружена незащищенная сеть: @@ -2628,7 +2628,7 @@ It's okay as long as it's from someone you trust. Password / SSH private key - + Continue Продолжить @@ -2638,7 +2638,7 @@ and will not be shared or disclosed to the Amnezia or any third parties Все данные, которые вы вводите, останутся строго конфиденциальными и не будут переданы или раскрыты Amnezia или каким-либо третьим лицам - + Enter the address in the format 255.255.255.255:88 Введите адрес в формате 255.255.255.255:88 @@ -2657,42 +2657,42 @@ and will not be shared or disclosed to the Amnezia or any third parties 255.255.255.255:22 - + SSH Username Имя пользователя SSH - + Password or SSH private key Пароль или закрытый ключ SSH - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties Все данные, которые вы вводите, останутся строго конфиденциальными и не будут переданы или раскрыты Amnezia или каким-либо третьим лицам - + How to run your VPN server Как создать VPN на собственном сервере - + Where to get connection data, step-by-step instructions for buying a VPS Где взять данные для подключения, пошаговые инстуркции по покупке VPS - + Ip address cannot be empty Поле с IP-адресом не может быть пустым - + Login cannot be empty Поле с логином не может быть пустым - + Password/private key cannot be empty Поле с паролем/закрытым ключом не может быть пустым @@ -3087,47 +3087,52 @@ and will not be shared or disclosed to the Amnezia or any third parties Data sent: %1 Отправлено данных: %1 + + + Allowed IPs: %1 + + Creation date: Дата создания: - + Rename Переименовать - + Client name Имя клиента - + Save Сохранить - + Revoke Отозвать - + Revoke the config for a user - %1? Отозвать конфигурацию для пользователя - %1? - + The user will no longer be able to connect to your server. Пользователь больше не сможет подключаться к вашему серверу. - + Continue Продолжить - + Cancel Отменить @@ -4547,12 +4552,12 @@ This means that AmneziaWG keeps the fast performance of the original while addin main2 - + Private key passphrase Парольная фраза для закрытого ключа - + Save Сохранить diff --git a/client/translations/amneziavpn_uk_UA.ts b/client/translations/amneziavpn_uk_UA.ts index c7195119..73a731ec 100644 --- a/client/translations/amneziavpn_uk_UA.ts +++ b/client/translations/amneziavpn_uk_UA.ts @@ -290,18 +290,18 @@ Can't be disabled for current server Неможливо відкрити файл - - + + Invalid configuration file Недійсний файл конфігурації - + Scanned %1 of %2. Відскановано %1 з %2. - + In the imported configuration, potentially dangerous lines were found: У імпортованій конфігурації знайдено потенційно небезпечні рядки: @@ -431,28 +431,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN AmneziaVPN - + VPN Connected VPN Підключено - + VPN Disconnected VPN Вимкнено - + AmneziaVPN notification Сповіщення AmneziaVPN - + Unsecured network detected: Знайдена не захищена мережа: @@ -2714,7 +2714,7 @@ It's okay as long as it's from someone you trust. Password / SSH private key - + Continue Продовжити @@ -2725,7 +2725,7 @@ and will not be shared or disclosed to the Amnezia or any third parties і не будуть передані чи розголошені Amnezia або будь-яким третім особам - + Enter the address in the format 255.255.255.255:88 Введіть адресу в форматі 255.255.255.255:88 @@ -2744,42 +2744,42 @@ and will not be shared or disclosed to the Amnezia or any third parties 255.255.255.255:22 - + SSH Username SSH Username - + Password or SSH private key Пароль або SSH ключ - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties Усі дані, які ви вводите, залишатимуться суворо конфіденційними та не будуть передані чи розголошені Amnezia або будь-яким третім особам - + How to run your VPN server Як запустити ваш VPN-сервер - + Where to get connection data, step-by-step instructions for buying a VPS Де отримати дані для підключення: покрокові інструкції з придбання VPS - + Ip address cannot be empty Поле IP address не може бути пустим - + Login cannot be empty Поле Login не може бути пустим - + Password/private key cannot be empty Поле Password/Private key не може бути пустим @@ -3182,47 +3182,52 @@ and will not be shared or disclosed to the Amnezia or any third parties Data sent: %1 Відправлено даних: %1 + + + Allowed IPs: %1 + + Creation date: Дата створення: - + Rename Перейменувати - + Client name Назва клієнта - + Save Зберегти - + Revoke Відкликати - + Revoke the config for a user - %1? Відкликати доступ для користувача - %1? - + The user will no longer be able to connect to your server. Користувач більше не зможе підключатись до вашого сервера - + Continue Продовжити - + Cancel Відмінити @@ -4624,12 +4629,12 @@ This means that AmneziaWG keeps the fast performance of the original while addin main2 - + Private key passphrase Пароль для особистого ключа - + Save Зберегти diff --git a/client/translations/amneziavpn_ur_PK.ts b/client/translations/amneziavpn_ur_PK.ts index cf445bfa..5faa241a 100644 --- a/client/translations/amneziavpn_ur_PK.ts +++ b/client/translations/amneziavpn_ur_PK.ts @@ -257,18 +257,18 @@ Can't be disabled for current server فائل کو کھولنے سے قاصر ہے - - + + Invalid configuration file غلط کنفیگریشن فائل - + Scanned %1 of %2. سکین%1 کی%2. - + In the imported configuration, potentially dangerous lines were found: @@ -399,30 +399,30 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN The translation of "AmneziaVPN" in Urdu would be: امنیزیا وی پی ای - + VPN Connected وی پی این متصل ہوگیا - + VPN Disconnected وی پی این منقطع ہوگیا - + AmneziaVPN notification امنیزیا وی پی این کی اطلاعات - + Unsecured network detected: غیر محفوظ نیٹ ورک کا پتہ لگایا گیا ہے: @@ -2498,12 +2498,12 @@ Already installed containers were found on the server. All installed containers سرور آئی پی پتہ [:پورٹ] - + Continue براہ کرم جاری رکھیں - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties آپ جو ڈیٹا داخل کریں گے وہ بالکل خفیہ رہے گا اور نہ تو امنیزیا یا کسی تیسری شخصیت کے ساتھ اشتراک کیا جائے گا @@ -2513,42 +2513,42 @@ Already installed containers were found on the server. All installed containers - + SSH Username ایس ایس ایچ صارف نام - + Password or SSH private key پاس ورڈ یا SSH نجی کلید - + How to run your VPN server - + Where to get connection data, step-by-step instructions for buying a VPS - + Ip address cannot be empty آئی پی پتہ خالی نہیں ہو سکتا - + Enter the address in the format 255.255.255.255:88 ایڈریس درج کریں فارمیٹ 255.255.255.255:88 - + Login cannot be empty لاگ ان نام خالی نہیں ہو سکتا - + Password/private key cannot be empty پاس ورڈ یا نجی کلید خالی نہیں ہو سکتی @@ -2880,47 +2880,52 @@ Already installed containers were found on the server. All installed containers Data sent: %1 + + + Allowed IPs: %1 + + Creation date: تخلیق کی تاریخ: - + Rename نام تبدیل - + Client name کلائنٹ کا نام - + Save محفوظ - + Revoke واپس لین - + Revoke the config for a user - %1? کیا آپ مستعمل کے لئے کنفیگ کو واپس لینا چاہتے ہیں - %1؟ - + The user will no longer be able to connect to your server. صارف آپ کے سرور سے متصل ہونے کا اختیار نہیں رہے گا. - + Continue جاری رکھیں - + Cancel منسوخ @@ -4154,12 +4159,12 @@ While it offers a blend of security, stability, and speed, it's essential t main2 - + Private key passphrase نجی کلید پاس فریز - + Save محفوظ کریں diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts index 39b6bee0..8015c249 100644 --- a/client/translations/amneziavpn_zh_CN.ts +++ b/client/translations/amneziavpn_zh_CN.ts @@ -262,18 +262,18 @@ Can't be disabled for current server - - + + Invalid configuration file - + Scanned %1 of %2. 扫描 %1 of %2. - + In the imported configuration, potentially dangerous lines were found: @@ -427,28 +427,28 @@ Already installed containers were found on the server. All installed containers NotificationHandler - - + + AmneziaVPN - + VPN Connected 已连接到VPN - + VPN Disconnected 已从VPN断开 - + AmneziaVPN notification AmneziaVPN 提示 - + Unsecured network detected: 发现不安全网络 @@ -2673,12 +2673,12 @@ It's okay as long as it's from someone you trust. 密码 或 私钥 - + Continue 继续 - + All data you enter will remain strictly confidential and will not be shared or disclosed to the Amnezia or any third parties 您输入的所有数据将严格保密,不会与 Amnezia 或任何第三方共享或披露 @@ -2694,42 +2694,42 @@ and will not be shared or disclosed to the Amnezia or any third parties - + SSH Username SSH 用户名 - + Password or SSH private key 密码或 SSH 私钥 - + How to run your VPN server - + Where to get connection data, step-by-step instructions for buying a VPS - + Ip address cannot be empty IP不能为空 - + Enter the address in the format 255.255.255.255:88 按照这种格式输入 255.255.255.255:88 - + Login cannot be empty 账号不能为空 - + Password/private key cannot be empty 密码或私钥不能为空 @@ -3086,47 +3086,52 @@ and will not be shared or disclosed to the Amnezia or any third parties Data sent: %1 + + + Allowed IPs: %1 + + Creation date: 创建日期: - + Rename 重新命名 - + Client name 客户名称 - + Save 保存 - + Revoke 撤销 - + Revoke the config for a user - %1? 撤销用户的配置- %1? - + The user will no longer be able to connect to your server. 该用户将无法再连接到您的服务器. - + Continue 继续 - + Cancel 取消 @@ -4610,12 +4615,12 @@ While it offers a blend of security, stability, and speed, it's essential t main2 - + Private key passphrase 私钥密码 - + Save 保存 diff --git a/client/ui/controllers/pageController.cpp b/client/ui/controllers/pageController.cpp index bbcc55a1..a00eba43 100644 --- a/client/ui/controllers/pageController.cpp +++ b/client/ui/controllers/pageController.cpp @@ -24,7 +24,7 @@ PageController::PageController(const QSharedPointer &serversModel, AndroidController::instance()->setNavigationBarColor(initialPageNavigationBarColor); #endif -#if defined Q_OS_MACX +#if defined Q_OS_MACX and !defined MACOS_NE connect(this, &PageController::raiseMainWindow, []() { setDockIconVisible(true); }); connect(this, &PageController::hideMainWindow, []() { setDockIconVisible(false); }); #endif @@ -114,7 +114,7 @@ void PageController::showOnStartup() } else { #if defined(Q_OS_WIN) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) emit hideMainWindow(); -#elif defined Q_OS_MACX +#elif defined Q_OS_MACX and !defined MACOS_NE setDockIconVisible(false); #endif } diff --git a/client/ui/notificationhandler.cpp b/client/ui/notificationhandler.cpp index 5efb45c4..ae588600 100644 --- a/client/ui/notificationhandler.cpp +++ b/client/ui/notificationhandler.cpp @@ -5,12 +5,15 @@ #include #include "notificationhandler.h" -#if defined(Q_OS_IOS) +#if defined(Q_OS_IOS) && !defined(MACOS_NE) # include "platforms/ios/iosnotificationhandler.h" +#elif defined(MACOS_NE) +# include "platforms/macos_ne/iosnotificationhandler.h" #else # include "systemtray_notificationhandler.h" #endif + // static NotificationHandler* NotificationHandler::create(QObject* parent) { #if defined(Q_OS_IOS)