diff --git a/apps/ios/Shared/Assets.xcassets/github.imageset/Contents.json b/apps/ios/Shared/Assets.xcassets/github.imageset/Contents.json new file mode 100644 index 0000000000..e30e4bc7ce --- /dev/null +++ b/apps/ios/Shared/Assets.xcassets/github.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "github32px.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "github64px.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "github64px-1.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/Shared/Assets.xcassets/github.imageset/github32px.png b/apps/ios/Shared/Assets.xcassets/github.imageset/github32px.png new file mode 100644 index 0000000000..8b25551a97 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/github.imageset/github32px.png differ diff --git a/apps/ios/Shared/Assets.xcassets/github.imageset/github64px-1.png b/apps/ios/Shared/Assets.xcassets/github.imageset/github64px-1.png new file mode 100644 index 0000000000..182a1a3f73 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/github.imageset/github64px-1.png differ diff --git a/apps/ios/Shared/Assets.xcassets/github.imageset/github64px.png b/apps/ios/Shared/Assets.xcassets/github.imageset/github64px.png new file mode 100644 index 0000000000..182a1a3f73 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/github.imageset/github64px.png differ diff --git a/apps/ios/Shared/Assets.xcassets/logo.imageset/Contents.json b/apps/ios/Shared/Assets.xcassets/logo.imageset/Contents.json new file mode 100644 index 0000000000..8fcba17f9c --- /dev/null +++ b/apps/ios/Shared/Assets.xcassets/logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "logo-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "logo-1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "logo.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-1.png b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-1.png new file mode 100644 index 0000000000..7f25ea17d0 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-1.png differ diff --git a/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-2.png b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-2.png new file mode 100644 index 0000000000..7f25ea17d0 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo-2.png differ diff --git a/apps/ios/Shared/Assets.xcassets/logo.imageset/logo.png b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo.png new file mode 100644 index 0000000000..7f25ea17d0 Binary files /dev/null and b/apps/ios/Shared/Assets.xcassets/logo.imageset/logo.png differ diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index db216b2fe9..91265fb85f 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -100,7 +100,7 @@ final class ChatModel: ObservableObject { } } -struct User: Decodable { +struct User: Decodable, NamedChat { var userId: Int64 var userContactId: Int64 var localDisplayName: ContactName @@ -115,6 +115,10 @@ struct User: Decodable { // self.activeUser = activeUser // } + var displayName: String { get { profile.displayName } } + + var fullName: String { get { profile.fullName } } + static let sampleData = User( userId: 1, userContactId: 1, diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index ccfb4b89f1..5eda7af1c3 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -16,6 +16,7 @@ struct ChatView: View { @Environment(\.colorScheme) var colorScheme @ObservedObject var chat: Chat @State private var inProgress: Bool = false + @FocusState private var keyboardVisible: Bool @State private var showChatInfo = false var body: some View { @@ -32,8 +33,16 @@ struct ChatView: View { } .onAppear { scrollToBottom(proxy) } .onChange(of: chatModel.chatItems.count) { _ in scrollToBottom(proxy) } + .onChange(of: keyboardVisible) { _ in + if keyboardVisible { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) { + scrollToBottom(proxy, animation: .easeInOut(duration: 1)) + } + } + } } } + .coordinateSpace(name: "scrollView") .onTapGesture { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) } @@ -42,7 +51,11 @@ struct ChatView: View { Spacer(minLength: 0) - SendMessageView(sendMessage: sendMessage, inProgress: inProgress) + SendMessageView( + sendMessage: sendMessage, + inProgress: inProgress, + keyboardVisible: $keyboardVisible + ) } .navigationTitle(cInfo.chatViewName) .navigationBarTitleDisplayMode(.inline) @@ -85,9 +98,9 @@ struct ChatView: View { .navigationBarBackButtonHidden(true) } - func scrollToBottom(_ proxy: ScrollViewProxy) { + func scrollToBottom(_ proxy: ScrollViewProxy, animation: Animation = .default) { if let id = chatModel.chatItems.last?.id { - withAnimation { + withAnimation(animation) { proxy.scrollTo(id, anchor: .bottom) } } diff --git a/apps/ios/Shared/Views/Chat/SendMessageView.swift b/apps/ios/Shared/Views/Chat/SendMessageView.swift index d5d075b305..60e9144568 100644 --- a/apps/ios/Shared/Views/Chat/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/SendMessageView.swift @@ -13,6 +13,7 @@ struct SendMessageView: View { var inProgress: Bool = false @State private var message: String = "" //Lorem ipsum dolor sit amet, consectetur" // adipiscing elit, sed do eiusmod tempor incididunt ut labor7 et dolore magna aliqua. Ut enim ad minim veniam, quis"// nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."// Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." @Namespace var namespace + @FocusState.Binding var keyboardVisible: Bool @State private var teHeight: CGFloat = 42 @State private var teFont: Font = .body var maxHeight: CGFloat = 360 @@ -31,8 +32,9 @@ struct SendMessageView: View { .background(GeometryReader(content: updateHeight)) TextEditor(text: $message) .onSubmit(submit) + .focused($keyboardVisible) .font(teFont) - .textInputAutocapitalization(.never) + .textInputAutocapitalization(.sentences) .padding(.horizontal, 5) .allowsTightening(false) .frame(height: teHeight) @@ -79,10 +81,15 @@ struct SendMessageView: View { struct SendMessageView_Previews: PreviewProvider { static var previews: some View { - VStack { + @FocusState var keyboardVisible: Bool + + return VStack { Text("") Spacer(minLength: 0) - SendMessageView(sendMessage: { print ($0) }) + SendMessageView( + sendMessage: { print ($0) }, + keyboardVisible: $keyboardVisible + ) } } } diff --git a/apps/ios/Shared/Views/ChatList/ChatHelp.swift b/apps/ios/Shared/Views/ChatList/ChatHelp.swift new file mode 100644 index 0000000000..c1b5e1492c --- /dev/null +++ b/apps/ios/Shared/Views/ChatList/ChatHelp.swift @@ -0,0 +1,66 @@ +// +// ChatHelp.swift +// SimpleX +// +// Created by Evgeny Poberezkin on 10/02/2022. +// Copyright © 2022 SimpleX Chat. All rights reserved. +// + +import SwiftUI + +struct ChatHelp: View { + @EnvironmentObject var chatModel: ChatModel + @Binding var showSettings: Bool + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + Text("Thank you for installing SimpleX Chat!") + + HStack(spacing: 4) { + Text("You can") + Button("connect to SimpleX team.") { + showSettings = false + DispatchQueue.main.async { + UIApplication.shared.open(simplexTeamURL) + } + } + } + + VStack(alignment: .leading, spacing: 10) { + Text("To start a new chat") + .font(.title2) + .fontWeight(.bold) + + HStack(spacing: 8) { + Text("Tap button ") + NewChatButton() + Text("above, then:") + } + + Text("**Add new contact**: to create your one-time QR Code for your contact.") + Text("**Scan QR code**: to connect to your contact who shows QR code to you.") + } + .padding(.top, 24) + + VStack(alignment: .leading, spacing: 10) { + Text("To connect via link") + .font(.title2) + .fontWeight(.bold) + + Text("If you received SimpleX Chat invitation link you can open it in your browser:") + + Text("💻 desktop: scan displayed QR code from the app, via **Scan QR code**.") + Text("📱 mobile: tap **Open in mobile app**, then tap **Connect** in the app.") + } + .padding(.top, 24) + } + .padding() + } +} + +struct ChatHelp_Previews: PreviewProvider { + static var previews: some View { + @State var showSettings = false + return ChatHelp(showSettings: $showSettings) + } +} diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index bdc3c815cc..af43f7badc 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -12,40 +12,43 @@ struct ChatListView: View { @EnvironmentObject var chatModel: ChatModel @State private var connectAlert = false @State private var connectError: Error? + // not really used in this view + @State private var showSettings = false var user: User var body: some View { - VStack { -// if chatModel.chats.isEmpty { -// VStack { -// Text("Hello chat") -// Text("Active user: \(user.localDisplayName) (\(user.profile.fullName))") -// } -// } - - NavigationView { - List { - ForEach(chatModel.chats) { chat in - ChatListNavLink(chat: chat) + NavigationView { + List { + if chatModel.chats.isEmpty { + VStack(alignment: .leading) { + ChatHelp(showSettings: $showSettings) + HStack { + Text("This text is available in settings") + SettingsButton() + } + .padding(.leading) } } - .padding(0) - .offset(x: -8) - .listStyle(.plain) - .navigationTitle("Your chats") - .toolbar { - ToolbarItem(placement: .navigationBarLeading) { - SettingsButton() - } - ToolbarItem(placement: .navigationBarTrailing) { - NewChatButton() - } + ForEach(chatModel.chats) { chat in + ChatListNavLink(chat: chat) } - .alert(isPresented: $chatModel.connectViaUrl) { connectViaUrlAlert() } } - .alert(isPresented: $connectAlert) { connectionErrorAlert() } + .offset(x: -8) + .listStyle(.plain) + .navigationTitle(chatModel.chats.isEmpty ? "Welcome \(user.displayName)!" : "Your chats") + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + SettingsButton() + } + ToolbarItem(placement: .navigationBarTrailing) { + NewChatButton() + } + } + .alert(isPresented: $chatModel.connectViaUrl) { connectViaUrlAlert() } } + .navigationViewStyle(.stack) + .alert(isPresented: $connectAlert) { connectionErrorAlert() } } private func connectViaUrlAlert() -> Alert { @@ -106,7 +109,11 @@ struct ChatListView_Previews: PreviewProvider { ) ] - return ChatListView(user: User.sampleData) - .environmentObject(chatModel) + return Group { + ChatListView(user: User.sampleData) + .environmentObject(chatModel) + ChatListView(user: User.sampleData) + .environmentObject(ChatModel()) + } } } diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 012f57791f..741b55e9a2 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -72,7 +72,7 @@ struct ChatPreviewView: View { struct ChatPreviewView_Previews: PreviewProvider { static var previews: some View { - Group{ + Group { ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.direct, chatItems: [] diff --git a/apps/ios/Shared/Views/NewChat/NewChatButton.swift b/apps/ios/Shared/Views/NewChat/NewChatButton.swift index ba495dfd21..0064ac9292 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatButton.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatButton.swift @@ -21,7 +21,7 @@ struct NewChatButton: View { var body: some View { Button { showAddChat = true } label: { - Image(systemName: "square.and.pencil") + Image(systemName: "person.crop.circle.badge.plus") } .confirmationDialog("Start new chat", isPresented: $showAddChat, titleVisibility: .visible) { Button("Add contact") { addContactAction() } diff --git a/apps/ios/Shared/Views/TerminalView.swift b/apps/ios/Shared/Views/TerminalView.swift index 2410ff37ba..74015c2def 100644 --- a/apps/ios/Shared/Views/TerminalView.swift +++ b/apps/ios/Shared/Views/TerminalView.swift @@ -11,7 +11,8 @@ import SwiftUI struct TerminalView: View { @EnvironmentObject var chatModel: ChatModel @State var inProgress: Bool = false - + @FocusState private var keyboardVisible: Bool + var body: some View { VStack { ScrollViewReader { proxy in @@ -22,29 +23,45 @@ struct TerminalView: View { ScrollView { Text(item.details) .textSelection(.enabled) + .padding() } } label: { - Text(item.label) - .frame(width: 360, height: 30, alignment: .leading) + HStack { + Text(item.id.formatted(date: .omitted, time: .standard)) + Text(item.label) + .frame(maxWidth: .infinity, maxHeight: 30, alignment: .leading) + } + .padding(.horizontal) } } .onAppear { scrollToBottom(proxy) } .onChange(of: chatModel.terminalItems.count) { _ in scrollToBottom(proxy) } + .onChange(of: keyboardVisible) { _ in + if keyboardVisible { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) { + scrollToBottom(proxy, animation: .easeInOut(duration: 1)) + } + } + } } } Spacer() - SendMessageView(sendMessage: sendMessage, inProgress: inProgress) + SendMessageView( + sendMessage: sendMessage, + inProgress: inProgress, + keyboardVisible: $keyboardVisible + ) } } .navigationViewStyle(.stack) .navigationTitle("Chat console") } - func scrollToBottom(_ proxy: ScrollViewProxy) { + func scrollToBottom(_ proxy: ScrollViewProxy, animation: Animation = .default) { if let id = chatModel.terminalItems.last?.id { - withAnimation { + withAnimation(animation) { proxy.scrollTo(id, anchor: .bottom) } } diff --git a/apps/ios/Shared/Views/UserSettings/SettingsButton.swift b/apps/ios/Shared/Views/UserSettings/SettingsButton.swift index f735214086..7bfc2eec49 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsButton.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsButton.swift @@ -17,7 +17,7 @@ struct SettingsButton: View { Image(systemName: "gearshape") } .sheet(isPresented: $showSettings, content: { - SettingsView() + SettingsView(showSettings: $showSettings) .onAppear { do { chatModel.userAddress = try apiGetUserAddress() diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index 9d901956e3..35d969e1f0 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -8,8 +8,11 @@ import SwiftUI +let simplexTeamURL = URL(string: "simplex:/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23MCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%3D")! + struct SettingsView: View { @EnvironmentObject var chatModel: ChatModel + @Binding var showSettings: Bool var body: some View { let user: User = chatModel.currentUser! @@ -44,11 +47,59 @@ struct SettingsView: View { } } + Section("Help") { + NavigationLink { + VStack(alignment: .leading, spacing: 10) { + Text("Welcome \(user.displayName)!") + .font(.largeTitle) + .padding(.leading) + Divider() + ChatHelp(showSettings: $showSettings) + } + .frame(maxHeight: .infinity, alignment: .top) + } label: { + HStack { + Image(systemName: "questionmark.circle") + .padding(.trailing, 8) + Text("How to use SimpleX Chat") + } + } + HStack { + Image(systemName: "number") + .padding(.trailing, 8) + Button { + showSettings = false + DispatchQueue.main.async { + UIApplication.shared.open(simplexTeamURL) + } + } label: { + Text("Get help & advice via chat") + } + } + HStack { + Image(systemName: "envelope") + .padding(.trailing, 4) + Text("[Ask questions via email](mailto:chat@simplex.chat)") + } + } + Section("Develop") { NavigationLink { TerminalView() } label: { - Text("Chat console") + HStack { + Image(systemName: "terminal") + .frame(maxWidth: 24) + .padding(.trailing, 8) + Text("Chat console") + } + } + HStack { + Image("github") + .resizable() + .frame(width: 24, height: 24) + .padding(.trailing, 8) + Text("Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)") } } @@ -65,7 +116,9 @@ struct SettingsView_Previews: PreviewProvider { static var previews: some View { let chatModel = ChatModel() chatModel.currentUser = User.sampleData - return SettingsView() + @State var showSettings = false + + return SettingsView(showSettings: $showSettings) .environmentObject(chatModel) } } diff --git a/apps/ios/Shared/Views/WelcomeView.swift b/apps/ios/Shared/Views/WelcomeView.swift index 0daf7c44db..02ab3d1653 100644 --- a/apps/ios/Shared/Views/WelcomeView.swift +++ b/apps/ios/Shared/Views/WelcomeView.swift @@ -13,30 +13,44 @@ struct WelcomeView: View { @State var fullName: String = "" var body: some View { - VStack(alignment: .leading) { - Text("Create profile") - .font(.largeTitle) - .padding(.bottom) - Text("Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile.") - .padding(.bottom) - TextField("Display name", text: $displayName) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .padding(.bottom) - TextField("Full name (optional)", text: $fullName) - .textInputAutocapitalization(.never) - .disableAutocorrection(true) - .padding(.bottom) - Button("Create") { - let profile = Profile( - displayName: displayName, - fullName: fullName - ) - do { - let user = try apiCreateActiveUser(profile) - chatModel.currentUser = user - } catch { - fatalError("Failed to create user: \(error)") + GeometryReader { g in + VStack(alignment: .leading) { + Image("logo") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: g.size.width * 0.7) + .padding(.vertical) + Text("You control your chat!") + .font(.title) + .padding(.bottom) + Text("The messaging and application platform protecting your privacy and security.") + .padding(.bottom, 8) + Text("We don't store any of your contacts or messages (once delivered) on the servers.") + .padding(.bottom, 24) + Text("Create profile") + .font(.largeTitle) + .padding(.bottom) + Text("Your profile is stored on your device and shared only with your contacts.") + .padding(.bottom) + TextField("Display name", text: $displayName) + .textInputAutocapitalization(.never) + .disableAutocorrection(true) + .padding(.bottom) + TextField("Full name (optional)", text: $fullName) + .textInputAutocapitalization(.never) + .disableAutocorrection(true) + .padding(.bottom) + Button("Create") { + let profile = Profile( + displayName: displayName, + fullName: fullName + ) + do { + let user = try apiCreateActiveUser(profile) + chatModel.currentUser = user + } catch { + fatalError("Failed to create user: \(error)") + } } } } diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 84ada554d9..752c52f814 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -21,17 +21,19 @@ 5C2E261027A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; }; 5C2E261227A30FEA00F70299 /* TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E261127A30FEA00F70299 /* TerminalView.swift */; }; 5C2E261327A30FEA00F70299 /* TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E261127A30FEA00F70299 /* TerminalView.swift */; }; - 5C35CF6F27B031FB00FB6C6D /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C35CF6A27B031FB00FB6C6D /* libgmpxx.a */; }; - 5C35CF7027B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C35CF6B27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a */; }; - 5C35CF7127B031FB00FB6C6D /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C35CF6C27B031FB00FB6C6D /* libgmp.a */; }; - 5C35CF7227B031FB00FB6C6D /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C35CF6D27B031FB00FB6C6D /* libffi.a */; }; - 5C35CF7327B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C35CF6E27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a */; }; 5C35CFC827B2782E00FB6C6D /* BGManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFC727B2782E00FB6C6D /* BGManager.swift */; }; 5C35CFC927B2782E00FB6C6D /* BGManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFC727B2782E00FB6C6D /* BGManager.swift */; }; 5C35CFCB27B2E91D00FB6C6D /* NtfManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFCA27B2E91D00FB6C6D /* NtfManager.swift */; }; 5C35CFCC27B2E91D00FB6C6D /* NtfManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFCA27B2E91D00FB6C6D /* NtfManager.swift */; }; + 5C5346A827B59A6A004DF848 /* ChatHelp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5346A727B59A6A004DF848 /* ChatHelp.swift */; }; + 5C5346A927B59A6A004DF848 /* ChatHelp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5346A727B59A6A004DF848 /* ChatHelp.swift */; }; 5C6AD81327A834E300348BD7 /* NewChatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6AD81227A834E300348BD7 /* NewChatButton.swift */; }; 5C6AD81427A834E300348BD7 /* NewChatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6AD81227A834E300348BD7 /* NewChatButton.swift */; }; + 5C75059C27B5CD9300BE3227 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C75059727B5CD9300BE3227 /* libgmp.a */; }; + 5C75059D27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C75059827B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a */; }; + 5C75059E27B5CD9300BE3227 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C75059927B5CD9300BE3227 /* libffi.a */; }; + 5C75059F27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C75059A27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a */; }; + 5C7505A027B5CD9300BE3227 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C75059B27B5CD9300BE3227 /* libgmpxx.a */; }; 5C764E80279C7276000C6508 /* dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C764E7F279C7276000C6508 /* dummy.m */; }; 5C764E81279C7276000C6508 /* dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C764E7F279C7276000C6508 /* dummy.m */; }; 5C764E82279C748B000C6508 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C764E7B279C71D4000C6508 /* libiconv.tbd */; }; @@ -115,15 +117,16 @@ 5C2E260A27A30CFA00F70299 /* ChatListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = ""; }; 5C2E260E27A30FDC00F70299 /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = ""; }; 5C2E261127A30FEA00F70299 /* TerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalView.swift; sourceTree = ""; }; - 5C35CF6A27B031FB00FB6C6D /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5C35CF6B27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a"; sourceTree = ""; }; - 5C35CF6C27B031FB00FB6C6D /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5C35CF6D27B031FB00FB6C6D /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5C35CF6E27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a"; sourceTree = ""; }; 5C35CFC727B2782E00FB6C6D /* BGManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGManager.swift; sourceTree = ""; }; 5C35CFCA27B2E91D00FB6C6D /* NtfManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NtfManager.swift; sourceTree = ""; }; 5C422A7C27A9A6FA0097A1E1 /* SimpleX (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "SimpleX (iOS).entitlements"; sourceTree = ""; }; + 5C5346A727B59A6A004DF848 /* ChatHelp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatHelp.swift; sourceTree = ""; }; 5C6AD81227A834E300348BD7 /* NewChatButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewChatButton.swift; sourceTree = ""; }; + 5C75059727B5CD9300BE3227 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5C75059827B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a"; sourceTree = ""; }; + 5C75059927B5CD9300BE3227 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5C75059A27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a"; sourceTree = ""; }; + 5C75059B27B5CD9300BE3227 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 5C764E7B279C71D4000C6508 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/libiconv.tbd; sourceTree = DEVELOPER_DIR; }; 5C764E7C279C71DB000C6508 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; 5C764E7D279C7275000C6508 /* SimpleX (iOS)-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SimpleX (iOS)-Bridging-Header.h"; sourceTree = ""; }; @@ -166,14 +169,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5C35CF7027B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a in Frameworks */, - 5C35CF6F27B031FB00FB6C6D /* libgmpxx.a in Frameworks */, 5C8F01CD27A6F0D8007D2C8D /* CodeScanner in Frameworks */, + 5C75059E27B5CD9300BE3227 /* libffi.a in Frameworks */, 5C764E83279C748B000C6508 /* libz.tbd in Frameworks */, - 5C35CF7327B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a in Frameworks */, - 5C35CF7227B031FB00FB6C6D /* libffi.a in Frameworks */, - 5C35CF7127B031FB00FB6C6D /* libgmp.a in Frameworks */, + 5C75059F27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a in Frameworks */, + 5C7505A027B5CD9300BE3227 /* libgmpxx.a in Frameworks */, + 5C75059C27B5CD9300BE3227 /* libgmp.a in Frameworks */, 5C764E82279C748B000C6508 /* libiconv.tbd in Frameworks */, + 5C75059D27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -233,11 +236,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5C35CF6D27B031FB00FB6C6D /* libffi.a */, - 5C35CF6C27B031FB00FB6C6D /* libgmp.a */, - 5C35CF6A27B031FB00FB6C6D /* libgmpxx.a */, - 5C35CF6E27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ-ghc8.10.7.a */, - 5C35CF6B27B031FB00FB6C6D /* libHSsimplex-chat-1.1.0-Cr0nZom8Et1JJ5D58xT8LZ.a */, + 5C75059927B5CD9300BE3227 /* libffi.a */, + 5C75059727B5CD9300BE3227 /* libgmp.a */, + 5C75059B27B5CD9300BE3227 /* libgmpxx.a */, + 5C75059827B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj-ghc8.10.7.a */, + 5C75059A27B5CD9300BE3227 /* libHSsimplex-chat-1.1.1-GMOrBlCwBvRIONTwKLN6tj.a */, ); path = Libraries; sourceTree = ""; @@ -365,6 +368,7 @@ isa = PBXGroup; children = ( 5C2E260A27A30CFA00F70299 /* ChatListView.swift */, + 5C5346A727B59A6A004DF848 /* ChatHelp.swift */, 5CB9250C27A9432000ACCCDD /* ChatListNavLink.swift */, 5C063D2627A4564100AEC577 /* ChatPreviewView.swift */, 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */, @@ -553,6 +557,7 @@ 5CE4407627ADB66A007B033A /* TextItemView.swift in Sources */, 5CB924E127A867BA00ACCCDD /* UserProfile.swift in Sources */, 5CE4407927ADB701007B033A /* EmojiItemView.swift in Sources */, + 5C5346A827B59A6A004DF848 /* ChatHelp.swift in Sources */, 5C764E80279C7276000C6508 /* dummy.m in Sources */, 5CB924E427A8683A00ACCCDD /* UserAddress.swift in Sources */, 5C063D2727A4564100AEC577 /* ChatPreviewView.swift in Sources */, @@ -592,6 +597,7 @@ 5CE4407727ADB66A007B033A /* TextItemView.swift in Sources */, 5CB924E227A867BA00ACCCDD /* UserProfile.swift in Sources */, 5CE4407A27ADB701007B033A /* EmojiItemView.swift in Sources */, + 5C5346A927B59A6A004DF848 /* ChatHelp.swift in Sources */, 5C764E81279C7276000C6508 /* dummy.m in Sources */, 5CB924E527A8683A00ACCCDD /* UserAddress.swift in Sources */, 5C063D2827A4564100AEC577 /* ChatPreviewView.swift in Sources */, @@ -775,7 +781,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 6; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -792,10 +798,10 @@ "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Libraries"; + LIBRARY_SEARCH_PATHS = ""; "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = "$(PROJECT_DIR)/Libraries/ios"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = "$(PROJECT_DIR)/Libraries/sim"; - MARKETING_VERSION = 0.2.2; + MARKETING_VERSION = 0.3; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos; @@ -815,7 +821,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 6; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -832,10 +838,10 @@ "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Libraries"; + LIBRARY_SEARCH_PATHS = ""; "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = "$(PROJECT_DIR)/Libraries/ios"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = "$(PROJECT_DIR)/Libraries/sim"; - MARKETING_VERSION = 0.2.2; + MARKETING_VERSION = 0.3; PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app; PRODUCT_NAME = SimpleX; SDKROOT = iphoneos;