diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 531a3b72..cecf32e3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -9,132 +9,132 @@ env: QT_MIRROR: https://mirrors.ocf.berkeley.edu/qt/ # https://download.qt.io/static/mirrorlist/ jobs: - # Build-Linux-Ubuntu: - # runs-on: ubuntu-20.04 + Build-Linux-Ubuntu: + runs-on: ubuntu-20.04 - # env: - # QT_VERSION: 6.6.2 - # QIF_VERSION: 4.7 - # PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} - # DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} + env: + QT_VERSION: 6.6.2 + QIF_VERSION: 4.7 + PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} + DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} - # steps: - # - name: 'Install Qt' - # uses: jurplel/install-qt-action@v3 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'desktop' - # arch: 'gcc_64' - # modules: 'qtremoteobjects qt5compat qtshadertools' - # dir: ${{ runner.temp }} - # setup-python: 'true' - # tools: 'tools_ifw' - # set-env: 'true' - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + steps: + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'desktop' + arch: 'gcc_64' + modules: 'qtremoteobjects qt5compat qtshadertools' + dir: ${{ runner.temp }} + setup-python: 'true' + tools: 'tools_ifw' + set-env: 'true' + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Get sources' - # uses: actions/checkout@v4 - # with: - # submodules: 'true' - # fetch-depth: 10 + - name: 'Get sources' + uses: actions/checkout@v4 + with: + submodules: 'true' + fetch-depth: 10 - # - name: 'Setup ccache' - # uses: hendrikmuhs/ccache-action@v1.2 + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 - # - name: 'Build project' - # run: | - # sudo apt-get install libxkbcommon-x11-0 - # export QT_BIN_DIR=${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64/bin - # export QIF_BIN_DIR=${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin - # bash deploy/build_linux.sh + - name: 'Build project' + run: | + sudo apt-get install libxkbcommon-x11-0 + export QT_BIN_DIR=${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64/bin + export QIF_BIN_DIR=${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin + bash deploy/build_linux.sh - # - name: 'Pack installer' - # run: cd deploy && tar -cf AmneziaVPN_Linux_Installer.tar AmneziaVPN_Linux_Installer.bin + - name: 'Pack installer' + run: cd deploy && tar -cf AmneziaVPN_Linux_Installer.tar AmneziaVPN_Linux_Installer.bin - # - name: 'Upload installer artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_Linux_installer.tar - # path: deploy/AmneziaVPN_Linux_Installer.tar - # retention-days: 7 + - name: 'Upload installer artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_Linux_installer.tar + path: deploy/AmneziaVPN_Linux_Installer.tar + retention-days: 7 - # - name: 'Upload unpacked artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_Linux_unpacked - # path: deploy/AppDir - # retention-days: 7 + - name: 'Upload unpacked artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_Linux_unpacked + path: deploy/AppDir + retention-days: 7 - # - name: 'Upload translations artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_translations - # path: client/translations - # retention-days: 7 + - name: 'Upload translations artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_translations + path: client/translations + retention-days: 7 # ------------------------------------------------------ - # Build-Windows: - # runs-on: windows-latest + Build-Windows: + runs-on: windows-latest - # env: - # QT_VERSION: 6.6.2 - # QIF_VERSION: 4.7 - # BUILD_ARCH: 64 - # PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} - # DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} + env: + QT_VERSION: 6.6.2 + QIF_VERSION: 4.7 + BUILD_ARCH: 64 + PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} + DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} - # steps: - # - name: 'Get sources' - # uses: actions/checkout@v4 - # with: - # submodules: 'true' - # fetch-depth: 10 + steps: + - name: 'Get sources' + uses: actions/checkout@v4 + with: + submodules: 'true' + fetch-depth: 10 - # - name: 'Setup ccache' - # uses: hendrikmuhs/ccache-action@v1.2 + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 - # - name: 'Install Qt' - # uses: jurplel/install-qt-action@v3 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'windows' - # target: 'desktop' - # arch: 'win64_msvc2019_64' - # modules: 'qtremoteobjects qt5compat qtshadertools' - # dir: ${{ runner.temp }} - # setup-python: 'true' - # tools: 'tools_ifw' - # set-env: 'true' - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'windows' + target: 'desktop' + arch: 'win64_msvc2019_64' + modules: 'qtremoteobjects qt5compat qtshadertools' + dir: ${{ runner.temp }} + setup-python: 'true' + tools: 'tools_ifw' + set-env: 'true' + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Setup mvsc' - # uses: ilammy/msvc-dev-cmd@v1 - # with: - # arch: 'x64' + - name: 'Setup mvsc' + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: 'x64' - # - name: 'Build project' - # shell: cmd - # run: | - # set BUILD_ARCH=${{ env.BUILD_ARCH }} - # set QT_BIN_DIR="${{ runner.temp }}\\Qt\\${{ env.QT_VERSION }}\\msvc2019_64\\bin" - # set QIF_BIN_DIR="${{ runner.temp }}\\Qt\\Tools\\QtInstallerFramework\\${{ env.QIF_VERSION }}\\bin" - # call deploy\\build_windows.bat + - name: 'Build project' + shell: cmd + run: | + set BUILD_ARCH=${{ env.BUILD_ARCH }} + set QT_BIN_DIR="${{ runner.temp }}\\Qt\\${{ env.QT_VERSION }}\\msvc2019_64\\bin" + set QIF_BIN_DIR="${{ runner.temp }}\\Qt\\Tools\\QtInstallerFramework\\${{ env.QIF_VERSION }}\\bin" + call deploy\\build_windows.bat - # - name: 'Upload installer artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_Windows_installer - # path: AmneziaVPN_x${{ env.BUILD_ARCH }}.exe - # retention-days: 7 + - name: 'Upload installer artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_Windows_installer + path: AmneziaVPN_x${{ env.BUILD_ARCH }}.exe + retention-days: 7 - # - name: 'Upload unpacked artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_Windows_unpacked - # path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release - # retention-days: 7 + - name: 'Upload unpacked artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_Windows_unpacked + path: deploy\\build_${{ env.BUILD_ARCH }}\\client\\Release + retention-days: 7 # ------------------------------------------------------ @@ -230,69 +230,69 @@ jobs: # ------------------------------------------------------ - # Build-MacOS: - # runs-on: macos-latest + Build-MacOS: + runs-on: macos-latest - # env: - # # Keep compat with MacOS 10.15 aka Catalina by Qt 6.4 - # QT_VERSION: 6.4.3 - # QIF_VERSION: 4.6 - # PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} - # DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} + env: + # Keep compat with MacOS 10.15 aka Catalina by Qt 6.4 + QT_VERSION: 6.4.3 + QIF_VERSION: 4.6 + PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} + DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} - # steps: - # - name: 'Setup xcode' - # uses: maxim-lobanov/setup-xcode@v1 - # with: - # xcode-version: '14.3.1' + steps: + - name: 'Setup xcode' + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '14.3.1' - # - name: 'Install Qt' - # uses: jurplel/install-qt-action@v3 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'mac' - # target: 'desktop' - # arch: 'clang_64' - # modules: 'qtremoteobjects qt5compat qtshadertools' - # dir: ${{ runner.temp }} - # setup-python: 'true' - # set-env: 'true' - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'mac' + target: 'desktop' + arch: 'clang_64' + modules: 'qtremoteobjects qt5compat qtshadertools' + dir: ${{ runner.temp }} + setup-python: 'true' + set-env: 'true' + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Install Qt Installer Framework ${{ env.QIF_VERSION }}' - # run: | - # mkdir -pv ${{ runner.temp }}/Qt/Tools/QtInstallerFramework - # wget https://qt.amzsvc.com/tools/ifw/${{ env.QIF_VERSION }}.zip - # unzip ${{ env.QIF_VERSION }}.zip -d ${{ runner.temp }}/Qt/Tools/QtInstallerFramework/ + - name: 'Install Qt Installer Framework ${{ env.QIF_VERSION }}' + run: | + mkdir -pv ${{ runner.temp }}/Qt/Tools/QtInstallerFramework + wget https://qt.amzsvc.com/tools/ifw/${{ env.QIF_VERSION }}.zip + unzip ${{ env.QIF_VERSION }}.zip -d ${{ runner.temp }}/Qt/Tools/QtInstallerFramework/ - # - name: 'Get sources' - # uses: actions/checkout@v4 - # with: - # submodules: 'true' - # fetch-depth: 10 + - name: 'Get sources' + uses: actions/checkout@v4 + with: + submodules: 'true' + fetch-depth: 10 - # - name: 'Setup ccache' - # uses: hendrikmuhs/ccache-action@v1.2 + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 - # - name: 'Build project' - # run: | - # export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin" - # export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" - # bash deploy/build_macos.sh + - name: 'Build project' + run: | + export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin" + export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" + bash deploy/build_macos.sh - # - name: 'Upload installer artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_MacOS_installer - # path: AmneziaVPN.dmg - # retention-days: 7 + - name: 'Upload installer artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_MacOS_installer + path: AmneziaVPN.dmg + retention-days: 7 - # - name: 'Upload unpacked artifact' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN_MacOS_unpacked - # path: deploy/build/client/AmneziaVPN.app - # retention-days: 7 + - name: 'Upload unpacked artifact' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN_MacOS_unpacked + path: deploy/build/client/AmneziaVPN.app + retention-days: 7 # ------------------------------------------------------ Build-MacOS-NE: @@ -345,169 +345,169 @@ jobs: - name: 'Set execute permissions for deploy script' run: chmod +x deploy/build_macos_ne.sh - - name: 'Build and deploy macOS NE' - run: | - export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin" - export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" - export QT_MACOS_ROOT_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos" - bash deploy/build_macos_ne.sh - env: - APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }} - APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }} - APPSTORE_CONNECT_PRIVATE_KEY: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }} - MAC_TRUST_CERT_BASE64: ${{ secrets.IOS_TRUST_CERT_BASE64 }} - MAC_SIGNING_CERT_BASE64: ${{ secrets.IOS_SIGNING_CERT_BASE64 }} - MAC_SIGNING_CERT_PASSWORD: ${{ secrets.IOS_SIGNING_CERT_PASSWORD }} + # - name: 'Build and deploy macOS NE' + # run: | + # export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos/bin" + # export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" + # export QT_MACOS_ROOT_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos" + # bash deploy/build_macos_ne.sh + # env: + # APPSTORE_CONNECT_KEY_ID: ${{ secrets.APPSTORE_CONNECT_KEY_ID }} + # APPSTORE_CONNECT_ISSUER_ID: ${{ secrets.APPSTORE_CONNECT_ISSUER_ID }} + # APPSTORE_CONNECT_PRIVATE_KEY: ${{ secrets.APPSTORE_CONNECT_PRIVATE_KEY }} + # MAC_TRUST_CERT_BASE64: ${{ secrets.IOS_TRUST_CERT_BASE64 }} + # MAC_SIGNING_CERT_BASE64: ${{ secrets.IOS_SIGNING_CERT_BASE64 }} + # MAC_SIGNING_CERT_PASSWORD: ${{ secrets.IOS_SIGNING_CERT_PASSWORD }} # ------------------------------------------------------ - # Build-Android: - # runs-on: ubuntu-latest + Build-Android: + runs-on: ubuntu-latest - # env: - # ANDROID_BUILD_PLATFORM: android-34 - # QT_VERSION: 6.7.2 - # QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools' - # PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} - # DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} + env: + ANDROID_BUILD_PLATFORM: android-34 + QT_VERSION: 6.7.2 + QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools' + PROD_AGW_PUBLIC_KEY: ${{ secrets.PROD_AGW_PUBLIC_KEY }} + DEV_AGW_PUBLIC_KEY: ${{ secrets.DEV_AGW_PUBLIC_KEY }} - # steps: - # - name: 'Install desktop Qt' - # uses: jurplel/install-qt-action@v4 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'desktop' - # arch: 'linux_gcc_64' - # modules: ${{ env.QT_MODULES }} - # dir: ${{ runner.temp }} - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + steps: + - name: 'Install desktop Qt' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'desktop' + arch: 'linux_gcc_64' + modules: ${{ env.QT_MODULES }} + dir: ${{ runner.temp }} + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Install android_x86_64 Qt' - # uses: jurplel/install-qt-action@v4 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'android' - # arch: 'android_x86_64' - # modules: ${{ env.QT_MODULES }} - # dir: ${{ runner.temp }} - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install android_x86_64 Qt' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'android' + arch: 'android_x86_64' + modules: ${{ env.QT_MODULES }} + dir: ${{ runner.temp }} + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Install android_x86 Qt' - # uses: jurplel/install-qt-action@v4 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'android' - # arch: 'android_x86' - # modules: ${{ env.QT_MODULES }} - # dir: ${{ runner.temp }} - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install android_x86 Qt' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'android' + arch: 'android_x86' + modules: ${{ env.QT_MODULES }} + dir: ${{ runner.temp }} + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Install android_armv7 Qt' - # uses: jurplel/install-qt-action@v4 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'android' - # arch: 'android_armv7' - # modules: ${{ env.QT_MODULES }} - # dir: ${{ runner.temp }} - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install android_armv7 Qt' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'android' + arch: 'android_armv7' + modules: ${{ env.QT_MODULES }} + dir: ${{ runner.temp }} + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Install android_arm64_v8a Qt' - # uses: jurplel/install-qt-action@v4 - # with: - # version: ${{ env.QT_VERSION }} - # host: 'linux' - # target: 'android' - # arch: 'android_arm64_v8a' - # modules: ${{ env.QT_MODULES }} - # dir: ${{ runner.temp }} - # extra: '--external 7z --base ${{ env.QT_MIRROR }}' + - name: 'Install android_arm64_v8a Qt' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'android' + arch: 'android_arm64_v8a' + modules: ${{ env.QT_MODULES }} + dir: ${{ runner.temp }} + extra: '--external 7z --base ${{ env.QT_MIRROR }}' - # - name: 'Grant execute permission for qt-cmake' - # shell: bash - # run: | - # chmod +x ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/android_x86_64/bin/qt-cmake + - name: 'Grant execute permission for qt-cmake' + shell: bash + run: | + chmod +x ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/android_x86_64/bin/qt-cmake - # - name: 'Get sources' - # uses: actions/checkout@v4 - # with: - # submodules: 'true' + - name: 'Get sources' + uses: actions/checkout@v4 + with: + submodules: 'true' - # - name: 'Setup ccache' - # uses: hendrikmuhs/ccache-action@v1.2 + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 - # - name: 'Setup Java' - # uses: actions/setup-java@v4 - # with: - # distribution: 'temurin' - # java-version: '17' - # cache: 'gradle' + - name: 'Setup Java' + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' - # - name: 'Setup Android NDK' - # id: setup-ndk - # uses: nttld/setup-ndk@v1 - # with: - # ndk-version: 'r26b' + - name: 'Setup Android NDK' + id: setup-ndk + uses: nttld/setup-ndk@v1 + with: + ndk-version: 'r26b' - # - name: 'Decode keystore secret to file' - # env: - # KEYSTORE_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} - # shell: bash - # run: | - # echo $KEYSTORE_BASE64 | base64 --decode > android.keystore + - name: 'Decode keystore secret to file' + env: + KEYSTORE_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} + shell: bash + run: | + echo $KEYSTORE_BASE64 | base64 --decode > android.keystore - # - name: 'Build project' - # env: - # ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} - # QT_HOST_PATH: ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64 - # ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/android.keystore - # ANDROID_KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_ALIAS }} - # ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }} - # shell: bash - # run: ./deploy/build_android.sh --aab --apk all --build-platform ${{ env.ANDROID_BUILD_PLATFORM }} + - name: 'Build project' + env: + ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} + QT_HOST_PATH: ${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64 + ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/android.keystore + ANDROID_KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_ALIAS }} + ANDROID_KEYSTORE_KEY_PASS: ${{ secrets.ANDROID_RELEASE_KEYSTORE_KEY_PASS }} + shell: bash + run: ./deploy/build_android.sh --aab --apk all --build-platform ${{ env.ANDROID_BUILD_PLATFORM }} - # - name: 'Upload x86_64 apk' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN-android-x86_64 - # path: deploy/build/AmneziaVPN-x86_64-release.apk - # compression-level: 0 - # retention-days: 7 + - name: 'Upload x86_64 apk' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android-x86_64 + path: deploy/build/AmneziaVPN-x86_64-release.apk + compression-level: 0 + retention-days: 7 - # - name: 'Upload x86 apk' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN-android-x86 - # path: deploy/build/AmneziaVPN-x86-release.apk - # compression-level: 0 - # retention-days: 7 + - name: 'Upload x86 apk' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android-x86 + path: deploy/build/AmneziaVPN-x86-release.apk + compression-level: 0 + retention-days: 7 - # - name: 'Upload arm64-v8a apk' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN-android-arm64-v8a - # path: deploy/build/AmneziaVPN-arm64-v8a-release.apk - # compression-level: 0 - # retention-days: 7 + - name: 'Upload arm64-v8a apk' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android-arm64-v8a + path: deploy/build/AmneziaVPN-arm64-v8a-release.apk + compression-level: 0 + retention-days: 7 - # - name: 'Upload armeabi-v7a apk' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN-android-armeabi-v7a - # path: deploy/build/AmneziaVPN-armeabi-v7a-release.apk - # compression-level: 0 - # retention-days: 7 + - name: 'Upload armeabi-v7a apk' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android-armeabi-v7a + path: deploy/build/AmneziaVPN-armeabi-v7a-release.apk + compression-level: 0 + retention-days: 7 - # - name: 'Upload aab' - # uses: actions/upload-artifact@v4 - # with: - # name: AmneziaVPN-android - # path: deploy/build/AmneziaVPN-release.aab - # compression-level: 0 - # retention-days: 7 + - name: 'Upload aab' + uses: actions/upload-artifact@v4 + with: + name: AmneziaVPN-android + path: deploy/build/AmneziaVPN-release.aab + compression-level: 0 + retention-days: 7 Extra: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index ad6453b3..2fa082af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,8 +26,7 @@ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "iOS") elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") set(MZ_PLATFORM_NAME "wasm") endif() -message(STATUS "Platform: ${MZ_PLATFORM_NAME}") -message(STATUS "Version: ${MACOS_NE}") + set(QT_BUILD_TOOLS_WHEN_CROSS_COMPILING ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index f85d31b3..6451ce19 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -164,7 +164,17 @@ 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 ) @@ -321,12 +331,11 @@ if(LINUX AND NOT ANDROID) set(LIBS ${LIBS} -static-libstdc++ -static-libgcc -ldl) link_directories(${CMAKE_CURRENT_LIST_DIR}/platforms/linux) endif() -message("In here") + # Macos Network Extension doesn't need if(WIN32 OR (APPLE AND NOT IOS AND NOT MACOS_NE) OR (LINUX AND NOT ANDROID)) - message("-----> Client desktop build") + message("Client desktop build") add_compile_definitions(AMNEZIA_DESKTOP) - message("-----> Add AMNEZIA_DESKTOP") set(HEADERS ${HEADERS} ${CMAKE_CURRENT_LIST_DIR}/core/ipcclient.h ${CMAKE_CURRENT_LIST_DIR}/core/privileged_process.h @@ -408,12 +417,13 @@ if(MACOS_NE) "$/Contents/Frameworks" COMMAND ${CMAKE_COMMAND} -E copy_directory - "/Users/macbook/Qt/6.8.0/macos/lib/QtConcurrent.framework" + "${QT_HOST_PATH}/lib/QtConcurrent.framework" "$/Contents/Frameworks/QtConcurrent.framework" - COMMENT "Copying QtConcurrent.framework to the bundle's Frameworks directory" + COMMENT "Copying QtConcurrent.framework from QT_HOST_PATH to the bundle's Frameworks directory" ) + # MacOS specific application deployment add_custom_command(TARGET ${PROJECT} POST_BUILD COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $ -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR} diff --git a/client/cmake/macos_ne.cmake b/client/cmake/macos_ne.cmake index a7776a0e..938e7706 100644 --- a/client/cmake/macos_ne.cmake +++ b/client/cmake/macos_ne.cmake @@ -8,14 +8,12 @@ set(APPLE_PROJECT_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION enable_language(OBJC) -# enable_language(OBJCXX) enable_language(Swift) find_package(Qt6 REQUIRED COMPONENTS ShaderTools) set(LIBS ${LIBS} Qt6::ShaderTools) find_library(FW_AUTHENTICATIONSERVICES AuthenticationServices) -#find_library(FW_UIKIT UIKit) find_library(FW_AVFOUNDATION AVFoundation) find_library(FW_FOUNDATION Foundation) find_library(FW_STOREKIT StoreKit) @@ -24,7 +22,6 @@ find_library(FW_NETWORKEXTENSION NetworkExtension) set(LIBS ${LIBS} ${FW_AUTHENTICATIONSERVICES} -# ${FW_UIKIT} ${FW_AVFOUNDATION} ${FW_FOUNDATION} ${FW_STOREKIT} @@ -57,14 +54,6 @@ set(MACOSX_BUNDLE_ICON_FILE app.icns) set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) set(SOURCES ${SOURCES} ${ICON_FILE}) -# set(HEADERS ${HEADERS} -# ${CMAKE_CURRENT_SOURCE_DIR}/ui/macos_util.h -# ) - -# set(SOURCES ${SOURCES} -# ${CMAKE_CURRENT_SOURCE_DIR}/ui/macos_util.mm -# ) - target_include_directories(${PROJECT} PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS}) @@ -72,21 +61,21 @@ 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}/macos/app/Info.plist.in - #MACOSX_BUNDLE_ICON_FILE "AppIcon" + MACOSX_BUNDLE_ICON_FILE "AppIcon" MACOSX_BUNDLE_INFO_STRING "AmneziaVPN" MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN" MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}" - XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/macos/app/main.entitlements" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/ios/app/main.entitlements" XCODE_ATTRIBUTE_MARKETING_VERSION "${APPLE_PROJECT_VERSION}" XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}" XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN" XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN" XCODE_GENERATE_SCHEME TRUE XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" - #XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY "NO" XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY "YES" @@ -96,14 +85,6 @@ 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_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" ) set_target_properties(${PROJECT} PROPERTIES @@ -135,47 +116,20 @@ target_sources(${PROJECT} PRIVATE ) target_sources(${PROJECT} PRIVATE - #${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 + ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets + ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy ) set_property(TARGET ${PROJECT} APPEND PROPERTY RESOURCE - #${CMAKE_CURRENT_SOURCE_DIR}/macos/app/AmneziaVPNLaunchScreen.storyboard - ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/Media.xcassets - ${CMAKE_CURRENT_SOURCE_DIR}/macos/app/PrivacyInfo.xcprivacy + ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/Media.xcassets + ${CMAKE_CURRENT_SOURCE_DIR}/ios/app/PrivacyInfo.xcprivacy ) add_subdirectory(macos/networkextension) add_dependencies(${PROJECT} networkextension) -# set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS -# "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework" -# ) - - - -# set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos) -# target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework") - get_target_property(QtCore_location Qt6::Core LOCATION) message("QtCore_location") message(${QtCore_location}) get_filename_component(QT_BIN_DIR_DETECTED "${QtCore_location}/../../../../../bin" ABSOLUTE) - - -# add_custom_command(TARGET ${PROJECT} POST_BUILD -# COMMAND ${QT_BIN_DIR_DETECTED}/macdeployqt $ -appstore-compliant -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -# ) - -# if(CMAKE_BUILD_TYPE STREQUAL "Release") -# SET(SIGN_CMD codesign --deep --force --sign 'Apple Distribution: Privacy Technologies OU \(X7UJ388FXK\)' --timestamp --options runtime $) -# message("Manual signing bundle...") -# message(${SIGN_CMD}) - - -# add_custom_command(TARGET ${PROJECT} POST_BUILD -# COMMAND ${SIGN_CMD} -# ) -# endif() diff --git a/client/macos/app/AmneziaVPNLaunchScreen.storyboard b/client/macos/app/AmneziaVPNLaunchScreen.storyboard deleted file mode 100644 index 92f79f7e..00000000 --- a/client/macos/app/AmneziaVPNLaunchScreen.storyboard +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png deleted file mode 100644 index bbe3d546..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/100.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png deleted file mode 100644 index 0f2ba915..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/1024.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png deleted file mode 100644 index f88f66c7..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/114.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png deleted file mode 100644 index 51829dc1..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/120.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png deleted file mode 100644 index 0e28bd7b..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/144.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index 81066df7..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/152.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png deleted file mode 100644 index 44858c5a..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/167.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index 911f5491..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/180.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png deleted file mode 100644 index bb44c366..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/20.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png deleted file mode 100644 index bf9a2c19..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/29.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png deleted file mode 100644 index dbcf6fad..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/40.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png deleted file mode 100644 index 83c3e6b7..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/50.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png deleted file mode 100644 index f2a56e74..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/57.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png deleted file mode 100644 index 2714c6bf..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/58.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index a7303586..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/60.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png deleted file mode 100644 index d0f20363..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/72.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png deleted file mode 100644 index ccf90ddc..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/76.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png deleted file mode 100644 index 9f7b1037..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/80.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png b/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index 918e04f6..00000000 Binary files a/client/macos/app/Media.xcassets/AppIcon.appiconset/87.png and /dev/null differ diff --git a/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json b/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 3d771d98..00000000 --- a/client/macos/app/Media.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "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 deleted file mode 100644 index 73c00596..00000000 --- a/client/macos/app/Media.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/client/macos/app/PrivacyInfo.xcprivacy b/client/macos/app/PrivacyInfo.xcprivacy deleted file mode 100644 index 24e32f37..00000000 --- a/client/macos/app/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,33 +0,0 @@ - - - - - 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 deleted file mode 100644 index 175b1afc..00000000 Binary files a/client/macos/app/launch.png and /dev/null differ diff --git a/client/macos/app/main.entitlements b/client/macos/app/main.entitlements deleted file mode 100644 index d9f00bb1..00000000 --- a/client/macos/app/main.entitlements +++ /dev/null @@ -1,20 +0,0 @@ - - - - - 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 d0d50b1b..d8716681 100644 --- a/client/macos/networkextension/CMakeLists.txt +++ b/client/macos/networkextension/CMakeLists.txt @@ -171,6 +171,7 @@ target_sources(networkextension PRIVATE ${CLIENT_ROOT_DIR}/platforms/ios/PacketTunnelProvider+Xray.swift ${CLIENT_ROOT_DIR}/platforms/ios/WGConfig.swift ${CLIENT_ROOT_DIR}/platforms/ios/iosglue.mm + ${CLIENT_ROOT_DIR}/platforms/ios/XrayConfig.swift ) target_sources(networkextension PRIVATE diff --git a/client/macos/scripts/clangwrap.sh b/client/macos/scripts/clangwrap.sh deleted file mode 100755 index 1d0db357..00000000 --- a/client/macos/scripts/clangwrap.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -# go/clangwrap_macos.sh - -# Lấy đường dẫn SDK cho macOS -SDK_PATH=`xcrun --sdk macosx --show-sdk-path` - -# Tìm đường dẫn đến `clang` cho macOS -CLANG=`xcrun --sdk macosx --find clang` - -# Xác định kiến trúc máy dựa trên biến GOARCH -if [ "$GOARCH" == "amd64" ]; then - CARCH="x86_64" -elif [ "$GOARCH" == "arm64" ]; then - CARCH="arm64" -fi - -# Thực thi `clang` với các tùy chọn cụ thể cho macOS -exec $CLANG -arch $CARCH -isysroot $SDK_PATH -mmacosx-version-min=10.15 "$@" diff --git a/client/platforms/ios/PacketTunnelProvider+Xray.swift b/client/platforms/ios/PacketTunnelProvider+Xray.swift index ff80cb29..648b3613 100644 --- a/client/platforms/ios/PacketTunnelProvider+Xray.swift +++ b/client/platforms/ios/PacketTunnelProvider+Xray.swift @@ -1,196 +1,10 @@ -//import Foundation -//import NetworkExtension -//import WireGuardKitGo -// -//enum XrayErrors: Error { -// case noXrayConfig -// case xrayConfigIsWrong -// case cantSaveXrayConfig -// case cantParseListenAndPort -// case cantSaveHevSocksConfig -//} -// -//extension Constants { -// static let cachesDirectory: URL = { -// if let cachesDirectoryURL = FileManager.default.urls(for: .cachesDirectory, -// in: .userDomainMask).first { -// return cachesDirectoryURL -// } else { -// fatalError("Unable to retrieve caches directory.") -// } -// }() -//} -// -//extension PacketTunnelProvider { -// func startXray(completionHandler: @escaping (Error?) -> Void) { -// -// // Xray configuration -// guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol, -// let providerConfiguration = protocolConfiguration.providerConfiguration, -// let configData = providerConfiguration[Constants.xrayConfigKey] as? Data else { -// xrayLog(.error, message: "Can't get xray configuration") -// completionHandler(XrayErrors.noXrayConfig) -// return -// } -// -// // Tunnel settings -// let ipv6Enabled = false -// let hideVPNIcon = false -// -// let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: "254.1.1.1") -// settings.mtu = 9000 -// -// settings.ipv4Settings = { -// let settings = NEIPv4Settings(addresses: ["198.18.0.1"], subnetMasks: ["255.255.0.0"]) -// settings.includedRoutes = [NEIPv4Route.default()] -// return settings -// }() -// -// settings.ipv6Settings = { -// guard ipv6Enabled else { -// return nil -// } -// let settings = NEIPv6Settings(addresses: ["fd6e:a81b:704f:1211::1"], networkPrefixLengths: [64]) -// settings.includedRoutes = [NEIPv6Route.default()] -// if hideVPNIcon { -// settings.excludedRoutes = [NEIPv6Route(destinationAddress: "::", networkPrefixLength: 128)] -// } -// return settings -// }() -// -// do { -// let xrayConfig = try JSONDecoder().decode(XrayConfig.self, -// from: configData) -// -// var dnsArray = [String]() -// if let dns1 = xrayConfig.dns1 { -// dnsArray.append(dns1) -// } -// if let dns2 = xrayConfig.dns2 { -// dnsArray.append(dns2) -// } -// -// settings.dnsSettings = !dnsArray.isEmpty -// ? NEDNSSettings(servers: dnsArray) -// : NEDNSSettings(servers: ["1.1.1.1"]) -// -// let xrayConfigData = xrayConfig.config.data(using: .utf8) -// -// guard let xrayConfigData else { -// xrayLog(.error, message: "Can't encode config to data") -// completionHandler(XrayErrors.xrayConfigIsWrong) -// return -// } -// -// let jsonDict = try JSONSerialization.jsonObject(with: xrayConfigData, -// options: []) as? [String: Any] -// -// guard var jsonDict else { -// xrayLog(.error, message: "Can't parse address and port for hevSocks") -// completionHandler(XrayErrors.cantParseListenAndPort) -// return -// } -// -// let port = 10808 -// let address = "::1" -// -// if var inboundsArray = jsonDict["inbounds"] as? [[String: Any]], !inboundsArray.isEmpty { -// inboundsArray[0]["port"] = port -// inboundsArray[0]["listen"] = address -// jsonDict["inbounds"] = inboundsArray -// } -// -// let updatedData = try JSONSerialization.data(withJSONObject: jsonDict, options: []) -// -// setTunnelNetworkSettings(settings) { [weak self] error in -// if let error { -// completionHandler(error) -// return -// } -// -// // Launch xray -// self?.setupAndStartXray(configData: updatedData) { xrayError in -// if let xrayError { -// completionHandler(xrayError) -// return -// } -// -// // Launch hevSocks -// self?.setupAndRunTun2socks(configData: updatedData, -// address: address, -// port: port, -// completionHandler: completionHandler) -// } -// } -// } catch { -// completionHandler(error) -// return -// } -// } -// -// func stopXray(completionHandler: () -> Void) { -// Socks5Tunnel.quit() -// LibXrayStopXray() -// completionHandler() -// } -// -// private func setupAndStartXray(configData: Data, -// completionHandler: @escaping (Error?) -> Void) { -// let path = Constants.cachesDirectory.appendingPathComponent("config.json", isDirectory: false).path -// guard FileManager.default.createFile(atPath: path, contents: configData) else { -// xrayLog(.error, message: "Can't save xray configuration") -// completionHandler(XrayErrors.cantSaveXrayConfig) -// return -// } -// -// LibXrayRunXray(nil, -// path, -// Int64.max) -// -// completionHandler(nil) -// xrayLog(.info, message: "Xray started") -// } -// -// private func setupAndRunTun2socks(configData: Data, -// address: String, -// port: Int, -// completionHandler: @escaping (Error?) -> Void) { -// let config = """ -// tunnel: -// mtu: 9000 -// socks5: -// port: \(port) -// address: \(address) -// udp: 'udp' -// misc: -// task-stack-size: 20480 -// connect-timeout: 5000 -// read-write-timeout: 60000 -// log-file: stderr -// log-level: error -// limit-nofile: 65535 -// """ -// -// let configurationFilePath = Constants.cachesDirectory.appendingPathComponent("config.yml", isDirectory: false).path -// guard FileManager.default.createFile(atPath: configurationFilePath, contents: config.data(using: .utf8)!) else { -// xrayLog(.info, message: "Cant save hevSocks configuration") -// completionHandler(XrayErrors.cantSaveHevSocksConfig) -// return -// } -// -// DispatchQueue.global().async { -// xrayLog(.info, message: "Hev socks started") -// completionHandler(nil) -// Socks5Tunnel.run(withConfig: configurationFilePath) -// } -// } -//} import Foundation import NetworkExtension import WireGuardKitGo enum XrayErrors: Error { case noXrayConfig + case xrayConfigIsWrong case cantSaveXrayConfig case cantParseListenAndPort case cantSaveHevSocksConfig @@ -213,14 +27,14 @@ extension PacketTunnelProvider { // Xray configuration guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol, let providerConfiguration = protocolConfiguration.providerConfiguration, - let xrayConfigData = providerConfiguration[Constants.xrayConfigKey] as? Data else { + let configData = providerConfiguration[Constants.xrayConfigKey] as? Data else { xrayLog(.error, message: "Can't get xray configuration") completionHandler(XrayErrors.noXrayConfig) return } // Tunnel settings - let ipv6Enabled = true + let ipv6Enabled = false let hideVPNIcon = false let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: "254.1.1.1") @@ -244,12 +58,29 @@ extension PacketTunnelProvider { return settings }() - let dns = ["8.8.4.4","1.1.1.1"] - settings.dnsSettings = NEDNSSettings(servers: dns) - do { - let port = 10808 - let address = "::1" + let xrayConfig = try JSONDecoder().decode(XrayConfig.self, + from: configData) + + var dnsArray = [String]() + if let dns1 = xrayConfig.dns1 { + dnsArray.append(dns1) + } + if let dns2 = xrayConfig.dns2 { + dnsArray.append(dns2) + } + + settings.dnsSettings = !dnsArray.isEmpty + ? NEDNSSettings(servers: dnsArray) + : NEDNSSettings(servers: ["1.1.1.1"]) + + let xrayConfigData = xrayConfig.config.data(using: .utf8) + + guard let xrayConfigData else { + xrayLog(.error, message: "Can't encode config to data") + completionHandler(XrayErrors.xrayConfigIsWrong) + return + } let jsonDict = try JSONSerialization.jsonObject(with: xrayConfigData, options: []) as? [String: Any] @@ -260,6 +91,9 @@ extension PacketTunnelProvider { return } + let port = 10808 + let address = "::1" + if var inboundsArray = jsonDict["inbounds"] as? [[String: Any]], !inboundsArray.isEmpty { inboundsArray[0]["port"] = port inboundsArray[0]["listen"] = address diff --git a/deploy/AnhTVMacOSMain.provisionprofile b/deploy/AnhTVMacOSMain.provisionprofile deleted file mode 100644 index 675c8dd0..00000000 Binary files a/deploy/AnhTVMacOSMain.provisionprofile and /dev/null differ diff --git a/deploy/AnhTVMacOSNE.mobileprovision b/deploy/AnhTVMacOSNE.mobileprovision deleted file mode 100644 index 88735f24..00000000 Binary files a/deploy/AnhTVMacOSNE.mobileprovision and /dev/null differ diff --git a/deploy/match_AppStore_orgamneziaAmneziaVPNnetworkextension.mobileprovision b/deploy/match_AppStore_orgamneziaAmneziaVPNnetworkextension.mobileprovision deleted file mode 100644 index 03fd0f4f..00000000 Binary files a/deploy/match_AppStore_orgamneziaAmneziaVPNnetworkextension.mobileprovision and /dev/null differ diff --git a/deploy/orgamneziaAmneziaVPN_manual_profile.provisionprofile b/deploy/orgamneziaAmneziaVPN_manual_profile.provisionprofile deleted file mode 100644 index 5cae104d..00000000 Binary files a/deploy/orgamneziaAmneziaVPN_manual_profile.provisionprofile and /dev/null differ