Update permission alerts (#1953)

* Update system alerts

* Update localisations

* Update localizations
This commit is contained in:
Alfonso Grillo 2023-10-24 16:57:27 +02:00 committed by GitHub
parent c885585b6b
commit 6e5680fc36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 74 additions and 28 deletions

View File

@ -50,7 +50,7 @@
"action_no" = "No"; "action_no" = "No";
"action_not_now" = "Not now"; "action_not_now" = "Not now";
"action_ok" = "OK"; "action_ok" = "OK";
"action_open_settings" = "Open settings"; "action_open_settings" = "Settings";
"action_open_with" = "Open with"; "action_open_with" = "Open with";
"action_quick_reply" = "Quick reply"; "action_quick_reply" = "Quick reply";
"action_quote" = "Quote"; "action_quote" = "Quote";
@ -167,12 +167,17 @@
"common_video" = "Video"; "common_video" = "Video";
"common_voice_message" = "Voice message"; "common_voice_message" = "Voice message";
"common_waiting" = "Waiting…"; "common_waiting" = "Waiting…";
"common_waiting_for_decryption_key" = "Waiting for decryption key";
"common_poll_end_confirmation" = "Are you sure you want to end this poll?"; "common_poll_end_confirmation" = "Are you sure you want to end this poll?";
"common_poll_summary" = "Poll: %1$@"; "common_poll_summary" = "Poll: %1$@";
"crash_detection_dialog_content" = "%1$@ crashed the last time it was used. Would you like to share a crash report with us?"; "crash_detection_dialog_content" = "%1$@ crashed the last time it was used. Would you like to share a crash report with us?";
"dialog_permission_camera" = "In order to let the application use the camera, please grant the permission in the system settings."; "dialog_permission_camera" = "In order to let the application use the camera, please grant the permission in the system settings.";
"dialog_permission_generic" = "Please grant the permission in the system settings."; "dialog_permission_generic" = "Please grant the permission in the system settings.";
"dialog_permission_location_description_ios" = "Grant access in Settings -> Location.";
"dialog_permission_location_title_ios" = "%1$@ does not have access to your location.";
"dialog_permission_microphone" = "In order to let the application use the microphone, please grant the permission in the system settings."; "dialog_permission_microphone" = "In order to let the application use the microphone, please grant the permission in the system settings.";
"dialog_permission_microphone_description_ios" = "Grant access so you can record and send messages with audio.";
"dialog_permission_microphone_title_ios" = "%1$@ needs permission to access your microphone.";
"dialog_permission_notification" = "In order to let the application display notifications, please grant the permission in the system settings."; "dialog_permission_notification" = "In order to let the application display notifications, please grant the permission in the system settings.";
"dialog_title_confirmation" = "Confirmation"; "dialog_title_confirmation" = "Confirmation";
"dialog_title_warning" = "Warning"; "dialog_title_warning" = "Warning";
@ -414,6 +419,8 @@
"screen_recovery_key_confirm_key_placeholder" = "Enter..."; "screen_recovery_key_confirm_key_placeholder" = "Enter...";
"screen_recovery_key_confirm_success" = "Recovery key confirmed"; "screen_recovery_key_confirm_success" = "Recovery key confirmed";
"screen_recovery_key_confirm_title" = "Confirm your recovery key"; "screen_recovery_key_confirm_title" = "Confirm your recovery key";
"screen_recovery_key_copied_to_clipboard" = "Copied recovery key";
"screen_recovery_key_generating_key" = "Generating…";
"screen_recovery_key_save_action" = "Save recovery key"; "screen_recovery_key_save_action" = "Save recovery key";
"screen_recovery_key_save_description" = "Write down your recovery key somewhere safe or save it in a password manager."; "screen_recovery_key_save_description" = "Write down your recovery key somewhere safe or save it in a password manager.";
"screen_recovery_key_save_key_description" = "Tap to copy recovery key"; "screen_recovery_key_save_key_description" = "Tap to copy recovery key";
@ -452,7 +459,8 @@
"screen_room_details_room_name_label" = "Room name"; "screen_room_details_room_name_label" = "Room name";
"screen_room_details_share_room_title" = "Share room"; "screen_room_details_share_room_title" = "Share room";
"screen_room_details_updating_room" = "Updating room…"; "screen_room_details_updating_room" = "Updating room…";
"screen_room_encrypted_history_banner" = "Message history is currently unavailable in this room"; "screen_room_encrypted_history_banner" = "Message history is currently unavailable.";
"screen_room_encrypted_history_banner_unverified" = "Message history is unavailable in this room. Verify this device to see your message history.";
"screen_room_error_failed_retrieving_user_details" = "Could not retrieve user details"; "screen_room_error_failed_retrieving_user_details" = "Could not retrieve user details";
"screen_room_invite_again_alert_message" = "Would you like to invite them back?"; "screen_room_invite_again_alert_message" = "Would you like to invite them back?";
"screen_room_invite_again_alert_title" = "You are alone in this chat"; "screen_room_invite_again_alert_title" = "You are alone in this chat";
@ -521,13 +529,19 @@
"screen_signed_out_reason_3" = "Your servers administrator has invalidated your access"; "screen_signed_out_reason_3" = "Your servers administrator has invalidated your access";
"screen_signed_out_subtitle" = "You might have been signed out for one of the reasons listed below. Please sign in again to continue using %@."; "screen_signed_out_subtitle" = "You might have been signed out for one of the reasons listed below. Please sign in again to continue using %@.";
"screen_signed_out_title" = "Youre signed out"; "screen_signed_out_title" = "Youre signed out";
"screen_signout_backing_up_subtitle" = "Please wait for this to complete before signing out.";
"screen_signout_backing_up_title" = "Your keys are still being backed up";
"screen_signout_confirmation_dialog_content" = "Are you sure you want to sign out?"; "screen_signout_confirmation_dialog_content" = "Are you sure you want to sign out?";
"screen_signout_confirmation_dialog_title" = "Sign out"; "screen_signout_confirmation_dialog_title" = "Sign out";
"screen_signout_in_progress_dialog_content" = "Signing out…"; "screen_signout_in_progress_dialog_content" = "Signing out…";
"screen_signout_last_session_subtitle" = "You are about to sign out of your last session. If you sign out now, you might lose access to your encrypted messages."; "screen_signout_key_backup_disabled_subtitle" = "You are about to sign out of your last session. If you sign out now, you will lose access to your encrypted messages.";
"screen_signout_last_session_title" = "Have you saved your recovery key?"; "screen_signout_key_backup_disabled_title" = "You have turned off backup";
"screen_signout_key_backup_offline_subtitle" = "Your keys were still being backed up when you went offline. Reconnect so that your keys can be backed up before signing out.";
"screen_signout_key_backup_offline_title" = "Your keys are still being backed up";
"screen_signout_key_backup_ongoing_subtitle" = "Please wait for this to complete before signing out.";
"screen_signout_key_backup_ongoing_title" = "Your keys are still being backed up";
"screen_signout_recovery_disabled_subtitle" = "You are about to sign out of your last session. If you sign out now, you'll lose access to your encrypted messages.";
"screen_signout_recovery_disabled_title" = "Recovery not set up";
"screen_signout_save_recovery_key_subtitle" = "You are about to sign out of your last session. If you sign out now, you might lose access to your encrypted messages.";
"screen_signout_save_recovery_key_title" = "Have you saved your recovery key?";
"screen_start_chat_error_starting_chat" = "An error occurred when trying to start a chat"; "screen_start_chat_error_starting_chat" = "An error occurred when trying to start a chat";
"screen_view_location_title" = "Location"; "screen_view_location_title" = "Location";
"screen_waitlist_message" = "There's a high demand for %1$@ on %2$@ at the moment. Come back to the app in a few days and try again.\n\nThanks for your patience!"; "screen_waitlist_message" = "There's a high demand for %1$@ on %2$@ at the moment. Come back to the app in a few days and try again.\n\nThanks for your patience!";

View File

@ -120,7 +120,7 @@ public enum L10n {
public static var actionNotNow: String { return L10n.tr("Localizable", "action_not_now") } public static var actionNotNow: String { return L10n.tr("Localizable", "action_not_now") }
/// OK /// OK
public static var actionOk: String { return L10n.tr("Localizable", "action_ok") } public static var actionOk: String { return L10n.tr("Localizable", "action_ok") }
/// Open settings /// Settings
public static var actionOpenSettings: String { return L10n.tr("Localizable", "action_open_settings") } public static var actionOpenSettings: String { return L10n.tr("Localizable", "action_open_settings") }
/// Open with /// Open with
public static var actionOpenWith: String { return L10n.tr("Localizable", "action_open_with") } public static var actionOpenWith: String { return L10n.tr("Localizable", "action_open_with") }
@ -374,6 +374,8 @@ public enum L10n {
public static var commonVoiceMessage: String { return L10n.tr("Localizable", "common_voice_message") } public static var commonVoiceMessage: String { return L10n.tr("Localizable", "common_voice_message") }
/// Waiting /// Waiting
public static var commonWaiting: String { return L10n.tr("Localizable", "common_waiting") } public static var commonWaiting: String { return L10n.tr("Localizable", "common_waiting") }
/// Waiting for decryption key
public static var commonWaitingForDecryptionKey: String { return L10n.tr("Localizable", "common_waiting_for_decryption_key") }
/// %1$@ crashed the last time it was used. Would you like to share a crash report with us? /// %1$@ crashed the last time it was used. Would you like to share a crash report with us?
public static func crashDetectionDialogContent(_ p1: Any) -> String { public static func crashDetectionDialogContent(_ p1: Any) -> String {
return L10n.tr("Localizable", "crash_detection_dialog_content", String(describing: p1)) return L10n.tr("Localizable", "crash_detection_dialog_content", String(describing: p1))
@ -382,8 +384,20 @@ public enum L10n {
public static var dialogPermissionCamera: String { return L10n.tr("Localizable", "dialog_permission_camera") } public static var dialogPermissionCamera: String { return L10n.tr("Localizable", "dialog_permission_camera") }
/// Please grant the permission in the system settings. /// Please grant the permission in the system settings.
public static var dialogPermissionGeneric: String { return L10n.tr("Localizable", "dialog_permission_generic") } public static var dialogPermissionGeneric: String { return L10n.tr("Localizable", "dialog_permission_generic") }
/// Grant access in Settings -> Location.
public static var dialogPermissionLocationDescriptionIos: String { return L10n.tr("Localizable", "dialog_permission_location_description_ios") }
/// %1$@ does not have access to your location.
public static func dialogPermissionLocationTitleIos(_ p1: Any) -> String {
return L10n.tr("Localizable", "dialog_permission_location_title_ios", String(describing: p1))
}
/// In order to let the application use the microphone, please grant the permission in the system settings. /// In order to let the application use the microphone, please grant the permission in the system settings.
public static var dialogPermissionMicrophone: String { return L10n.tr("Localizable", "dialog_permission_microphone") } public static var dialogPermissionMicrophone: String { return L10n.tr("Localizable", "dialog_permission_microphone") }
/// Grant access so you can record and send messages with audio.
public static var dialogPermissionMicrophoneDescriptionIos: String { return L10n.tr("Localizable", "dialog_permission_microphone_description_ios") }
/// %1$@ needs permission to access your microphone.
public static func dialogPermissionMicrophoneTitleIos(_ p1: Any) -> String {
return L10n.tr("Localizable", "dialog_permission_microphone_title_ios", String(describing: p1))
}
/// In order to let the application display notifications, please grant the permission in the system settings. /// In order to let the application display notifications, please grant the permission in the system settings.
public static var dialogPermissionNotification: String { return L10n.tr("Localizable", "dialog_permission_notification") } public static var dialogPermissionNotification: String { return L10n.tr("Localizable", "dialog_permission_notification") }
/// Confirmation /// Confirmation
@ -1002,6 +1016,10 @@ public enum L10n {
public static var screenRecoveryKeyConfirmSuccess: String { return L10n.tr("Localizable", "screen_recovery_key_confirm_success") } public static var screenRecoveryKeyConfirmSuccess: String { return L10n.tr("Localizable", "screen_recovery_key_confirm_success") }
/// Confirm your recovery key /// Confirm your recovery key
public static var screenRecoveryKeyConfirmTitle: String { return L10n.tr("Localizable", "screen_recovery_key_confirm_title") } public static var screenRecoveryKeyConfirmTitle: String { return L10n.tr("Localizable", "screen_recovery_key_confirm_title") }
/// Copied recovery key
public static var screenRecoveryKeyCopiedToClipboard: String { return L10n.tr("Localizable", "screen_recovery_key_copied_to_clipboard") }
/// Generating
public static var screenRecoveryKeyGeneratingKey: String { return L10n.tr("Localizable", "screen_recovery_key_generating_key") }
/// Save recovery key /// Save recovery key
public static var screenRecoveryKeySaveAction: String { return L10n.tr("Localizable", "screen_recovery_key_save_action") } public static var screenRecoveryKeySaveAction: String { return L10n.tr("Localizable", "screen_recovery_key_save_action") }
/// Write down your recovery key somewhere safe or save it in a password manager. /// Write down your recovery key somewhere safe or save it in a password manager.
@ -1086,8 +1104,10 @@ public enum L10n {
public static var screenRoomDetailsTopicTitle: String { return L10n.tr("Localizable", "screen_room_details_topic_title") } public static var screenRoomDetailsTopicTitle: String { return L10n.tr("Localizable", "screen_room_details_topic_title") }
/// Updating room /// Updating room
public static var screenRoomDetailsUpdatingRoom: String { return L10n.tr("Localizable", "screen_room_details_updating_room") } public static var screenRoomDetailsUpdatingRoom: String { return L10n.tr("Localizable", "screen_room_details_updating_room") }
/// Message history is currently unavailable in this room /// Message history is currently unavailable.
public static var screenRoomEncryptedHistoryBanner: String { return L10n.tr("Localizable", "screen_room_encrypted_history_banner") } public static var screenRoomEncryptedHistoryBanner: String { return L10n.tr("Localizable", "screen_room_encrypted_history_banner") }
/// Message history is unavailable in this room. Verify this device to see your message history.
public static var screenRoomEncryptedHistoryBannerUnverified: String { return L10n.tr("Localizable", "screen_room_encrypted_history_banner_unverified") }
/// Failed processing media to upload, please try again. /// Failed processing media to upload, please try again.
public static var screenRoomErrorFailedProcessingMedia: String { return L10n.tr("Localizable", "screen_room_error_failed_processing_media") } public static var screenRoomErrorFailedProcessingMedia: String { return L10n.tr("Localizable", "screen_room_error_failed_processing_media") }
/// Could not retrieve user details /// Could not retrieve user details
@ -1238,10 +1258,6 @@ public enum L10n {
} }
/// Youre signed out /// Youre signed out
public static var screenSignedOutTitle: String { return L10n.tr("Localizable", "screen_signed_out_title") } public static var screenSignedOutTitle: String { return L10n.tr("Localizable", "screen_signed_out_title") }
/// Please wait for this to complete before signing out.
public static var screenSignoutBackingUpSubtitle: String { return L10n.tr("Localizable", "screen_signout_backing_up_subtitle") }
/// Your keys are still being backed up
public static var screenSignoutBackingUpTitle: String { return L10n.tr("Localizable", "screen_signout_backing_up_title") }
/// Are you sure you want to sign out? /// Are you sure you want to sign out?
public static var screenSignoutConfirmationDialogContent: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_content") } public static var screenSignoutConfirmationDialogContent: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_content") }
/// Sign out /// Sign out
@ -1250,12 +1266,28 @@ public enum L10n {
public static var screenSignoutConfirmationDialogTitle: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_title") } public static var screenSignoutConfirmationDialogTitle: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_title") }
/// Signing out /// Signing out
public static var screenSignoutInProgressDialogContent: String { return L10n.tr("Localizable", "screen_signout_in_progress_dialog_content") } public static var screenSignoutInProgressDialogContent: String { return L10n.tr("Localizable", "screen_signout_in_progress_dialog_content") }
/// You are about to sign out of your last session. If you sign out now, you might lose access to your encrypted messages. /// You are about to sign out of your last session. If you sign out now, you will lose access to your encrypted messages.
public static var screenSignoutLastSessionSubtitle: String { return L10n.tr("Localizable", "screen_signout_last_session_subtitle") } public static var screenSignoutKeyBackupDisabledSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_disabled_subtitle") }
/// Have you saved your recovery key? /// You have turned off backup
public static var screenSignoutLastSessionTitle: String { return L10n.tr("Localizable", "screen_signout_last_session_title") } public static var screenSignoutKeyBackupDisabledTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_disabled_title") }
/// Your keys were still being backed up when you went offline. Reconnect so that your keys can be backed up before signing out.
public static var screenSignoutKeyBackupOfflineSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_offline_subtitle") }
/// Your keys are still being backed up
public static var screenSignoutKeyBackupOfflineTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_offline_title") }
/// Please wait for this to complete before signing out.
public static var screenSignoutKeyBackupOngoingSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_ongoing_subtitle") }
/// Your keys are still being backed up
public static var screenSignoutKeyBackupOngoingTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_ongoing_title") }
/// Sign out /// Sign out
public static var screenSignoutPreferenceItem: String { return L10n.tr("Localizable", "screen_signout_preference_item") } public static var screenSignoutPreferenceItem: String { return L10n.tr("Localizable", "screen_signout_preference_item") }
/// You are about to sign out of your last session. If you sign out now, you'll lose access to your encrypted messages.
public static var screenSignoutRecoveryDisabledSubtitle: String { return L10n.tr("Localizable", "screen_signout_recovery_disabled_subtitle") }
/// Recovery not set up
public static var screenSignoutRecoveryDisabledTitle: String { return L10n.tr("Localizable", "screen_signout_recovery_disabled_title") }
/// You are about to sign out of your last session. If you sign out now, you might lose access to your encrypted messages.
public static var screenSignoutSaveRecoveryKeySubtitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_subtitle") }
/// Have you saved your recovery key?
public static var screenSignoutSaveRecoveryKeyTitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_title") }
/// An error occurred when trying to start a chat /// An error occurred when trying to start a chat
public static var screenStartChatErrorStartingChat: String { return L10n.tr("Localizable", "screen_start_chat_error_starting_chat") } public static var screenStartChatErrorStartingChat: String { return L10n.tr("Localizable", "screen_start_chat_error_starting_chat") }
/// Location /// Location

View File

@ -148,8 +148,8 @@ extension AlertInfo where T == LocationSharingViewError {
switch error { switch error {
case .missingAuthorization: case .missingAuthorization:
self.init(id: error, self.init(id: error,
title: "", title: L10n.dialogPermissionLocationTitleIos(InfoPlistReader.main.bundleDisplayName),
message: L10n.errorMissingLocationAuthIos(InfoPlistReader.main.bundleDisplayName), message: L10n.dialogPermissionLocationDescriptionIos,
primaryButton: primaryButton, primaryButton: primaryButton,
secondaryButton: secondaryButton) secondaryButton: secondaryButton)
case .mapError(.failedLoadingMap): case .mapError(.failedLoadingMap):

View File

@ -48,7 +48,7 @@ class StaticLocationScreenViewModel: StaticLocationScreenViewModelType, StaticLo
let action: () -> Void = { [weak self] in self?.actionsSubject.send(.openSystemSettings) } let action: () -> Void = { [weak self] in self?.actionsSubject.send(.openSystemSettings) }
state.bindings.alertInfo = .init(locationSharingViewError: .missingAuthorization, state.bindings.alertInfo = .init(locationSharingViewError: .missingAuthorization,
primaryButton: .init(title: L10n.actionNotNow, role: .cancel, action: nil), primaryButton: .init(title: L10n.actionNotNow, role: .cancel, action: nil),
secondaryButton: .init(title: L10n.commonSettings, action: action)) secondaryButton: .init(title: L10n.actionOpenSettings, action: action))
} }
} }
} }

View File

@ -954,8 +954,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
switch error { switch error {
case .audioRecorderError(.recordPermissionNotGranted): case .audioRecorderError(.recordPermissionNotGranted):
state.bindings.confirmationAlertInfo = .init(id: .init(), state.bindings.confirmationAlertInfo = .init(id: .init(),
title: "", title: L10n.dialogPermissionMicrophoneTitleIos(InfoPlistReader.main.bundleDisplayName),
message: L10n.dialogPermissionMicrophone, message: L10n.dialogPermissionMicrophoneDescriptionIos,
primaryButton: .init(title: L10n.actionOpenSettings, action: { [weak self] in self?.openSystemSettings() }), primaryButton: .init(title: L10n.actionOpenSettings, action: { [weak self] in self?.openSystemSettings() }),
secondaryButton: .init(title: L10n.actionNotNow, role: .cancel, action: nil)) secondaryButton: .init(title: L10n.actionNotNow, role: .cancel, action: nil))
default: default:

View File

@ -67,9 +67,9 @@
<key>NSCameraUsageDescription</key> <key>NSCameraUsageDescription</key>
<string>To take pictures or videos and send them as a message $(APP_DISPLAY_NAME) needs access to the camera.</string> <string>To take pictures or videos and send them as a message $(APP_DISPLAY_NAME) needs access to the camera.</string>
<key>NSLocationWhenInUseUsageDescription</key> <key>NSLocationWhenInUseUsageDescription</key>
<string>When you share your location to people, $(APP_DISPLAY_NAME) needs access to show them a map.</string> <string>Grant location access so that $(APP_DISPLAY_NAME) can share your location.</string>
<key>NSMicrophoneUsageDescription</key> <key>NSMicrophoneUsageDescription</key>
<string>To take videos with audio and send them as a message $(APP_DISPLAY_NAME) needs access to the microphone.</string> <string>To record and send messages with audio, $(APP_DISPLAY_NAME) needs to access the microphone.</string>
<key>NSPhotoLibraryAddUsageDescription</key> <key>NSPhotoLibraryAddUsageDescription</key>
<string>Allows saving photos and videos to your library.</string> <string>Allows saving photos and videos to your library.</string>
<key>NSUserActivityTypes</key> <key>NSUserActivityTypes</key>

View File

@ -84,9 +84,9 @@ targets:
INSendMessageIntent INSendMessageIntent
] ]
NSCameraUsageDescription: To take pictures or videos and send them as a message $(APP_DISPLAY_NAME) needs access to the camera. NSCameraUsageDescription: To take pictures or videos and send them as a message $(APP_DISPLAY_NAME) needs access to the camera.
NSMicrophoneUsageDescription: To take videos with audio and send them as a message $(APP_DISPLAY_NAME) needs access to the microphone. NSMicrophoneUsageDescription: To record and send messages with audio, $(APP_DISPLAY_NAME) needs to access the microphone.
NSPhotoLibraryAddUsageDescription: Allows saving photos and videos to your library. NSPhotoLibraryAddUsageDescription: Allows saving photos and videos to your library.
NSLocationWhenInUseUsageDescription: When you share your location to people, $(APP_DISPLAY_NAME) needs access to show them a map. NSLocationWhenInUseUsageDescription: Grant location access so that $(APP_DISPLAY_NAME) can share your location.
UIBackgroundModes: [ UIBackgroundModes: [
fetch, fetch,
audio, audio,

View File

@ -75,7 +75,7 @@ class StaticLocationScreenViewModelTests: XCTestCase {
let locationError = AlertInfo(locationSharingViewError: .mapError(.failedLocatingUser)) let locationError = AlertInfo(locationSharingViewError: .mapError(.failedLocatingUser))
XCTAssertEqual(locationError.message, L10n.errorFailedLocatingUser(InfoPlistReader.main.bundleDisplayName)) XCTAssertEqual(locationError.message, L10n.errorFailedLocatingUser(InfoPlistReader.main.bundleDisplayName))
let authorizationError = AlertInfo(locationSharingViewError: .missingAuthorization) let authorizationError = AlertInfo(locationSharingViewError: .missingAuthorization)
XCTAssertEqual(authorizationError.message, L10n.errorMissingLocationAuthIos(InfoPlistReader.main.bundleDisplayName)) XCTAssertEqual(authorizationError.message, L10n.dialogPermissionLocationDescriptionIos)
} }
func testSendUserLocation() async throws { func testSendUserLocation() async throws {