diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index adb691456e..d395541ae4 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -57,6 +57,7 @@ 0A194F5E70B5A628C1BF4476 /* AdvancedSettingsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4999B5FD50AED7CB0F590FF8 /* AdvancedSettingsScreenModels.swift */; }; 0ACAA31FD0399CEEBA3ECC21 /* UserDetailsEditScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85149F56BA333619900E2410 /* UserDetailsEditScreenViewModelProtocol.swift */; }; 0AE0AB1952F186EB86719B4F /* HomeScreenRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED044D00F2176681CC02CD54 /* HomeScreenRoomCell.swift */; }; + 0BAF83521871E69D222EE8E4 /* ClientBuilderHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC0CD1CAFD3F8B057F9AEA5 /* ClientBuilderHook.swift */; }; 0BDA19079FD6E17C5AC62E22 /* RoomDetailsEditScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB06F22CFA34885B40976061 /* RoomDetailsEditScreen.swift */; }; 0BE4D5CBF86956410F071F91 /* CreateRoomViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15A657D96779D1DEB8EF1327 /* CreateRoomViewModel.swift */; }; 0BFA67AFD757EE2BA569836A /* ScrollViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53482ECA4B6633961EC224F5 /* ScrollViewAdapter.swift */; }; @@ -81,7 +82,6 @@ 1146E9EDCF8344F7D6E0D553 /* MockCoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0376C429FAB1687C3D905F3E /* MockCoder.swift */; }; 119AE9A3FC6E0606C1146528 /* NotificationSettingsEditScreenRoomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C97F8963B14EB0AF3940DDBF /* NotificationSettingsEditScreenRoomCell.swift */; }; 11A6B8E3CBDBF0A4107FF4CE /* OnboardingFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3285BD95B564CA2A948E511 /* OnboardingFlowCoordinator.swift */; }; - 121DDBFAD88B785630852C9A /* AppHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B048CB133239700CD890F5D /* AppHooks.swift */; }; 126EE01D8BEAEF26105D83C5 /* RoomDetailsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A5FEF17ED7E6176D922D4F /* RoomDetailsScreen.swift */; }; 12C867E85E6D12EEDFD0B127 /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C4762F8D6112E43117DB2F /* CustomStringConvertible.swift */; }; 12CCA59536EDD99A3272CF77 /* AppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC3F82523D6F48B926D6AF68 /* AppSettings.swift */; }; @@ -330,6 +330,7 @@ 4C356F5CCB4CDC99BFA45185 /* AppLockSetupPINScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7884BD256C091EB511B2EDF /* AppLockSetupPINScreenViewModelProtocol.swift */; }; 4C5A638DAA8AF64565BA4866 /* EncryptedRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5351EBD7A0B9610548E4B7B2 /* EncryptedRoomTimelineItem.swift */; }; 4C8C0C9FC10BA73AB7780534 /* RoomListFiltersStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AE0C9653870803E4F91F474 /* RoomListFiltersStateTests.swift */; }; + 4CE638FD837ED72CD98AD9A9 /* AppHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E4AB573FAEBB7B853DD04C /* AppHooks.swift */; }; 4D23D41B8109E010304050F8 /* QRCodeLoginScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA551A98778CEE7366838CE2 /* QRCodeLoginScreenCoordinator.swift */; }; 4D4D236F0BBCDC4D2CBCCBB5 /* RoomChangePermissionsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C729D95CB4588D4D9AAC3DFA /* RoomChangePermissionsScreenModels.swift */; }; 4E0D9E09B52CEC4C0E6211A8 /* MediaPickerScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F49FB9EE2913234F06CE68 /* MediaPickerScreenCoordinator.swift */; }; @@ -337,6 +338,7 @@ 4E8A2A2CFEB212F14E49E1A1 /* AppLockSetupSettingsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5484457C81B325660901B161 /* AppLockSetupSettingsScreen.swift */; }; 4E945AD6862C403F74E57755 /* RoomTimelineItemFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105B2A8426404EF66F00CFDB /* RoomTimelineItemFactory.swift */; }; 4EA1CE0E88EA68E862FF0EA2 /* NotificationSettingsEditScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B564D748B67A156F413CD97 /* NotificationSettingsEditScreenModels.swift */; }; + 4EAC427267424192964B16B3 /* AppSettingsHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BE9781699FB510E9263192 /* AppSettingsHook.swift */; }; 4F2DF6138E87A4B8C2488CA3 /* VoiceMessageCacheProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A84EE187D0C772E18A4E39 /* VoiceMessageCacheProtocol.swift */; }; 4FC085B1E5D1EB804495E2F4 /* MockMediaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FD6E621CC5E6D4830D96D2D /* MockMediaProvider.swift */; }; 4FC1EFE4968A259CBBACFAFB /* RoomProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A65F140F9FE5E8D4DAEFF354 /* RoomProxy.swift */; }; @@ -580,6 +582,7 @@ 874FEFB9D4A4AF447E0E086E /* AuthenticationStartScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0F7CCC4A9D1927223F559D5 /* AuthenticationStartScreenViewModelProtocol.swift */; }; 878070573C7BF19E735707B4 /* RoomTimelineItemProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DE8D25D6A91030175D52A20 /* RoomTimelineItemProperties.swift */; }; 87B4E59A4467F8EC75F82372 /* VoiceMessageRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B70A50C41C5871B4DB905E7E /* VoiceMessageRoomTimelineView.swift */; }; + 87CEA3E07B602705BC2D2A20 /* ClientBuilderHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC0CD1CAFD3F8B057F9AEA5 /* ClientBuilderHook.swift */; }; 87CEDB8A0696F0D5AE2ABB28 /* test_audio.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = D5E26C54362206BBDD096D83 /* test_audio.mp3 */; }; 8810A2A30A68252EBB54EE05 /* HomeScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BC7CA1BC1041E93077BBA1 /* HomeScreenModels.swift */; }; 88356DE7F2AD243AB10C7B7A /* Signposter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 752A0EB49BF5BCEA37EDF7A3 /* Signposter.swift */; }; @@ -692,6 +695,7 @@ A1BA8D6BABAFA9BAAEAA3FFD /* NotificationSettingsProxyProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FDD775CFD72DD2D3C8A8390 /* NotificationSettingsProxyProtocol.swift */; }; A1DF0E1E526A981ED6D5DF44 /* UserIndicatorControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2429224EB0EEA34D35CE9249 /* UserIndicatorControllerTests.swift */; }; A216C83ADCF32BA5EF8A6FBC /* InviteUsersViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845DDBDE5A0887E73D38B826 /* InviteUsersViewModelTests.swift */; }; + A2172B5A26976F9174228B8A /* AppHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E4AB573FAEBB7B853DD04C /* AppHooks.swift */; }; A23B8B27A1436A1049EEF68E /* InfoPlistReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A580295A56B55A856CC4084 /* InfoPlistReader.swift */; }; A2434D4DFB49A68E5CD0F53C /* MediaLoaderProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A02406480C351B8C6E0682C /* MediaLoaderProtocol.swift */; }; A2A5AB2E8B3F5CA769E531FA /* TextBasedRoomTimelineViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E47F18A9A077E351CEA10D4 /* TextBasedRoomTimelineViewProtocol.swift */; }; @@ -768,7 +772,6 @@ B444F9C184A377C1B481F07F /* XCUIElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = E992D7B8BE54B2AB454613AF /* XCUIElement.swift */; }; B4A0C69370E6008A971463E7 /* BugReportScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C89820BB2B88D4EA28131C /* BugReportScreenViewModelProtocol.swift */; }; B4AAB3257A83B73F53FB2689 /* StateStoreViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F3DFE5B444F131648066F05 /* StateStoreViewModel.swift */; }; - B50C95B6D1EABFE1CEA50959 /* AppHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B048CB133239700CD890F5D /* AppHooks.swift */; }; B5321A1F5B26A0F3EC54909E /* CollapsibleFlowLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5F5209279A752D98AAC4B2 /* CollapsibleFlowLayoutTests.swift */; }; B53D292A5CA61E371C4CD785 /* GenericCallLinkCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514923AA9640C34F39E0500A /* GenericCallLinkCoordinator.swift */; }; B5479997ECC516C121E6625E /* LocationMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFECCE59967018204876D0A5 /* LocationMarkerView.swift */; }; @@ -943,6 +946,7 @@ DF004A5B2EABBD0574D06A04 /* SplashScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854BCEAF2A832176FAACD2CB /* SplashScreenCoordinator.swift */; }; DF05F9C9D3D977EB77E13692 /* DeviceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 385D4C28F9DC5CF53BD9ECDB /* DeviceKit */; }; DF504B10A4918F971A57BEF2 /* PostHogAnalyticsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */; }; + DF8F1211F2B0B56F0FCCA5C2 /* CertificateValidatorHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3865AD7B7249C939D7C69C33 /* CertificateValidatorHook.swift */; }; DFCA89C4EC2A5332ED6B441F /* DataProtectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4959CECEC984B3995616F427 /* DataProtectionManager.swift */; }; DFD5AA8688A34C72D48AF3B1 /* StaticLocationScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5311C989EC15B4C2D699025 /* StaticLocationScreenViewModel.swift */; }; DFF7D6A6C26DDD40D00AE579 /* target.yml in Resources */ = {isa = PBXBuildFile; fileRef = F012CB5EE3F2B67359F6CC52 /* target.yml */; }; @@ -1038,6 +1042,7 @@ F40B097470D3110DFDB1FAAA /* LegalInformationScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47873756E45B46683D97DC32 /* LegalInformationScreenModels.swift */; }; F4971845B5C4F270F6BC5745 /* ScaledFrameModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D82F234B3576BD6268C7950 /* ScaledFrameModifier.swift */; }; F4996C82A4B3A5FF0C8EDD03 /* RoomListFilterModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E06AAD6D9D3F5833E7A5A2F9 /* RoomListFilterModels.swift */; }; + F4C005F006FC3657B9F0A31D /* BugReportHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25586C0ADB814FEE9897DCAA /* BugReportHook.swift */; }; F50A6FCE26714E27FE5495DD /* PollOptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50F23B21CF15F9F4BAA0788B /* PollOptionView.swift */; }; F519DE17A3A0F760307B2E6D /* InviteUsersScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D155E09BF961BBA8F85263 /* InviteUsersScreenViewModel.swift */; }; F541922A5B28C995E0BDB4E7 /* TimelineItemMenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF64B3A815D04325F1980E02 /* TimelineItemMenuAction.swift */; }; @@ -1228,6 +1233,7 @@ 130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = ""; }; 136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = ""; }; 13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; + 13BE9781699FB510E9263192 /* AppSettingsHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsHook.swift; sourceTree = ""; }; 1423AB065857FA546444DB15 /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; 1454CF3AABD242F55C8A2615 /* InviteUsersScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InviteUsersScreenModels.swift; sourceTree = ""; }; 153726EDCE1ACBB3D466A916 /* ReactionsSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionsSummaryView.swift; sourceTree = ""; }; @@ -1307,6 +1313,7 @@ 24EC819497BB5F8C4998D760 /* RoomListFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomListFilterView.swift; sourceTree = ""; }; 24F5530B2212862FA4BEFF2D /* HomeScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModelProtocol.swift; sourceTree = ""; }; 2525D78FEA7E7B132ED85C58 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 25586C0ADB814FEE9897DCAA /* BugReportHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportHook.swift; sourceTree = ""; }; 259E5B05BDE6E20C26CF11B4 /* PollInteractionHandlerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandlerProtocol.swift; sourceTree = ""; }; 25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = ""; }; 25F7FE40EF7490A7E09D7BE6 /* NotificationItemProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationItemProxy.swift; sourceTree = ""; }; @@ -1334,7 +1341,6 @@ 2AB2C848BB9A7A9B618B7B89 /* TextBasedRoomTimelineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextBasedRoomTimelineTests.swift; sourceTree = ""; }; 2AE807361805463F5AEDD1CA /* VoiceMessagePreviewComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessagePreviewComposer.swift; sourceTree = ""; }; 2AF715D4FD4710EBB637D661 /* SettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsScreenViewModelProtocol.swift; sourceTree = ""; }; - 2B048CB133239700CD890F5D /* AppHooks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppHooks.swift; sourceTree = ""; }; 2BB385E148DE55C85C0A02D6 /* SoftLogoutScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftLogoutScreenModels.swift; sourceTree = ""; }; 2BDB3E65A79779EDA5D33D8A /* AudioPlayerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerState.swift; sourceTree = ""; }; 2BFDCA5A09EE70BC17F2EFA7 /* URLComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLComponents.swift; sourceTree = ""; }; @@ -1386,6 +1392,7 @@ 382B50F7E379B3DBBD174364 /* NotificationSettingsProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsProxyMock.swift; sourceTree = ""; }; 38345442415E07A931197C55 /* AppLockScreenPINKeypad.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenPINKeypad.swift; sourceTree = ""; }; 38354164AF59C5006CD05878 /* GlobalSearchScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalSearchScreenViewModel.swift; sourceTree = ""; }; + 3865AD7B7249C939D7C69C33 /* CertificateValidatorHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertificateValidatorHook.swift; sourceTree = ""; }; 38E521D6C2BF8DF0DFB35146 /* DeveloperOptionsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreen.swift; sourceTree = ""; }; 3984C93B8E9B10C92DADF9EE /* RoomDirectorySearchScreenScreenModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchScreenScreenModelProtocol.swift; sourceTree = ""; }; 398817652FA8ABAE0A31AC6D /* ReadableFrameModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadableFrameModifier.swift; sourceTree = ""; }; @@ -1634,6 +1641,7 @@ 7A03E073077D92AA19C43DCF /* IdentityConfirmationScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityConfirmationScreenCoordinator.swift; sourceTree = ""; }; 7A5D2323D7B6BF4913EB7EED /* landscape_test_image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = landscape_test_image.jpg; sourceTree = ""; }; 7AAD8C633AA57948B34EDCF7 /* RoomChangeRolesScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChangeRolesScreenViewModelProtocol.swift; sourceTree = ""; }; + 7AC0CD1CAFD3F8B057F9AEA5 /* ClientBuilderHook.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientBuilderHook.swift; sourceTree = ""; }; 7AE094FCB6387D268C436161 /* SecureBackupScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupScreenViewModel.swift; sourceTree = ""; }; 7AE75941583A033A9EDC9FE0 /* RoomChangePermissionsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChangePermissionsScreenViewModel.swift; sourceTree = ""; }; 7AFD012C3A9F5EF276DDD4AA /* AnalyticsPromptScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreenViewModelProtocol.swift; sourceTree = ""; }; @@ -1881,6 +1889,7 @@ B63B69F9A2BC74DD40DC75C8 /* AdvancedSettingsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedSettingsScreenViewModel.swift; sourceTree = ""; }; B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = ""; }; B697816AF93DA06EC58C5D70 /* WaitlistScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModelProtocol.swift; sourceTree = ""; }; + B6E4AB573FAEBB7B853DD04C /* AppHooks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppHooks.swift; sourceTree = ""; }; B6E89E530A8E92EC44301CA1 /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; B70A50C41C5871B4DB905E7E /* VoiceMessageRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRoomTimelineView.swift; sourceTree = ""; }; B73587C2E3CF5998361AE516 /* HomeScreenRoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenRoomTests.swift; sourceTree = ""; }; @@ -2544,6 +2553,15 @@ path = View; sourceTree = ""; }; + 22F9F1514B91803BB4B88894 /* AppHooks */ = { + isa = PBXGroup; + children = ( + B6E4AB573FAEBB7B853DD04C /* AppHooks.swift */, + 2ED530A4DD98266D31E5D8E1 /* Hooks */, + ); + path = AppHooks; + sourceTree = ""; + }; 23605DD08620BE6558242469 /* MediaUploadPreviewScreen */ = { isa = PBXGroup; children = ( @@ -2680,6 +2698,17 @@ path = UITests; sourceTree = ""; }; + 2ED530A4DD98266D31E5D8E1 /* Hooks */ = { + isa = PBXGroup; + children = ( + 13BE9781699FB510E9263192 /* AppSettingsHook.swift */, + 25586C0ADB814FEE9897DCAA /* BugReportHook.swift */, + 3865AD7B7249C939D7C69C33 /* CertificateValidatorHook.swift */, + 7AC0CD1CAFD3F8B057F9AEA5 /* ClientBuilderHook.swift */, + ); + path = Hooks; + sourceTree = ""; + }; 2F2FED77226A43559F009463 /* TimelineController */ = { isa = PBXGroup; children = ( @@ -3735,14 +3764,6 @@ path = Items; sourceTree = ""; }; - 769D25068533684018BA0F82 /* Hooks */ = { - isa = PBXGroup; - children = ( - 2B048CB133239700CD890F5D /* AppHooks.swift */, - ); - path = Hooks; - sourceTree = ""; - }; 7803E03F759061C948D66B7E /* AppLock */ = { isa = PBXGroup; children = ( @@ -5005,8 +5026,8 @@ E59565F441830B19DBAE567C /* Screens */, C0937E3B06A8F0E2DB7C8241 /* Other */, 2ECFF6B05DAA37EB10DBF7E8 /* UITests */, + 22F9F1514B91803BB4B88894 /* AppHooks */, 337015ADFBA3AB96660DB3A6 /* Generated */, - 769D25068533684018BA0F82 /* Hooks */, 31CE4DA53232AA534057F912 /* Mocks */, 4C826614718790C58C17117F /* UnitTests */, ); @@ -5707,7 +5728,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 121DDBFAD88B785630852C9A /* AppHooks.swift in Sources */, + A2172B5A26976F9174228B8A /* AppHooks.swift in Sources */, 43F06DF42EC00B3CE2B020A4 /* AppSettings.swift in Sources */, F253AAB4C8F06208173C9C4A /* Assets.swift in Sources */, 484202C5D50983442D24D061 /* AttributedString.swift in Sources */, @@ -5716,6 +5737,7 @@ 968A5B890004526AB58A217C /* AvatarSize.swift in Sources */, 9A3B0CDF097E3838FB1B9595 /* Bundle.swift in Sources */, 238D561CA231339C6D4D06F3 /* ClientBuilder.swift in Sources */, + 0BAF83521871E69D222EE8E4 /* ClientBuilderHook.swift in Sources */, B5618E3C948584E5C1F67033 /* DTHTMLElement+AttributedStringBuilder.swift in Sources */, DFCA89C4EC2A5332ED6B441F /* DataProtectionManager.swift in Sources */, 24A75F72EEB7561B82D726FD /* Date.swift in Sources */, @@ -5935,7 +5957,7 @@ A021827B528F1EDC9101CA58 /* AppCoordinatorProtocol.swift in Sources */, 4FF90E2242DBD596E1ED2E27 /* AppCoordinatorStateMachine.swift in Sources */, 9D9690D2FD4CD26FF670620F /* AppDelegate.swift in Sources */, - B50C95B6D1EABFE1CEA50959 /* AppHooks.swift in Sources */, + 4CE638FD837ED72CD98AD9A9 /* AppHooks.swift in Sources */, 6851B077B4C913CC12DB6E77 /* AppLockFlowCoordinator.swift in Sources */, 06F8EDF52E33A2D36BCC1161 /* AppLockScreen.swift in Sources */, 9912F9EB2D6589141A2957B4 /* AppLockScreenCoordinator.swift in Sources */, @@ -5967,6 +5989,7 @@ 4BBF6C8E3EFC944B55231B19 /* AppMediatorProtocol.swift in Sources */, 355B11D08CE0CEF97A813236 /* AppRoutes.swift in Sources */, 12CCA59536EDD99A3272CF77 /* AppSettings.swift in Sources */, + 4EAC427267424192964B16B3 /* AppSettingsHook.swift in Sources */, 9462C62798F47E39DCC182D2 /* Application.swift in Sources */, 61A36B9BB2ADE36CEFF5E98C /* Array.swift in Sources */, 90EB25D13AE6EEF034BDE9D2 /* Assets.swift in Sources */, @@ -6012,6 +6035,7 @@ B6DF6B6FA8734B70F9BF261E /* BlurHashDecode.swift in Sources */, E794AB6ABE1FF5AF0573FEA1 /* BlurHashEncode.swift in Sources */, A8FA7671948E3DF27F320026 /* BugReportFlowCoordinator.swift in Sources */, + F4C005F006FC3657B9F0A31D /* BugReportHook.swift in Sources */, 6AD722DD92E465E56D2885AB /* BugReportScreen.swift in Sources */, B98A20A093A4FB785BFCCA53 /* BugReportScreenCoordinator.swift in Sources */, 4FFDC274824F7CC0BBDF581E /* BugReportScreenModels.swift in Sources */, @@ -6032,7 +6056,9 @@ 84CAE3E96D93194DA06B9194 /* CallScreenViewModelProtocol.swift in Sources */, BB6BF528BC7F5B87E08C4F18 /* CameraPicker.swift in Sources */, E14E469CD97550D0FC58F3CA /* CancellableTask.swift in Sources */, + DF8F1211F2B0B56F0FCCA5C2 /* CertificateValidatorHook.swift in Sources */, C80E06ED97CE52704A46C148 /* ClientBuilder.swift in Sources */, + 87CEA3E07B602705BC2D2A20 /* ClientBuilderHook.swift in Sources */, 6A0E7551E0D1793245F34CDD /* ClientError.swift in Sources */, 1950A80CD198BED283DFC2CE /* ClientProxy.swift in Sources */, DDFBDEE1DC32BDD5488F898C /* ClientProxyMock.swift in Sources */, diff --git a/ElementX/Sources/AppHooks/AppHooks.swift b/ElementX/Sources/AppHooks/AppHooks.swift new file mode 100644 index 0000000000..b2f7f7106a --- /dev/null +++ b/ElementX/Sources/AppHooks/AppHooks.swift @@ -0,0 +1,49 @@ +// +// Copyright 2024 New Vector 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. +// + +import Foundation + +class AppHooks: AppHooksProtocol { + #if IS_MAIN_APP + private(set) var appSettingsHook: AppSettingsHookProtocol = DefaultAppSettingsHook() + func registerAppSettingsHook(_ hook: AppSettingsHookProtocol) { + appSettingsHook = hook + } + + private(set) var bugReportHook: BugReportHookProtocol = DefaultBugReportHook() + func registerBugReportHook(_ hook: BugReportHookProtocol) { + bugReportHook = hook + } + + private(set) var certificateValidatorHook: CertificateValidatorHookProtocol = DefaultCertificateValidator() + func registerCertificateValidatorHook(_ hook: CertificateValidatorHookProtocol) { + certificateValidatorHook = hook + } + #endif + + private(set) var clientBuilderHook: ClientBuilderHookProtocol = DefaultClientBuilderHook() + func registerClientBuilderHook(_ hook: ClientBuilderHookProtocol) { + clientBuilderHook = hook + } +} + +protocol AppHooksProtocol { + func configure() +} + +extension AppHooksProtocol { + func configure() { } +} diff --git a/ElementX/Sources/AppHooks/Hooks/AppSettingsHook.swift b/ElementX/Sources/AppHooks/Hooks/AppSettingsHook.swift new file mode 100644 index 0000000000..2d886ffff3 --- /dev/null +++ b/ElementX/Sources/AppHooks/Hooks/AppSettingsHook.swift @@ -0,0 +1,25 @@ +// +// Copyright 2024 New Vector 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. +// + +import Foundation + +protocol AppSettingsHookProtocol { + func configure(_ appSettings: AppSettings) -> AppSettings +} + +struct DefaultAppSettingsHook: AppSettingsHookProtocol { + func configure(_ appSettings: AppSettings) -> AppSettings { appSettings } +} diff --git a/ElementX/Sources/AppHooks/Hooks/BugReportHook.swift b/ElementX/Sources/AppHooks/Hooks/BugReportHook.swift new file mode 100644 index 0000000000..68b615f735 --- /dev/null +++ b/ElementX/Sources/AppHooks/Hooks/BugReportHook.swift @@ -0,0 +1,25 @@ +// +// Copyright 2024 New Vector 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. +// + +import Foundation + +protocol BugReportHookProtocol { + func update(_ bugReport: BugReport) -> BugReport +} + +struct DefaultBugReportHook: BugReportHookProtocol { + func update(_ bugReport: BugReport) -> BugReport { bugReport } +} diff --git a/ElementX/Sources/AppHooks/Hooks/CertificateValidatorHook.swift b/ElementX/Sources/AppHooks/Hooks/CertificateValidatorHook.swift new file mode 100644 index 0000000000..5103fc3609 --- /dev/null +++ b/ElementX/Sources/AppHooks/Hooks/CertificateValidatorHook.swift @@ -0,0 +1,27 @@ +// +// Copyright 2024 New Vector 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. +// + +import Foundation + +protocol CertificateValidatorHookProtocol { + func respondTo(_ challenge: URLAuthenticationChallenge) async -> (URLSession.AuthChallengeDisposition, URLCredential?) +} + +struct DefaultCertificateValidator: CertificateValidatorHookProtocol { + func respondTo(_ challenge: URLAuthenticationChallenge) async -> (URLSession.AuthChallengeDisposition, URLCredential?) { + (.performDefaultHandling, nil) + } +} diff --git a/ElementX/Sources/AppHooks/Hooks/ClientBuilderHook.swift b/ElementX/Sources/AppHooks/Hooks/ClientBuilderHook.swift new file mode 100644 index 0000000000..910f4ae838 --- /dev/null +++ b/ElementX/Sources/AppHooks/Hooks/ClientBuilderHook.swift @@ -0,0 +1,25 @@ +// +// Copyright 2024 New Vector 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. +// + +import MatrixRustSDK + +protocol ClientBuilderHookProtocol { + func configure(_ builder: ClientBuilder) -> ClientBuilder +} + +struct DefaultClientBuilderHook: ClientBuilderHookProtocol { + func configure(_ builder: ClientBuilder) -> ClientBuilder { builder } +} diff --git a/ElementX/Sources/Application/AppCoordinator.swift b/ElementX/Sources/Application/AppCoordinator.swift index c79930a313..d7d61a35a1 100644 --- a/ElementX/Sources/Application/AppCoordinator.swift +++ b/ElementX/Sources/Application/AppCoordinator.swift @@ -74,7 +74,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg windowManager = WindowManager(appDelegate: appDelegate) appMediator = AppMediator(windowManager: windowManager) - let appSettings = appHooks.runAppSettingsHook(AppSettings()) + let appSettings = appHooks.appSettingsHook.configure(AppSettings()) MXLog.configure(logLevel: appSettings.logLevel) @@ -534,6 +534,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg roomTimelineControllerFactory: RoomTimelineControllerFactory(), appMediator: appMediator, appSettings: appSettings, + appHooks: appHooks, analytics: ServiceLocator.shared.analytics, notificationManager: notificationManager, isNewLogin: isNewLogin) diff --git a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift index d8bfe46228..44a9ae8712 100644 --- a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift @@ -32,6 +32,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { private let elementCallService: ElementCallServiceProtocol private let appMediator: AppMediatorProtocol private let appSettings: AppSettings + private let appHooks: AppHooks private let analytics: AnalyticsService private let notificationManager: NotificationManagerProtocol @@ -74,6 +75,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { roomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol, appMediator: AppMediatorProtocol, appSettings: AppSettings, + appHooks: AppHooks, analytics: AnalyticsService, notificationManager: NotificationManagerProtocol, isNewLogin: Bool) { @@ -85,6 +87,7 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { self.roomTimelineControllerFactory = roomTimelineControllerFactory self.appMediator = appMediator self.appSettings = appSettings + self.appHooks = appHooks self.analytics = analytics self.notificationManager = notificationManager @@ -561,7 +564,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { clientID: InfoPlistReader.main.bundleIdentifier, elementCallBaseURL: appSettings.elementCallBaseURL, elementCallBaseURLOverride: appSettings.elementCallBaseURLOverride, - colorScheme: colorScheme)) + colorScheme: colorScheme, + appHooks: appHooks)) callScreenCoordinator.actions .sink { [weak self] action in diff --git a/ElementX/Sources/Hooks/AppHooks.swift b/ElementX/Sources/Hooks/AppHooks.swift deleted file mode 100644 index b8e53ce697..0000000000 --- a/ElementX/Sources/Hooks/AppHooks.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// Copyright 2024 New Vector 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. -// - -import Foundation -import MatrixRustSDK - -// MARK: Registration - -class AppHooks: AppHooksProtocol { - #if IS_MAIN_APP - private var appSettingsHook: AppSettingsHookProtocol? - func registerAppSettingsHook(_ hook: AppSettingsHookProtocol) { - appSettingsHook = hook - } - - func runAppSettingsHook(_ appSettings: AppSettings) -> AppSettings { - guard let appSettingsHook else { return appSettings } - return appSettingsHook.run(appSettings: appSettings) - } - - private var bugReportHook: BugReportHookProtocol? - func registerBugReportHook(_ hook: BugReportHookProtocol) { - bugReportHook = hook - } - - func runBugReportHook(_ bugReport: BugReport) -> BugReport { - guard let bugReportHook else { return bugReport } - return bugReportHook.run(bugReport: bugReport) - } - #endif - - private var clientBuilderHook: ClientBuilderHookProtocol? - func registerClientBuilderHook(_ hook: ClientBuilderHookProtocol) { - clientBuilderHook = hook - } - - func runClientBuilderHook(_ clientBuilder: ClientBuilder) -> ClientBuilder { - guard let clientBuilderHook else { return clientBuilder } - return clientBuilderHook.run(builder: clientBuilder) - } -} - -protocol AppHooksProtocol { - func configure() -} - -extension AppHooksProtocol { - func configure() { } -} - -// MARK: Protocols - -#if IS_MAIN_APP -protocol AppSettingsHookProtocol { - func run(appSettings: AppSettings) -> AppSettings -} - -protocol BugReportHookProtocol { - func run(bugReport: BugReport) -> BugReport -} -#endif - -protocol ClientBuilderHookProtocol { - func run(builder: ClientBuilder) -> ClientBuilder -} diff --git a/ElementX/Sources/Other/Extensions/ClientBuilder.swift b/ElementX/Sources/Other/Extensions/ClientBuilder.swift index 41639549d4..4106061919 100644 --- a/ElementX/Sources/Other/Extensions/ClientBuilder.swift +++ b/ElementX/Sources/Other/Extensions/ClientBuilder.swift @@ -42,6 +42,6 @@ extension ClientBuilder { builder = builder.proxy(url: httpProxy) } - return appHooks.runClientBuilderHook(builder) + return appHooks.clientBuilderHook.configure(builder) } } diff --git a/ElementX/Sources/Screens/CallScreen/CallScreenCoordinator.swift b/ElementX/Sources/Screens/CallScreen/CallScreenCoordinator.swift index 3b9c30366b..bfdc7299d8 100644 --- a/ElementX/Sources/Screens/CallScreen/CallScreenCoordinator.swift +++ b/ElementX/Sources/Screens/CallScreen/CallScreenCoordinator.swift @@ -25,6 +25,7 @@ struct CallScreenCoordinatorParameters { let elementCallBaseURL: URL let elementCallBaseURLOverride: URL? let colorScheme: ColorScheme + let appHooks: AppHooks } enum CallScreenCoordinatorAction { @@ -47,7 +48,8 @@ final class CallScreenCoordinator: CoordinatorProtocol { clientID: parameters.clientID, elementCallBaseURL: parameters.elementCallBaseURL, elementCallBaseURLOverride: parameters.elementCallBaseURLOverride, - colorScheme: parameters.colorScheme) + colorScheme: parameters.colorScheme, + appHooks: parameters.appHooks) } func start() { diff --git a/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift b/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift index eab7da36ee..c9098b11cd 100644 --- a/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift +++ b/ElementX/Sources/Screens/CallScreen/CallScreenModels.swift @@ -24,6 +24,9 @@ struct CallScreenViewState: BindableState { let messageHandler: String let script: String? var url: URL? + + let certificateValidator: CertificateValidatorHookProtocol + var bindings = Bindings() } diff --git a/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift b/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift index d74e467adc..2c0175786f 100644 --- a/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift +++ b/ElementX/Sources/Screens/CallScreen/CallScreenViewModel.swift @@ -43,7 +43,8 @@ class CallScreenViewModel: CallScreenViewModelType, CallScreenViewModelProtocol clientID: String, elementCallBaseURL: URL, elementCallBaseURLOverride: URL?, - colorScheme: ColorScheme) { + colorScheme: ColorScheme, + appHooks: AppHooks) { guard let deviceID = clientProxy.deviceID else { fatalError("Missing device ID for the call.") } self.elementCallService = elementCallService @@ -52,7 +53,8 @@ class CallScreenViewModel: CallScreenViewModelType, CallScreenViewModelProtocol widgetDriver = roomProxy.elementCallWidgetDriver(deviceID: deviceID) super.init(initialViewState: CallScreenViewState(messageHandler: Self.eventHandlerName, - script: Self.eventHandlerInjectionScript)) + script: Self.eventHandlerInjectionScript, + certificateValidator: appHooks.certificateValidatorHook)) state.bindings.javaScriptMessageHandler = { [weak self] message in guard let self, diff --git a/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift b/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift index 1204edc5b2..4e679d27f9 100644 --- a/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift +++ b/ElementX/Sources/Screens/CallScreen/View/CallScreen.swift @@ -54,6 +54,7 @@ private struct WebView: UIViewRepresentable { @MainActor class Coordinator: NSObject, WKUIDelegate, WKNavigationDelegate { private weak var viewModelContext: CallScreenViewModel.Context? + private let certificateValidator: CertificateValidatorHookProtocol private(set) var webView: WKWebView! @@ -61,6 +62,7 @@ private struct WebView: UIViewRepresentable { init(viewModelContext: CallScreenViewModel.Context) { self.viewModelContext = viewModelContext + certificateValidator = viewModelContext.viewState.certificateValidator super.init() @@ -131,6 +133,10 @@ private struct WebView: UIViewRepresentable { // MARK: - WKNavigationDelegate + func webView(_ webView: WKWebView, respondTo challenge: URLAuthenticationChallenge) async -> (URLSession.AuthChallengeDisposition, URLCredential?) { + await certificateValidator.respondTo(challenge) + } + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction) async -> WKNavigationActionPolicy { // Allow any content from the main URL. if navigationAction.request.url?.host == url.host { @@ -193,7 +199,8 @@ struct CallScreen_Previews: PreviewProvider { clientID: "io.element.elementx", elementCallBaseURL: "https://call.element.io", elementCallBaseURLOverride: nil, - colorScheme: .light) + colorScheme: .light, + appHooks: AppHooks()) }() static var previews: some View { diff --git a/ElementX/Sources/Services/BugReport/BugReportService.swift b/ElementX/Sources/Services/BugReport/BugReportService.swift index 8505f500ef..de08a6ed7f 100644 --- a/ElementX/Sources/Services/BugReport/BugReportService.swift +++ b/ElementX/Sources/Services/BugReport/BugReportService.swift @@ -58,7 +58,7 @@ class BugReportService: NSObject, BugReportServiceProtocol { // swiftlint:disable:next cyclomatic_complexity func submitBugReport(_ bugReport: BugReport, progressListener: CurrentValueSubject) async -> Result { - let bugReport = appHooks.runBugReportHook(bugReport) + let bugReport = appHooks.bugReportHook.update(bugReport) var params = [ MultipartFormData(key: "text", type: .text(value: bugReport.text)), diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index d07d9e962a..27d2bd2bb9 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -532,6 +532,7 @@ class MockScreen: Identifiable { roomTimelineControllerFactory: RoomTimelineControllerFactoryMock(configuration: .init()), appMediator: appMediator, appSettings: appSettings, + appHooks: AppHooks(), analytics: ServiceLocator.shared.analytics, notificationManager: NotificationManagerMock(), isNewLogin: false) @@ -648,6 +649,7 @@ class MockScreen: Identifiable { roomTimelineControllerFactory: RoomTimelineControllerFactoryMock(configuration: .init(timelineController: timelineController)), appMediator: AppMediatorMock.default, appSettings: appSettings, + appHooks: AppHooks(), analytics: ServiceLocator.shared.analytics, notificationManager: NotificationManagerMock(), isNewLogin: false) diff --git a/Enterprise b/Enterprise index 9fae88678e..6ab88ea76e 160000 --- a/Enterprise +++ b/Enterprise @@ -1 +1 @@ -Subproject commit 9fae88678e844e9284c3b10591ac700970862d9c +Subproject commit 6ab88ea76e345b65868b780c4dbeb14254aaf691 diff --git a/Gemfile.lock b/Gemfile.lock index 5a70c48006..b6503f6944 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -120,7 +120,7 @@ GEM rest-client (~> 2.0, >= 2.0.2) fastlane-plugin-sentry (1.20.0) os (~> 1.1, >= 1.1.4) - fastlane-plugin-xcconfig (2.0.0) + fastlane-plugin-xcconfig (2.1.0) fastlane-plugin-xcodegen (1.1.0) fastlane-plugin-brew (~> 0.1.1) gh_inspector (1.1.3) diff --git a/NSE/SupportingFiles/target.yml b/NSE/SupportingFiles/target.yml index d553fba63f..8de457a687 100644 --- a/NSE/SupportingFiles/target.yml +++ b/NSE/SupportingFiles/target.yml @@ -107,4 +107,5 @@ targets: - path: ../../ElementX/Sources/Services/UserSession/RestorationToken.swift - path: ../../ElementX/Sources/Services/ElementCall/ElementCallServiceConstants.swift - path: ../../ElementX/Sources/Application/AppSettings.swift - - path: ../../ElementX/Sources/Hooks/AppHooks.swift + - path: ../../ElementX/Sources/AppHooks/AppHooks.swift + - path: ../../ElementX/Sources/AppHooks/Hooks/ClientBuilderHook.swift diff --git a/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift b/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift index 0428dded55..240f2adb55 100644 --- a/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift +++ b/UnitTests/Sources/UserSessionFlowCoordinatorTests.swift @@ -50,6 +50,7 @@ class UserSessionFlowCoordinatorTests: XCTestCase { roomTimelineControllerFactory: timelineControllerFactory, appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, + appHooks: AppHooks(), analytics: ServiceLocator.shared.analytics, notificationManager: notificationManager, isNewLogin: false) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a3dfaa5351..0e67bc0b89 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -412,6 +412,7 @@ private_lane :config_secrets do set_xcconfig_value( path: './ElementX/SupportingFiles/secrets.xcconfig', name: 'MAPLIBRE_API_KEY', - value: maplibre_api_key + value: maplibre_api_key, + mask_value: true ) end