diff --git a/Config/AppIdentifiers.xcconfig b/Config/AppIdentifiers.xcconfig
index 4dab6a522..51a353aee 100644
--- a/Config/AppIdentifiers.xcconfig
+++ b/Config/AppIdentifiers.xcconfig
@@ -22,7 +22,7 @@ APPLICATION_GROUP_IDENTIFIER = group.de.messenger
APPLICATION_SCHEME = element
// Team
-DEVELOPMENT_TEAM = 7J4U792NQT
+DEVELOPMENT_TEAM = Q111Q11QQ1
// Provisioning profiles
diff --git a/Config/AppVersion.xcconfig b/Config/AppVersion.xcconfig
index a56dabe63..5e3970da6 100644
--- a/Config/AppVersion.xcconfig
+++ b/Config/AppVersion.xcconfig
@@ -16,5 +16,5 @@
//
// Version
-MARKETING_VERSION = 1.22.0
-CURRENT_PROJECT_VERSION = 20220309075454
+MARKETING_VERSION = 1.23.0
+CURRENT_PROJECT_VERSION = 20220714163152
diff --git a/Config/BuM-Beta/AppIdentifiers-bum-beta.xcconfig b/Config/BuM-Beta/AppIdentifiers-bum-beta.xcconfig
new file mode 100644
index 000000000..db5ab927c
--- /dev/null
+++ b/Config/BuM-Beta/AppIdentifiers-bum-beta.xcconfig
@@ -0,0 +1,39 @@
+//
+// Copyright 2021 Vector Creations Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+
+// App identity
+BUNDLE_DISPLAY_NAME = BuM-Beta
+BASE_BUNDLE_IDENTIFIER = de.bwi.messenger-beta
+APPLICATION_GROUP_IDENTIFIER = group.de.messenger-beta
+APPLICATION_SCHEME = element
+
+// Team
+DEVELOPMENT_TEAM = Q111Q11QQ1
+
+
+// Provisioning profiles
+RIOT_PROVISIONING_PROFILE_SPECIFIER = Vector App Store
+RIOT_PROVISIONING_PROFILE = 7579fa6f-9887-415e-90fc-2c7acd8812e6
+
+NSE_PROVISIONING_PROFILE_SPECIFIER = "Vector NSE: App Store"
+NSE_PROVISIONING_PROFILE = e73107b2-1bfe-4615-be3e-39fd4dcb2af0
+
+SHARE_EXTENSION_PROVISIONING_PROFILE_SPECIFIER = "Vector Share Extension: App Store"
+SHARE_EXTENSION_PROVISIONING_PROFILE = 8c797ca0-0440-49bd-be8d-11d761152995
+
+SIRI_INTENTS_PROVISIONING_PROFILE_SPECIFIER = "Vector Siri Intents: App Store"
+SIRI_INTENTS_PROVISIONING_PROFILE = 1690e81a-5ad3-4d99-b578-02693579be71
diff --git a/Config/BuM-Beta/BuildSettings.swift b/Config/BuM-Beta/BuildSettings.swift
new file mode 100644
index 000000000..2e2581bba
--- /dev/null
+++ b/Config/BuM-Beta/BuildSettings.swift
@@ -0,0 +1,572 @@
+//
+// Copyright 2020 Vector Creations Ltd
+// Copyright (c) 2021 BWI GmbH
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+
+#if LOCATION
+import Keys
+#endif
+
+/// BuildSettings provides settings computed at build time.
+/// In future, it may be automatically generated from xcconfig files
+@objcMembers
+final class BuildSettings: NSObject {
+
+ // MARK: - Bundle Settings
+ static var applicationGroupIdentifier: String {
+ guard let applicationGroupIdentifier = Bundle.app.object(forInfoDictionaryKey: "applicationGroupIdentifier") as? String else {
+ fatalError("applicationGroupIdentifier should be defined")
+ }
+ return applicationGroupIdentifier
+ }
+
+ static var baseBundleIdentifier: String {
+ guard let baseBundleIdentifier = Bundle.app.object(forInfoDictionaryKey: "baseBundleIdentifier") as? String else {
+ fatalError("baseBundleIdentifier should be defined")
+ }
+ return baseBundleIdentifier
+ }
+
+ static var keychainAccessGroup: String {
+ guard let keychainAccessGroup = Bundle.app.object(forInfoDictionaryKey: "keychainAccessGroup") as? String else {
+ fatalError("keychainAccessGroup should be defined")
+ }
+ return keychainAccessGroup
+ }
+
+ static var applicationURLScheme: String? {
+ guard let urlTypes = Bundle.app.object(forInfoDictionaryKey: "CFBundleURLTypes") as? [AnyObject],
+ let urlTypeDictionary = urlTypes.first as? [String: AnyObject],
+ let urlSchemes = urlTypeDictionary["CFBundleURLSchemes"] as? [AnyObject],
+ let externalURLScheme = urlSchemes.first as? String else {
+ return nil
+ }
+
+ return externalURLScheme
+ }
+
+ static var pushKitAppIdProd: String {
+ return baseBundleIdentifier + ".ios.voip.prod"
+ }
+
+ static var pushKitAppIdDev: String {
+ return baseBundleIdentifier + ".ios.voip.dev"
+ }
+
+ static var pusherAppIdProd: String {
+ return baseBundleIdentifier + ".ios.prod"
+ }
+
+ static var pusherAppIdDev: String {
+ return baseBundleIdentifier + ".ios.dev"
+ }
+
+ static var pushKitAppId: String {
+ #if DEBUG
+ return pushKitAppIdDev
+ #else
+ return pushKitAppIdProd
+ #endif
+ }
+
+ static var pusherAppId: String {
+ #if DEBUG
+ return pusherAppIdDev
+ #else
+ return pusherAppIdProd
+ #endif
+ }
+
+ // Element-Web instance for the app
+ static let applicationWebAppUrlString = ""
+
+ // MARK: - Localization
+
+ /// Whether to allow the app to use a right to left layout or force left to right for all languages
+ static let disableRightToLeftLayout = true
+
+
+ // MARK: - Server configuration
+
+ // Default servers proposed on the authentication screen
+ static let serverConfigDefaultHomeserverUrlString = ""
+ static let serverConfigDefaultIdentityServerUrlString = ""
+
+ static let serverConfigPreSelections = ["":""]
+
+ static let serverConfigSygnalAPIUrlString = ""
+
+ // MARK: - Legal URLs
+
+ // Note: Set empty strings to hide the related entry in application settings
+ static let applicationCopyrightUrlString = "https://element.io/copyright"
+ static let applicationPrivacyPolicyUrlString = ""
+ static let applicationTermsConditionsUrlString = "https://element.io/terms-of-service"
+ static let applicationHelpUrlString = "https://element.io/help"
+
+ // MARk: - Matrix permalinks
+ // Paths for URLs that will considered as Matrix permalinks. Those permalinks are opened within the app
+ static let permalinkSupportedHosts: [String: [String]] = [:]
+
+ // For use in clients that use a custom base url for permalinks rather than matrix.to.
+ // This baseURL is used to generate permalinks within the app (E.g. timeline message permalinks).
+ // Optional String that when set is used as permalink base, when nil matrix.to format is used.
+ // Example value would be "https://www.example.com", note there is no trailing '/'.
+ static let clientPermalinkBaseUrl: String? = ""
+
+ // MARK: - VoIP
+ static var allowVoIPUsage: Bool {
+ #if canImport(JitsiMeetSDK)
+ return false
+ #else
+ return false
+ #endif
+ }
+
+ static let stunServerFallbackUrlString: String? = ""
+
+ // MARK: - Public rooms Directory
+ // List of homeservers for the public rooms directory
+ static let publicRoomsDirectoryServers = [
+ "matrix.org",
+ "gitter.im"
+ ]
+
+ // MARK: - Rooms Screen
+ static let roomsAllowToJoinPublicRooms: Bool = true
+
+ // MARK: - Analytics
+
+ // $$$
+ static let analyticsServerUrl = URL(string: "")
+ static let analyticsAppId = "0"
+
+ /// BWI: set host and key to nil to disable PostHog tracking
+ static let analyticsHost: String? = nil
+ static let analyticsKey: String? = nil
+ static let analyticsTermsURL = URL(string: "https://element.io/cookie-policy")!
+ static let bwiPresentAnalyticsPrompt = false
+
+ static let bwiAnalyticsServerUrlString = ""
+ static let bwiAnalyticsAppId = "1"
+
+ /// A type that represents how to set up the analytics module in the app.
+ ///
+ /// **Note:** Analytics are disabled by default for forks.
+ /// If you are maintaining a fork, set custom configurations.
+ struct AnalyticsConfiguration {
+ /// Whether or not analytics should be enabled.
+ let isEnabled: Bool
+ /// The host to use for PostHog analytics.
+ let host: String
+ /// The public key for submitting analytics.
+ let apiKey: String
+ /// The URL to open with more information about analytics terms.
+ let termsURL: URL
+ }
+
+ /// The configuration to use for analytics during development. Set `isEnabled` to false to disable analytics in debug builds.
+ static let analyticsConfiguration = AnalyticsConfiguration(isEnabled: false,
+ host: "",
+ apiKey: "",
+ termsURL: URL(string: "https://element.io/cookie-policy")!)
+
+ // MARK: - Bug report
+ static let bugReportEndpointUrlString = ""
+ // Use the name allocated by the bug report server
+ static let bugReportApplicationId = "riot-ios"
+ static let bugReportUISIId = "element-auto-uisi"
+
+ // MARK: - Integrations
+ static let integrationsUiUrlString = "https://scalar.vector.im/"
+ static let integrationsRestApiUrlString = "https://scalar.vector.im/api"
+ // Widgets in those paths require a scalar token
+ static let integrationsScalarWidgetsPaths = [""]
+ // Jitsi server used outside integrations to create conference calls from the call button in the timeline
+ static let jitsiServerUrl: URL = URL(string: "https://enter.jitsi.url")!
+
+ // MARK: - Features
+
+ /// Max allowed time to continue using the app without prompting PIN
+ static let pinCodeGraceTimeInSeconds: TimeInterval = 180
+
+
+ static let allowSendingStickers: Bool = false
+
+ static let allowLocalContactsAccess: Bool = false
+
+ static let allowInviteExernalUsers: Bool = true
+
+ static let enableSideMenu: Bool = false
+ static let sideMenuShowInviteFriends: Bool = true
+
+ /// Whether to read the `io.element.functional_members` state event and exclude any service members when computing a room's name and avatar.
+ static let supportFunctionalMembers: Bool = true
+
+ // MARK: - Feature Specifics
+
+ /// Not allowed pin codes. User won't be able to select one of the pin in the list.
+ static let notAllowedPINs: [String] = [
+ "1234",
+ "1111",
+ "0000",
+ "1212",
+ "7777",
+ "1004",
+ "2000",
+ "4444",
+ "2222",
+ "6969",
+ "9999",
+ "3333",
+ "5555",
+ "6666",
+ "1122",
+ "1313",
+ "8888",
+ "4321",
+ "2001",
+ "1010",
+ "2580",
+ "4711",
+ "0815",
+ "0852"
+ ]
+
+ /// Maximum number of allowed pin failures when unlocking, before force logging out the user. Defaults to `3`
+ static let maxAllowedNumberOfPinFailures: Int = 3
+
+ /// Maximum number of allowed biometrics failures when unlocking, before fallbacking the user to the pin if set or logging out the user. Defaults to `5`
+ static let maxAllowedNumberOfBiometricsFailures: Int = 5
+
+ static let allowLocalContactPresence: Bool = false
+
+ /// Indicates should the app log out the user when number of PIN failures reaches `maxAllowedNumberOfPinFailures`. Defaults to `false`
+ static let logOutUserWhenPINFailuresExceeded: Bool = true
+
+ /// Indicates should the app log out the user when number of biometrics failures reaches `maxAllowedNumberOfBiometricsFailures`. Defaults to `false`
+ static let logOutUserWhenBiometricsFailuresExceeded: Bool = true
+
+
+ /// If force is enabled the dialog for asking if reseting the key backup is not shown.. already asked before in mandatory verfication
+ static let forceResetBackupIfLost: Bool = true
+
+ /// if skip is enabled the key backup dialogs are passed through
+ static let skipKeyBackupStep: Bool = true
+
+ static let showNotificationsV2: Bool = true
+
+ // MARK: - Main Tabs
+
+ static let homeScreenShowHomeTab: Bool = false
+ static let homeScreenShowFavouritesTab: Bool = true
+ static let homeScreenShowPeopleTab: Bool = true
+ static let homeScreenShowRoomsTab: Bool = true
+ static let homeScreenShowCommunitiesTab: Bool = false
+
+ // MARK: - General Settings Screen
+
+ static let settingsScreenShowUserFirstName: Bool = false
+ static let settingsScreenShowUserSurname: Bool = false
+ static let settingsScreenAllowAddingLinkedEmails: Bool = false
+ static let settingsScreenAllowAddingPhoneNumbers: Bool = false
+ static let settingsScreenAllowAddingEmailThreepids: Bool = false
+ static let settingsScreenAllowAddingPhoneThreepids: Bool = false
+ static let settingsScreenShowThreepidExplanatory: Bool = false
+ static let settingsScreenShowDiscoverySettings: Bool = false
+ static let settingsScreenAllowIdentityServerConfig: Bool = false
+ static let settingsScreenShowConfirmMediaSize: Bool = false
+ static let settingsScreenShowAdvancedSettings: Bool = false
+ static let settingsScreenShowLabSettings: Bool = false
+ static let settingsScreenAllowChangingRageshakeSettings: Bool = false
+ static let settingsScreenAllowChangingCrashUsageDataSettings: Bool = false
+ static let settingsScreenAllowBugReportingManually: Bool = false
+ static let settingsScreenAllowDeactivatingAccount: Bool = false
+ static let settingsScreenEnableDecodedContentAndGlobalSettings: Bool = false
+ static let settingsScreenShowChangePassword:Bool = true
+
+ static let settingsScreenShowLinkPreviews:Bool = false
+ static let settingsScreenShowInviteFriends:Bool = false
+ static let settingsScreenShowSettings:Bool = true
+ static let settingsScreenShowFeedback:Bool = false
+ static let settingsScreenShowHelp:Bool = false
+
+ static let settingsScreenShowEnableStunServerFallback: Bool = true
+ static let settingsScreenShowNotificationDecodedContentOption: Bool = false
+ static let settingsScreenShowSystemSettingsOption: Bool = false
+ static let settingsScreenShowNsfwRoomsOption: Bool = false
+ static let settingsScreenShowTACSetting: Bool = false
+ static let settingsScreenShowSupportSetting: Bool = true
+ static let settingsSecurityScreenShowSessions:Bool = true
+ static let settingsSecurityScreenShowSetupBackup:Bool = true
+ static let settingsSecurityScreenShowRestoreBackup:Bool = true
+ static let settingsSecurityScreenShowDeleteBackup:Bool = true
+ /// A setting to enable the presence configuration settings section.
+ static let settingsScreenPresenceAllowConfiguration: Bool = false
+
+ static let settingsSecurityScreenShowCryptographyInfo:Bool = false
+ static let settingsSecurityScreenShowCryptographyExport:Bool = false
+ static let settingsSecurityScreenShowAdvancedUnverifiedDevices:Bool = false
+
+ // MARK: - Notification Settings
+ static let settingsNotificationsBWIDefaultSet:Bool = true
+ static let settingsNotificationsShowDefault:Bool = true
+ static let settingsNotificationsShowMentions:Bool = false
+ static let settingsNotificationsShowAdvanced:Bool = false
+
+ // MARK: - Timeline settings
+ static let roomInputToolbarCompressionMode: MediaCompressionMode = .none
+
+ enum MediaCompressionMode {
+ case prompt, small, medium, large, none
+ }
+
+ // MARK: - Room Creation Screen
+
+ static let roomCreationScreenAllowEncryptionConfiguration: Bool = false
+ static let roomCreationScreenRoomIsEncrypted: Bool = true
+ static let roomCreationScreenAllowRoomTypeConfiguration: Bool = true
+ static let roomCreationScreenRoomIsPublic: Bool = false
+
+ // MARK: - Room Screen
+
+ static let roomScreenAllowVoIPForDirectRoom: Bool = true
+ static let roomScreenAllowVoIPForNonDirectRoom: Bool = true
+ static let roomScreenAllowCameraAction: Bool = true
+ static let roomScreenAllowMediaLibraryAction: Bool = true
+ static let roomScreenAllowStickerAction: Bool = false
+ static let roomScreenAllowFilesAction: Bool = true
+
+ // Timeline style
+ static let roomScreenAllowTimelineStyleConfiguration: Bool = true
+ static let roomScreenTimelineDefaultStyleIdentifier: RoomTimelineStyleIdentifier = .plain
+ static var isRoomScreenEnableMessageBubblesByDefault: Bool {
+ return self.roomScreenTimelineDefaultStyleIdentifier == .bubble
+ }
+ static let roomScreenUseOnlyLatestUserAvatarAndName: Bool = false
+
+ /// Allow split view detail view stacking
+ static let allowSplitViewDetailsScreenStacking: Bool = true
+
+ // MARK: - Room Contextual Menu
+
+ static let roomContextualMenuShowMoreOptionForMessages: Bool = true
+ static let roomContextualMenuShowMoreOptionForStates: Bool = true
+ static let roomContextualMenuShowReportContentOption: Bool = true
+ static let roomContextualMenuShowEncryptionOption: Bool = false
+
+ // MARK: - Room Info Screen
+
+ static let roomInfoScreenShowIntegrations: Bool = false
+
+ // MARK: - Room Settings Screen
+
+ static let roomSettingsScreenShowLowPriorityOption: Bool = false
+ static let roomSettingsScreenShowDirectChatOption: Bool = false
+ static let roomSettingsScreenAllowChangingAccessSettings: Bool = false
+ static let roomSettingsScreenAllowChangingHistorySettings: Bool = false
+ static let roomSettingsScreenShowAddressSettings: Bool = false
+ static let roomSettingsScreenShowFlairSettings: Bool = false
+ static let roomSettingsScreenShowAdvancedSettings: Bool = false
+
+ static let roomSettingsScreenShowAccessSettingsBW: Bool = true
+ static let roomSettingsScreenRemoveLeave: Bool = true
+ static let roomSettingsScreenShowIntegrations: Bool = false
+ static let roomSettingsScreenAdvancedShowEncryptToVerifiedOption: Bool = true
+
+ static let roomSettingsScreenShowNotificationsV2: Bool = false
+
+ // MARK: - Room Member Screen
+ static let roomMemberScreenShowIgnore: Bool = true
+
+ // MARK: - Message
+ static let messageDetailsAllowShare: Bool = false
+ static let messageDetailsAllowPermalink: Bool = false
+ static let messageDetailsAllowViewSource: Bool = false
+ static let messageDetailsAllowSave: Bool = false
+ static let messageDetailsAllowCopyMedia: Bool = false
+ static let messageDetailsAllowPasteMedia: Bool = false
+
+ // MARK: - Notifications
+ static let decryptNotificationsByDefault: Bool = true
+
+ // MARK: - Authentication Screen
+ static let authScreenShowRegister = false
+ static let authScreenShowPhoneNumber = false
+ static let authScreenShowForgotPassword = false
+ static let authScreenShowCustomServerOptions = true
+ static let authScreenShowTestServerOptions = true
+
+ // MARK: - Authentication Options
+ static let authEnableRefreshTokens = false
+
+ // MARK: - Cross-signing (bwi=true)
+ static let disableSelfUserVerification = true
+
+ // MARK: - Antivirus scan (bwi=true)
+ static let enableAntivirusScan = true
+
+ // MARK: - Room Screen
+ static let enableRoomSearchItem = false
+
+ // MARK: - Matomo Analytics (bwi=false)
+ static let enableMatomoAnalytics = false
+
+ // MARK: Verification screen (bwi=false)
+ static let showDetailedVerificationElements : Bool = false
+ static let showRecoverWithKey : Bool = false
+
+ // MARK: Unified search screen (bwi=false)
+ static let showUnifiedSearchViewMessagesTab : Bool = false
+ static let showUnifiedSearchViewFilesTab : Bool = false
+
+ // MARK: - Onboarding
+ static let onboardingShowAccountPersonalization = false
+ static let onboardingEnableNewAuthenticationFlow = false
+
+ // MARK: - Secrets Recovery
+ static let secretsRecoveryAllowReset = true
+
+ // MARK: VoIP support (bwi=false)
+ static let enableVoIPSupport : Bool = false
+ // MARK: - UISI Autoreporting
+ static let cryptoUISIAutoReportingEnabled = false
+
+ // MARK: - Polls
+
+ // MARK: Last message timestamp support (bwi=false)
+ static let enableLastMessageTimestamp : Bool = false
+
+ // MARK: Room chat alert screen (bwi=false)
+ static let enableViewEncryptionAction : Bool = false
+
+ // MARK: JavaScript support in WKWebView (bwi=false)
+ static let enableJSInWebView : Bool = false
+
+ // MARK: Secure pin code description (bwi=false)
+ static let settingsSettingsSecureShowPinCodeDescription : Bool = false
+
+ // MARK: Invite friends in Direct Chat (bwi=false)
+ static let directChatShowInviteFriends : Bool = false
+
+ // MARK: Last admin is not allowed to leave the room (bwi=true)
+ static let lastAdminIsNotAllowedToLeaveRoom : Bool = true
+
+ // MARK: Room Member Details Screen (bwi=true)
+ static let roomMemberDetailsHideLeaveButton : Bool = true
+
+ // MARK: Room create options (bwi=false)
+ static let enableShowInRoomDirectory : Bool = false
+
+ // MARK: sticker in composer (bwi=false)
+ static let enableRoomComposerSticker : Bool = false
+
+ // Mark: Unified Search (bwi=true)
+ static let unifiedSearchScreenShowPublicDirectory = true
+
+ // MARK: Allows removal of uploaded avatar photos (bwi=true)
+ static let enableRemoveAvatarImage = true
+
+ // MARK: Add a toggle button to the login screen to make the password visible
+ static let passwordIndicatorOnLogin : Bool = true
+
+ // MARK: Displays the element base version on the settings screen
+ static let elementBaseVersion : String = "1.8.18"
+
+ static let showElementBaseVersion : Bool = true
+
+ // MARK: Bypasses the normal forgot password process by presenting the user an information alert
+ // (requires authScreenShowForgotPassword set to true)
+ static let forgotPasswordInformationAlert : Bool = true
+
+ // MARK: Promote new feature within a banner below the navigation view
+ static let showTopBanner : Bool = false
+
+ static let showCustomServerDisplayName : Bool = true
+ static let customServerDisplayName : String = ""
+
+ // MARK BWI show/hide developer menu
+ static let bwiShowDeveloperSettings : Bool = true
+
+ // MARK BWI personal notes room
+ static let bwiPersonalNotesRoom : Bool = true
+ static let bwiPersonalNotesRoomLeavable : Bool = false
+ static let bwiResetPersonalNotesAccountData : Bool = false
+
+ // MARK BWI personal state
+ static let bwiPersonalState : Bool = true
+
+ // MARK BWI personal notes room
+ static let bwiRollsAndRights : Bool = true
+
+ // MARK: Timeline
+ static let settingsScreenShowSimpleTimeLineOptions : Bool = false
+ static let settingsScreenShowTimeStampOption : Bool = true
+ static let settingsScreenShowDeletedMessagesOption : Bool = false
+ static let settingsScreenShowNameChangeOption : Bool = false
+ static let settingsScreenShowChatEffectsOption : Bool = false
+ static let settingsScreenShowRoomAvatarChangeOption : Bool = false
+ static let settingsScreenShowUserAvatarChangeOption : Bool = true
+ static let settingsScreenShowEnterRoomOption : Bool = true
+
+ static let bwiEnableVoiceMessages : Bool = true
+
+ static let bwiLastAdminCanDowngradeHimself : Bool = false
+
+ static let bwiEnableErrorTracking : Bool = false
+
+ static let bwiEnableRegisterInfo : Bool = false
+
+ static let bwiShowHappyBirthdayCampaign: Bool = false
+ static let bwiHappyBirthdayCampaignIdentifier: String = "one_year_anniversary"
+ static let bwiDisableSecuritySettingsUntrustedDevices: Bool = true
+ static let bwiShowMatomoInfoScreen = false
+ static let bwiShowMatomoSettings = false
+ static let bwiMatomoTrackingDefaultState = true
+ static let bwiShowNewFeatures = true
+ static let bwiSendMessageThreshold = 10.0
+
+ // MARK: - Polls
+
+ static var pollsEnabled: Bool {
+ guard #available(iOS 14, *) else {
+ return false
+ }
+
+ return true
+ }
+
+ // MARK: - Location Sharing
+
+ static let tileServerMapURL = ""
+ static let tileServerMapStyleURL = URL(string: "https://map.tyler.org")!
+
+ static let locationSharingEnabled = false
+
+ static var liveLocationSharingEnabled: Bool {
+ guard #available(iOS 14, *) else {
+ return false
+ }
+
+ guard self.locationSharingEnabled else {
+ return false
+ }
+
+ // Do not enable live location sharing atm
+ return false
+ }
+}
diff --git a/Config/BuM/AppIdentifiers-bum.xcconfig b/Config/BuM/AppIdentifiers-bum.xcconfig
new file mode 100644
index 000000000..51a353aee
--- /dev/null
+++ b/Config/BuM/AppIdentifiers-bum.xcconfig
@@ -0,0 +1,39 @@
+//
+// Copyright 2021 Vector Creations Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+
+// App identity
+BUNDLE_DISPLAY_NAME = BundesMessenger
+BASE_BUNDLE_IDENTIFIER = de.bwi.messenger
+APPLICATION_GROUP_IDENTIFIER = group.de.messenger
+APPLICATION_SCHEME = element
+
+// Team
+DEVELOPMENT_TEAM = Q111Q11QQ1
+
+
+// Provisioning profiles
+RIOT_PROVISIONING_PROFILE_SPECIFIER = Vector App Store
+RIOT_PROVISIONING_PROFILE = 7579fa6f-9887-415e-90fc-2c7acd8812e6
+
+NSE_PROVISIONING_PROFILE_SPECIFIER = "Vector NSE: App Store"
+NSE_PROVISIONING_PROFILE = e73107b2-1bfe-4615-be3e-39fd4dcb2af0
+
+SHARE_EXTENSION_PROVISIONING_PROFILE_SPECIFIER = "Vector Share Extension: App Store"
+SHARE_EXTENSION_PROVISIONING_PROFILE = 8c797ca0-0440-49bd-be8d-11d761152995
+
+SIRI_INTENTS_PROVISIONING_PROFILE_SPECIFIER = "Vector Siri Intents: App Store"
+SIRI_INTENTS_PROVISIONING_PROFILE = 1690e81a-5ad3-4d99-b578-02693579be71
diff --git a/Config/copyBetaConfig.sh b/Config/copyBetaConfig.sh
new file mode 100755
index 000000000..91c082fd2
--- /dev/null
+++ b/Config/copyBetaConfig.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# setConfig.sh
+# Riot
+#
+# Created by Frank Rotermund on 25.03.21.
+# Copyright © 2021 matrix.org. All rights reserved.
+
+cp -vf ../Config/BuM-Beta/AppIdentifiers-bum-beta.xcconfig ../Config/AppIdentifiers.xcconfig
diff --git a/Config/copyReleaseConfig.sh b/Config/copyReleaseConfig.sh
new file mode 100755
index 000000000..39247086d
--- /dev/null
+++ b/Config/copyReleaseConfig.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# setConfig.sh
+# Riot
+#
+# Created by Frank Rotermund on 25.03.21.
+# Copyright © 2021 matrix.org. All rights reserved.
+
+cp -vf ../Config/BuM/AppIdentifiers-bum.xcconfig ../Config/AppIdentifiers.xcconfig
diff --git a/Gemfile.lock b/Gemfile.lock
index a9f8b4d36..157defa20 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -20,20 +20,20 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
- aws-partitions (1.568.0)
- aws-sdk-core (3.130.0)
+ aws-partitions (1.605.0)
+ aws-sdk-core (3.131.2)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
- jmespath (~> 1.0)
- aws-sdk-kms (1.55.0)
+ jmespath (~> 1, >= 1.6.1)
+ aws-sdk-kms (1.57.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.113.0)
+ aws-sdk-s3 (1.114.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
- aws-sigv4 (1.4.0)
+ aws-sigv4 (1.5.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
@@ -92,7 +92,7 @@ GEM
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
- excon (0.92.1)
+ excon (0.92.3)
faraday (1.10.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
@@ -112,8 +112,8 @@ GEM
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
- faraday-multipart (1.0.3)
- multipart-post (>= 1.2, < 3)
+ faraday-multipart (1.0.4)
+ multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
@@ -122,7 +122,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
- fastlane (2.205.0)
+ fastlane (2.207.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -171,9 +171,9 @@ GEM
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
- google-apis-androidpublisher_v3 (0.16.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-core (0.4.2)
+ google-apis-androidpublisher_v3 (0.25.0)
+ google-apis-core (>= 0.7, < 2.a)
+ google-apis-core (0.7.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -182,19 +182,19 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
- google-apis-iamcredentials_v1 (0.10.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-playcustomapp_v1 (0.7.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-storage_v1 (0.11.0)
- google-apis-core (>= 0.4, < 2.a)
+ google-apis-iamcredentials_v1 (0.13.0)
+ google-apis-core (>= 0.7, < 2.a)
+ google-apis-playcustomapp_v1 (0.10.0)
+ google-apis-core (>= 0.7, < 2.a)
+ google-apis-storage_v1 (0.18.0)
+ google-apis-core (>= 0.7, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
- google-cloud-env (1.5.0)
- faraday (>= 0.17.3, < 2.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.2.0)
- google-cloud-storage (1.36.1)
+ google-cloud-storage (1.37.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
@@ -202,7 +202,7 @@ GEM
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
- googleauth (1.1.2)
+ googleauth (1.2.0)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@@ -211,14 +211,14 @@ GEM
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-accept (1.7.0)
- http-cookie (1.0.4)
+ http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (1.10.0)
concurrent-ruby (~> 1.0)
jmespath (1.6.1)
- json (2.6.1)
- jwt (2.3.0)
+ json (2.6.2)
+ jwt (2.4.1)
memoist (0.16.2)
mime-types (3.4.1)
mime-types-data (~> 3.2015)
@@ -238,9 +238,9 @@ GEM
osx_keychain (1.0.2)
RubyInline (~> 3)
plist (3.6.0)
- public_suffix (4.0.6)
+ public_suffix (4.0.7)
rake (13.0.6)
- representable (3.1.1)
+ representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
@@ -256,9 +256,9 @@ GEM
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
- signet (0.16.1)
+ signet (0.17.0)
addressable (~> 2.8)
- faraday (>= 0.17.5, < 3.0)
+ faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
@@ -279,14 +279,14 @@ GEM
uber (0.1.0)
unf (0.1.4)
unf_ext
- unf_ext (0.0.8.1)
+ unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
word_wrap (1.0.0)
xcode-install (2.8.0)
claide (>= 0.9.1, < 1.1.0)
fastlane (>= 2.1.0, < 3.0.0)
- xcodeproj (1.21.0)
+ xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
diff --git a/Podfile b/Podfile
index 92ea1314e..77a296c46 100644
--- a/Podfile
+++ b/Podfile
@@ -139,6 +139,28 @@ abstract_target 'RiotPods' do
pod 'FLEX', '~> 4.5.0', :configurations => ['Debug']
end
+
+ target "BuM-Beta" do
+ import_MatrixSDK
+ import_MatrixKit_pods
+
+ import_SwiftUI_pods
+
+ pod 'DGCollectionViewLeftAlignFlowLayout', '~> 1.0.4'
+ pod 'UICollectionViewRightAlignedLayout', '~> 0.0.3'
+ pod 'KTCenterFlowLayout', '~> 1.3.1'
+ pod 'ZXingObjC', '~> 3.6.5'
+ pod 'FlowCommoniOS', '~> 1.12.0'
+ pod 'DTTJailbreakDetection', '~> 0.4.0'
+ pod 'ReadMoreTextView', '~> 3.0.1'
+ pod 'SwiftBase32', '~> 0.9.0'
+ pod 'SwiftJWT', '~> 3.6.200'
+ pod 'SideMenu', '~> 6.5'
+ pod 'DSWaveformImage', '~> 6.1.1'
+ pod 'ffmpeg-kit-ios-audio', '4.5.1'
+
+ pod 'FLEX', '~> 4.5.0', :configurations => ['Debug']
+ end
target "RiotShareExtension" do
import_MatrixSDK
diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift
index bd0f08c92..5b06d86cf 100644
--- a/Riot/Generated/Strings.swift
+++ b/Riot/Generated/Strings.swift
@@ -663,10 +663,18 @@ public class VectorL10n: NSObject {
public static var bwiEditPersonalStateMyState: String {
return VectorL10n.tr("Vector", "bwi_edit_personal_state_my_state")
}
- /// Not available
+ /// Remote
public static var bwiEditPersonalStateOptionHomeoffice: String {
return VectorL10n.tr("Vector", "bwi_edit_personal_state_option_homeoffice")
}
+ /// Not available
+ public static var bwiEditPersonalStateOptionNotAvailable: String {
+ return VectorL10n.tr("Vector", "bwi_edit_personal_state_option_not_available")
+ }
+ /// Delete message
+ public static var bwiEditPersonalStateOptionReset: String {
+ return VectorL10n.tr("Vector", "bwi_edit_personal_state_option_reset")
+ }
/// Office
public static var bwiEditPersonalStateOptionWork: String {
return VectorL10n.tr("Vector", "bwi_edit_personal_state_option_work")
@@ -6359,7 +6367,7 @@ public class VectorL10n: NSObject {
public static var secretsRecoveryWithPassphraseTitle: String {
return VectorL10n.tr("Vector", "secrets_recovery_with_passphrase_title")
}
- /// Enter your account password to confirm
+ /// Confirm with your password!
public static var secretsResetAuthenticationMessage: String {
return VectorL10n.tr("Vector", "secrets_reset_authentication_message")
}
@@ -6391,7 +6399,7 @@ public class VectorL10n: NSObject {
public static var secretsSetupRecoveryKeyExportAction: String {
return VectorL10n.tr("Vector", "secrets_setup_recovery_key_export_action")
}
- /// Completed!\n\nYour chats have een successfully decrypted.
+ /// Completed!\nYour recovery key has been set successfully.
public static var secretsSetupRecoveryKeyInformation: String {
return VectorL10n.tr("Vector", "secrets_setup_recovery_key_information")
}
@@ -6411,7 +6419,7 @@ public class VectorL10n: NSObject {
public static var secretsSetupRecoveryKeyTitle: String {
return VectorL10n.tr("Vector", "secrets_setup_recovery_key_title")
}
- /// ⚠️ Do not use your account password.
+ /// ⚠️ Do not use your password.
public static var secretsSetupRecoveryPassphraseAdditionalInformation: String {
return VectorL10n.tr("Vector", "secrets_setup_recovery_passphrase_additional_information")
}
@@ -6771,7 +6779,7 @@ public class VectorL10n: NSObject {
public static func settingsCallsStunServerFallbackDescription(_ p1: String) -> String {
return VectorL10n.tr("Vector", "settings_calls_stun_server_fallback_description", p1)
}
- /// Change Matrix account password
+ /// Change password
public static var settingsChangePassword: String {
return VectorL10n.tr("Vector", "settings_change_password")
}
@@ -7303,6 +7311,26 @@ public class VectorL10n: NSObject {
public static var settingsPasswordCondition: String {
return VectorL10n.tr("Vector", "settings_password_condition")
}
+ /// The password must include at least one digit
+ public static var settingsPasswordHasNoDigit: String {
+ return VectorL10n.tr("Vector", "settings_password_has_no_digit")
+ }
+ /// The password must include at least one lowercase letter
+ public static var settingsPasswordHasNoLowercaseLetter: String {
+ return VectorL10n.tr("Vector", "settings_password_has_no_lowercase_letter")
+ }
+ /// The password must include at least one symbol
+ public static var settingsPasswordHasNoSymbol: String {
+ return VectorL10n.tr("Vector", "settings_password_has_no_symbol")
+ }
+ /// The password must include at least one uppercase letter
+ public static var settingsPasswordHasNoUppercaseLetter: String {
+ return VectorL10n.tr("Vector", "settings_password_has_no_uppercase_letter")
+ }
+ /// The password must be at least 8 characters long
+ public static var settingsPasswordTooShortMessage: String {
+ return VectorL10n.tr("Vector", "settings_password_too_short_message")
+ }
/// Your password has been updated
public static var settingsPasswordUpdated: String {
return VectorL10n.tr("Vector", "settings_password_updated")
diff --git a/Riot/target-bum-beta.yml b/Riot/target-bum-beta.yml
new file mode 100644
index 000000000..b0e8406cc
--- /dev/null
+++ b/Riot/target-bum-beta.yml
@@ -0,0 +1,111 @@
+name: BuM-Beta
+
+schemes:
+ BuM-Beta:
+ analyze:
+ config: Debug
+ archive:
+ config: Release
+ build:
+ targets:
+ BuM-Beta:
+ - running
+ - testing
+ - profiling
+ - analyzing
+ - archiving
+ profile:
+ config: Release
+ run:
+ config: Debug
+ disableMainThreadChecker: true
+ test:
+ config: Debug
+ disableMainThreadChecker: true
+ gatherCoverageData: true
+ language: "de"
+ region: "DE"
+ environmentVariables:
+ username:
+ defaultpin:
+ defaultpassphrase:
+ defaultpassword:
+ targets:
+ - RiotTests
+
+targets:
+ BuM-Beta:
+ type: application
+ platform: iOS
+
+ dependencies:
+ - target: RiotShareExtension
+ - target: RiotNSE
+ - target: DesignKit
+ - target: CommonKit
+ - package: OrderedCollections
+
+ configFiles:
+ Debug: Debug.xcconfig
+ Release: Release.xcconfig
+
+ preBuildScripts:
+ - name: ⚠️ SwiftLint
+ runOnlyWhenInstalling: false
+ shell: /bin/sh
+ script: "${PODS_ROOT}/SwiftLint/swiftlint\n"
+ - name: 🛠 SwiftGen
+ runOnlyWhenInstalling: false
+ shell: /bin/sh
+ script: "${PODS_ROOT}/SwiftGen/bin/swiftgen config run --config Tools/SwiftGen/swiftgen-config.yml\n"
+
+ sources:
+ - path: ../RiotSwiftUI/Modules
+ # Riot will provide it's own LocaleProviderType so exclude.
+ # Riot will provide it's own LocaleProviderType so exclude.
+ excludes:
+ - "Common/Locale/LocaleProvider.swift"
+ - "**/Test/**"
+ - "Room/LocationSharing/*"
+ - "Room/StaticLocationSharingViewer/*"
+ - "Room/LiveLocationSharingViewer/*"
+ - path: ../Tools
+ excludes:
+ - "Logs"
+ - "Release"
+ - "Templates/*.sh"
+ - path: ../Config
+ excludes:
+ - "AppIdentifiers.xcconfig"
+ - "BuildSettings.swift"
+ - "BuM"
+ - "*.sh"
+ - path: .
+ excludes:
+ - "Modules/Room/EmojiPicker/Data/EmojiMart/EmojiJSONStore.swift"
+ - "Modules/Analytics/Test/Unit/BWIAnalyticsTests.swift"
+ - "**/*.strings" # Exclude all strings files
+ - "Modules/Room/TimelineCells/Styles/Plain/Cells/Location/*"
+ - "Modules/Room/TimelineCells/Styles/Bubble/Cells/Location/*"
+ - "Modules/Room/Location/*"
+ - "Modules/Room/LocationSharing/*"
+ - "Modules/Room/Views/BubbleCells/Location/*"
+ - "Modules/Room/Views/BubbleCells/Styles/Bubble/Cells/Location/*"
+ - "Modules/LocationSharing/*"
+ - path: ../bwi
+ excludes:
+ - "Tests"
+ - path: ../RiotShareExtension/Shared
+ - path: Modules/MatrixKit
+ excludes:
+ - "**/*.md" # excludes all files with the .md extension
+ # Add separately localizable files
+ # Once a language has enough translations (>80%), it must be declared here
+ - path: Assets/en.lproj/InfoPlist.strings
+ - path: Assets/en.lproj/Localizable.strings
+ - path: Assets/en.lproj/Vector.strings
+ - path: Assets/en.lproj/Bwi.strings
+ - path: Assets/de.lproj/InfoPlist.strings
+ - path: Assets/de.lproj/Localizable.strings
+ - path: Assets/de.lproj/Vector.strings
+ - path: Assets/de.lproj/Bwi.strings
diff --git a/Riot/target-messenger.yml b/Riot/target-messenger.yml
index 48e11feeb..dccae4e1f 100644
--- a/Riot/target-messenger.yml
+++ b/Riot/target-messenger.yml
@@ -75,6 +75,9 @@ targets:
- "Release"
- "Templates/*.sh"
- path: ../Config
+ excludes:
+ - "BuM-Beta"
+ - "*.sh"
- path: .
excludes:
- "Modules/Room/EmojiPicker/Data/EmojiMart/EmojiJSONStore.swift"
diff --git a/RiotNSE/RiotNSE.entitlements b/RiotNSE/RiotNSE.entitlements
index cc9117647..ced577af8 100644
--- a/RiotNSE/RiotNSE.entitlements
+++ b/RiotNSE/RiotNSE.entitlements
@@ -10,7 +10,5 @@
$(KEYCHAIN_ACCESS_GROUP)
- com.apple.developer.usernotifications.filtering
-
diff --git a/project.yml b/project.yml
index e099a7037..acc2675a4 100644
--- a/project.yml
+++ b/project.yml
@@ -29,6 +29,7 @@ options:
include:
- path: Riot/target.yml
- path: Riot/target-messenger.yml
+ - path: Riot/target-bum-beta.yml
- path: RiotTests/target.yml
- path: RiotShareExtension/target.yml
- path: SiriIntents/target.yml