diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/Contents.json b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/Contents.json
index b8e2460..0350d65 100644
--- a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/Contents.json
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/Contents.json
@@ -1,17 +1,8 @@
{
"images" : [
{
- "filename" : "latencyHigh.pdf",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
+ "filename" : "latencyHigh.svg",
+ "idiom" : "universal"
}
],
"info" : {
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.pdf b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.pdf
deleted file mode 100644
index d1a0a6c..0000000
--- a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.pdf
+++ /dev/null
@@ -1,70 +0,0 @@
-%PDF-1.4
-%
-4 0 obj
-<< /Length 5 0 R
- /Filter /FlateDecode
->>
-stream
-x]M0>/qB4RaQw RTɝONT(W\rTs-]ޭT3|cCJOd>1M&۴vUةB龗,*N+X̾
,3R-\a?
-MdN4
B{6/T[h@z7\qS
-Y#-l>;}]"_p͔ޗ[&N~ٚ,:)s+t
-endstream
-endobj
-5 0 obj
- 235
-endobj
-3 0 obj
-<<
- /ExtGState <<
- /a0 << /CA 1 /ca 1 >>
- >>
->>
-endobj
-2 0 obj
-<< /Type /Page % 1
- /Parent 1 0 R
- /MediaBox [ 0 0 11.25 14.25 ]
- /Contents 4 0 R
- /Group <<
- /Type /Group
- /S /Transparency
- /I true
- /CS /DeviceRGB
- >>
- /Resources 3 0 R
->>
-endobj
-1 0 obj
-<< /Type /Pages
- /Kids [ 2 0 R ]
- /Count 1
->>
-endobj
-6 0 obj
-<< /Producer (cairo 1.15.12 (http://cairographics.org))
- /CreationDate (D:20210301133320Z)
->>
-endobj
-7 0 obj
-<< /Type /Catalog
- /Pages 1 0 R
->>
-endobj
-xref
-0 8
-0000000000 65535 f
-0000000643 00000 n
-0000000421 00000 n
-0000000349 00000 n
-0000000015 00000 n
-0000000327 00000 n
-0000000708 00000 n
-0000000819 00000 n
-trailer
-<< /Size 8
- /Root 7 0 R
- /Info 6 0 R
->>
-startxref
-871
-%%EOF
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.svg b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.svg
new file mode 100644
index 0000000..a2e3067
--- /dev/null
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyHigh.imageset/latencyHigh.svg
@@ -0,0 +1,5 @@
+
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/Contents.json b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/Contents.json
index 13a21b8..17ec8e8 100644
--- a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/Contents.json
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/Contents.json
@@ -1,17 +1,8 @@
{
"images" : [
{
- "filename" : "latencyLow.pdf",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
+ "filename" : "latencyLow.svg",
+ "idiom" : "universal"
}
],
"info" : {
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.pdf b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.pdf
deleted file mode 100644
index 1e57e9a..0000000
Binary files a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.pdf and /dev/null differ
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.svg b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.svg
new file mode 100644
index 0000000..fad90db
--- /dev/null
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyLow.imageset/latencyLow.svg
@@ -0,0 +1,5 @@
+
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/Contents.json b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/Contents.json
index 5b664df..476cc57 100644
--- a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/Contents.json
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/Contents.json
@@ -1,17 +1,8 @@
{
"images" : [
{
- "filename" : "latencyMedium.pdf",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
+ "filename" : "latencyMedium.svg",
+ "idiom" : "universal"
}
],
"info" : {
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.pdf b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.pdf
deleted file mode 100644
index 755eff9..0000000
Binary files a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.pdf and /dev/null differ
diff --git a/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.svg b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.svg
new file mode 100644
index 0000000..5469b9b
--- /dev/null
+++ b/iOS/Assets/Assets.xcassets/Icons and images/Serverlist/latencyMedium.imageset/latencyMedium.svg
@@ -0,0 +1,5 @@
+
diff --git a/iOS/Assets/index.html b/iOS/Assets/index.html
deleted file mode 100644
index 251e9fc..0000000
--- a/iOS/Assets/index.html
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
-
-
-
-
-
-
-
PrivadoVPN Privacy Policy
-
Last Updated: May 26, 2020
-
The PrivadoVPN Privacy Policy ("Policy") applies to the applications, websites and online products and services
- provided by Privado Networks AG. By visiting our websites or creating an account to use our Services, you agree
- to this Policy. If you do not agree to this Policy, you may not use our Services.
-
This Policy explains how we collect, use and store information. We collect only the minimal data required to
- provide the Services.
-
PrivadoVPN Key Privacy Facts
-
-
We do no store any information about what any specific user browsed or accessed through a PrivadoVPN
- connection.
-
-
We are not able to connect activity originating from an IP address from our VPN servers to activity
- conducted by an individual user.
-
-
We encrypt all data over our VPN connections, and we do not inspect or record the contents of what you
- are
- viewing, browsing or doing through the PrivadoVPN connections.
-
-
We ensure that we never log browsing history, traffic destination, data content, IP addresses, or DNS
- queries.
-
-
We will never sell your data to any third parties.
-
-
Information that we collect (information that you provide to us):
-
-
Account Creation: We collect minimal information when you create an account. This is
- information that you provide to us, including your email and your username.
-
-
Payment Information: We use third party payment processors to facilitate payment for the
- Services. If you utilize a credit card, this information will be collected by the payment processor. We do
- not collect or store your credit card number. The specific information collected varies based on your choice
- of payment method.
-
-
Support: We do collect and keep data that you share with us regarding support issues or
- customer requests. We may use third parties for support reporting purposes.
-
-
-
How We Use Information That You Provide To Us:
-
-
To communicate with you regarding support issues.
-
To communicate with you regarding billing issues.
-
To send you updates and announcements regarding the Services.
-
To send marketing emails about new products and updates that are part of our Services.
-
To send you promotions, seasonal discounts and to communicate with you about contests regarding our
- Services.
-
-
-
You may opt out from receiving any marketing or promotional emails by following the opt-out procedures that are
- explained in the email. Alternatively, you may go to support@privado.io
- opt out of our internal marketing or promotional emails.
-
Information We Collect Automatically When You Use Our Services
-
When you use our Services, we may collect the following information:
-
-
Mobile Applications: We collect information regarding which App version(s) you have
- activated for troubleshooting and assisting with support issues. We may also collect anonymous,
- aggregate statistics, such as the type of operating systems and devices that are most commonly used,
- including total number of installs, total number of uninstalls and the number of active users over a
- period of time.
-
-
Mobile Analytics Software: We use self-hosted Sentry crash reporting to send us crash
- reports so we can provide bug fixes and address technical issues rapidly.
-
-
Mobile Identifiers: We use mobile identifiers provided by iOS and Android devices. These
- identifiers do not contain your email address or name. Mobile identifiers provide us with statistics
- related to marketing or channel partners. Users may turn-off or reset Mobile Identifiers at any time.
- iOS users should review Apple's support page at https://support.apple.com/en-us/HT205223.
- Android users should review Google's support page at https://support.google.com
- /android/answer/3118621?hl=en.
-
-
-
Please note that the anonymized Mobile Applications Data is fully anonymized and is unable to be tied to a
- user
- of our Services. We collect the information to provide a fast and secure experience.
-
-
- Information Collected by Cookies:
-
-
Cookies are small files that store and provide information about your visit to our websites. We
- use cookies to improve the user experience of our website. We use analytics providers, like
- Google, which set cookies when you visit our websites.
-
-
We use cookies for a number of reasons, like helping us see which features are most popular,
- counting visitors to a page, improving our users' experience, keeping our services secure, and
- generally providing you with a better experience.
-
You are also free to change your cookie preferences in the settings tab for your browser. The
- type of browser and device you are using will determine the control level for cookies you wish
- to allow or completely block.
-
-
For information on how our advertising partners allow you to opt out of receiving ads based on
- your web browsing history, please visit https://www.youronlinechoices.eu.
- Users in the United States should please visit http://optout.aboutads.info/.
-
-
-
-
-
Any Cookies that are utilized will not contain personally identifying information such as your email address
- and
- they do not track your activity outside of our websites.
-
Information Collected on Social Media or Blogs: We may collect information on our blog via our
- websites or through our social media accounts, including but not limited to Facebook, Reddit and Twitter.
- Any communication you provide to us on external social media accounts is done at your own risk and without
- guarantee of privacy. If you post a comment on one of our blogs or websites, please contact us if you want
- it deleted.
-
External Links: Our Services may contain links to other websites or other services of interest.
- We are not responsible for the content or material on any website that we link to, as these external sites
- and services are governed by their own terms and privacy policies.
-
Bandwidth Utilized & Free Versions.
-
We measure the amount of bandwidth utilized by users of the Services. Free versions may have a limited data
- transfer amount. Subscribers that paid for Services will be provided with unlimited data transfer. The total
- sum of data transferred is not identifiable for a user's behavior. We measure bandwidth utilized in order to
- improve our services. We do not log any data sent over the connections.
-
Use of Information
-
We combine the information we collect about you and use this information for various purposes, including
- to:
-
-
Provide and improve our products and services;
-
Process your transactions;
-
Send you technical notices and support and administrative messages;
-
Communicate with you about products, services, promotions, events and other news and information we
- think will be of interest to you;
-
-
Personalize our Services, including by providing content or features we think will be of interest to
- you;
-
-
Facilitate contests and promotions and process and deliver prizes;
-
Monitor and analyze trends and usage in connection with our Services;
-
Detect and prevent fraudulent transactions and other illegal activities, comply with our legal
- obligations and protect the rights and property of Privado and others; and
-
-
Carry out any other purpose described to you at the time the information was collected.
-
-
Disclosure of Information
-
We only disclose the limited data we have on record (i.e., email address & username) when compelled by
- the Swiss authorities. Data requests from foreign authorities must be approved by the Swiss authorities.
-
Under the laws of Switzerland, we are required to notify the targets of a surveillance request. Such
- notification may come from Swiss authorities if not directly from Us.
-
We are unable to supply any information for requests related to a PrivadoVPN user's
- browsing history, traffic destination, data content, IP addresses, or DNS queries. This information does not
- exist.
-
Right to Access, Rectification, Portability and Erasure
-
You can directly access, delete, edit or export personal data processed by us in your use of the Services.
- You can also email our support team at support@privado.io to make a
- request.
-
Data Retention
-
We store the information we collect about you for as long as necessary for the purposes for which we
- originally collected it. We may retain certain information for legitimate business purposes or as required
- by the laws of Switzerland.
-
Data Security
-
Data Security is a core pillar of our business. Our infrastructure and secure servers are contained in fully
- locked and 24-7 monitored data facilities that are best in class.
-
Even if a regulatory authority physically seizes a PrivadoVPN server (assuming it could break the disk
- encryption) there would be no logs or information that could be tied an individual user.
-
Changes to this Policy
-
We reserve the right to review and change this Policy at any time. We will notify users about any such changes. Continued use of our Services will be deemed as acceptance of such changes.
-
We do not store any data about what any specific user browsed or accessed through a PrivadoVPN connection.
+
+
We are not able to connect activity originating from an IP address from our VPN servers to activity
+ conducted by an individual user.
+
+
We encrypt all data over our VPN connections, and we do not inspect or record the contents of what you are
+ viewing, browsing or doing through the PrivadoVPN connections.
+
+
We ensure that we never log browsing history, traffic destination, data content, IP addresses, or DNS
+ queries.
+
+
We will never sell your data to any third parties.
+
+
The PrivadoVPN Privacy Policy ("Policy") applies to the applications, websites and online products and services
+ (the "Services") provided by Privado Networks AG ("we"). By visiting our websites or creating an account to use
+ our Services and ticking the "I agree"-box, you agree to this Policy. If you do not agree to this Policy, you
+ may not use our Services.
+
This Policy informs the customers and users ("you" or "user") of our Services of how we collect, process and
+ store personal data. We strive to collect only the minimal data required to provide the Services.
+
Data Controller:
+
Privado Networks AG in Zug, Switzerland, is the controller for the data processing pursuant to this Policy. You
+ can notify us of any data protection related concerns using support@privado.io.
+
+
+
Data that we collect (data that you provide to us):
+
+
Account Creation: We collect minimal data when you create an account. This is data that you
+ provide to us, including your email address and your username.
+
+
Payment Information: We use third party payment processors to facilitate payment for the
+ Services. These third party payment processors are located in Switzerland and the EU. If you utilize a
+ credit card, this information will be collected by the payment processor. We do not collect or store your
+ credit card number. The specific information collected varies based on your choice of payment method. We
+ recommend using Bitcoin when subscribing to our Services for maximum security.
+
+
Support: We do collect and keep data that you share with us regarding support issues or
+ customer requests. We may use third parties for support reporting purposes.
+
+
+
How we use data that you provide to us:
+
+
To communicate with you regarding support issues and to send you technical notices.
+
To communicate with you regarding billing issues and to send you administrative messages.
+
To communicate with you and send you information about products, updates, services, promotions, events,
+ contests and other news regarding the Services we think will be of interest to you and announcements
+ regarding the Services.
+
+
+
You may opt out from receiving any marketing or promotional emails by following the opt-out procedures that are
+ explained in the email. Alternatively, you may go to support@privado.io
+ opt out of our internal marketing or promotional emails.
+
Data we collect automatically when you use our Services
+
When you use our Services, we may collect the following information:
+
+
Mobile Applications: We collect information regarding which application version(s) you have
+ activated for troubleshooting and assisting with support issues. We may also collect anonymous, aggregate
+ statistics, such as the type of operating systems and devices that are most commonly used, including total
+ number of installs, total number of uninstalls and the number of active users over a period of time.
+
+
Mobile Analytics Software: We use self-hosted Sentry crash reporting tools to send us crash
+ reports so we can provide bug fixes and address technical issues rapidly.
+
+
Mobile Identifiers: We use mobile identifiers provided by iOS and Android devices. These
+ identifiers do not contain your email address or name. Mobile identifiers provide us with statistics related
+ to marketing or channel partners. Users may turn-off or reset Mobile Identifiers at any time. iOS users
+ should review Apple's support page at https://support.apple.com/en-us/HT205223.
+ Android users should review Google's support page at https://support.google.com/android/answer/3118621?hl=en.
+
+
+
Please note that the anonymized mobile applications data is fully anonymized and is unable to be tied to
+ a user of our Services. We collect the information to provide a fast and secure experience.
+
+
+ Information collected by Cookies:
+
+
Cookies are small files that store and provide information about your visit to our websites. We use
+ cookies to improve the user experience of our website. We use analytics providers, like Google,
+ which set cookies when you visit our websites.
+
+
We use cookies for a number of reasons, like helping us see which features are most popular,
+ counting visitors to a page, improving our users' experience, keeping our services secure, and
+ generally providing you with a better experience.
+
For information on how our advertising partners allow you to opt out of receiving ads based on your
+ web browsing history, please visit https://www.youronlinechoices.eu.
+ Users in the United States should please visit http://optout.aboutads.info/.
+
+
+
+
+
Any Cookies that are utilized will not contain personally identifying information such as your email
+ address and they do not track your activity outside of our websites.
+
Information collected on social media or blogs: We may collect information on our blog via our
+ websites or through our social media accounts, including but not limited to Facebook, Reddit and Twitter. Any
+ communication you provide to us on external social media accounts is done at your own risk and without guarantee
+ of privacy. If you post a comment on one of our blogs or websites, please contact us if you want it deleted.
+
External links: Our Services may contain links to other websites or other services of interest.
+ We are not responsible for the content or material on any website that we link to, as these external sites and
+ services are governed by their own terms and privacy policies.
+
Bandwidth utilized & free versions
+
We measure the amount of bandwidth utilized by users of the Services. Free versions may have a limited data
+ transfer amount. Subscribers that paid for Services will be provided with unlimited data transfer. The total sum
+ of data transferred is not identifiable for a user's behavior. We measure bandwidth utilized in order to improve
+ our services. We do not log any data sent over the connections.
+
Combination and further use of data
+
We combine the data we collect about you and use this information for various purposes, including to:
+
+
provide and improve our products and services;
+
process your transactions;
+
send you technical notices and support and administrative messages;
+
communicate with you about products, services, promotions, events and other news and information we think
+ will be of interest to you;
+
+
personalize our Services, including by providing content or features we think will be of interest to you;
+
+
facilitate contests and promotions and process and deliver prizes;
+
monitor and analyze trends and usage in connection with our Services;
+
detect and prevent fraudulent transactions and other illegal activities, comply with our legal obligations
+ and protect the rights and property of Privado and others; and
+
+
carry out any other purpose described to you at the time the information was collected.
+
+
Disclosure of data
+
We only disclose the limited data we have on record (i.e., email address & username) when compelled by the Swiss
+ authorities. Data requests from foreign authorities must be approved by the Swiss authorities.
+
We are unable to supply any information for requests related to a PrivadoVPN
+ user's browsing history, traffic destination, data content, IP addresses, or DNS queries. This information does
+ not exist.
+
Right to access, rectification, object, portability and erasure
+
You can directly access, delete, edit or export personal data processed by us in your use of the Services or
+ object to our processing of your data. You can also email our support team at support@privado.io to make a request.
+
Data retention
+
We store the data we collect about you for as long as necessary for the purposes for which we originally
+ collected it. We may retain certain information for legitimate business purposes or as required by the laws of
+ Switzerland. The data is stored in Switzerland and the EU.
+
Data security
+
Data security is a core pillar of our business. Our infrastructure and secure servers are contained in fully
+ locked and 24-7 monitored data facilities that are best in class.
+
Even if a regulatory authority physically seizes a PrivadoVPN server (assuming it could break the disk
+ encryption) there would be no logs or information that could be tied an individual user.
+
Changes to this Policy
+
We reserve the right to review and change this Policy at any time. We will notify users about any such
+ changes. Continued use of our Services will be deemed as acceptance of such changes.
+
+
+
diff --git a/iOS/Assets/index1.html b/iOS/Assets/terms-of-service.html
similarity index 100%
rename from iOS/Assets/index1.html
rename to iOS/Assets/terms-of-service.html
diff --git a/iOS/Privado/Info.plist b/iOS/Privado/Info.plist
index ac97591..1eaf504 100644
--- a/iOS/Privado/Info.plist
+++ b/iOS/Privado/Info.plist
@@ -34,7 +34,7 @@
LSRequiresIPhoneOSPRIVADO_BUILD_TIMESTAMP
- 2021-07-09
+ 2021-07-15UIAppFontsSF-Pro-Text-Semibold.otf
diff --git a/iOS/Privado/Sources/Common/Comet/Loggers/AppCenterLogger.swift b/iOS/Privado/Sources/Common/Comet/Loggers/AppCenterLogger.swift
index 60d3f04..363f66c 100644
--- a/iOS/Privado/Sources/Common/Comet/Loggers/AppCenterLogger.swift
+++ b/iOS/Privado/Sources/Common/Comet/Loggers/AppCenterLogger.swift
@@ -14,15 +14,7 @@ import AppCenterCrashes
final class AppCenterLogger: EventCometLoggerProtocol {
init() {
- #if os(macOS)
- #if INTERNAL
- MSAppCenter.start("430b7e48-a17b-475a-89e6-0f2d0ffb5e43", withServices: [MSAnalytics.self, MSCrashes.self])
- #else
- MSAppCenter.start("85703fa1-c9fc-4f84-9373-605c11f310bf", withServices: [MSAnalytics.self, MSCrashes.self])
- #endif
- #else
- MSAppCenter.start("ebaa632a-cee6-462b-a321-bb086b5e4cef", withServices: [MSAnalytics.self, MSCrashes.self])
- #endif
+ AppCenter.start(withAppSecret: "ebaa632a-cee6-462b-a321-bb086b5e4cef", services: [Analytics.self, Crashes.self])
}
func event(name: String, attributes: [String: Any], secured: [String: Any]?) {
@@ -47,7 +39,7 @@ final class AppCenterLogger: EventCometLoggerProtocol {
guard let event = eventName else { return }
- MSAnalytics.trackEvent(event,
+ Analytics.trackEvent(event,
withProperties: attributes.mapValues({ value -> String in String(describing: value) }))
}
diff --git a/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/PrivacyPolicy/View/PrivacyPolicyViewForm.swift b/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/PrivacyPolicy/View/PrivacyPolicyViewForm.swift
index 493dacb..ad89e27 100644
--- a/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/PrivacyPolicy/View/PrivacyPolicyViewForm.swift
+++ b/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/PrivacyPolicy/View/PrivacyPolicyViewForm.swift
@@ -61,7 +61,7 @@ final class PrivacyPolicyViewForm: UIView {
self.webview.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0)
])
- let url = Bundle.main.url(forResource: "index", withExtension: "html")
+ let url = Bundle.main.url(forResource: "privacy-policy", withExtension: "html")
self.webview.load(URLRequest(url: url!))
self.webview.navigationDelegate = self
self.webview.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0)
diff --git a/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/Terms/View/TermsOfServiceViewForm.swift b/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/Terms/View/TermsOfServiceViewForm.swift
index 17fc8c5..405a98b 100644
--- a/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/Terms/View/TermsOfServiceViewForm.swift
+++ b/iOS/Privado/Sources/Flows/PreferenceFlow/Submodule/UserAccount/Terms/View/TermsOfServiceViewForm.swift
@@ -61,7 +61,7 @@ final class TermsOfServiceViewForm: UIView {
self.webview.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0)
])
- let url = Bundle.main.url(forResource: "index1", withExtension: "html")
+ let url = Bundle.main.url(forResource: "terms-of-service", withExtension: "html")
self.webview.load(URLRequest(url: url!))
self.webview.navigationDelegate = self
self.webview.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0)
diff --git a/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/Presenter/ServerListPresenter.swift b/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/Presenter/ServerListPresenter.swift
index 3c6a201..7017712 100644
--- a/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/Presenter/ServerListPresenter.swift
+++ b/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/Presenter/ServerListPresenter.swift
@@ -130,18 +130,22 @@ final class ServerListPresenter {
@discardableResult
private func calculateBestRecord(for records: [ServerLocationRecord]?, current location: GeoLocation?) -> ServerLocationRecord? {
- #if os(iOS)
if let vpn = Session.shared().currentVPN, vpn.state == .connected {
if let bestLocation = Session.shared().bestLocation {
return bestLocation
}
}
- #endif
+
+ guard let records = records else { return nil }
+
+ if let bestLatencyRecord = self.getBestLatencyRecord(from: records) {
+ Session.shared().bestLocation = bestLatencyRecord
+ return bestLatencyRecord
+ }
typealias BestRecord = (ServerLocationRecord?, Haversine.Distance)
- guard let records = records
- , let location = location
+ guard let location = location
, let latitude = Double(location.lat)
, let longitude = Double(location.long) else { return nil }
@@ -162,13 +166,26 @@ final class ServerListPresenter {
}
- #if os(iOS)
Session.shared().bestLocation = bestRecord.0
- #endif
return bestRecord.0
}
+ private func getBestLatencyRecord(from records: [ServerLocationRecord]) -> ServerLocationRecord? {
+ records.reduce(into: nil) { (result, record) in
+ guard let city = record.city, let latency = self.cityLatencyBest[city] else {
+ return
+ }
+ guard let resultCity = result?.city, let resultLatency = self.cityLatencyBest[resultCity] else {
+ result = record
+ return
+ }
+ if latency < resultLatency {
+ result = record
+ }
+ }
+ }
+
private func searchRecord(for server: Server, in records: [ServerLocationRecord]?) -> ServerLocationRecord? {
guard let records = records else { return nil }
return records.first(where: { $0.servers?.contains(server) ?? false })
@@ -286,16 +303,16 @@ final class ServerListPresenter {
self.updateServerRecords()
self.pingServers(of: self.serverRecords) { [weak self] in
+
+ // Update GEO
+ self?.output?.current(location: result.geoLocation)
+
self?.viewInput?.reload(collapsing: false)
+ self?.preselectServer(with: result.geoLocation)
+ self?.updateView(isBest: false)
+
+ self?.connectToSelectedIfNeeded()
}
-
- // Update GEO
- self.output?.current(location: result.geoLocation)
-
- self.preselectServer(with: result.geoLocation)
- self.updateView(isBest: false)
-
- self.connectToSelectedIfNeeded()
}
private func preselectServer(with geoLocation: GeoLocation?) {
@@ -324,6 +341,10 @@ final class ServerListPresenter {
self.selectedRecord = self.bestRecord
}
+ if !self.selectedRecord.isExist {
+ self.selectedRecord = self.connectableRecords?.filter { $0.city.isExist }.first
+ }
+
let country = self.selectedRecord?.country ?? "null"
let city = self.selectedRecord?.city ?? "null"
diff --git a/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/View/Subviews/ServerLocationCell.swift b/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/View/Subviews/ServerLocationCell.swift
index a2c5420..b608898 100644
--- a/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/View/Subviews/ServerLocationCell.swift
+++ b/iOS/Privado/Sources/Flows/ServersFlow/Submodules/List/View/Subviews/ServerLocationCell.swift
@@ -29,7 +29,7 @@ class ServerLocationCell: UITableViewCell {
static let pinImageHeight: CGFloat = 25
static let pinImageWidth: CGFloat = 18
static let latencyImageRight: CGFloat = 82
- static let latencyImageSize: CGFloat = 22
+ static let latencyImageSize = CGSize(width: 14, height: 12)
static let imagePinLocation = "pinLocation"
static let imageBestLocation = "bestLocation"
@@ -278,8 +278,8 @@ extension ServerLocationCell {
self.addSubview(self.latencyImageView)
self.latencyImageView.isHidden = true
NSLayoutConstraint.activate([
- self.latencyImageView.widthAnchor.constraint(equalToConstant: Constants.latencyImageSize),
- self.latencyImageView.heightAnchor.constraint(equalToConstant: Constants.latencyImageSize),
+ self.latencyImageView.widthAnchor.constraint(equalToConstant: Constants.latencyImageSize.width),
+ self.latencyImageView.heightAnchor.constraint(equalToConstant: Constants.latencyImageSize.height),
self.latencyImageView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
self.latencyImageView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -Constants.latencyImageRight)
])
diff --git a/iOS/project-sym.yml b/iOS/project-sym.yml
index 2dba1c7..7a57075 100644
--- a/iOS/project-sym.yml
+++ b/iOS/project-sym.yml
@@ -20,10 +20,10 @@ packages:
majorVersion: 5.2.2
AppCenterAnalytics:
url: https://github.com/microsoft/appcenter-sdk-apple.git
- majorVersion: 3.3.4
+ majorVersion: 4.2.0
AppCenterCrashes:
url: https://github.com/microsoft/appcenter-sdk-apple.git
- majorVersion: 3.3.4
+ majorVersion: 4.2.0
targets:
diff --git a/iOS/project.yml b/iOS/project.yml
index f3462e5..7794645 100644
--- a/iOS/project.yml
+++ b/iOS/project.yml
@@ -20,10 +20,10 @@ packages:
majorVersion: 5.2.2
AppCenterAnalytics:
url: https://github.com/microsoft/appcenter-sdk-apple.git
- majorVersion: 3.3.4
+ majorVersion: 4.2.0
AppCenterCrashes:
url: https://github.com/microsoft/appcenter-sdk-apple.git
- majorVersion: 3.3.4
+ majorVersion: 4.2.0
targets: