diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7f60c3df36..fdf0204d9a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -60,7 +60,12 @@ - + + + + + + 4.0) - FirebaseInstanceID (~> 2.0) - - GoogleToolboxForMac/NSData+zlib (~> 2.1) + - "GoogleToolboxForMac/NSData+zlib (~> 2.1)" - FirebaseCore (4.0.2): - - GoogleToolboxForMac/NSData+zlib (~> 2.1) + - "GoogleToolboxForMac/NSData+zlib (~> 2.1)" - FirebaseInstanceID (2.0.0): - FirebaseCore (~> 4.0) - FirebaseMessaging (2.0.0): @@ -16,30 +16,44 @@ PODS: - GoogleToolboxForMac/Defines (2.1.1) - GoogleToolboxForMac/Logger (2.1.1): - GoogleToolboxForMac/Defines (= 2.1.1) - - GoogleToolboxForMac/NSData+zlib (2.1.1): + - "GoogleToolboxForMac/NSData+zlib (2.1.1)": - GoogleToolboxForMac/Defines (= 2.1.1) - Protobuf (3.3.0) - - React (0.53.3): - - React/Core (= 0.53.3) + - React (0.55.4): + - React/Core (= 0.55.4) - react-native-background-timer (2.0.0): - React - - React/Core (0.53.3): - - yoga (= 0.53.3.React) - - yoga (0.53.3.React) + - React/Core (0.55.4): + - yoga (= 0.55.4.React) + - RNKeychain (3.0.0-rc.3): + - React + - yoga (0.55.4.React) DEPENDENCIES: - FirebaseMessaging - React (from `../node_modules/react-native`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) + - RNKeychain (from `../node_modules/react-native-keychain`) - yoga (from `../node_modules/react-native/ReactCommon/yoga`) +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - FirebaseAnalytics + - FirebaseCore + - FirebaseInstanceID + - FirebaseMessaging + - GoogleToolboxForMac + - Protobuf + EXTERNAL SOURCES: React: - :path: ../node_modules/react-native + :path: "../node_modules/react-native" react-native-background-timer: - :path: ../node_modules/react-native-background-timer + :path: "../node_modules/react-native-background-timer" + RNKeychain: + :path: "../node_modules/react-native-keychain" yoga: - :path: ../node_modules/react-native/ReactCommon/yoga + :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: FirebaseAnalytics: 4d7040fefc3cd8b291cde35f12cf063d7963f15d @@ -48,10 +62,11 @@ SPEC CHECKSUMS: FirebaseMessaging: 227406c05b0dc9290702d2e9f18ab5528f0c2cf2 GoogleToolboxForMac: 8e329f1b599f2512c6b10676d45736bcc2cbbeb0 Protobuf: d582fecf68201eac3d79ed61369ef45734394b9c - React: fd20e9486c9d994fb6e40d6e67dbd29c7709889c - react-native-background-timer: 10063c04bf85d7f8811dff8c74399f0aa715245f - yoga: c7c8e64dbc2552b1ceac0b491ff03f5e5128b501 + React: aa2040dbb6f317b95314968021bd2888816e03d5 + react-native-background-timer: 63dcbf37dbcf294b5c6c071afcdc661fa06a7594 + RNKeychain: 627c6095cef215dd3d9804a9a9cf45ab96aa3997 + yoga: a23273df0088bf7f2bb7e5d7b00044ea57a2a54a -PODFILE CHECKSUM: 653ad2d673bf8aa8127325a078e07aedc8dbe463 +PODFILE CHECKSUM: 58fa7be75df3ece53c570dbd30d721f4b6d77137 -COCOAPODS: 1.3.1 +COCOAPODS: 1.5.3 diff --git a/ios/StatusIm.xcodeproj/project.pbxproj b/ios/StatusIm.xcodeproj/project.pbxproj index b2da131f4c..f43acf1d3a 100644 --- a/ios/StatusIm.xcodeproj/project.pbxproj +++ b/ios/StatusIm.xcodeproj/project.pbxproj @@ -5,6 +5,7 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; @@ -57,6 +58,7 @@ 9EE89E271E03FCB7007D3C25 /* libSplashScreen.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7F21DE718EF00D694FF /* libSplashScreen.a */; }; 9EE89E2D1E03FD9F007D3C25 /* libimageCropPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20A5C9531D927137002C4965 /* libimageCropPicker.a */; }; 9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; }; + AB96C730942E49178F59AE6F /* libRNSecureRandom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1464A9A9E12F45068947C28F /* libRNSecureRandom.a */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; B23B48FF1E76917B006D4535 /* RobotoMono-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B23B48FE1E76917B006D4535 /* RobotoMono-Medium.ttf */; }; B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FC1DE7195700D694FF /* Social.framework */; }; @@ -71,7 +73,6 @@ E0AD9E8F495A4907B65104BF /* libRCTImageResizer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BEE3436791D42248F853999 /* libRCTImageResizer.a */; }; F9238D6C1E5F055900C047B9 /* SF-UI-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F9238D6B1E5F055900C047B9 /* SF-UI-Text-Semibold.otf */; }; FD4F213C3873473CB703B1D2 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 674B3D9595A047AB8D518F4E /* libRNFS.a */; }; - AB96C730942E49178F59AE6F /* libRNSecureRandom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1464A9A9E12F45068947C28F /* libRNSecureRandom.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -327,6 +328,13 @@ remoteGlobalIDString = B29EC9CC1E48BED600704A36; remoteInfo = RCTHttpServer; }; + C20F3A6E20E5165B00757214 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AF409BB755B94FB1BBA01927 /* RNSecureRandom.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNSecureRandom; + }; C90047CC1FC47AF50002B8EA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; @@ -537,6 +545,7 @@ 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = StatusIm/AppDelegate.m; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = StatusIm/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = StatusIm/main.m; sourceTree = ""; }; + 1464A9A9E12F45068947C28F /* libRNSecureRandom.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSecureRandom.a; sourceTree = ""; }; 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 1E74DC52A1E449A2BA858B14 /* RNSVG.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; }; 2028DFF51D4275B600227DCD /* SF-UI-Display-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Medium.otf"; sourceTree = ""; }; @@ -587,6 +596,7 @@ ACA66A8F16CD2FE21F38738B /* Pods-StatusIm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm.debug.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm.debug.xcconfig"; sourceTree = ""; }; ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; AF2BF381BC7B4EB0887F0091 /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = ""; }; + AF409BB755B94FB1BBA01927 /* RNSecureRandom.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSecureRandom.xcodeproj; path = "../node_modules/react-native-securerandom/ios/RNSecureRandom.xcodeproj"; sourceTree = ""; }; B23B48FE1E76917B006D4535 /* RobotoMono-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "RobotoMono-Medium.ttf"; sourceTree = ""; }; B24FC7FC1DE7195700D694FF /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; }; B24FC7FE1DE7195F00D694FF /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; @@ -604,8 +614,6 @@ F89A8F8005874B86B63C22E3 /* RNFIRMessaging.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFIRMessaging.xcodeproj; path = "../node_modules/react-native-fcm/ios/RNFIRMessaging.xcodeproj"; sourceTree = ""; }; F9238D6B1E5F055900C047B9 /* SF-UI-Text-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Semibold.otf"; sourceTree = ""; }; FC1CBCFE6C906043D6CCEEE1 /* libPods-StatusImTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-StatusImTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - AF409BB755B94FB1BBA01927 /* RNSecureRandom.xcodeproj */ = {isa = PBXFileReference; name = "RNSecureRandom.xcodeproj"; path = "../node_modules/react-native-securerandom/ios/RNSecureRandom.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; - 1464A9A9E12F45068947C28F /* libRNSecureRandom.a */ = {isa = PBXFileReference; name = "libRNSecureRandom.a"; path = "libRNSecureRandom.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1083,6 +1091,14 @@ name = Products; sourceTree = ""; }; + C20F3A6B20E5165A00757214 /* Products */ = { + isa = PBXGroup; + children = ( + C20F3A6F20E5165B00757214 /* libRNSecureRandom.a */, + ); + name = Products; + sourceTree = ""; + }; C90047C11FC47AF30002B8EA /* Recovered References */ = { isa = PBXGroup; children = ( @@ -1098,6 +1114,7 @@ 4EC426A98043452BB6F9C134 /* libRNInstabug.a */, AF2BF381BC7B4EB0887F0091 /* libRNSVG.a */, 7F752F17B1E04216B1337A72 /* libRNFIRMessaging.a */, + 1464A9A9E12F45068947C28F /* libRNSecureRandom.a */, ); name = "Recovered References"; sourceTree = ""; @@ -1121,8 +1138,6 @@ 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - 1986C962445001A2631E6AB0 /* [CP] Embed Pods Frameworks */, - 967469AF8BA27D5CEC47B13C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1138,15 +1153,13 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "StatusIm" */; buildPhases = ( - 74D5DDAF20DA55D6002897BC /* ShellScript */, 2EAC54E16AB243C3EBBFE1BA /* [CP] Check Pods Manifest.lock */, + 74D5DDAF20DA55D6002897BC /* ShellScript */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 20B6B6891D92C42700CC5C6A /* Embed Frameworks */, - 9E71BA90038083A3D24E18E9 /* [CP] Embed Pods Frameworks */, - E883D1F9B22B8292CC879292 /* [CP] Copy Pods Resources */, E3914A731DF919ED00EBB515 /* Run Script */, C5A3444E637B7B715148AD1B /* Embed Instabug Framework */, D286FF71BA61530E740B7C82 /* Strip Frameworks */, @@ -1187,6 +1200,9 @@ com.apple.Push = { enabled = 1; }; + com.apple.SafariKeychain = { + enabled = 1; + }; }; }; }; @@ -1307,6 +1323,10 @@ ProductGroup = 9E3F1BE31DDAE781005E4779 /* Products */; ProjectRef = F3548417D8DA4362B6796A54 /* RNInstabug.xcodeproj */; }, + { + ProductGroup = C20F3A6B20E5165A00757214 /* Products */; + ProjectRef = AF409BB755B94FB1BBA01927 /* RNSecureRandom.xcodeproj */; + }, { ProductGroup = 92925B361F571DE600203EEB /* Products */; ProjectRef = 1E74DC52A1E449A2BA858B14 /* RNSVG.xcodeproj */; @@ -1574,6 +1594,13 @@ remoteRef = B2DEA0B01E49E32000FA28D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + C20F3A6F20E5165B00757214 /* libRNSecureRandom.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNSecureRandom.a; + remoteRef = C20F3A6E20E5165B00757214 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; C90047CD1FC47AF50002B8EA /* libRCTBlob-tvOS.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1781,21 +1808,6 @@ shellPath = /bin/sh; shellScript = "set -o errexit\nexport NODE_BINARY=\"node --max-old-space-size=4096\"\n../node_modules/react-native/scripts/react-native-xcode.sh"; }; - 1986C962445001A2631E6AB0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StatusImTests/Pods-StatusImTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 2EAC54E16AB243C3EBBFE1BA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1844,40 +1856,6 @@ shellPath = /bin/sh; shellScript = "echo \"RN-PATCH: Checking if iOS React patch is applied...\"\n\nif cmp ${PROJECT_DIR}/../react-native-patches/RCTUITextView.m ${PROJECT_DIR}/../node_modules/react-native/Libraries/Text/TextInput/Multiline/RCTUITextView.m; then\n echo \"RN-PARCH: Patch was successfully applied\"\nelse\n echo \"RN-PATCH: Patch was NOT successfully applied\"\n exit 1\nfi"; }; - 967469AF8BA27D5CEC47B13C /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StatusImTests/Pods-StatusImTests-resources.sh\"\n"; - }; - 9E71BA90038083A3D24E18E9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-frameworks.sh", - "${PODS_ROOT}/Instabug/Instabug.framework", - "${PODS_ROOT}/Instabug/Instabug.framework.dSYM", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Instabug.framework", - "${DWARF_DSYM_FOLDER_PATH}/Instabug.framework.dSYM", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; D286FF71BA61530E740B7C82 /* Strip Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1906,24 +1884,6 @@ shellPath = /bin/sh; shellScript = "#!/bin/bash\n\nsource \"${PROJECT_DIR}/scripts/set_xcode_version.sh\""; }; - E883D1F9B22B8292CC879292 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh", - "${PODS_ROOT}/Instabug/Instabug.framework/Instabug.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -2088,6 +2048,7 @@ "$(SRCROOT)/../node_modules/react-native-fcm/ios", "$(SRCROOT)/../node_modules/react-native-testfairy/ios", "$(SRCROOT)/../node_modules/react-native-securerandom/ios", + "$(SRCROOT)/../node_modules/react-native/Libraries/LinkingIOS", ); INFOPLIST_FILE = StatusIm/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -2150,6 +2111,7 @@ "$(SRCROOT)/../node_modules/react-native-fcm/ios", "$(SRCROOT)/../node_modules/react-native-testfairy/ios", "$(SRCROOT)/../node_modules/react-native-securerandom/ios", + "$(SRCROOT)/../node_modules/react-native/Libraries/LinkingIOS", ); INFOPLIST_FILE = StatusIm/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; diff --git a/ios/StatusIm/AppDelegate.m b/ios/StatusIm/AppDelegate.m index cd9de5cf71..afaed3a520 100644 --- a/ios/StatusIm/AppDelegate.m +++ b/ios/StatusIm/AppDelegate.m @@ -17,6 +17,7 @@ #import "SplashScreen.h" #import "TestFairy.h" #import "RNFIRMessaging.h" +#import "RCTLinkingManager.h" @implementation AppDelegate @@ -119,4 +120,20 @@ RCTLogFunction RCTTestFairyLogFunction = ^( [RNFIRMessaging didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; } +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options:(NSDictionary *)options +{ + return [RCTLinkingManager application:application openURL:url options:options]; +} + + +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity + restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler +{ + return [RCTLinkingManager application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler]; +} + @end diff --git a/ios/StatusIm/Info.plist b/ios/StatusIm/Info.plist index cbaa01d5dc..7b7e1b6893 100644 --- a/ios/StatusIm/Info.plist +++ b/ios/StatusIm/Info.plist @@ -1,95 +1,106 @@ - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - $(CUSTOM_PRODUCT_NAME) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER)$(BUNDLE_ID_SUFFIX) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSApplicationQueriesSchemes - - whatsapp - - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSExceptionDomains - - api.status.im - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - - localhost - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - - - - NSCameraUsageDescription - We need to access your camera - NSContactsUsageDescription - We need to access your contacts - NSLocationWhenInUseUsageDescription - - NSMicrophoneUsageDescription - Need microphone access for Instabug and Audio Messages - NSPhotoLibraryUsageDescription - We need to access your photo storage to give you an ability to select photos - UIAppFonts - - RobotoMono-Medium.ttf - SF-UI-Text-Semibold.otf - SF-UI-Text-Bold.otf - SF-UI-Text-Regular.otf - SF-UI-Text-Medium.otf - SF-UI-Text-Light.otf - SF-UI-Display-Medium.otf - SF-UI-Display-Regular.otf - SF-UI-Display-Semibold.otf - SF-UI-Display-Thin.otf - Entypo.ttf - EvilIcons.ttf - FontAwesome.ttf - Foundation.ttf - Ionicons.ttf - MaterialIcons.ttf - Octicons.ttf - Zocial.ttf - - UIBackgroundModes - - remote-notification - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UIViewControllerBasedStatusBarAppearance - - + + CFBundleURLTypes + + + CFBundleURLName + im.status.ethereum.applink + CFBundleURLSchemes + + status-im + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + $(CUSTOM_PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER)$(BUNDLE_ID_SUFFIX) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationQueriesSchemes + + whatsapp + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + api.status.im + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + localhost + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + + + NSCameraUsageDescription + We need to access your camera + NSContactsUsageDescription + We need to access your contacts + NSLocationWhenInUseUsageDescription + + NSMicrophoneUsageDescription + Need microphone access for Instabug and Audio Messages + NSPhotoLibraryUsageDescription + We need to access your photo storage to give you an ability to select photos + UIAppFonts + + RobotoMono-Medium.ttf + SF-UI-Text-Semibold.otf + SF-UI-Text-Bold.otf + SF-UI-Text-Regular.otf + SF-UI-Text-Medium.otf + SF-UI-Text-Light.otf + SF-UI-Display-Medium.otf + SF-UI-Display-Regular.otf + SF-UI-Display-Semibold.otf + SF-UI-Display-Thin.otf + Entypo.ttf + EvilIcons.ttf + FontAwesome.ttf + Foundation.ttf + Ionicons.ttf + MaterialIcons.ttf + Octicons.ttf + Zocial.ttf + + UIBackgroundModes + + remote-notification + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UIViewControllerBasedStatusBarAppearance + + diff --git a/ios/StatusIm/StatusIm.entitlements b/ios/StatusIm/StatusIm.entitlements index d8b440bcd4..0af9283b44 100644 --- a/ios/StatusIm/StatusIm.entitlements +++ b/ios/StatusIm/StatusIm.entitlements @@ -4,6 +4,10 @@ aps-environment development + com.apple.developer.associated-domains + + applinks:get.status.im + keychain-access-groups $(AppIdentifierPrefix)im.status.ethereum diff --git a/src/status_im/utils/universal_links/core.cljs b/src/status_im/utils/universal_links/core.cljs index 5160502be6..5ae486a955 100644 --- a/src/status_im/utils/universal_links/core.cljs +++ b/src/status_im/utils/universal_links/core.cljs @@ -19,13 +19,15 @@ (defn universal-link? [url] (boolean - (re-matches #"^(app|http|https)://get.status.im/.*$" url))) + (re-matches #"((^https?://get.status.im/)|(^status-im://)).*$" url))) (defn open! [url] (log/info "universal-links: opening " url) (if-let [dapp-url (match-url url browse-regex)] (list-selection/browse-dapp dapp-url) - (.openURL react/linking url))) + ;; We need to dispatch here, we can't openURL directly + ;; as it is opened in safari on iOS + (re-frame/dispatch [:handle-universal-link url]))) (defn handle-browse [url cofx] (log/info "universal-links: handling browse " url) diff --git a/test/cljs/status_im/test/utils/universal_links/core.cljs b/test/cljs/status_im/test/utils/universal_links/core.cljs index 7362bb1c77..edf2e16b5e 100644 --- a/test/cljs/status_im/test/utils/universal_links/core.cljs +++ b/test/cljs/status_im/test/utils/universal_links/core.cljs @@ -17,25 +17,25 @@ [:db :universal-links/url])))) (testing "a public chat link" (testing "it joins the chat" - (is (get-in (links/handle-url "app://get.status.im/chat/public/status" + (is (get-in (links/handle-url "status-im://chat/public/status" {:db db}) [:db :chats "status"])))) (testing "a browse dapp link" (testing "it open the dapps" (is - (= "app://get.status.im/browse/www.cryptokitties.co" - (:browse (links/handle-url "app://get.status.im/browse/www.cryptokitties.co" + (= "status-im://browse/www.cryptokitties.co" + (:browse (links/handle-url "status-im://browse/www.cryptokitties.co" {:db db})))))) (testing "a user profile link" (testing "it loads the profile" - (let [actual (links/handle-url "app://get.status.im/user/profile-id" + (let [actual (links/handle-url "status-im://user/profile-id" {:db db})] (is (= "profile-id" (get-in actual [:db :contacts/identity]))) (is (= :profile (get-in actual [:db :view-id])))))) (testing "a not found url" (testing "it does nothing" - (is (nil? (links/handle-url "app://get.status.im/not-existing" + (is (nil? (links/handle-url "status-im://not-existing" {:db db})))))))) (deftest url-event-listener @@ -53,16 +53,16 @@ (is (= nil @actual))))))) (deftest universal-link-test - (testing "app://get.status.im/blah" + (testing "status-im://blah" (testing "it returns true" - (is (links/universal-link? "app://get.status.im/blah")))) + (is (links/universal-link? "status-im://blah")))) (testing "http://get.status.im/blah" (testing "it returns true" (is (links/universal-link? "http://get.status.im/blah")))) (testing "https://get.status.im/blah" (testing "it returns true" (is (links/universal-link? "https://get.status.im/blah")))) - (testing "app://not.status.im/blah" + (testing "not-status-im://blah" (testing "it returns false" (is (not (links/universal-link? "https://not.status.im/blah"))))) (testing "http://not.status.im/blah"