From 79c3c0a861c04f7874034ab37d88923e11a71290 Mon Sep 17 00:00:00 2001 From: Conor Nolan Date: Mon, 15 Dec 2025 11:25:27 +0000 Subject: [PATCH 1/3] feat(ios): enhance updateUser error messages with detailed diagnostics Improve error messages returned from updateUser by including: - Error code and domain for easier debugging - Descriptive error message with context - Underlying error details when available This change is purely additive - it preserves all original error properties and maintains NSNull safety through removeNullUnderlyingError. Before: "Error in updateUser" After: "updateUser failed with error code -1012: Response body is empty for HTTP 200. Domain: io.intercom.ios.error.network" --- ios/IntercomModule.m | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ios/IntercomModule.m b/ios/IntercomModule.m index af690ed3..618fe797 100644 --- a/ios/IntercomModule.m +++ b/ios/IntercomModule.m @@ -152,7 +152,29 @@ - (NSData *)dataFromHexString:(NSString *)string { [Intercom updateUser:userAttributes success:^{ resolve(@(YES)); } failure:^(NSError * _Nonnull error) { - failureCallback(UPDATE_USER, @"Error in updateUser", [self removeNullUnderlyingError:error]); + NSString *errorMessage = [NSString stringWithFormat:@"updateUser failed with error code %ld: %@. Domain: %@", + (long)error.code, + error.localizedDescription ?: @"", + error.domain ?: @""]; + + NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo ?: @{}]; + userInfo[@"detailedMessage"] = errorMessage; + userInfo[@"errorCode"] = @(error.code); + userInfo[@"errorDomain"] = error.domain ?: @""; + + if (error.userInfo[@"NSUnderlyingError"]) { + NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (![underlyingError isKindOfClass:[NSNull class]]) { + userInfo[@"underlyingErrorDescription"] = underlyingError.localizedDescription ?: @""; + userInfo[@"underlyingErrorCode"] = @(underlyingError.code); + } + } + + NSError *enrichedError = [NSError errorWithDomain:error.domain + code:error.code + userInfo:userInfo]; + + failureCallback(UPDATE_USER, errorMessage, [self removeNullUnderlyingError:enrichedError]); }]; }; From 75492fa1dbfa608d1e1997650997fe049cace6a3 Mon Sep 17 00:00:00 2001 From: Conor Nolan Date: Mon, 15 Dec 2025 11:29:05 +0000 Subject: [PATCH 2/3] ci: switch CircleCI resource class to m4pro.medium --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5271235e..d9be8528 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,7 +4,7 @@ version: 2.1 macos_config: &macos_config macos: xcode: 16.0.0 - resource_class: macos.m1.large.gen1 + resource_class: m4pro.medium shell: /bin/bash --login -eo pipefail setup_env_file: &setup_env_file From a9a91c9dd2e660e05ffc22fc3c1fbde1adc8f4d7 Mon Sep 17 00:00:00 2001 From: Conor Nolan Date: Mon, 15 Dec 2025 11:32:05 +0000 Subject: [PATCH 3/3] ci: update Xcode version to 26.2.0 for m4pro.medium compatibility --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d9be8528..26f26be2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 # Default VM config to be used for macOS builds macos_config: &macos_config macos: - xcode: 16.0.0 + xcode: 26.2.0 resource_class: m4pro.medium shell: /bin/bash --login -eo pipefail