[#3593] Hide passphrase field during TestFairy session

Switch to react-native version of TestFairy

Signed-off-by: Dmitry Novotochinov <trybeee@gmail.com>
This commit is contained in:
Dmitry Novotochinov 2018-03-23 17:17:53 +03:00
parent 05dd8eba2a
commit 6786123765
No known key found for this signature in database
GPG Key ID: 267674DCC86628D9
21 changed files with 92 additions and 371 deletions

1
.env
View File

@ -15,3 +15,4 @@ POW_TARGET=0.001
POW_TIME=1 POW_TIME=1
MIXPANEL_TOKEN=3f2e1a8970f159aa2a3d5dc5d65eab38 MIXPANEL_TOKEN=3f2e1a8970f159aa2a3d5dc5d65eab38
DEFAULT_NETWORK=testnet_rpc DEFAULT_NETWORK=testnet_rpc
TESTFAIRY_TOKEN=969f6c921cb435cea1d41d1ea3f5b247d6026d55

View File

@ -12,6 +12,7 @@ MANY_WHISPER_TOPICS_ENABLED=0
RN_BRIDGE_THRESHOLD_WARNINGS=0 RN_BRIDGE_THRESHOLD_WARNINGS=0
COMPILE_VIEWS_ENABLED=0 COMPILE_VIEWS_ENABLED=0
MIXPANEL_TOKEN=3f2e1a8970f159aa2a3d5dc5d65eab38 MIXPANEL_TOKEN=3f2e1a8970f159aa2a3d5dc5d65eab38
TESTFAIRY_TOKEN=969f6c921cb435cea1d41d1ea3f5b247d6026d55
POW_TARGET=0.001 POW_TARGET=0.001
POW_TIME=1 POW_TIME=1
DEFAULT_NETWORK=testnet_rpc DEFAULT_NETWORK=testnet_rpc

View File

@ -12,6 +12,7 @@ MANY_WHISPER_TOPICS_ENABLED=0
RN_BRIDGE_THRESHOLD_WARNINGS=0 RN_BRIDGE_THRESHOLD_WARNINGS=0
COMPILE_VIEWS_ENABLED=0 COMPILE_VIEWS_ENABLED=0
MIXPANEL_TOKEN=2584e00100d319d12e538cc4d0fa9fc1 MIXPANEL_TOKEN=2584e00100d319d12e538cc4d0fa9fc1
TESTFAIRY_TOKEN=969f6c921cb435cea1d41d1ea3f5b247d6026d55
POW_TARGET=0.2 POW_TARGET=0.2
POW_TIME=1 POW_TIME=1
DEFAULT_NETWORK=testnet_rpc DEFAULT_NETWORK=testnet_rpc

View File

@ -44,7 +44,8 @@
"rn-snoopy/stream/buffer", "rn-snoopy/stream/buffer",
"react-native/Libraries/vendor/emitter/EventEmitter", "react-native/Libraries/vendor/emitter/EventEmitter",
"react-native-background-timer", "react-native-background-timer",
"react-native-fetch-polyfill" "react-native-fetch-polyfill",
"react-native-testfairy"
], ],
"imageDirs": [ "imageDirs": [
"resources/images" "resources/images"

View File

@ -206,10 +206,10 @@ dependencies {
implementation project(':react-native-fs') implementation project(':react-native-fs')
implementation project(':react-native-image-crop-picker') implementation project(':react-native-image-crop-picker')
implementation project(':react-native-webview-bridge') implementation project(':react-native-webview-bridge')
implementation 'testfairy:testfairy-android-sdk:1.+@aar'
implementation project(':react-native-config') implementation project(':react-native-config')
implementation project(':react-native-fcm') implementation project(':react-native-fcm')
implementation 'com.google.firebase:firebase-core:10.0.1' //this decides your firebase SDK version implementation 'com.google.firebase:firebase-core:10.0.1' //this decides your firebase SDK version
compile project(':react-native-testfairy')
implementation 'status-im:function:0.0.1' implementation 'status-im:function:0.0.1'
implementation fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"]) implementation fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"])

View File

@ -24,6 +24,7 @@ import fr.bamlab.rnimageresizer.ImageResizerPackage;
import im.status.ethereum.module.StatusPackage; import im.status.ethereum.module.StatusPackage;
import io.realm.react.RealmReactPackage; import io.realm.react.RealmReactPackage;
import me.alwx.HttpServer.HttpServerReactPackage; import me.alwx.HttpServer.HttpServerReactPackage;
import com.testfairy.react.TestFairyPackage;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -69,6 +70,7 @@ public class MainApplication extends MultiDexApplication implements ReactApplica
new ReactNativeDialogsPackage(), new ReactNativeDialogsPackage(),
new ImageResizerPackage(), new ImageResizerPackage(),
new PickerPackage(), new PickerPackage(),
new TestFairyPackage(),
new WebViewBridgePackage(BuildConfig.DEBUG, callRPC), new WebViewBridgePackage(BuildConfig.DEBUG, callRPC),
new ReactNativeConfigPackage() new ReactNativeConfigPackage()
)); ));

View File

@ -35,4 +35,6 @@ project(':react-native-image-crop-picker').projectDir = new File(settingsDir, '.
include ':react-native-webview-bridge' include ':react-native-webview-bridge'
project(':react-native-webview-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview-bridge/android') project(':react-native-webview-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview-bridge/android')
include ':react-native-config' include ':react-native-config'
project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android') project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android')
include ':react-native-testfairy'
project(':react-native-testfairy').projectDir = new File(settingsDir, '../node_modules/react-native-testfairy/android')

View File

@ -46,10 +46,9 @@
925C1F4C1F7B73B20063DFA0 /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F451F7B73B20063DFA0 /* nanopb.framework */; }; 925C1F4C1F7B73B20063DFA0 /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F451F7B73B20063DFA0 /* nanopb.framework */; };
925C1F811F7B73C00063DFA0 /* FirebaseMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */; }; 925C1F811F7B73C00063DFA0 /* FirebaseMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */; };
92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */; }; 92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */; };
98482A6F2065257B00263651 /* libReactNativeTestFairy.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9880471C20650CBC00CEBFE0 /* libReactNativeTestFairy.a */; };
9E0B01A11DDC5DA7002B0359 /* SF-UI-Text-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9E0B01A01DDC5DA7002B0359 /* SF-UI-Text-Light.otf */; }; 9E0B01A11DDC5DA7002B0359 /* SF-UI-Text-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9E0B01A01DDC5DA7002B0359 /* SF-UI-Text-Light.otf */; };
9E3AB6D01D87DB2B008846B4 /* libReact-Native-Webview-Bridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E3AB6C61D87DA2B008846B4 /* libReact-Native-Webview-Bridge.a */; }; 9E3AB6D01D87DB2B008846B4 /* libReact-Native-Webview-Bridge.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E3AB6C61D87DA2B008846B4 /* libReact-Native-Webview-Bridge.a */; };
9E54D6001F17A5DB009F0C16 /* libTestFairy.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E54D5FD1F17A5DB009F0C16 /* libTestFairy.a */; };
9E54D6011F17A5DB009F0C16 /* upload-dsym.sh in Resources */ = {isa = PBXBuildFile; fileRef = 9E54D5FF1F17A5DB009F0C16 /* upload-dsym.sh */; };
9E7C64731E03FDDE004C7042 /* libRCTCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20B7D1151D3F74CD00B70F14 /* libRCTCamera.a */; }; 9E7C64731E03FDDE004C7042 /* libRCTCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20B7D1151D3F74CD00B70F14 /* libRCTCamera.a */; };
9ED2F45E1D9D535A00B36508 /* SF-UI-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9ED2F45D1D9D52DD00B36508 /* SF-UI-Text-Regular.otf */; }; 9ED2F45E1D9D535A00B36508 /* SF-UI-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9ED2F45D1D9D52DD00B36508 /* SF-UI-Text-Regular.otf */; };
9ED2F45F1D9D535A00B36508 /* SF-UI-Text-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9ED2F45C1D9D52C100B36508 /* SF-UI-Text-Medium.otf */; }; 9ED2F45F1D9D535A00B36508 /* SF-UI-Text-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9ED2F45C1D9D52C100B36508 /* SF-UI-Text-Medium.otf */; };
@ -234,6 +233,13 @@
remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C;
remoteInfo = RNSVG; remoteInfo = RNSVG;
}; };
9880471B20650CBC00CEBFE0 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9880471720650CBC00CEBFE0 /* ReactNativeTestFairy.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 42959838203B471F00E34882;
remoteInfo = ReactNativeTestFairy;
};
9E3AB6C51D87DA2B008846B4 /* PBXContainerItemProxy */ = { 9E3AB6C51D87DA2B008846B4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 9E3AB6B21D87DA2A008846B4 /* React-Native-Webview-Bridge.xcodeproj */; containerPortal = 9E3AB6B21D87DA2A008846B4 /* React-Native-Webview-Bridge.xcodeproj */;
@ -562,11 +568,9 @@
925C1F451F7B73B20063DFA0 /* nanopb.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = nanopb.framework; sourceTree = "<group>"; }; 925C1F451F7B73B20063DFA0 /* nanopb.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = nanopb.framework; sourceTree = "<group>"; };
925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMessaging.framework; sourceTree = "<group>"; }; 925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMessaging.framework; sourceTree = "<group>"; };
92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
9880471720650CBC00CEBFE0 /* ReactNativeTestFairy.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeTestFairy.xcodeproj; path = "../node_modules/react-native-testfairy/ios/ReactNativeTestFairy.xcodeproj"; sourceTree = "<group>"; };
9E0B01A01DDC5DA7002B0359 /* SF-UI-Text-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Light.otf"; sourceTree = "<group>"; }; 9E0B01A01DDC5DA7002B0359 /* SF-UI-Text-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Light.otf"; sourceTree = "<group>"; };
9E3AB6B21D87DA2A008846B4 /* React-Native-Webview-Bridge.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "React-Native-Webview-Bridge.xcodeproj"; path = "../node_modules/react-native-webview-bridge/ios/React-Native-Webview-Bridge.xcodeproj"; sourceTree = "<group>"; }; 9E3AB6B21D87DA2A008846B4 /* React-Native-Webview-Bridge.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "React-Native-Webview-Bridge.xcodeproj"; path = "../node_modules/react-native-webview-bridge/ios/React-Native-Webview-Bridge.xcodeproj"; sourceTree = "<group>"; };
9E54D5FD1F17A5DB009F0C16 /* libTestFairy.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFairy.a; sourceTree = "<group>"; };
9E54D5FE1F17A5DB009F0C16 /* TestFairy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFairy.h; sourceTree = "<group>"; };
9E54D5FF1F17A5DB009F0C16 /* upload-dsym.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "upload-dsym.sh"; sourceTree = "<group>"; };
9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWKWebView.xcodeproj; path = "../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView.xcodeproj"; sourceTree = "<group>"; }; 9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWKWebView.xcodeproj; path = "../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView.xcodeproj"; sourceTree = "<group>"; };
9ED2F45C1D9D52C100B36508 /* SF-UI-Text-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Medium.otf"; sourceTree = "<group>"; }; 9ED2F45C1D9D52C100B36508 /* SF-UI-Text-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Medium.otf"; sourceTree = "<group>"; };
9ED2F45D1D9D52DD00B36508 /* SF-UI-Text-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Regular.otf"; sourceTree = "<group>"; }; 9ED2F45D1D9D52DD00B36508 /* SF-UI-Text-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Regular.otf"; sourceTree = "<group>"; };
@ -607,6 +611,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
98482A6F2065257B00263651 /* libReactNativeTestFairy.a in Frameworks */,
C93242561FE1C68C00FE7099 /* libRCTAnimation.a in Frameworks */, C93242561FE1C68C00FE7099 /* libRCTAnimation.a in Frameworks */,
4C16DE0C1F89508700AA10DB /* JavaScriptCore.framework in Frameworks */, 4C16DE0C1F89508700AA10DB /* JavaScriptCore.framework in Frameworks */,
B2DEA0D01E49E33300FA28D6 /* libRCTHttpServer.a in Frameworks */, B2DEA0D01E49E33300FA28D6 /* libRCTHttpServer.a in Frameworks */,
@ -644,7 +649,6 @@
BA68A2377A20496EA737000D /* libz.tbd in Frameworks */, BA68A2377A20496EA737000D /* libz.tbd in Frameworks */,
3E15DFEC1F6F4D7CAE088F49 /* libTcpSockets.a in Frameworks */, 3E15DFEC1F6F4D7CAE088F49 /* libTcpSockets.a in Frameworks */,
E0AD9E8F495A4907B65104BF /* libRCTImageResizer.a in Frameworks */, E0AD9E8F495A4907B65104BF /* libRCTImageResizer.a in Frameworks */,
9E54D6001F17A5DB009F0C16 /* libTestFairy.a in Frameworks */,
5F8585D411844E5981B94F40 /* libRNInstabug.a in Frameworks */, 5F8585D411844E5981B94F40 /* libRNInstabug.a in Frameworks */,
8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */, 8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */,
925C1F491F7B73B20063DFA0 /* FirebaseInstanceID.framework in Frameworks */, 925C1F491F7B73B20063DFA0 /* FirebaseInstanceID.framework in Frameworks */,
@ -740,9 +744,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
922C4CA61F4D5F8B0033C753 /* StatusIm.entitlements */, 922C4CA61F4D5F8B0033C753 /* StatusIm.entitlements */,
9E54D5FD1F17A5DB009F0C16 /* libTestFairy.a */,
9E54D5FE1F17A5DB009F0C16 /* TestFairy.h */,
9E54D5FF1F17A5DB009F0C16 /* upload-dsym.sh */,
B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */, B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */, 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
@ -890,6 +891,7 @@
832341AE1AAA6A7D00B99B32 /* Libraries */ = { 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
9880471720650CBC00CEBFE0 /* ReactNativeTestFairy.xcodeproj */,
9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */, 9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */,
B2DEA0A41E49E32000FA28D6 /* RCTHttpServer.xcodeproj */, B2DEA0A41E49E32000FA28D6 /* RCTHttpServer.xcodeproj */,
9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */, 9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */,
@ -978,6 +980,14 @@
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
9880471820650CBC00CEBFE0 /* Products */ = {
isa = PBXGroup;
children = (
9880471C20650CBC00CEBFE0 /* libReactNativeTestFairy.a */,
);
name = Products;
sourceTree = "<group>";
};
9E3AB6B31D87DA2A008846B4 /* Products */ = { 9E3AB6B31D87DA2A008846B4 /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -1262,6 +1272,10 @@
ProductGroup = 9EF083391F3B538A00876A8F /* Products */; ProductGroup = 9EF083391F3B538A00876A8F /* Products */;
ProjectRef = 9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */; ProjectRef = 9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */;
}, },
{
ProductGroup = 9880471820650CBC00CEBFE0 /* Products */;
ProjectRef = 9880471720650CBC00CEBFE0 /* ReactNativeTestFairy.xcodeproj */;
},
{ {
ProductGroup = 20B7D1251D3F74CD00B70F14 /* Products */; ProductGroup = 20B7D1251D3F74CD00B70F14 /* Products */;
ProjectRef = F090E261B9854867A728CE4F /* RealmReact.xcodeproj */; ProjectRef = F090E261B9854867A728CE4F /* RealmReact.xcodeproj */;
@ -1462,6 +1476,13 @@
remoteRef = 92925B671F571DE600203EEB /* PBXContainerItemProxy */; remoteRef = 92925B671F571DE600203EEB /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR; sourceTree = BUILT_PRODUCTS_DIR;
}; };
9880471C20650CBC00CEBFE0 /* libReactNativeTestFairy.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libReactNativeTestFairy.a;
remoteRef = 9880471B20650CBC00CEBFE0 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
9E3AB6C61D87DA2B008846B4 /* libReact-Native-Webview-Bridge.a */ = { 9E3AB6C61D87DA2B008846B4 /* libReact-Native-Webview-Bridge.a */ = {
isa = PBXReferenceProxy; isa = PBXReferenceProxy;
fileType = archive.ar; fileType = archive.ar;
@ -1738,7 +1759,6 @@
2028DFFC1D4275B600227DCD /* SF-UI-Display-Thin.otf in Resources */, 2028DFFC1D4275B600227DCD /* SF-UI-Display-Thin.otf in Resources */,
2028DFFB1D4275B600227DCD /* SF-UI-Display-Semibold.otf in Resources */, 2028DFFB1D4275B600227DCD /* SF-UI-Display-Semibold.otf in Resources */,
B23B48FF1E76917B006D4535 /* RobotoMono-Medium.ttf in Resources */, B23B48FF1E76917B006D4535 /* RobotoMono-Medium.ttf in Resources */,
9E54D6011F17A5DB009F0C16 /* upload-dsym.sh in Resources */,
B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */, B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */,
92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */, 92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */,
); );
@ -2033,6 +2053,7 @@
"$(SRCROOT)/../node_modules/react-native-config/ios/**", "$(SRCROOT)/../node_modules/react-native-config/ios/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**", "$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-fcm/ios", "$(SRCROOT)/../node_modules/react-native-fcm/ios",
"$(SRCROOT)/../node_modules/react-native-testfairy/ios",
); );
INFOPLIST_FILE = StatusIm/Info.plist; INFOPLIST_FILE = StatusIm/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -2090,6 +2111,7 @@
"$(SRCROOT)/../node_modules/react-native-config/ios/**", "$(SRCROOT)/../node_modules/react-native-config/ios/**",
"$(SRCROOT)/../node_modules/react-native-svg/ios/**", "$(SRCROOT)/../node_modules/react-native-svg/ios/**",
"$(SRCROOT)/../node_modules/react-native-fcm/ios", "$(SRCROOT)/../node_modules/react-native-fcm/ios",
"$(SRCROOT)/../node_modules/react-native-testfairy/ios",
); );
INFOPLIST_FILE = StatusIm/Info.plist; INFOPLIST_FILE = StatusIm/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 8.0;
@ -2138,8 +2160,8 @@
GCC_DYNAMIC_NO_PIC = NO; GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = StatusImPrefix.pch; GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = ( GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1", "DEBUG=1",
"$(inherited)", "$(inherited)",
@ -2204,8 +2226,8 @@
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = NO;
GCC_PREFIX_HEADER = StatusImPrefix.pch; GCC_PREFIX_HEADER = "";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNDECLARED_SELECTOR = YES;

View File

@ -95,10 +95,6 @@ RCTLogFunction RCTTestFairyLogFunction = ^(
self.window.rootViewController = rootViewController; self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible]; [self.window makeKeyAndVisible];
[SplashScreen show]; [SplashScreen show];
NSString *testfairyEnabled = [ReactNativeConfig envFor:@"TESTFAIRY_ENABLED"];
if([testfairyEnabled isEqualToString:@"1"]){
[TestFairy begin:@"969f6c921cb435cea1d41d1ea3f5b247d6026d55"];
}
[Instabug startWithToken:@"5534212f4a44f477c9ab270ab5cd2062" invocationEvent:IBGInvocationEventShake]; [Instabug startWithToken:@"5534212f4a44f477c9ab270ab5cd2062" invocationEvent:IBGInvocationEventShake];
[FIRApp configure]; [FIRApp configure];

View File

@ -1,9 +0,0 @@
#ifndef StatusIm_Prefix_pch
#define StatusIm_Prefix_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#import "TestFairy.h"
#define NSLog(s, ...) do { NSLog(s, ##__VA_ARGS__); TFLog(s, ##__VA_ARGS__); } while (0)
#endif /* StatusIm_Prefix_pch */

View File

@ -1,228 +0,0 @@
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#define TF_DEPRECATED(x) __attribute__ ((deprecated(x)))
@interface TestFairy: NSObject
/**
* Initialize a TestFairy session.
*
* @param appToken Your key as given to you in your TestFairy account
*/
+ (void)begin:(NSString *)appToken;
/**
* Initialize a TestFairy session with options.
*
* @param appToken Your key as given to you in your TestFairy account
* @param options A dictionary of options controlling the current session
*/
+ (void)begin:(NSString *)appToken withOptions:(NSDictionary *)options;
/**
* Change the server endpoint for use with on-premise hosting. Please
* contact support or sales for more information. Must be called before begin
*
* @param serverOverride server address for use with TestFairy
*/
+ (void)setServerEndpoint:(NSString *)serverOverride;
/**
* Returns SDK version (x.x.x) string
*
* @return version
*/
+ (NSString *)version;
/**
* Hides a specific view from appearing in the video generated.
*
* @param view The specific view you wish to hide from screenshots
*
*/
+ (void)hideView:(UIView *)view;
/**
* Hides a specific html element from appearing in your UIWebView
*
* @param selector The specific selector you wish to hide from screenshots. Multiple selectors can be comma separated
*/
+ (void)hideWebViewElements:(NSString *)selector;
/**
* Pushes the feedback view controller. Hook a button
* to this method to allow users to provide feedback about the current
* session. All feedback will appear in your build report page, and in
* the recorded session page.
*
*/
+ (void)pushFeedbackController;
/**
* Send a feedback on behalf of the user. Call when using a in-house
* feedback view controller with a custom design and feel. Feedback will
* be associated with the current session.
*
* @param feedbackString Feedback text
*/
+ (void)sendUserFeedback:(NSString *)feedbackString;
/**
* Proxy didUpdateLocation delegate values and these
* locations will appear in the recorded sessions. Useful for debugging
* actual long/lat values against what the user sees on screen.
*
* @param locations Array of CLLocation. The first object of the array will determine the user location
*/
+ (void)updateLocation:(NSArray *)locations;
/**
* Marks a checkpoint in session. Use this text to tag a session
* with a checkpoint name. Later you can filter sessions where your
* user passed through this checkpoint, for bettering understanding
* user experience and behavior.
*
* @param name The checkpoint name
*/
+ (void)checkpoint:(NSString *)name;
/**
* Sets a correlation identifier for this session. This value can
* be looked up via web dashboard. For example, setting correlation
* to the value of the user-id after they logged in. Can be called
* only once per session (subsequent calls will be ignored.)
*
* @param correlationId Id for the current session
*/
+ (void)setCorrelationId:(NSString *)correlationId TF_DEPRECATED("Please refer to setUser:");
/**
* Sets a correlation identifier for this session. This value can
* be looked up via web dashboard. For example, setting correlation
* to the value of the user-id after they logged in. Can be called
* only once per session (subsequent calls will be ignored.)
*
* @param correlationId Id for the current session
*/
+ (void)identify:(NSString *)correlationId TF_DEPRECATED("Please refer to setAttribute: and setUser:");
/**
* Sets a correlation identifier for this session. This value can
* be looked up via web dashboard. For example, setting correlation
* to the value of the user-id after they logged in. Can be called
* only once per session (subsequent calls will be ignored.)
*
* @param correlationId Id for the current session
* @param traits Attributes and custom attributes to be associated with this session
*/
+ (void)identify:(NSString *)correlationId traits:(NSDictionary *)traits TF_DEPRECATED("Please refer to setAttribute:");
/**
* Pauses the current session. This method stops recoding of
* the current session until resume has been called.
*
* @see resume
*/
+ (void)pause;
/**
* Resumes the recording of the current session. This method
* resumes a session after it was paused.
*
* @see pause
*/
+ (void)resume;
/**
* Returns the address of the recorded session on testfairy's
* developer portal. Will return nil if recording not yet started.
*
* @return session URL
*/
+ (NSString *)sessionUrl;
/**
* Takes a screenshot.
*
*/
+ (void)takeScreenshot;
/**
* Set the name of the current screen. Useful for single page
* applications which use a single UIViewController.
*
* @param name logic name of current screen
*/
+ (void)setScreenName:(NSString *)name;
/**
* Stops the current session recording. Unlike 'pause', when
* calling 'resume', a new session will be created and will be
* linked to the previous recording. Useful if you want short
* session recordings of specific use-cases of the app. Hidden
* views and user identity will be applied to the new session
* as well, if started.
*/
+ (void)stop;
/**
* Records a session level attribute which can be looked up via web dashboard.
*
* @param name The name of the attribute. Cannot be nil.
* @param value The value associated with the attribute. Cannot be nil.
* @return YES if successfully set attribute value, NO if failed with error in log.
*
* @note The SDK limits you to storing 64 named attributes. Adding more than 64 will fail and return NO.
*/
+ (BOOL)setAttribute:(NSString *)key withValue:(NSString *)value;
/**
* Records a user identified as an attribute. We recommend passing values such as
* email, phone number, or user id that your app may use.
*
* @param userId The identifying user. Cannot be nil.
*
*/
+ (void)setUserId:(NSString *)userId;
@end
#if __cplusplus
extern "C" {
#endif
/**
* Remote logging, use TFLog as you would use printf. These logs will be sent to the server,
* but will not appear in the console.
*
* @param format sprintf-like format for the arguments that follow
*/
void TFLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2)));
/**
* Remote logging, use TFLogv as you would use printfv. These logs will be sent to the server,
* but will not appear in the console.
*
* @param format sprintf-like format for the arguments that follow
* @param arg_list list of arguments
*/
void TFLogv(NSString *format, va_list arg_list);
#if __cplusplus
}
#endif
extern NSString *const TFSDKIdentityTraitNameKey;
extern NSString *const TFSDKIdentityTraitEmailAddressKey;
extern NSString *const TFSDKIdentityTraitBirthdayKey;
extern NSString *const TFSDKIdentityTraitGenderKey;
extern NSString *const TFSDKIdentityTraitPhoneNumberKey;
extern NSString *const TFSDKIdentityTraitWebsiteAddressKey;
extern NSString *const TFSDKIdentityTraitAgeKey;
extern NSString *const TFSDKIdentityTraitSignupDateKey;
extern NSString *const TFSDKEnableCrashReporterKey;
extern NSString *const TestFairyDidShakeDevice;
extern NSString *const TestFairyWillProvideFeedback;
extern NSString *const TestFairyDidCancelFeedback;
extern NSString *const TestFairyDidSendFeedback;

Binary file not shown.

View File

@ -1,101 +0,0 @@
#!/bin/sh
TESTFAIRY_ENDPOINT="https://app.testfairy.com/upload/dsym/"
ZIP=zip
CURL=curl
STAT=stat
DATE=date
log() {
NOW=$($DATE +"%Y-%m-%d %H:%M:%S")
echo "${NOW} ${1}"
}
help() {
echo "Usage: ${0} [-f] TESTFAIRY_API_KEY [-p DSYM_PATH] [-u TESTFAIRY_ENDPOINT]"
exit 1
}
DAEMON=1
if [ "${1}" == "-f" ]; then
DAEMON=0
shift
elif [ "${1}" == "-d" ]; then
# backward compatible when -f was the default
shift
fi
API_KEY="${1}"
if [ ! "${API_KEY}" ]; then
echo "Fatal: No Upload API key provided."
help
fi
DSYM_PATH=${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
shift
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-u)
TESTFAIRY_ENDPOINT="${2}"
shift
;;
-p)
DSYM_PATH="${2}"
shift
;;
*)
help
;;
esac
shift
done
if [ "${DSYM_PATH}" == "" ] || [ "${DSYM_PATH}" == "/" ] || [ ! -d "${DSYM_PATH}" ]; then
echo "Fatal: No .dSYM folder found at path [${DSYM_PATH}]."
help
fi
if [[ ${TESTFAIRY_ENDPOINT} == "" ]]; then
echo "Fatal: No upload endpoint given."
help
fi
NOW=$($DATE +%s)
TMP_FILENAME="/tmp/${NOW}-${DWARF_DSYM_FILE_NAME}.zip"
# Compress the .dSYM folder into a zip file
log "Compressing .dSYM folder ${DSYM_PATH}"
$ZIP -qrp9 "${TMP_FILENAME}" "${DSYM_PATH}"
FILE_SIZE=$($STAT -f "%z" "${TMP_FILENAME}")
foreground_upload() {
# Upload zipped .dSYM file to TestFairy's servers
STARTED=$($DATE +"%s")
$CURL -s -F api_key="${API_KEY}" -F dsym=@"${1}" -o /dev/null "${TESTFAIRY_ENDPOINT}"
ENDED=$($DATE +"%s")
DIFF=$(expr ${ENDED} - ${STARTED})
log "Symbols uploaded in ${DIFF} seconds"
# Clean up behind
rm -f ${TMP_FILENAME}
}
background_upload() {
sh -c "$CURL -F api_key=\"${API_KEY}\" -F dsym=@\"${1}\" -s -o /dev/null \"${TESTFAIRY_ENDPOINT}\"; rm -f ${TMP_FILENAME};" /dev/null 2>&1 &
}
if [ "$DAEMON" == "0" ]; then
log "Uploading ${FILE_SIZE} bytes to dsym server in foreground"
foreground_upload "${TMP_FILENAME}"
else
log "Uploading ${FILE_SIZE} bytes to dsym server in background"
background_upload "${TMP_FILENAME}"
fi
log "TestFairy .dSYM upload script ends"

5
package-lock.json generated
View File

@ -8234,6 +8234,11 @@
} }
} }
}, },
"react-native-testfairy": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/react-native-testfairy/-/react-native-testfairy-2.8.0.tgz",
"integrity": "sha512-wWQ8xaYq1enjZKM3C7T4jOHHkXW2mBwWoF1p64mbpk0tuFiyH2U1lr9FLNfYDaiqWkMN13iqzZjXciF0f+IS9Q=="
},
"react-native-udp": { "react-native-udp": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-native-udp/-/react-native-udp-2.2.1.tgz", "resolved": "https://registry.npmjs.org/react-native-udp/-/react-native-udp-2.2.1.tgz",

View File

@ -67,6 +67,7 @@
"react-native-splash-screen": "3.0.6", "react-native-splash-screen": "3.0.6",
"react-native-svg": "6.3.1", "react-native-svg": "6.3.1",
"react-native-tcp": "3.3.0", "react-native-tcp": "3.3.0",
"react-native-testfairy": "2.8.0",
"react-native-udp": "2.2.1", "react-native-udp": "2.2.1",
"react-native-webview-bridge": "github:status-im/react-native-webview-bridge#feature/camera-permissions", "react-native-webview-bridge": "github:status-im/react-native-webview-bridge#feature/camera-permissions",
"readable-stream": "1.1.14", "readable-stream": "1.1.14",

View File

@ -27,3 +27,4 @@
(def EventEmmiter (js/require "react-native/Libraries/vendor/emitter/EventEmitter")) (def EventEmmiter (js/require "react-native/Libraries/vendor/emitter/EventEmitter"))
(def background-timer (.-default (js/require "react-native-background-timer"))) (def background-timer (.-default (js/require "react-native-background-timer")))
(def fetch (.-default (js/require "react-native-fetch-polyfill"))) (def fetch (.-default (js/require "react-native-fetch-polyfill")))
(def testfairy (js/require "react-native-testfairy"))

View File

@ -5,6 +5,7 @@
[status-im.native-module.core :as status] [status-im.native-module.core :as status]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[status-im.utils.config :as config] [status-im.utils.config :as config]
[status-im.react-native.js-dependencies :as js-dependencies]
[goog.object :as object])) [goog.object :as object]))
(when js/goog.DEBUG (when js/goog.DEBUG
@ -14,4 +15,6 @@
(log/set-level! config/log-level) (log/set-level! config/log-level)
(error-handler/register-exception-handler!) (error-handler/register-exception-handler!)
(status/init-jail) (status/init-jail)
(when config/testfairy-enabled?
(.begin js-dependencies/testfairy config/testfairy-token))
(.registerComponent react/app-registry "StatusIm" #(reagent/reactify-component app-root))) (.registerComponent react/app-registry "StatusIm" #(reagent/reactify-component app-root)))

View File

@ -1,28 +1,39 @@
(ns status-im.ui.screens.accounts.recover.views (ns status-im.ui.screens.accounts.recover.views
(:require-macros [status-im.utils.views :refer [defview letsubs]]) (:require-macros [status-im.utils.views :refer [defview letsubs]])
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[status-im.ui.components.text-input.view :as text-input] [status-im.ui.components.text-input.view :as text-input]
[status-im.ui.components.react :as react] [status-im.ui.components.react :as react]
[status-im.ui.components.status-bar.view :as status-bar] [status-im.ui.components.status-bar.view :as status-bar]
[status-im.ui.components.styles :as components.styles]
[status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.components.toolbar.view :as toolbar]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.ui.screens.accounts.recover.styles :as styles] [status-im.ui.screens.accounts.recover.styles :as styles]
[status-im.ui.screens.accounts.recover.db :as recover.db] [status-im.ui.screens.accounts.recover.db :as recover.db]
[status-im.ui.screens.accounts.db :as db] [status-im.ui.screens.accounts.db :as db]
[status-im.utils.config :as config]
[status-im.react-native.js-dependencies :as js-dependencies]
[cljs.spec.alpha :as spec] [cljs.spec.alpha :as spec]
[status-im.ui.components.common.common :as components.common])) [status-im.ui.components.common.common :as components.common]))
(defview passphrase-input [passphrase] (defview passphrase-input [passphrase]
(letsubs [error [:get-in [:accounts/recover :passphrase-error]]] (letsubs [error [:get-in [:accounts/recover :passphrase-error]]
input-ref (reagent/atom nil)]
{:component-did-mount (fn [_] (when config/testfairy-enabled?
;; NOTE(dmitryn) Doesn't work on Android without setTimeout
(js/setTimeout
#(.hideView js-dependencies/testfairy @input-ref)
100)))}
[text-input/text-input-with-label [text-input/text-input-with-label
{:style {:flex 1} {:style components.styles/flex
:height 92 :height 92
:label (i18n/label :t/passphrase) :ref (partial reset! input-ref)
:placeholder (i18n/label :t/enter-12-words) :label (i18n/label :t/passphrase)
:multiline true :placeholder (i18n/label :t/enter-12-words)
:default-value passphrase :multiline true
:on-change-text #(re-frame/dispatch [:set-in [:accounts/recover :passphrase] %]) :default-value passphrase
:error error}])) :on-change-text #(re-frame/dispatch [:set-in [:accounts/recover :passphrase] %])
:error error}]))
(defview password-input [password] (defview password-input [password]
(letsubs [error [:get-in [:accounts/recover :password-error]]] (letsubs [error [:get-in [:accounts/recover :password-error]]]

View File

@ -5,14 +5,17 @@
[status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.components.toolbar.view :as toolbar]
[status-im.ui.components.toolbar.actions :as actions] [status-im.ui.components.toolbar.actions :as actions]
[status-im.ui.components.colors :as colors] [status-im.ui.components.colors :as colors]
[status-im.react-native.js-dependencies :as js-dependencies]
[status-im.react-native.resources :as resources] [status-im.react-native.resources :as resources]
[status-im.ui.components.common.common :as components.common] [status-im.ui.components.common.common :as components.common]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[reagent.core :as reagent]
[status-im.ui.components.text-input.view :as text-input] [status-im.ui.components.text-input.view :as text-input]
[status-im.ui.components.icons.vector-icons :as icons] [status-im.ui.components.icons.vector-icons :as icons]
[status-im.ui.components.common.common :as components.common] [status-im.ui.components.common.common :as components.common]
[status-im.ui.components.common.styles :as components.common.styles] [status-im.ui.components.common.styles :as components.common.styles]
[clojure.string :as string] [clojure.string :as string]
[status-im.utils.config :as config]
[status-im.utils.utils :as utils] [status-im.utils.utils :as utils]
[status-im.ui.screens.profile.seed.styles :as styles] [status-im.ui.screens.profile.seed.styles :as styles]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
@ -56,12 +59,19 @@
(when (not= i (first (last words))) (when (not= i (first (last words)))
[react/view {:style styles/six-words-separator}])])]) [react/view {:style styles/six-words-separator}])])])
(defn twelve-words [{:keys [mnemonic]}] (defview twelve-words [{:keys [mnemonic]}]
(let [mnemonic-vec (vec (map-indexed vector (clojure.string/split mnemonic #" ")))] (letsubs [mnemonic-vec (vec (map-indexed vector (clojure.string/split mnemonic #" ")))
ref (reagent/atom nil)]
{:component-did-mount (fn [_] (when config/testfairy-enabled?
;; NOTE(dmitryn) Doesn't work on Android without setTimeout
(js/setTimeout
#(.hideView js-dependencies/testfairy @ref)
100)))}
[react/view {:style styles/twelve-words-container} [react/view {:style styles/twelve-words-container}
[react/text {:style styles/twelve-words-label} [react/text {:style styles/twelve-words-label}
(i18n/label :t/your-seed-phrase)] (i18n/label :t/your-seed-phrase)]
[react/view {:style styles/twelve-words-columns} [react/view {:style styles/twelve-words-columns
:ref (partial reset! ref)}
[six-words (subvec mnemonic-vec 0 6)] [six-words (subvec mnemonic-vec 0 6)]
[react/view {:style styles/twelve-words-columns-separator}] [react/view {:style styles/twelve-words-columns-separator}]
[six-words (subvec mnemonic-vec 6 12)]] [six-words (subvec mnemonic-vec 6 12)]]

View File

@ -35,6 +35,7 @@
(def compile-views-enabled? (enabled? (get-config :COMPILE_VIEWS_ENABLED 0))) (def compile-views-enabled? (enabled? (get-config :COMPILE_VIEWS_ENABLED 0)))
(def mixpanel-token (get-config :MIXPANEL_TOKEN)) (def mixpanel-token (get-config :MIXPANEL_TOKEN))
(def default-network (get-config :DEFAULT_NETWORK)) (def default-network (get-config :DEFAULT_NETWORK))
(def testfairy-token (get-config :TESTFAIRY_TOKEN))
(def pow-target (js/parseFloat (get-config :POW_TARGET "0.001"))) (def pow-target (js/parseFloat (get-config :POW_TARGET "0.001")))
(def pow-time (js/parseInt (get-config :POW_TIME "1"))) (def pow-time (js/parseInt (get-config :POW_TIME "1")))

View File

@ -37,6 +37,7 @@
(def snoopy-buffer #js {:default #js {}}) (def snoopy-buffer #js {:default #js {}})
(def EventEmmiter #js {}) (def EventEmmiter #js {})
(def fetch #js {}) (def fetch #js {})
(def testfairy #js {})
(def background-timer #js {:setTimeout js/setTimeout (def background-timer #js {:setTimeout js/setTimeout
:setInterval js/setInterval :setInterval js/setInterval