From db7938f66505c3e0d10028d9e6ba2ec4c3a04ff7 Mon Sep 17 00:00:00 2001 From: Matthew Abraham <14793093+shottah@users.noreply.github.com> Date: Sat, 8 Oct 2022 20:27:20 -0400 Subject: [PATCH] (KW-188) Support `kolektivo://` native url scheme deep links (#72) * feat: open kolektivo native links instead of celo * chore: replace celo:// with kolektivo:// Co-authored-by: Matthew Abraham --- android/app/src/main/AndroidManifest.xml | 16 +- docs/deeplinks.md | 6 +- e2e/src/usecases/HandleDeepLinkDappkit.js | 2 +- e2e/src/usecases/HandleDeepLinkSend.js | 6 +- ios/celo.xcodeproj/project.pbxproj | 283 +++++++++--------- ios/celo/AppDelegate.m | 2 +- ios/celo/Info.plist | 15 +- ios/celo/celo.entitlements | 4 +- package.json | 2 +- scripts/adb-dappkit.sh | 2 +- scripts/adb-deep-link.sh | 2 +- scripts/ios-deep-link.sh | 2 +- src/app/WebViewScreen.tsx | 4 +- src/app/saga.test.ts | 26 +- src/config.ts | 4 +- .../DAppsExplorerScreen.test.tsx | 4 +- src/fiatExchanges/SimplexScreen.tsx | 2 +- src/firebase/notifications.test.ts | 2 +- src/qrcode/schema.test.ts | 4 +- src/qrcode/schema.ts | 2 +- src/qrcode/utils.ts | 2 +- src/walletConnect/walletConnect.ts | 6 +- 22 files changed, 203 insertions(+), 195 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 97f1e283259..6def8a975a4 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,11 +17,12 @@ + - + @@ -29,14 +30,23 @@ + + - + + + + + + + + + - diff --git a/docs/deeplinks.md b/docs/deeplinks.md index 0f91ef5e35d..5cef0a94c98 100644 --- a/docs/deeplinks.md +++ b/docs/deeplinks.md @@ -9,7 +9,7 @@ There are three different types of deeplinks that we support: You can create a deeplink that will prompt the user to make a payment to an address. -The deeplink will look like this `celo://wallet/pay?{...queryParams}` +The deeplink will look like this `kolektivo://wallet/pay?{...queryParams}` where the query parameters can be: - `address` (required): The address that will be the recipient of the payment. - `displayName` (optional): The URL-encoded name of the recipient. If you leave this empty the address will be shown instead. @@ -23,11 +23,11 @@ To URL encode a text you can use the [encodeURI](https://developer.mozilla.org/e Example payment deeplink: -`celo://wallet/pay?address=0x4b371df8d05abd2954564b54faf10b8c8f1bc3a2&displayName=Example%20name&amount=9.50&comment=Burger%20with%20fries&token=cUSD¤cyCode=USD` +`kolektivo://wallet/pay?address=0x4b371df8d05abd2954564b54faf10b8c8f1bc3a2&displayName=Example%20name&amount=9.50&comment=Burger%20with%20fries&token=cUSD¤cyCode=USD` Smallest possible payment deeplink: -`celo://wallet/pay?address=0x4b371df8d05abd2954564b54faf10b8c8f1bc3a2` +`kolektivo://wallet/pay?address=0x4b371df8d05abd2954564b54faf10b8c8f1bc3a2` ## DAppKit diff --git a/e2e/src/usecases/HandleDeepLinkDappkit.js b/e2e/src/usecases/HandleDeepLinkDappkit.js index 6054c83f505..d36c2a4c32c 100644 --- a/e2e/src/usecases/HandleDeepLinkDappkit.js +++ b/e2e/src/usecases/HandleDeepLinkDappkit.js @@ -3,7 +3,7 @@ import { enterPinUiIfNecessary, quote, sleep } from '../utils/utils' export default HandleDeepLinkDappkit = () => { const DAPPKIT_URL = quote( - 'celo://wallet/dappkit?type=sign_tx&requestId=beneficiaryclaim&callback=impactmarket%3A%2F%2F&dappName=impactmarket&txs=W3sidHhEYXRhIjoiMHg0ZTcxZDkyZCIsImVzdGltYXRlZEdhcyI6MTIxMTI3LCJmcm9tIjoiMHhhY2FGQjRGMWQ5RERGMTQwNWViZEJGZWM5NTlBNzI4MTk0QjAyMzhhIiwidG8iOiIweDc0ZTVDNDA1RURFNEUzN2U3ODBEQjk2NTI1NDE1MzhkZDhBNzlBN2QiLCJub25jZSI6MjYsImZlZUN1cnJlbmN5QWRkcmVzcyI6IjB4NzY1REU4MTY4NDU4NjFlNzVBMjVmQ0ExMjJiYjY4OThCOEIxMjgyYSIsInZhbHVlIjoiMCJ9XQ%3D%3D' + 'kolektivo://wallet/dappkit?type=sign_tx&requestId=beneficiaryclaim&callback=impactmarket%3A%2F%2F&dappName=impactmarket&txs=W3sidHhEYXRhIjoiMHg0ZTcxZDkyZCIsImVzdGltYXRlZEdhcyI6MTIxMTI3LCJmcm9tIjoiMHhhY2FGQjRGMWQ5RERGMTQwNWViZEJGZWM5NTlBNzI4MTk0QjAyMzhhIiwidG8iOiIweDc0ZTVDNDA1RURFNEUzN2U3ODBEQjk2NTI1NDE1MzhkZDhBNzlBN2QiLCJub25jZSI6MjYsImZlZUN1cnJlbmN5QWRkcmVzcyI6IjB4NzY1REU4MTY4NDU4NjFlNzVBMjVmQ0ExMjJiYjY4OThCOEIxMjgyYSIsInZhbHVlIjoiMCJ9XQ%3D%3D' ) it('Launch app with dappkit deep link', async () => { diff --git a/e2e/src/usecases/HandleDeepLinkSend.js b/e2e/src/usecases/HandleDeepLinkSend.js index cecffcaff07..ab82a8bc29f 100644 --- a/e2e/src/usecases/HandleDeepLinkSend.js +++ b/e2e/src/usecases/HandleDeepLinkSend.js @@ -3,11 +3,11 @@ import { inputNumberKeypad, quote } from '../utils/utils' const deepLinks = { withAll: - 'celo://wallet/pay?address=0xC0509a7dcc69a0B28c7Ca73feD2FF06b9d59E5b9&amount=0.1¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', + 'kolektivo://wallet/pay?address=0xC0509a7dcc69a0B28c7Ca73feD2FF06b9d59E5b9&amount=0.1¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', withoutAmount: - 'celo://wallet/pay?address=0xC0509a7dcc69a0B28c7Ca73feD2FF06b9d59E5b9¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', + 'kolektivo://wallet/pay?address=0xC0509a7dcc69a0B28c7Ca73feD2FF06b9d59E5b9¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', withoutAddress: - 'celo://wallet/pay?amount=0.1¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', + 'kolektivo://wallet/pay?amount=0.1¤cyCode=USD&token=cUSD&displayName=TestFaucet&comment=sending+usd:+0.1+to+my+wallet', } // Helper functions diff --git a/ios/celo.xcodeproj/project.pbxproj b/ios/celo.xcodeproj/project.pbxproj index 894c118c880..0af80c45d05 100644 --- a/ios/celo.xcodeproj/project.pbxproj +++ b/ios/celo.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* celoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* celoTests.m */; }; - 01CB19E512EE7C5466EC5E21 /* Pods_celoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E21E08081F9C9171E803FD2 /* Pods_celoTests.framework */; }; 0F3673F82673A63900F9586A /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3673F72673A63900F9586A /* File.swift */; }; 0F3673F92673A71100F9586A /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3673F72673A63900F9586A /* File.swift */; }; 0F49F5F6270F2F2A0005F897 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0F49F5ED270F2F2A0005F897 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -18,18 +17,19 @@ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 23588914105256F3390DEAD7 /* Pods_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20A1A15FF9C743AA946B8D12 /* Pods_NotificationService.framework */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* celoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* celoTests.m */; }; - 34117B39DDE0A4D51DE4A6D3 /* Pods_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1D048E84EE8CFAF28F5525 /* Pods_NotificationService.framework */; }; - 525DB9EAE5B2B0D754EC099A /* Pods_celo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 543C52A2F70651B6907EA6C2 /* Pods_celo.framework */; }; 67911AC6D310414DAAC1498E /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F3F5FA21E7EC46BBB744FE54 /* libz.tbd */; }; 6844FCD52570513C0057A74F /* QBImagePicker.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6844FCD42570513C0057A74F /* QBImagePicker.storyboard */; }; + 6B7C5E7B8A4E4E689DF1F3E5 /* Kaleko105Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 065F627B18BA4163AF6D1552 /* Kaleko105Bold.ttf */; }; + 728EAED2CACE2FB28B9F0272 /* Pods_celo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D6B6F877099501574FF0AE2 /* Pods_celo.framework */; }; 7C4395BE62B34EB1B2BF4D5E /* Poppins-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8B65DAD06AB6435D965598FF /* Poppins-SemiBold.ttf */; }; 9E39FE78D56C4F2B99E00792 /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0216E41671914A26A2088F7B /* Lato-Regular.ttf */; }; C54FA6468F0E45FDA5245761 /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 92F204296088488EAD451C5E /* Lato-Bold.ttf */; }; - 6B7C5E7B8A4E4E689DF1F3E5 /* Kaleko105Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 065F627B18BA4163AF6D1552 /* Kaleko105Bold.ttf */; }; + D5C8173FBD61CC426B800F54 /* Pods_celoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2855345AF534AEB7C469EE68 /* Pods_celoTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -76,6 +76,8 @@ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* celoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = celoTests.m; sourceTree = ""; }; 0216E41671914A26A2088F7B /* Lato-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Regular.ttf"; path = "../fonts/Lato-Regular.ttf"; sourceTree = ""; }; + 065F627B18BA4163AF6D1552 /* Kaleko105Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105Bold.ttf; path = ../fonts/Kaleko105Bold.ttf; sourceTree = ""; }; + 0D2C54BCFDB00148F2DFDDDD /* Pods-celoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celoTests.debug.xcconfig"; path = "Target Support Files/Pods-celoTests/Pods-celoTests.debug.xcconfig"; sourceTree = ""; }; 0F3673F62673A63800F9586A /* celo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "celo-Bridging-Header.h"; path = "celo/celo-Bridging-Header.h"; sourceTree = ""; }; 0F3673F72673A63900F9586A /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = File.swift; path = celo/File.swift; sourceTree = ""; }; 0F49F5ED270F2F2A0005F897 /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -92,37 +94,35 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = celo/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = celo/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = celo/main.m; sourceTree = ""; }; + 19953D5C7CA44FFF92C52209 /* Kaleko105BookOblique.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105BookOblique.ttf; path = ../fonts/Kaleko105BookOblique.ttf; sourceTree = ""; }; + 20A1A15FF9C743AA946B8D12 /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 242B9A398035A8C261A3CF54 /* Pods-celo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celo.release.xcconfig"; path = "Target Support Files/Pods-celo/Pods-celo.release.xcconfig"; sourceTree = ""; }; 2772E8DC27CEE9D900171137 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; 27A21C992796DA560008F219 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; 27A21C9A2796DA620008F219 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; 27A21C9D2796DA920008F219 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; + 2855345AF534AEB7C469EE68 /* Pods_celoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_celoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E47B1E0B4A5D006451C7 /* celo-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "celo-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* celo-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "celo-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D1D048E84EE8CFAF28F5525 /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A318B50BCA8740870CF082B /* Pods-celo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celo.release.xcconfig"; path = "Target Support Files/Pods-celo/Pods-celo.release.xcconfig"; sourceTree = ""; }; - 4E21E08081F9C9171E803FD2 /* Pods_celoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_celoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 543C52A2F70651B6907EA6C2 /* Pods_celo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_celo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5869698CC2BF7C074CD45EC0 /* Pods-celo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celo.debug.xcconfig"; path = "Target Support Files/Pods-celo/Pods-celo.debug.xcconfig"; sourceTree = ""; }; - 5FF0195CF841A696F881A46D /* 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 = ""; }; + 4D6B6F877099501574FF0AE2 /* Pods_celo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_celo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F1E68407A65E53938CF1671 /* 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 = ""; }; + 52986FC436824EF4ACA173A6 /* Kaleko105HeavyOblique.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105HeavyOblique.ttf; path = ../fonts/Kaleko105HeavyOblique.ttf; sourceTree = ""; }; + 552D44B34D6F40AC8FCE6DD7 /* Kaleko105LightOblique.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105LightOblique.ttf; path = ../fonts/Kaleko105LightOblique.ttf; sourceTree = ""; }; + 560F1E731BB8124F185DB388 /* 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 = ""; }; 6844FCD42570513C0057A74F /* QBImagePicker.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = QBImagePicker.storyboard; path = "../node_modules/react-native-image-crop-picker/ios/QBImagePicker/QBImagePicker/QBImagePicker.storyboard"; sourceTree = ""; }; 68B737FF27D7B55B0044A85E /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - 87D6C3CE1A340ABA3358DB75 /* 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 = ""; }; + 7356F343C54E0A383778A6D7 /* Pods-celoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celoTests.release.xcconfig"; path = "Target Support Files/Pods-celoTests/Pods-celoTests.release.xcconfig"; sourceTree = ""; }; + 8370BEE8C0924C70BF055BF0 /* Kaleko105BoldOblique.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105BoldOblique.ttf; path = ../fonts/Kaleko105BoldOblique.ttf; sourceTree = ""; }; 8B65DAD06AB6435D965598FF /* Poppins-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Poppins-SemiBold.ttf"; path = "../fonts/Poppins-SemiBold.ttf"; sourceTree = ""; }; 92F204296088488EAD451C5E /* Lato-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Bold.ttf"; path = "../fonts/Lato-Bold.ttf"; sourceTree = ""; }; - A2470963DB65CDDCC51DB528 /* Pods-celoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celoTests.debug.xcconfig"; path = "Target Support Files/Pods-celoTests/Pods-celoTests.debug.xcconfig"; sourceTree = ""; }; + A5F4A81A4A3D45F7B7E4AA2B /* Kaleko105Heavy.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105Heavy.ttf; path = ../fonts/Kaleko105Heavy.ttf; sourceTree = ""; }; + A991E758C0E84A55A95FA5CE /* Kaleko105Book.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105Book.ttf; path = ../fonts/Kaleko105Book.ttf; sourceTree = ""; }; + C10E385702D44FACA020F3A9 /* Kaleko105ThinOblique.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105ThinOblique.ttf; path = ../fonts/Kaleko105ThinOblique.ttf; sourceTree = ""; }; C88C5BFD26FA424100B9C0CE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - E1C44C14A30D9A9B512407D7 /* Pods-celoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celoTests.release.xcconfig"; path = "Target Support Files/Pods-celoTests/Pods-celoTests.release.xcconfig"; sourceTree = ""; }; + D2974D589730AAD039DB0CAC /* Pods-celo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-celo.debug.xcconfig"; path = "Target Support Files/Pods-celo/Pods-celo.debug.xcconfig"; sourceTree = ""; }; + D6A2CA3F12FD4BCD881B914B /* Kaleko105Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105Thin.ttf; path = ../fonts/Kaleko105Thin.ttf; sourceTree = ""; }; + E941FD293B014328B8BF7CD6 /* Kaleko105Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = Kaleko105Light.ttf; path = ../fonts/Kaleko105Light.ttf; sourceTree = ""; }; F3F5FA21E7EC46BBB744FE54 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 065F627B18BA4163AF6D1552 /* Kaleko105Bold.ttf */ = {isa = PBXFileReference; name = "Kaleko105Bold.ttf"; path = "../fonts/Kaleko105Bold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 8370BEE8C0924C70BF055BF0 /* Kaleko105BoldOblique.ttf */ = {isa = PBXFileReference; name = "Kaleko105BoldOblique.ttf"; path = "../fonts/Kaleko105BoldOblique.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - A991E758C0E84A55A95FA5CE /* Kaleko105Book.ttf */ = {isa = PBXFileReference; name = "Kaleko105Book.ttf"; path = "../fonts/Kaleko105Book.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 19953D5C7CA44FFF92C52209 /* Kaleko105BookOblique.ttf */ = {isa = PBXFileReference; name = "Kaleko105BookOblique.ttf"; path = "../fonts/Kaleko105BookOblique.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - A5F4A81A4A3D45F7B7E4AA2B /* Kaleko105Heavy.ttf */ = {isa = PBXFileReference; name = "Kaleko105Heavy.ttf"; path = "../fonts/Kaleko105Heavy.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 52986FC436824EF4ACA173A6 /* Kaleko105HeavyOblique.ttf */ = {isa = PBXFileReference; name = "Kaleko105HeavyOblique.ttf"; path = "../fonts/Kaleko105HeavyOblique.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - E941FD293B014328B8BF7CD6 /* Kaleko105Light.ttf */ = {isa = PBXFileReference; name = "Kaleko105Light.ttf"; path = "../fonts/Kaleko105Light.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 552D44B34D6F40AC8FCE6DD7 /* Kaleko105LightOblique.ttf */ = {isa = PBXFileReference; name = "Kaleko105LightOblique.ttf"; path = "../fonts/Kaleko105LightOblique.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - D6A2CA3F12FD4BCD881B914B /* Kaleko105Thin.ttf */ = {isa = PBXFileReference; name = "Kaleko105Thin.ttf"; path = "../fonts/Kaleko105Thin.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - C10E385702D44FACA020F3A9 /* Kaleko105ThinOblique.ttf */ = {isa = PBXFileReference; name = "Kaleko105ThinOblique.ttf"; path = "../fonts/Kaleko105ThinOblique.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -130,7 +130,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 01CB19E512EE7C5466EC5E21 /* Pods_celoTests.framework in Frameworks */, + D5C8173FBD61CC426B800F54 /* Pods_celoTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,7 +138,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34117B39DDE0A4D51DE4A6D3 /* Pods_NotificationService.framework in Frameworks */, + 23588914105256F3390DEAD7 /* Pods_NotificationService.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -147,7 +147,7 @@ buildActionMask = 2147483647; files = ( 67911AC6D310414DAAC1498E /* libz.tbd in Frameworks */, - 525DB9EAE5B2B0D754EC099A /* Pods_celo.framework in Frameworks */, + 728EAED2CACE2FB28B9F0272 /* Pods_celo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -189,9 +189,9 @@ isa = PBXGroup; children = ( F3F5FA21E7EC46BBB744FE54 /* libz.tbd */, - 2D1D048E84EE8CFAF28F5525 /* Pods_NotificationService.framework */, - 543C52A2F70651B6907EA6C2 /* Pods_celo.framework */, - 4E21E08081F9C9171E803FD2 /* Pods_celoTests.framework */, + 20A1A15FF9C743AA946B8D12 /* Pods_NotificationService.framework */, + 4D6B6F877099501574FF0AE2 /* Pods_celo.framework */, + 2855345AF534AEB7C469EE68 /* Pods_celoTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -227,12 +227,12 @@ 24A671CF55B1A8A5DB61A139 /* Pods */ = { isa = PBXGroup; children = ( - 5FF0195CF841A696F881A46D /* Pods-NotificationService.debug.xcconfig */, - 87D6C3CE1A340ABA3358DB75 /* Pods-NotificationService.release.xcconfig */, - 5869698CC2BF7C074CD45EC0 /* Pods-celo.debug.xcconfig */, - 3A318B50BCA8740870CF082B /* Pods-celo.release.xcconfig */, - A2470963DB65CDDCC51DB528 /* Pods-celoTests.debug.xcconfig */, - E1C44C14A30D9A9B512407D7 /* Pods-celoTests.release.xcconfig */, + 4F1E68407A65E53938CF1671 /* Pods-NotificationService.debug.xcconfig */, + 560F1E731BB8124F185DB388 /* Pods-NotificationService.release.xcconfig */, + D2974D589730AAD039DB0CAC /* Pods-celo.debug.xcconfig */, + 242B9A398035A8C261A3CF54 /* Pods-celo.release.xcconfig */, + 0D2C54BCFDB00148F2DFDDDD /* Pods-celoTests.debug.xcconfig */, + 7356F343C54E0A383778A6D7 /* Pods-celoTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -301,7 +301,7 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "celoTests" */; buildPhases = ( - B5B83601187E0AD6F1B7ED51 /* [CP] Check Pods Manifest.lock */, + 959892C39080F579BA33716B /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, @@ -320,7 +320,7 @@ isa = PBXNativeTarget; buildConfigurationList = 0F49F5F9270F2F2A0005F897 /* Build configuration list for PBXNativeTarget "NotificationService" */; buildPhases = ( - 105CDC92E90BCDBB8DFAD7CA /* [CP] Check Pods Manifest.lock */, + 673CCFD635236EDA66D8160C /* [CP] Check Pods Manifest.lock */, 0F49F5E9270F2F2A0005F897 /* Sources */, 0F49F5EA270F2F2A0005F897 /* Frameworks */, 0F49F5EB270F2F2A0005F897 /* Resources */, @@ -338,7 +338,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "celo" */; buildPhases = ( - 72F6CC4E058DE5650330BFB7 /* [CP] Check Pods Manifest.lock */, + 571B739AB717446181F19EAE /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, @@ -346,8 +346,8 @@ 0FA148AE242137AC009239C6 /* Copy GoogleService-Info.plist */, FAA606D3D7E04ED7985FC9FF /* Upload Debug Symbols to Sentry */, 0F49F5F5270F2F2A0005F897 /* Embed App Extensions */, - B39543B931ECEB592B81A8DD /* [CP] Embed Pods Frameworks */, - 3CD62F91FE692CE5AF4E3EDF /* [CP-User] [RNFB] Core Configuration */, + 01FEEB9ED838062AF0D2F190 /* [CP] Embed Pods Frameworks */, + F4BF920D9830749FCE1CEC4A /* [CP-User] [RNFB] Core Configuration */, ); buildRules = ( ); @@ -496,15 +496,6 @@ 9E39FE78D56C4F2B99E00792 /* Lato-Regular.ttf in Resources */, 7C4395BE62B34EB1B2BF4D5E /* Poppins-SemiBold.ttf in Resources */, 6B7C5E7B8A4E4E689DF1F3E5 /* Kaleko105Bold.ttf in Resources */, - 56071D916372451CAFDF2813 /* Kaleko105BoldOblique.ttf in Resources */, - 928FDDFC746244D99540DBC3 /* Kaleko105Book.ttf in Resources */, - 76889952537B4FD1A307423B /* Kaleko105BookOblique.ttf in Resources */, - 845A29CB673C4C4BB4A598D3 /* Kaleko105Heavy.ttf in Resources */, - 0C4F3FBADC5A4843A482B54D /* Kaleko105HeavyOblique.ttf in Resources */, - 09CB3A50D4044BCE9A7D455C /* Kaleko105Light.ttf in Resources */, - 7E581C991FDB404F95873FD1 /* Kaleko105LightOblique.ttf in Resources */, - 0A8F1073EE5845838133EEBD /* Kaleko105Thin.ttf in Resources */, - 9D63CAFC4D9B426CBDEDE4F4 /* Kaleko105ThinOblique.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -540,96 +531,7 @@ shellPath = /bin/sh; shellScript = "# First set the path to sentry.properties\nexport SENTRY_PROPERTIES=sentry.properties\n\n# Setup nvm and set node\n[ -z \"$NVM_DIR\" ] && export NVM_DIR=\"$HOME/.nvm\"\n\nif [[ -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\n# Set up the nodenv node version manager if present\nif [[ -x \"$HOME/.nodenv/bin/nodenv\" ]]; then\neval \"$(\"$HOME/.nodenv/bin/nodenv\" init -)\"\nfi\n\n# Set up asdf version manager if present\nif [[ -s \"$HOME/.asdf/asdf.sh\" ]]; then\n. \"$HOME/.asdf/asdf.sh\"\nfi\n\n[ -z \"$NODE_BINARY\" ] && export NODE_BINARY=\"node\"\n\n# Fixes bundling failing with our monorepo setup\nexport PROJECT_ROOT=\"$PROJECT_DIR/..\"\n\nif [[ \"$APP_BUNDLE_ID\" = \"org.celo.mobile.test\" ]]; then\n ../node_modules/react-native/scripts/react-native-xcode.sh\nelse\n $NODE_BINARY ../node_modules/@sentry/cli/bin/sentry-cli react-native xcode \\\n ../node_modules/react-native/scripts/react-native-xcode.sh\nfi\n"; }; - 0FA148AE242137AC009239C6 /* Copy GoogleService-Info.plist */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Copy GoogleService-Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/../scripts/copy_google_service_plist.sh\"\n"; - }; - 105CDC92E90BCDBB8DFAD7CA /* [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; - }; - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Bundle React Native Code And Images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# First set the path to sentry.properties\nexport SENTRY_PROPERTIES=sentry.properties\n\n# Setup nvm and set node\n[ -z \"$NVM_DIR\" ] && export NVM_DIR=\"$HOME/.nvm\"\n\nif [[ -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\n# Set up the nodenv node version manager if present\nif [[ -x \"$HOME/.nodenv/bin/nodenv\" ]]; then\neval \"$(\"$HOME/.nodenv/bin/nodenv\" init -)\"\nfi\n\n[ -z \"$NODE_BINARY\" ] && export NODE_BINARY=\"node\"\n\n$NODE_BINARY ../node_modules/@sentry/cli/bin/sentry-cli react-native xcode \\\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; - }; - 3CD62F91FE692CE5AF4E3EDF /* [CP-User] [RNFB] Core Configuration */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Core Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; - }; - 72F6CC4E058DE5650330BFB7 /* [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-celo-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; - }; - B39543B931ECEB592B81A8DD /* [CP] Embed Pods Frameworks */ = { + 01FEEB9ED838062AF0D2F190 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -861,7 +763,83 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-celo/Pods-celo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - B5B83601187E0AD6F1B7ED51 /* [CP] Check Pods Manifest.lock */ = { + 0FA148AE242137AC009239C6 /* Copy GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/../scripts/copy_google_service_plist.sh\"\n"; + }; + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native Code And Images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# First set the path to sentry.properties\nexport SENTRY_PROPERTIES=sentry.properties\n\n# Setup nvm and set node\n[ -z \"$NVM_DIR\" ] && export NVM_DIR=\"$HOME/.nvm\"\n\nif [[ -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\n# Set up the nodenv node version manager if present\nif [[ -x \"$HOME/.nodenv/bin/nodenv\" ]]; then\neval \"$(\"$HOME/.nodenv/bin/nodenv\" init -)\"\nfi\n\n[ -z \"$NODE_BINARY\" ] && export NODE_BINARY=\"node\"\n\n$NODE_BINARY ../node_modules/@sentry/cli/bin/sentry-cli react-native xcode \\\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + 571B739AB717446181F19EAE /* [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-celo-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; + }; + 673CCFD635236EDA66D8160C /* [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; + }; + 959892C39080F579BA33716B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -883,6 +861,19 @@ 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; }; + F4BF920D9830749FCE1CEC4A /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + }; FAA606D3D7E04ED7985FC9FF /* Upload Debug Symbols to Sentry */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -995,7 +986,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A2470963DB65CDDCC51DB528 /* Pods-celoTests.debug.xcconfig */; + baseConfigurationReference = 0D2C54BCFDB00148F2DFDDDD /* Pods-celoTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; DEVELOPMENT_TEAM = 48TPT4QN6K; @@ -1051,7 +1042,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1C44C14A30D9A9B512407D7 /* Pods-celoTests.release.xcconfig */; + baseConfigurationReference = 7356F343C54E0A383778A6D7 /* Pods-celoTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; @@ -1104,7 +1095,7 @@ }; 0F49F5F7270F2F2A0005F897 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5FF0195CF841A696F881A46D /* Pods-NotificationService.debug.xcconfig */; + baseConfigurationReference = 4F1E68407A65E53938CF1671 /* Pods-NotificationService.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1145,7 +1136,7 @@ }; 0F49F5F8270F2F2A0005F897 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 87D6C3CE1A340ABA3358DB75 /* Pods-NotificationService.release.xcconfig */; + baseConfigurationReference = 560F1E731BB8124F185DB388 /* Pods-NotificationService.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -1184,7 +1175,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5869698CC2BF7C074CD45EC0 /* Pods-celo.debug.xcconfig */; + baseConfigurationReference = D2974D589730AAD039DB0CAC /* Pods-celo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; @@ -1218,7 +1209,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A318B50BCA8740870CF082B /* Pods-celo.release.xcconfig */; + baseConfigurationReference = 242B9A398035A8C261A3CF54 /* Pods-celo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; diff --git a/ios/celo/AppDelegate.m b/ios/celo/AppDelegate.m index f76a47df0cd..b05c5a58d64 100644 --- a/ios/celo/AppDelegate.m +++ b/ios/celo/AppDelegate.m @@ -91,7 +91,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( NSString *env = [ReactNativeConfig envFor:@"FIREBASE_ENABLED"]; if (env.boolValue) { - [FIROptions defaultOptions].deepLinkURLScheme = @"celo"; + [FIROptions defaultOptions].deepLinkURLScheme = @"kolektivo"; [FIRApp configure]; } RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; diff --git a/ios/celo/Info.plist b/ios/celo/Info.plist index ccba56ee959..179672a11c1 100644 --- a/ios/celo/Info.plist +++ b/ios/celo/Info.plist @@ -29,7 +29,17 @@ CFBundleURLSchemes - celo + kolektivo + + + + CFBundleTypeRole + Editor + CFBundleURLName + BundleID + CFBundleURLSchemes + + $(PRODUCT_BUNDLE_IDENTIFIER) @@ -43,8 +53,7 @@ Ijkke5lN0tH1Cb1fxWoUeDmtf8tp5CzAics2F FirebaseDynamicLinksCustomDomains - https://l.celo.org - https://vlra.app + https://kolektivo.app ITSAppUsesNonExemptEncryption diff --git a/ios/celo/celo.entitlements b/ios/celo/celo.entitlements index 5bc6d262b9c..ad379aac07a 100644 --- a/ios/celo/celo.entitlements +++ b/ios/celo/celo.entitlements @@ -6,9 +6,7 @@ development com.apple.developer.associated-domains - applinks:l.celo.org - applinks:vlra.app - applinks:valoraapp.com + applinks:kolektivo.app diff --git a/package.json b/package.json index 58087ee8db5..fc5f09896ee 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,4 @@ -{ + { "name": "@valora/wallet", "version": "1.34.3", "author": "Celo", diff --git a/scripts/adb-dappkit.sh b/scripts/adb-dappkit.sh index 9b307461fd4..501b2695bf0 100755 --- a/scripts/adb-dappkit.sh +++ b/scripts/adb-dappkit.sh @@ -1 +1 @@ -adb shell am start -a android.intent.action.VIEW -d "celo://wallet/dappkit?type=sign_tx\&requestId=beneficiaryclaim\&callback=impactmarket%3A%2F%2F\&dappName=impactmarket\&txs=W3sidHhEYXRhIjoiMHg0ZTcxZDkyZCIsImVzdGltYXRlZEdhcyI6MTIxMTI3LCJmcm9tIjoiMHhhY2FGQjRGMWQ5RERGMTQwNWViZEJGZWM5NTlBNzI4MTk0QjAyMzhhIiwidG8iOiIweDc0ZTVDNDA1RURFNEUzN2U3ODBEQjk2NTI1NDE1MzhkZDhBNzlBN2QiLCJub25jZSI6MjYsImZlZUN1cnJlbmN5QWRkcmVzcyI6IjB4NzY1REU4MTY4NDU4NjFlNzVBMjVmQ0ExMjJiYjY4OThCOEIxMjgyYSIsInZhbHVlIjoiMCJ9XQ%3D%3D" +adb shell am start -a android.intent.action.VIEW -d "kolektivo://wallet/dappkit?type=sign_tx\&requestId=beneficiaryclaim\&callback=impactmarket%3A%2F%2F\&dappName=impactmarket\&txs=W3sidHhEYXRhIjoiMHg0ZTcxZDkyZCIsImVzdGltYXRlZEdhcyI6MTIxMTI3LCJmcm9tIjoiMHhhY2FGQjRGMWQ5RERGMTQwNWViZEJGZWM5NTlBNzI4MTk0QjAyMzhhIiwidG8iOiIweDc0ZTVDNDA1RURFNEUzN2U3ODBEQjk2NTI1NDE1MzhkZDhBNzlBN2QiLCJub25jZSI6MjYsImZlZUN1cnJlbmN5QWRkcmVzcyI6IjB4NzY1REU4MTY4NDU4NjFlNzVBMjVmQ0ExMjJiYjY4OThCOEIxMjgyYSIsInZhbHVlIjoiMCJ9XQ%3D%3D" diff --git a/scripts/adb-deep-link.sh b/scripts/adb-deep-link.sh index 343692f2341..e5778a6ea31 100755 --- a/scripts/adb-deep-link.sh +++ b/scripts/adb-deep-link.sh @@ -2,4 +2,4 @@ # use adb to launch a deep link -adb shell am start -a android.intent.action.VIEW -d "celo://wallet/pay?address=0x0b784e1cf121a2d9e914ae8bfe3090af0882f229&displayName=Crypto4BlackLives&e164PhoneNumber=%2B14046251530" +adb shell am start -a android.intent.action.VIEW -d "kolektivo://wallet/pay?address=0x0b784e1cf121a2d9e914ae8bfe3090af0882f229&displayName=Crypto4BlackLives&e164PhoneNumber=%2B14046251530" diff --git a/scripts/ios-deep-link.sh b/scripts/ios-deep-link.sh index 9163f4dbb45..2d51c22123a 100755 --- a/scripts/ios-deep-link.sh +++ b/scripts/ios-deep-link.sh @@ -1,3 +1,3 @@ # send a deep link to the ios simulator -xcrun simctl openurl booted "celo://wallet/pay?address=0x0b784e1cf121a2d9e914ae8bfe3090af0882f229&displayName=Crypto4BlackLives&e164PhoneNumber=%2B14046251530" +xcrun simctl openurl booted "kolektivo://wallet/pay?address=0x0b784e1cf121a2d9e914ae8bfe3090af0882f229&displayName=Crypto4BlackLives&e164PhoneNumber=%2B14046251530" diff --git a/src/app/WebViewScreen.tsx b/src/app/WebViewScreen.tsx index ec891045564..5f117e69c20 100644 --- a/src/app/WebViewScreen.tsx +++ b/src/app/WebViewScreen.tsx @@ -120,7 +120,7 @@ function WebViewScreen({ route, navigation }: Props) { }, [canGoBack, webViewRef.current, navigation]) const handleLoadRequest = (event: ShouldStartLoadRequest): boolean => { - if (event.url.startsWith('celo://') || isWalletConnectDeepLink(event.url)) { + if (event.url.startsWith('kolektivo://') || isWalletConnectDeepLink(event.url)) { dispatch(openDeepLink(event.url)) return false } @@ -143,7 +143,7 @@ function WebViewScreen({ route, navigation }: Props) { { }) it('Handles Dappkit deep link', async () => { - const deepLink = 'celo://wallet/dappkit?abcdsa' + const deepLink = 'kolektivo://wallet/dappkit?abcdsa' await expectSaga(handleDeepLink, openDeepLink(deepLink)).run() expect(handleDappkitDeepLink).toHaveBeenCalledWith(deepLink) }) it('Handles verification deep link', async () => { - await expectSaga(handleDeepLink, openDeepLink('celo://wallet/v/12345')) + await expectSaga(handleDeepLink, openDeepLink('kolektivo://wallet/v/12345')) .put(receiveAttestationMessage('12345', CodeInputType.DEEP_LINK)) .run() }) @@ -65,7 +65,7 @@ describe('App saga', () => { } const params = new URLSearchParams(data) - const deepLink = `celo://wallet/pay?${params.toString()}` + const deepLink = `kolektivo://wallet/pay?${params.toString()}` await expectSaga(handleDeepLink, openDeepLink(deepLink)) .provide([[matchers.call.fn(handlePaymentDeeplink), deepLink]]) @@ -73,7 +73,7 @@ describe('App saga', () => { }) it('Handles cash in deep link', async () => { - const deepLink = 'celo://wallet/cashIn' + const deepLink = 'kolektivo://wallet/cashIn' await expectSaga(handleDeepLink, openDeepLink(deepLink)).run() expect(navigate).toHaveBeenCalledWith(Screens.FiatExchangeCurrency, { flow: FiatExchangeFlow.CashIn, @@ -81,25 +81,25 @@ describe('App saga', () => { }) it('Handles Bidali deep link', async () => { - const deepLink = 'celo://wallet/bidali' + const deepLink = 'kolektivo://wallet/bidali' await expectSaga(handleDeepLink, openDeepLink(deepLink)).run() expect(navigate).toHaveBeenCalledWith(Screens.BidaliScreen, { currency: undefined }) }) it('Handles cash-in-success deep link', async () => { - const deepLink = 'celo://wallet/cash-in-success/simplex' + const deepLink = 'kolektivo://wallet/cash-in-success/simplex' await expectSaga(handleDeepLink, openDeepLink(deepLink)).run() expect(navigate).toHaveBeenCalledWith(Screens.CashInSuccess, { provider: 'simplex' }) }) it('Handles cash-in-success deep link with query params', async () => { - const deepLink = 'celo://wallet/cash-in-success/simplex?isApproved=true' + const deepLink = 'kolektivo://wallet/cash-in-success/simplex?isApproved=true' await expectSaga(handleDeepLink, openDeepLink(deepLink)).run() expect(navigate).toHaveBeenCalledWith(Screens.CashInSuccess, { provider: 'simplex' }) }) it('Handles openScreen deep link with safe origin', async () => { - const deepLink = `celo://wallet/openScreen?screen=${Screens.FiatExchangeCurrency}&flow=CashIn` + const deepLink = `kolektivo://wallet/openScreen?screen=${Screens.FiatExchangeCurrency}&flow=CashIn` await expectSaga(handleDeepLink, openDeepLink(deepLink, true)).run() expect(navigate).toHaveBeenCalledWith( Screens.FiatExchangeCurrency, @@ -108,7 +108,7 @@ describe('App saga', () => { }) it('Handles openScreen deep link without safe origin', async () => { - const deepLink = `celo://wallet/openScreen?screen=${Screens.FiatExchangeCurrency}&flow=CashIn` + const deepLink = `kolektivo://wallet/openScreen?screen=${Screens.FiatExchangeCurrency}&flow=CashIn` await expectSaga(handleDeepLink, openDeepLink(deepLink, false)).run() expect(navigate).not.toHaveBeenCalled() }) @@ -124,7 +124,7 @@ describe('App saga', () => { }, { name: 'iOS deeplink', - link: `celo://wallet/wc?uri=${connectionString}`, + link: `kolektivo://wallet/wc?uri=${connectionString}`, }, { name: 'iOS universal link', @@ -199,7 +199,7 @@ describe('App saga', () => { const actionString = 'wc:1234' const actionLinks = [ { name: 'Android', link: actionString }, - { name: 'iOS deeplink', link: `celo://wallet/wc?uri=${actionString}` }, + { name: 'iOS deeplink', link: `kolektivo://wallet/wc?uri=${actionString}` }, { name: 'iOS universal link', link: `https://valoraapp.com/wc?uri=${actionString}` }, ] for (const { name, link } of actionLinks) { @@ -233,7 +233,7 @@ describe('App saga', () => { describe(handleOpenUrl, () => { const httpLink = 'http://example.com' const httpsLink = 'https://example.com' - const celoLink = 'celo://something' + const celoLink = 'kolektivo://something' const otherDeepLink = 'other://deeplink' describe('when openExternal is `false` or not specified', () => { @@ -367,7 +367,7 @@ describe('App saga', () => { handleOpenDapp, dappSelected({ ...baseDapp, - dappUrl: 'celo://wallet/bidali', + dappUrl: 'kolektivo://wallet/bidali', openedFrom: DappSection.All, }) ) diff --git a/src/config.ts b/src/config.ts index cd5cda302b1..eac045b95de 100644 --- a/src/config.ts +++ b/src/config.ts @@ -131,8 +131,8 @@ export const SIMPLEX_URI = 'https://valoraapp.com/simplex' export const SIMPLEX_FEES_URL = 'https://support.simplex.com/hc/en-gb/articles/360014078420-What-fees-am-I-paying-' -export const CASH_IN_SUCCESS_DEEPLINK = 'celo://wallet/cash-in-success' -export const CASH_IN_FAILURE_DEEPLINK = 'celo://wallet/cash-in-failure' +export const CASH_IN_SUCCESS_DEEPLINK = 'kolektivo://wallet/cash-in-success' +export const CASH_IN_FAILURE_DEEPLINK = 'kolektivo://wallet/cash-in-failure' export const APP_STORE_ID = Config.APP_STORE_ID export const DYNAMIC_DOWNLOAD_LINK = Config.DYNAMIC_DOWNLOAD_LINK diff --git a/src/dappsExplorer/DAppsExplorerScreen.test.tsx b/src/dappsExplorer/DAppsExplorerScreen.test.tsx index a7cab675f87..603ebdf25f0 100644 --- a/src/dappsExplorer/DAppsExplorerScreen.test.tsx +++ b/src/dappsExplorer/DAppsExplorerScreen.test.tsx @@ -35,7 +35,7 @@ const mockResponseWithoutFeaturedDapp = { categoryId: '2', description: 'Lend and borrow tokens!', logoUrl: 'https://raw.githubusercontent.com/valora-inc/app-list/main/assets/moola.png', - url: 'celo://wallet/moolaScreen', + url: 'kolektivo://wallet/moolaScreen', }, ], } @@ -164,7 +164,7 @@ describe(DAppsExplorerScreen, () => { Object { "dapp": Object { "categoryId": "2", - "dappUrl": "celo://wallet/moolaScreen", + "dappUrl": "kolektivo://wallet/moolaScreen", "description": "Lend and borrow tokens!", "iconUrl": "https://raw.githubusercontent.com/valora-inc/app-list/main/assets/moola.png", "id": "2", diff --git a/src/fiatExchanges/SimplexScreen.tsx b/src/fiatExchanges/SimplexScreen.tsx index d5d8b21e369..9e49683cebb 100644 --- a/src/fiatExchanges/SimplexScreen.tsx +++ b/src/fiatExchanges/SimplexScreen.tsx @@ -49,7 +49,7 @@ function SimplexScreen({ route, navigation }: Props) { const onNavigationStateChange = ({ url }: any) => { if (url?.includes('/payments/new')) { setRedirected(true) - } else if (url?.startsWith('celo://wallet')) { + } else if (url?.startsWith('kolektivo://wallet')) { navigateToURI(url) } } diff --git a/src/firebase/notifications.test.ts b/src/firebase/notifications.test.ts index b03e1c09440..067af8c777b 100644 --- a/src/firebase/notifications.test.ts +++ b/src/firebase/notifications.test.ts @@ -80,7 +80,7 @@ describe(handleNotification, () => { describe("with a notification with an 'open url' semantic and a deep link", () => { const message = { notification: { title: 'My title', body: 'My Body' }, - data: { ou: `celo://wallet/openScreen?screen=${Screens.WalletHome}` }, + data: { ou: `kolektivo://wallet/openScreen?screen=${Screens.WalletHome}` }, } it('fires an event to open the deep link', async () => { diff --git a/src/qrcode/schema.test.ts b/src/qrcode/schema.test.ts index 306db001637..7889cef3301 100644 --- a/src/qrcode/schema.test.ts +++ b/src/qrcode/schema.test.ts @@ -93,12 +93,12 @@ describe('qrcode/schema', () => { describe('#urlFromUriData', () => { it('should strip undefined values', () => { - expect(url1).toBe(`celo://wallet/pay?address=${data1.address}`) + expect(url1).toBe(`kolektivo://wallet/pay?address=${data1.address}`) }) it('should include defined values', () => { const params = new URLSearchParams(Object(data2)) - expect(url2).toBe(encodeURI(`celo://wallet/pay?${params.toString()}`)) + expect(url2).toBe(encodeURI(`kolektivo://wallet/pay?${params.toString()}`)) }) }) diff --git a/src/qrcode/schema.ts b/src/qrcode/schema.ts index 338fe5cd8ce..52eed2c73d2 100644 --- a/src/qrcode/schema.ts +++ b/src/qrcode/schema.ts @@ -41,5 +41,5 @@ export const stripUndefined = (obj: object) => JSON.parse(JSON.stringify(obj)) export const urlFromUriData = (data: Partial, method: UriMethod = UriMethod.pay) => { const params = new URLSearchParams(stripUndefined(data)) - return encodeURI(`celo://wallet/${method.toString()}?${params.toString()}`) + return encodeURI(`kolektivo://wallet/${method.toString()}?${params.toString()}`) } diff --git a/src/qrcode/utils.ts b/src/qrcode/utils.ts index ed286224981..630bc890dc4 100644 --- a/src/qrcode/utils.ts +++ b/src/qrcode/utils.ts @@ -117,7 +117,7 @@ export function* handleBarcode( yield call(initialiseWalletConnect, barcode.data, WalletConnectPairingOrigin.Scan) return } - if (barcode.data.startsWith('celo://wallet/payment')) { + if (barcode.data.startsWith('kolektivo://wallet/payment')) { const handler: PaymentDeepLinkHandler = yield select(paymentDeepLinkHandlerSelector) yield call(paymentDeepLinkHandlers[handler], barcode.data) return diff --git a/src/walletConnect/walletConnect.ts b/src/walletConnect/walletConnect.ts index f9328d75184..79453228f7d 100644 --- a/src/walletConnect/walletConnect.ts +++ b/src/walletConnect/walletConnect.ts @@ -14,9 +14,9 @@ import { initialiseWalletConnect } from 'src/walletConnect/saga' import { selectHasPendingState } from 'src/walletConnect/selectors' const WC_PREFIX = 'wc:' -const DEEPLINK_PREFIX = 'celo://wallet/wc?uri=' -const UNIVERSAL_LINK_PREFIX = 'https://valoraapp.com/wc?uri=' -const UNIVERSAL_LINK_PREFIX_WITHOUT_URI = 'https://valoraapp.com/wc' +const DEEPLINK_PREFIX = 'kolektivo://wallet/wc?uri=' +const UNIVERSAL_LINK_PREFIX = 'https://kolektivo.app/wc?uri=' +const UNIVERSAL_LINK_PREFIX_WITHOUT_URI = 'https://kolektivo.app/wc' const CONNECTION_TIMEOUT = 10_000 /**