Repository: IraSoro/peri
Pull request #256 (2024-07-18 19:40:00)

hotfix: downgrade ionic packages
We found one bug when user's config is dissapeared due to newest ionic's version upgrade

More info #255


Patch:
diff --git a/BUILDING.md b/BUILDING.md
index 580408d..7895c3d 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -24,10 +24,38 @@ ionic cap build android # generates Android project
 
 An `android` directory will be generated and you can open it with `Android Studio` and build the project based on this instruction <https://capacitorjs.com/docs/android>
 
-You can also create a development version of native `peri` using the `Docker` image. To do this you should run the following command:
+You can also create a development version of native `peri` using the following `Dockerfile`, just create it in the root of the `peri` project:
+
+```dockerfile
+FROM node:latest
+
+WORKDIR /home/
+
+RUN apt-get update && \
+  apt-get install -y android-sdk openjdk-17-jdk && \
+  wget -q https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2022.2.1.20/android-studio-2022.2.1.20-linux.tar.gz && \
+  tar -C /usr/local -xzf android-studio-2022.2.1.20-linux.tar.gz && \
+  rm android-studio-2022.2.1.20-linux.tar.gz && \
+  wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \
+  unzip -q commandlinetools-linux-9477386_latest.zip && \
+  mkdir -p /usr/lib/android-sdk/cmdline-tools/latest && \
+  mv cmdline-tools/* /usr/lib/android-sdk/cmdline-tools/latest/ && \
+  rm commandlinetools-linux-9477386_latest.zip && \
+  yes | /usr/lib/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses && \
+  npm -g install @ionic/cli@7.1.1
+
+ENV ANDROID_HOME=/usr/lib/android-sdk/
+ENV PATH=$PATH:${ANDROID_HOME}tools/:${ANDROID_HOME}platform-tools/
+
+WORKDIR /home/app
+
+ENTRYPOINT [ "bash" ]
+```
+
+And run:
 
 ```shell
-docker build -f docker/Dockerfile -t peri-android-env:latest .
+docker build -t peri-android-env:latest .
 ```
 
 After that, you can start the container with:
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 100644
index 14ef333..0000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM node:latest
-
-WORKDIR /home/
-
-ARG OPENJDK_VERSION=17
-# You can find latest `Android Studio` and `Command line tools`
-# versions here https://developer.android.com/studio
-ARG ANDROID_SDK_VERSION=2024.1.1.11
-ARG COMMANDLINE_TOOLS_LINUX_VERSION=11076708_latest
-ARG IONIC_CLI_VERSION=7.2.0
-
-RUN apt-get update && \
-  apt-get install -y android-sdk openjdk-${OPENJDK_VERSION}-jdk && \
-  wget -q https://redirector.gvt1.com/edgedl/android/studio/ide-zips/${ANDROID_SDK_VERSION}/android-studio-${ANDROID_SDK_VERSION}-linux.tar.gz && \
-  tar -C /usr/local -xzf android-studio-${ANDROID_SDK_VERSION}-linux.tar.gz && \
-  rm android-studio-${ANDROID_SDK_VERSION}-linux.tar.gz && \
-  wget -q https://dl.google.com/android/repository/commandlinetools-linux-${COMMANDLINE_TOOLS_LINUX_VERSION}.zip && \
-  unzip -q commandlinetools-linux-${COMMANDLINE_TOOLS_LINUX_VERSION}.zip && \
-  mkdir -p /usr/lib/android-sdk/cmdline-tools/latest && \
-  mv cmdline-tools/* /usr/lib/android-sdk/cmdline-tools/latest/ && \
-  rm commandlinetools-linux-${COMMANDLINE_TOOLS_LINUX_VERSION}.zip && \
-  yes | /usr/lib/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses && \
-  npm -g install @ionic/cli@${IONIC_CLI_VERSION}
-
-ENV ANDROID_HOME=/usr/lib/android-sdk/
-ENV PATH=$PATH:${ANDROID_HOME}tools/:${ANDROID_HOME}platform-tools/
-
-WORKDIR /home/app
-
-ENTRYPOINT [ "bash" ]
diff --git a/package-lock.json b/package-lock.json
index c094047..abc115c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,18 +8,17 @@
       "name": "peri",
       "version": "2.4.0",
       "dependencies": {
-        "@capacitor/android": "^6.0.0",
-        "@capacitor/app": "^6.0.0",
-        "@capacitor/browser": "^6.0.1",
-        "@capacitor/core": "^6.0.0",
-        "@capacitor/filesystem": "^6.0.0",
-        "@capacitor/haptics": "^6.0.0",
-        "@capacitor/keyboard": "^6.0.0",
-        "@capacitor/share": "^6.0.0",
-        "@capacitor/status-bar": "^6.0.0",
-        "@ionic/core": "^8.2.5",
-        "@ionic/react": "^8.2.5",
-        "@ionic/react-router": "^8.2.5",
+        "@capacitor/android": "5.0.5",
+        "@capacitor/app": "5.0.3",
+        "@capacitor/core": "5.0.5",
+        "@capacitor/filesystem": "^5.0.4",
+        "@capacitor/haptics": "5.0.4",
+        "@capacitor/keyboard": "5.0.4",
+        "@capacitor/share": "^5.0.4",
+        "@capacitor/status-bar": "5.0.4",
+        "@ionic/core": "^7.5.1",
+        "@ionic/react": "^7.5.1",
+        "@ionic/react-router": "^7.5.1",
         "@ionic/storage": "^4.0.0",
         "@testing-library/jest-dom": "^5.11.9",
         "@testing-library/react": "^14.0.0",
@@ -39,8 +38,8 @@
         "i18next-intervalplural-postprocessor": "^3.0.0",
         "ionicons": "^7.1.2",
         "prettier": "^3.0.0",
-        "react": "^18.3.1",
-        "react-dom": "^18.3.1",
+        "react": "^18.2.0",
+        "react-dom": "^18.2.0",
         "react-i18next": "^13.0.2",
         "react-router": "^5.3.4",
         "react-router-dom": "^5.3.4",
@@ -62,7 +61,7 @@
         "workbox-streams": "^7.0.0"
       },
       "devDependencies": {
-        "@capacitor/cli": "^6.0.0",
+        "@capacitor/cli": "5.0.5",
         "@ionic/lab": "3.2.15",
         "gh-pages": "^5.0.0"
       }
@@ -2140,45 +2139,37 @@
       "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
     },
     "node_modules/@capacitor/android": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-6.1.0.tgz",
-      "integrity": "sha512-S4PW4N5xtKHTrICjG7bkBhI70jdXbb+8nbm1pJpuXChCD0gkCcofJhPaw4bCoO0egcugBN1U7DkegNw5jWpHcw==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.0.5.tgz",
+      "integrity": "sha512-vH5Qoy+p2Egsu1GtPtOsihHcEI2fCGCIHwlUGPaXXGysudzpzWtJZ5JZNlycJyfRdjECrjkutgbNaHLog+YlXQ==",
+      "license": "MIT",
       "peerDependencies": {
-        "@capacitor/core": "^6.1.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/app": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-6.0.0.tgz",
-      "integrity": "sha512-X5UGd90Jh5p9rmoPyMqFyFWqOypdJgVJhYcM5X1YyDVJJGzmJ5MuYv1+ajj5DW9Qyh+5a3th9WYptdGby8jidA==",
-      "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
-      }
-    },
-    "node_modules/@capacitor/browser": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/@capacitor/browser/-/browser-6.0.1.tgz",
-      "integrity": "sha512-KBK0PKfmUj0if+gYWEh0+LG70l1gcLGbDCWJt2Ig3naXHGlrLoWBqVArCgbwBzwJZL+VlwW7iEhAzGOWpg2jhw==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-5.0.3.tgz",
+      "integrity": "sha512-YqGWnD+O8wjNVyIctZCMkVqOr3RhxunLUBbmLpdRc66RzPN7xEk8GAwxY2YV/ehTL054mo3uqovpWvei7rYsEA==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/cli": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.0.tgz",
-      "integrity": "sha512-HEKDh3+FuNZKFHmSDZ7nAnaX3bzhtznYk9GsZBMac1y4CTAxIykPX9wzZ3DzLeM/EbMBGFClUbefkIkimAyfYg==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.0.5.tgz",
+      "integrity": "sha512-Mf+lr2L98NfDZki3e5jdG176LUH0rf+OFoMa/oFf6dp4iHwQjS1HiHN5iaGcfJ5RWt432SMEB0dOgicXPb4KCQ==",
       "dev": true,
       "dependencies": {
         "@ionic/cli-framework-output": "^2.2.5",
         "@ionic/utils-fs": "^3.1.6",
-        "@ionic/utils-process": "^2.1.11",
-        "@ionic/utils-subprocess": "2.1.11",
+        "@ionic/utils-subprocess": "^2.1.11",
         "@ionic/utils-terminal": "^2.3.3",
         "commander": "^9.3.0",
         "debug": "^4.3.4",
         "env-paths": "^2.2.0",
         "kleur": "^4.1.4",
-        "native-run": "^2.0.0",
+        "native-run": "^1.7.2",
         "open": "^8.4.0",
         "plist": "^3.0.5",
         "prompts": "^2.4.2",
@@ -2192,106 +2183,56 @@
         "cap": "bin/capacitor",
         "capacitor": "bin/capacitor"
       },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@capacitor/cli/node_modules/@ionic/utils-object": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
-      "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.0.0",
-        "tslib": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/@capacitor/cli/node_modules/@ionic/utils-process": {
-      "version": "2.1.12",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz",
-      "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==",
-      "dev": true,
-      "dependencies": {
-        "@ionic/utils-object": "2.1.6",
-        "@ionic/utils-terminal": "2.3.5",
-        "debug": "^4.0.0",
-        "signal-exit": "^3.0.3",
-        "tree-kill": "^1.2.2",
-        "tslib": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/@capacitor/cli/node_modules/@ionic/utils-terminal": {
-      "version": "2.3.5",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz",
-      "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==",
-      "dev": true,
-      "dependencies": {
-        "@types/slice-ansi": "^4.0.0",
-        "debug": "^4.0.0",
-        "signal-exit": "^3.0.3",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "tslib": "^2.0.1",
-        "untildify": "^4.0.0",
-        "wrap-ansi": "^7.0.0"
-      },
       "engines": {
         "node": ">=16.0.0"
       }
     },
     "node_modules/@capacitor/core": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.0.tgz",
-      "integrity": "sha512-Kt4ONm0X9xxJXn9Q73oBaKdzep5B/VJw3VjXa2eGul4cD2k37mJwgjpXSMRnLH0Aju5bCiRL8J/hMAfTlokO6A==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.0.5.tgz",
+      "integrity": "sha512-sulwWXEhYI6cBIj1WnH9k+a8z1f4XTRDtdh3YfXNdeV36UT7T55GCeGrPoQMm7ww6iWyGuv1VEzVIuZFga8rtw==",
       "dependencies": {
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@capacitor/filesystem": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-6.0.0.tgz",
-      "integrity": "sha512-GnC4CBfky7fvG9zSV/aQnZaGs6ZJ90AaQorr53z81ArTCqcrSUeBMuCxWmvti9HrdXLhBavyA1UOjvRGObOFjg==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-5.0.5.tgz",
+      "integrity": "sha512-7byHHMytarU3gLfLdMn1INNBFr7SRh362ZLDayppg3xm5/8iyCKiNRGoSDV5/IdCEzEaC21mza+foWD9/LFN2Q==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/haptics": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-6.0.0.tgz",
-      "integrity": "sha512-z2TmB+pTbd98Il2I1xpZGClCFwORxxP2m9f1a0rh70c2ubj2atVyZctgxrx1fuoExZTNGSxHaylWfrmjmtelVg==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/@capacitor/haptics/-/haptics-5.0.4.tgz",
+      "integrity": "sha512-gcldLYE517h7t/r9oK1J7EV6hX854gjZNiDrS5j5O91V193L2K43Yqyp2ZKfdZ05ZLTBYkr/vg1ZTScfHseLxg==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/keyboard": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-6.0.1.tgz",
-      "integrity": "sha512-fBjqQaMc5uhFj6ycLnLa2hzQsR77pj/iuLLATkWihMUze3dD+IkwqFnEyOLsyk+52uoOYM7WkziSpNTquU1sZA==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/@capacitor/keyboard/-/keyboard-5.0.4.tgz",
+      "integrity": "sha512-vIv2NLZRBXgMDkyZurFpANCe7pEbpChdXNGdQFnk1Kg31DFScgwmq4ednZwT4+SHojH6SHCXxaBPg7Y265LWVQ==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/share": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-6.0.1.tgz",
-      "integrity": "sha512-KQev3omYZ5hgjoZA+NdFZTuFyu1dd/ZIYkE0RnLBB11ZmFEmGRSCYdYtOyqkVxGU1n6FDDqgPPy13CvAZKWNPQ==",
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-5.0.5.tgz",
+      "integrity": "sha512-wUGMn3pxMacla6zj0nVV9oAjhQV/hfcirbxNr/54eVC7Sy9+hpuRBqMB1IYRgH6HfDIs4whsIMgbr5WuChxqyw==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@capacitor/status-bar": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-6.0.0.tgz",
-      "integrity": "sha512-Wo0ILugYlmENegKDgTzVCPjbvP8h1ObgHslLdgeVG643ViMS/diausHIq8e104WIKCXtKIELmQeYVp9mX7932g==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/@capacitor/status-bar/-/status-bar-5.0.4.tgz",
+      "integrity": "sha512-6gvkUTotpzHlfn5KoIglbIqdaEWV/crLtCYXebtFtRAPofCU8EWcljGeeISKBYPE99xqsk3M66vRUY4OzsAYyA==",
       "peerDependencies": {
-        "@capacitor/core": "^6.0.0"
+        "@capacitor/core": "^5.0.0"
       }
     },
     "node_modules/@csstools/normalize.css": {
@@ -2756,6 +2697,25 @@
         "node": ">=10.3.0"
       }
     },
+    "node_modules/@ionic/cli-framework/node_modules/@ionic/utils-subprocess": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz",
+      "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==",
+      "dev": true,
+      "dependencies": {
+        "@ionic/utils-array": "2.1.5",
+        "@ionic/utils-fs": "3.1.6",
+        "@ionic/utils-process": "2.1.10",
+        "@ionic/utils-stream": "3.1.5",
+        "@ionic/utils-terminal": "2.3.3",
+        "cross-spawn": "^7.0.3",
+        "debug": "^4.0.0",
+        "tslib": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10.3.0"
+      }
+    },
     "node_modules/@ionic/cli-framework/node_modules/@ionic/utils-terminal": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
@@ -2792,12 +2752,12 @@
       }
     },
     "node_modules/@ionic/core": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.2.5.tgz",
-      "integrity": "sha512-NhK5KfP5NL5NITibj8sOUlfI/ARNCF5rBu5HdIEfFe25MJkd0IYBQWjVaESFhSk7aB8pXEP8DIx1AHbT9e3Sog==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.1.tgz",
+      "integrity": "sha512-BnWehjZ3IVGPFLdOZV151VhLsyXzr8d2mIVULqUXil5NHgQf039ScppI0kfrCS+M3zMdqeTmlIK/nq6M+kcQaQ==",
       "dependencies": {
-        "@stencil/core": "^4.19.2",
-        "ionicons": "^7.2.2",
+        "@stencil/core": "^4.5.0",
+        "ionicons": "^7.2.1",
         "tslib": "^2.1.0"
       }
     },
@@ -2836,11 +2796,11 @@
       }
     },
     "node_modules/@ionic/react": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.2.5.tgz",
-      "integrity": "sha512-Iy5zM3R2InksH6Fh9AcBlgUGhz3YOV/2TDRvIdhT0wQIsDbCreAcGt8ST5x8YeKQPuChoDhmD2HQG9g7Fc9DhQ==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.5.1.tgz",
+      "integrity": "sha512-1Hd0SPC9uYV1QR2VSKcXy945UWqUBTkHlmed/CU3B3pSIT3MNnZct5Nj9Ekat9UgXBC7NRrqv6yhfkzPekvilg==",
       "dependencies": {
-        "@ionic/core": "8.2.5",
+        "@ionic/core": "7.5.1",
         "ionicons": "^7.0.0",
         "tslib": "*"
       },
@@ -2850,11 +2810,11 @@
       }
     },
     "node_modules/@ionic/react-router": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-8.2.5.tgz",
-      "integrity": "sha512-ntkyNJJKQluM69CW916Y8ANUdLqaHRDqWa2aBz6ZQ++33WpqPAbajEWAqpnF47s7bQX6f4UbsGGyQUychXCe6w==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/@ionic/react-router/-/react-router-7.5.1.tgz",
+      "integrity": "sha512-BKGfnjyNDDMcIqAH9VKO+UHQPxbsM9Ci/o9wWVYrjArHiE9JtpgFqVDjJwFCy/D5JZKTVe8XRj0V+97I99vs1w==",
       "dependencies": {
-        "@ionic/react": "8.2.5",
+        "@ionic/react": "7.5.1",
         "tslib": "*"
       },
       "peerDependencies": {
@@ -2964,57 +2924,78 @@
       }
     },
     "node_modules/@ionic/utils-subprocess": {
-      "version": "2.1.11",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz",
-      "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==",
+      "version": "2.1.12",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.12.tgz",
+      "integrity": "sha512-N05Y+dIXBHofKWJTheCMzVqmgY9wFmZcRv/LdNnfXaaA/mxLTyGxQYeig8fvQXTtDafb/siZXcrTkmQ+y6n3Yg==",
       "dev": true,
       "dependencies": {
-        "@ionic/utils-array": "2.1.5",
-        "@ionic/utils-fs": "3.1.6",
-        "@ionic/utils-process": "2.1.10",
-        "@ionic/utils-stream": "3.1.5",
-        "@ionic/utils-terminal": "2.3.3",
+        "@ionic/utils-array": "2.1.6",
+        "@ionic/utils-fs": "3.1.7",
+        "@ionic/utils-process": "2.1.11",
+        "@ionic/utils-stream": "3.1.6",
+        "@ionic/utils-terminal": "2.3.4",
         "cross-spawn": "^7.0.3",
         "debug": "^4.0.0",
         "tslib": "^2.0.1"
       },
       "engines": {
-        "node": ">=10.3.0"
+        "node": ">=16.0.0"
       }
     },
-    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-fs": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz",
-      "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==",
+    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-array": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz",
+      "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==",
       "dev": true,
       "dependencies": {
-        "@types/fs-extra": "^8.0.0",
         "debug": "^4.0.0",
-        "fs-extra": "^9.0.0",
         "tslib": "^2.0.1"
       },
       "engines": {
-        "node": ">=10.3.0"
+        "node": ">=16.0.0"
       }
     },
-    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
-      "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==",
+    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
+      "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
       "dev": true,
       "dependencies": {
-        "@types/slice-ansi": "^4.0.0",
+        "debug": "^4.0.0",
+        "tslib": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.11.tgz",
+      "integrity": "sha512-Uavxn+x8j3rDlZEk1X7YnaN6wCgbCwYQOeIjv/m94i1dzslqWhqIHEqxEyeE8HsT5Negboagg7GtQiABy+BLbA==",
+      "dev": true,
+      "dependencies": {
+        "@ionic/utils-object": "2.1.6",
+        "@ionic/utils-terminal": "2.3.4",
         "debug": "^4.0.0",
         "signal-exit": "^3.0.3",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "tslib": "^2.0.1",
-        "untildify": "^4.0.0",
-        "wrap-ansi": "^7.0.0"
+        "tree-kill": "^1.2.2",
+        "tslib": "^2.0.1"
       },
       "engines": {
-        "node": ">=10.3.0"
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-stream": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.6.tgz",
+      "integrity": "sha512-4+Kitey1lTA1yGtnigeYNhV/0tggI3lWBMjC7tBs1K9GXa/q7q4CtOISppdh8QgtOhrhAXS2Igp8rbko/Cj+lA==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.0.0",
+        "tslib": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16.0.0"
       }
     },
     "node_modules/@ionic/utils-terminal": {
@@ -4128,9 +4109,9 @@
       }
     },
     "node_modules/@stencil/core": {
-      "version": "4.19.2",
-      "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.19.2.tgz",
-      "integrity": "sha512-ZdnbHmHEl8E5vN0GWDtONe5w6j3CrSqqxZM4hNLBPkV/aouWKug7D5/Mi6RazfYO5U4fmHQYLwMz60rHcx0G4g==",
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.5.0.tgz",
+      "integrity": "sha512-XRbHdb9t4SQzCCbF9qsh0dexvnlArEzCDJl19BJzxzazVBM398SeJUKCBh4p91AZIWveN0gHuZSIGMhLWR7qSA==",
       "bin": {
         "stencil": "bin/stencil"
       },
@@ -5239,15 +5220,6 @@
         "@xtuc/long": "4.2.2"
       }
     },
-    "node_modules/@xmldom/xmldom": {
-      "version": "0.8.10",
-      "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
-      "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
     "node_modules/@xtuc/ieee754": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -9992,12 +9964,12 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "node_modules/ini": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
-      "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
+      "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
       "dev": true,
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
     "node_modules/internal-slot": {
@@ -10014,9 +9986,9 @@
       }
     },
     "node_modules/ionicons": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz",
-      "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==",
+      "version": "7.2.1",
+      "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz",
+      "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==",
       "dependencies": {
         "@stencil/core": "^4.0.3"
       }
@@ -13062,28 +13034,28 @@
       }
     },
     "node_modules/native-run": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz",
-      "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==",
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/native-run/-/native-run-1.7.2.tgz",
+      "integrity": "sha512-2aahC8iXIO8BcvEukVMrYwL5sXurkuIGyQgfSGBto832W6ejV+cB5Ww+2/CRxmyozhbxARJ2OMpEGPV8sTqsrQ==",
       "dev": true,
       "dependencies": {
-        "@ionic/utils-fs": "^3.1.7",
-        "@ionic/utils-terminal": "^2.3.4",
+        "@ionic/utils-fs": "^3.1.6",
+        "@ionic/utils-terminal": "^2.3.3",
         "bplist-parser": "^0.3.2",
         "debug": "^4.3.4",
         "elementtree": "^0.1.7",
-        "ini": "^4.1.1",
-        "plist": "^3.1.0",
-        "split2": "^4.2.0",
+        "ini": "^3.0.1",
+        "plist": "^3.0.6",
+        "split2": "^4.1.0",
         "through2": "^4.0.2",
-        "tslib": "^2.6.2",
+        "tslib": "^2.4.0",
         "yauzl": "^2.10.0"
       },
       "bin": {
         "native-run": "bin/native-run"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=12.13.0"
       }
     },
     "node_modules/natural-compare": {
@@ -13707,17 +13679,16 @@
       }
     },
     "node_modules/plist": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
-      "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz",
+      "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==",
       "dev": true,
       "dependencies": {
-        "@xmldom/xmldom": "^0.8.8",
         "base64-js": "^1.5.1",
         "xmlbuilder": "^15.1.1"
       },
       "engines": {
-        "node": ">=10.4.0"
+        "node": ">=6"
       }
     },
     "node_modules/postcss": {
@@ -15135,9 +15106,9 @@
       }
     },
     "node_modules/react": {
-      "version": "18.3.1",
-      "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
-      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+      "version": "18.2.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+      "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
       "dependencies": {
         "loose-envify": "^1.1.0"
       },
@@ -15288,15 +15259,15 @@
       }
     },
     "node_modules/react-dom": {
-      "version": "18.3.1",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
-      "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+      "version": "18.2.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+      "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
       "dependencies": {
         "loose-envify": "^1.1.0",
-        "scheduler": "^0.23.2"
+        "scheduler": "^0.23.0"
       },
       "peerDependencies": {
-        "react": "^18.3.1"
+        "react": "^18.2.0"
       }
     },
     "node_modules/react-error-overlay": {
@@ -16147,9 +16118,9 @@
       }
     },
     "node_modules/scheduler": {
-      "version": "0.23.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
-      "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+      "version": "0.23.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+      "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
       "dependencies": {
         "loose-envify": "^1.1.0"
       }
@@ -17467,9 +17438,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+      "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA=="
     },
     "node_modules/tsutils": {
       "version": "3.21.0",
diff --git a/package.json b/package.json
index f48b262..704c89d 100644
--- a/package.json
+++ b/package.json
@@ -6,18 +6,17 @@
     "url": "https://github.com/IraSoro"
   },
   "dependencies": {
-    "@capacitor/android": "^6.0.0",
-    "@capacitor/app": "^6.0.0",
-    "@capacitor/browser": "^6.0.1",
-    "@capacitor/core": "^6.0.0",
-    "@capacitor/filesystem": "^6.0.0",
-    "@capacitor/haptics": "^6.0.0",
-    "@capacitor/keyboard": "^6.0.0",
-    "@capacitor/share": "^6.0.0",
-    "@capacitor/status-bar": "^6.0.0",
-    "@ionic/core": "^8.2.5",
-    "@ionic/react": "^8.2.5",
-    "@ionic/react-router": "^8.2.5",
+    "@capacitor/android": "5.0.5",
+    "@capacitor/app": "5.0.3",
+    "@capacitor/core": "5.0.5",
+    "@capacitor/filesystem": "^5.0.4",
+    "@capacitor/haptics": "5.0.4",
+    "@capacitor/keyboard": "5.0.4",
+    "@capacitor/share": "^5.0.4",
+    "@capacitor/status-bar": "5.0.4",
+    "@ionic/core": "^7.5.1",
+    "@ionic/react": "^7.5.1",
+    "@ionic/react-router": "^7.5.1",
     "@ionic/storage": "^4.0.0",
     "@testing-library/jest-dom": "^5.11.9",
     "@testing-library/react": "^14.0.0",
@@ -37,8 +36,8 @@
     "i18next-intervalplural-postprocessor": "^3.0.0",
     "ionicons": "^7.1.2",
     "prettier": "^3.0.0",
-    "react": "^18.3.1",
-    "react-dom": "^18.3.1",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
     "react-i18next": "^13.0.2",
     "react-router": "^5.3.4",
     "react-router-dom": "^5.3.4",
@@ -82,7 +81,7 @@
     ]
   },
   "devDependencies": {
-    "@capacitor/cli": "^6.0.0",
+    "@capacitor/cli": "5.0.5",
     "@ionic/lab": "3.2.15",
     "gh-pages": "^5.0.0"
   },
diff --git a/src/data/AppVersion.ts b/src/data/AppVersion.ts
index 587310c..b07dd21 100644
--- a/src/data/AppVersion.ts
+++ b/src/data/AppVersion.ts
@@ -1,5 +1,4 @@
 import { isPlatform } from "@ionic/core";
-import { Browser } from "@capacitor/browser";
 import semver from "semver";
 
 export const appVersion = "v2.4.0";
@@ -67,7 +66,5 @@ export async function isNewVersionAvailable(): Promise<boolean> {
 
 export async function downloadLatestRelease() {
   const latestRelease = await getLatestReleaseInfo();
-  await Browser.open({
-    url: latestRelease.htmlUrl,
-  });
+  window.open(latestRelease.htmlUrl, "_system", "location=yes");
 }


Test patch:
diff --git a/src/tests/AppVersion.test.ts b/src/tests/AppVersion.test.ts
index ed76f92..22871b8 100644
--- a/src/tests/AppVersion.test.ts
+++ b/src/tests/AppVersion.test.ts
@@ -1,5 +1,4 @@
 import * as mockedIonicCore from "@ionic/core";
-import * as mockedCapacitorBrowser from "@capacitor/browser";
 import {
   GithubReleaseAsset,
   GithubReleaseInfo,
@@ -8,8 +7,6 @@ import {
   isNewVersionAvailable,
 } from "../data/AppVersion";
 
-jest.mock("@capacitor/browser");
-
 describe("Get information about latest release", () => {
   test("There are no new version", async () => {
     // desktop
@@ -132,7 +129,7 @@ test("Download latest release", async () => {
   // android
   jest.spyOn(mockedIonicCore, "isPlatform").mockReturnValueOnce(true);
 
-  mockedCapacitorBrowser.Browser.open = jest.fn().mockResolvedValueOnce(true);
+  const mockedWindowOpen = jest.spyOn(window, "open");
 
   globalThis.fetch = jest.fn().mockResolvedValue({
     json: jest.fn().mockResolvedValue({
@@ -149,7 +146,10 @@ test("Download latest release", async () => {
   });
 
   await expect(downloadLatestRelease()).resolves.not.toThrow();
-  expect(mockedCapacitorBrowser.Browser.open).toHaveBeenCalledWith({
-    url: "https://some-html-url.com",
-  });
+  expect(mockedWindowOpen).toHaveBeenNthCalledWith(
+    1,
+    "https://some-html-url.com",
+    "_system",
+    "location=yes",
+  );
 });