diff --git a/Example/ios/Example.xcodeproj/project.pbxproj b/Example/ios/Example.xcodeproj/project.pbxproj index bf39702a..bd6cceff 100644 --- a/Example/ios/Example.xcodeproj/project.pbxproj +++ b/Example/ios/Example.xcodeproj/project.pbxproj @@ -7,26 +7,124 @@ objects = { /* Begin PBXBuildFile section */ + 12C81FF128A273D97535D021 /* libPods-NotificationServiceSwift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D06E088C940DCB0A8669EA1D /* libPods-NotificationServiceSwift.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 23DB970685C3177FE07EE4F9 /* libPods-NotificationContentSwift.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 08A6620D037F4FBF1E89EC08 /* libPods-NotificationContentSwift.a */; }; + 48BF78C22AA5B5110091FF16 /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 48BF78C12AA5B5110091FF16 /* NotificationService.m */; }; + 48BF78C62AA5B5110091FF16 /* NotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 48BF78BE2AA5B5110091FF16 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 48BF79132AA7037E0091FF16 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BF79122AA7037E0091FF16 /* UserNotifications.framework */; }; + 48BF79152AA7037E0091FF16 /* UserNotificationsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BF79142AA7037E0091FF16 /* UserNotificationsUI.framework */; }; + 48BF79192AA7037E0091FF16 /* NotificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 48BF79182AA7037E0091FF16 /* NotificationViewController.m */; }; + 48BF791C2AA7037E0091FF16 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 48BF791A2AA7037E0091FF16 /* MainInterface.storyboard */; }; + 48BF79202AA7037E0091FF16 /* NotificationContent.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 48BF79112AA7037E0091FF16 /* NotificationContent.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 48BF796D2AB076DA0091FF16 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48BF796C2AB076DA0091FF16 /* NotificationService.swift */; }; + 48BF79712AB076DA0091FF16 /* NotificationServiceSwift.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 48BF796A2AB076DA0091FF16 /* NotificationServiceSwift.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 48BF797A2AB076F10091FF16 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BF79122AA7037E0091FF16 /* UserNotifications.framework */; }; + 48BF797B2AB076F20091FF16 /* UserNotificationsUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BF79142AA7037E0091FF16 /* UserNotificationsUI.framework */; }; + 48BF797E2AB076F20091FF16 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48BF797D2AB076F20091FF16 /* NotificationViewController.swift */; }; + 48BF79812AB076F20091FF16 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 48BF797F2AB076F20091FF16 /* MainInterface.storyboard */; }; + 48BF79852AB076F20091FF16 /* NotificationContentSwift.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 48BF79792AB076F10091FF16 /* NotificationContentSwift.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7B7C570A4995F82344A7A8B5 /* libPods-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ACBB8C00715DBA0D18D594A /* libPods-NotificationService.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; B4B941977C6BD80AED255050 /* libPods-Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A2FF03263A55A38E9204B29 /* libPods-Example.a */; }; + C44638C82DA59DA9D4F41627 /* libPods-NotificationContent.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A946B77F4A55E2F0A9626B3E /* libPods-NotificationContent.a */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 48BF79832AB076F20091FF16 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 48BF79782AB076F10091FF16; + remoteInfo = NotificationContentSwift; + }; + 48BF79912AB19A1A0091FF16 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 48BF79102AA7037E0091FF16; + remoteInfo = NotificationContent; + }; + 48BF79932AB19B180091FF16 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 48BF78BD2AA5B5110091FF16; + remoteInfo = NotificationService; + }; + 48BF79952AB1A5310091FF16 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 48BF79692AB076DA0091FF16; + remoteInfo = NotificationServiceSwift; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 48BF78CA2AA5B5110091FF16 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 48BF79712AB076DA0091FF16 /* NotificationServiceSwift.appex in Embed Foundation Extensions */, + 48BF79852AB076F20091FF16 /* NotificationContentSwift.appex in Embed Foundation Extensions */, + 48BF78C62AA5B5110091FF16 /* NotificationService.appex in Embed Foundation Extensions */, + 48BF79202AA7037E0091FF16 /* NotificationContent.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 06605FFB6727A280AE347D70 /* Pods-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.release.xcconfig"; sourceTree = ""; }; + 08A6620D037F4FBF1E89EC08 /* libPods-NotificationContentSwift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationContentSwift.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0CB9462107A4BC9C5BC6D705 /* Pods-NotificationContent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationContent.debug.xcconfig"; path = "Target Support Files/Pods-NotificationContent/Pods-NotificationContent.debug.xcconfig"; sourceTree = ""; }; + 0CFD3B3011A1D9A3D3BCD542 /* Pods-NotificationServiceSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceSwift.release.xcconfig"; path = "Target Support Files/Pods-NotificationServiceSwift/Pods-NotificationServiceSwift.release.xcconfig"; sourceTree = ""; }; + 0F710ABFAB2DD0240E802609 /* Pods-Example-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-Example-NotificationService/Pods-Example-NotificationService.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Example/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Example/AppDelegate.m; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Example/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Example/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Example/main.m; sourceTree = ""; }; + 2ACBB8C00715DBA0D18D594A /* libPods-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 48BF78BE2AA5B5110091FF16 /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 48BF78C02AA5B5110091FF16 /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = ""; }; + 48BF78C12AA5B5110091FF16 /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = ""; }; + 48BF78C32AA5B5110091FF16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 48BF79112AA7037E0091FF16 /* NotificationContent.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationContent.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 48BF79122AA7037E0091FF16 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; + 48BF79142AA7037E0091FF16 /* UserNotificationsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotificationsUI.framework; path = System/Library/Frameworks/UserNotificationsUI.framework; sourceTree = SDKROOT; }; + 48BF79172AA7037E0091FF16 /* NotificationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationViewController.h; sourceTree = ""; }; + 48BF79182AA7037E0091FF16 /* NotificationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationViewController.m; sourceTree = ""; }; + 48BF791B2AA7037E0091FF16 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 48BF791D2AA7037E0091FF16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 48BF796A2AB076DA0091FF16 /* NotificationServiceSwift.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceSwift.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 48BF796C2AB076DA0091FF16 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 48BF796E2AB076DA0091FF16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 48BF79792AB076F10091FF16 /* NotificationContentSwift.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationContentSwift.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 48BF797D2AB076F20091FF16 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = ""; }; + 48BF79802AB076F20091FF16 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 48BF79822AB076F20091FF16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 494B16C126B01FD7008F32F7 /* Example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Example.entitlements; path = Example/Example.entitlements; sourceTree = ""; }; + 4EAE8C2E7DE9CD3E21AFE9BA /* Pods-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.debug.xcconfig"; sourceTree = ""; }; 6A2FF03263A55A38E9204B29 /* libPods-Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7155EAA153AA7B390A68C1F6 /* Pods-Example-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-Example-NotificationService/Pods-Example-NotificationService.release.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Example/LaunchScreen.storyboard; sourceTree = ""; }; + 8B9C3B152A6A98EC91F67C08 /* Pods-NotificationContentSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationContentSwift.debug.xcconfig"; path = "Target Support Files/Pods-NotificationContentSwift/Pods-NotificationContentSwift.debug.xcconfig"; sourceTree = ""; }; + A004DF5AF2F375C22FF80C3B /* Pods-NotificationContent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationContent.release.xcconfig"; path = "Target Support Files/Pods-NotificationContent/Pods-NotificationContent.release.xcconfig"; sourceTree = ""; }; + A946B77F4A55E2F0A9626B3E /* libPods-NotificationContent.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationContent.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D013BEB1731AF31201C704C9 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; }; + D06E088C940DCB0A8669EA1D /* libPods-NotificationServiceSwift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NotificationServiceSwift.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + EA0D3B1737830C6A0F746039 /* Pods-NotificationContentSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationContentSwift.release.xcconfig"; path = "Target Support Files/Pods-NotificationContentSwift/Pods-NotificationContentSwift.release.xcconfig"; sourceTree = ""; }; EA111CE95E8961048E4F17B9 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + EFEA9AA97C52B9E4B9419A21 /* Pods-NotificationServiceSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationServiceSwift.debug.xcconfig"; path = "Target Support Files/Pods-NotificationServiceSwift/Pods-NotificationServiceSwift.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -38,6 +136,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 48BF78BB2AA5B5110091FF16 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7B7C570A4995F82344A7A8B5 /* libPods-NotificationService.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF790E2AA7037E0091FF16 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF79152AA7037E0091FF16 /* UserNotificationsUI.framework in Frameworks */, + 48BF79132AA7037E0091FF16 /* UserNotifications.framework in Frameworks */, + C44638C82DA59DA9D4F41627 /* libPods-NotificationContent.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79672AB076DA0091FF16 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 12C81FF128A273D97535D021 /* libPods-NotificationServiceSwift.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79762AB076F10091FF16 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF797B2AB076F20091FF16 /* UserNotificationsUI.framework in Frameworks */, + 48BF797A2AB076F10091FF16 /* UserNotifications.framework in Frameworks */, + 23DB970685C3177FE07EE4F9 /* libPods-NotificationContentSwift.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -60,15 +194,71 @@ children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 6A2FF03263A55A38E9204B29 /* libPods-Example.a */, + 2ACBB8C00715DBA0D18D594A /* libPods-NotificationService.a */, + 48BF79122AA7037E0091FF16 /* UserNotifications.framework */, + 48BF79142AA7037E0091FF16 /* UserNotificationsUI.framework */, + A946B77F4A55E2F0A9626B3E /* libPods-NotificationContent.a */, + 08A6620D037F4FBF1E89EC08 /* libPods-NotificationContentSwift.a */, + D06E088C940DCB0A8669EA1D /* libPods-NotificationServiceSwift.a */, ); name = Frameworks; sourceTree = ""; }; + 48BF78BF2AA5B5110091FF16 /* NotificationService */ = { + isa = PBXGroup; + children = ( + 48BF78C02AA5B5110091FF16 /* NotificationService.h */, + 48BF78C12AA5B5110091FF16 /* NotificationService.m */, + 48BF78C32AA5B5110091FF16 /* Info.plist */, + ); + path = NotificationService; + sourceTree = ""; + }; + 48BF79162AA7037E0091FF16 /* NotificationContent */ = { + isa = PBXGroup; + children = ( + 48BF79172AA7037E0091FF16 /* NotificationViewController.h */, + 48BF79182AA7037E0091FF16 /* NotificationViewController.m */, + 48BF791A2AA7037E0091FF16 /* MainInterface.storyboard */, + 48BF791D2AA7037E0091FF16 /* Info.plist */, + ); + path = NotificationContent; + sourceTree = ""; + }; + 48BF796B2AB076DA0091FF16 /* NotificationServiceSwift */ = { + isa = PBXGroup; + children = ( + 48BF796C2AB076DA0091FF16 /* NotificationService.swift */, + 48BF796E2AB076DA0091FF16 /* Info.plist */, + ); + path = NotificationServiceSwift; + sourceTree = ""; + }; + 48BF797C2AB076F20091FF16 /* NotificationContentSwift */ = { + isa = PBXGroup; + children = ( + 48BF797D2AB076F20091FF16 /* NotificationViewController.swift */, + 48BF797F2AB076F20091FF16 /* MainInterface.storyboard */, + 48BF79822AB076F20091FF16 /* Info.plist */, + ); + path = NotificationContentSwift; + sourceTree = ""; + }; 7168044AA71FBFBA4A3B8E24 /* Pods */ = { isa = PBXGroup; children = ( EA111CE95E8961048E4F17B9 /* Pods-Example.debug.xcconfig */, D013BEB1731AF31201C704C9 /* Pods-Example.release.xcconfig */, + 0F710ABFAB2DD0240E802609 /* Pods-Example-NotificationService.debug.xcconfig */, + 7155EAA153AA7B390A68C1F6 /* Pods-Example-NotificationService.release.xcconfig */, + 4EAE8C2E7DE9CD3E21AFE9BA /* Pods-NotificationService.debug.xcconfig */, + 06605FFB6727A280AE347D70 /* Pods-NotificationService.release.xcconfig */, + 0CB9462107A4BC9C5BC6D705 /* Pods-NotificationContent.debug.xcconfig */, + A004DF5AF2F375C22FF80C3B /* Pods-NotificationContent.release.xcconfig */, + 8B9C3B152A6A98EC91F67C08 /* Pods-NotificationContentSwift.debug.xcconfig */, + EA0D3B1737830C6A0F746039 /* Pods-NotificationContentSwift.release.xcconfig */, + EFEA9AA97C52B9E4B9419A21 /* Pods-NotificationServiceSwift.debug.xcconfig */, + 0CFD3B3011A1D9A3D3BCD542 /* Pods-NotificationServiceSwift.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -85,6 +275,10 @@ children = ( 13B07FAE1A68108700A75B9A /* Example */, 832341AE1AAA6A7D00B99B32 /* Libraries */, + 48BF78BF2AA5B5110091FF16 /* NotificationService */, + 48BF79162AA7037E0091FF16 /* NotificationContent */, + 48BF796B2AB076DA0091FF16 /* NotificationServiceSwift */, + 48BF797C2AB076F20091FF16 /* NotificationContentSwift */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, 7168044AA71FBFBA4A3B8E24 /* Pods */, @@ -98,6 +292,10 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* Example.app */, + 48BF78BE2AA5B5110091FF16 /* NotificationService.appex */, + 48BF79112AA7037E0091FF16 /* NotificationContent.appex */, + 48BF796A2AB076DA0091FF16 /* NotificationServiceSwift.appex */, + 48BF79792AB076F10091FF16 /* NotificationContentSwift.appex */, ); name = Products; sourceTree = ""; @@ -116,27 +314,121 @@ 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 51DDA552D9AF9418BF524734 /* [CP] Copy Pods Resources */, + 48BF78CA2AA5B5110091FF16 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 48BF79962AB1A5310091FF16 /* PBXTargetDependency */, + 48BF79942AB19B180091FF16 /* PBXTargetDependency */, + 48BF79922AB19A1A0091FF16 /* PBXTargetDependency */, + 48BF79842AB076F20091FF16 /* PBXTargetDependency */, ); name = Example; productName = Example; productReference = 13B07F961A680F5B00A75B9A /* Example.app */; productType = "com.apple.product-type.application"; }; + 48BF78BD2AA5B5110091FF16 /* NotificationService */ = { + isa = PBXNativeTarget; + buildConfigurationList = 48BF78C72AA5B5110091FF16 /* Build configuration list for PBXNativeTarget "NotificationService" */; + buildPhases = ( + B726488AC25E439BB620B5A8 /* [CP] Check Pods Manifest.lock */, + 48BF78BA2AA5B5110091FF16 /* Sources */, + 48BF78BB2AA5B5110091FF16 /* Frameworks */, + 48BF78BC2AA5B5110091FF16 /* Resources */, + 2C06B0EA8163FF5042638ED0 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NotificationService; + productName = NotificationService; + productReference = 48BF78BE2AA5B5110091FF16 /* NotificationService.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 48BF79102AA7037E0091FF16 /* NotificationContent */ = { + isa = PBXNativeTarget; + buildConfigurationList = 48BF79232AA7037F0091FF16 /* Build configuration list for PBXNativeTarget "NotificationContent" */; + buildPhases = ( + F87394BCB1BC4CF5053ECB9F /* [CP] Check Pods Manifest.lock */, + 48BF790D2AA7037E0091FF16 /* Sources */, + 48BF790E2AA7037E0091FF16 /* Frameworks */, + 48BF790F2AA7037E0091FF16 /* Resources */, + 5A0504868B9AB8A799FA6FA3 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NotificationContent; + productName = NotificationContent; + productReference = 48BF79112AA7037E0091FF16 /* NotificationContent.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 48BF79692AB076DA0091FF16 /* NotificationServiceSwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 48BF79742AB076DB0091FF16 /* Build configuration list for PBXNativeTarget "NotificationServiceSwift" */; + buildPhases = ( + D2FC6519E8683CD6D04A55B7 /* [CP] Check Pods Manifest.lock */, + 48BF79662AB076DA0091FF16 /* Sources */, + 48BF79672AB076DA0091FF16 /* Frameworks */, + 48BF79682AB076DA0091FF16 /* Resources */, + CB68244854277069D68DE4C3 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NotificationServiceSwift; + productName = NotificationServiceSwift; + productReference = 48BF796A2AB076DA0091FF16 /* NotificationServiceSwift.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 48BF79782AB076F10091FF16 /* NotificationContentSwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 48BF79862AB076F20091FF16 /* Build configuration list for PBXNativeTarget "NotificationContentSwift" */; + buildPhases = ( + 0EFB3D8FAA2BBF06F665EFA1 /* [CP] Check Pods Manifest.lock */, + 48BF79752AB076F10091FF16 /* Sources */, + 48BF79762AB076F10091FF16 /* Frameworks */, + 48BF79772AB076F10091FF16 /* Resources */, + 758A60FDEAF15EAEC61F186D /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = NotificationContentSwift; + productName = NotificationContentSwift; + productReference = 48BF79792AB076F10091FF16 /* NotificationContentSwift.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1430; LastUpgradeCheck = 1250; TargetAttributes = { 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1120; }; + 48BF78BD2AA5B5110091FF16 = { + CreatedOnToolsVersion = 14.3; + }; + 48BF79102AA7037E0091FF16 = { + CreatedOnToolsVersion = 14.3; + }; + 48BF79692AB076DA0091FF16 = { + CreatedOnToolsVersion = 14.3; + }; + 48BF79782AB076F10091FF16 = { + CreatedOnToolsVersion = 14.3; + }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Example" */; @@ -153,6 +445,10 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* Example */, + 48BF78BD2AA5B5110091FF16 /* NotificationService */, + 48BF79102AA7037E0091FF16 /* NotificationContent */, + 48BF79692AB076DA0091FF16 /* NotificationServiceSwift */, + 48BF79782AB076F10091FF16 /* NotificationContentSwift */, ); }; /* End PBXProject section */ @@ -167,6 +463,36 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 48BF78BC2AA5B5110091FF16 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF790F2AA7037E0091FF16 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF791C2AA7037E0091FF16 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79682AB076DA0091FF16 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79772AB076F10091FF16 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF79812AB076F20091FF16 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -182,7 +508,46 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "if [[ -s \"$HOME/.nvm/nvm.sh\" ]]; then\n. \"$HOME/.nvm/nvm.sh\"\nelif [[ -x \"$(command -v brew)\" && -s \"$(brew --prefix nvm)/nvm.sh\" ]]; then\n. \"$(brew --prefix nvm)/nvm.sh\"\nfi\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + 0EFB3D8FAA2BBF06F665EFA1 /* [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-NotificationContentSwift-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; + }; + 2C06B0EA8163FF5042638ED0 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationService/Pods-NotificationService-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationService/Pods-NotificationService-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NotificationService/Pods-NotificationService-resources.sh\"\n"; + showEnvVarsInLog = 0; }; 51DDA552D9AF9418BF524734 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; @@ -201,6 +566,62 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 5A0504868B9AB8A799FA6FA3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationContent/Pods-NotificationContent-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationContent/Pods-NotificationContent-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NotificationContent/Pods-NotificationContent-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 758A60FDEAF15EAEC61F186D /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationContentSwift/Pods-NotificationContentSwift-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationContentSwift/Pods-NotificationContentSwift-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NotificationContentSwift/Pods-NotificationContentSwift-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + B726488AC25E439BB620B5A8 /* [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-NotificationService-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; + }; C4A0B286ED7686DA5C0A2755 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -223,6 +644,67 @@ 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; }; + CB68244854277069D68DE4C3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationServiceSwift/Pods-NotificationServiceSwift-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NotificationServiceSwift/Pods-NotificationServiceSwift-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NotificationServiceSwift/Pods-NotificationServiceSwift-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + D2FC6519E8683CD6D04A55B7 /* [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-NotificationServiceSwift-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; + }; + F87394BCB1BC4CF5053ECB9F /* [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-NotificationContent-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; @@ -254,13 +736,88 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 48BF78BA2AA5B5110091FF16 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF78C22AA5B5110091FF16 /* NotificationService.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF790D2AA7037E0091FF16 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF79192AA7037E0091FF16 /* NotificationViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79662AB076DA0091FF16 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF796D2AB076DA0091FF16 /* NotificationService.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48BF79752AB076F10091FF16 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 48BF797E2AB076F20091FF16 /* NotificationViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 48BF79842AB076F20091FF16 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 48BF79782AB076F10091FF16 /* NotificationContentSwift */; + targetProxy = 48BF79832AB076F20091FF16 /* PBXContainerItemProxy */; + }; + 48BF79922AB19A1A0091FF16 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 48BF79102AA7037E0091FF16 /* NotificationContent */; + targetProxy = 48BF79912AB19A1A0091FF16 /* PBXContainerItemProxy */; + }; + 48BF79942AB19B180091FF16 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 48BF78BD2AA5B5110091FF16 /* NotificationService */; + targetProxy = 48BF79932AB19B180091FF16 /* PBXContainerItemProxy */; + }; + 48BF79962AB1A5310091FF16 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 48BF79692AB076DA0091FF16 /* NotificationServiceSwift */; + targetProxy = 48BF79952AB1A5310091FF16 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 48BF791A2AA7037E0091FF16 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 48BF791B2AA7037E0091FF16 /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; + 48BF797F2AB076F20091FF16 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 48BF79802AB076F20091FF16 /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = EA111CE95E8961048E4F17B9 /* Pods-Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Example/Example.entitlements; @@ -294,6 +851,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = D013BEB1731AF31201C704C9 /* Pods-Example.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Example/Example.entitlements; @@ -321,6 +879,338 @@ }; name = Release; }; + 48BF78C82AA5B5110091FF16 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4EAE8C2E7DE9CD3E21AFE9BA /* Pods-NotificationService.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationService/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationService; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationService; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 48BF78C92AA5B5110091FF16 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 06605FFB6727A280AE347D70 /* Pods-NotificationService.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationService/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationService; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationService; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 48BF79212AA7037F0091FF16 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0CB9462107A4BC9C5BC6D705 /* Pods-NotificationContent.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationContent/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationContent; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationContent; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 48BF79222AA7037F0091FF16 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A004DF5AF2F375C22FF80C3B /* Pods-NotificationContent.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationContent/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationContent; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationContent; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 48BF79722AB076DB0091FF16 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EFEA9AA97C52B9E4B9419A21 /* Pods-NotificationServiceSwift.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationServiceSwift/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceSwift; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationServiceSwift; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 48BF79732AB076DB0091FF16 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0CFD3B3011A1D9A3D3BCD542 /* Pods-NotificationServiceSwift.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationServiceSwift/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationServiceSwift; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationServiceSwift; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 48BF79872AB076F20091FF16 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8B9C3B152A6A98EC91F67C08 /* Pods-NotificationContentSwift.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationContentSwift/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationContentSwift; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationContentSwift; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 48BF79882AB076F20091FF16 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EA0D3B1737830C6A0F746039 /* Pods-NotificationContentSwift.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = A5J34NR598; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = NotificationContentSwift/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = NotificationContentSwift; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.demo.NotificationContentSwift; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -458,6 +1348,42 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 48BF78C72AA5B5110091FF16 /* Build configuration list for PBXNativeTarget "NotificationService" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48BF78C82AA5B5110091FF16 /* Debug */, + 48BF78C92AA5B5110091FF16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 48BF79232AA7037F0091FF16 /* Build configuration list for PBXNativeTarget "NotificationContent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48BF79212AA7037F0091FF16 /* Debug */, + 48BF79222AA7037F0091FF16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 48BF79742AB076DB0091FF16 /* Build configuration list for PBXNativeTarget "NotificationServiceSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48BF79722AB076DB0091FF16 /* Debug */, + 48BF79732AB076DB0091FF16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 48BF79862AB076F20091FF16 /* Build configuration list for PBXNativeTarget "NotificationContentSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48BF79872AB076F20091FF16 /* Debug */, + 48BF79882AB076F20091FF16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Example" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Example/ios/Example/AppDelegate.m b/Example/ios/Example/AppDelegate.m index 7b19a5ab..b402ed7d 100644 --- a/Example/ios/Example/AppDelegate.m +++ b/Example/ios/Example/AppDelegate.m @@ -1,4 +1,5 @@ #import "AppDelegate.h" +#import #import #import @@ -35,11 +36,21 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [CleverTap setDebugLevel:CleverTapLogDebug]; #endif [CleverTap autoIntegrate]; + [self addNotificationCategories]; [[CleverTapReactManager sharedInstance] applicationDidLaunchWithOptions:launchOptions]; return YES; } +- (void)addNotificationCategories { + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"action_1" title:@"Back" options:UNNotificationActionOptionNone]; + UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"action_2" title:@"Next" options:UNNotificationActionOptionNone]; + UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:@"action_3" title:@"View In App" options:UNNotificationActionOptionNone]; + UNNotificationCategory *cat = [UNNotificationCategory categoryWithIdentifier:@"CTNotification" actions:@[action1, action2, action3] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone]; + [center setNotificationCategories:[NSSet setWithObjects:cat, nil]]; +} + // Deep links - (BOOL)application:(UIApplication *)app diff --git a/Example/ios/NotificationContent/Base.lproj/MainInterface.storyboard b/Example/ios/NotificationContent/Base.lproj/MainInterface.storyboard new file mode 100644 index 00000000..a525cd84 --- /dev/null +++ b/Example/ios/NotificationContent/Base.lproj/MainInterface.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ios/NotificationContent/Info.plist b/Example/ios/NotificationContent/Info.plist new file mode 100644 index 00000000..bf6559f6 --- /dev/null +++ b/Example/ios/NotificationContent/Info.plist @@ -0,0 +1,24 @@ + + + + + NSExtension + + NSExtensionAttributes + + UNNotificationExtensionCategory + CTNotification + UNNotificationExtensionInitialContentSizeRatio + 0.1 + UNNotificationExtensionUserInteractionEnabled + 1 + UNNotificationExtensionDefaultContentHidden + + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.usernotifications.content-extension + + + diff --git a/Example/ios/NotificationContent/NotificationViewController.h b/Example/ios/NotificationContent/NotificationViewController.h new file mode 100644 index 00000000..053d82c0 --- /dev/null +++ b/Example/ios/NotificationContent/NotificationViewController.h @@ -0,0 +1,5 @@ +#import + +@interface NotificationViewController : CTNotificationViewController + +@end diff --git a/Example/ios/NotificationContent/NotificationViewController.m b/Example/ios/NotificationContent/NotificationViewController.m new file mode 100644 index 00000000..89c8031f --- /dev/null +++ b/Example/ios/NotificationContent/NotificationViewController.m @@ -0,0 +1,25 @@ +#import "NotificationViewController.h" + +/* + Note: We have added two Notification Content target for Objective-C and Swift only for sample codes. + You can also use multiple Notification Content target at a time, only you need to add different +`UNNotificationExtensionCategory` for each content target as added here in both Info.plist file, + to show different category buttons added in AppDelegate file. + */ +@implementation NotificationViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +// optional: implement to get user event type data +- (void)userDidPerformAction:(NSString *)action withProperties:(NSDictionary *)properties { + NSLog(@"user did perform action: %@ with props: %@", action , properties); +} + +// optional: implement to get notification response +- (void)userDidReceiveNotificationResponse:(UNNotificationResponse *)response { + NSLog(@"user did receive notification response: %@:", response); +} + +@end diff --git a/Example/ios/NotificationContentSwift/Base.lproj/MainInterface.storyboard b/Example/ios/NotificationContentSwift/Base.lproj/MainInterface.storyboard new file mode 100644 index 00000000..5ac1849b --- /dev/null +++ b/Example/ios/NotificationContentSwift/Base.lproj/MainInterface.storyboard @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/ios/NotificationContentSwift/Info.plist b/Example/ios/NotificationContentSwift/Info.plist new file mode 100644 index 00000000..c5579760 --- /dev/null +++ b/Example/ios/NotificationContentSwift/Info.plist @@ -0,0 +1,24 @@ + + + + + NSExtension + + NSExtensionAttributes + + UNNotificationExtensionCategory + CTNotification1 + UNNotificationExtensionInitialContentSizeRatio + 0.1 + UNNotificationExtensionUserInteractionEnabled + 1 + UNNotificationExtensionDefaultContentHidden + + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.usernotifications.content-extension + + + diff --git a/Example/ios/NotificationContentSwift/NotificationViewController.swift b/Example/ios/NotificationContentSwift/NotificationViewController.swift new file mode 100644 index 00000000..94f9c04a --- /dev/null +++ b/Example/ios/NotificationContentSwift/NotificationViewController.swift @@ -0,0 +1,13 @@ +import CTNotificationContent + +/* + Note: We have added two Notification Content target for Objective-C and Swift only for sample codes. + You can also use multiple Notification Content target at a time, only you need to add different +`UNNotificationExtensionCategory` for each content target as added here in both Info.plist file, + to show different category buttons added in AppDelegate file. + */ +class NotificationViewController: CTNotificationViewController { + override func viewDidLoad() { + super.viewDidLoad() + } +} diff --git a/Example/ios/NotificationService/Info.plist b/Example/ios/NotificationService/Info.plist new file mode 100644 index 00000000..5a585e29 --- /dev/null +++ b/Example/ios/NotificationService/Info.plist @@ -0,0 +1,17 @@ + + + + + CleverTapAccountID + RKW-R77-KW6Z + CleverTapToken + aa2-032 + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + NotificationService + + + diff --git a/Example/ios/NotificationService/NotificationService.h b/Example/ios/NotificationService/NotificationService.h new file mode 100644 index 00000000..d1aca729 --- /dev/null +++ b/Example/ios/NotificationService/NotificationService.h @@ -0,0 +1,5 @@ +#import + +@interface NotificationService : CTNotificationServiceExtension + +@end diff --git a/Example/ios/NotificationService/NotificationService.m b/Example/ios/NotificationService/NotificationService.m new file mode 100644 index 00000000..31f2c15b --- /dev/null +++ b/Example/ios/NotificationService/NotificationService.m @@ -0,0 +1,25 @@ +#import "NotificationService.h" +#import + +/* + Note: We have added two Notification Service target for Objective-C and Swift only for sample codes. + You can activate/deactivate other target to use any one at a time. + Steps to add/remove target: Click on Example target -> Build Phases -> Target Dependencies -> Click on add/remove items. + */ +@implementation NotificationService + +- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { + // Add CleverTap Account ID and Account token in your target .plist file + [CleverTap setDebugLevel:2]; + NSDictionary *profile = @{ + @"Name": @"testUserA1", + @"Identity": @123456, + @"Email": @"test@test.com" + }; + [[CleverTap sharedInstance] profilePush:profile]; + [[CleverTap sharedInstance] recordNotificationViewedEventWithData: request.content.userInfo]; + + [super didReceiveNotificationRequest:request withContentHandler:contentHandler]; +} + +@end diff --git a/Example/ios/NotificationServiceSwift/Info.plist b/Example/ios/NotificationServiceSwift/Info.plist new file mode 100644 index 00000000..a19b0384 --- /dev/null +++ b/Example/ios/NotificationServiceSwift/Info.plist @@ -0,0 +1,17 @@ + + + + + CleverTapAccountID + RKW-R77-KW6Z + CleverTapToken + aa2-032 + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/Example/ios/NotificationServiceSwift/NotificationService.swift b/Example/ios/NotificationServiceSwift/NotificationService.swift new file mode 100644 index 00000000..501cdeda --- /dev/null +++ b/Example/ios/NotificationServiceSwift/NotificationService.swift @@ -0,0 +1,19 @@ +import CTNotificationService +import CleverTapSDK + +/* + Note: We have added two Notification Service target for Objective-C and Swift only for sample codes. + You can activate/deactivate other target to use any one at a time. + Steps to add/remove target: Click on Example target -> Build Phases -> Target Dependencies -> Click on add/remove items. + */ +class NotificationService: CTNotificationServiceExtension { + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + let profile: Dictionary = [ + "Name": "testUserA1" as AnyObject, + "Identity": 123456 as AnyObject, + "Email": "test@test.com" as AnyObject ] + CleverTap.sharedInstance()?.profilePush(profile) + CleverTap.sharedInstance()?.recordNotificationViewedEvent(withData: request.content.userInfo) + super.didReceive(request, withContentHandler: contentHandler) + } +} diff --git a/Example/ios/Podfile b/Example/ios/Podfile index b6610013..af9b28b8 100644 --- a/Example/ios/Podfile +++ b/Example/ios/Podfile @@ -25,3 +25,22 @@ target 'Example' do end end end + +target 'NotificationService' do + pod "CleverTap-iOS-SDK", :modular_headers => true + pod "CTNotificationService", :modular_headers => true +end + +target 'NotificationContent' do + pod "CTNotificationContent" +end + +# Added these target for sample code only in Swift +target 'NotificationServiceSwift' do + pod "CleverTap-iOS-SDK", :modular_headers => true + pod "CTNotificationService", :modular_headers => true +end + +target 'NotificationContentSwift' do + pod "CTNotificationContent" +end \ No newline at end of file diff --git a/Example/package.json b/Example/package.json index 0d894a80..6c1a0101 100644 --- a/Example/package.json +++ b/Example/package.json @@ -13,7 +13,7 @@ "@react-navigation/drawer": "^6.6.2", "@react-navigation/native": "^6.1.6", "@react-navigation/native-stack": "^6.9.12", - "clevertap-react-native": "git+https://github.com/CleverTap/clevertap-react-native#task/SDK-3168/update_android_sdk_to_5.2.0", + "clevertap-react-native": "git+https://github.com/CleverTap/clevertap-react-native#develop", "react": "18.2.0", "react-native": "0.71.8", "react-native-drawer": "^2.5.1", diff --git a/docs/iospushtemplates.md b/docs/iospushtemplates.md index 729e2581..f1866902 100644 --- a/docs/iospushtemplates.md +++ b/docs/iospushtemplates.md @@ -4,34 +4,151 @@ CleverTap Push Templates SDK helps you engage with your users using fancy push n # Table of contents -- [Installation](#installation) +- [Notification Service](#notification-service) +- [Notification Content](#notification-content) - [Dashboard Usage](#dashboard-usage) - [Template Types](#template-types) - [Template Keys](#template-keys) -# Installation +# Notification Service [(Back to top)](#table-of-contents) -- Add Notification Content Extension (Push Templates) in a React Native iOS Project +## Installation +- Go to File -> New -> Target -> Notification Service Extension and select Objective-C language + +![NotificationServiceTarget](https://github.com/CleverTap/clevertap-react-native/blob/master/static/NotificationServiceTarget.png) +- Update Podfile as below and do `pod install`, refer [example](https://github.com/CleverTap/clevertap-react-native/blob/master/Example/ios/Podfile) for detailed Podfile. +``` +target 'NotificationService' do + pod "CTNotificationService", :modular_headers => true +end +``` +- Update your `NotificationService.h` as: +``` +#import + +@interface NotificationService : CTNotificationServiceExtension +@end +``` +- Update your `NotificationService.m` file as: +``` +#import "NotificationService.h" + +@implementation NotificationService + +- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { + [super didReceiveNotificationRequest:request withContentHandler:contentHandler]; +} + +@end +``` + +## Push Impression +- Add `pod "CleverTap-iOS-SDK" ` in podfile for notification service target as do `pod install`: +``` +target 'NotificationService' do + pod "CleverTap-iOS-SDK", :modular_headers => true + pod "CTNotificationService", :modular_headers => true +end +``` +- Add CleverTap Account Id and Token in target `Info.plist` file as updated [here](https://github.com/CleverTap/clevertap-react-native/tree/master/Example/ios/Example/NotificationService/Info.plist) +- Update your `NotificationService.m` file as: +``` +#import "NotificationService.h" +#import + +@implementation NotificationService + +- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { + // Add CleverTap Account ID and Account token in your target .plist file + [CleverTap setDebugLevel:2]; + NSDictionary *profile = @{ + @"Name": @"testUserA1", + @"Identity": @123456, + @"Email": @"test@test.com" + }; + [[CleverTap sharedInstance] profilePush:profile]; + [[CleverTap sharedInstance] recordNotificationViewedEventWithData: request.content.userInfo]; + + [super didReceiveNotificationRequest:request withContentHandler:contentHandler]; +} + +@end +``` + +- Refer [example](https://github.com/CleverTap/clevertap-react-native/tree/master/Example/ios/Example/NotificationService) for more details if you are using Objective-C language for the target. + +## Add Notification Service target using Swift language +- Go to File -> New -> Target -> Notification Service Extension and select Swift language +- Update Podfile as below and `pod install`: +``` +target 'NotificationService' do + pod "CTNotificationService", :modular_headers => true +end +``` +- Update your `NotificationService.swift` as +``` +import CTNotificationService + +class NotificationService: CTNotificationServiceExtension { + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + super.didReceive(request, withContentHandler: contentHandler) + } +} +``` + +## Push Impression using Swift language target +- Add `pod "CleverTap-iOS-SDK" ` in podfile for notification service target and do `pod install` as +``` +target 'NotificationService' do + pod "CleverTap-iOS-SDK", :modular_headers => true + pod "CTNotificationService", :modular_headers => true +end +``` +- Add CleverTap Account Id and Token in target `Info.plist` file as updated [here](https://github.com/CleverTap/clevertap-react-native/tree/master/Example/ios/Example/NotificationService/Info.plist) +- Update your `NotificationService.swift` file as: +``` +import CTNotificationService +import CleverTapSDK + +class NotificationService: CTNotificationServiceExtension { + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + let profile: Dictionary = [ + "Name": "testUserA1" as AnyObject, + "Identity": 123456 as AnyObject, + "Email": "test@test.com" as AnyObject ] + CleverTap.sharedInstance()?.profilePush(profile) + CleverTap.sharedInstance()?.recordNotificationViewedEvent(withData: request.content.userInfo) + super.didReceive(request, withContentHandler: contentHandler) + } +} +``` + +# Notification Content + +[(Back to top)](#table-of-contents) + +Add Notification Content Extension (Push Templates) in a React Native iOS Project Notification Content Extension is an app extension that provides a custom interface when a user previews your notification in the notification center. To enable the functionality of CleverTap iOS Push templates, we need this extension in the project which act as subclass to our CTNotificationContent framework. -Open Example.xcodeproj (or your app’s .xcodeproj file) in the ios folder of React Native project. Go to File > New > Target… and search with the name “Notification Content Extension“ +## Installation +- Open Example.xcodeproj (or your app’s .xcodeproj file) in the ios folder of React Native project. +- Go to File > New > Target… and search with the name “Notification Content Extension“ ![NotificationContentTarget](https://github.com/CleverTap/clevertap-react-native/blob/task/SDK-2395-RN-pushtemplates-support/static/NotificationContentTarget.png) -Add “Notification Content“ as target name. +- Add “Notification Content“ as target name. ![NotificationContent](https://github.com/CleverTap/clevertap-react-native/blob/task/SDK-2395-RN-pushtemplates-support/static/NotificationContent.png) -Refer to https://github.com/CleverTap/CTNotificationContent#-setup for setting up Notification Content target so that it imports CTNotificationContent framework in the code. Make sure to add the necessary key-values in the Info.plist file of NotificationContent target so that it recognises the identifier of the incoming notification. +- Refer to https://github.com/CleverTap/CTNotificationContent#-setup for setting up Notification Content target so that it imports CTNotificationContent framework in the code. Make sure to add the necessary key-values in the Info.plist file of NotificationContent target so that it recognises the identifier of the incoming notification. Alternatively, go to finder and replace newly created NotificationContent (or your content extension) folder with the NotificationContent folder in CTNotificationContent Example project repository. ![Finder](https://github.com/CleverTap/clevertap-react-native/blob/task/SDK-2395-RN-pushtemplates-support/static/Finder.png) -Add the following to a file named Podfile in the ios directory of your project. +- Add the following to a file named Podfile in the ios directory of your project. ``` -use_frameworks! target 'NotificationContent' do pod 'CTNotificationContent' end @@ -139,6 +256,22 @@ target 'reactnativedemo' do end ``` +- Edit the Maininterface.storyboard in your NotificationContent target to a plain UIView. Steps: + MainInterface.storyboard -> Expand View -> Click Label -> Delete + +![NotificationContentStoryboard](https://github.com/CleverTap/clevertap-react-native/blob/master/static/NotificationContentStoryboard.png) + +- Update NotificationViewController.h, NotificationViewController.m and Info.plist as updated in [example app](https://github.com/CleverTap/clevertap-react-native/tree/master/Example/ios/Example/NotificationContent) +- Set Notification categories from AppDelegate if you want to add category buttons in `didFinishLaunchingWithOptions:` method and add import `#import `: +``` +UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; +UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"action_1" title:@"Back" options:UNNotificationActionOptionNone]; +UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"action_2" title:@"Next" options:UNNotificationActionOptionNone]; +UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:@"action_3" title:@"View In App" options:UNNotificationActionOptionNone]; +UNNotificationCategory *cat = [UNNotificationCategory categoryWithIdentifier:@"CTNotification" actions:@[action1, action2, action3] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone]; +[center setNotificationCategories:[NSSet setWithObjects:cat, nil]]; +``` + ### Out of the box diff --git a/static/NotificationContentStoryboard.png b/static/NotificationContentStoryboard.png new file mode 100644 index 00000000..a8ef328e Binary files /dev/null and b/static/NotificationContentStoryboard.png differ diff --git a/static/NotificationServiceTarget.png b/static/NotificationServiceTarget.png new file mode 100644 index 00000000..428c4134 Binary files /dev/null and b/static/NotificationServiceTarget.png differ