From df329d305b52eb2d9a250ea3c26e4b5c16594cd6 Mon Sep 17 00:00:00 2001
From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
Date: Wed, 21 Sep 2022 15:11:52 +0100
Subject: [PATCH] ios: replace "make connection" screen with two buttons
(#1084)
* ios: replace "make connection" screen with two buttons
* add "no chats", update translations
---
apps/ios/Shared/Model/SimpleXAPI.swift | 2 -
apps/ios/Shared/Views/ChatList/ChatHelp.swift | 3 +-
.../Shared/Views/ChatList/ChatListView.swift | 157 ++++++++++++------
.../Shared/Views/NewChat/NewChatButton.swift | 6 +-
.../Views/Onboarding/MakeConnection.swift | 150 -----------------
.../Views/Onboarding/OnboardingView.swift | 2 -
.../Onboarding/SetNotificationsMode.swift | 4 +-
.../Shared/Views/Onboarding/SimpleXInfo.swift | 2 +-
.../en.xcloc/Localized Contents/en.xliff | 61 ++-----
.../ru.xcloc/Localized Contents/ru.xliff | 61 ++-----
apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 -
apps/ios/ru.lproj/Localizable.strings | 35 +---
12 files changed, 143 insertions(+), 344 deletions(-)
delete mode 100644 apps/ios/Shared/Views/Onboarding/MakeConnection.swift
diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift
index fce1705c6..7cdc245cc 100644
--- a/apps/ios/Shared/Model/SimpleXAPI.swift
+++ b/apps/ios/Shared/Model/SimpleXAPI.swift
@@ -763,8 +763,6 @@ func startChat() throws {
withAnimation {
m.onboardingStage = m.onboardingStage == .step2_CreateProfile
? .step3_SetNotificationsMode
- : m.chats.isEmpty
- ? .step4_MakeConnection
: .onboardingComplete
}
}
diff --git a/apps/ios/Shared/Views/ChatList/ChatHelp.swift b/apps/ios/Shared/Views/ChatList/ChatHelp.swift
index 7c02bd64e..2aa6b0e7d 100644
--- a/apps/ios/Shared/Views/ChatList/ChatHelp.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatHelp.swift
@@ -11,6 +11,7 @@ import SwiftUI
struct ChatHelp: View {
@EnvironmentObject var chatModel: ChatModel
@Binding var showSettings: Bool
+ @State private var showAddChat = false
var body: some View {
VStack(alignment: .leading, spacing: 10) {
@@ -34,7 +35,7 @@ struct ChatHelp: View {
HStack(spacing: 8) {
Text("Tap button ")
- NewChatButton()
+ NewChatButton(showAddChat: $showAddChat)
Text("above, then choose:")
}
diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift
index 4c504eda8..71d39c29e 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift
@@ -15,65 +15,16 @@ struct ChatListView: View {
@State private var showSettings = false
@State private var searchText = ""
@State private var selectedChat: ChatId?
+ @State private var showAddChat = false
var body: some View {
let v = NavigationView {
- List {
- ForEach(filteredChats(), id: \.viewId) { chat in
- ChatListNavLink(chat: chat)
- .padding(.trailing, -16)
- .disabled(chatModel.chatRunning != true)
+ VStack {
+ if chatModel.chats.isEmpty {
+ onboardingButtons()
}
+ chatList
}
- .onChange(of: chatModel.chatId) { _ in
- selectedChat = chatModel.chatId
- if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
- chatModel.chatToTop = nil
- chatModel.popChat(chatId)
- }
- }
- .onChange(of: chatModel.chats.isEmpty) { empty in
- if !empty { return }
- withAnimation { chatModel.onboardingStage = .step4_MakeConnection }
- }
- .onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() }
- .onAppear() { connectViaUrl() }
- .offset(x: -8)
- .listStyle(.plain)
- .navigationTitle("Your chats")
- .navigationBarTitleDisplayMode(chatModel.chats.count > 8 ? .inline : .large)
- .toolbar {
- ToolbarItem(placement: .navigationBarLeading) {
- SettingsButton()
- }
- ToolbarItem(placement: .principal) {
- if (chatModel.incognito) {
- HStack {
- if (chatModel.chats.count > 8) {
- Text("Your chats").font(.headline)
- Spacer().frame(width: 16)
- }
- Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo)
- }
- }
- }
- ToolbarItem(placement: .navigationBarTrailing) {
- switch chatModel.chatRunning {
- case .some(true): NewChatButton()
- case .some(false): chatStoppedIcon()
- case .none: EmptyView()
- }
- }
- }
- .background(
- NavigationLink(
- destination: chatView(selectedChat),
- isActive: Binding(
- get: { selectedChat != nil },
- set: { _, _ in selectedChat = nil }
- )
- ) { EmptyView() }
- )
}
.navigationViewStyle(.stack)
@@ -84,6 +35,104 @@ struct ChatListView: View {
}
}
+ var chatList: some View {
+ List {
+ ForEach(filteredChats(), id: \.viewId) { chat in
+ ChatListNavLink(chat: chat)
+ .padding(.trailing, -16)
+ .disabled(chatModel.chatRunning != true)
+ }
+ }
+ .onChange(of: chatModel.chatId) { _ in
+ selectedChat = chatModel.chatId
+ if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
+ chatModel.chatToTop = nil
+ chatModel.popChat(chatId)
+ }
+ }
+ .onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() }
+ .onAppear() { connectViaUrl() }
+ .offset(x: -8)
+ .listStyle(.plain)
+ .navigationTitle("Your chats")
+ .navigationBarTitleDisplayMode(.inline)
+ .toolbar {
+ ToolbarItem(placement: .navigationBarLeading) {
+ SettingsButton()
+ }
+ ToolbarItem(placement: .principal) {
+ if (chatModel.incognito) {
+ HStack {
+ if (chatModel.chats.count > 8) {
+ Text("Your chats").font(.headline)
+ Spacer().frame(width: 16)
+ }
+ Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo)
+ }
+ }
+ }
+ ToolbarItem(placement: .navigationBarTrailing) {
+ switch chatModel.chatRunning {
+ case .some(true): NewChatButton(showAddChat: $showAddChat)
+ case .some(false): chatStoppedIcon()
+ case .none: EmptyView()
+ }
+ }
+ }
+ .background(
+ NavigationLink(
+ destination: chatView(selectedChat),
+ isActive: Binding(
+ get: { selectedChat != nil },
+ set: { _, _ in selectedChat = nil }
+ )
+ ) { EmptyView() }
+ )
+ }
+
+ private func onboardingButtons() -> some View {
+ VStack(alignment: .trailing, spacing: 0) {
+ Path { p in
+ p.move(to: CGPoint(x: 8, y: 0))
+ p.addLine(to: CGPoint(x: 16, y: 10))
+ p.addLine(to: CGPoint(x: 0, y: 10))
+ p.addLine(to: CGPoint(x: 8, y: 0))
+ }
+ .fill(Color.accentColor)
+ .frame(width: 20, height: 10)
+ .padding(.trailing, 12)
+
+ connectButton("Tap to start a new chat") {
+ showAddChat = true
+ }
+
+ connectButton("or chat with the developers") {
+ DispatchQueue.main.async {
+ UIApplication.shared.open(simplexTeamURL)
+ }
+ }
+ .padding(.top, 10)
+
+ Spacer()
+ Text("You have no chats")
+ .foregroundColor(.secondary)
+ .frame(maxWidth: .infinity)
+ }
+ .padding(.trailing, 6)
+ .frame(maxHeight: .infinity)
+ }
+
+ private func connectButton(_ label: LocalizedStringKey, action: @escaping () -> Void) -> some View {
+ Button(action: action) {
+ Text(label)
+ .padding(.vertical, 10)
+ .padding(.horizontal, 20)
+ }
+ .background(Color.accentColor)
+ .foregroundColor(.white)
+ .clipShape(RoundedRectangle(cornerRadius: 16))
+ }
+
@ViewBuilder private func chatView(_ chatId: ChatId?) -> some View {
if let chatId = chatId, let chat = chatModel.getChat(chatId) {
ChatView(chat: chat).onAppear {
diff --git a/apps/ios/Shared/Views/NewChat/NewChatButton.swift b/apps/ios/Shared/Views/NewChat/NewChatButton.swift
index 2fa981caf..9c5758111 100644
--- a/apps/ios/Shared/Views/NewChat/NewChatButton.swift
+++ b/apps/ios/Shared/Views/NewChat/NewChatButton.swift
@@ -19,13 +19,13 @@ enum NewChatAction: Identifiable {
}
struct NewChatButton: View {
- @State private var showAddChat = false
+ @Binding var showAddChat: Bool
@State private var connReq: String = ""
@State private var actionSheet: NewChatAction?
var body: some View {
Button { showAddChat = true } label: {
- Image(systemName: "plus.circle.fill")
+ Image(systemName: "square.and.pencil")
.resizable()
.scaledToFit()
.frame(width: 24, height: 24)
@@ -85,6 +85,6 @@ func connectionReqSentAlert(_ type: ConnReqType) {
struct NewChatButton_Previews: PreviewProvider {
static var previews: some View {
- NewChatButton()
+ NewChatButton(showAddChat: Binding.constant(false))
}
}
diff --git a/apps/ios/Shared/Views/Onboarding/MakeConnection.swift b/apps/ios/Shared/Views/Onboarding/MakeConnection.swift
deleted file mode 100644
index 81bee84d9..000000000
--- a/apps/ios/Shared/Views/Onboarding/MakeConnection.swift
+++ /dev/null
@@ -1,150 +0,0 @@
-//
-// MakeConnection.swift
-// SimpleX (iOS)
-//
-// Created by Evgeny on 07/05/2022.
-// Copyright © 2022 SimpleX Chat. All rights reserved.
-//
-
-import SwiftUI
-import SimpleXChat
-
-struct MakeConnection: View {
- @EnvironmentObject var m: ChatModel
- @State private var connReq: String = ""
- @State private var actionSheet: NewChatAction?
-
- var body: some View {
- VStack(alignment: .leading) {
- HStack {
- SettingsButton()
- if m.chatRunning == false {
- Spacer()
- chatStoppedIcon()
- }
- }
- .padding(.bottom, 1)
-
- if let user = m.currentUser {
- Text("Welcome \(user.displayName)!")
- .font(.largeTitle)
- .multilineTextAlignment(.leading)
- .padding(.bottom, 8)
- } else {
- Text("Make a private connection")
- .font(.largeTitle)
- .padding(.bottom)
- }
-
- ScrollView {
- VStack(alignment: .leading) {
- Text("To make your first private connection, choose **one of the following**:")
- .padding(.bottom)
-
- actionRow(
- icon: "link.badge.plus",
- title: "Create 1-time link / QR code",
- text: "It's secure to share - only one contact can use it."
- ) { addContactAction() }
-
- actionRow(
- icon: "doc.plaintext",
- title: "Paste the link you received",
- text: "Or open the link in the browser and tap **Open in mobile**."
- ) { actionSheet = .pasteLink }
-
- actionRow(
- icon: "qrcode.viewfinder",
- title: "Scan contact's QR code",
- text: "In person or via a video call – the most secure way to connect."
- ) { actionSheet = .scanQRCode }
-
- Text("or")
- .padding(.bottom)
- .frame(maxWidth: .infinity)
-
- actionRow(
- icon: "number",
- title: "Connect with the developers",
- text: "To ask any questions and to receive SimpleX Chat updates."
- ) {
- DispatchQueue.main.async {
- UIApplication.shared.open(simplexTeamURL)
- }
- }
- }
- .disabled(m.chatRunning != true)
- }
-
- Spacer()
-
- Button {
- withAnimation { m.onboardingStage = .step1_SimpleXInfo }
- } label: {
- HStack {
- Image(systemName: "lessthan")
- Text("About SimpleX")
- }
- }
- .padding(.bottom, 8)
- .padding(.bottom)
- }
- .sheet(item: $actionSheet) { sheet in
- switch sheet {
- case .createLink: AddContactView(connReqInvitation: connReq)
- case .pasteLink: PasteToConnectView()
- case .scanQRCode: ScanToConnectView()
- case .createGroup: EmptyView() // TODO refactor / show during onboarding?
- }
- }
- .onChange(of: actionSheet) { _ in checkOnboarding() }
- .onChange(of: m.chats.isEmpty) { _ in checkOnboarding() }
- .onChange(of: m.appOpenUrl) { _ in connectViaUrl() }
- .onAppear() { connectViaUrl() }
- .padding(.horizontal)
- .frame(maxHeight: .infinity, alignment: .top)
- }
-
- private func checkOnboarding() {
- if actionSheet == nil && !m.chats.isEmpty {
- withAnimation { m.onboardingStage = .onboardingComplete }
- }
- }
-
- private func addContactAction() {
- if let cReq = apiAddContact() {
- connReq = cReq
- actionSheet = .createLink
- }
- }
-
- private func actionRow(icon: String, title: LocalizedStringKey, text: LocalizedStringKey, action: @escaping () -> Void) -> some View {
- Button(action: action, label: {
- HStack(alignment: .top, spacing: 20) {
- Image(systemName: icon)
- .resizable()
- .scaledToFit()
- .frame(width: 30, height: 30)
- .padding(.leading, 4)
- .padding(.top, 6)
- VStack(alignment: .leading) {
- Group {
- Text(title).font(.headline)
- Text(text).foregroundColor(.primary)
- }
- .multilineTextAlignment(.leading)
- }
- }
- })
- .padding(.bottom)
- }
-}
-
-struct MakeConnection_Previews: PreviewProvider {
- static var previews: some View {
- let chatModel = ChatModel()
- chatModel.currentUser = User.sampleData
- return MakeConnection()
- .environmentObject(chatModel)
- }
-}
diff --git a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift
index 0b0189383..1ee8ecb6c 100644
--- a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift
+++ b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift
@@ -16,7 +16,6 @@ struct OnboardingView: View {
case .step1_SimpleXInfo: SimpleXInfo(onboarding: true)
case .step2_CreateProfile: CreateProfile()
case .step3_SetNotificationsMode: SetNotificationsMode()
- case .step4_MakeConnection: MakeConnection()
case .onboardingComplete: EmptyView()
}
}
@@ -26,7 +25,6 @@ enum OnboardingStage {
case step1_SimpleXInfo
case step2_CreateProfile
case step3_SetNotificationsMode
- case step4_MakeConnection
case onboardingComplete
}
diff --git a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift
index 87803512b..fa872e9c1 100644
--- a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift
+++ b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift
@@ -32,9 +32,7 @@ struct SetNotificationsMode: View {
} else {
AlertManager.shared.showAlertMsg(title: "No device token!")
}
- m.onboardingStage = m.chats.isEmpty
- ? .step4_MakeConnection
- : .onboardingComplete
+ m.onboardingStage = .onboardingComplete
} label: {
if case .off = notificationMode {
Text("Use chat")
diff --git a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift
index 821eab975..afd005458 100644
--- a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift
+++ b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift
@@ -78,7 +78,7 @@ struct OnboardingActionButton: View {
if m.currentUser == nil {
actionButton("Create your profile", onboarding: .step2_CreateProfile)
} else {
- actionButton("Make a private connection", onboarding: .step4_MakeConnection)
+ actionButton("Make a private connection", onboarding: .onboardingComplete)
}
}
diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
index 73768a7d8..24164130d 100644
--- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
+++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
@@ -463,11 +463,6 @@
Connect via relay
No comment provided by engineer.
-
- Connect with the developers
- Connect with the developers
- No comment provided by engineer.
-
Connecting to server…
Connecting to server…
@@ -553,11 +548,6 @@
Create
No comment provided by engineer.
-
- Create 1-time link / QR code
- Create 1-time link / QR code
- No comment provided by engineer.
-
Create address
Create address
@@ -1251,11 +1241,6 @@
Import database
No comment provided by engineer.
-
- In person or via a video call – the most secure way to connect.
- In person or via a video call – the most secure way to connect.
- No comment provided by engineer.
-
Incognito
Incognito
@@ -1353,11 +1338,6 @@ We will be adding server redundancy to prevent lost messages.
It seems like you are already connected via this link. If it is not the case, there was an error (%@).
No comment provided by engineer.
-
- It's secure to share - only one contact can use it.
- It's secure to share - only one contact can use it.
- No comment provided by engineer.
-
Join
Join
@@ -1653,11 +1633,6 @@ We will be adding server redundancy to prevent lost messages.
Open-source protocol and code – anybody can run the servers.
No comment provided by engineer.
-
- Or open the link in the browser and tap **Open in mobile**.
- Or open the link in the browser and tap **Open in mobile**.
- No comment provided by engineer.
-
PING interval
PING interval
@@ -1678,11 +1653,6 @@ We will be adding server redundancy to prevent lost messages.
Paste received link
No comment provided by engineer.
-
- Paste the link you received
- Paste the link you received
- No comment provided by engineer.
-
Paste the link you received into the box below to connect with your contact.
Paste the link you received into the box below to connect with your contact.
@@ -1943,11 +1913,6 @@ We will be adding server redundancy to prevent lost messages.
Scan QR code
No comment provided by engineer.
-
- Scan contact's QR code
- Scan contact's QR code
- No comment provided by engineer.
-
Search
Search
@@ -2148,6 +2113,11 @@ We will be adding server redundancy to prevent lost messages.
Tap to join incognito
No comment provided by engineer.
+
+ Tap to start a new chat
+ Tap to start a new chat
+ No comment provided by engineer.
+
Thank you for installing SimpleX Chat!
Thank you for installing SimpleX Chat!
@@ -2233,11 +2203,6 @@ We will be adding server redundancy to prevent lost messages.
This group no longer exists.
No comment provided by engineer.
-
- To ask any questions and to receive SimpleX Chat updates.
- To ask any questions and to receive SimpleX Chat updates.
- No comment provided by engineer.
-
To ask any questions and to receive updates:
To ask any questions and to receive updates:
@@ -2253,11 +2218,6 @@ We will be adding server redundancy to prevent lost messages.
To make a new connection
No comment provided by engineer.
-
- To make your first private connection, choose **one of the following**:
- To make your first private connection, choose **one of the following**:
- No comment provided by engineer.
-
To prevent the call interruption, enable Do Not Disturb mode.
To prevent the call interruption, enable Do Not Disturb mode.
@@ -2507,6 +2467,11 @@ To connect, please ask your contact to create another connection link and check
You could not be verified; please try again.
No comment provided by engineer.
+
+ You have no chats
+ You have no chats
+ No comment provided by engineer.
+
You have to enter passphrase every time the app starts - it is not stored on the device.
You have to enter passphrase every time the app starts - it is not stored on the device.
@@ -2966,9 +2931,9 @@ SimpleX servers cannot see your profile.
no e2e encryption
No comment provided by engineer.
-
- or
- or
+
+ or chat with the developers
+ or chat with the developers
No comment provided by engineer.
diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
index a608cf4e4..5335e08dc 100644
--- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
+++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff
@@ -463,11 +463,6 @@
Соединяться через сервер (relay)
No comment provided by engineer.
-
- Connect with the developers
- Соединиться с разработчиками
- No comment provided by engineer.
-
Connecting to server…
Устанавливается соединение с сервером…
@@ -553,11 +548,6 @@
Создать
No comment provided by engineer.
-
- Create 1-time link / QR code
- Создать ссылку / QR код
- No comment provided by engineer.
-
Create address
Создать адрес
@@ -1251,11 +1241,6 @@
Импорт архива чата
No comment provided by engineer.
-
- In person or via a video call – the most secure way to connect.
- При встрече или в видеозвонке – самый безопасный способ установить соединение
- No comment provided by engineer.
-
Incognito
Инкогнито
@@ -1353,11 +1338,6 @@ We will be adding server redundancy to prevent lost messages.
Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@).
No comment provided by engineer.
-
- It's secure to share - only one contact can use it.
- Ей безопасно поделиться - только один контакт может использовать её.
- No comment provided by engineer.
-
Join
Вступить
@@ -1653,11 +1633,6 @@ We will be adding server redundancy to prevent lost messages.
Открытый протокол и код - кто угодно может запустить сервер.
No comment provided by engineer.
-
- Or open the link in the browser and tap **Open in mobile**.
- Или откройте ссылку в браузере и нажмите **Open in mobile**.
- No comment provided by engineer.
-
PING interval
Интервал PING
@@ -1678,11 +1653,6 @@ We will be adding server redundancy to prevent lost messages.
Вставить полученную ссылку
No comment provided by engineer.
-
- Paste the link you received
- Вставьте полученную ссылку
- No comment provided by engineer.
-
Paste the link you received into the box below to connect with your contact.
Чтобы соединиться, вставьте ссылку, полученную от вашего контакта.
@@ -1943,11 +1913,6 @@ We will be adding server redundancy to prevent lost messages.
Сканировать QR код
No comment provided by engineer.
-
- Scan contact's QR code
- Сосканировать QR код контакта
- No comment provided by engineer.
-
Search
Поиск
@@ -2148,6 +2113,11 @@ We will be adding server redundancy to prevent lost messages.
Нажмите, чтобы вступить инкогнито
No comment provided by engineer.
+
+ Tap to start a new chat
+ Нажмите, чтобы начать чат
+ No comment provided by engineer.
+
Thank you for installing SimpleX Chat!
Спасибо, что установили SimpleX Chat!
@@ -2233,11 +2203,6 @@ We will be adding server redundancy to prevent lost messages.
Эта группа больше не существует.
No comment provided by engineer.
-
- To ask any questions and to receive SimpleX Chat updates.
- Чтобы задать вопросы и получать уведомления о SimpleX Chat.
- No comment provided by engineer.
-
To ask any questions and to receive updates:
Чтобы задать вопросы и получать уведомления о новых версиях,
@@ -2253,11 +2218,6 @@ We will be adding server redundancy to prevent lost messages.
Чтобы соединиться
No comment provided by engineer.
-
- To make your first private connection, choose **one of the following**:
- Чтобы добавить ваш первый контакт, выберите **одно из**:
- No comment provided by engineer.
-
To prevent the call interruption, enable Do Not Disturb mode.
Чтобы избежать прерывания звонков, включите режим Не Беспокоить.
@@ -2507,6 +2467,11 @@ To connect, please ask your contact to create another connection link and check
Верификация не удалась; пожалуйста, попробуйте ещё раз.
No comment provided by engineer.
+
+ You have no chats
+ У вас нет чатов
+ No comment provided by engineer.
+
You have to enter passphrase every time the app starts - it is not stored on the device.
Пароль не сохранен на устройстве — вы будете должны ввести его при каждом запуске чата.
@@ -2966,9 +2931,9 @@ SimpleX серверы не могут получить доступ к ваше
нет e2e шифрования
No comment provided by engineer.
-
- or
- или
+
+ or chat with the developers
+ или соединитесь с разработчиками
No comment provided by engineer.
diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj
index 6977e4445..fc9957d27 100644
--- a/apps/ios/SimpleX.xcodeproj/project.pbxproj
+++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj
@@ -76,7 +76,6 @@
5CB0BA8E2827126500B3292C /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA8D2827126500B3292C /* OnboardingView.swift */; };
5CB0BA90282713D900B3292C /* SimpleXInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA8F282713D900B3292C /* SimpleXInfo.swift */; };
5CB0BA92282713FD00B3292C /* CreateProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA91282713FD00B3292C /* CreateProfile.swift */; };
- 5CB0BA962827143500B3292C /* MakeConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA952827143500B3292C /* MakeConnection.swift */; };
5CB0BA9A2827FD8800B3292C /* HowItWorks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA992827FD8800B3292C /* HowItWorks.swift */; };
5CB2084F28DA4B4800D024EC /* RTCServers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2084E28DA4B4800D024EC /* RTCServers.swift */; };
5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; };
@@ -270,7 +269,6 @@
5CB0BA8D2827126500B3292C /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; };
5CB0BA8F282713D900B3292C /* SimpleXInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXInfo.swift; sourceTree = ""; };
5CB0BA91282713FD00B3292C /* CreateProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateProfile.swift; sourceTree = ""; };
- 5CB0BA952827143500B3292C /* MakeConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeConnection.swift; sourceTree = ""; };
5CB0BA992827FD8800B3292C /* HowItWorks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HowItWorks.swift; sourceTree = ""; };
5CB2084E28DA4B4800D024EC /* RTCServers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTCServers.swift; sourceTree = ""; };
5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = ""; };
@@ -530,7 +528,6 @@
5CB0BA992827FD8800B3292C /* HowItWorks.swift */,
5CB0BA91282713FD00B3292C /* CreateProfile.swift */,
5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */,
- 5CB0BA952827143500B3292C /* MakeConnection.swift */,
);
path = Onboarding;
sourceTree = "";
@@ -908,7 +905,6 @@
5C05DF532840AA1D00C683F9 /* CallSettings.swift in Sources */,
5CFE0921282EEAF60002594B /* ZoomableScrollView.swift in Sources */,
5C3A88CE27DF50170060F1C2 /* DetermineWidth.swift in Sources */,
- 5CB0BA962827143500B3292C /* MakeConnection.swift in Sources */,
5C7505A527B679EE00BE3227 /* NavLinkPlain.swift in Sources */,
5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */,
647F090E288EA27B00644C40 /* GroupMemberInfoView.swift in Sources */,
diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings
index 60219eb96..423c5db39 100644
--- a/apps/ios/ru.lproj/Localizable.strings
+++ b/apps/ios/ru.lproj/Localizable.strings
@@ -323,9 +323,6 @@
/* No comment provided by engineer. */
"Connect via relay" = "Соединяться через сервер (relay)";
-/* No comment provided by engineer. */
-"Connect with the developers" = "Соединиться с разработчиками";
-
/* No comment provided by engineer. */
"connected" = "соединение установлено";
@@ -413,9 +410,6 @@
/* No comment provided by engineer. */
"Create" = "Создать";
-/* No comment provided by engineer. */
-"Create 1-time link / QR code" = "Создать ссылку / QR код";
-
/* No comment provided by engineer. */
"Create address" = "Создать адрес";
@@ -860,9 +854,6 @@
/* No comment provided by engineer. */
"Import database" = "Импорт архива чата";
-/* No comment provided by engineer. */
-"In person or via a video call – the most secure way to connect." = "При встрече или в видеозвонке – самый безопасный способ установить соединение";
-
/* No comment provided by engineer. */
"Incognito" = "Инкогнито";
@@ -941,9 +932,6 @@
/* No comment provided by engineer. */
"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@).";
-/* No comment provided by engineer. */
-"It's secure to share - only one contact can use it." = "Ей безопасно поделиться - только один контакт может использовать её.";
-
/* No comment provided by engineer. */
"italic" = "курсив";
@@ -1149,10 +1137,7 @@
"Open-source protocol and code – anybody can run the servers." = "Открытый протокол и код - кто угодно может запустить сервер.";
/* No comment provided by engineer. */
-"or" = "или";
-
-/* No comment provided by engineer. */
-"Or open the link in the browser and tap **Open in mobile**." = "Или откройте ссылку в браузере и нажмите **Open in mobile**.";
+"or chat with the developers" = "или соединитесь с разработчиками";
/* No comment provided by engineer. */
"owner" = "владелец";
@@ -1166,9 +1151,6 @@
/* No comment provided by engineer. */
"Paste received link" = "Вставить полученную ссылку";
-/* No comment provided by engineer. */
-"Paste the link you received" = "Вставьте полученную ссылку";
-
/* No comment provided by engineer. */
"Paste the link you received into the box below to connect with your contact." = "Чтобы соединиться, вставьте ссылку, полученную от вашего контакта.";
@@ -1340,9 +1322,6 @@
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "Сохраненные WebRTC ICE серверы будут удалены";
-/* No comment provided by engineer. */
-"Scan contact's QR code" = "Сосканировать QR код контакта";
-
/* No comment provided by engineer. */
"Scan QR code" = "Сканировать QR код";
@@ -1472,6 +1451,9 @@
/* No comment provided by engineer. */
"Tap to join incognito" = "Нажмите, чтобы вступить инкогнито";
+/* No comment provided by engineer. */
+"Tap to start a new chat" = "Нажмите, чтобы начать чат";
+
/* No comment provided by engineer. */
"TCP connection timeout" = "Таймаут TCP соединения";
@@ -1538,9 +1520,6 @@
/* No comment provided by engineer. */
"This group no longer exists." = "Эта группа больше не существует.";
-/* No comment provided by engineer. */
-"To ask any questions and to receive SimpleX Chat updates." = "Чтобы задать вопросы и получать уведомления о SimpleX Chat.";
-
/* No comment provided by engineer. */
"To ask any questions and to receive updates:" = "Чтобы задать вопросы и получать уведомления о новых версиях,";
@@ -1550,9 +1529,6 @@
/* No comment provided by engineer. */
"To make a new connection" = "Чтобы соединиться";
-/* No comment provided by engineer. */
-"To make your first private connection, choose **one of the following**:" = "Чтобы добавить ваш первый контакт, выберите **одно из**:";
-
/* No comment provided by engineer. */
"To prevent the call interruption, enable Do Not Disturb mode." = "Чтобы избежать прерывания звонков, включите режим Не Беспокоить.";
@@ -1733,6 +1709,9 @@
/* No comment provided by engineer. */
"You could not be verified; please try again." = "Верификация не удалась; пожалуйста, попробуйте ещё раз.";
+/* No comment provided by engineer. */
+"You have no chats" = "У вас нет чатов";
+
/* No comment provided by engineer. */
"You have to enter passphrase every time the app starts - it is not stored on the device." = "Пароль не сохранен на устройстве — вы будете должны ввести его при каждом запуске чата.";