From 98fc6c6adf2c7d8122a254c453fa552202206679 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 11 Feb 2022 07:42:00 +0000 Subject: [PATCH] chat usage help and minor UI fixes (#291) * chat usage help and minor UI fixes * update version, build and binary --- .../github.imageset/Contents.json | 23 ++++++ .../github.imageset/github32px.png | Bin 0 -> 1714 bytes .../github.imageset/github64px-1.png | Bin 0 -> 2625 bytes .../github.imageset/github64px.png | Bin 0 -> 2625 bytes .../logo.imageset/Contents.json | 23 ++++++ .../Assets.xcassets/logo.imageset/logo-1.png | Bin 0 -> 19731 bytes .../Assets.xcassets/logo.imageset/logo-2.png | Bin 0 -> 19731 bytes .../Assets.xcassets/logo.imageset/logo.png | Bin 0 -> 19731 bytes apps/ios/Shared/Model/ChatModel.swift | 6 +- apps/ios/Shared/Views/Chat/ChatView.swift | 19 ++++- .../Shared/Views/Chat/SendMessageView.swift | 13 +++- apps/ios/Shared/Views/ChatList/ChatHelp.swift | 66 ++++++++++++++++++ .../Shared/Views/ChatList/ChatListView.swift | 61 +++++++++------- .../Views/ChatList/ChatPreviewView.swift | 2 +- .../Shared/Views/NewChat/NewChatButton.swift | 2 +- apps/ios/Shared/Views/TerminalView.swift | 29 ++++++-- .../Views/UserSettings/SettingsButton.swift | 2 +- .../Views/UserSettings/SettingsView.swift | 57 ++++++++++++++- apps/ios/Shared/Views/WelcomeView.swift | 62 +++++++++------- apps/ios/SimpleX.xcodeproj/project.pbxproj | 58 ++++++++------- 20 files changed, 328 insertions(+), 95 deletions(-) create mode 100644 apps/ios/Shared/Assets.xcassets/github.imageset/Contents.json create mode 100644 apps/ios/Shared/Assets.xcassets/github.imageset/github32px.png create mode 100644 apps/ios/Shared/Assets.xcassets/github.imageset/github64px-1.png create mode 100644 apps/ios/Shared/Assets.xcassets/github.imageset/github64px.png create mode 100644 apps/ios/Shared/Assets.xcassets/logo.imageset/Contents.json create mode 100644 apps/ios/Shared/Assets.xcassets/logo.imageset/logo-1.png create mode 100644 apps/ios/Shared/Assets.xcassets/logo.imageset/logo-2.png create mode 100644 apps/ios/Shared/Assets.xcassets/logo.imageset/logo.png create mode 100644 apps/ios/Shared/Views/ChatList/ChatHelp.swift 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 000000000..e30e4bc7c --- /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 0000000000000000000000000000000000000000..8b25551a97921681334176ee143b41510a117d86 GIT binary patch literal 1714 zcmaJ?X;2eq7*4oFu!ne{XxAht2qc?8LXr|_LPCfTpaBK7K$c{I0Ld=NLIOeuC;@2) zZ$K%a)k+m-s0>xHmKxL%0V&0TRzzznhgyqrIC$F)0{WwLXLrBvd*^wc_uSc%h%m9E z{W5z3f#4_!7RvAyFh6!S_*<8qJ%KOIm?#E|L=rJQq=gB5C6WLG5;c?r%V0>EmEH#X z5eSwPRa6WXBMs#$5H%GtW2go-in9p>zW@UYDNNWc^XOXZQ? z1QjEV00I#$3^1wQUJ8&-2UsjB-G|9y(LDhMNN3PM{APL4eYi{(m*ERcUnJa{R+-3^ z34^A6;U^v`8N*O6ji%S@sd{fJqD`XFIUJ5zgTe5^5nj414F(y!G&=H(f)Lgzv?>%+ zAsWD}2qhpH7>|TU`X&W6IxDNuO_vET7|j5oG&&VDr!)hUO8+0KR?nh!m<)a!?|%yG zqOwq!CWCcIhE{<$E|F|@g>nP6FoYr6C<8>D?ID9%&5J(4oSbR1I^byW*g@__U z4QsF&uJSEcFeleM3~ChjEQGbHOjsGDMbyAl(p=Ttv9RaVo8~I#js@@Y9C^_2U})yn zzSHU%6FxuY?d;&65MyR({^lU*3$z$ZllDb(o&<7d;A_`h2U+3~BJ2Hv`{W}KEU801#cv_B|9Cm!ynR{S`AMsSn z;7E=B;mb!wx$L;S>yGXG^6=&WlQn9$s?&L%Y1D8TI^MlKB1DqsEng$>f4=xYWBoPI z_S1p!sJ#d2?YI4kPA{k}Eby?F=f-J9zIc`YDl^pzjVm~9ebE?Hn?t0Nx+la|D0MB; z9)2xv1G>a1|A9kQ>~DV<=X3-4yC&n!m8-3K#P z{X@0zRuQsy$+N ziSCoLJU{Z$nQy4A4Y5UJ07$5FA~qL2%Q+cLaqDU?Lz3?=BC5;Nk6BbTmmceEaM>-Z zi>O&-dSE=%ex;vcvCOk{*JQ5^_4M z4lW7%l9IqY(z7pV(?I@@8=KPFO82)O{VDI18-*d-k$YmI^XiuPs_LuFw<^ZcD}yP5 c*NrbeloN*74g`U%%F6r~k%+>C^#XapzmV0H-2eap literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..182a1a3f734fc1b7d712c68b04c29bad9460d6cd GIT binary patch literal 2625 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 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 012f57791..741b55e9a 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 ba495dfd2..0064ac929 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 2410ff37b..74015c2de 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 f73521408..7bfc2eec4 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 9d901956e..35d969e1f 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 0daf7c44d..02ab3d165 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 84ada554d..752c52f81 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;