From a42b88b6666e702ae28065efce22540758014e0d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 5 Jan 2024 11:37:30 +0100
Subject: [PATCH 01/10] Autosync the updated translations (#2929)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
---
src/App/Resources/AppResources.hi.resx | 374 +++++++++---------
src/App/Resources/AppResources.pt-PT.resx | 2 +-
src/App/Resources/AppResources.ru.resx | 6 +-
src/App/Resources/AppResources.zh-Hans.resx | 10 +-
.../Localization/hi.lproj/Localizable.strings | 4 +-
5 files changed, 198 insertions(+), 198 deletions(-)
diff --git a/src/App/Resources/AppResources.hi.resx b/src/App/Resources/AppResources.hi.resx
index c05c99a84..977063eae 100644
--- a/src/App/Resources/AppResources.hi.resx
+++ b/src/App/Resources/AppResources.hi.resx
@@ -385,10 +385,10 @@
मास्टर पासवर्ड दें
- पिन दें
+ पिन वेरिफिकेशन करें
- संस्करण
+ वर्ज़न
देखें
@@ -556,7 +556,7 @@
लॉगआउट करने के बाद तिजोरी में जाना मुमकिन नहीं होगा और टाइमआउट के बाद ऑनलाइन ऑथेंटिकेशन की ज़रूरत होगी। इस सेटिंग का इस्तेमाल करें?
- लॉगइन कर रहे है...
+ लॉगइन कर रहे...
Message shown when interacting with the server
@@ -894,13 +894,13 @@
कैमरा क्यूआर कोड के तरफ करें। स्कैन अपनेआप होगा।
- क्यूआर कोड को स्कैन करें
+ क्यूआर कोड स्कैन करें
कैमरा
- फोटों
+ फोटो
टीओटीपी कॉपी करें
@@ -1188,7 +1188,7 @@
फेस आईडी वेरिफाइ करें
- विंडोज़ हैल्लो
+ विंडोज़ हैलो
हम एंड्रॉइड ऑटोफिल सेटिंग अपनेआप नहीं खोल पा रहे। ऑटोफिल सेटिंग में जाने के लिए एंड्रॉइड सेटिंग > सिस्टम > भाषा और इंपुट > एडवांस > ऑटोफिल सर्विस पर जाएं।
@@ -1248,24 +1248,24 @@
युआरआई मैच डिटेक्शन
- Match detection
+ मैच डिटेक्शन
URI match detection for auto-fill.
- Yes, and save
+ हां, और सेव करें
Auto-fill and save
- संगठन
+ ग्रुप
An entity of multiple related people (ex. a team or business organization).
Hold your Yubikey near the top of the device.
- पुनः कोशिश करें
+ वापस कोशिश करें
To continue, hold your YubiKey NEO against the back of the device.
@@ -1274,7 +1274,7 @@
The accessibility service may be helpful to use when apps do not support the standard auto-fill service.
- Password updated
+ पासवर्ड अपडेट किया गया
ex. Date this password was updated
@@ -1297,49 +1297,49 @@
Access your vault directly from your keyboard to quickly autofill passwords.
- To set up password auto-fill on your device, follow these instructions:
+ अपने डिवाइस पर पासवर्ड ऑटो-फिल सेट करने के लिए इन स्टेप को फॉलो करें:
- 1. Go to the iOS "Settings" app
+ 1. आईओएस के "सेटिंग" ऐप में जाएं
- 2. Tap "Passwords"
+ 2. "पासवर्ड" पर टैप करें
- 3. Tap "AutoFill Passwords"
+ 3. "पासवर्ड ऑटोफिल करें" पर टैप करें
- 4. Turn on AutoFill
+ 4. ऑटोफिल ऑन करें
- 5. Select "Bitwarden"
+ 5. "बिटवार्डन" चुनें
- Password auto-fill
+ पासवर्ड ऑटो-फिल
The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the "Settings" screen.
- Invalid email address.
+ गलत ईमेल पता।
- पत्ते
+ कार्ड
- पहचान
+ आईडी
- लॉग इन
+ लॉगइन
- सुरक्षित नोट
+ सेक्योर नोट
- सभी आइटम
+ सारे आइटम
- URIs
+ यूआरआई
Plural form of a URI
@@ -1356,16 +1356,16 @@
This password was not found in any known data breaches. It should be safe to use.
- Identity name
+ आईडी का नाम
- मूल्य
+ वैल्यू
पासवर्ड इतिहास
- प्रकार
+ टाइप
No passwords to list.
@@ -1383,32 +1383,32 @@
Search text Sends
- Search {0}
+ {0} सर्च करें
ex: Search Logins
- प्रकार
+ टाइप
- नीचे ले जाएँ
+ नीचे ले जाएं
- ऊपर ले जाएँ
+ ऊपर ले जाएं
- विविध
+ बाकी
- Ownership
+ मालिकी
- Who owns this item?
+ इस आइटम का मालिक कौन है?
There are no collections to list.
- {0} moved to {1}.
+ {0} {1} पर ट्रांस्फर किया गया।
ex: Item moved to Organization.
@@ -1421,7 +1421,7 @@
शेयर करें
- Share Item
+ आइटम शेयर करें
Move to Organization
@@ -1433,27 +1433,27 @@
Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved.
- Number of words
+ टोटल शब्द
- Passphrase
+ पासफ्रेज़
- Word separator
+ वर्ड सेपरेटर
- स्पष्ट
+ साफ करें
To clear something out. example: To clear browser history.
- Generator
+ जेनरेटर
Short for "Password Generator"
There are no folders to list.
- Fingerprint phrase
+ फिंगरप्रिंट फ्रेज़
A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.
@@ -1464,22 +1464,22 @@
Bitwarden allows you to share your vault items with others by using an organization account. Would you like to visit the bitwarden.com website to learn more?
- निर्यात तिजोरी
+ तिजोरी एक्सपोर्ट करें
- अब ताला
+ अभी लॉक करें
पिन
- अनलॉक
+ खोलें
- Unlock vault
+ तिजोरी खोलें
- 30 मिनिट
+ 30 मिनट
Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application.
@@ -1498,7 +1498,7 @@
Your vault is locked. Verify your identity to continue.
- अँधेरा
+ अंधेरा
A dark color
@@ -1515,13 +1515,13 @@
30 सेकंड
- 30 सेकंड
+ 20 सेकंड
2 मिनट
- क्लिपबोर्ड साझा करें
+ क्लिपबोर्ड साफ करें
Clipboard is the operating system thing where you copy/paste data to on your device.
@@ -1540,25 +1540,25 @@
Color theme
- Change the application's color theme.
+ ऐप का थीम बदलें।
- Default (System)
+ डिफॉल्ट (सिस्टम)
- Default dark theme
+ डिफॉल्ट डार्क थीम
नोट कॉपी करें
- निकास
+ निकलें
- Are you sure you want to exit Bitwarden?
+ पक्का निकलें?
- एप्लीकेशन पुनर्प्रारंभ करते समय मास्टर पासवर्ड पूछे?
+ ऐप रीस्टार्ट करने पर मास्टर पासवर्ड पूछें?
काला
@@ -1569,7 +1569,7 @@
'Nord' is the name of a specific color scheme. It should not be translated.
- Solarized Dark
+ सोलराइज़्ड डार्क
'Solarized Dark' is the name of a specific color scheme. It should not be translated.
@@ -1582,7 +1582,7 @@
Ask to add an item if one isn't found in your vault.
- On app restart
+ ऐप रिस्टार्ट पर
Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the "Settings" screen.
@@ -1598,10 +1598,10 @@
नंबर शामिल करें
- डाउन्लोड
+ डाउनलोड करें
- साझा किया गया
+ शेयर किया गया
दृश्यता बदलें
@@ -1613,7 +1613,7 @@
बायोमेट्रिक सत्यापन
- बॉयोमेट्रिक्स
+ बायोमेट्रिक
Use biometrics to unlock
@@ -1625,7 +1625,7 @@
3. On the Android App Settings screen for Bitwarden, go to the "Display over other apps" options (under Advanced) and tap the toggle to allow overlay support.
- अनुमति
+ परमिशन
Open Overlay Permission Settings
@@ -1634,13 +1634,13 @@
3. On the Android App Settings screen for Bitwarden, select "Display over other apps" (under "Advanced") and switch on the toggle to allow the overlay.
- अस्वीकृत
+ मना किया गया
- प्रदान की गई
+ दिया गया
- फाइल प्रारुप
+ फाइल फॉर्मेट
अपने कोष्ठ डेटा निर्यात करने के लिए अपना मास्टर पासवर्ड दर्ज करें।
@@ -1649,7 +1649,7 @@
Send a verification code to your email
- Code sent!
+ कोड भेजा गया!
Confirm your identity to continue.
@@ -1668,7 +1668,7 @@
Title for the alert to confirm vault exports.
- चेतावनी
+ खबरदार
There was a problem exporting your vault. If the problem persists, you'll need to export from the web vault.
@@ -1677,14 +1677,14 @@
Vault exported successfully
- क्लोन
+ क्लोन बनाएं
Clone an entity (verb).
One or more organization policies are affecting your generator settings
- खुला
+ खोलें
Button text for an open operation (verb).
@@ -1704,27 +1704,27 @@
Message shown when interacting with the server
- Item has been sent to trash.
+ आइटम कचरे में डाला गया।
Confirmation message after successfully soft-deleting a login
- पुनः वापस लायें
+ रिस्टोर करें
Restores an entity (verb).
- Restoring...
+ रिस्टोर कर रहे...
Message shown when interacting with the server
- Item restored
+ आइटम रिस्टोर किया गया
Confirmation message after successfully restoring a soft-deleted item
- ट्रैश
+ कचरा
(noun) Location of deleted items which have not yet been permanently deleted
- Search trash
+ कचरा सर्च करें
(action prompt) Label for the search text field when viewing the trash folder
@@ -1732,27 +1732,27 @@
Confirmation alert message when permanently deleteing a cipher.
- Do you really want to restore this item?
+ ये आइटम रिस्टोर करें?
Confirmation alert message when restoring a soft-deleted cipher.
- Do you really want to send to the trash?
+ कचरे में डालें?
Confirmation alert message when soft-deleting a cipher.
- Biometric unlock for this account is disabled pending verification of master password.
+ मास्टर पासवर्ड का वेरिफिकेशन खत्म ना होने तक इस अकाउंट के लिए बायोमेट्रिक बंद है।
- Autofill biometric unlock for this account is disabled pending verification of master password.
+ मास्टर पासवर्ड का वेरिफिकेशन खत्म ना होने तक इस अकाउंट के लिए बायोमेट्रिक ऑटोफिल बंद है।
- Allow sync on refresh
+ रिफ्रेश पर सिंक करने दें
Syncing vault with pull down gesture.
- Enterprise single sign-on
+ बिज़नेस सिंगल साइन-ऑन
Quickly log in using your organization's single sign-on portal. Please enter your organization's identifier to begin.
@@ -1764,7 +1764,7 @@
Currently unable to login with SSO
- Set master password
+ मास्टर पासवर्ड सेट करें
In order to complete logging in with SSO, please set a master password to access and protect your vault.
@@ -1776,7 +1776,7 @@
Minimum complexity score of {0}
- Minimum length of {0}
+ कम-से-कम लंबाई {0}
Contain one or more uppercase characters
@@ -1797,20 +1797,20 @@
Password does not meet organization requirements. Please check the policy information and try again.
- लोड रहा है...
+ लोड हो रहा है
By activating this switch you agree to the following:
- Terms of Service and Privacy Policy have not been acknowledged.
+ सेवा की शर्ते और प्राइवसी पॉलिसी माने नहीं गए हैं।
- Terms of Service
+ सेवा की शर्ते
- Privacy Policy
+ प्राइवसी पॉलिसी
Bitwarden needs attention - Turn on "Draw-Over" in "Auto-fill Services" from Bitwarden Settings
@@ -1840,7 +1840,7 @@
Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on).
- Use draw-over
+ ड्रॉ-ओवर इस्तेमाल करें
Allows the Bitwarden Accessibility Service to display a popup when login fields are selected.
@@ -1862,11 +1862,11 @@
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- All Sends
+ सारे सेंड
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- सेंड्स
+ सेंड
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
@@ -1905,10 +1905,10 @@
Text type is not selected, tap to select.
- Deletion date
+ हटाने की तारीख
- Deletion time
+ हटाने का टाइम
The Send will be permanently deleted on the specified date and time.
@@ -1918,7 +1918,7 @@
Pending deletion
- Expiration date
+ एक्सपायरी डेट
Expiration time
@@ -1928,7 +1928,7 @@
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Expired
+ एक्सपायर हो गया
Maximum access count
@@ -1944,14 +1944,14 @@
Current access count
- New password
+ नया पासवर्ड
Optionally require a password for users to access this Send.
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Remove password
+ पासवर्ड हटाएं
Are you sure you want to remove the password?
@@ -1975,29 +1975,29 @@
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Add a Send
+ सेंड डालें
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Copy link
+ लिंक कॉपी करें
- Share link
+ लिंक शेयर करें
- Send link
+ लिंक सेंड करें
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Search Sends
+ सेंड सर्च करें
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Edit Send
+ सेंड बदलें
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- New Send
+ नया सेंड
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
@@ -2005,15 +2005,15 @@
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Send deleted
+ सेंड हटाया गया
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Send saved
+ सेंड सेव किया गया
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- Send created
+ सेंड बनाया गया
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
@@ -2043,7 +2043,7 @@
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
- About Send
+ सेंड के बारे में
'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.
@@ -2071,7 +2071,7 @@
This action is protected, to continue please re-enter your master password to verify your identity.
- Captcha required
+ कैप्चा चाहिए
Captcha failed. Please try again.
@@ -2104,10 +2104,10 @@
Leave organization
- Leave {0}?
+ {0} छोड़ें?
- FIDO2 WebAuthn
+ एफआईडीओ2 वेब ऑथेंटिकेशन
To continue, have your FIDO2 WebAuthn compatible security key ready, then follow the instructions after clicking 'Authenticate WebAuthn' on the next screen.
@@ -2119,7 +2119,7 @@
Authenticate WebAuthn
- Return to app
+ ऐप पर वापस जाएं
Please make sure your default browser supports WebAuthn and try again.
@@ -2143,22 +2143,22 @@
One or more organization policies prevents your from exporting your individual vault.
- Add account
+ अकाउंट डालें
- Unlocked
+ खुला हुआ
बंद
- Logged out
+ लॉगआउट हो गए
Switched to next available account
- Account locked
+ अकाउंट लॉक हुआ
Account logged out successfully
@@ -2167,7 +2167,7 @@
Account removed successfully
- Delete account
+ अकाउंट डिलीट करें
Deleting your account is permanent
@@ -2188,7 +2188,7 @@
Request one-time password
- Send code
+ कोड भेजें
भेज रहे
@@ -2197,13 +2197,13 @@
Copy Send link on save
- Sending code
+ कोड भेज रहे
- Verifying
+ वेरिफिकेशन चल रहा
- Resend code
+ कोड वापस भेजें
A verification code was sent to your email
@@ -2215,7 +2215,7 @@
Enter the verification code that was sent to your email
- Submit crash logs
+ क्रैश लॉग भेजें
Help Bitwarden improve app stability by submitting crash reports.
@@ -2233,13 +2233,13 @@
Lowercase (A to Z)
- Numbers (0 to 9)
+ नंबर (0 से 9)
- Special characters (!@#$%^&*)
+ खास कैरक्टर (!@#$%^&*)
- Tap to go back
+ वापस जाने के लिए टैप करें
Password is visible, tap to hide.
@@ -2251,16 +2251,16 @@
Filter items by vault
- All vaults
+ सारे तिजोरी
तिजोरी
- Vault: {0}
+ तिजोरी: {0}
- सब
+ सारे
टीओटीपी
@@ -2275,10 +2275,10 @@
Cannot add authenticator key?
- Scan QR Code
+ क्यूआर कोड स्कैन करें
- Cannot scan QR Code?
+ क्यूआर कोड स्कैन नहीं हो रहा?
Authenticator key
@@ -2287,10 +2287,10 @@
Enter key manually
- Add TOTP
+ टीओटीपी जोड़ें
- Set up TOTP
+ टीओटीपी सेट करें
Once the key is successfully entered,
@@ -2306,7 +2306,7 @@ select Add TOTP to store the key safely
We were unable to process your request. Please try again or contact us.
- Allow screen capture
+ स्क्रीनशॉट लेने दें
Are you sure you want to turn on screen capture?
@@ -2321,25 +2321,25 @@ select Add TOTP to store the key safely
Login attempt by {0} on {1}
- Device type
+ डिवाइस टाइप
- IP address
+ आईपी पता
- समय
+ टाइम
- पास
+ लोकेशन:
- Confirm login
+ लॉगइन कंफर्म करें
- Deny login
+ लॉगइन ना करने दें
- Just now
+ अभी-अभी
{0} minutes ago
@@ -2348,7 +2348,7 @@ select Add TOTP to store the key safely
Login confirmed
- Login denied
+ लॉगइन करने से रोका गया
लॉगइन मांग माने
@@ -2363,7 +2363,7 @@ select Add TOTP to store the key safely
नए लॉगइन मांग के लिए पुश सूचना लें
- ना, शुक्रिया
+ ना, रहने दें
{0} के लिए लॉगइन कोशिश पक्का करें
@@ -2372,13 +2372,13 @@ select Add TOTP to store the key safely
सारे सूचनाएं
- पासवर्ड प्रकार
+ पासवर्ड टाइप
क्या बनाएं?
- यूज़रनाम प्रकार
+ यूज़रनेम टाइप
प्लस पता किया गया ईमेल
@@ -2390,7 +2390,7 @@ select Add TOTP to store the key safely
ईमेल नकलीनाम फॉरवर्ड किया गया
- बेतरतीब शब्द
+ रैंडम शब्द
ईमेल (ज़रूरी)
@@ -2402,7 +2402,7 @@ select Add TOTP to store the key safely
एपीआई चाबी (ज़रूरी)
- सेवा
+ सर्विस
addy.io
@@ -2425,7 +2425,7 @@ select Add TOTP to store the key safely
"Fastmail" is the product name and should not be translated.
- ForwardEmail
+ फॉरवर्डईमेल
"ForwardEmail" is the product name and should not be translated.
@@ -2456,7 +2456,7 @@ select Add TOTP to store the key safely
बाहरी फॉरवर्ड सेवा से ईमेल नकलीनाम बनाएं।
- बेतरतीब
+ रैंडम
घड़ी से जुड़े
@@ -2471,7 +2471,7 @@ select Add TOTP to store the key safely
मानें
- नकारें
+ मना करें
Login request has already expired.
@@ -2482,7 +2482,7 @@ select Add TOTP to store the key safely
Do you want to switch to this account?
- New around here?
+ यहां पर नए हैं?
Get master password hint
@@ -2491,7 +2491,7 @@ Do you want to switch to this account?
Logging in as {0} on {1}
- Not you?
+ वो आप नहीं थे?
Log in with master password
@@ -2602,16 +2602,16 @@ Do you want to switch to this account?
कोई भी चीज़ खोज शब्द से मेल नहीं खाता
- अमेरिकी संयुक्त राज्य
+ यूएस
- यूरोपीय संघ
+ ईयू
- खुद-होस्ट
+ सेल्फ-होस्ट
- डाटा इलाका
+ डाटा लोकेशन
इलाका
@@ -2623,7 +2623,7 @@ Do you want to switch to this account?
चालू मुख्य पासवर्ड
- Logged in!
+ लॉगइन हो गए!
Approve with my other device
@@ -2638,16 +2638,16 @@ Do you want to switch to this account?
Turn off using a public device
- Remember this device
+ इस डिवाइस को याद रखें
- Passkey
+ पासकी
- Passkeys
+ पासकी
- Application
+ ऐप
You cannot edit passkey application because it would invalidate the passkey
@@ -2671,10 +2671,10 @@ Do you want to switch to this account?
Unlocking may fail due to insufficient memory. Decrease your KDF memory settings or set up biometric unlock to resolve.
- Invalid API key
+ गलत एपीआई चाबी
- Invalid API token
+ गलत एपीआई टोकन
Admin approval requested
@@ -2704,29 +2704,29 @@ Do you want to switch to this account?
New blocked URI
- URI saved
+ यूआरआई सेव किया
Invalid format. Use https://, http://, or androidapp://
https://, http://, androidapp:// should not be translated
- Edit URI
+ यूआरआई बदलें
- Enter URI
+ यूआरआई डालें
Format: {0}. Separate multiple URIs with a comma.
- Format: {0}
+ फॉर्मेट: {0}
- Invalid URI
+ गलत यूआरआई
- URI removed
+ यूआरआई हटाया गया
There are no blocked URIs
@@ -2738,7 +2738,7 @@ Do you want to switch to this account?
Cannot edit multiple URIs at once
- Login approved
+ लॉगइन का परमिशन मिला
Log in with device must be set up in the settings of the Bitwarden app. Need another option?
@@ -2747,19 +2747,19 @@ Do you want to switch to this account?
Log in with device
- Logging in on
+ यहां लॉगइन कर रहे
- Vault
+ तिजोरी
- Appearance
+ दिखावट
Account security
- Bitwarden Help Center
+ बिटवार्डन हेल्प सेंटर
Contact Bitwarden support
@@ -2768,10 +2768,10 @@ Do you want to switch to this account?
Copy app information
- Sync now
+ अभी सिंक करें
- Unlock options
+ खोलने के तरीके
Session timeout
@@ -2784,19 +2784,19 @@ Do you want to switch to this account?
A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing.
- One hour and one minute
+ एक घंटा और एक मिनट
- One hour and {0} minutes
+ एक घंटा और {0} मिनट
- {0} hours and one minute
+ {0} घंटे और एक मिनट
- {0} hours and {1} minutes
+ {0} घंटे और {1} मिनट
- {0} hours
+ {0} घंटे
The Android Autofill Framework is used to assist in filling login information into other apps on your device.
@@ -2808,10 +2808,10 @@ Do you want to switch to this account?
Additional options
- Continue to web app?
+ वेब ऐप पर जाएं?
- Continue to {0}?
+ {0} पर जाएं?
The parameter is an URL, like bitwarden.com.
@@ -2824,17 +2824,17 @@ Do you want to switch to this account?
Continue to app store?
- Make your account more secure by setting up two-step login in the Bitwarden web app.
+ बिटवार्डन वेब ऐप में टू-स्टेप लॉगइन सेट करके अपने अकाउंट को ज़्यादा सेक्योर बनाएं।
- You can change your master password on the Bitwarden web app.
+ बिटवार्डन वेब ऐप में अपना मास्टर पासवर्ड आसानी से बदलें।
- You can import data to your vault on {0}.
+ {0} पर अपने तिजोरी में आसानी से डाटा इंपोर्ट करें।
The parameter is an URL, like vault.bitwarden.com.
- Learn more about how to use Bitwarden on the Help center.
+ बिटवार्डन को बेहतर तरीके से इस्तेमाल करने के लिए हमारे हेल्प सेंटर पर जाएं।
Can’t find what you are looking for? Reach out to Bitwarden support on bitwarden.com.
@@ -2852,7 +2852,7 @@ Do you want to switch to this account?
Choose the dark theme to use when your device’s dark mode is in use
- Created {0}, {1}
+ {0}, {1} पर बनाया गया
To state the date/time in which the cipher was created: Created 03/21/2023, 09:25 AM. First parameter is the date and the second parameter is the time.
diff --git a/src/App/Resources/AppResources.pt-PT.resx b/src/App/Resources/AppResources.pt-PT.resx
index bcd1c77cb..e853eb399 100644
--- a/src/App/Resources/AppResources.pt-PT.resx
+++ b/src/App/Resources/AppResources.pt-PT.resx
@@ -885,7 +885,7 @@
Totp code label
- Chave de autenticador adicionada.
+ Chave de autenticação adicionada.
Não é possível ler a chave de autenticação.
diff --git a/src/App/Resources/AppResources.ru.resx b/src/App/Resources/AppResources.ru.resx
index 1ccd10664..6a3822249 100644
--- a/src/App/Resources/AppResources.ru.resx
+++ b/src/App/Resources/AppResources.ru.resx
@@ -885,10 +885,10 @@
Totp code label
- Ключ проверки подлинности добавлен.
+ Ключ аутентификатора добавлен.
- Не удается прочитать ключ проверки подлинности.
+ Не удается прочитать ключ аутентификатора.
Наведите камеру на QR-код.
@@ -2272,7 +2272,7 @@
Требуется подписка Премиум
- Не удается добавить ключ проверки подлинности?
+ Не удается добавить ключ аутентификатора?
Сканировать QR-код
diff --git a/src/App/Resources/AppResources.zh-Hans.resx b/src/App/Resources/AppResources.zh-Hans.resx
index 00b6e76c4..0fa4bbbf9 100644
--- a/src/App/Resources/AppResources.zh-Hans.resx
+++ b/src/App/Resources/AppResources.zh-Hans.resx
@@ -885,17 +885,17 @@
Totp code label
- 验证器密钥已添加。
+ 已添加验证器密钥。
无法读取验证器密钥。
- 将您的摄像头对准 QR 码。
+ 将您的摄像头对准二维码。
扫描将自动完成。
- 扫描 QR 码
+ 扫描二维码
相机
@@ -2275,10 +2275,10 @@
无法添加验证器密钥?
- 扫描 QR 码
+ 扫描二维码
- 无法扫描 QR 码吗?
+ 无法扫描二维码吗?
验证器密钥
diff --git a/src/watchOS/bitwarden/bitwarden WatchKit Extension/Localization/hi.lproj/Localizable.strings b/src/watchOS/bitwarden/bitwarden WatchKit Extension/Localization/hi.lproj/Localizable.strings
index 9c752e53d..1c0adb770 100644
--- a/src/watchOS/bitwarden/bitwarden WatchKit Extension/Localization/hi.lproj/Localizable.strings
+++ b/src/watchOS/bitwarden/bitwarden WatchKit Extension/Localization/hi.lproj/Localizable.strings
@@ -5,6 +5,6 @@
"SyncingItemsContainingVerificationCodes" = "वेरीफिकेशन कोड वाले चीज़ें सिंक कर रहे";
"UnlockBitwardenOnYourIPhoneToViewVerificationCodes" = "वेरीफिकेशन कोड देखने के लिए अपने आईफोन पे बिटवार्डन खोलें";
"SetUpBitwardenToViewItemsContainingVerificationCodes" = "वेरीफिकेशन कोड वाले चीज़ें देखने के लिए बिटवार्डन सेट करें";
-"Search" = "खोजें";
-"NoItemsFound" = "कोई चीज़ नहीं मिला";
+"Search" = "सर्च करें";
+"NoItemsFound" = "कोई आइटम नहीं मिला";
"SetUpAppleWatchPasscodeInOrderToUseBitwarden" = "बिटवार्डन इस्तेमाल करने के लिए एप्पल वॉच पासकोड सेट करें";
From 0e95d4d4cac26f68c14d1d322a7b58f80df958c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bispo?=
Date: Tue, 9 Jan 2024 21:32:42 +0000
Subject: [PATCH 02/10] [PM-5542] Update sso endpoint (#2930)
---
src/Core/Services/ApiService.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Core/Services/ApiService.cs b/src/Core/Services/ApiService.cs
index 074c4b7cf..933ead56c 100644
--- a/src/Core/Services/ApiService.cs
+++ b/src/Core/Services/ApiService.cs
@@ -630,7 +630,7 @@ namespace Bit.Core.Services
public async Task PreValidateSsoAsync(string identifier)
{
- var path = "/account/prevalidate?domainHint=" + WebUtility.UrlEncode(identifier);
+ var path = "/sso/prevalidate?domainHint=" + WebUtility.UrlEncode(identifier);
using (var requestMessage = new HttpRequestMessage())
{
requestMessage.Version = new Version(1, 0);
From 5de02c863f3cc501eb9ec498302f72909436ab28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bispo?=
Date: Wed, 10 Jan 2024 17:02:54 +0000
Subject: [PATCH 03/10] [PM-5633] Ignore ArgumentOutOfRangeException to collect
more data about the crash (#2933)
---
.../CollectionView/ExtendedGroupableItemsViewController.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/iOS.Core/Renderers/CollectionView/ExtendedGroupableItemsViewController.cs b/src/iOS.Core/Renderers/CollectionView/ExtendedGroupableItemsViewController.cs
index 0933dc183..374ce21ce 100644
--- a/src/iOS.Core/Renderers/CollectionView/ExtendedGroupableItemsViewController.cs
+++ b/src/iOS.Core/Renderers/CollectionView/ExtendedGroupableItemsViewController.cs
@@ -38,10 +38,11 @@ namespace Bit.iOS.Core.Renderers.CollectionView
// Do nothing in here, this is temporary to get more info about the crash, if the logger fails, we want to get the info
// by crashing with the original exception and not the logger one
}
- if (ex is IndexOutOfRangeException)
+ if (ex is IndexOutOfRangeException || ex is ArgumentOutOfRangeException)
{
return;
}
+
throw colEx;
}
}
From e107b893ea7a9a0b6fcba7481af9e6f7e433e0ad Mon Sep 17 00:00:00 2001
From: Bitwarden DevOps
<106330231+bitwarden-devops-bot@users.noreply.github.com>
Date: Wed, 10 Jan 2024 12:30:04 -0500
Subject: [PATCH 04/10] Bumped version to 2024.1.1 (#2934)
---
src/Android/Properties/AndroidManifest.xml | 2 +-
src/iOS.Autofill/Info.plist | 2 +-
src/iOS.Extension/Info.plist | 2 +-
src/iOS.ShareExtension/Info.plist | 2 +-
src/iOS/Info.plist | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/Android/Properties/AndroidManifest.xml b/src/Android/Properties/AndroidManifest.xml
index e816b4bc9..9f2a89fb8 100644
--- a/src/Android/Properties/AndroidManifest.xml
+++ b/src/Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/src/iOS.Autofill/Info.plist b/src/iOS.Autofill/Info.plist
index e22e3d512..b5596ab1c 100644
--- a/src/iOS.Autofill/Info.plist
+++ b/src/iOS.Autofill/Info.plist
@@ -11,7 +11,7 @@
CFBundleIdentifier
com.8bit.bitwarden.autofill
CFBundleShortVersionString
- 2024.1.0
+ 2024.1.1
CFBundleVersion
1
CFBundleLocalizations
diff --git a/src/iOS.Extension/Info.plist b/src/iOS.Extension/Info.plist
index 1d56ec22d..ccb7c47e5 100644
--- a/src/iOS.Extension/Info.plist
+++ b/src/iOS.Extension/Info.plist
@@ -11,7 +11,7 @@
CFBundleIdentifier
com.8bit.bitwarden.find-login-action-extension
CFBundleShortVersionString
- 2024.1.0
+ 2024.1.1
CFBundleLocalizations
en
diff --git a/src/iOS.ShareExtension/Info.plist b/src/iOS.ShareExtension/Info.plist
index a5715607a..577133ce6 100644
--- a/src/iOS.ShareExtension/Info.plist
+++ b/src/iOS.ShareExtension/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
XPC!
CFBundleShortVersionString
- 2024.1.0
+ 2024.1.1
CFBundleVersion
1
MinimumOSVersion
diff --git a/src/iOS/Info.plist b/src/iOS/Info.plist
index cf0fe5084..da8dfd7d0 100644
--- a/src/iOS/Info.plist
+++ b/src/iOS/Info.plist
@@ -11,7 +11,7 @@
CFBundleIdentifier
com.8bit.bitwarden
CFBundleShortVersionString
- 2024.1.0
+ 2024.1.1
CFBundleVersion
1
CFBundleIconName
From d1e4e8645a1e7159d87459327a4ffb208e467ed0 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Wed, 10 Jan 2024 19:53:53 -0300
Subject: [PATCH 05/10] PM-3350 Updated MauiVersion to 8.0.4-nightly.* to have
the TapGestureRecognizer fix applied. This is done on the
Directory.Build.props so we don't have to change it on every csproj. Also
removed the workaround of TapGestureHack and fix the Show environment picker
to work on the extensions as well.
---
Directory.Build.props | 5 ++
src/Core/Pages/Accounts/HomePageViewModel.cs | 2 +-
...alProviderViewController.TapGestureHack.cs | 51 -------------------
.../CredentialProviderViewController.cs | 4 +-
src/iOS.Autofill/iOS.Autofill.csproj | 3 +-
5 files changed, 9 insertions(+), 56 deletions(-)
create mode 100644 Directory.Build.props
delete mode 100644 src/iOS.Autofill/CredentialProviderViewController.TapGestureHack.cs
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..bf789590a
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,5 @@
+
+
+ 8.0.4-nightly.*
+
+
\ No newline at end of file
diff --git a/src/Core/Pages/Accounts/HomePageViewModel.cs b/src/Core/Pages/Accounts/HomePageViewModel.cs
index 13686ee99..193c2bd85 100644
--- a/src/Core/Pages/Accounts/HomePageViewModel.cs
+++ b/src/Core/Pages/Accounts/HomePageViewModel.cs
@@ -165,7 +165,7 @@ namespace Bit.App.Pages
await MainThread.InvokeOnMainThreadAsync(async () =>
{
- var result = await Page.DisplayActionSheet(AppResources.LoggingInOn, AppResources.Cancel, null, options);
+ var result = await _deviceActionService.Value.DisplayActionSheetAsync(AppResources.LoggingInOn, AppResources.Cancel, null, options);
if (result is null || result == AppResources.Cancel)
{
diff --git a/src/iOS.Autofill/CredentialProviderViewController.TapGestureHack.cs b/src/iOS.Autofill/CredentialProviderViewController.TapGestureHack.cs
deleted file mode 100644
index b1330ce8d..000000000
--- a/src/iOS.Autofill/CredentialProviderViewController.TapGestureHack.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-#if ENABLED_TAP_GESTURE_RECOGNIZER_MAUI_EMBEDDED_WORKAROUND
-
-using System;
-using AuthenticationServices;
-using Bit.App.Abstractions;
-using Bit.Core.Utilities;
-using Bit.iOS.Autofill.Models;
-using Bit.iOS.Core.Utilities;
-using Microsoft.Maui.Controls;
-using Microsoft.Maui.Platform;
-using UIKit;
-
-namespace Bit.iOS.Autofill
-{
- public partial class CredentialProviderViewController : ASCredentialProviderViewController, IAccountsManagerHost
- {
- const string STORYBOARD_NAME = "MainInterface";
- Lazy _storyboard = new Lazy(() => UIStoryboard.FromName(STORYBOARD_NAME, null));
-
- public void InitWithContext(Context context)
- {
- _context = context;
- }
-
- public void DismissLockAndContinue()
- {
- if (UIApplication.SharedApplication.KeyWindow is null)
- {
- return;
- }
-
- UIApplication.SharedApplication.KeyWindow.RootViewController = _storyboard.Value.InstantiateInitialViewController();
-
- if (UIApplication.SharedApplication.KeyWindow?.RootViewController is CredentialProviderViewController cpvc)
- {
- cpvc.InitWithContext(_context);
- cpvc.OnLockDismissedAsync().FireAndForget();
- }
- }
-
- private void NavigateToPage(ContentPage page)
- {
- var navigationPage = new NavigationPage(page);
-
- var window = new Window(navigationPage);
- window.ToHandler(MauiContextSingleton.Instance.MauiContext);
- }
- }
-}
-
-#endif
diff --git a/src/iOS.Autofill/CredentialProviderViewController.cs b/src/iOS.Autofill/CredentialProviderViewController.cs
index cafbc335c..30ff9c555 100644
--- a/src/iOS.Autofill/CredentialProviderViewController.cs
+++ b/src/iOS.Autofill/CredentialProviderViewController.cs
@@ -18,6 +18,8 @@ using CoreFoundation;
using CoreNFC;
using Foundation;
using Microsoft.Maui.ApplicationModel;
+using Microsoft.Maui.Controls;
+using Microsoft.Maui.Platform;
using UIKit;
namespace Bit.iOS.Autofill
@@ -248,7 +250,6 @@ namespace Bit.iOS.Autofill
}
}
-#if !ENABLED_TAP_GESTURE_RECOGNIZER_MAUI_EMBEDDED_WORKAROUND
public async void DismissLockAndContinue()
{
DismissViewController(false, async () => await OnLockDismissedAsync());
@@ -262,7 +263,6 @@ namespace Bit.iOS.Autofill
PresentViewController(uiController, true, null);
}
-#endif
public async Task OnLockDismissedAsync()
{
diff --git a/src/iOS.Autofill/iOS.Autofill.csproj b/src/iOS.Autofill/iOS.Autofill.csproj
index 5a988c2b9..458358fb6 100644
--- a/src/iOS.Autofill/iOS.Autofill.csproj
+++ b/src/iOS.Autofill/iOS.Autofill.csproj
@@ -10,7 +10,7 @@
False
- $(DefineConstants);ENABLED_TAP_GESTURE_RECOGNIZER_MAUI_EMBEDDED_WORKAROUND
+ $(DefineConstants)
12.0
@@ -83,7 +83,6 @@
-
From 7ac3646fb0f84bbd0cf0b6e318d738f0e92f3536 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Thu, 11 Jan 2024 10:31:36 -0300
Subject: [PATCH 06/10] PM-3350 Added nuget.config so we add the nuget package
source for MAUI Nightly builds
---
nuget.config | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 nuget.config
diff --git a/nuget.config b/nuget.config
new file mode 100644
index 000000000..16502a7fd
--- /dev/null
+++ b/nuget.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
From b81d26d5893322c74500e9a6302e7faf3c147727 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Thu, 11 Jan 2024 14:18:34 -0300
Subject: [PATCH 07/10] Bump main iOS version
---
src/App/Platforms/iOS/Info.plist | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/App/Platforms/iOS/Info.plist b/src/App/Platforms/iOS/Info.plist
index cf0fe5084..da8dfd7d0 100644
--- a/src/App/Platforms/iOS/Info.plist
+++ b/src/App/Platforms/iOS/Info.plist
@@ -11,7 +11,7 @@
CFBundleIdentifier
com.8bit.bitwarden
CFBundleShortVersionString
- 2024.1.0
+ 2024.1.1
CFBundleVersion
1
CFBundleIconName
From 1e29eacc612f9c320f027499e846584b7c476918 Mon Sep 17 00:00:00 2001
From: Federico Maccaroni
Date: Thu, 11 Jan 2024 17:51:34 -0300
Subject: [PATCH 08/10] PM-3350 Removed "iOS" old folder project that has been
moved into the MAUI Single app project.
---
src/App/App.csproj | 20 +
.../Platforms/iOS/Resources}/logo.png | Bin
.../Platforms/iOS/Resources}/logo@2x.png | Bin
.../Platforms/iOS/Resources}/logo@3x.png | Bin
.../Platforms/iOS/Resources}/logo_white.png | Bin
.../iOS/Resources}/logo_white@2x.png | Bin
.../iOS/Resources}/logo_white@3x.png | Bin
.../Platforms}/iOS/Resources/more_vert.png | Bin
.../Platforms}/iOS/Resources/more_vert@2x.png | Bin
.../Platforms}/iOS/Resources/more_vert@3x.png | Bin
src/iOS.Autofill/iOS.Autofill.csproj | 6 +-
src/iOS.Extension/iOS.Extension.csproj | 6 +-
.../iOS.ShareExtension.csproj | 22 +-
src/iOS/AppDelegate.cs | 413 ------------
src/iOS/Entitlements.plist | 31 -
src/iOS/Info.plist | 141 ----
src/iOS/LaunchScreen.storyboard | 91 ---
src/iOS/Main.cs | 13 -
src/iOS/Properties/AssemblyInfo.cs | 35 -
.../AppIcons.appiconset/Contents.json | 117 ----
.../AppIcons.appiconset/Icon-1024.png | Bin 30793 -> 0 bytes
.../AppIcons.appiconset/Icon-120.png | Bin 2796 -> 0 bytes
.../AppIcons.appiconset/Icon-152.png | Bin 3521 -> 0 bytes
.../AppIcons.appiconset/Icon-167.png | Bin 3926 -> 0 bytes
.../AppIcons.appiconset/Icon-180.png | Bin 4187 -> 0 bytes
.../AppIcons.appiconset/Icon-20.png | Bin 738 -> 0 bytes
.../AppIcons.appiconset/Icon-29.png | Bin 899 -> 0 bytes
.../AppIcons.appiconset/Icon-40.png | Bin 1106 -> 0 bytes
.../AppIcons.appiconset/Icon-58.png | Bin 1473 -> 0 bytes
.../AppIcons.appiconset/Icon-60.png | Bin 1486 -> 0 bytes
.../AppIcons.appiconset/Icon-76.png | Bin 1840 -> 0 bytes
.../AppIcons.appiconset/Icon-80.png | Bin 1843 -> 0 bytes
.../AppIcons.appiconset/Icon-87.png | Bin 2055 -> 0 bytes
.../Resources/Assets.xcassets/Contents.json | 6 -
.../LaunchScreen.imageset/Contents.json | 68 --
.../empty_items_state.imageset/Contents.json | 25 -
.../Empty-items-state-dark.pdf | Bin 1891 -> 0 bytes
.../Empty-items-state.pdf | Bin 1875 -> 0 bytes
.../Contents.json | 25 -
.../empty_login_requests.pdf | Bin 1821 -> 0 bytes
.../empty_login_requests_dark.pdf | Bin 1814 -> 0 bytes
.../ic_warning.imageset/Contents.json | 608 ------------------
.../ic_warning.imageset/ic_warning-1.pdf | 119 ----
src/iOS/Resources/MaterialIcons_Regular.ttf | Bin 128180 -> 0 bytes
src/iOS/Resources/autofill-kb.png | Bin 28497 -> 0 bytes
src/iOS/Resources/autofill-kb@2x.png | Bin 84830 -> 0 bytes
src/iOS/Resources/autofill-kb@3x.png | Bin 139491 -> 0 bytes
src/iOS/Resources/bwi-font.ttf | Bin 76108 -> 0 bytes
src/iOS/Resources/cog_environment.png | Bin 486 -> 0 bytes
src/iOS/Resources/cog_environment@2x.png | Bin 931 -> 0 bytes
src/iOS/Resources/cog_environment@3x.png | Bin 1451 -> 0 bytes
src/iOS/Resources/cog_settings.png | Bin 486 -> 0 bytes
src/iOS/Resources/cog_settings@2x.png | Bin 931 -> 0 bytes
src/iOS/Resources/cog_settings@3x.png | Bin 1451 -> 0 bytes
src/iOS/Resources/ext-act.png | Bin 16254 -> 0 bytes
src/iOS/Resources/ext-act@2x.png | Bin 45613 -> 0 bytes
src/iOS/Resources/ext-act@3x.png | Bin 72971 -> 0 bytes
src/iOS/Resources/ext-more.png | Bin 16228 -> 0 bytes
src/iOS/Resources/ext-more@2x.png | Bin 45327 -> 0 bytes
src/iOS/Resources/ext-more@3x.png | Bin 71822 -> 0 bytes
src/iOS/Resources/ext-use.png | Bin 17523 -> 0 bytes
src/iOS/Resources/ext-use@2x.png | Bin 47770 -> 0 bytes
src/iOS/Resources/ext-use@3x.png | Bin 74989 -> 0 bytes
src/iOS/Resources/generate.png | Bin 676 -> 0 bytes
src/iOS/Resources/generate@2x.png | Bin 1399 -> 0 bytes
src/iOS/Resources/generate@3x.png | Bin 2175 -> 0 bytes
src/iOS/Resources/info.png | Bin 608 -> 0 bytes
src/iOS/Resources/info@2x.png | Bin 1259 -> 0 bytes
src/iOS/Resources/info@3x.png | Bin 1870 -> 0 bytes
src/iOS/Resources/lock.png | Bin 360 -> 0 bytes
src/iOS/Resources/lock@2x.png | Bin 744 -> 0 bytes
src/iOS/Resources/lock@3x.png | Bin 1089 -> 0 bytes
src/iOS/Resources/login.png | Bin 791 -> 0 bytes
src/iOS/Resources/login@2x.png | Bin 1721 -> 0 bytes
src/iOS/Resources/login@3x.png | Bin 2636 -> 0 bytes
src/iOS/Resources/logo.png | Bin 2593 -> 0 bytes
src/iOS/Resources/logo@2x.png | Bin 5449 -> 0 bytes
src/iOS/Resources/logo@3x.png | Bin 8426 -> 0 bytes
src/iOS/Resources/logo_white.png | Bin 2512 -> 0 bytes
src/iOS/Resources/logo_white@2x.png | Bin 11659 -> 0 bytes
src/iOS/Resources/logo_white@3x.png | Bin 8402 -> 0 bytes
src/iOS/Resources/more.png | Bin 145 -> 0 bytes
src/iOS/Resources/more@2x.png | Bin 348 -> 0 bytes
src/iOS/Resources/more@3x.png | Bin 555 -> 0 bytes
src/iOS/Resources/plus.png | Bin 223 -> 0 bytes
src/iOS/Resources/plus@2x.png | Bin 343 -> 0 bytes
src/iOS/Resources/plus@3x.png | Bin 526 -> 0 bytes
src/iOS/Resources/search.png | Bin 561 -> 0 bytes
src/iOS/Resources/search@2x.png | Bin 1190 -> 0 bytes
src/iOS/Resources/search@3x.png | Bin 1739 -> 0 bytes
src/iOS/Resources/send.png | Bin 486 -> 0 bytes
src/iOS/Resources/send@2x.png | Bin 956 -> 0 bytes
src/iOS/Resources/send@3x.png | Bin 1365 -> 0 bytes
src/iOS/Resources/yubikey.png | Bin 54828 -> 0 bytes
src/iOS/Resources/yubikey@2x.png | Bin 204568 -> 0 bytes
src/iOS/Resources/yubikey@3x.png | Bin 427125 -> 0 bytes
.../Services/iOSPushNotificationHandler.cs | 132 ----
.../Services/iOSPushNotificationService.cs | 122 ----
src/iOS/iOS.csproj | 437 -------------
99 files changed, 37 insertions(+), 2400 deletions(-)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo.png (100%)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo@2x.png (100%)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo@3x.png (100%)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo_white.png (100%)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo_white@2x.png (100%)
rename src/{iOS/Resources/Assets.xcassets/LaunchScreen.imageset => App/Platforms/iOS/Resources}/logo_white@3x.png (100%)
rename src/{ => App/Platforms}/iOS/Resources/more_vert.png (100%)
rename src/{ => App/Platforms}/iOS/Resources/more_vert@2x.png (100%)
rename src/{ => App/Platforms}/iOS/Resources/more_vert@3x.png (100%)
delete mode 100644 src/iOS/AppDelegate.cs
delete mode 100644 src/iOS/Entitlements.plist
delete mode 100644 src/iOS/Info.plist
delete mode 100644 src/iOS/LaunchScreen.storyboard
delete mode 100644 src/iOS/Main.cs
delete mode 100644 src/iOS/Properties/AssemblyInfo.cs
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-1024.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-120.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-152.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-167.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-180.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-20.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-29.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-40.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-58.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-60.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-76.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-80.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-87.png
delete mode 100644 src/iOS/Resources/Assets.xcassets/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_items_state.imageset/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_items_state.imageset/Empty-items-state-dark.pdf
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_items_state.imageset/Empty-items-state.pdf
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_login_requests.imageset/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_login_requests.imageset/empty_login_requests.pdf
delete mode 100644 src/iOS/Resources/Assets.xcassets/empty_login_requests.imageset/empty_login_requests_dark.pdf
delete mode 100644 src/iOS/Resources/Assets.xcassets/ic_warning.imageset/Contents.json
delete mode 100644 src/iOS/Resources/Assets.xcassets/ic_warning.imageset/ic_warning-1.pdf
delete mode 100644 src/iOS/Resources/MaterialIcons_Regular.ttf
delete mode 100644 src/iOS/Resources/autofill-kb.png
delete mode 100644 src/iOS/Resources/autofill-kb@2x.png
delete mode 100644 src/iOS/Resources/autofill-kb@3x.png
delete mode 100644 src/iOS/Resources/bwi-font.ttf
delete mode 100644 src/iOS/Resources/cog_environment.png
delete mode 100644 src/iOS/Resources/cog_environment@2x.png
delete mode 100644 src/iOS/Resources/cog_environment@3x.png
delete mode 100644 src/iOS/Resources/cog_settings.png
delete mode 100644 src/iOS/Resources/cog_settings@2x.png
delete mode 100644 src/iOS/Resources/cog_settings@3x.png
delete mode 100644 src/iOS/Resources/ext-act.png
delete mode 100644 src/iOS/Resources/ext-act@2x.png
delete mode 100644 src/iOS/Resources/ext-act@3x.png
delete mode 100644 src/iOS/Resources/ext-more.png
delete mode 100644 src/iOS/Resources/ext-more@2x.png
delete mode 100644 src/iOS/Resources/ext-more@3x.png
delete mode 100644 src/iOS/Resources/ext-use.png
delete mode 100644 src/iOS/Resources/ext-use@2x.png
delete mode 100644 src/iOS/Resources/ext-use@3x.png
delete mode 100644 src/iOS/Resources/generate.png
delete mode 100644 src/iOS/Resources/generate@2x.png
delete mode 100644 src/iOS/Resources/generate@3x.png
delete mode 100644 src/iOS/Resources/info.png
delete mode 100644 src/iOS/Resources/info@2x.png
delete mode 100644 src/iOS/Resources/info@3x.png
delete mode 100644 src/iOS/Resources/lock.png
delete mode 100644 src/iOS/Resources/lock@2x.png
delete mode 100644 src/iOS/Resources/lock@3x.png
delete mode 100644 src/iOS/Resources/login.png
delete mode 100644 src/iOS/Resources/login@2x.png
delete mode 100644 src/iOS/Resources/login@3x.png
delete mode 100644 src/iOS/Resources/logo.png
delete mode 100644 src/iOS/Resources/logo@2x.png
delete mode 100644 src/iOS/Resources/logo@3x.png
delete mode 100644 src/iOS/Resources/logo_white.png
delete mode 100644 src/iOS/Resources/logo_white@2x.png
delete mode 100644 src/iOS/Resources/logo_white@3x.png
delete mode 100644 src/iOS/Resources/more.png
delete mode 100644 src/iOS/Resources/more@2x.png
delete mode 100644 src/iOS/Resources/more@3x.png
delete mode 100644 src/iOS/Resources/plus.png
delete mode 100644 src/iOS/Resources/plus@2x.png
delete mode 100644 src/iOS/Resources/plus@3x.png
delete mode 100644 src/iOS/Resources/search.png
delete mode 100644 src/iOS/Resources/search@2x.png
delete mode 100644 src/iOS/Resources/search@3x.png
delete mode 100644 src/iOS/Resources/send.png
delete mode 100644 src/iOS/Resources/send@2x.png
delete mode 100644 src/iOS/Resources/send@3x.png
delete mode 100644 src/iOS/Resources/yubikey.png
delete mode 100644 src/iOS/Resources/yubikey@2x.png
delete mode 100644 src/iOS/Resources/yubikey@3x.png
delete mode 100644 src/iOS/Services/iOSPushNotificationHandler.cs
delete mode 100644 src/iOS/Services/iOSPushNotificationService.cs
delete mode 100644 src/iOS/iOS.csproj
diff --git a/src/App/App.csproj b/src/App/App.csproj
index 079224cbb..35458d047 100644
--- a/src/App/App.csproj
+++ b/src/App/App.csproj
@@ -155,6 +155,15 @@
+
+
+
+
+
+
+
+
+
@@ -235,4 +244,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo.png b/src/App/Platforms/iOS/Resources/logo.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo.png
rename to src/App/Platforms/iOS/Resources/logo.png
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo@2x.png b/src/App/Platforms/iOS/Resources/logo@2x.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo@2x.png
rename to src/App/Platforms/iOS/Resources/logo@2x.png
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo@3x.png b/src/App/Platforms/iOS/Resources/logo@3x.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo@3x.png
rename to src/App/Platforms/iOS/Resources/logo@3x.png
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white.png b/src/App/Platforms/iOS/Resources/logo_white.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white.png
rename to src/App/Platforms/iOS/Resources/logo_white.png
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white@2x.png b/src/App/Platforms/iOS/Resources/logo_white@2x.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white@2x.png
rename to src/App/Platforms/iOS/Resources/logo_white@2x.png
diff --git a/src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white@3x.png b/src/App/Platforms/iOS/Resources/logo_white@3x.png
similarity index 100%
rename from src/iOS/Resources/Assets.xcassets/LaunchScreen.imageset/logo_white@3x.png
rename to src/App/Platforms/iOS/Resources/logo_white@3x.png
diff --git a/src/iOS/Resources/more_vert.png b/src/App/Platforms/iOS/Resources/more_vert.png
similarity index 100%
rename from src/iOS/Resources/more_vert.png
rename to src/App/Platforms/iOS/Resources/more_vert.png
diff --git a/src/iOS/Resources/more_vert@2x.png b/src/App/Platforms/iOS/Resources/more_vert@2x.png
similarity index 100%
rename from src/iOS/Resources/more_vert@2x.png
rename to src/App/Platforms/iOS/Resources/more_vert@2x.png
diff --git a/src/iOS/Resources/more_vert@3x.png b/src/App/Platforms/iOS/Resources/more_vert@3x.png
similarity index 100%
rename from src/iOS/Resources/more_vert@3x.png
rename to src/App/Platforms/iOS/Resources/more_vert@3x.png
diff --git a/src/iOS.Autofill/iOS.Autofill.csproj b/src/iOS.Autofill/iOS.Autofill.csproj
index 458358fb6..3c5ab2431 100644
--- a/src/iOS.Autofill/iOS.Autofill.csproj
+++ b/src/iOS.Autofill/iOS.Autofill.csproj
@@ -121,13 +121,13 @@
-
+
Resources\more_vert.png
-
+
Resources\more_vert%402x.png
-
+
Resources\more_vert%403x.png
diff --git a/src/iOS.Extension/iOS.Extension.csproj b/src/iOS.Extension/iOS.Extension.csproj
index 0ee903fff..f374b47be 100644
--- a/src/iOS.Extension/iOS.Extension.csproj
+++ b/src/iOS.Extension/iOS.Extension.csproj
@@ -100,13 +100,13 @@
-
+
Resources\more_vert.png
-
+
Resources\more_vert%402x.png
-
+
Resources\more_vert%403x.png
diff --git a/src/iOS.ShareExtension/iOS.ShareExtension.csproj b/src/iOS.ShareExtension/iOS.ShareExtension.csproj
index fa5976b9f..b8718e428 100644
--- a/src/iOS.ShareExtension/iOS.ShareExtension.csproj
+++ b/src/iOS.ShareExtension/iOS.ShareExtension.csproj
@@ -70,37 +70,37 @@
-
+
Resources\logo_white%403x.png
-
+
Resources\logo_white%402x.png
-
+
Resources\logo_white.png
-
+
Resources\logo%403x.png
-
+
Resources\logo%402x.png
-
+
Resources\logo.png
-
+
Resources\more_vert.png
-
+
Resources\more_vert%402x.png
-
+
Resources\more_vert%403x.png
-
+
Resources\bwi-font.ttf
-
+
Resources\MaterialIcons_Regular.ttf
diff --git a/src/iOS/AppDelegate.cs b/src/iOS/AppDelegate.cs
deleted file mode 100644
index 7ce15f48b..000000000
--- a/src/iOS/AppDelegate.cs
+++ /dev/null
@@ -1,413 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using AuthenticationServices;
-using Bit.App.Abstractions;
-using Bit.App.Pages;
-using Bit.App.Services;
-using Bit.App.Utilities;
-using Bit.Core;
-using Bit.Core.Abstractions;
-using Bit.Core.Enums;
-using Bit.Core.Services;
-using Bit.Core.Utilities;
-using Bit.iOS.Core.Services;
-using Bit.iOS.Core.Utilities;
-using Bit.iOS.Services;
-using CoreNFC;
-using Foundation;
-using UIKit;
-using WatchConnectivity;
-using Xamarin.Forms;
-using Xamarin.Forms.Platform.iOS;
-
-namespace Bit.iOS
-{
- [Register("AppDelegate")]
- public partial class AppDelegate : FormsApplicationDelegate
- {
- const int SPLASH_VIEW_TAG = 4321;
-
- private NFCNdefReaderSession _nfcSession = null;
- private iOSPushNotificationHandler _pushHandler = null;
- private Core.NFCReaderDelegate _nfcDelegate = null;
- private NSTimer _clipboardTimer = null;
- private nint _clipboardBackgroundTaskId;
- private NSTimer _eventTimer = null;
- private nint _eventBackgroundTaskId;
-
- private IDeviceActionService _deviceActionService;
- private IMessagingService _messagingService;
- private IBroadcasterService _broadcasterService;
- private IStorageService _storageService;
- private IStateService _stateService;
- private IEventService _eventService;
-
- private LazyResolve _deepLinkContext = new LazyResolve();
-
- public override bool FinishedLaunching(UIApplication app, NSDictionary options)
- {
- Forms.Init();
- InitApp();
-
- _deviceActionService = ServiceContainer.Resolve("deviceActionService");
- _messagingService = ServiceContainer.Resolve("messagingService");
- _broadcasterService = ServiceContainer.Resolve("broadcasterService");
- _storageService = ServiceContainer.Resolve("storageService");
- _stateService = ServiceContainer.Resolve("stateService");
- _eventService = ServiceContainer.Resolve("eventService");
-
- LoadApplication(new App.App(null));
- iOSCoreHelpers.AppearanceAdjustments();
- ZXing.Net.Mobile.Forms.iOS.Platform.Init();
-
- ConnectToWatchIfNeededAsync().FireAndForget();
-
- _broadcasterService.Subscribe(nameof(AppDelegate), async (message) =>
- {
- try
- {
- if (message.Command == "startEventTimer")
- {
- StartEventTimer();
- }
- else if (message.Command == "stopEventTimer")
- {
- var task = StopEventTimerAsync();
- }
- else if (message.Command is ThemeManager.UPDATED_THEME_MESSAGE_KEY)
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- iOSCoreHelpers.AppearanceAdjustments();
- });
- }
- else if (message.Command == "listenYubiKeyOTP")
- {
- iOSCoreHelpers.ListenYubiKey((bool)message.Data, _deviceActionService, _nfcSession, _nfcDelegate);
- }
- else if (message.Command == "unlocked")
- {
- var needsAutofillReplacement = await _storageService.GetAsync(
- Core.Constants.AutofillNeedsIdentityReplacementKey);
- if (needsAutofillReplacement.GetValueOrDefault())
- {
- await ASHelpers.ReplaceAllIdentities();
- }
- }
- else if (message.Command == "showAppExtension")
- {
- Device.BeginInvokeOnMainThread(() => ShowAppExtension((ExtensionPageViewModel)message.Data));
- }
- else if (message.Command == "syncCompleted")
- {
- if (message.Data is Dictionary data && data.ContainsKey("successfully"))
- {
- var success = data["successfully"] as bool?;
- if (success.GetValueOrDefault() && _deviceActionService.SystemMajorVersion() >= 12)
- {
- await ASHelpers.ReplaceAllIdentities();
- }
- }
- }
- else if (message.Command == "addedCipher" || message.Command == "editedCipher" ||
- message.Command == "restoredCipher")
- {
- if (_deviceActionService.SystemMajorVersion() >= 12)
- {
- if (await ASHelpers.IdentitiesCanIncremental())
- {
- var cipherId = message.Data as string;
- if (message.Command == "addedCipher" && !string.IsNullOrWhiteSpace(cipherId))
- {
- var identity = await ASHelpers.GetCipherIdentityAsync(cipherId);
- if (identity == null)
- {
- return;
- }
- await ASCredentialIdentityStore.SharedStore?.SaveCredentialIdentitiesAsync(
- new ASPasswordCredentialIdentity[] { identity });
- return;
- }
- }
- await ASHelpers.ReplaceAllIdentities();
- }
- }
- else if (message.Command == "deletedCipher" || message.Command == "softDeletedCipher")
- {
- if (_deviceActionService.SystemMajorVersion() >= 12)
- {
- if (await ASHelpers.IdentitiesCanIncremental())
- {
- var identity = ASHelpers.ToCredentialIdentity(
- message.Data as Bit.Core.Models.View.CipherView);
- if (identity == null)
- {
- return;
- }
- await ASCredentialIdentityStore.SharedStore?.RemoveCredentialIdentitiesAsync(
- new ASPasswordCredentialIdentity[] { identity });
- return;
- }
- await ASHelpers.ReplaceAllIdentities();
- }
- }
- else if (message.Command == "logout")
- {
- if (_deviceActionService.SystemMajorVersion() >= 12)
- {
- await ASCredentialIdentityStore.SharedStore?.RemoveAllCredentialIdentitiesAsync();
- }
- }
- else if ((message.Command == "softDeletedCipher" || message.Command == "restoredCipher")
- && _deviceActionService.SystemMajorVersion() >= 12)
- {
- await ASHelpers.ReplaceAllIdentities();
- }
- else if (message.Command == AppHelpers.VAULT_TIMEOUT_ACTION_CHANGED_MESSAGE_COMMAND)
- {
- var timeoutAction = await _stateService.GetVaultTimeoutActionAsync();
- if (timeoutAction == VaultTimeoutAction.Logout)
- {
- await ASCredentialIdentityStore.SharedStore?.RemoveAllCredentialIdentitiesAsync();
- }
- else
- {
- await ASHelpers.ReplaceAllIdentities();
- }
- }
- }
- catch (Exception ex)
- {
- LoggerHelper.LogEvenIfCantBeResolved(ex);
- }
- });
-
- return base.FinishedLaunching(app, options);
- }
-
- public override void OnResignActivation(UIApplication uiApplication)
- {
- var view = new UIView(UIApplication.SharedApplication.KeyWindow.Frame)
- {
- Tag = SPLASH_VIEW_TAG
- };
- var backgroundView = new UIView(UIApplication.SharedApplication.KeyWindow.Frame)
- {
- BackgroundColor = ThemeManager.GetResourceColor("SplashBackgroundColor").ToUIColor()
- };
- var logo = new UIImage(!ThemeManager.UsingLightTheme ? "logo_white.png" : "logo.png");
- var imageView = new UIImageView(logo)
- {
- Center = new CoreGraphics.CGPoint(view.Center.X, view.Center.Y - 30)
- };
- view.AddSubview(backgroundView);
- view.AddSubview(imageView);
- UIApplication.SharedApplication.KeyWindow.AddSubview(view);
- UIApplication.SharedApplication.KeyWindow.BringSubviewToFront(view);
- UIApplication.SharedApplication.KeyWindow.EndEditing(true);
- base.OnResignActivation(uiApplication);
- }
-
- public override void DidEnterBackground(UIApplication uiApplication)
- {
- _stateService?.SetLastActiveTimeAsync(_deviceActionService.GetActiveTime());
- _messagingService?.Send("slept");
- base.DidEnterBackground(uiApplication);
- }
-
- public override void OnActivated(UIApplication uiApplication)
- {
- base.OnActivated(uiApplication);
- UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
- UIApplication.SharedApplication.KeyWindow?
- .ViewWithTag(SPLASH_VIEW_TAG)?
- .RemoveFromSuperview();
-
- ThemeManager.UpdateThemeOnPagesAsync();
- }
-
- public override void WillEnterForeground(UIApplication uiApplication)
- {
- _messagingService?.Send(AppHelpers.RESUMED_MESSAGE_COMMAND);
- base.WillEnterForeground(uiApplication);
- }
-
- public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication,
- NSObject annotation)
- {
- return true;
- }
-
- public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
- {
- return _deepLinkContext.Value.OnNewUri(url) || Xamarin.Essentials.Platform.OpenUrl(app, url, options);
- }
-
- public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity,
- UIApplicationRestorationHandler completionHandler)
- {
- if (Xamarin.Essentials.Platform.ContinueUserActivity(application, userActivity, completionHandler))
- {
- return true;
- }
- return base.ContinueUserActivity(application, userActivity, completionHandler);
- }
-
- public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
- {
- _pushHandler?.OnErrorReceived(error);
- }
-
- public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
- {
- _pushHandler?.OnRegisteredSuccess(deviceToken);
- }
-
- public override void DidRegisterUserNotificationSettings(UIApplication application,
- UIUserNotificationSettings notificationSettings)
- {
- application.RegisterForRemoteNotifications();
- }
-
- public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo,
- Action completionHandler)
- {
- _pushHandler?.OnMessageReceived(userInfo);
- }
-
- public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)
- {
- _pushHandler?.OnMessageReceived(userInfo);
- }
-
- public void InitApp()
- {
- if (ServiceContainer.RegisteredServices.Count > 0)
- {
- return;
- }
-
- // Migration services
- ServiceContainer.Register("nativeLogService", new ConsoleLogService());
-
- // Note: This might cause a race condition. Investigate more.
- Task.Run(() =>
- {
- FFImageLoading.Forms.Platform.CachedImageRenderer.Init();
- FFImageLoading.ImageService.Instance.Initialize(new FFImageLoading.Config.Configuration
- {
- FadeAnimationEnabled = false,
- FadeAnimationForCachedImages = false
- });
- });
-
- iOSCoreHelpers.RegisterLocalServices();
- RegisterPush();
- var deviceActionService = ServiceContainer.Resolve("deviceActionService");
- ServiceContainer.Init(deviceActionService.DeviceUserAgent, Constants.ClearCiphersCacheKey,
- Constants.iOSAllClearCipherCacheKeys);
- iOSCoreHelpers.InitLogger();
- iOSCoreHelpers.RegisterFinallyBeforeBootstrap();
-
- _pushHandler = new iOSPushNotificationHandler(
- ServiceContainer.Resolve("pushNotificationListenerService"));
- _nfcDelegate = new Core.NFCReaderDelegate((success, message) =>
- _messagingService.Send("gotYubiKeyOTP", message));
-
- iOSCoreHelpers.Bootstrap(async () => await ApplyManagedSettingsAsync());
- }
-
- private void RegisterPush()
- {
- var notificationListenerService = new PushNotificationListenerService();
- ServiceContainer.Register(
- "pushNotificationListenerService", notificationListenerService);
- var iosPushNotificationService = new iOSPushNotificationService();
- ServiceContainer.Register(
- "pushNotificationService", iosPushNotificationService);
- }
-
- private void ShowAppExtension(ExtensionPageViewModel extensionPageViewModel)
- {
- var itemProvider = new NSItemProvider(new NSDictionary(), Core.Constants.UTTypeAppExtensionSetup);
- var extensionItem = new NSExtensionItem
- {
- Attachments = new NSItemProvider[] { itemProvider }
- };
- var activityViewController = new UIActivityViewController(new NSExtensionItem[] { extensionItem }, null)
- {
- CompletionHandler = (activityType, completed) =>
- {
- extensionPageViewModel.EnabledExtension(completed && activityType == iOSCoreHelpers.AppExtensionId);
- }
- };
- var modal = UIApplication.SharedApplication.KeyWindow.RootViewController.ModalViewController;
- if (activityViewController.PopoverPresentationController != null)
- {
- activityViewController.PopoverPresentationController.SourceView = modal.View;
- var frame = UIScreen.MainScreen.Bounds;
- frame.Height /= 2;
- activityViewController.PopoverPresentationController.SourceRect = frame;
- }
- modal.PresentViewController(activityViewController, true, null);
- }
-
- private void StartEventTimer()
- {
- _eventTimer?.Invalidate();
- _eventTimer?.Dispose();
- _eventTimer = null;
- Device.BeginInvokeOnMainThread(() =>
- {
- _eventTimer = NSTimer.CreateScheduledTimer(60, true, timer =>
- {
- var task = Task.Run(() => _eventService.UploadEventsAsync());
- });
- });
- }
-
- private async Task StopEventTimerAsync()
- {
- _eventTimer?.Invalidate();
- _eventTimer?.Dispose();
- _eventTimer = null;
- if (_eventBackgroundTaskId > 0)
- {
- UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId);
- _eventBackgroundTaskId = 0;
- }
- _eventBackgroundTaskId = UIApplication.SharedApplication.BeginBackgroundTask(() =>
- {
- UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId);
- _eventBackgroundTaskId = 0;
- });
- await _eventService.UploadEventsAsync();
- UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId);
- _eventBackgroundTaskId = 0;
- }
-
- private async Task ApplyManagedSettingsAsync()
- {
- var userDefaults = NSUserDefaults.StandardUserDefaults;
- var managedSettings = userDefaults.DictionaryForKey("com.apple.configuration.managed");
- if (managedSettings != null && managedSettings.Count > 0)
- {
- var dict = new Dictionary();
- foreach (var setting in managedSettings)
- {
- dict.Add(setting.Key.ToString(), setting.Value?.ToString());
- }
- await AppHelpers.SetPreconfiguredSettingsAsync(dict);
- }
- }
-
- private async Task ConnectToWatchIfNeededAsync()
- {
- if (_stateService != null && await _stateService.GetShouldConnectToWatchAsync())
- {
- WCSessionManager.SharedManager.StartSession();
- }
- }
- }
-}
diff --git a/src/iOS/Entitlements.plist b/src/iOS/Entitlements.plist
deleted file mode 100644
index fcf986d4b..000000000
--- a/src/iOS/Entitlements.plist
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
- com.apple.developer.authentication-services.autofill-credential-provider
-
- com.apple.security.application-groups
-
- group.com.8bit.bitwarden
-
- keychain-access-groups
-
- $(AppIdentifierPrefix)com.8bit.bitwarden
-
- com.apple.developer.ubiquity-container-identifiers
-
- iCloud.$(CFBundleIdentifier)
-
- com.apple.developer.nfc.readersession.formats
-
- NDEF
- TAG
-
- com.apple.developer.associated-domains
-
- webcredentials:bitwarden.com
-
- aps-environment
- development
-
-
diff --git a/src/iOS/Info.plist b/src/iOS/Info.plist
deleted file mode 100644
index da8dfd7d0..000000000
--- a/src/iOS/Info.plist
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
- MinimumOSVersion
- 11.0
- CFBundleDisplayName
- Bitwarden
- CFBundleName
- Bitwarden
- CFBundleIdentifier
- com.8bit.bitwarden
- CFBundleShortVersionString
- 2024.1.1
- CFBundleVersion
- 1
- CFBundleIconName
- AppIcon
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- bitwarden
- org-appextension-feature-password-management
-
- CFBundleTypeRole
- Editor
- CFBundleURLName
- com.8bit.bitwarden.url
-
-
- CFBundleURLName
- com.8bit.bitwarden
- CFBundleURLSchemes
-
- otpauth
-
-
-
- CFBundleLocalizations
-
- en
- es
- zh-Hans
- zh-Hant
- pt-PT
- pt-BR
- sv
- sk
- it
- fi
- fr
- ro
- id
- hr
- hu
- nl
- tr
- uk
- de
- dk
- cz
- nb
- ja
- et
- vi
- pl
- ko
- fa
- ru
- be
- bg
- ca
- cs
- el
- th
-
- CFBundleDevelopmentRegion
- en
- UIDeviceFamily
-
- 1
- 2
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
- UIInterfaceOrientationPortraitUpsideDown
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- LaunchScreen
- UIMainStoryboardFile~ipad
- LaunchScreen
- UIViewControllerBasedStatusBarAppearance
-
- UIBackgroundModes
-
- remote-notification
-
- UIStatusBarHidden
-
- UIAppFonts
-
- bwi-font.ttf
- MaterialIcons_Regular.ttf
-
- UIRequiredDeviceCapabilities
-
- arm64
-
-
- CADisableMinimumFrameDurationOnPhone
-
- XSAppIconAssets
- Resources/Assets.xcassets/AppIcons.appiconset
- ITSAppUsesNonExemptEncryption
-
- ITSEncryptionExportComplianceCode
- ecf076d3-4824-4d7b-b716-2a9a47d7d296
- NSPhotoLibraryUsageDescription
- This app does not require access to the photo library.
- NSCameraUsageDescription
- Scan QR codes
- NSFaceIDUsageDescription
- Use Face ID to unlock your vault.
- NFCReaderUsageDescription
- Use Yubikeys for two-facor authentication.
-
-
diff --git a/src/iOS/LaunchScreen.storyboard b/src/iOS/LaunchScreen.storyboard
deleted file mode 100644
index 6cec090bc..000000000
--- a/src/iOS/LaunchScreen.storyboard
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/iOS/Main.cs b/src/iOS/Main.cs
deleted file mode 100644
index 13f65ed2e..000000000
--- a/src/iOS/Main.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using UIKit;
-
-namespace Bit.iOS
-{
- public class Application
- {
- static void Main(string[] args)
- {
- ObjCRuntime.Dlfcn.dlopen(ObjCRuntime.Constants.libSystemLibrary, 0);
- UIApplication.Main(args, null, "AppDelegate");
- }
- }
-}
diff --git a/src/iOS/Properties/AssemblyInfo.cs b/src/iOS/Properties/AssemblyInfo.cs
deleted file mode 100644
index 55f4a249c..000000000
--- a/src/iOS/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("BitwardeniOS")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Bitwarden Inc.")]
-[assembly: AssemblyProduct("Bitwarden")]
-[assembly: AssemblyCopyright("Copyright © 2016")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json
deleted file mode 100644
index 5b671eb96..000000000
--- a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Contents.json
+++ /dev/null
@@ -1,117 +0,0 @@
-{
- "images": [
- {
- "scale": "2x",
- "size": "20x20",
- "idiom": "iphone",
- "filename": "Icon-40.png"
- },
- {
- "scale": "3x",
- "size": "20x20",
- "idiom": "iphone",
- "filename": "Icon-60.png"
- },
- {
- "scale": "2x",
- "size": "29x29",
- "idiom": "iphone",
- "filename": "Icon-58.png"
- },
- {
- "scale": "3x",
- "size": "29x29",
- "idiom": "iphone",
- "filename": "Icon-87.png"
- },
- {
- "scale": "2x",
- "size": "40x40",
- "idiom": "iphone",
- "filename": "Icon-80.png"
- },
- {
- "scale": "3x",
- "size": "40x40",
- "idiom": "iphone",
- "filename": "Icon-120.png"
- },
- {
- "scale": "2x",
- "size": "60x60",
- "idiom": "iphone",
- "filename": "Icon-120.png"
- },
- {
- "scale": "3x",
- "size": "60x60",
- "idiom": "iphone",
- "filename": "Icon-180.png"
- },
- {
- "scale": "1x",
- "size": "20x20",
- "idiom": "ipad",
- "filename": "Icon-20.png"
- },
- {
- "scale": "2x",
- "size": "20x20",
- "idiom": "ipad",
- "filename": "Icon-40.png"
- },
- {
- "scale": "1x",
- "size": "29x29",
- "idiom": "ipad",
- "filename": "Icon-29.png"
- },
- {
- "scale": "2x",
- "size": "29x29",
- "idiom": "ipad",
- "filename": "Icon-58.png"
- },
- {
- "scale": "1x",
- "size": "40x40",
- "idiom": "ipad",
- "filename": "Icon-40.png"
- },
- {
- "scale": "2x",
- "size": "40x40",
- "idiom": "ipad",
- "filename": "Icon-80.png"
- },
- {
- "scale": "1x",
- "size": "76x76",
- "idiom": "ipad",
- "filename": "Icon-76.png"
- },
- {
- "scale": "2x",
- "size": "76x76",
- "idiom": "ipad",
- "filename": "Icon-152.png"
- },
- {
- "scale": "2x",
- "size": "83.5x83.5",
- "idiom": "ipad",
- "filename": "Icon-167.png"
- },
- {
- "scale": "1x",
- "size": "1024x1024",
- "idiom": "ios-marketing",
- "filename": "Icon-1024.png"
- }
- ],
- "properties": {},
- "info": {
- "version": 1,
- "author": "xcode"
- }
-}
\ No newline at end of file
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-1024.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-1024.png
deleted file mode 100644
index e96f62fce9b8e10fe1f9fe69e0ebb68b5130c570..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 30793
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
KbSrewkNyk(j6HDx
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-167.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-167.png
deleted file mode 100644
index ec8b7b847c001ec5d159b76b11d001811b1f7da2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3926
zcmeHKXHe5mxBdk}myUF)(i9NsCC&W#bO;(c2$8Oa9t8YL
z@4W^H1O=p*fZTZRJMaB^=g!=3cW2H%XV0FqGrN0c_c^gf&YbHUNMCQ2+>y1b|bLDRdnGd}IJ%!xjK;
zWdZ<)C$iz8Drv&s!5rdfU;tbr>C^xi#0~si0Ys8JAfA8g+8}X&{6Fnv01)jAfdAzK
zCE?$uLz2HS|Apiz(7(J%HWb;vy-QH!|E>QGqZ~?DB>|16j)fNh(6Rm%5Ri@J1ONsd
zh?b_QKWH0mMl^-B*$!bwO&uaJ_UpI>dD
z?@@@8Y$JxK)_CoBBO(9Lm9}&g2~9(#9rH`1D(#}3i9!|Ldsqi
zlyYA~RMbP{Xs87lTZzTQpiEo}w~SsWPW~r1w>I3E+>yoz>1cEBn>f^^O%fD0QsD~Y
z?1a!~ifF*Iedy^6l*>T1U~y>er#w40F@^u-;&By1oP%P@2M3JQPqMV5G{mnOn=-L9
zS?Y^+PR%F@h};*0f;@U!nL4bKQlrasxsPL}I?
zqW4(Z>fRM;!7X>Squi=TP$9J8xZWxOe1jfKEbayCe_kdU=9Tml;S2LQY%zf(fPUb{zItnc4`+
zAl_S}8H%f0qOx2P(171U$@EZ?awLi$_WJ*W|3?S5ayR|YexqOecAb^3Z%3JYpitMk
z`EF{o6pB-t77|u+H&Ez2pm+_!=X=8EqKy=Es41ZH%zP&j%3Xyp4GS$ZbTRq!zU0_?
zo@g$I>-f@yQM)#t&F+y;360tC3wmZy{YAuTCZ9#NfSOsZn5|SKbY$w=^oZ4?MAqUh
zR^Jtd_Y|5+pS6nyjmDg{k*}vI-Av$$1b!17cyK|IE_$VuT(3#Grdjw}j@4;l+n0h3
zACA_Dz8Kc?g3tZIQ-hp4*Fj11uQlXv2@sQRq)QNwWA~QPuWH;Lj0Q5*_w<>ZC2_&?
zt(npC6G4+HI3fJRY5-BI1#X^|nsHn|@bk{bkn~vSk$}rpLN<$2p5@*KaZcD`9@*ks
z0Z~8CY;NkooT>%R8pPJ>1TOznJOq;qdo-wO2Kc-`UcaYX-)gaOpIia&%I~cQ&zo=-
z4z7}b=i_HbXT>U;CKPZK1D!mmh2S54JdNZg(S
ztHEni>BT$QtTHz*4za~Cl4q`RfBI%3efDA%?$^9<&*eR(Xw|^^!~8x?N>@%CWnRhq
zKI77YkF2JCZ?pR%N3~g0o$3LsTg)W^^I{9EvJ12-_xU?rSW#)d;rF0mfHAE0Z}l3w_r94Uc_!q)3rN&B}SNQ#xgQqJl{*
z#`alov-Xdt^@S21+S{CI{M8|`s@?}$DnYFsuKK?lx5Ci7AEP?$-eyTjxOUK>VDrq?
z-n9&G5o&^6h%V;U-QQ=ivKZ-VtYQ4n+{LW4-h1a1*@5-r$&;*rzH4wY7SRL_wef3=
z=;>q$N8x~{74dlz>KnzLHE^nlnir@
z(k_0WQO_k6QR>I#S@sS)uj?Ba#Z``)iip+0h&4yTkVNSVf>T#W^}Fk@&eDdD`Mf?{
znL9`9cqsK)&W$J2(VXk)UzTcq7H%DYc&7Jmhqvm@!P$a5r4{-Oebl$knOl>@3N|s?
z2oTGm#Q+BVaGqG`SGAip@IWr{kBHDD|5F)A%R$jY$jn)+`(7^EdfXK$nx9^y;DA;J
z@nQw}H|8_4-f*v+UpRcwsK!O$4_y*EgFK(uR4u4l2-;C$ku%)k>=Z*gQ^*=iB#>0b
ztcCaxs29Hr7y
zSMq=(fF7C%K1uQ3aktBc*0&+hQ9{0HVZwAcvf!!Fi=93SyKo3JhLs{rV+mF3;r{j!
z<%69`mau6S5YLgzV%H|egsz(dVnj<^X?W(eE>Vu%oi=;dnpw0vO%A7JH%K)%JS|pR
z$JlUo`L>deJ>taq?4UQvaW%Pzw+idDp{gPZvmF9+mau;IJQ|Psn?#k7kHCwiY
zMCalKHwHd}-wq^=OO69OOg){ch|waZ*&B~Xey82f$ngCq?MR+twXfLWN9K88K%WXc
zzm2-~8(W`(Ud~F28#Csx;wE-<9nBjQl(EMz(_8h=ifclZ58y
zTh0mylr~$DY~G{elVNntKISuuCt@ud@6v4nZ@2r+!$
z?TeVUC7|6T3(mMenpu+;>x)7O6TI`?Zx^WqXPT36aeE4kf0}Y)18Ek1mhC4e<|XqHRb&w|CiIk2?I!=%CldVwr5!Fq-wx?}
z6rAFdQ%c16%?M;$-Bu^Q8P=7Ix6IM%itskDdyeZ5Rxn{VL1Z_TZpXg^+zK>zenc#^Vq01oJ${#)4
zOt~A$BsJbv?GV|lt5ms!$9t=;c?w<)wEn$F_D-LD*?p}fB-dSuHB*z!okVtX=)CAj
zWS3q!O!O;>pu0==Drk@jqeXD`B58XK7?}xxM0P`2Vc|I>ri^d5CMPjvawv-C|0H8@?~e*m;YIynFU
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-180.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-180.png
deleted file mode 100644
index d600969a777b103b642456c774049f9261273ba6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4187
zcmeHKXHe5mxBi79N*4qK1REs+p(9;_|IiIpK@t!o20{l3T_h9{0qIDG(3^-Ny(%JI
z3`nmkNQm?o!Qx$ea;JGLmd`IK1KilSoCyZrc|u?
zYiG|;XZ0^E+y
zq~hP9OSQi_|3X?k=-+H=3{UePb`75PfBe5`XhiYiU+ZOxorO@T{voIfvfjr~_!K8!WQnC3CBX8g}v9oA=HtSLBl
zCgZaySAN9H(SRV~?Cf9(XyXgUyYcbimjd1Q=O(lFTBXt}ACe7x+T0x+$a|D#r=;|p
z4Zq{yb`oj9J2+v=%$%8>Mz3!XP{xAk_!OAu#xi_
zh+zBS20c(?whns;$Y1o(2LWrzswNi!mNWnN^xn~HA3rRqo4&i}WUtOW`J`F*r4G8v7Xs5dAr
zme5ByMGc@7ReY0eI*-PlB97cdA&4>km#)XjUu~x|uGP8u39ekm_m2A4V0<9(OjAt7
zQ%m$XgLvTb?)3P#J{Fn2_ZOVRgQ113R`EP}8d>TfY2Cf1YJP?XIp
z98QQ+nN
z@=|*_gHznm?wRVv1~ZOmQtIZoa8>=csimh;i0w=;l<3tmu$sQWi;4csgyF-ng72q&
zLNA%wH3}C`-^5!pb=MZQoeeuT7(!D_15Az3DMxVugs5zWZ*c09DLeQ0f;fQZQe`X7
zWCSo~oQq&{04nYyct?@SDi-N6c@5yqSJl$o!~i@T9$#=D1XND=OV8c~pqUw0bl%Yb
zh<7`-O=SS?rh;ay9krw#@gvp@1h_hdUiwTe`FSvm^#2F{>#8G6Y;DuNc5kDcLt^(P
zC8qB;Ndz6lYDeZPQ;a?cweh|kQ8%Z7AZmTPY5QV6g@La?xfiucORp#q1ZHV3)c@Uu
z%R{NpUy~Asq7`Fz$nTHxD$P0#EiT@F8dVTsXkDi(bbBQeg#8^wuTh=rJmFftQ`$hy
zU&%Q76XC-l&?5h_mgz}^{K}YoCr$2iPE!jg?qtm8uq-zoyI6j7@s~#t3RTUq3`W)#
z=drCVn+R#k&-oJbKlm;a>$)8H?Pk)MpEzk7z8#hz`MYD*N=BI#OpmzYr~FOPl52;x
z9UpkA9NKl!oc36u%`dmJY=sHi&SP_2C2SV^;b0C!Uc-58g4f-dkRva{IpB7a!{)te#y%oO06l
zc?BCA9;%gb$X6~7;^k>~9z_ieKY|dhSz2rW>SUkiMZ+XH11F-ouS8+Nz61-JQhlIW
z)~IgyDt5vjUCoVoCz+cm@KuJ8t&Z^tza~u*GBNHts8V|~oVjgy1TIRIm91WUc{2(z
zGZPv>}*lBkV)iBW_4%j71SS>~M+GbYkhQn{&y
zV^4xNBxsi)?wY5P_>W{tLcJL7)m$Sp&+MLyfi}$Zhlnh!el}dKX(tOI24UP-dS-xh
z^lt5RTQ=5ukq*gn7aBhJ4+VUJvJ-
z?4jT-u>PO%RWetu@Ge=-L--TutD%QYI(#>};5?ZnjmL~-teAB5WG>F}TQkcRIj;u{
zA`VBwbk4j#tF%#OACT%mzXQqT+V!ea!56Vt@1A&`C?{_Xxfl(DlG9RE2eY6goFz^C
zBY8cf+4YYh`uNX&Wo5yK#$U+Fr`zECgPr&n(yJ|mC`uW
zomvG24zw{-O-ythwv*J+yi)oQweRYGB}pX7pFi}uR4$DAEhTO`ET0PJZ{^eTFTZcP
zRk4u$TpW+U7um{&{rN~#$8M>6w@82kZ{MMBQ&)O(_(C}elUv1Lv;3Rk^C;WcH-pPq
z|AphHxz4?2EH#l5oRVK#CN;;=nxZD=nYu1rTMWs=KXZ-p1w@}sTcE&M?SV~`na~@o
z?;sNd=a+kdd(ddyuwK?_J$KWB)E87Gv2@l(B{=cTt-M6;ER6&){coI(QhAMvx8_P8
z!#)|gtY2O+lHHYhk5W{dg8dRUIdbHSc;jNK<@BrfUL#h{D6O!dH48i~cj{6izFt9O
zwS{R3S$C{g9&gYQOrhx>yx-f!c}4?kzw|mT@43Sp?mQ8JGm|J^CMwgGj$cO<-(kL-
zDl;-ioL?*4S=xy_b5K%CC&&T`n-6rrz3O;@dX)HsV_ispn7J1FxagZIQ6~jUViOK8W}%x({%ZJi0T>|47;FfFAUNu5I)t*Lve5I46HU4s%4mLf5O
zDlIb==@nf?B@3zGKV~huKRf8XAINF1FW5ciz<4G@A+Cf9K@5JWPU(yCEeg%hkk6BR
z^BfiBc_i6)xhBCVnYs3Gjt4<1XW(xUN&ljHnWa{BInW`5`)XkUxS2Au3*%JS!xIYO_5sve-!D^^l^?LDPJQF*G
z&Pp@oy8n8X6NDvOa+b=%Q4QBap!=4u;A{uejq&w7rTNG033GMT6C$o#$_L|YZ&Zf(
za?isYh#}lEg|*=Kwz35cZT)Tyn*>cFQyN7CLjVRFVY
zC9e@%a-dAJ)zIjy*Og(NHprT9WIjUZ4ebg2D#eGAcb-#eI_bVQm&4VY8`tGb%Iae^
z*73MI!_{r>7ot_*dAV^ZQPFQdPBc}B#^k3}HAKtF$nt86&X{mIF5yq)H~VCniP5?1
zgW3k+hJq@|2)O|{xM{6k1f_7ncUlh8Vo53f(SG-u$@Jt7M{|7fz)VVDe7V?->LODUZ=AB7XN8(&2If-v}
zxmjX_q19EnE@2{Urniy){f4vz+A$f3HKsbz(
zx4kLkh?t)mYA`%NJ3+Khq#2y#tYK6oZr>2
zORbLVw_EIOCwt53(AEX=FU4qo7{(99wgUu5kGE=ZR-rkuOBqL@1zja-&)V#)W4I+<
z^K@)ncj^?9oNe#;KVk(Du77jibaAv{nm|+3l0LPY-F6T}7zTRAMA{$*r&A$_x`bCA
zFRkXMHXzXWQ3c)W763HP>XVf9RZv~$RipW$G<*1Eo#r*;?~vdl3|vZm`?q#LPS`q9
zbpbdu=qnvWA9I^t4SEDkrpyA=vrniF8&P5<~eW6
zX%y!~d@i8(w){0L&i)}GNJRZCUJieAs+*VHe+M$GDju)g>?sQVUIF0tQ|QwXR0WSv
zXJ`(hVq5hUvkIzKuOQmiS5eyl3+_iw_W-E#-lf%jDw6v`?^II7dSy=7Y#SAAEaS`W
zQI-Cv*V}0eYBwp)BwI^u0BQqReaKV{LTeVAQzfnW*N<*CRIHNd87T*FW51Or*8bPS
aPZ@N`b4f~7d~AQaZapnS*qht7q5lQj_n5E%
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-20.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-20.png
deleted file mode 100644
index b6ad054473b339c94a71850d66b1cc5d4f4b3072..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 738
zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VOS+@4BLl<6e(pbstU$g(vPY0F
z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>rpqc&7RKGH3zW91JXs
zQVbvy7=hT1Q5w#6W7J?^28%N>Ftlefut3%L0cjBM0Ai3H2+h2J5vm#}wtxw)T4Vt;
zf(_Ev7lH_LrE2-MV%c-Q;a8ZFbg%GJl1gJK$1g~gwGbKklWtX@4xPIKVtj*
z-n2&Z%;NW!=YM|vYvJ!&^W)Y*dAA4rkwT(Z8qJ<&NACB&Wx&GZq^jZ2Zc%!baf>PY
z!k1TqzZ|o#oUWx9y+JW1i8Z2PyWy?d4L1+YU`nWU$nHyJ{w&=eap$Ch)X#e%4L+T2
zEIsdQIqR0{s7(v5I3?Kn!gNWbRQF=NRh*u08H;XK?U^d`X71CEA97B9dc_&C#O}Ap
zUI*D@?_-KoRGzf|K6?J?q1nZjPxY_=mw&O3>FK0juQt!WHaYR!63;M>w$N7ARV(^!
zYHdXlI`aN~T-q7Ly8Oxg92KkVrwM&}TpX7q%U2v&aNuQc=h?$+qLt_0oHVC)(P}Yc
zX2YC`&z_uenQ?B1GvlW=$7eq4mOkD4Tj*9unrt9w5tG{TkY0uWb;wslK8%6KEv&rFJ!g`|}%NMgvuI-(&@W7!m
zw%yAuBU|(Q?G8Vj{qXs<=i4JomXzPrx0K@W-yT%4XHBNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l&DCJ@J#ddWzYh$IT%If%U}(=|V1cUf1JWSi0mL9Z5Sn=bBUCj|YylHowd?|B
z1RJF7?H8pqAjMhW5n0T@z%2~Ij105pNH8!km3q23hIsJ4o#yKi5-4)~|NFD;=gqAq
z%immN7RZvTH9<^tN~5Er?j{8%rL17-yR1#R%28V`yY4I#c1+TE;binbyze{r|bQ_}%i2k5BdV>*hTZ`>gWrexqCH
zQ{C{IDR+DQ%XP98#0+nI(77Ud;F_(NRo|6^CY6fPZ`&_^uHo^0{-NlY;}pit7bbDX
z*v0i{ztxP*c{?L_=8P);3-Na&G
zwy$tjsM)N;dmb>{+?O6qCE{|vVI&tn5*)@hz;5H&V1n09pXN}1)8%_^UFIq!R&
z!~836%ZW2>@lQTHh;(}u>h$!c_vMF`4&M*xtnhe#^sZE%>&6RZrbi3jXBq3stex)c
z&${9D!!=h{Zc=eiUVA;kwc(}Q`<*vB-WBuOdw=_tEO!uYa+#b2wW_o}(V
zb8|iCWcqqsc<`h=<+I!xi~T`|e=XRrr_tH8=B4DLF4@rBGR6sYQ@J(Yh`bB_*|cWI
ocmEsVSHtrpr#>jZ@t>oFbB^|2tvi3$TmYp`Pgg&ebxsLQ0072fLjV8(
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-40.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-40.png
deleted file mode 100644
index f7eff8ec7279fb86b240707643f50c49613433ac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1106
zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEa{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC{d9b;hE;^%b*2hb1<+l
zN-=;;U<6`2Mrk?m^lzvpDL-ffev
z)oEyOaVb>Lb{aZvFI;V
z&E!}pYQ$ocDC9$|50X!wAqH9qq}=<`k07c
zc*(U>uH=>D{8J5zMK%j{eHXF+k*lyNV$xK2$n;chPBv#^?cDghlWFh!4SB!EAD=M8
zc*%sI13Q;AF4JX<$yvM6vNrLsJ+JDAZ>LSPTGT&x8hM^N{Ym?|aa4x&!H|Q>Ulr7Y
zBsU!LIrGBee*(`&P1$=g_m?i^DK;(3<(rYkqc~NAF_dl1U!G3$q?2yRnp2)e%#NIx
zv;5ooO{+BSdvkd#FT6Qp?oNiA@6R&oE#6`ola`hFE5>1YU8(JhstYUG=e*i&xZ_4M
z>zq99kSTILU7t6H9Gbl3&UD))lXq!s6*;!F!Dd~>x=%c%T1~819rexD&Rnk@Y4N9X
z*%bHrOc$Ep*PHV6p0Ru?+`6)l`F8V-0DFE5n?(^31f2168c>iFD
z>(PJOhnE;W5ndXW>$da#VU|aicWs&VEJ0I&eS_6Y$&O~#D#J;a80TwLy`Q)4yw3ae
z1w#GzjxL>AQl+PwV8v&>>u`e1O~GsJe-2cqzbedl&J{e>_0`mQ26gU5*L%9(YBR13
z(A4w$E3ba>rg-F<`QN{PS<_g$`tOUpe3#enR-M^l{Ws7?c8)=Anv|+OtN5BPF3&f2
zyqvhX-MP}&=w6zstgf$i;oh}=4r$9@R7oE0y=S1M6YU%4{NH-ht*(ha68k%ruI@i9
z(Z9UlXT;kk+um2ZI?U5Dk6(^ajzfEDb;fGST
z?epEwsFyS586WLZKJaCU4cA|#ZQr;8^d43-&bXI!DY>gwY>vt%&KVDTeE;=2CORJ2
w7Ubc{!09w6$T8AhXLjDTYpGw}FEbK
zI0WIG3p6t&4sm-MS{edCW17IO2M^~i=VfYV2>{`W01y)o06QEjW(5F3)B#`>&za2w
z0P%o=Hrq3tM%ZN>mSAZKoZ#p~05?byIM@K<;4Db$yGDbQ0Iq+0FaX@T0&suJSaJBE
zOgT81`IosUpl@l8M*)9N>r%M>(+6Ye^2Oa8;tMdn7z_Xcq6Yv0_X^;gH$BE08`=|j
z-aGl;ws(L>ZLD+3oAz`qo0x%B@-=pc{Gg;@VgQTI$D0|*AMVmHR4<8wF};$yP^N5`
zpO|TKVxK&y)Ah)gE6GkrPR`~O?gebr>FE`>u&7~^9iS&_rr
zotrx3VR$36LdAtwl_ZUCMnF*e{uaC`kdz$~_stQea^NIMFJh?ZqOP5U05!sQLLvmg
z1!eZC%(-@$OA&t-u4$$5nTr|Y;X9D}4RoNt>R?y#+gB@W%_QBSvN5okqO52-`{~fw
zY5SwFC-!cTa9=vmsjpMnQ!~-3?n3iVVhGCLLdeU^)6}a9b)8UG9-%9-V`H^2*=D2A
zX*&t6se%Oe;j;98aFw7pHETLUMxB$%{gUOdZv0V#b-Q*`j^e9B&h-MUFM
zZp$~UdFbKlZ#IxGd$|Udc%L8D
z9;}7eMvQ>Xe2+|7&Fpu#LUENH#-PM?-$r#ea@*M428rQPFtE5?y7)-V!`xbmh%+jW
zmWxY!rX|fTa?9VZy^C0X1M9wNrB!0h?)}hbu;XFQ`y}>b>Fol-du=2^T=6V%n}ziS=OePRuBN&xevqh7?+ER1<(%z^PJxaXYMjUuC%Y8jvWBzmX!Qe@P7K)^w
z(^j4g>K-5MudYBN5>g9Sio4d>m=Tt<2vo!RBW`rf@dza~Yd4TLdHf#6>BDZ7kV*=*
zo9S~VS=v3tW7GEhovbCDr%>Oj%y{
zET@@P_!T+^Qc_P@X@@q)ubb(g*pCg+xzI}f{Ute4l^m`-fmoKVKqM+jZB|cJK^UMO
x_k2c)1Eq5uoH$JY?Df%KGY`R;;_g@d_qh~CJ>Ni6U3CurHmr%2ah(zV=HDR#iK+kq
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-60.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-60.png
deleted file mode 100644
index 94a50634180caf78cbf5570c037f01232373e9e1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1486
zcmah}c{tR09R3;7xXQJ1Wu2`nq{7O5GiDx5a^FVLNEk7$h>=a0U5X|Q!dNq{dyF$g
zMGY&JoMT3Ejd47+;|Q~3x2OGczt8i2-}m!A@B4Y4??2zWE--r$L0Lfn07M)eY~Wlr
zIRu!WdmHafM01JnswLDC02;7Ddx1x|vtqCV90~vlrvM-o0|2{RD|HC~Zt4NRN&vU@
z5CBd@7PntKT!aqsaJ&MA0-9V62Kabnfx`_vT$u65eb;t8>HzOQJ_rCZ!vMZ-85oxj
zj{_Hnoqw6PjOSaL>y?4Nr%lRu|I>%HR+kwhmjogmJW&83Byk8H;8C$O_f0*HHkPiT
zM_69oq4Jld4-7h{W>l}YL?I2uY<@>uCWEa6vIIxRs;~W+R4;g&2(G&Ac5hp?!DXpp
zdn8Cp`EiS;a`R*Hh7omH(&(sc_z#c*23hVNveKagVY^1-;*61q8&>l42QZ7WAl%vox7=0)?74%oq&pstXgBv<;FW6$w
zW%-e00&@6=d@sc2{(-#YbUfQ2(D*$nFw?UO85EgrjdXAqTC;l9ueA;fGKhE#Eq|Tk
ztl+)t9z=gro27IP6X_*Y^6_fktIxV^p>w&kfaiz_3u`dyAS2BT^T|G>_YAa@ea(j$
zC&}+xLmY~qRhcesuc=^5x~-EIw3jvhcN%khs5EKUUvY1?NQe<6@Q&E@AkPaU!wVxo
z`_(`fZ*-`wWTRDuB?NlQg2!5=UaK|Re%LV{GfD@Fav;~F(z%&)$fs}|%?
zGLwwh!B%%BjE;r-lO7lnh<9RKXWK>DB2Rj)w~X9_+ZU5)Y6$ZkGo8p_6C6#Olt3I~@~I(r96BMs#l57`A7*hIHhkenx%~E`_;eXixdb%0M)v
z9ZRJljKO60`jkZBt=TmbnTaC$SYv$hPxu+phIeFhEg!6}K4z6~*zX+CuHgDt;{J}_
zVsK?2_5(iGtJF>sJkH6BY_sNM&T0oN4M-9eP;Lcp{3xSLqQogh1&79Hy#VpVP^2U?
zq44+(fq07DPe`73Gkg|1=h~td8n07VefhdK{D`lv8idid
wsR<{>2u*K+DXG7NXrKiPS$HXQ>#F3zadJOep|7KZbNJCY+QMvVtpd{i29I#1H2?qr
diff --git a/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-76.png b/src/iOS/Resources/Assets.xcassets/AppIcons.appiconset/Icon-76.png
deleted file mode 100644
index d7b8f67756d193f1e5bf850c9f1c196fbf1e6aaa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1840
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