From 523578f60f790e925cabefe23d23e2d33417c37c Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 8 Dec 2023 17:24:24 -0500 Subject: [PATCH 01/45] add notification service extension --- .../Info.plist | 13 + .../NotificationService.swift | 35 ++ ios/NewExpensify.xcodeproj/project.pbxproj | 567 +++++++++++++++++- 3 files changed, 613 insertions(+), 2 deletions(-) create mode 100644 ios/CustomNotificationServiceExtension/Info.plist create mode 100644 ios/CustomNotificationServiceExtension/NotificationService.swift diff --git a/ios/CustomNotificationServiceExtension/Info.plist b/ios/CustomNotificationServiceExtension/Info.plist new file mode 100644 index 000000000000..57421ebf9b75 --- /dev/null +++ b/ios/CustomNotificationServiceExtension/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift new file mode 100644 index 000000000000..abd04a62fe63 --- /dev/null +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -0,0 +1,35 @@ +// +// NotificationService.swift +// CustomNotificationServiceExtension +// +// Created by Andrew Rosiclair on 12/8/23. +// + +import UserNotifications + +class NotificationService: UNNotificationServiceExtension { + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + contentHandler(bestAttemptContent) + } + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + +} diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 64ed3fda8b02..e8c3c6d7aa52 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -27,9 +27,11 @@ 7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 7041848626A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; + 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; }; + 7FD73CA22B23CE9500420AF3 /* CustomNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; - E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; + E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */ = {isa = PBXBuildFile; }; E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; }; ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; }; F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; }; @@ -44,8 +46,29 @@ remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = NewExpensify; }; + 7FD73CA02B23CE9500420AF3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7FD73C9A2B23CE9500420AF3; + remoteInfo = CustomNotificationServiceExtension; + }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 7FD73CA32B23CE9500420AF3 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 7FD73CA22B23CE9500420AF3 /* CustomNotificationServiceExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 00E356EE1AD99517003FC87E /* NewExpensifyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NewExpensifyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -85,6 +108,9 @@ 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTStartupTimer.m; path = NewExpensify/RCTStartupTimer.m; sourceTree = ""; }; 70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; }; 75CABB0D0ABB0082FE0EB600 /* Pods-NewExpensify.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release staging.xcconfig"; sourceTree = ""; }; + 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CustomNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; }; 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; }; @@ -124,11 +150,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, + E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */, 5A464BC8112CDB1DE1E38F1C /* libPods-NewExpensify.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; + 7FD73C982B23CE9500420AF3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -177,6 +210,15 @@ name = Frameworks; sourceTree = ""; }; + 7FD73C9C2B23CE9500420AF3 /* CustomNotificationServiceExtension */ = { + isa = PBXGroup; + children = ( + 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */, + 7FD73C9F2B23CE9500420AF3 /* Info.plist */, + ); + path = CustomNotificationServiceExtension; + sourceTree = ""; + }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -198,6 +240,7 @@ 13B07FAE1A68108700A75B9A /* NewExpensify */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* NewExpensifyTests */, + 7FD73C9C2B23CE9500420AF3 /* CustomNotificationServiceExtension */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, EC29677F0A49C2946A495A33 /* Pods */, @@ -213,6 +256,7 @@ children = ( 13B07F961A680F5B00A75B9A /* New Expensify Dev.app */, 00E356EE1AD99517003FC87E /* NewExpensifyTests.xctest */, + 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */, ); name = Products; sourceTree = ""; @@ -305,22 +349,42 @@ 5259EE1448507A682C02026F /* [CP] Copy Pods Resources */, 5E34288ECB69FCFA24851234 /* [CP-User] [RNFB] Core Configuration */, E10553ABAB7762D41AC85C09 /* [CP-User] [RNFB] Crashlytics Configuration */, + 7FD73CA32B23CE9500420AF3 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 7FD73CA12B23CE9500420AF3 /* PBXTargetDependency */, ); name = NewExpensify; productName = NewExpensify; productReference = 13B07F961A680F5B00A75B9A /* New Expensify Dev.app */; productType = "com.apple.product-type.application"; }; + 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "CustomNotificationServiceExtension" */; + buildPhases = ( + 7FD73C972B23CE9500420AF3 /* Sources */, + 7FD73C982B23CE9500420AF3 /* Frameworks */, + 7FD73C992B23CE9500420AF3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CustomNotificationServiceExtension; + productName = CustomNotificationServiceExtension; + productReference = 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1500; LastUpgradeCheck = 1130; TargetAttributes = { 00E356ED1AD99517003FC87E = { @@ -334,6 +398,11 @@ LastSwiftMigration = 1230; ProvisioningStyle = Manual; }; + 7FD73C9A2B23CE9500420AF3 = { + CreatedOnToolsVersion = 15.0.1; + DevelopmentTeam = 368M544MTT; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "NewExpensify" */; @@ -351,6 +420,7 @@ targets = ( 13B07F861A680F5B00A75B9A /* NewExpensify */, 00E356ED1AD99517003FC87E /* NewExpensifyTests */, + 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */, ); }; /* End PBXProject section */ @@ -384,6 +454,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7FD73C992B23CE9500420AF3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -654,6 +731,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7FD73C972B23CE9500420AF3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -662,6 +747,11 @@ target = 13B07F861A680F5B00A75B9A /* NewExpensify */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; + 7FD73CA12B23CE9500420AF3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */; + targetProxy = 7FD73CA02B23CE9500420AF3 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -717,6 +807,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0B627F2A465153FFA6E3A4E0 /* Pods-NewExpensify.debugdevelopment.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -749,6 +840,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -775,6 +867,460 @@ }; name = ReleaseDevelopment; }; + 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugDevelopment; + }; + 7FD73CA52B23CE9500420AF3 /* DebugAdHoc */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAdHoc; + }; + 7FD73CA62B23CE9500420AF3 /* DebugProduction */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugProduction; + }; + 7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = ReleaseDevelopment; + }; + 7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = ReleaseAdHoc; + }; + 7FD73CA92B23CE9500420AF3 /* ReleaseProduction */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 368M544MTT; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = ReleaseProduction; + }; 83CBBA201A601CBA00E9B192 /* DebugDevelopment */ = { isa = XCBuildConfiguration; buildSettings = { @@ -968,6 +1514,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1090,6 +1637,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6F6A514B4DF07A60EC8355BA /* Pods-NewExpensify.debugadhoc.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1206,6 +1754,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 47D5DF3C6779D41BE70CD031 /* Pods-NewExpensify.releaseproduction.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1318,6 +1867,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1396,6 +1946,19 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = DebugDevelopment; }; + 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "CustomNotificationServiceExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */, + 7FD73CA52B23CE9500420AF3 /* DebugAdHoc */, + 7FD73CA62B23CE9500420AF3 /* DebugProduction */, + 7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */, + 7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */, + 7FD73CA92B23CE9500420AF3 /* ReleaseProduction */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = DebugDevelopment; + }; 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "NewExpensify" */ = { isa = XCConfigurationList; buildConfigurations = ( From 4335e954d8ee9cc67d8d0c42c6a8cfc8afab5aa9 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 8 Dec 2023 17:45:48 -0500 Subject: [PATCH 02/45] move embed extensions build phase to fix build --- ios/NewExpensify.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index e8c3c6d7aa52..6d31c101d486 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -342,6 +342,7 @@ 7E666D03089C35260C905B4A /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, + 7FD73CA32B23CE9500420AF3 /* Embed Foundation Extensions */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, @@ -349,7 +350,6 @@ 5259EE1448507A682C02026F /* [CP] Copy Pods Resources */, 5E34288ECB69FCFA24851234 /* [CP-User] [RNFB] Core Configuration */, E10553ABAB7762D41AC85C09 /* [CP-User] [RNFB] Crashlytics Configuration */, - 7FD73CA32B23CE9500420AF3 /* Embed Foundation Extensions */, ); buildRules = ( ); From 53272e9d053ba8f53c334a13aa484492e5ac4264 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 11 Dec 2023 14:27:37 -0500 Subject: [PATCH 03/45] use airship's UANotificationServiceExtension --- .../NotificationService.swift | 27 +---------- ios/NewExpensify.xcodeproj/project.pbxproj | 45 +++++++++++++++++++ ios/Podfile | 4 ++ ios/Podfile.lock | 6 ++- 4 files changed, 56 insertions(+), 26 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index abd04a62fe63..6b95f4f49ffb 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -5,31 +5,8 @@ // Created by Andrew Rosiclair on 12/8/23. // -import UserNotifications +import AirshipServiceExtension -class NotificationService: UNNotificationServiceExtension { - - var contentHandler: ((UNNotificationContent) -> Void)? - var bestAttemptContent: UNMutableNotificationContent? - - override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { - self.contentHandler = contentHandler - bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - - if let bestAttemptContent = bestAttemptContent { - // Modify the notification content here... - bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" - - contentHandler(bestAttemptContent) - } - } - - override func serviceExtensionTimeWillExpire() { - // Called just before the extension will be terminated by the system. - // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. - if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { - contentHandler(bestAttemptContent) - } - } +class NotificationService: UANotificationServiceExtension { } diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 6d31c101d486..5a709d370a44 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 059DC4EFD39EF39437E6823D /* libPods-CustomNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */; }; 0C7C65547D7346EB923BE808 /* ExpensifyMono-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */; }; 0CDA8E34287DD650004ECBEC /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CDA8E33287DD650004ECBEC /* AppDelegate.mm */; }; 0CDA8E35287DD650004ECBEC /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CDA8E33287DD650004ECBEC /* AppDelegate.mm */; }; @@ -87,6 +88,7 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = NewExpensify/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = NewExpensify/main.m; sourceTree = ""; }; 18D050DF262400AF000D658B /* BridgingFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgingFile.swift; sourceTree = ""; }; + 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CustomNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release adhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release adhoc.xcconfig"; sourceTree = ""; }; 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; @@ -114,27 +116,33 @@ 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; }; 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; }; + 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; sourceTree = ""; }; AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; sourceTree = ""; }; BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Italic.otf"; path = "../assets/fonts/native/ExpensifyNeue-Italic.otf"; sourceTree = ""; }; + C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; CECC4CBB97A55705A33BEA9E /* Pods-NewExpensify.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug development.xcconfig"; sourceTree = ""; }; D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-MediumItalic.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-MediumItalic.otf"; sourceTree = ""; }; + D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; }; DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; sourceTree = ""; }; DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Bold.otf"; path = "../assets/fonts/native/ExpensifyMono-Bold.otf"; sourceTree = ""; }; DD7904292792E76D004484B4 /* RCTBootSplash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTBootSplash.h; path = NewExpensify/RCTBootSplash.h; sourceTree = ""; }; DD79042A2792E76D004484B4 /* RCTBootSplash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTBootSplash.m; path = NewExpensify/RCTBootSplash.m; sourceTree = ""; }; E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; sourceTree = ""; }; + E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Regular.otf"; path = "../assets/fonts/native/ExpensifyMono-Regular.otf"; sourceTree = ""; }; E9DF872C2525201700607FDC /* AirshipConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AirshipConfig.plist; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; }; F0C450E92705020500FD2970 /* colors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = colors.json; path = ../colors.json; sourceTree = ""; }; F15A36A3262EEC3B0CAB8EDF /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; }; F4F8A052A22040339996324B /* ExpensifyNeue-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Regular.otf"; path = "../assets/fonts/native/ExpensifyNeue-Regular.otf"; sourceTree = ""; }; + FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -159,6 +167,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 059DC4EFD39EF39437E6823D /* libPods-CustomNotificationServiceExtension.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -206,6 +215,7 @@ ED2971642150620600B7C4FE /* JavaScriptCore.framework */, AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */, 6FB387B20AE4E6E98858B6AA /* libPods-NewExpensify-NewExpensifyTests.a */, + 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */, ); name = Frameworks; sourceTree = ""; @@ -307,6 +317,12 @@ 4E8BF7B08BA3181991BFCF4B /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */, E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, 57DBBEDB9692E096D4BA0141 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */, + FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */, + D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */, + C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */, + F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */, + E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */, + 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */, ); path = Pods; sourceTree = ""; @@ -365,6 +381,7 @@ isa = PBXNativeTarget; buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "CustomNotificationServiceExtension" */; buildPhases = ( + F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */, 7FD73C972B23CE9500420AF3 /* Sources */, 7FD73C982B23CE9500420AF3 /* Frameworks */, 7FD73C992B23CE9500420AF3 /* Resources */, @@ -685,6 +702,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-CustomNotificationServiceExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -869,6 +908,7 @@ }; 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -949,6 +989,7 @@ }; 7FD73CA52B23CE9500420AF3 /* DebugAdHoc */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1028,6 +1069,7 @@ }; 7FD73CA62B23CE9500420AF3 /* DebugProduction */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1107,6 +1149,7 @@ }; 7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1179,6 +1222,7 @@ }; 7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1251,6 +1295,7 @@ }; 7FD73CA92B23CE9500420AF3 /* ReleaseProduction */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; diff --git a/ios/Podfile b/ios/Podfile index 6aee4b94df04..2df3d94a013d 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -118,3 +118,7 @@ target 'NewExpensify' do end end end + +target 'CustomNotificationServiceExtension' do + pod 'AirshipServiceExtension' +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 0fac30a26430..0c1214344a8f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -20,6 +20,7 @@ PODS: - Airship (= 16.12.1) - Airship/MessageCenter (= 16.12.1) - Airship/PreferenceCenter (= 16.12.1) + - AirshipServiceExtension (16.12.5) - AppAuth (1.6.2): - AppAuth/Core (= 1.6.2) - AppAuth/ExternalUserAgent (= 1.6.2) @@ -828,6 +829,7 @@ PODS: - Yoga (~> 1.14) DEPENDENCIES: + - AirshipServiceExtension - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) @@ -942,6 +944,7 @@ SPEC REPOS: trunk: - Airship - AirshipFrameworkProxy + - AirshipServiceExtension - AppAuth - CocoaAsyncSocket - Firebase @@ -1162,6 +1165,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Airship: 2f4510b497a8200780752a5e0304a9072bfffb6d AirshipFrameworkProxy: ea1b6c665c798637b93c465b5e505be3011f1d9d + AirshipServiceExtension: 89c6e25a69f3458d9dbd581c700cffb196b61930 AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 boost: 57d2868c099736d80fcd648bf211b4431e51a558 BVLinearGradient: 421743791a59d259aec53f4c58793aad031da2ca @@ -1291,6 +1295,6 @@ SPEC CHECKSUMS: Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: ff769666b7221c15936ebc5576a8c8e467dc6879 +PODFILE CHECKSUM: c44319b85c142746fd25749dc13f06ce81273f22 COCOAPODS: 1.12.1 From 9f0e214b3e00e5d16de461d6380bda6f1e0843d3 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 11 Dec 2023 16:11:23 -0500 Subject: [PATCH 04/45] use iOS 13 minimum target --- ios/NewExpensify.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 5a709d370a44..4037bd84e253 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -967,7 +967,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; @@ -1048,7 +1048,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; @@ -1128,7 +1128,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; @@ -1202,7 +1202,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; @@ -1275,7 +1275,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; @@ -1348,7 +1348,7 @@ INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; From 794eb84ea66cdb3f5774874efdd7eb9253f6589b Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 11 Dec 2023 16:12:04 -0500 Subject: [PATCH 05/45] re-add default implementations --- .../NotificationService.swift | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 6b95f4f49ffb..dc8cb8e561d8 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -9,4 +9,27 @@ import AirshipServiceExtension class NotificationService: UANotificationServiceExtension { + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + contentHandler(bestAttemptContent) + } + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + } From 5ff582642f7bae948e1680cc1f5ac141a04f473e Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 12 Dec 2023 12:36:11 -0500 Subject: [PATCH 06/45] check for payload properties --- .../NotificationService.swift | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index dc8cb8e561d8..d9d04e5468f9 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -8,28 +8,45 @@ import AirshipServiceExtension class NotificationService: UANotificationServiceExtension { - - var contentHandler: ((UNNotificationContent) -> Void)? - var bestAttemptContent: UNMutableNotificationContent? - - override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { - self.contentHandler = contentHandler - bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - - if let bestAttemptContent = bestAttemptContent { - // Modify the notification content here... - bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" - - contentHandler(bestAttemptContent) - } - } + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - override func serviceExtensionTimeWillExpire() { - // Called just before the extension will be terminated by the system. - // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. - if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { - contentHandler(bestAttemptContent) - } + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + guard let payload = bestAttemptContent.userInfo["payload"] as? NSDictionary else { + print("[NotificationService] didReceive() - no payload in this notification") + return + } + + guard let reportID = payload["reportID"] as? String else { + print("[NotificationService] didReceive() - no reportID in this notification") + return + } + + guard let onyxData = payload["onyxData"] as? NSArray else { + print("[NotificationService] didReceive() - no onyxData in this notification") + return + } + + + + contentHandler(bestAttemptContent) } - + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + } From 83c0b93ef16cd50c6b462dcefa4e0d5a94258f5a Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Wed, 13 Dec 2023 14:18:09 -0500 Subject: [PATCH 07/45] use os_log instead of print --- .../NotificationService.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index d9d04e5468f9..97b478fca801 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -6,13 +6,17 @@ // import AirshipServiceExtension +import os.log class NotificationService: UANotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? + let log = OSLog(subsystem: Bundle.main.bundleIdentifier ?? "com.expensify.chat.dev.CustomNotificationServiceExtension", category: "NotificationService") override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + os_log("[NotificationService] didReceive() - received notification", log: log) + self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) @@ -21,22 +25,20 @@ class NotificationService: UANotificationServiceExtension { bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" guard let payload = bestAttemptContent.userInfo["payload"] as? NSDictionary else { - print("[NotificationService] didReceive() - no payload in this notification") + os_log("[NotificationService] didReceive() - no payload in this notification", log: log, type: .error) return } guard let reportID = payload["reportID"] as? String else { - print("[NotificationService] didReceive() - no reportID in this notification") + os_log("[NotificationService] didReceive() - no reportID in this notification", log: log, type: .error) return } guard let onyxData = payload["onyxData"] as? NSArray else { - print("[NotificationService] didReceive() - no onyxData in this notification") + os_log("[NotificationService] didReceive() - no onyxData in this notification", log: log, type: .error) return } - - contentHandler(bestAttemptContent) } } From 315cf256fa28c942e9f5ade22cd527a4a24cff04 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 11:14:07 -0500 Subject: [PATCH 08/45] Add ExpError for throwing runtime errors with messages --- .../ExpError.swift | 12 ++++++++++++ ios/NewExpensify.xcodeproj/project.pbxproj | 4 ++++ 2 files changed, 16 insertions(+) create mode 100644 ios/CustomNotificationServiceExtension/ExpError.swift diff --git a/ios/CustomNotificationServiceExtension/ExpError.swift b/ios/CustomNotificationServiceExtension/ExpError.swift new file mode 100644 index 000000000000..7760be640936 --- /dev/null +++ b/ios/CustomNotificationServiceExtension/ExpError.swift @@ -0,0 +1,12 @@ +// +// ExpError.swift +// CustomNotificationServiceExtension +// +// Created by Andrew Rosiclair on 12/13/23. +// + +import Foundation + +enum ExpError: Error { + case runtimeError(String) +} diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 4037bd84e253..087c7aa557cc 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 7041848626A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; + 7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */; }; 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; }; 7FD73CA22B23CE9500420AF3 /* CustomNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; @@ -110,6 +111,7 @@ 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTStartupTimer.m; path = NewExpensify/RCTStartupTimer.m; sourceTree = ""; }; 70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; }; 75CABB0D0ABB0082FE0EB600 /* Pods-NewExpensify.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release staging.xcconfig"; sourceTree = ""; }; + 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpError.swift; sourceTree = ""; }; 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CustomNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -225,6 +227,7 @@ children = ( 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */, 7FD73C9F2B23CE9500420AF3 /* Info.plist */, + 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */, ); path = CustomNotificationServiceExtension; sourceTree = ""; @@ -774,6 +777,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */, 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 75bdc80ae34dd0102a4c0aca7368edf379261ed9 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 11:15:04 -0500 Subject: [PATCH 09/45] parse notification data --- .../NotificationService.swift | 92 +++++++++++++++---- 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 97b478fca801..5976f42e9902 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -18,29 +18,65 @@ class NotificationService: UANotificationServiceExtension { os_log("[NotificationService] didReceive() - received notification", log: log) self.contentHandler = contentHandler - bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - - if let bestAttemptContent = bestAttemptContent { - // Modify the notification content here... + guard let bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) else { + contentHandler(request.content) + return + } + defer { bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" - - guard let payload = bestAttemptContent.userInfo["payload"] as? NSDictionary else { - os_log("[NotificationService] didReceive() - no payload in this notification", log: log, type: .error) - return - } - - guard let reportID = payload["reportID"] as? String else { - os_log("[NotificationService] didReceive() - no reportID in this notification", log: log, type: .error) - return - } - - guard let onyxData = payload["onyxData"] as? NSArray else { - os_log("[NotificationService] didReceive() - no onyxData in this notification", log: log, type: .error) - return - } - contentHandler(bestAttemptContent) } + + var notificationData: NotificationData + do { + notificationData = try parsePayload(notificationContent: bestAttemptContent) + } catch ExpError.runtimeError(let errorMessage) { + os_log("[NotificationService] didReceive() - couldn't parse the payload '%@'", log: log, type: .error, errorMessage) + } catch { + os_log("[NotificationService] didReceive() - unexpected error while parsing payload", log: log, type: .error) + } + } + + func parsePayload(notificationContent: UNMutableNotificationContent) throws -> NotificationData { + guard let payload = notificationContent.userInfo["payload"] as? NSDictionary else { + throw ExpError.runtimeError("payload missing") + } + + guard let reportID = payload["reportID"] as? Int64 else { + throw ExpError.runtimeError("payload.reportID missing") + } + + guard let reportActionID = payload["reportActionID"] as? String else { + throw ExpError.runtimeError("payload.reportActionID missing") + } + + guard let onyxData = payload["onyxData"] as? NSArray else { + throw ExpError.runtimeError("payload.onyxData missing" + reportActionID) + } + + guard let reportActionOnyxUpdate = onyxData[1] as? NSDictionary else { + throw ExpError.runtimeError("payload.onyxData[1] missing" + reportActionID) + } + + guard let reportActionCollection = reportActionOnyxUpdate["value"] as? NSDictionary else { + throw ExpError.runtimeError("payload.onyxData[1].value (report action onyx update) missing" + reportActionID) + } + + guard let reportAction = reportActionCollection[reportActionID] as? NSDictionary else { + throw ExpError.runtimeError("payload.onyxData[1].value['\(reportActionID)'] (report action) is missing" + reportActionID) + } + + guard let avatarURL = reportAction["avatar"] as? String else { + throw ExpError.runtimeError("reportAction.avatar is missing" + reportActionID) + } + + return NotificationData( + reportID: reportID, + reportActionID: reportActionID, + onyxData: onyxData, + reportOnyxUpdate: reportActionOnyxUpdate, + avatarURL: avatarURL + ) } override func serviceExtensionTimeWillExpire() { @@ -52,3 +88,19 @@ class NotificationService: UANotificationServiceExtension { } } + +class NotificationData { + public var reportID: Int64 + public var reportActionID: String + public var onyxData: NSArray + public var reportOnyxUpdate: NSDictionary + public var avatarURL: String + + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String) { + self.reportID = reportID + self.reportActionID = reportActionID + self.onyxData = onyxData + self.reportOnyxUpdate = reportOnyxUpdate + self.avatarURL = avatarURL + } +} From 91d7c7d0b9100710d9f884ae5c3d820675d5eb71 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 16:35:46 -0500 Subject: [PATCH 10/45] parse accountID --- .../NotificationService.swift | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 5976f42e9902..30b955ada2d2 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -63,11 +63,15 @@ class NotificationService: UANotificationServiceExtension { } guard let reportAction = reportActionCollection[reportActionID] as? NSDictionary else { - throw ExpError.runtimeError("payload.onyxData[1].value['\(reportActionID)'] (report action) is missing" + reportActionID) + throw ExpError.runtimeError("payload.onyxData[1].value['\(reportActionID)'] (report action) missing" + reportActionID) } guard let avatarURL = reportAction["avatar"] as? String else { - throw ExpError.runtimeError("reportAction.avatar is missing" + reportActionID) + throw ExpError.runtimeError("reportAction.avatar missing. reportActionID: " + reportActionID) + } + + guard let accountID = reportAction["actorAccountID"] as? Int else { + throw ExpError.runtimeError("reportAction.actorAccountID missing. reportActionID: " + reportActionID) } return NotificationData( @@ -75,7 +79,8 @@ class NotificationService: UANotificationServiceExtension { reportActionID: reportActionID, onyxData: onyxData, reportOnyxUpdate: reportActionOnyxUpdate, - avatarURL: avatarURL + avatarURL: avatarURL, + accountID: accountID ) } @@ -95,12 +100,14 @@ class NotificationData { public var onyxData: NSArray public var reportOnyxUpdate: NSDictionary public var avatarURL: String + public var accountID: Int - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String) { + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int) { self.reportID = reportID self.reportActionID = reportActionID self.onyxData = onyxData self.reportOnyxUpdate = reportOnyxUpdate self.avatarURL = avatarURL + self.accountID = accountID } } From 73a49b6d10f7ff1ccba98c4099a0aa5d04a469bd Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 16:46:54 -0500 Subject: [PATCH 11/45] parse the user's name --- .../NotificationService.swift | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 30b955ada2d2..dc49f735770e 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -74,13 +74,26 @@ class NotificationService: UANotificationServiceExtension { throw ExpError.runtimeError("reportAction.actorAccountID missing. reportActionID: " + reportActionID) } + guard let person = reportAction["person"] as? NSArray else { + throw ExpError.runtimeError("reportAction.person missing. reportActionID: " + reportActionID) + } + + guard let personObject = person[0] as? NSDictionary else { + throw ExpError.runtimeError("reportAction.person[0] missing. reportActionID: " + reportActionID) + } + + guard let userName = personObject["text"] as? String else { + throw ExpError.runtimeError("reportAction.person[0].text missing. reportActionID: " + reportActionID) + } + return NotificationData( reportID: reportID, reportActionID: reportActionID, onyxData: onyxData, reportOnyxUpdate: reportActionOnyxUpdate, avatarURL: avatarURL, - accountID: accountID + accountID: accountID, + userName: userName ) } @@ -101,13 +114,15 @@ class NotificationData { public var reportOnyxUpdate: NSDictionary public var avatarURL: String public var accountID: Int + public var userName: String - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int) { + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String) { self.reportID = reportID self.reportActionID = reportActionID self.onyxData = onyxData self.reportOnyxUpdate = reportOnyxUpdate self.avatarURL = avatarURL self.accountID = accountID + self.userName = userName } } From b7c5cdb7109364b954c7c7a88dc7763d504a6e1b Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 17:01:01 -0500 Subject: [PATCH 12/45] add communication notification entitlement --- ios/NewExpensify/Chat.entitlements | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ios/NewExpensify/Chat.entitlements b/ios/NewExpensify/Chat.entitlements index 5300e35eadbf..165745a3c1a0 100644 --- a/ios/NewExpensify/Chat.entitlements +++ b/ios/NewExpensify/Chat.entitlements @@ -14,5 +14,7 @@ applinks:staging.new.expensify.com webcredentials:new.expensify.com + com.apple.developer.usernotifications.communication + From 4707abaf0a9181aa1991dfb425cd62078217a471 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Thu, 14 Dec 2023 17:14:31 -0500 Subject: [PATCH 13/45] add INSendMessageIntent --- ios/CustomNotificationServiceExtension/Info.plist | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ios/CustomNotificationServiceExtension/Info.plist b/ios/CustomNotificationServiceExtension/Info.plist index 57421ebf9b75..88b7c52d8732 100644 --- a/ios/CustomNotificationServiceExtension/Info.plist +++ b/ios/CustomNotificationServiceExtension/Info.plist @@ -8,6 +8,10 @@ com.apple.usernotifications.service NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).NotificationService + NSUserActivityTypes + + INSendMessageIntent + From de5d1262b12b6034655d9d2e5841a04764f15bb4 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 15:34:36 -0500 Subject: [PATCH 14/45] move NSUserActivityTypes to the main bundle --- ios/CustomNotificationServiceExtension/Info.plist | 4 ---- ios/NewExpensify/Info.plist | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/Info.plist b/ios/CustomNotificationServiceExtension/Info.plist index 88b7c52d8732..57421ebf9b75 100644 --- a/ios/CustomNotificationServiceExtension/Info.plist +++ b/ios/CustomNotificationServiceExtension/Info.plist @@ -8,10 +8,6 @@ com.apple.usernotifications.service NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).NotificationService - NSUserActivityTypes - - INSendMessageIntent - diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist index a917b6a4499c..d0c2dc6762bc 100644 --- a/ios/NewExpensify/Info.plist +++ b/ios/NewExpensify/Info.plist @@ -124,5 +124,9 @@ Dark UIViewControllerBasedStatusBarAppearance + NSUserActivityTypes + + INSendMessageIntent + From fbc2eb10c9a961136e8fe8dadba854b611c3ff9e Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 15:37:15 -0500 Subject: [PATCH 15/45] create message intents and configure communication notifications --- .../NotificationService.swift | 79 +++++++++++++++++-- 1 file changed, 73 insertions(+), 6 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index dc49f735770e..63c07ec90462 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -7,6 +7,7 @@ import AirshipServiceExtension import os.log +import Intents class NotificationService: UANotificationServiceExtension { @@ -22,18 +23,60 @@ class NotificationService: UANotificationServiceExtension { contentHandler(request.content) return } - defer { - bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + if #available(iOSApplicationExtension 15.0, *) { + configureCommunicationNotification(notificationContent: bestAttemptContent, contentHandler: contentHandler) + } else { contentHandler(bestAttemptContent) } - + } + + @available(iOSApplicationExtension 15.0, *) + func configureCommunicationNotification(notificationContent: UNMutableNotificationContent, contentHandler: @escaping (UNNotificationContent) -> Void) { var notificationData: NotificationData do { - notificationData = try parsePayload(notificationContent: bestAttemptContent) + notificationData = try parsePayload(notificationContent: notificationContent) } catch ExpError.runtimeError(let errorMessage) { - os_log("[NotificationService] didReceive() - couldn't parse the payload '%@'", log: log, type: .error, errorMessage) + os_log("[NotificationService] configureCommunicationNotification() - couldn't parse the payload '%@'", log: log, type: .error, errorMessage) + contentHandler(notificationContent) + return } catch { - os_log("[NotificationService] didReceive() - unexpected error while parsing payload", log: log, type: .error) + os_log("[NotificationService] configureCommunicationNotification() - unexpected error while parsing payload", log: log, type: .error) + contentHandler(notificationContent) + return + } + + // Create an intent for the incoming message + let intent: INSendMessageIntent = createMessageIntent(notificationData: notificationData) + + // Use the intent to initialize the interaction. + let interaction = INInteraction(intent: intent, response: nil) + + + // Interaction direction is incoming because the user is + // receiving this message. + interaction.direction = .incoming + + + // Donate the interaction before updating notification content. + interaction.donate { error in + if let error = error { + // Handle errors that may occur during donation. + return + } + + // After donation, update the notification content. + do { + // Update notification content before displaying the + // communication notification. + let updatedContent = try notificationContent.updating(from: intent) + + // Call the content handler with the updated content + // to display the communication notification. + contentHandler(updatedContent) + } catch { + os_log("[NotificationService] configureCommunicationNotification() - failed to update the notification with send message intent", log: self.log, type: .error) + } } } @@ -97,6 +140,30 @@ class NotificationService: UANotificationServiceExtension { ) } + func createMessageIntent(notificationData: NotificationData) -> INSendMessageIntent { + // Initialize only the sender for a one-to-one message intent. + let handle = INPersonHandle(value: String(notificationData.accountID), type: .unknown) + let avatar = INImage(named: "profilepicture.png") + let sender = INPerson(personHandle: handle, + nameComponents: nil, + displayName: notificationData.userName, + image: avatar, + contactIdentifier: nil, + customIdentifier: nil) + + + // Because this communication is incoming, you can infer that the current user is + // a recipient. Don't include the current user when initializing the intent. + let intent = INSendMessageIntent(recipients: nil, + content: "Message content", + speakableGroupName: nil, + conversationIdentifier: String(notificationData.reportID), + serviceName: nil, + sender: sender) + + return intent + } + override func serviceExtensionTimeWillExpire() { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. From c0d636eec73d0538225dd171d8edf7296e6effcc Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 15:57:28 -0500 Subject: [PATCH 16/45] parse message text --- .../NotificationService.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 63c07ec90462..2116266582f1 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -136,7 +136,8 @@ class NotificationService: UANotificationServiceExtension { reportOnyxUpdate: reportActionOnyxUpdate, avatarURL: avatarURL, accountID: accountID, - userName: userName + userName: userName, + messageText: notificationContent.body ) } @@ -155,7 +156,7 @@ class NotificationService: UANotificationServiceExtension { // Because this communication is incoming, you can infer that the current user is // a recipient. Don't include the current user when initializing the intent. let intent = INSendMessageIntent(recipients: nil, - content: "Message content", + content: notificationData.messageText, speakableGroupName: nil, conversationIdentifier: String(notificationData.reportID), serviceName: nil, @@ -182,8 +183,9 @@ class NotificationData { public var avatarURL: String public var accountID: Int public var userName: String + public var messageText: String - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String) { + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, messageText: String) { self.reportID = reportID self.reportActionID = reportActionID self.onyxData = onyxData @@ -191,5 +193,6 @@ class NotificationData { self.avatarURL = avatarURL self.accountID = accountID self.userName = userName + self.messageText = messageText } } From e61d24295e0b576c69b093cca94243199d3d1245 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 16:03:11 -0500 Subject: [PATCH 17/45] use updated INSendMessageIntent --- .../NotificationService.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 2116266582f1..04e635120c59 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -141,6 +141,7 @@ class NotificationService: UANotificationServiceExtension { ) } + @available(iOSApplicationExtension 14.0, *) func createMessageIntent(notificationData: NotificationData) -> INSendMessageIntent { // Initialize only the sender for a one-to-one message intent. let handle = INPersonHandle(value: String(notificationData.accountID), type: .unknown) @@ -156,11 +157,13 @@ class NotificationService: UANotificationServiceExtension { // Because this communication is incoming, you can infer that the current user is // a recipient. Don't include the current user when initializing the intent. let intent = INSendMessageIntent(recipients: nil, + outgoingMessageType: .outgoingMessageText, content: notificationData.messageText, speakableGroupName: nil, conversationIdentifier: String(notificationData.reportID), serviceName: nil, - sender: sender) + sender: sender, + attachments: nil) return intent } From 82245cf16f34a7c376f0659a86d8495044bef804 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 16:20:34 -0500 Subject: [PATCH 18/45] fetch and use avatar --- .../NotificationService.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 04e635120c59..52af88f24021 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -145,7 +145,7 @@ class NotificationService: UANotificationServiceExtension { func createMessageIntent(notificationData: NotificationData) -> INSendMessageIntent { // Initialize only the sender for a one-to-one message intent. let handle = INPersonHandle(value: String(notificationData.accountID), type: .unknown) - let avatar = INImage(named: "profilepicture.png") + let avatar = fetchINImage(imageURL: notificationData.avatarURL, reportActionID: notificationData.reportActionID) let sender = INPerson(personHandle: handle, nameComponents: nil, displayName: notificationData.userName, @@ -176,6 +176,19 @@ class NotificationService: UANotificationServiceExtension { } } + func fetchINImage(imageURL: String, reportActionID: String) -> INImage? { + guard let url = URL(string: imageURL) else { + return nil + } + + do { + let data = try Data(contentsOf: url) + return INImage(imageData: data) + } catch { + os_log("[NotificationService] fetchINImage() - failed to fetch avatar. reportActionID: %@", log: self.log, type: .error, reportActionID) + return nil + } + } } class NotificationData { From 2e22250d59a29d978feaf2aa3c81762af5858196 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 16:26:30 -0500 Subject: [PATCH 19/45] error handling --- .../NotificationService.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 52af88f24021..28107f614e4f 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -61,7 +61,8 @@ class NotificationService: UANotificationServiceExtension { // Donate the interaction before updating notification content. interaction.donate { error in if let error = error { - // Handle errors that may occur during donation. + os_log("[NotificationService] configureCommunicationNotification() - failed to donate the message intent", log: self.log, type: .error) + contentHandler(notificationContent) return } @@ -76,6 +77,7 @@ class NotificationService: UANotificationServiceExtension { contentHandler(updatedContent) } catch { os_log("[NotificationService] configureCommunicationNotification() - failed to update the notification with send message intent", log: self.log, type: .error) + contentHandler(notificationContent) } } } From 718222ebce9233c1f8aa2c8766818b0463fa4cdd Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Fri, 15 Dec 2023 17:08:45 -0500 Subject: [PATCH 20/45] parse and use roomName --- .../NotificationService.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 28107f614e4f..72c59cfa0d51 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -139,7 +139,8 @@ class NotificationService: UANotificationServiceExtension { avatarURL: avatarURL, accountID: accountID, userName: userName, - messageText: notificationContent.body + messageText: notificationContent.body, + roomName: payload["roomName"] as? String ) } @@ -158,10 +159,11 @@ class NotificationService: UANotificationServiceExtension { // Because this communication is incoming, you can infer that the current user is // a recipient. Don't include the current user when initializing the intent. + let roomName = INSpeakableString(spokenPhrase: notificationData.roomName ?? "") let intent = INSendMessageIntent(recipients: nil, outgoingMessageType: .outgoingMessageText, content: notificationData.messageText, - speakableGroupName: nil, + speakableGroupName: roomName, conversationIdentifier: String(notificationData.reportID), serviceName: nil, sender: sender, @@ -202,8 +204,9 @@ class NotificationData { public var accountID: Int public var userName: String public var messageText: String + public var roomName: String? - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, messageText: String) { + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, messageText: String, roomName: String?) { self.reportID = reportID self.reportActionID = reportActionID self.onyxData = onyxData @@ -212,5 +215,6 @@ class NotificationData { self.accountID = accountID self.userName = userName self.messageText = messageText + self.roomName = roomName } } From bad32ec452d92ad68c20f06350ab9d68d89aef87 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 13:41:48 -0500 Subject: [PATCH 21/45] use formatted title --- .../NotificationService.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 72c59cfa0d51..8eeb07d2181f 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -139,6 +139,7 @@ class NotificationService: UANotificationServiceExtension { avatarURL: avatarURL, accountID: accountID, userName: userName, + title: notificationContent.title, messageText: notificationContent.body, roomName: payload["roomName"] as? String ) @@ -151,7 +152,7 @@ class NotificationService: UANotificationServiceExtension { let avatar = fetchINImage(imageURL: notificationData.avatarURL, reportActionID: notificationData.reportActionID) let sender = INPerson(personHandle: handle, nameComponents: nil, - displayName: notificationData.userName, + displayName: notificationData.title, image: avatar, contactIdentifier: nil, customIdentifier: nil) @@ -203,10 +204,11 @@ class NotificationData { public var avatarURL: String public var accountID: Int public var userName: String + public var title: String public var messageText: String public var roomName: String? - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, messageText: String, roomName: String?) { + public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, title: String, messageText: String, roomName: String?) { self.reportID = reportID self.reportActionID = reportActionID self.onyxData = onyxData @@ -214,6 +216,7 @@ class NotificationData { self.avatarURL = avatarURL self.accountID = accountID self.userName = userName + self.title = title self.messageText = messageText self.roomName = roomName } From b57be153b442fc66275b6fb181c1104812939b41 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 13:45:03 -0500 Subject: [PATCH 22/45] remove unused NotificationData properties --- .../NotificationService.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 8eeb07d2181f..8019070c0cb8 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -134,8 +134,6 @@ class NotificationService: UANotificationServiceExtension { return NotificationData( reportID: reportID, reportActionID: reportActionID, - onyxData: onyxData, - reportOnyxUpdate: reportActionOnyxUpdate, avatarURL: avatarURL, accountID: accountID, userName: userName, @@ -199,8 +197,6 @@ class NotificationService: UANotificationServiceExtension { class NotificationData { public var reportID: Int64 public var reportActionID: String - public var onyxData: NSArray - public var reportOnyxUpdate: NSDictionary public var avatarURL: String public var accountID: Int public var userName: String @@ -208,11 +204,9 @@ class NotificationData { public var messageText: String public var roomName: String? - public init (reportID: Int64, reportActionID: String, onyxData: NSArray, reportOnyxUpdate: NSDictionary, avatarURL: String, accountID: Int, userName: String, title: String, messageText: String, roomName: String?) { + public init (reportID: Int64, reportActionID: String, avatarURL: String, accountID: Int, userName: String, title: String, messageText: String, roomName: String?) { self.reportID = reportID self.reportActionID = reportActionID - self.onyxData = onyxData - self.reportOnyxUpdate = reportOnyxUpdate self.avatarURL = avatarURL self.accountID = accountID self.userName = userName From 8942cd0ef0b029fce1e4de155fd629577b0a9ace Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 13:46:12 -0500 Subject: [PATCH 23/45] remove unused var --- .../NotificationService.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/CustomNotificationServiceExtension/NotificationService.swift index 8019070c0cb8..508d47799d34 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/CustomNotificationServiceExtension/NotificationService.swift @@ -60,7 +60,7 @@ class NotificationService: UANotificationServiceExtension { // Donate the interaction before updating notification content. interaction.donate { error in - if let error = error { + if error != nil { os_log("[NotificationService] configureCommunicationNotification() - failed to donate the message intent", log: self.log, type: .error) contentHandler(notificationContent) return From 640eaa08d0ed88791117930ddb1a9219efca772f Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 14:12:38 -0500 Subject: [PATCH 24/45] rename to just NotificationServiceExtension --- ios/NewExpensify.xcodeproj/project.pbxproj | 114 +++++++++--------- .../ExpError.swift | 2 +- .../Info.plist | 0 .../NotificationService.swift | 4 +- ios/Podfile | 2 +- ios/Podfile.lock | 2 +- 6 files changed, 62 insertions(+), 62 deletions(-) rename ios/{CustomNotificationServiceExtension => NotificationServiceExtension}/ExpError.swift (79%) rename ios/{CustomNotificationServiceExtension => NotificationServiceExtension}/Info.plist (100%) rename ios/{CustomNotificationServiceExtension => NotificationServiceExtension}/NotificationService.swift (98%) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 087c7aa557cc..fa5384a9944f 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 059DC4EFD39EF39437E6823D /* libPods-CustomNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */; }; + 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */; }; 0C7C65547D7346EB923BE808 /* ExpensifyMono-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */; }; 0CDA8E34287DD650004ECBEC /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CDA8E33287DD650004ECBEC /* AppDelegate.mm */; }; 0CDA8E35287DD650004ECBEC /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0CDA8E33287DD650004ECBEC /* AppDelegate.mm */; }; @@ -30,7 +30,7 @@ 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; 7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */; }; 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; }; - 7FD73CA22B23CE9500420AF3 /* CustomNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7FD73CA22B23CE9500420AF3 /* NotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */ = {isa = PBXBuildFile; }; @@ -53,7 +53,7 @@ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 7FD73C9A2B23CE9500420AF3; - remoteInfo = CustomNotificationServiceExtension; + remoteInfo = NotificationServiceExtension; }; /* End PBXContainerItemProxy section */ @@ -64,7 +64,7 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - 7FD73CA22B23CE9500420AF3 /* CustomNotificationServiceExtension.appex in Embed Foundation Extensions */, + 7FD73CA22B23CE9500420AF3 /* NotificationServiceExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -89,7 +89,7 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = NewExpensify/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = NewExpensify/main.m; sourceTree = ""; }; 18D050DF262400AF000D658B /* BridgingFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgingFile.swift; sourceTree = ""; }; - 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CustomNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release adhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release adhoc.xcconfig"; sourceTree = ""; }; 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; @@ -112,39 +112,39 @@ 70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; }; 75CABB0D0ABB0082FE0EB600 /* Pods-NewExpensify.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release staging.xcconfig"; sourceTree = ""; }; 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpError.swift; sourceTree = ""; }; - 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CustomNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; }; 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; }; - 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; + 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; sourceTree = ""; }; AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; sourceTree = ""; }; BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Italic.otf"; path = "../assets/fonts/native/ExpensifyNeue-Italic.otf"; sourceTree = ""; }; - C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; + C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; CECC4CBB97A55705A33BEA9E /* Pods-NewExpensify.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug development.xcconfig"; sourceTree = ""; }; D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNewKansas-MediumItalic.otf"; path = "../assets/fonts/native/ExpensifyNewKansas-MediumItalic.otf"; sourceTree = ""; }; - D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; }; + D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugadhoc.xcconfig"; sourceTree = ""; }; DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig"; sourceTree = ""; }; DCF33E34FFEC48128CDD41D4 /* ExpensifyMono-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Bold.otf"; path = "../assets/fonts/native/ExpensifyMono-Bold.otf"; sourceTree = ""; }; DD7904292792E76D004484B4 /* RCTBootSplash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTBootSplash.h; path = NewExpensify/RCTBootSplash.h; sourceTree = ""; }; DD79042A2792E76D004484B4 /* RCTBootSplash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTBootSplash.m; path = NewExpensify/RCTBootSplash.m; sourceTree = ""; }; E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; sourceTree = ""; }; - E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; + E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Regular.otf"; path = "../assets/fonts/native/ExpensifyMono-Regular.otf"; sourceTree = ""; }; E9DF872C2525201700607FDC /* AirshipConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AirshipConfig.plist; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; - F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; }; + F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releasedevelopment.xcconfig"; sourceTree = ""; }; F0C450E92705020500FD2970 /* colors.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = colors.json; path = ../colors.json; sourceTree = ""; }; F15A36A3262EEC3B0CAB8EDF /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig"; sourceTree = ""; }; F4F8A052A22040339996324B /* ExpensifyNeue-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Regular.otf"; path = "../assets/fonts/native/ExpensifyNeue-Regular.otf"; sourceTree = ""; }; - FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-CustomNotificationServiceExtension/Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; }; + FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugdevelopment.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -169,7 +169,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 059DC4EFD39EF39437E6823D /* libPods-CustomNotificationServiceExtension.a in Frameworks */, + 059DC4EFD39EF39437E6823D /* libPods-NotificationServiceExtension.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -217,19 +217,19 @@ ED2971642150620600B7C4FE /* JavaScriptCore.framework */, AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */, 6FB387B20AE4E6E98858B6AA /* libPods-NewExpensify-NewExpensifyTests.a */, - 1A997AA8204EA3D90907FA80 /* libPods-CustomNotificationServiceExtension.a */, + 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */, ); name = Frameworks; sourceTree = ""; }; - 7FD73C9C2B23CE9500420AF3 /* CustomNotificationServiceExtension */ = { + 7FD73C9C2B23CE9500420AF3 /* NotificationServiceExtension */ = { isa = PBXGroup; children = ( 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */, 7FD73C9F2B23CE9500420AF3 /* Info.plist */, 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */, ); - path = CustomNotificationServiceExtension; + path = NotificationServiceExtension; sourceTree = ""; }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { @@ -253,7 +253,7 @@ 13B07FAE1A68108700A75B9A /* NewExpensify */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* NewExpensifyTests */, - 7FD73C9C2B23CE9500420AF3 /* CustomNotificationServiceExtension */, + 7FD73C9C2B23CE9500420AF3 /* NotificationServiceExtension */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, EC29677F0A49C2946A495A33 /* Pods */, @@ -269,7 +269,7 @@ children = ( 13B07F961A680F5B00A75B9A /* New Expensify Dev.app */, 00E356EE1AD99517003FC87E /* NewExpensifyTests.xctest */, - 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */, + 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */, ); name = Products; sourceTree = ""; @@ -320,12 +320,12 @@ 4E8BF7B08BA3181991BFCF4B /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */, E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, 57DBBEDB9692E096D4BA0141 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */, - FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */, - D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */, - C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */, - F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */, - E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */, - 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */, + FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */, + D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */, + C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */, + F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */, + E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */, + 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */, ); path = Pods; sourceTree = ""; @@ -380,9 +380,9 @@ productReference = 13B07F961A680F5B00A75B9A /* New Expensify Dev.app */; productType = "com.apple.product-type.application"; }; - 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */ = { + 7FD73C9A2B23CE9500420AF3 /* NotificationServiceExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "CustomNotificationServiceExtension" */; + buildConfigurationList = 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */; buildPhases = ( F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */, 7FD73C972B23CE9500420AF3 /* Sources */, @@ -393,9 +393,9 @@ ); dependencies = ( ); - name = CustomNotificationServiceExtension; - productName = CustomNotificationServiceExtension; - productReference = 7FD73C9B2B23CE9500420AF3 /* CustomNotificationServiceExtension.appex */; + name = NotificationServiceExtension; + productName = NotificationServiceExtension; + productReference = 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */; productType = "com.apple.product-type.app-extension"; }; /* End PBXNativeTarget section */ @@ -440,7 +440,7 @@ targets = ( 13B07F861A680F5B00A75B9A /* NewExpensify */, 00E356ED1AD99517003FC87E /* NewExpensifyTests */, - 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */, + 7FD73C9A2B23CE9500420AF3 /* NotificationServiceExtension */, ); }; /* End PBXProject section */ @@ -720,7 +720,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-CustomNotificationServiceExtension-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -792,7 +792,7 @@ }; 7FD73CA12B23CE9500420AF3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 7FD73C9A2B23CE9500420AF3 /* CustomNotificationServiceExtension */; + target = 7FD73C9A2B23CE9500420AF3 /* NotificationServiceExtension */; targetProxy = 7FD73CA02B23CE9500420AF3 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -912,7 +912,7 @@ }; 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FBEBA6FBED49FB41D6F93896 /* Pods-CustomNotificationServiceExtension.debugdevelopment.xcconfig */; + baseConfigurationReference = FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -968,8 +968,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -978,7 +978,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; @@ -993,7 +993,7 @@ }; 7FD73CA52B23CE9500420AF3 /* DebugAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3F458C994019E6A571461B7 /* Pods-CustomNotificationServiceExtension.debugadhoc.xcconfig */; + baseConfigurationReference = D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1049,8 +1049,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -1059,7 +1059,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1073,7 +1073,7 @@ }; 7FD73CA62B23CE9500420AF3 /* DebugProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3FF914C045A138C061D306E /* Pods-CustomNotificationServiceExtension.debugproduction.xcconfig */; + baseConfigurationReference = C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1129,8 +1129,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -1139,7 +1139,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1153,7 +1153,7 @@ }; 7FD73CA72B23CE9500420AF3 /* ReleaseDevelopment */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F082D95EE104912B48EA98BA /* Pods-CustomNotificationServiceExtension.releasedevelopment.xcconfig */; + baseConfigurationReference = F082D95EE104912B48EA98BA /* Pods-NotificationServiceExtension.releasedevelopment.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1203,8 +1203,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -1212,7 +1212,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1226,7 +1226,7 @@ }; 7FD73CA82B23CE9500420AF3 /* ReleaseAdHoc */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E61AD6D2DE65B6FB14945CDF /* Pods-CustomNotificationServiceExtension.releaseadhoc.xcconfig */; + baseConfigurationReference = E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1276,8 +1276,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -1285,7 +1285,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1299,7 +1299,7 @@ }; 7FD73CA92B23CE9500420AF3 /* ReleaseProduction */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 90E08F0C8C924EDA018C8866 /* Pods-CustomNotificationServiceExtension.releaseproduction.xcconfig */; + baseConfigurationReference = 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -1349,8 +1349,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = CustomNotificationServiceExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = CustomNotificationServiceExtension; + INFOPLIST_FILE = NotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -1358,7 +1358,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.CustomNotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1995,7 +1995,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = DebugDevelopment; }; - 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "CustomNotificationServiceExtension" */ = { + 7FD73CAA2B23CE9500420AF3 /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( 7FD73CA42B23CE9500420AF3 /* DebugDevelopment */, diff --git a/ios/CustomNotificationServiceExtension/ExpError.swift b/ios/NotificationServiceExtension/ExpError.swift similarity index 79% rename from ios/CustomNotificationServiceExtension/ExpError.swift rename to ios/NotificationServiceExtension/ExpError.swift index 7760be640936..147618fb26d9 100644 --- a/ios/CustomNotificationServiceExtension/ExpError.swift +++ b/ios/NotificationServiceExtension/ExpError.swift @@ -1,6 +1,6 @@ // // ExpError.swift -// CustomNotificationServiceExtension +// NotificationServiceExtension // // Created by Andrew Rosiclair on 12/13/23. // diff --git a/ios/CustomNotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist similarity index 100% rename from ios/CustomNotificationServiceExtension/Info.plist rename to ios/NotificationServiceExtension/Info.plist diff --git a/ios/CustomNotificationServiceExtension/NotificationService.swift b/ios/NotificationServiceExtension/NotificationService.swift similarity index 98% rename from ios/CustomNotificationServiceExtension/NotificationService.swift rename to ios/NotificationServiceExtension/NotificationService.swift index 508d47799d34..a658a16a9945 100644 --- a/ios/CustomNotificationServiceExtension/NotificationService.swift +++ b/ios/NotificationServiceExtension/NotificationService.swift @@ -1,6 +1,6 @@ // // NotificationService.swift -// CustomNotificationServiceExtension +// NotificationServiceExtension // // Created by Andrew Rosiclair on 12/8/23. // @@ -13,7 +13,7 @@ class NotificationService: UANotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? - let log = OSLog(subsystem: Bundle.main.bundleIdentifier ?? "com.expensify.chat.dev.CustomNotificationServiceExtension", category: "NotificationService") + let log = OSLog(subsystem: Bundle.main.bundleIdentifier ?? "com.expensify.chat.dev.NotificationServiceExtension", category: "NotificationService") override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { os_log("[NotificationService] didReceive() - received notification", log: log) diff --git a/ios/Podfile b/ios/Podfile index 2df3d94a013d..0c081fa92487 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -119,6 +119,6 @@ target 'NewExpensify' do end end -target 'CustomNotificationServiceExtension' do +target 'NotificationServiceExtension' do pod 'AirshipServiceExtension' end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 0c1214344a8f..3d5b685975ab 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1295,6 +1295,6 @@ SPEC CHECKSUMS: Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: c44319b85c142746fd25749dc13f06ce81273f22 +PODFILE CHECKSUM: 39399f883f6ae62edb4cc9e4fab8d4143eab59a7 COCOAPODS: 1.12.1 From 67d8610e879ca8ab7dc833fa0a4179d7908b5344 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 14:54:24 -0500 Subject: [PATCH 25/45] fix pod install warnings for overriden settings --- ios/NewExpensify.xcodeproj/project.pbxproj | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index fa5384a9944f..9aba960a0881 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -827,7 +827,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4E8BF7B08BA3181991BFCF4B /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; @@ -850,7 +849,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0B627F2A465153FFA6E3A4E0 /* Pods-NewExpensify.debugdevelopment.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -883,7 +881,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -937,7 +934,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1018,7 +1014,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1098,7 +1093,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1178,7 +1172,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1251,7 +1244,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1324,7 +1316,6 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -1563,7 +1554,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1686,7 +1676,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6F6A514B4DF07A60EC8355BA /* Pods-NewExpensify.debugadhoc.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1803,7 +1792,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 47D5DF3C6779D41BE70CD031 /* Pods-NewExpensify.releaseproduction.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; @@ -1916,7 +1904,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconAdHoc; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ENABLE_MODULES = YES; From 2fe775f863dcb20b61bd73312af3195c032c4ebc Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 15:24:06 -0500 Subject: [PATCH 26/45] configure the group/room name --- .../NotificationService.swift | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/ios/NotificationServiceExtension/NotificationService.swift b/ios/NotificationServiceExtension/NotificationService.swift index a658a16a9945..943a8f89cf42 100644 --- a/ios/NotificationServiceExtension/NotificationService.swift +++ b/ios/NotificationServiceExtension/NotificationService.swift @@ -150,24 +150,43 @@ class NotificationService: UANotificationServiceExtension { let avatar = fetchINImage(imageURL: notificationData.avatarURL, reportActionID: notificationData.reportActionID) let sender = INPerson(personHandle: handle, nameComponents: nil, - displayName: notificationData.title, + displayName: notificationData.userName, image: avatar, contactIdentifier: nil, customIdentifier: nil) - + + // Configure the group/room name if there is one + var speakableGroupName: INSpeakableString? = nil + var recipients: [INPerson]? = nil + if (notificationData.roomName != nil) { + speakableGroupName = INSpeakableString(spokenPhrase: notificationData.roomName ?? "") + + // To add the group name subtitle there must be multiple recipients set. However, we do not have + // data on the participatns in the room/group chat so we just add a placeholder here. This shouldn't + // appear anywhere in the UI + let placeholderPerson = INPerson(personHandle: INPersonHandle(value: "placeholder", type: .unknown), + nameComponents: nil, + displayName: "placeholder", + image: nil, + contactIdentifier: nil, + customIdentifier: nil) + recipients = [sender, placeholderPerson] + } // Because this communication is incoming, you can infer that the current user is // a recipient. Don't include the current user when initializing the intent. - let roomName = INSpeakableString(spokenPhrase: notificationData.roomName ?? "") - let intent = INSendMessageIntent(recipients: nil, + let intent = INSendMessageIntent(recipients: recipients, outgoingMessageType: .outgoingMessageText, content: notificationData.messageText, - speakableGroupName: roomName, + speakableGroupName: speakableGroupName, conversationIdentifier: String(notificationData.reportID), serviceName: nil, sender: sender, attachments: nil) + // When the group name is set, we force the avatar to just be the sender's avatar + intent.setImage(avatar, forParameterNamed: \.speakableGroupName) + return intent } From e5b8b3f8e433918e8d6d60ed87f1aae8765a52f1 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 16:51:21 -0500 Subject: [PATCH 27/45] update bundle IDs for adhoc and prod --- ios/NewExpensify.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 9aba960a0881..da9be3466ef4 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -1054,7 +1054,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1133,7 +1133,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1277,7 +1277,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1349,7 +1349,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; From 055e64c39e35cd9be1327a613365ea660ea9224e Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 16:52:07 -0500 Subject: [PATCH 28/45] use manual signing to match the main app target --- ios/NewExpensify.xcodeproj/project.pbxproj | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index da9be3466ef4..4e3a0745bf73 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -420,8 +420,7 @@ }; 7FD73C9A2B23CE9500420AF3 = { CreatedOnToolsVersion = 15.0.1; - DevelopmentTeam = 368M544MTT; - ProvisioningStyle = Automatic; + ProvisioningStyle = Manual; }; }; }; @@ -941,11 +940,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1021,11 +1020,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1056,6 +1055,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; @@ -1100,11 +1100,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1135,6 +1135,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; @@ -1179,11 +1180,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1207,6 +1208,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1251,11 +1253,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1279,6 +1281,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1323,11 +1326,11 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 368M544MTT; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1351,6 +1354,7 @@ MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; From fd11e2d3af6d8f0a1311bebaf006de86d1f41b18 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Sun, 17 Dec 2023 17:17:32 -0500 Subject: [PATCH 29/45] podfile lock update --- ios/Podfile.lock | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 797d341020b9..3d5b685975ab 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -778,10 +778,35 @@ PODS: - React-Core - RNReactNativeHapticFeedback (1.14.0): - React-Core - - RNReanimated (3.6.1): - - RCT-Folly (= 2021.07.22.00) + - RNReanimated (3.5.4): + - DoubleConversion + - FBLazyVector + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-callinvoker - React-Core + - React-Core/DevSupport + - React-Core/RCTWebSocket + - React-CoreModules + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-RCTActionSheet + - React-RCTAnimation + - React-RCTAppDelegate + - React-RCTBlob + - React-RCTImage + - React-RCTLinking + - React-RCTNetwork + - React-RCTSettings + - React-RCTText - ReactCommon/turbomodule/core + - Yoga - RNScreens (3.21.0): - React-Core - React-RCTImage @@ -1259,7 +1284,7 @@ SPEC CHECKSUMS: rnmapbox-maps: 6f638ec002aa6e906a6f766d69cd45f968d98e64 RNPermissions: 9b086c8f05b2e2faa587fdc31f4c5ab4509728aa RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c - RNReanimated: fdbaa9c964bbab7fac50c90862b6cc5f041679b9 + RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87 RNScreens: d037903436160a4b039d32606668350d2a808806 RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d From 506ac9ef14b64ed97c9c9fe40ea842e7a8bc90f2 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 10:32:40 -0500 Subject: [PATCH 30/45] use iphone distribution like the main target --- ios/NewExpensify.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 4e3a0745bf73..9ab84aa8dd65 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -939,7 +939,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; From a7ca53fe9ccfe55442ad83013d532a2572f6226d Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 11:20:57 -0500 Subject: [PATCH 31/45] podfile update --- ios/Podfile.lock | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3d5b685975ab..797d341020b9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -778,35 +778,10 @@ PODS: - React-Core - RNReactNativeHapticFeedback (1.14.0): - React-Core - - RNReanimated (3.5.4): - - DoubleConversion - - FBLazyVector - - glog - - hermes-engine - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-callinvoker + - RNReanimated (3.6.1): + - RCT-Folly (= 2021.07.22.00) - React-Core - - React-Core/DevSupport - - React-Core/RCTWebSocket - - React-CoreModules - - React-cxxreact - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-RCTActionSheet - - React-RCTAnimation - - React-RCTAppDelegate - - React-RCTBlob - - React-RCTImage - - React-RCTLinking - - React-RCTNetwork - - React-RCTSettings - - React-RCTText - ReactCommon/turbomodule/core - - Yoga - RNScreens (3.21.0): - React-Core - React-RCTImage @@ -1284,7 +1259,7 @@ SPEC CHECKSUMS: rnmapbox-maps: 6f638ec002aa6e906a6f766d69cd45f968d98e64 RNPermissions: 9b086c8f05b2e2faa587fdc31f4c5ab4509728aa RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c - RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87 + RNReanimated: fdbaa9c964bbab7fac50c90862b6cc5f041679b9 RNScreens: d037903436160a4b039d32606668350d2a808806 RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d From f7343106bcdd6610713427b643f16bb972610a2d Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 11:25:30 -0500 Subject: [PATCH 32/45] comment pointing to docs for comms notifications --- ios/NotificationServiceExtension/NotificationService.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ios/NotificationServiceExtension/NotificationService.swift b/ios/NotificationServiceExtension/NotificationService.swift index 943a8f89cf42..a749c25431d6 100644 --- a/ios/NotificationServiceExtension/NotificationService.swift +++ b/ios/NotificationServiceExtension/NotificationService.swift @@ -31,6 +31,9 @@ class NotificationService: UANotificationServiceExtension { } } + /** + * Parses the notification content and modifies it to be a Communication Notification. More info here: https://developer.apple.com/documentation/usernotifications/implementing_communication_notifications + */ @available(iOSApplicationExtension 15.0, *) func configureCommunicationNotification(notificationContent: UNMutableNotificationContent, contentHandler: @escaping (UNNotificationContent) -> Void) { var notificationData: NotificationData From 9115cc82d96a3567a3a0ff6d2610e43c3f21d4b3 Mon Sep 17 00:00:00 2001 From: Andrew Gable Date: Tue, 19 Dec 2023 12:31:39 -0700 Subject: [PATCH 33/45] Update provisioning profiles in xcode project --- ios/NewExpensify.xcodeproj/project.pbxproj | 35 ++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 9ab84aa8dd65..37dfdd53f25f 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -420,6 +420,7 @@ }; 7FD73C9A2B23CE9500420AF3 = { CreatedOnToolsVersion = 15.0.1; + DevelopmentTeam = 368M544MTT; ProvisioningStyle = Manual; }; }; @@ -853,9 +854,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_BITCODE = NO; INFOPLIST_FILE = "$(SRCROOT)/NewExpensify/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -869,6 +872,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -885,9 +889,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = NewExpensify/Chat.entitlements; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; INFOPLIST_FILE = NewExpensify/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -900,6 +906,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -940,11 +947,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -973,9 +982,10 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; @@ -1025,6 +1035,7 @@ CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1056,6 +1067,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; @@ -1100,11 +1112,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1136,6 +1150,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; @@ -1180,11 +1195,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1206,9 +1223,10 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1258,6 +1276,7 @@ CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1282,6 +1301,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1326,11 +1346,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1355,6 +1377,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AppStore: Notification Service"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1566,6 +1589,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_BITCODE = NO; INFOPLIST_FILE = "$(SRCROOT)/NewExpensify/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -1579,6 +1603,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = "New Expensify"; PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AppStore"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1688,6 +1713,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; ENABLE_BITCODE = NO; INFOPLIST_FILE = "$(SRCROOT)/NewExpensify/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -1701,6 +1727,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc; PRODUCT_NAME = "New Expensify AdHoc"; PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1804,6 +1831,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; INFOPLIST_FILE = NewExpensify/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -1816,6 +1844,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = "New Expensify"; PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AppStore"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -1916,6 +1945,7 @@ CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 368M544MTT; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 368M544MTT; INFOPLIST_FILE = NewExpensify/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -1928,6 +1958,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc; PRODUCT_NAME = "New Expensify AdHoc"; PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; From 44d09e58e73e937ad60e1c26107bfc022f5e4674 Mon Sep 17 00:00:00 2001 From: Andrew Gable Date: Tue, 19 Dec 2023 12:50:55 -0700 Subject: [PATCH 34/45] Update with new profiles for Notification Service --- .github/scripts/verifyPodfile.sh | 2 +- .github/workflows/README.md | 6 ++++-- .github/workflows/platformDeploy.yml | 11 +++++++--- .github/workflows/testBuild.yml | 9 ++++++-- fastlane/Fastfile | 20 ++++++++++++++---- ios/NewApp_AdHoc.mobileprovision.gpg | Bin 0 -> 11311 bytes ...c_Notification_Service.mobileprovision.gpg | Bin 0 -> 10923 bytes ios/NewApp_AppStore.mobileprovision.gpg | Bin 0 -> 8230 bytes ...e_Notification_Service.mobileprovision.gpg | Bin 0 -> 7823 bytes ...hat_expensify_appstore.mobileprovision.gpg | Bin 8171 -> 0 bytes ios/expensify_chat_adhoc.mobileprovision.gpg | Bin 11262 -> 0 bytes 11 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 ios/NewApp_AdHoc.mobileprovision.gpg create mode 100644 ios/NewApp_AdHoc_Notification_Service.mobileprovision.gpg create mode 100644 ios/NewApp_AppStore.mobileprovision.gpg create mode 100644 ios/NewApp_AppStore_Notification_Service.mobileprovision.gpg delete mode 100644 ios/chat_expensify_appstore.mobileprovision.gpg delete mode 100644 ios/expensify_chat_adhoc.mobileprovision.gpg diff --git a/.github/scripts/verifyPodfile.sh b/.github/scripts/verifyPodfile.sh index ec2709a25786..914681f46ec0 100755 --- a/.github/scripts/verifyPodfile.sh +++ b/.github/scripts/verifyPodfile.sh @@ -12,7 +12,7 @@ declare EXIT_CODE=0 # Check Provisioning Style. If automatic signing is enabled, iOS builds will fail, so ensure we always have the proper profile specified info "Verifying that automatic signing is not enabled" -if grep -q 'PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore' ios/NewExpensify.xcodeproj/project.pbxproj; then +if grep -q 'PROVISIONING_PROFILE_SPECIFIER = NewApp_AppStore' ios/NewExpensify.xcodeproj/project.pbxproj; then success "Automatic signing not enabled" else error "Error: Automatic provisioning style is not allowed!" diff --git a/.github/workflows/README.md b/.github/workflows/README.md index d940d99d9cde..b2cc58fa4a6a 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -83,8 +83,10 @@ The GitHub workflows require a large list of secrets to deploy, notify and test 1. `LARGE_SECRET_PASSPHRASE` - decrypts secrets stored in various encrypted files stored in GitHub repository. To create updated versions of these encrypted files, refer to steps 1-4 of [this encrypted secrets help page](https://docs.github.com/en/actions/reference/encrypted-secrets#limits-for-secrets) using the `LARGE_SECRET_PASSPHRASE`. 1. `android/app/my-upload-key.keystore.gpg` 1. `android/app/android-fastlane-json-key.json.gpg` - 1. `ios/expensify_chat_adhoc.mobileprovision.gpg` - 1. `ios/chat_expensify_appstore.mobileprovision.gpg` + 1. `ios/NewApp_AdHoc.mobileprovision` + 1. `ios/NewApp_AdHoc_Notification_Service.mobileprovision` + 1. `ios/NewApp_AppStore.mobileprovision.gpg` + 1. `ios/NewApp_AppStore_Notification_Service.mobileprovision.gpg` 1. `ios/Certificates.p12.gpg` 1. `SLACK_WEBHOOK` - Sends Slack notifications via Slack WebHook https://expensify.slack.com/services/B01AX48D7MM 1. `OS_BOTIFY_TOKEN` - Personal access token for @OSBotify user in GitHub diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml index 8ccc0a7f6056..f1cf0d64f834 100644 --- a/.github/workflows/platformDeploy.yml +++ b/.github/workflows/platformDeploy.yml @@ -61,7 +61,7 @@ jobs: with: distribution: 'oracle' java-version: '17' - + - name: Setup Ruby uses: ruby/setup-ruby@a05e47355e80e57b9a67566a813648fa67d92011 with: @@ -211,8 +211,13 @@ jobs: max_attempts: 5 command: cd ios && bundle exec pod install - - name: Decrypt profile - run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output chat_expensify_appstore.mobileprovision chat_expensify_appstore.mobileprovision.gpg + - name: Decrypt AppStore profile + run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output NewApp_AppStore.mobileprovision NewApp_AppStore.mobileprovision.gpg + env: + LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} + + - name: Decrypt AppStore Notification Service profile + run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output NewApp_AppStore_Notification_Service.mobileprovision NewApp_AppStore_Notification_Service.mobileprovision.gpg env: LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index 94a51a2d11bd..eecce6b9060a 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -186,8 +186,13 @@ jobs: max_attempts: 5 command: cd ios && bundle exec pod install - - name: Decrypt profile - run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output expensify_chat_adhoc.mobileprovision expensify_chat_adhoc.mobileprovision.gpg + - name: Decrypt AdHoc profile + run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output NewApp_AdHoc.mobileprovision NewApp_AdHoc.mobileprovision.gpg + env: + LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} + + - name: Decrypt AdHoc Notification Service profile + run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output NewApp_AdHoc_Notification_Service.mobileprovision NewApp_AdHoc_Notification_Service.mobileprovision.gpg env: LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 2b5c15146eb3..7fb67f073c6f 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -161,19 +161,27 @@ platform :ios do ) install_provisioning_profile( - path: "./ios/expensify_chat_adhoc.mobileprovision" + path: "./ios/NewApp_AdHoc.mobileprovision" + ) + + install_provisioning_profile( + path: "./ios/NewApp_AdHoc_Notification_Service.mobileprovision" ) build_app( workspace: "./ios/NewExpensify.xcworkspace", skip_profile_detection: true, scheme: "New Expensify AdHoc", - xcargs: { :PROVISIONING_PROFILE_SPECIFIER => "expensify_chat_adhoc", }, + xcargs: { + :PROVISIONING_PROFILE_SPECIFIER => "NewApp_AdHoc", + :PROVISIONING_PROFILE_SPECIFIER => "NewApp_AdHoc_Notification_Service", + }, export_method: "ad-hoc", export_options: { method: "ad-hoc", provisioningProfiles: { - "com.expensify.chat.adhoc" => "expensify_chat_adhoc", + "com.expensify.chat.adhoc" => "NewApp_AdHoc", + "com.expensify.chat.adhoc.NotificationServiceExtension" => "NewApp_AdHoc_Notification_Service", }, manageAppVersionAndBuildNumber: false } @@ -215,7 +223,11 @@ platform :ios do ) install_provisioning_profile( - path: "./ios/chat_expensify_appstore.mobileprovision" + path: "./ios/NewApp_AppStore.mobileprovision" + ) + + install_provisioning_profile( + path: "./ios/NewApp_AppStore_Notification_Service.mobileprovision" ) build_app( diff --git a/ios/NewApp_AdHoc.mobileprovision.gpg b/ios/NewApp_AdHoc.mobileprovision.gpg new file mode 100644 index 0000000000000000000000000000000000000000..e5ee52210866c18e6ba1683147be3299658ddb2e GIT binary patch literal 11311 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 Y6n6^8)+QTe?@L)$<@Gf;L;BCD8;I393jhEB literal 0 HcmV?d00001 diff --git a/ios/NewApp_AppStore_Notification_Service.mobileprovision.gpg b/ios/NewApp_AppStore_Notification_Service.mobileprovision.gpg new file mode 100644 index 0000000000000000000000000000000000000000..4af7b16c50413480412bb185a868782a24dc6684 GIT binary patch literal 7823 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 literal 0 HcmV?d00001 diff --git a/ios/chat_expensify_appstore.mobileprovision.gpg b/ios/chat_expensify_appstore.mobileprovision.gpg deleted file mode 100644 index 246f5f0ec99e6e67c58f131414b7d06bfb6b0d83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8171 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 R&LWkJQNyh%4o1k;tSxGu_)h=; diff --git a/ios/expensify_chat_adhoc.mobileprovision.gpg b/ios/expensify_chat_adhoc.mobileprovision.gpg deleted file mode 100644 index f4691df10d67d8234b7a54b75e74c34dae9be396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11262 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 From ae48bdcd88c6a831ecc20de84633ccf769b6cecd Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 14:56:48 -0500 Subject: [PATCH 35/45] comment updates Co-authored-by: Manan --- ios/NotificationServiceExtension/NotificationService.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/NotificationServiceExtension/NotificationService.swift b/ios/NotificationServiceExtension/NotificationService.swift index a749c25431d6..c4eb01981bf2 100644 --- a/ios/NotificationServiceExtension/NotificationService.swift +++ b/ios/NotificationServiceExtension/NotificationService.swift @@ -49,7 +49,7 @@ class NotificationService: UANotificationServiceExtension { return } - // Create an intent for the incoming message + // Create an intent for the incoming communication message let intent: INSendMessageIntent = createMessageIntent(notificationData: notificationData) // Use the intent to initialize the interaction. @@ -187,7 +187,7 @@ class NotificationService: UANotificationServiceExtension { sender: sender, attachments: nil) - // When the group name is set, we force the avatar to just be the sender's avatar + // If the group name is set, we force the avatar to just be the sender's avatar intent.setImage(avatar, forParameterNamed: \.speakableGroupName) return intent From 13beb5f08824b8ee5679501895c1c44f84490990 Mon Sep 17 00:00:00 2001 From: Andrew Gable Date: Tue, 19 Dec 2023 13:03:20 -0700 Subject: [PATCH 36/45] Tweaking configs for test and AdHoc --- .github/scripts/verifyPodfile.sh | 2 +- fastlane/Fastfile | 4 ++-- ios/NewExpensify.xcodeproj/project.pbxproj | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/scripts/verifyPodfile.sh b/.github/scripts/verifyPodfile.sh index 914681f46ec0..ab807aaf919c 100755 --- a/.github/scripts/verifyPodfile.sh +++ b/.github/scripts/verifyPodfile.sh @@ -12,7 +12,7 @@ declare EXIT_CODE=0 # Check Provisioning Style. If automatic signing is enabled, iOS builds will fail, so ensure we always have the proper profile specified info "Verifying that automatic signing is not enabled" -if grep -q 'PROVISIONING_PROFILE_SPECIFIER = NewApp_AppStore' ios/NewExpensify.xcodeproj/project.pbxproj; then +if grep -q 'PROVISIONING_PROFILE_SPECIFIER = (NewApp) AppStore' ios/NewExpensify.xcodeproj/project.pbxproj; then success "Automatic signing not enabled" else error "Error: Automatic provisioning style is not allowed!" diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 7fb67f073c6f..2e4a7f1ea9c7 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -173,8 +173,8 @@ platform :ios do skip_profile_detection: true, scheme: "New Expensify AdHoc", xcargs: { - :PROVISIONING_PROFILE_SPECIFIER => "NewApp_AdHoc", - :PROVISIONING_PROFILE_SPECIFIER => "NewApp_AdHoc_Notification_Service", + :PROVISIONING_PROFILE_SPECIFIER => "(NewApp) AdHoc", + :PROVISIONING_PROFILE_SPECIFIER => "(NewApp) AdHoc: Notification Service", }, export_method: "ad-hoc", export_options: { diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index 37dfdd53f25f..fde2c8c17d15 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -871,7 +871,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; - PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) Development"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -905,7 +905,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev; PRODUCT_NAME = "New Expensify Dev"; - PROVISIONING_PROFILE_SPECIFIER = expensify_chat_dev; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) Development"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1602,7 +1602,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = "New Expensify"; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) AppStore"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AppStore"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -1726,7 +1726,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc; PRODUCT_NAME = "New Expensify AdHoc"; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) AdHoc"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -1843,7 +1843,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat; PRODUCT_NAME = "New Expensify"; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) AppStore"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AppStore"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1957,7 +1957,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc; PRODUCT_NAME = "New Expensify AdHoc"; - PROVISIONING_PROFILE_SPECIFIER = chat_expensify_appstore; + PROVISIONING_PROFILE_SPECIFIER = "(NewApp) AdHoc"; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) AdHoc"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; From c39c67eb6d5a72163f7ddcf6a256aa48e8609806 Mon Sep 17 00:00:00 2001 From: Andrew Gable Date: Tue, 19 Dec 2023 13:22:34 -0700 Subject: [PATCH 37/45] Tweak provisioning profile config --- fastlane/Fastfile | 1 - 1 file changed, 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 2e4a7f1ea9c7..931119b7cf4b 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -174,7 +174,6 @@ platform :ios do scheme: "New Expensify AdHoc", xcargs: { :PROVISIONING_PROFILE_SPECIFIER => "(NewApp) AdHoc", - :PROVISIONING_PROFILE_SPECIFIER => "(NewApp) AdHoc: Notification Service", }, export_method: "ad-hoc", export_options: { From 77079113dfed64302f3ec99cdb584a210ce5b48a Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 16:18:21 -0500 Subject: [PATCH 38/45] remove xcargs override --- fastlane/Fastfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 931119b7cf4b..51ac3af96f18 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -172,9 +172,6 @@ platform :ios do workspace: "./ios/NewExpensify.xcworkspace", skip_profile_detection: true, scheme: "New Expensify AdHoc", - xcargs: { - :PROVISIONING_PROFILE_SPECIFIER => "(NewApp) AdHoc", - }, export_method: "ad-hoc", export_options: { method: "ad-hoc", From 2b451b2944428f6344187eeac49a830937100adc Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 16:40:46 -0500 Subject: [PATCH 39/45] use new profile names --- fastlane/Fastfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 51ac3af96f18..b30231f80119 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -176,8 +176,8 @@ platform :ios do export_options: { method: "ad-hoc", provisioningProfiles: { - "com.expensify.chat.adhoc" => "NewApp_AdHoc", - "com.expensify.chat.adhoc.NotificationServiceExtension" => "NewApp_AdHoc_Notification_Service", + "com.expensify.chat.adhoc" => "(NewApp) AdHoc", + "com.expensify.chat.adhoc.NotificationServiceExtension" => "(NewApp) AdHoc: Notification Service", }, manageAppVersionAndBuildNumber: false } From 73a37f17e3a4fe0c474e70a0c6ac7e0386848de2 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 17:29:10 -0500 Subject: [PATCH 40/45] set provisioning profiles for AppStore build --- fastlane/Fastfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index b30231f80119..b7d3334c902f 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -231,6 +231,10 @@ platform :ios do scheme: "New Expensify", output_name: "New Expensify.ipa", export_options: { + provisioningProfiles: { + "com.chat.expensify.chat" => "(NewApp) AppStore", + "com.chat.expensify.chat.NotificationServiceExtension" => "(NewApp) AppStore: Notification Service", + }, manageAppVersionAndBuildNumber: false } ) From d09f9d75399d3f71b6fb7b23ead122f043b544b6 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 19 Dec 2023 17:46:42 -0500 Subject: [PATCH 41/45] fix grep check --- .github/scripts/verifyPodfile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/verifyPodfile.sh b/.github/scripts/verifyPodfile.sh index ab807aaf919c..cd94a49bb091 100755 --- a/.github/scripts/verifyPodfile.sh +++ b/.github/scripts/verifyPodfile.sh @@ -12,7 +12,7 @@ declare EXIT_CODE=0 # Check Provisioning Style. If automatic signing is enabled, iOS builds will fail, so ensure we always have the proper profile specified info "Verifying that automatic signing is not enabled" -if grep -q 'PROVISIONING_PROFILE_SPECIFIER = (NewApp) AppStore' ios/NewExpensify.xcodeproj/project.pbxproj; then +if grep -q 'PROVISIONING_PROFILE_SPECIFIER = "(NewApp) AppStore"' ios/NewExpensify.xcodeproj/project.pbxproj; then success "Automatic signing not enabled" else error "Error: Automatic provisioning style is not allowed!" From 9788965c9ddd912dbd2978180b17a464ffe3a055 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Wed, 20 Dec 2023 15:53:16 -0500 Subject: [PATCH 42/45] rename mock steps and assertions --- .../assertions/platformDeployAssertions.js | 3 ++- workflow_tests/assertions/testBuildAssertions.js | 11 ++++++++++- workflow_tests/mocks/platformDeployMocks.js | 8 ++++++-- workflow_tests/mocks/testBuildMocks.js | 12 ++++++++++-- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/workflow_tests/assertions/platformDeployAssertions.js b/workflow_tests/assertions/platformDeployAssertions.js index 458899581687..e7e14578c3a2 100644 --- a/workflow_tests/assertions/platformDeployAssertions.js +++ b/workflow_tests/assertions/platformDeployAssertions.js @@ -170,7 +170,8 @@ const assertIOSJobExecuted = (workflowResult, didExecute = true, isProduction = {key: 'max_attempts', value: '5'}, {key: 'command', value: 'cd ios && bundle exec pod install'}, ]), - utils.createStepAssertion('Decrypt profile', true, null, 'IOS', 'Decrypting profile', null, [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), + utils.createStepAssertion('Decrypt AppStore profile', true, null, 'IOS', 'Decrypting profile', null, [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), + utils.createStepAssertion('Decrypt AppStore Notification Service profile', true, null, 'IOS', 'Decrypting profile', null, [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), utils.createStepAssertion('Decrypt certificate', true, null, 'IOS', 'Decrypting certificate', null, [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), utils.createStepAssertion('Decrypt App Store Connect API key', true, null, 'IOS', 'Decrypting App Store API key', null, [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), ]; diff --git a/workflow_tests/assertions/testBuildAssertions.js b/workflow_tests/assertions/testBuildAssertions.js index 781e6bac20a2..f26380616c47 100644 --- a/workflow_tests/assertions/testBuildAssertions.js +++ b/workflow_tests/assertions/testBuildAssertions.js @@ -185,7 +185,16 @@ const assertIOSJobExecuted = (workflowResult, ref = '', didExecute = true, fails ], [], ), - utils.createStepAssertion('Decrypt profile', true, null, 'IOS', 'Decrypt profile', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), + utils.createStepAssertion('Decrypt AppStore profile', true, null, 'IOS', 'Decrypt AppStore profile', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), + utils.createStepAssertion( + 'Decrypt AppStore Notification Service profile', + true, + null, + 'IOS', + 'Decrypt AppStore Notification Service profile', + [], + [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}], + ), utils.createStepAssertion('Decrypt certificate', true, null, 'IOS', 'Decrypt certificate', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), utils.createStepAssertion( 'Configure AWS Credentials', diff --git a/workflow_tests/mocks/platformDeployMocks.js b/workflow_tests/mocks/platformDeployMocks.js index 0d75a5fd74ee..a2bf78d6a8ab 100644 --- a/workflow_tests/mocks/platformDeployMocks.js +++ b/workflow_tests/mocks/platformDeployMocks.js @@ -123,7 +123,10 @@ const PLATFORM_DEPLOY__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK = utils.crea {IS_PODFILE_SAME_AS_MANIFEST: false}, ); const PLATFORM_DEPLOY__IOS__COCOAPODS__STEP_MOCK = utils.createMockStep('Install cocoapods', 'Installing cocoapods', 'IOS', ['timeout_minutes', 'max_attempts', 'command']); -const PLATFORM_DEPLOY__IOS__DECRYPT_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt profile', 'Decrypting profile', 'IOS', null, ['LARGE_SECRET_PASSPHRASE']); +const PLATFORM_DEPLOY__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt AppStore profile', 'Decrypting profile', 'IOS', null, ['LARGE_SECRET_PASSPHRASE']); +const PLATFORM_DEPLOY__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt AppStore Notification Service profile', 'Decrypting profile', 'IOS', null, [ + 'LARGE_SECRET_PASSPHRASE', +]); const PLATFORM_DEPLOY__IOS__DECRYPT_CERTIFICATE__STEP_MOCK = utils.createMockStep('Decrypt certificate', 'Decrypting certificate', 'IOS', null, ['LARGE_SECRET_PASSPHRASE']); const PLATFORM_DEPLOY__IOS__DECRYPT_APP_STORE_API_KEY__STEP_MOCK = utils.createMockStep('Decrypt App Store Connect API key', 'Decrypting App Store API key', 'IOS', null, [ 'LARGE_SECRET_PASSPHRASE', @@ -159,7 +162,8 @@ const PLATFORM_DEPLOY__IOS__STEP_MOCKS = [ PLATFORM_DEPLOY__IOS__CACHE_POD_DEPENDENCIES__STEP_MOCK, PLATFORM_DEPLOY__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK, PLATFORM_DEPLOY__IOS__COCOAPODS__STEP_MOCK, - PLATFORM_DEPLOY__IOS__DECRYPT_PROFILE__STEP_MOCK, + PLATFORM_DEPLOY__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK, + PLATFORM_DEPLOY__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK, PLATFORM_DEPLOY__IOS__DECRYPT_CERTIFICATE__STEP_MOCK, PLATFORM_DEPLOY__IOS__DECRYPT_APP_STORE_API_KEY__STEP_MOCK, PLATFORM_DEPLOY__IOS__FASTLANE__STEP_MOCK, diff --git a/workflow_tests/mocks/testBuildMocks.js b/workflow_tests/mocks/testBuildMocks.js index d7ae9abdb8e7..3bacfa154f12 100644 --- a/workflow_tests/mocks/testBuildMocks.js +++ b/workflow_tests/mocks/testBuildMocks.js @@ -116,7 +116,14 @@ const TESTBUILD__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK = utils.createMock IS_PODFILE_SAME_AS_MANIFEST: false, }); const TESTBUILD__IOS__INSTALL_COCOAPODS__STEP_MOCK = utils.createMockStep('Install cocoapods', 'Install cocoapods', 'IOS', ['timeout_minutes', 'max_attempts', 'command'], []); -const TESTBUILD__IOS__DECRYPT_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt profile', 'Decrypt profile', 'IOS', [], ['LARGE_SECRET_PASSPHRASE']); +const TESTBUILD__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt AppStore profile', 'Decrypt AppStore profile', 'IOS', [], ['LARGE_SECRET_PASSPHRASE']); +const TESTBUILD__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK = utils.createMockStep( + 'Decrypt AppStore Notification Service profile', + 'Decrypt AppStore Notification Service profile', + 'IOS', + [], + ['LARGE_SECRET_PASSPHRASE'], +); const TESTBUILD__IOS__DECRYPT_CERTIFICATE__STEP_MOCK = utils.createMockStep('Decrypt certificate', 'Decrypt certificate', 'IOS', [], ['LARGE_SECRET_PASSPHRASE']); const TESTBUILD__IOS__CONFIGURE_AWS_CREDENTIALS__STEP_MOCK = utils.createMockStep( 'Configure AWS Credentials', @@ -137,7 +144,8 @@ const TESTBUILD__IOS__STEP_MOCKS = [ TESTBUILD__IOS__CACHE_POD_DEPENDENCIES__STEP_MOCK, TESTBUILD__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK, TESTBUILD__IOS__INSTALL_COCOAPODS__STEP_MOCK, - TESTBUILD__IOS__DECRYPT_PROFILE__STEP_MOCK, + TESTBUILD__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK, + TESTBUILD__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK, TESTBUILD__IOS__DECRYPT_CERTIFICATE__STEP_MOCK, TESTBUILD__IOS__CONFIGURE_AWS_CREDENTIALS__STEP_MOCK, TESTBUILD__IOS__RUN_FASTLANE__STEP_MOCK, From 8725cd21ca073f678e1429cb742fb818a522b747 Mon Sep 17 00:00:00 2001 From: rory Date: Sat, 23 Dec 2023 21:07:04 -0800 Subject: [PATCH 43/45] Clean build after merge --- ios/NewExpensify.xcodeproj/project.pbxproj | 140 ++++++++++++--------- ios/Podfile.lock | 2 +- 2 files changed, 79 insertions(+), 63 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index db979f53d13c..bf3e63138979 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -27,18 +27,18 @@ 7041848526A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 7041848626A8E47D00E09F4D /* RCTStartupTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */; }; 70CF6E82262E297300711ADC /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70CF6E81262E297300711ADC /* BootSplash.storyboard */; }; + 7F5E81F06BCCF61AD02CEA06 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */; }; 7F9DD8DA2B2A445B005E3AFA /* ExpError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */; }; 7FD73C9E2B23CE9500420AF3 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */; }; 7FD73CA22B23CE9500420AF3 /* NotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 7F5E81F06BCCF61AD02CEA06 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */; }; 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */; }; BDB853621F354EBB84E619C2 /* ExpensifyNewKansas-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D2AFB39EC1D44BF9B91D3227 /* ExpensifyNewKansas-MediumItalic.otf */; }; DD79042B2792E76D004484B4 /* RCTBootSplash.m in Sources */ = {isa = PBXBuildFile; fileRef = DD79042A2792E76D004484B4 /* RCTBootSplash.m */; }; DDCB2E57F334C143AC462B43 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D20D83B0E39BA6D21761E72 /* ExpoModulesProvider.swift */; }; E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; - E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */ = {isa = PBXBuildFile; }; E9DF872D2525201700607FDC /* AirshipConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = E9DF872C2525201700607FDC /* AirshipConfig.plist */; }; ED222ED90E074A5481A854FA /* ExpensifyNeue-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */; }; + EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */; }; F0C450EA2705020500FD2970 /* colors.json in Resources */ = {isa = PBXBuildFile; fileRef = F0C450E92705020500FD2970 /* colors.json */; }; FF941A8D48F849269AB85C9A /* ExpensifyNewKansas-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 44BF435285B94E5B95F90994 /* ExpensifyNewKansas-Medium.otf */; }; /* End PBXBuildFile section */ @@ -93,8 +93,8 @@ 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release adhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release adhoc.xcconfig"; sourceTree = ""; }; 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig"; sourceTree = ""; }; 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; - 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release production.xcconfig"; sourceTree = ""; }; 32181F72DC539FFD1D1F0CA4 /* Pods-NewExpensify.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseproduction.xcconfig"; sourceTree = ""; }; + 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release production.xcconfig"; sourceTree = ""; }; 374FB8D528A133A7000D84EF /* OriginImageRequestHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OriginImageRequestHandler.h; path = NewExpensify/OriginImageRequestHandler.h; sourceTree = ""; }; 374FB8D628A133FE000D84EF /* OriginImageRequestHandler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OriginImageRequestHandler.mm; path = NewExpensify/OriginImageRequestHandler.mm; sourceTree = ""; }; 3BBA44B891E03FAB8255E6F1 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; @@ -108,22 +108,22 @@ 7041848426A8E47D00E09F4D /* RCTStartupTimer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTStartupTimer.m; path = NewExpensify/RCTStartupTimer.m; sourceTree = ""; }; 70CF6E81262E297300711ADC /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = NewExpensify/BootSplash.storyboard; sourceTree = ""; }; 75CABB0D0ABB0082FE0EB600 /* Pods-NewExpensify.release staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.release staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.release staging.xcconfig"; sourceTree = ""; }; + 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; + 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; }; 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpError.swift; sourceTree = ""; }; 7FD73C9B2B23CE9500420AF3 /* NotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 7FD73C9F2B23CE9500420AF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig"; sourceTree = ""; }; - 76BE68DA894BB75DDFE278DC /* Pods-NewExpensify.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releasedevelopment.xcconfig"; sourceTree = ""; }; - 7B318CF669A0F7FE948D5CED /* Pods-NewExpensify.debugadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugadhoc.xcconfig"; sourceTree = ""; }; 8B28D84EF339436DBD42A203 /* ExpensifyNeue-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-BoldItalic.otf"; path = "../assets/fonts/native/ExpensifyNeue-BoldItalic.otf"; sourceTree = ""; }; 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debug staging.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debug staging.xcconfig"; sourceTree = ""; }; 90E08F0C8C924EDA018C8866 /* Pods-NotificationServiceExtension.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseproduction.xcconfig"; sourceTree = ""; }; 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release production.xcconfig"; sourceTree = ""; }; + AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify-NewExpensifyTests/ExpoModulesProvider.swift"; sourceTree = ""; }; BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.release development.xcconfig"; sourceTree = ""; }; BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.releaseadhoc.xcconfig"; sourceTree = ""; }; - AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NewExpensify.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - BCD444BEDDB0AF1745B39049 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-NewExpensify-NewExpensifyTests/ExpoModulesProvider.swift"; sourceTree = ""; }; BF6A4C5167244B9FB8E4D4E3 /* ExpensifyNeue-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyNeue-Italic.otf"; path = "../assets/fonts/native/ExpensifyNeue-Italic.otf"; sourceTree = ""; }; C3788801E65E896FA7C77298 /* Pods-NewExpensify.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify.debugproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify/Pods-NewExpensify.debugproduction.xcconfig"; sourceTree = ""; }; C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.debugproduction.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.debugproduction.xcconfig"; sourceTree = ""; }; @@ -137,8 +137,8 @@ DD79042A2792E76D004484B4 /* RCTBootSplash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTBootSplash.m; path = NewExpensify/RCTBootSplash.m; sourceTree = ""; }; E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig"; sourceTree = ""; }; E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig"; sourceTree = ""; }; - E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; E2F78D2A9B3DB96F0524690B /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig"; sourceTree = ""; }; + E61AD6D2DE65B6FB14945CDF /* Pods-NotificationServiceExtension.releaseadhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; path = "Target Support Files/Pods-NotificationServiceExtension/Pods-NotificationServiceExtension.releaseadhoc.xcconfig"; sourceTree = ""; }; E681F80D97E6E4BB26194246 /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; path = "Target Support Files/Pods-NewExpensify-NewExpensifyTests/Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig"; sourceTree = ""; }; E704648954784DDFBAADF568 /* ExpensifyMono-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "ExpensifyMono-Regular.otf"; path = "../assets/fonts/native/ExpensifyMono-Regular.otf"; sourceTree = ""; }; E9DF872C2525201700607FDC /* AirshipConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AirshipConfig.plist; sourceTree = ""; }; @@ -167,8 +167,8 @@ files = ( E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, 976CCB5F8C921482E6AEAE71 /* libPods-NewExpensify.a in Frameworks */, - E51DC681C7DEE40AEBDDFBFE /* (null) in Frameworks */, - 5A464BC8112CDB1DE1E38F1C /* libPods-NewExpensify.a in Frameworks */, + E51DC681C7DEE40AEBDDFBFE /* BuildFile in Frameworks */, + EEAE4F8907465429AA5B5520 /* libPods-NewExpensify.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -223,7 +223,6 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, AEFE6CD54912D427D19133C7 /* libPods-NewExpensify.a */, - 6FB387B20AE4E6E98858B6AA /* libPods-NewExpensify-NewExpensifyTests.a */, 1A997AA8204EA3D90907FA80 /* libPods-NotificationServiceExtension.a */, AB40AC8872A3DD6EF53D8B94 /* libPods-NewExpensify.a */, 076FD9E41E08971BBF51D580 /* libPods-NewExpensify-NewExpensifyTests.a */, @@ -231,16 +230,6 @@ name = Frameworks; sourceTree = ""; }; - 7FD73C9C2B23CE9500420AF3 /* NotificationServiceExtension */ = { - isa = PBXGroup; - children = ( - 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */, - 7FD73C9F2B23CE9500420AF3 /* Info.plist */, - 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */, - ); - path = NotificationServiceExtension; - sourceTree = ""; - }; 3E1305958E607AC9E2CFA934 /* NewExpensify */ = { isa = PBXGroup; children = ( @@ -258,6 +247,16 @@ name = ExpoModulesProviders; sourceTree = ""; }; + 7FD73C9C2B23CE9500420AF3 /* NotificationServiceExtension */ = { + isa = PBXGroup; + children = ( + 7FD73C9D2B23CE9500420AF3 /* NotificationService.swift */, + 7FD73C9F2B23CE9500420AF3 /* Info.plist */, + 7F9DD8D92B2A445B005E3AFA /* ExpError.swift */, + ); + path = NotificationServiceExtension; + sourceTree = ""; + }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -328,33 +327,20 @@ isa = PBXGroup; children = ( CECC4CBB97A55705A33BEA9E /* Pods-NewExpensify.debug development.xcconfig */, - 0B09CE5BDAF34DD3573AB4E2 /* Pods-NewExpensify.debug adhoc.xcconfig */, 8D3B36BF88E773E3C1A383FA /* Pods-NewExpensify.debug staging.xcconfig */, - 0E27AA27706D894246E7946D /* Pods-NewExpensify.debug production.xcconfig */, - 02BE6CF80ED1BD2445267F92 /* Pods-NewExpensify.release development.xcconfig */, 1DDE5449979A136852B939B5 /* Pods-NewExpensify.release adhoc.xcconfig */, 75CABB0D0ABB0082FE0EB600 /* Pods-NewExpensify.release staging.xcconfig */, 34A8FDD1F9AA58B8F15C8380 /* Pods-NewExpensify.release production.xcconfig */, E2F1036F70CBFE39E9352674 /* Pods-NewExpensify-NewExpensifyTests.debug development.xcconfig */, - 432FF5842B766535509FC547 /* Pods-NewExpensify-NewExpensifyTests.debug adhoc.xcconfig */, - 3D393D7ABC1092F1DE91397F /* Pods-NewExpensify-NewExpensifyTests.debug staging.xcconfig */, DB76E0D5C670190A0997C71E /* Pods-NewExpensify-NewExpensifyTests.debug production.xcconfig */, BD6E1BA27D6ABE0AC9D70586 /* Pods-NewExpensify-NewExpensifyTests.release development.xcconfig */, - 6B5211DB0EEB46E12DF4AD2D /* Pods-NewExpensify-NewExpensifyTests.release adhoc.xcconfig */, - 6BE16DA6EFF88513DB1CD47B /* Pods-NewExpensify-NewExpensifyTests.release staging.xcconfig */, 96552D489D9F09B6A5ABD81B /* Pods-NewExpensify-NewExpensifyTests.release production.xcconfig */, - 0B627F2A465153FFA6E3A4E0 /* Pods-NewExpensify.debugdevelopment.xcconfig */, - 6F6A514B4DF07A60EC8355BA /* Pods-NewExpensify.debugadhoc.xcconfig */, CE2F84BEE9A6DCC228AF7E42 /* Pods-NewExpensify.debugproduction.xcconfig */, 30FFBD291B71222A393D9CC9 /* Pods-NewExpensify.releasedevelopment.xcconfig */, BD8828A882E2D6B51362AAC3 /* Pods-NewExpensify.releaseadhoc.xcconfig */, - 47D5DF3C6779D41BE70CD031 /* Pods-NewExpensify.releaseproduction.xcconfig */, 8709DF3C8D91F0FC1581CDD7 /* Pods-NewExpensify-NewExpensifyTests.debugdevelopment.xcconfig */, 25A4587E168FD67CF890B448 /* Pods-NewExpensify-NewExpensifyTests.debugadhoc.xcconfig */, - F15A36A3262EEC3B0CAB8EDF /* Pods-NewExpensify-NewExpensifyTests.debugproduction.xcconfig */, - 4E8BF7B08BA3181991BFCF4B /* Pods-NewExpensify-NewExpensifyTests.releasedevelopment.xcconfig */, E2C8555C607612465A7473F8 /* Pods-NewExpensify-NewExpensifyTests.releaseadhoc.xcconfig */, - 57DBBEDB9692E096D4BA0141 /* Pods-NewExpensify-NewExpensifyTests.releaseproduction.xcconfig */, FBEBA6FBED49FB41D6F93896 /* Pods-NotificationServiceExtension.debugdevelopment.xcconfig */, D3F458C994019E6A571461B7 /* Pods-NotificationServiceExtension.debugadhoc.xcconfig */, C3FF914C045A138C061D306E /* Pods-NotificationServiceExtension.debugproduction.xcconfig */, @@ -762,6 +748,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; F6E16E41F88F567A8CDD037C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -792,28 +800,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NewExpensify/Pods-NewExpensify-resources.sh\"\n"; showEnvVarsInLog = 0; }; - F3D35ED760B830954BD8A7BB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1083,12 +1069,17 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1165,12 +1156,17 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1248,12 +1244,17 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1325,11 +1326,16 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1400,11 +1406,16 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.adhoc.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1476,11 +1487,16 @@ INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceExtension; INFOPLIST_KEY_NSHumanReadableCopyright = ""; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 74ead59b069f..318d62f0a944 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1346,6 +1346,6 @@ SPEC CHECKSUMS: Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: bfe134fd8d3bb1d9232f59a7601623c7193bca3e +PODFILE CHECKSUM: c403784ee1fdf281bcc552696504207f3022cb66 COCOAPODS: 1.12.1 From 672d6ff35fcad63128cc1a23f7584ac6ce85b34a Mon Sep 17 00:00:00 2001 From: rory Date: Mon, 25 Dec 2023 14:50:07 -0800 Subject: [PATCH 44/45] Fix workflow_tests --- workflow_tests/assertions/testBuildAssertions.js | 6 +++--- workflow_tests/mocks/testBuildMocks.js | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/workflow_tests/assertions/testBuildAssertions.js b/workflow_tests/assertions/testBuildAssertions.js index db2d538cd4b9..3fe963f3aa35 100644 --- a/workflow_tests/assertions/testBuildAssertions.js +++ b/workflow_tests/assertions/testBuildAssertions.js @@ -186,13 +186,13 @@ const assertIOSJobExecuted = (workflowResult, ref = '', didExecute = true, fails ], [], ), - utils.createStepAssertion('Decrypt AppStore profile', true, null, 'IOS', 'Decrypt AppStore profile', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), + utils.createStepAssertion('Decrypt AdHoc profile', true, null, 'IOS', 'Decrypt AdHoc profile', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}]), utils.createStepAssertion( - 'Decrypt AppStore Notification Service profile', + 'Decrypt AdHoc Notification Service profile', true, null, 'IOS', - 'Decrypt AppStore Notification Service profile', + 'Decrypt AdHoc Notification Service profile', [], [{key: 'LARGE_SECRET_PASSPHRASE', value: '***'}], ), diff --git a/workflow_tests/mocks/testBuildMocks.js b/workflow_tests/mocks/testBuildMocks.js index adfae9567f3e..37bcc5fb6fac 100644 --- a/workflow_tests/mocks/testBuildMocks.js +++ b/workflow_tests/mocks/testBuildMocks.js @@ -116,10 +116,10 @@ const TESTBUILD__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK = utils.createMock IS_PODFILE_SAME_AS_MANIFEST: false, }); const TESTBUILD__IOS__INSTALL_COCOAPODS__STEP_MOCK = utils.createMockStep('Install cocoapods', 'Install cocoapods', 'IOS', ['timeout_minutes', 'max_attempts', 'command'], []); -const TESTBUILD__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt AppStore profile', 'Decrypt AppStore profile', 'IOS', [], ['LARGE_SECRET_PASSPHRASE']); -const TESTBUILD__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK = utils.createMockStep( - 'Decrypt AppStore Notification Service profile', - 'Decrypt AppStore Notification Service profile', +const TESTBUILD__IOS__DECRYPT_ADHOC_PROFILE__STEP_MOCK = utils.createMockStep('Decrypt AdHoc profile', 'Decrypt AdHoc profile', 'IOS', [], ['LARGE_SECRET_PASSPHRASE']); +const TESTBUILD__IOS__DECRYPT_ADHOC_NSE_PROFILE__STEP_MOCK = utils.createMockStep( + 'Decrypt AdHoc Notification Service profile', + 'Decrypt AdHoc Notification Service profile', 'IOS', [], ['LARGE_SECRET_PASSPHRASE'], @@ -144,8 +144,8 @@ const TESTBUILD__IOS__STEP_MOCKS = [ TESTBUILD__IOS__CACHE_POD_DEPENDENCIES__STEP_MOCK, TESTBUILD__IOS__COMPARE_PODFILE_AND_MANIFEST__STEP_MOCK, TESTBUILD__IOS__INSTALL_COCOAPODS__STEP_MOCK, - TESTBUILD__IOS__DECRYPT_APPSTORE_PROFILE__STEP_MOCK, - TESTBUILD__IOS__DECRYPT_APPSTORE_NSE_PROFILE__STEP_MOCK, + TESTBUILD__IOS__DECRYPT_ADHOC_PROFILE__STEP_MOCK, + TESTBUILD__IOS__DECRYPT_ADHOC_NSE_PROFILE__STEP_MOCK, TESTBUILD__IOS__DECRYPT_CERTIFICATE__STEP_MOCK, TESTBUILD__IOS__CONFIGURE_AWS_CREDENTIALS__STEP_MOCK, TESTBUILD__IOS__RUN_FASTLANE__STEP_MOCK, From a39f71146b76aecf6e311763567e1af77ed048d0 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Tue, 26 Dec 2023 13:02:35 -0500 Subject: [PATCH 45/45] fix dev bundle IDs for NSE --- ios/NewExpensify.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/NewExpensify.xcodeproj/project.pbxproj b/ios/NewExpensify.xcodeproj/project.pbxproj index bf3e63138979..c239f4da183f 100644 --- a/ios/NewExpensify.xcodeproj/project.pbxproj +++ b/ios/NewExpensify.xcodeproj/project.pbxproj @@ -1080,7 +1080,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development: Notification Service"; @@ -1336,7 +1336,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; - PRODUCT_BUNDLE_IDENTIFIER = com.chat.expensify.chat.NotificationServiceExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.expensify.chat.dev.NotificationServiceExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "(NewApp) Development: Notification Service";