diff --git a/.gitignore b/.gitignore index 1b5fd17d74c..f13d7e7ba74 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,6 @@ buck-out/ # Bundle artifact *.jsbundle + +# Development Templates +src/screens/ExamplePage.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 89a5730ec3b..da13b13fb28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/) ### Removed -## [0.3.0-25](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-25) +## [0.4.0-1](https://github.com/rainbow-me/rainbow/releases/tag/v0.4.0-1) +### Added +* 🌈 +* 👍 feedback when a user copies address + +### Changed +* Performance improvements to Activity List +* Improvements for send feedback +* Fixes for iPhone 6 users stuck in a loop with gas sheet when trying to send + +### Removed +* Matomo + +## [0.3.0-25](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-25) ### Added * WBTC pricing to rely on BTC price feed * Proper implementation of box shadows @@ -23,14 +36,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/) * Better handling for non-token-transfer and non-ETH smart contract interactions * Fix for multiple push notifications permissions requests on initial WalletConnect connection -## [0.3.0-23](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-23) +## [0.3.0-23](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-23) ### Changed * Fix for app crashing on fresh install for iPhone 6/7 * Fix for issue with multiple touch points causing weird behavior in expanded state * Fix for blank transactions history while fetching transactions * Fix for lengthy asset names on Send and Activity -## [0.3.0-22](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-22) +## [0.3.0-22](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-22) ### Added * WalletConnect explainer * Support for multiple builds @@ -41,7 +54,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/) * Fix for showing seed phrase UI on older iPhones * Update QR code scanner design -## [0.3.0-4](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-4) +## [0.3.0-4](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-4) ### Added * Import seed phrase @@ -52,12 +65,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/) * Support for separate reducer changes for settings, assets, transactions, prices * Support for promisified account refresh -## [0.3.0-3](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-3) +## [0.3.0-3](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-3) ### Changed * Fix for toggle seed phrase button * Fix for send native currency formatting -## [0.3.0-1](https://github.com/balance-io/balance-wallet/releases/tag/v0.3.0-1) +## [0.3.0-1](https://github.com/rainbow-me/rainbow/releases/tag/v0.3.0-1) ### Added * Native currency selection in Settings * Language selection in Settings (English and French only) @@ -71,7 +84,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/) * More consistent button behavior when confirming transactions * Fixed haptic behavior when scanning QR code multiple times -## [0.2.1-3](https://github.com/balance-io/balance-wallet/releases/tag/v0.2.1-3) +## [0.2.1-3](https://github.com/rainbow-me/rainbow/releases/tag/v0.2.1-3) ### Added * NFT attributes page * Offline status indicator diff --git a/README.md b/README.md index 6c9bd8adb84..d2c582ef4ca 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Balance Wallet +# Rainbow Wallet -A mobile wallet for dapps & tokens. Currently focused on iOS. +A mobile wallet for open finance and the decentralized web. ## Requirements @@ -9,7 +9,7 @@ A mobile wallet for dapps & tokens. Currently focused on iOS. * Install CocoaPods by running `sudo gem install cocoapods` * Install Watchman `brew install watchman` * Install the latest version of XCode: https://developer.apple.com/xcode/ -* Clone and install Balance Common, our shared library: https://github.com/balance-io/balance-common +* Clone and install Rainbow Common, our shared library: https://github.com/rainbow-me/rainbow-common ## How to run the project @@ -27,7 +27,7 @@ If you are new to React Native, this is a helpful introduction: https://facebook 6. Run `yarn ios` to build the project for XCode. -7. Open `balance-wallet/ios/BalanceWallet.xcworkspace`. +7. Open `rainbow-wallet/ios/RainbowWallet.xcworkspace`. 8. Run the project by clicking the play button. @@ -45,7 +45,7 @@ At this point you will be required to log into the account tied to the code push ### Deployment ``` -code-push release-react BalanceWallet-iOS ios -d +code-push release-react RainbowWallet-iOS ios -d ``` The deployment can either be `Staging` or `Production` depending on the mode of the application you wish to update was built in through XCode. diff --git a/android/app/BUCK b/android/app/BUCK index d3421acdba4..9270ef2e6a1 100644 --- a/android/app/BUCK +++ b/android/app/BUCK @@ -45,12 +45,12 @@ android_library( android_build_config( name = "build_config", - package = "com.balancewallet", + package = "com.rainbow", ) android_resource( name = "res", - package = "com.balancewallet", + package = "com.rainbow", res = "src/main/res", ) diff --git a/android/app/build.gradle b/android/app/build.gradle index 1455ba42665..fc5ce4d2a92 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -99,7 +99,7 @@ android { buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { - applicationId "com.balancewallet" + applicationId "com.rainbow" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 413c6608fbc..70ff4dfdc43 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.rainbow"> diff --git a/android/app/src/main/debug/res/values/strings.xml b/android/app/src/main/debug/res/values/strings.xml index c020c4ad9d0..e5011b8688a 100644 --- a/android/app/src/main/debug/res/values/strings.xml +++ b/android/app/src/main/debug/res/values/strings.xml @@ -1,3 +1,3 @@ - BalanceWallet Debug + Rainbow Debug diff --git a/android/app/src/main/java/com/balancewallet/MainActivity.java b/android/app/src/main/java/com/rainbow/MainActivity.java similarity index 84% rename from android/app/src/main/java/com/balancewallet/MainActivity.java rename to android/app/src/main/java/com/rainbow/MainActivity.java index dbea3b30fe1..ec5a94a59a9 100644 --- a/android/app/src/main/java/com/balancewallet/MainActivity.java +++ b/android/app/src/main/java/com/rainbow/MainActivity.java @@ -1,4 +1,4 @@ -package com.balancewallet; +package com.rainbow; import com.facebook.react.ReactActivity; @@ -10,6 +10,6 @@ public class MainActivity extends ReactActivity { */ @Override protected String getMainComponentName() { - return "BalanceWallet"; + return "Rainbow"; } } diff --git a/android/app/src/main/java/com/balancewallet/MainApplication.java b/android/app/src/main/java/com/rainbow/MainApplication.java similarity index 99% rename from android/app/src/main/java/com/balancewallet/MainApplication.java rename to android/app/src/main/java/com/rainbow/MainApplication.java index c3e6e98d9fe..d448f1fe16f 100644 --- a/android/app/src/main/java/com/balancewallet/MainApplication.java +++ b/android/app/src/main/java/com/rainbow/MainApplication.java @@ -1,4 +1,4 @@ -package com.balancewallet; +package me.rainbow; import android.app.Application; diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 94bb19018dc..1ff997b074f 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - BalanceWallet + Rainbow diff --git a/android/app/src/main/staging/res/values/strings.xml b/android/app/src/main/staging/res/values/strings.xml index e148f6e7d2d..dd82582f116 100644 --- a/android/app/src/main/staging/res/values/strings.xml +++ b/android/app/src/main/staging/res/values/strings.xml @@ -1,3 +1,3 @@ - BalanceWallet Staging + Rainbow Staging diff --git a/android/settings.gradle b/android/settings.gradle index 6d0719618b4..4b94ac1f2cf 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'BalanceWallet' +rootProject.name = 'Rainbow' include ':react-native-device-info' project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') include ':react-native-screens' diff --git a/app.json b/app.json index 892749fe43a..8a4b23ca5b9 100644 --- a/app.json +++ b/app.json @@ -1,4 +1,4 @@ { - "name": "Balance", - "displayName": "Balance" + "name": "Rainbow", + "displayName": "Rainbow" } diff --git a/index.js b/index.js index cbe48a45cea..2f09ded0f75 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,7 @@ import './shim'; /* eslint-disable import/first */ import RNLanguages from 'react-native-languages'; import lang from 'i18n-js'; -import { resources } from 'balance-common'; +import { resources } from '@rainbow-me/rainbow-common'; // eslint-disable-next-line import App from './src/App'; diff --git a/ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet-tvOS.xcscheme b/ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet-tvOS.xcscheme deleted file mode 100644 index b94e277d3cd..00000000000 --- a/ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet-tvOS.xcscheme +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-1024.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-1024.png deleted file mode 100644 index e776f9570e8..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-1024.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png deleted file mode 100644 index 7c1a8b5f163..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png deleted file mode 100644 index f2b1651c1a4..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png deleted file mode 100644 index e552168e4a6..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png deleted file mode 100644 index 3ba24640882..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png deleted file mode 100644 index 99b0b45896c..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png deleted file mode 100644 index 93395527da0..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png deleted file mode 100644 index 93395527da0..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png b/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png deleted file mode 100644 index f0d9918033f..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png b/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png deleted file mode 100644 index 6eb87ee3ded..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png b/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png deleted file mode 100644 index 6eca5cc185b..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png and /dev/null differ diff --git a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png b/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png deleted file mode 100644 index aea5c66a8fe..00000000000 Binary files a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png and /dev/null differ diff --git a/ios/Frameworks/GoogleService-Info.plist b/ios/Frameworks/GoogleService-Info.plist index 4ed6a09af7a..63ef86d09a5 100644 --- a/ios/Frameworks/GoogleService-Info.plist +++ b/ios/Frameworks/GoogleService-Info.plist @@ -7,21 +7,21 @@ AD_UNIT_ID_FOR_INTERSTITIAL_TEST ca-app-pub-3940256099942544/4411468910 CLIENT_ID - 944919125796-bitokvoqd0c40qincv60h85guak41rjn.apps.googleusercontent.com + 498863290995-9p1q0khft2ducvla1hmjgc7j083s662i.apps.googleusercontent.com REVERSED_CLIENT_ID - com.googleusercontent.apps.944919125796-bitokvoqd0c40qincv60h85guak41rjn + com.googleusercontent.apps.498863290995-9p1q0khft2ducvla1hmjgc7j083s662i API_KEY - AIzaSyBp_tWYHKxXwcBSc1mp7pPIR_fufVHZBzg + AIzaSyCNbH_4aWuTugRUiv5bL1GkRSlf8swbQt4 GCM_SENDER_ID - 944919125796 + 498863290995 PLIST_VERSION 1 BUNDLE_ID - io.balance.balancewallet + me.rainbow PROJECT_ID - balance-424a3 + rainbow-me STORAGE_BUCKET - balance-424a3.appspot.com + rainbow-me.appspot.com IS_ADS_ENABLED IS_ANALYTICS_ENABLED @@ -33,8 +33,8 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:944919125796:ios:58255248a8c10bbf + 1:498863290995:ios:9549e5b497700eb0 DATABASE_URL - https://balance-424a3.firebaseio.com + https://rainbow-me.firebaseio.com \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index bfbbe934463..9fc2a73a180 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,6 +1,6 @@ platform :ios, '9.0' -target 'BalanceWallet' do +target 'Rainbow' do rn_path = '../node_modules/react-native' pod 'Firebase/Core', '~> 5.3.0' pod 'Firebase/Messaging', '~> 5.3.0' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b199426cefb..bea13fe6700 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -30,6 +30,30 @@ PODS: - GoogleToolboxForMac/Defines (= 2.1.4) - "GoogleToolboxForMac/NSData+zlib (2.1.4)": - GoogleToolboxForMac/Defines (= 2.1.4) + - libwebp (0.6.1): + - libwebp/core (= 0.6.1) + - libwebp/dec (= 0.6.1) + - libwebp/demux (= 0.6.1) + - libwebp/dsp (= 0.6.1) + - libwebp/enc (= 0.6.1) + - libwebp/mux (= 0.6.1) + - libwebp/utils (= 0.6.1) + - libwebp/webp (= 0.6.1) + - libwebp/core (0.6.1): + - libwebp/webp + - libwebp/dec (0.6.1): + - libwebp/core + - libwebp/demux (0.6.1): + - libwebp/core + - libwebp/dsp (0.6.1): + - libwebp/core + - libwebp/enc (0.6.1): + - libwebp/core + - libwebp/mux (0.6.1): + - libwebp/core + - libwebp/utils (0.6.1): + - libwebp/core + - libwebp/webp (0.6.1) - nanopb (0.3.901): - nanopb/decode (= 0.3.901) - nanopb/encode (= 0.3.901) @@ -40,11 +64,12 @@ PODS: - React/Core (= 0.57.1) - react-native-blur (0.8.0): - React - - react-native-fast-image (5.1.2): + - react-native-fast-image (5.2.0): - FLAnimatedImage - React - SDWebImage/Core - SDWebImage/GIF + - SDWebImage/WebP - react-native-version-number (0.3.5): - React - React/Core (0.57.1): @@ -66,6 +91,9 @@ PODS: - SDWebImage/GIF (4.4.2): - FLAnimatedImage (~> 1.0) - SDWebImage/Core + - SDWebImage/WebP (4.4.2): + - libwebp (~> 0.5) + - SDWebImage/Core - yoga (0.57.1.React) DEPENDENCIES: @@ -94,6 +122,7 @@ SPEC REPOS: - FirebaseMessaging - FLAnimatedImage - GoogleToolboxForMac + - libwebp - nanopb - Protobuf - SDWebImage @@ -128,11 +157,12 @@ SPEC CHECKSUMS: FirebaseMessaging: 94579ae655d817287f029ebfebd5b0811fbb3a51 FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31 GoogleToolboxForMac: 91c824d21e85b31c2aae9bb011c5027c9b4e738f + libwebp: 0f01098c6c17175391af621b2f14150f3ca16e16 nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 Protobuf: 6b0fc34ab8f2b7dbad2278a48be08a669427c59f React: 1fe0eb13d90b625d94c3b117c274dcfd2e760e11 react-native-blur: c35c1f6c2c76db7108bde7ed343bd2b01d64e0c0 - react-native-fast-image: cba3d9bf9c2cf8ddb643d887a686c53a5dd90a2c + react-native-fast-image: 4170ad074e9de6c428fc4580ecbaacabf74901a6 react-native-version-number: 36c0d8eb57a275a6239a860f8dbab3d18299b0e0 RNDeviceInfo: 568c5641057313b4912d08a7742ff0b2f753ed5c RNLanguages: e3ae05ef105937645218272429dac0c3f7633451 @@ -141,6 +171,6 @@ SPEC CHECKSUMS: SDWebImage: 4170dae6332a915d44c918675d51dc1c4c06b45f yoga: b1ce48b6cf950b98deae82838f5173ea7cf89e85 -PODFILE CHECKSUM: 0b876ddc904bb401eb7df12eea5f563d95631161 +PODFILE CHECKSUM: 967249ef40574ea7bd68a06a98fb6609fdd4457d COCOAPODS: 1.5.3 diff --git a/ios/BalanceWallet.xcodeproj/project.pbxproj b/ios/Rainbow.xcodeproj/project.pbxproj similarity index 93% rename from ios/BalanceWallet.xcodeproj/project.pbxproj rename to ios/Rainbow.xcodeproj/project.pbxproj index 8813a855ac5..3b731e5b081 100644 --- a/ios/BalanceWallet.xcodeproj/project.pbxproj +++ b/ios/Rainbow.xcodeproj/project.pbxproj @@ -5,19 +5,20 @@ }; 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 */; }; 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; - 00E356F31AD99517003FC87E /* BalanceWalletTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BalanceWalletTests.m */; }; + 00E356F31AD99517003FC87E /* RainbowTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RainbowTests.m */; }; 03252948A60F4C4C87E4FD9E /* SF-Pro-Display-Ultralight.otf in Resources */ = {isa = PBXBuildFile; fileRef = 35833023DB594F1AA6A72866 /* SF-Pro-Display-Ultralight.otf */; }; 06B78001D9F2456D9C2D4A86 /* Graphik-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = DE019D6BCA1A4FF9B7F1E98A /* Graphik-Medium.otf */; }; 07F258CE8EB84A8A949D4580 /* libTcpSockets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6747DC29E9EE446C8C2F7B76 /* libTcpSockets.a */; }; 0AB30EE90F554EE59F57DFC1 /* SF-Pro-Display-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D880F2D2B7704793A8D141DC /* SF-Pro-Display-RegularItalic.otf */; }; 0F4372360E744AF4B37EB905 /* Graphik-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = 7818F79CD3944D17AF4196A5 /* Graphik-Black.otf */; }; - 11B737DE026AB0861BB3507A /* libPods-BalanceWallet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B75516EBEA2FA8B75C5702A4 /* libPods-BalanceWallet.a */; }; + 11B737DE026AB0861BB3507A /* libPods-Rainbow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B75516EBEA2FA8B75C5702A4 /* libPods-Rainbow.a */; }; 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; @@ -41,6 +42,7 @@ 26095B12C30047F89592D463 /* SF-Pro-Text-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 944CF612F0304DF281E33B66 /* SF-Pro-Text-Regular.otf */; }; 27B7AFAC2AAE441BB13D9B06 /* libRNCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0DA16B6B3B0844198AC5A107 /* libRNCamera.a */; }; 2D7BB74FB1A44EE2A2426373 /* SF-Pro-Text-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = E672AB1C5404435897615660 /* SF-Pro-Text-Light.otf */; }; + 2F8870EC1C332E65ACDB1E52 /* libPods-Rainbow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CA5330D961CD8232570AE0FE /* libPods-Rainbow.a */; }; 3049BEF5B7E0435F905556DD /* Graphik-ThinItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3EA8003C5E2D46E38184714B /* Graphik-ThinItalic.otf */; }; 3310F0AEC95F47189C2B19DD /* Graphik-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 7CEEDA7A68C24426BBAA8D77 /* Graphik-BoldItalic.otf */; }; 340305B6506A4DDFB4EB98AA /* SF-Pro-Text-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F62BBE10D6534F74B2180711 /* SF-Pro-Text-Bold.otf */; }; @@ -48,8 +50,6 @@ 396C4BA42EEC4D0985CEBB42 /* SF-Pro-Text-SemiboldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = FA887652F27F43869229AD50 /* SF-Pro-Text-SemiboldItalic.otf */; }; 3C363E14D5DE4A028E43EA38 /* SF-Pro-Display-UltralightItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = DCA738BE00E04734AEDA2F07 /* SF-Pro-Display-UltralightItalic.otf */; }; 3C41C1415A994234A0FF2589 /* SF-Pro-Text-Heavy.otf in Resources */ = {isa = PBXBuildFile; fileRef = 233322FCDC624F6FA60C4B52 /* SF-Pro-Text-Heavy.otf */; }; - 3CE916E621A8BF0200BF6B5E /* libBNFPiwik.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CE916A421A8BED500BF6B5E /* libBNFPiwik.a */; }; - 3CE916EA21A8BFAC00BF6B5E /* piwiktracker.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 3CE916E721A8BFAC00BF6B5E /* piwiktracker.xcdatamodeld */; }; 4013198EBD3D4D6F8052D25E /* SF-Pro-Display-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9DF45B9EB38D4E8FA18A04C6 /* SF-Pro-Display-Light.otf */; }; 41804DE52CE94296995264E0 /* SF-Pro-Text-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 35A24AFF4AB449C287EE66A8 /* SF-Pro-Text-Medium.otf */; }; 424410A1E84845328C5A0CAB /* Graphik-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 182DC054E3584C83822F2A82 /* Graphik-RegularItalic.otf */; }; @@ -145,7 +145,7 @@ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = BalanceWallet; + remoteInfo = Rainbow; }; 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -168,6 +168,13 @@ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; remoteInfo = React; }; + 241769D3225448000003E7EE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 171CDF49E32841EDA7D557DB /* RNGestureHandler.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B5C32A36220C603B000FFB8D; + remoteInfo = "RNGestureHandler-tvOS"; + }; 244C64092108794F007A5856 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1A7B7E90124047F8A3CA4B84 /* RNReactNativeHapticFeedback.xcodeproj */; @@ -441,13 +448,6 @@ remoteGlobalIDString = 47413E2820DBB5D000CCDA85; remoteInfo = "SRSRadialGradien-tvOS"; }; - 3CE916A321A8BED500BF6B5E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3CE9169F21A8BED500BF6B5E /* BNFPiwik.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = BNFPiwik; - }; 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; @@ -583,9 +583,9 @@ 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; - 00E356EE1AD99517003FC87E /* BalanceWalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BalanceWalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356EE1AD99517003FC87E /* RainbowTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RainbowTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* BalanceWalletTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BalanceWalletTests.m; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* RainbowTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RainbowTests.m; sourceTree = ""; }; 02CF70769C034001B5CBC1EF /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = ""; }; 0A8698C728414E56A3FD89A6 /* SFMono-Heavy.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SFMono-Heavy.otf"; path = "../src/assets/fonts/SFMono-Heavy.otf"; sourceTree = ""; }; 0DA16B6B3B0844198AC5A107 /* libRNCamera.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCamera.a; sourceTree = ""; }; @@ -593,13 +593,13 @@ 137BEEE47D2E4F7AB452C0BD /* SRSRadialGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = SRSRadialGradient.xcodeproj; path = "../node_modules/react-native-radial-gradient/ios/SRSRadialGradient.xcodeproj"; sourceTree = ""; }; 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* BalanceWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BalanceWallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = BalanceWallet/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = BalanceWallet/AppDelegate.m; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* Rainbow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Rainbow.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Rainbow/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Rainbow/AppDelegate.m; sourceTree = ""; }; 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = BalanceWallet/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = BalanceWallet/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = BalanceWallet/main.m; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Rainbow/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Rainbow/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Rainbow/main.m; sourceTree = ""; }; 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 171CDF49E32841EDA7D557DB /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; 1736F851327A41C3815212E7 /* SF-Pro-Text-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-BoldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-BoldItalic.otf"; sourceTree = ""; }; @@ -630,6 +630,7 @@ 2DA6F347A6B540399883FF91 /* Graphik-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-MediumItalic.otf"; path = "../src/assets/fonts/Graphik-MediumItalic.otf"; sourceTree = ""; }; 2DB932A7706945C787DE22A6 /* SplashScreen.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = SplashScreen.xcodeproj; path = "../node_modules/react-native-splash-screen/ios/SplashScreen.xcodeproj"; sourceTree = ""; }; 2FA917DDE3314475BABEC117 /* libSRSRadialGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSRSRadialGradient.a; sourceTree = ""; }; + 32F7E1A0C89B971B01CB684B /* Pods-Rainbow.staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.staging.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.staging.xcconfig"; sourceTree = ""; }; 3459F05BF10649C4A787D900 /* SF-Pro-Display-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-MediumItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-MediumItalic.otf"; sourceTree = ""; }; 35833023DB594F1AA6A72866 /* SF-Pro-Display-Ultralight.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-Ultralight.otf"; path = "../src/assets/fonts/SF-Pro-Display-Ultralight.otf"; sourceTree = ""; }; 35A24AFF4AB449C287EE66A8 /* SF-Pro-Text-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-Medium.otf"; path = "../src/assets/fonts/SF-Pro-Text-Medium.otf"; sourceTree = ""; }; @@ -637,19 +638,17 @@ 3759782F486D4A9C80CC99F5 /* RNFirebase.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFirebase.xcodeproj; path = "../node_modules/react-native-firebase/ios/RNFirebase.xcodeproj"; sourceTree = ""; }; 3A545B8C781B47AC8A7CD956 /* 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 = ""; }; 3A7E5E09E14B4EA4B52CC6EE /* libRNGestureHandler.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGestureHandler.a; sourceTree = ""; }; - 3C379D5D20FD1F92009AF81F /* BalanceWallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = BalanceWallet.entitlements; path = BalanceWallet/BalanceWallet.entitlements; sourceTree = ""; }; + 3C379D5D20FD1F92009AF81F /* Rainbow.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Rainbow.entitlements; path = Rainbow/Rainbow.entitlements; sourceTree = ""; }; 3C39C266218BBE66004C763F /* FastImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FastImage.xcodeproj; path = "../node_modules/react-native-fast-image/ios/FastImage.xcodeproj"; sourceTree = ""; }; 3CE850D5210FEA8F00672599 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3CE850D7210FEACE00672599 /* libnanopb.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libnanopb.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 3CE9169F21A8BED500BF6B5E /* BNFPiwik.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = BNFPiwik.xcodeproj; path = "../node_modules/react-native-matomo/ios/BNFPiwik.xcodeproj"; sourceTree = ""; }; - 3CE916E821A8BFAC00BF6B5E /* piwiktracker.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = piwiktracker.xcdatamodel; sourceTree = ""; }; - 3CE916E921A8BFAC00BF6B5E /* piwiktracker v2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "piwiktracker v2.xcdatamodel"; sourceTree = ""; }; 3EA8003C5E2D46E38184714B /* Graphik-ThinItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-ThinItalic.otf"; path = "../src/assets/fonts/Graphik-ThinItalic.otf"; sourceTree = ""; }; - 432859DCCD05A1435434FB50 /* Pods-BalanceWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BalanceWallet.release.xcconfig"; path = "Pods/Target Support Files/Pods-BalanceWallet/Pods-BalanceWallet.release.xcconfig"; sourceTree = ""; }; + 432859DCCD05A1435434FB50 /* Pods-Rainbow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.release.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.release.xcconfig"; sourceTree = ""; }; + 44EE3B0DD0E9AE29B2B74EE9 /* Pods-Rainbow.localrelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.localrelease.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.localrelease.xcconfig"; sourceTree = ""; }; 45B0EAA273D24F15B885A97D /* libRNMail.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNMail.a; sourceTree = ""; }; 46EFC4C16BAF4873BE45393E /* UdpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = UdpSockets.xcodeproj; path = "../node_modules/react-native-udp/ios/UdpSockets.xcodeproj"; sourceTree = ""; }; 4A9E14039D3A4590A2F32D92 /* CodePush.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = CodePush.xcodeproj; path = "../node_modules/react-native-code-push/ios/CodePush.xcodeproj"; sourceTree = ""; }; - 4BC4C815AED5E011A9F31474 /* Pods-BalanceWallet.staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BalanceWallet.staging.xcconfig"; path = "Pods/Target Support Files/Pods-BalanceWallet/Pods-BalanceWallet.staging.xcconfig"; sourceTree = ""; }; + 4BC4C815AED5E011A9F31474 /* Pods-Rainbow.staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.staging.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.staging.xcconfig"; sourceTree = ""; }; 50B1B80F51614673AFD8A804 /* RNKeychain.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNKeychain.xcodeproj; path = "../node_modules/react-native-keychain/RNKeychain.xcodeproj"; sourceTree = ""; }; 51A0A7CFC45344D49BFF6CB9 /* libReactNativePermissions.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libReactNativePermissions.a; sourceTree = ""; }; 51E41940863B4B88BDEF48D7 /* Graphik-SuperItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-SuperItalic.otf"; path = "../src/assets/fonts/Graphik-SuperItalic.otf"; sourceTree = ""; }; @@ -666,6 +665,7 @@ 7A9AF25703474604964D6EC1 /* Graphik-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Light.otf"; path = "../src/assets/fonts/Graphik-Light.otf"; sourceTree = ""; }; 7CD46377E5FC4E5EBFD57D71 /* Graphik-Super.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Super.otf"; path = "../src/assets/fonts/Graphik-Super.otf"; sourceTree = ""; }; 7CEEDA7A68C24426BBAA8D77 /* Graphik-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-BoldItalic.otf"; path = "../src/assets/fonts/Graphik-BoldItalic.otf"; sourceTree = ""; }; + 821605A67666D3C86FCFE953 /* Pods-Rainbow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.debug.xcconfig"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 84DB92DCDF5D4374B26FFCC6 /* SF-Pro-Display-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-BoldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-BoldItalic.otf"; sourceTree = ""; }; 86B30DBBDA594167BFE4747E /* SF-Pro-Display-SemiboldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-SemiboldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-SemiboldItalic.otf"; sourceTree = ""; }; @@ -692,7 +692,7 @@ AEED489341644A6888669239 /* 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 = ""; }; B0C692B061D7430D8194DC98 /* ToolTipMenuTests.xctest */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = ToolTipMenuTests.xctest; sourceTree = ""; }; B1089F835D6A4F578009B47F /* SFMono-Semibold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SFMono-Semibold.otf"; path = "../src/assets/fonts/SFMono-Semibold.otf"; sourceTree = ""; }; - B75516EBEA2FA8B75C5702A4 /* libPods-BalanceWallet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BalanceWallet.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B75516EBEA2FA8B75C5702A4 /* libPods-Rainbow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Rainbow.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B86CB964E3AA47029988138C /* libRNKeychain.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNKeychain.a; sourceTree = ""; }; B98C0A69B3614C65B194BC68 /* libRNSVG.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSVG.a; sourceTree = ""; }; BA31E8CEDBCC417CA50BC57B /* SF-Pro-Display-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-Bold.otf"; path = "../src/assets/fonts/SF-Pro-Display-Bold.otf"; sourceTree = ""; }; @@ -702,6 +702,7 @@ C1324455238847F2AD5C08B4 /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = ""; }; C1DB5F252E324925B4145360 /* SF-Pro-Display-ThinItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-ThinItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-ThinItalic.otf"; sourceTree = ""; }; C349494D40704C079F21BD3B /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFirebase.a; sourceTree = ""; }; + CA5330D961CD8232570AE0FE /* libPods-Rainbow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Rainbow.a"; sourceTree = BUILT_PRODUCTS_DIR; }; CEC826911B5641B8AF788BB3 /* Graphik-BlackItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-BlackItalic.otf"; path = "../src/assets/fonts/Graphik-BlackItalic.otf"; sourceTree = ""; }; D1375E9A3AF945AC87559887 /* RNCamera.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = ""; }; D13995EB48584C438A10A161 /* libRNReactNativeHapticFeedback.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeHapticFeedback.a; sourceTree = ""; }; @@ -710,6 +711,7 @@ D518658CFF8B491991A06426 /* SF-Pro-Text-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-MediumItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-MediumItalic.otf"; sourceTree = ""; }; D551F7BECCAF4CE3BC8C0C3D /* Graphik-LightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-LightItalic.otf"; path = "../src/assets/fonts/Graphik-LightItalic.otf"; sourceTree = ""; }; D7BFD847B72D414D9BE734A0 /* SF-Pro-Display-HeavyItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-HeavyItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-HeavyItalic.otf"; sourceTree = ""; }; + D7C7933F711993F41BC21042 /* Pods-Rainbow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.release.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.release.xcconfig"; sourceTree = ""; }; D880F2D2B7704793A8D141DC /* SF-Pro-Display-RegularItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-RegularItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-RegularItalic.otf"; sourceTree = ""; }; DCA738BE00E04734AEDA2F07 /* SF-Pro-Display-UltralightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-UltralightItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-UltralightItalic.otf"; sourceTree = ""; }; DE019D6BCA1A4FF9B7F1E98A /* Graphik-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Medium.otf"; path = "../src/assets/fonts/Graphik-Medium.otf"; sourceTree = ""; }; @@ -718,10 +720,10 @@ E8E3CE2A4AD34CB991CD61EE /* SF-Pro-Display-LightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-LightItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-LightItalic.otf"; sourceTree = ""; }; EA95F99E656542F790F685B6 /* libSplashScreen.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libSplashScreen.a; sourceTree = ""; }; EB48DC1D46D449759B9C61D4 /* Graphik-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Thin.otf"; path = "../src/assets/fonts/Graphik-Thin.otf"; sourceTree = ""; }; - ED304EFD46FA36DC3BD61D3D /* Pods-BalanceWallet.localrelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BalanceWallet.localrelease.xcconfig"; path = "Pods/Target Support Files/Pods-BalanceWallet/Pods-BalanceWallet.localrelease.xcconfig"; sourceTree = ""; }; + ED304EFD46FA36DC3BD61D3D /* Pods-Rainbow.localrelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.localrelease.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.localrelease.xcconfig"; sourceTree = ""; }; F62BBE10D6534F74B2180711 /* SF-Pro-Text-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-Bold.otf"; path = "../src/assets/fonts/SF-Pro-Text-Bold.otf"; sourceTree = ""; }; FA887652F27F43869229AD50 /* SF-Pro-Text-SemiboldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-SemiboldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-SemiboldItalic.otf"; sourceTree = ""; }; - FC66276043513D02FCEDDA58 /* Pods-BalanceWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BalanceWallet.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BalanceWallet/Pods-BalanceWallet.debug.xcconfig"; sourceTree = ""; }; + FC66276043513D02FCEDDA58 /* Pods-Rainbow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Rainbow/Pods-Rainbow.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -737,7 +739,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3CE916E621A8BF0200BF6B5E /* libBNFPiwik.a in Frameworks */, ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 146834051AC3E58100842450 /* libReact.a in Frameworks */, @@ -768,10 +769,11 @@ D77132C4B96040C39FED1AD5 /* libUdpSockets.a in Frameworks */, 1A048DFD2F724753902EA40B /* libRNReactNativeHapticFeedback.a in Frameworks */, F62BAAAB845E4657B61A8F84 /* libRNFirebase.a in Frameworks */, - 11B737DE026AB0861BB3507A /* libPods-BalanceWallet.a in Frameworks */, + 11B737DE026AB0861BB3507A /* libPods-Rainbow.a in Frameworks */, F4E8A17A670147F4A5EC177E /* libRNGestureHandler.a in Frameworks */, ECF14FECD39C459D86EDCB82 /* libCodePush.a in Frameworks */, F35098D973414A09939FB3F8 /* libz.tbd in Frameworks */, + 2F8870EC1C332E65ACDB1E52 /* libPods-Rainbow.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -820,13 +822,13 @@ name = Products; sourceTree = ""; }; - 00E356EF1AD99517003FC87E /* BalanceWalletTests */ = { + 00E356EF1AD99517003FC87E /* RainbowTests */ = { isa = PBXGroup; children = ( - 00E356F21AD99517003FC87E /* BalanceWalletTests.m */, + 00E356F21AD99517003FC87E /* RainbowTests.m */, 00E356F01AD99517003FC87E /* Supporting Files */, ); - path = BalanceWalletTests; + path = RainbowTests; sourceTree = ""; }; 00E356F01AD99517003FC87E /* Supporting Files */ = { @@ -857,11 +859,10 @@ name = Products; sourceTree = ""; }; - 13B07FAE1A68108700A75B9A /* BalanceWallet */ = { + 13B07FAE1A68108700A75B9A /* Rainbow */ = { isa = PBXGroup; children = ( - 3CE916E721A8BFAC00BF6B5E /* piwiktracker.xcdatamodeld */, - 3C379D5D20FD1F92009AF81F /* BalanceWallet.entitlements */, + 3C379D5D20FD1F92009AF81F /* Rainbow.entitlements */, 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.m */, @@ -870,7 +871,7 @@ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 13B07FB71A68108700A75B9A /* main.m */, ); - name = BalanceWallet; + name = Rainbow; sourceTree = ""; }; 146834001AC3E56700842450 /* Products */ = { @@ -1065,6 +1066,7 @@ isa = PBXGroup; children = ( 24D171E2212F57110090F180 /* libRNGestureHandler.a */, + 241769D4225448000003E7EE /* libRNGestureHandler-tvOS.a */, ); name = Products; sourceTree = ""; @@ -1096,8 +1098,9 @@ 24979E7E20F84005007EB0DA /* nanopb.framework */, 24979E3620F84003007EB0DA /* Protobuf.framework */, 2D16E6891FA4F8E400B85C8A /* libReact.a */, - B75516EBEA2FA8B75C5702A4 /* libPods-BalanceWallet.a */, + B75516EBEA2FA8B75C5702A4 /* libPods-Rainbow.a */, D1A86E696CA24D4F9D3F7F0F /* libz.tbd */, + CA5330D961CD8232570AE0FE /* libPods-Rainbow.a */, ); name = Frameworks; sourceTree = ""; @@ -1105,10 +1108,14 @@ 300D0A66230DE0210033DFA9 /* Pods */ = { isa = PBXGroup; children = ( - FC66276043513D02FCEDDA58 /* Pods-BalanceWallet.debug.xcconfig */, - 432859DCCD05A1435434FB50 /* Pods-BalanceWallet.release.xcconfig */, - 4BC4C815AED5E011A9F31474 /* Pods-BalanceWallet.staging.xcconfig */, - ED304EFD46FA36DC3BD61D3D /* Pods-BalanceWallet.localrelease.xcconfig */, + FC66276043513D02FCEDDA58 /* Pods-Rainbow.debug.xcconfig */, + 432859DCCD05A1435434FB50 /* Pods-Rainbow.release.xcconfig */, + 4BC4C815AED5E011A9F31474 /* Pods-Rainbow.staging.xcconfig */, + ED304EFD46FA36DC3BD61D3D /* Pods-Rainbow.localrelease.xcconfig */, + 821605A67666D3C86FCFE953 /* Pods-Rainbow.debug.xcconfig */, + D7C7933F711993F41BC21042 /* Pods-Rainbow.release.xcconfig */, + 44EE3B0DD0E9AE29B2B74EE9 /* Pods-Rainbow.localrelease.xcconfig */, + 32F7E1A0C89B971B01CB684B /* Pods-Rainbow.staging.xcconfig */, ); name = Pods; sourceTree = ""; @@ -1129,14 +1136,6 @@ name = Products; sourceTree = ""; }; - 3CE916A021A8BED500BF6B5E /* Products */ = { - isa = PBXGroup; - children = ( - 3CE916A421A8BED500BF6B5E /* libBNFPiwik.a */, - ); - name = Products; - sourceTree = ""; - }; 5E91572E1DD0AC6500FF2AA8 /* Products */ = { isa = PBXGroup; children = ( @@ -1158,7 +1157,6 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( - 3CE9169F21A8BED500BF6B5E /* BNFPiwik.xcodeproj */, 3C39C266218BBE66004C763F /* FastImage.xcodeproj */, 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 146833FF1AC3E56700842450 /* React.xcodeproj */, @@ -1207,9 +1205,9 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( - 13B07FAE1A68108700A75B9A /* BalanceWallet */, + 13B07FAE1A68108700A75B9A /* Rainbow */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* BalanceWalletTests */, + 00E356EF1AD99517003FC87E /* RainbowTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, DCAC1D8CC45E468FBB7E1395 /* Resources */, @@ -1224,8 +1222,8 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* BalanceWallet.app */, - 00E356EE1AD99517003FC87E /* BalanceWalletTests.xctest */, + 13B07F961A680F5B00A75B9A /* Rainbow.app */, + 00E356EE1AD99517003FC87E /* RainbowTests.xctest */, ); name = Products; sourceTree = ""; @@ -1303,9 +1301,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* BalanceWalletTests */ = { + 00E356ED1AD99517003FC87E /* RainbowTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "BalanceWalletTests" */; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RainbowTests" */; buildPhases = ( 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, @@ -1316,14 +1314,14 @@ dependencies = ( 00E356F51AD99517003FC87E /* PBXTargetDependency */, ); - name = BalanceWalletTests; - productName = BalanceWalletTests; - productReference = 00E356EE1AD99517003FC87E /* BalanceWalletTests.xctest */; + name = RainbowTests; + productName = RainbowTests; + productReference = 00E356EE1AD99517003FC87E /* RainbowTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 13B07F861A680F5B00A75B9A /* BalanceWallet */ = { + 13B07F861A680F5B00A75B9A /* Rainbow */ = { isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BalanceWallet" */; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Rainbow" */; buildPhases = ( 1DFACE34723C6B8DBBD5F804 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, @@ -1336,9 +1334,9 @@ ); dependencies = ( ); - name = BalanceWallet; + name = Rainbow; productName = "Hello World"; - productReference = 13B07F961A680F5B00A75B9A /* BalanceWallet.app */; + productReference = 13B07F961A680F5B00A75B9A /* Rainbow.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -1352,11 +1350,12 @@ TargetAttributes = { 00E356ED1AD99517003FC87E = { CreatedOnToolsVersion = 6.2; - DevelopmentTeam = Q4G66XSS36; + DevelopmentTeam = L74NQAQB8H; + ProvisioningStyle = Automatic; TestTargetID = 13B07F861A680F5B00A75B9A; }; 13B07F861A680F5B00A75B9A = { - DevelopmentTeam = Q4G66XSS36; + DevelopmentTeam = L74NQAQB8H; ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.Push = { @@ -1366,7 +1365,7 @@ }; }; }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BalanceWallet" */; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Rainbow" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -1378,10 +1377,6 @@ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectReferences = ( - { - ProductGroup = 3CE916A021A8BED500BF6B5E /* Products */; - ProjectRef = 3CE9169F21A8BED500BF6B5E /* BNFPiwik.xcodeproj */; - }, { ProductGroup = 24979D4220F83E3E007EB0DA /* Products */; ProjectRef = 8AC83A50CE8F4EE782376063 /* BVLinearGradient.xcodeproj */; @@ -1513,8 +1508,8 @@ ); projectRoot = ""; targets = ( - 13B07F861A680F5B00A75B9A /* BalanceWallet */, - 00E356ED1AD99517003FC87E /* BalanceWalletTests */, + 13B07F861A680F5B00A75B9A /* Rainbow */, + 00E356ED1AD99517003FC87E /* RainbowTests */, ); }; /* End PBXProject section */ @@ -1576,6 +1571,13 @@ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 241769D4225448000003E7EE /* libRNGestureHandler-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNGestureHandler-tvOS.a"; + remoteRef = 241769D3225448000003E7EE /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 244C640A2108794F007A5856 /* libRNReactNativeHapticFeedback.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1849,13 +1851,6 @@ remoteRef = 3CD4E8CC216989E8000FA5BD /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 3CE916A421A8BED500BF6B5E /* libBNFPiwik.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBNFPiwik.a; - remoteRef = 3CE916A321A8BED500BF6B5E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -2084,7 +2079,7 @@ ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-BalanceWallet-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Rainbow-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -2097,7 +2092,7 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/BalanceWallet/Info.plist", + "$(SRCROOT)/Rainbow/Info.plist", ); outputPaths = ( ); @@ -2112,7 +2107,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 00E356F31AD99517003FC87E /* BalanceWalletTests.m in Sources */, + 00E356F31AD99517003FC87E /* RainbowTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2120,7 +2115,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3CE916EA21A8BFAC00BF6B5E /* piwiktracker.xcdatamodeld in Sources */, 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, ); @@ -2131,7 +2125,7 @@ /* Begin PBXTargetDependency section */ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* BalanceWallet */; + target = 13B07F861A680F5B00A75B9A /* Rainbow */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -2143,7 +2137,7 @@ 13B07FB21A68108700A75B9A /* Base */, ); name = LaunchScreen.xib; - path = BalanceWallet; + path = Rainbow; sourceTree = ""; }; /* End PBXVariantGroup section */ @@ -2153,7 +2147,9 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = Q4G66XSS36; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = L74NQAQB8H; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -2181,7 +2177,7 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWalletTests/Info.plist; + INFOPLIST_FILE = RainbowTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( @@ -2193,7 +2189,8 @@ "-lc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BalanceWallet.app/BalanceWallet"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rainbow.app/Rainbow"; }; name = Debug; }; @@ -2201,8 +2198,10 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = Q4G66XSS36; + DEVELOPMENT_TEAM = L74NQAQB8H; HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-camera/ios/**", @@ -2226,7 +2225,7 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWalletTests/Info.plist; + INFOPLIST_FILE = RainbowTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( @@ -2238,21 +2237,22 @@ "-lc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BalanceWallet.app/BalanceWallet"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rainbow.app/Rainbow"; }; name = Release; }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC66276043513D02FCEDDA58 /* Pods-BalanceWallet.debug.xcconfig */; + baseConfigurationReference = 821605A67666D3C86FCFE953 /* Pods-Rainbow.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = BalanceWallet/BalanceWallet.entitlements; + CODE_SIGN_ENTITLEMENTS = Rainbow/Rainbow.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = L74NQAQB8H; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -2281,15 +2281,15 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWallet/Info.plist; + INFOPLIST_FILE = Rainbow/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.balance.balancewallet; - PRODUCT_NAME = BalanceWallet; + PRODUCT_BUNDLE_IDENTIFIER = me.rainbow; + PRODUCT_NAME = Rainbow; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; @@ -2298,15 +2298,15 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 432859DCCD05A1435434FB50 /* Pods-BalanceWallet.release.xcconfig */; + baseConfigurationReference = D7C7933F711993F41BC21042 /* Pods-Rainbow.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODEPUSH_KEY = "rRRp2wVm2zME6qpn0ncR7CAV5QCD343992b2-2d60-469e-9628-dfd37746ec1a"; - CODE_SIGN_ENTITLEMENTS = BalanceWallet/BalanceWallet.entitlements; + CODEPUSH_KEY = "CHq9hB40PBZqHTxL-f-Wd_rK4anl1e7a8912-936f-4ce7-8505-32a075039f51"; + CODE_SIGN_ENTITLEMENTS = Rainbow/Rainbow.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = L74NQAQB8H; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -2335,15 +2335,15 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWallet/Info.plist; + INFOPLIST_FILE = Rainbow/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.balance.balancewallet; - PRODUCT_NAME = BalanceWallet; + PRODUCT_BUNDLE_IDENTIFIER = me.rainbow; + PRODUCT_NAME = Rainbow; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; @@ -2389,15 +2389,15 @@ }; 2C6A799821127ED9003AFB37 /* Staging */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4BC4C815AED5E011A9F31474 /* Pods-BalanceWallet.staging.xcconfig */; + baseConfigurationReference = 32F7E1A0C89B971B01CB684B /* Pods-Rainbow.staging.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODEPUSH_KEY = "kVkoMqwPWFwoeBl7Uubt8X8NZlpL343992b2-2d60-469e-9628-dfd37746ec1a"; - CODE_SIGN_ENTITLEMENTS = BalanceWallet/BalanceWallet.entitlements; + CODEPUSH_KEY = "Xf8eimmB0-W22TRNCwL9tZNO9xev1e7a8912-936f-4ce7-8505-32a075039f51"; + CODE_SIGN_ENTITLEMENTS = Rainbow/Rainbow.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = L74NQAQB8H; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -2424,15 +2424,15 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWallet/Info.plist; + INFOPLIST_FILE = Rainbow/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.balance.balancewallet; - PRODUCT_NAME = BalanceWallet; + PRODUCT_BUNDLE_IDENTIFIER = me.rainbow; + PRODUCT_NAME = Rainbow; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; @@ -2443,8 +2443,10 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = Q4G66XSS36; + DEVELOPMENT_TEAM = L74NQAQB8H; HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-camera/ios/**", @@ -2466,7 +2468,7 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWalletTests/Info.plist; + INFOPLIST_FILE = RainbowTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( @@ -2478,7 +2480,8 @@ "-lc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BalanceWallet.app/BalanceWallet"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rainbow.app/Rainbow"; }; name = Staging; }; @@ -2522,15 +2525,15 @@ }; 2C87B79A2197FA1900682EC4 /* LocalRelease */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED304EFD46FA36DC3BD61D3D /* Pods-BalanceWallet.localrelease.xcconfig */; + baseConfigurationReference = 44EE3B0DD0E9AE29B2B74EE9 /* Pods-Rainbow.localrelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODEPUSH_KEY = "rRRp2wVm2zME6qpn0ncR7CAV5QCD343992b2-2d60-469e-9628-dfd37746ec1a"; - CODE_SIGN_ENTITLEMENTS = BalanceWallet/BalanceWallet.entitlements; + CODEPUSH_KEY = ""; + CODE_SIGN_ENTITLEMENTS = Rainbow/Rainbow.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = L74NQAQB8H; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Frameworks", @@ -2559,15 +2562,15 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWallet/Info.plist; + INFOPLIST_FILE = Rainbow/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = io.balance.balancewallet; - PRODUCT_NAME = BalanceWallet; + PRODUCT_BUNDLE_IDENTIFIER = me.rainbow; + PRODUCT_NAME = Rainbow; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; @@ -2578,8 +2581,10 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = Q4G66XSS36; + DEVELOPMENT_TEAM = L74NQAQB8H; HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-camera/ios/**", @@ -2603,7 +2608,7 @@ "$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush/**", "$(SRCROOT)/../node_modules/@ledgerhq/react-native-passcode-auth", ); - INFOPLIST_FILE = BalanceWalletTests/Info.plist; + INFOPLIST_FILE = RainbowTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( @@ -2615,7 +2620,8 @@ "-lc++", ); PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BalanceWallet.app/BalanceWallet"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Rainbow.app/Rainbow"; }; name = LocalRelease; }; @@ -2700,7 +2706,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "BalanceWalletTests" */ = { + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RainbowTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 00E356F61AD99517003FC87E /* Debug */, @@ -2711,7 +2717,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BalanceWallet" */ = { + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Rainbow" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, @@ -2722,7 +2728,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BalanceWallet" */ = { + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Rainbow" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, @@ -2734,21 +2740,6 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - 3CE916E721A8BFAC00BF6B5E /* piwiktracker.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - 3CE916E821A8BFAC00BF6B5E /* piwiktracker.xcdatamodel */, - 3CE916E921A8BFAC00BF6B5E /* piwiktracker v2.xcdatamodel */, - ); - currentVersion = 3CE916E921A8BFAC00BF6B5E /* piwiktracker v2.xcdatamodel */; - name = piwiktracker.xcdatamodeld; - path = "../node_modules/react-native-matomo/ios/PiwikTracker/piwiktracker.xcdatamodeld"; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } diff --git a/ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet.xcscheme b/ios/Rainbow.xcodeproj/xcshareddata/xcschemes/Rainbow.xcscheme similarity index 79% rename from ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet.xcscheme rename to ios/Rainbow.xcodeproj/xcshareddata/xcschemes/Rainbow.xcscheme index b6c588bc44f..0d412b7196d 100644 --- a/ios/BalanceWallet.xcodeproj/xcshareddata/xcschemes/BalanceWallet.xcscheme +++ b/ios/Rainbow.xcodeproj/xcshareddata/xcschemes/Rainbow.xcscheme @@ -29,9 +29,9 @@ + BuildableName = "Rainbow.app" + BlueprintName = "Rainbow" + ReferencedContainer = "container:Rainbow.xcodeproj"> + BuildableName = "RainbowTests.xctest" + BlueprintName = "RainbowTests" + ReferencedContainer = "container:Rainbow.xcodeproj"> @@ -61,9 +61,9 @@ + BuildableName = "RainbowTests.xctest" + BlueprintName = "RainbowTests" + ReferencedContainer = "container:Rainbow.xcodeproj"> @@ -71,9 +71,9 @@ + BuildableName = "Rainbow.app" + BlueprintName = "Rainbow" + ReferencedContainer = "container:Rainbow.xcodeproj"> @@ -94,9 +94,9 @@ + BuildableName = "Rainbow.app" + BlueprintName = "Rainbow" + ReferencedContainer = "container:Rainbow.xcodeproj"> @@ -113,9 +113,9 @@ + BuildableName = "Rainbow.app" + BlueprintName = "Rainbow" + ReferencedContainer = "container:Rainbow.xcodeproj"> diff --git a/ios/BalanceWallet.xcworkspace/contents.xcworkspacedata b/ios/Rainbow.xcworkspace/contents.xcworkspacedata similarity index 54% rename from ios/BalanceWallet.xcworkspace/contents.xcworkspacedata rename to ios/Rainbow.xcworkspace/contents.xcworkspacedata index ca98663f5aa..5df2b9bc29e 100644 --- a/ios/BalanceWallet.xcworkspace/contents.xcworkspacedata +++ b/ios/Rainbow.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,12 @@ + location = "group:/Users/jin/rainbow/rainbow-wallet/ios/Rainbow.xcodeproj"> + + diff --git a/ios/BalanceWallet.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Rainbow.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ios/BalanceWallet.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to ios/Rainbow.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/BalanceWallet/AppDelegate.h b/ios/Rainbow/AppDelegate.h similarity index 100% rename from ios/BalanceWallet/AppDelegate.h rename to ios/Rainbow/AppDelegate.h diff --git a/ios/BalanceWallet/AppDelegate.m b/ios/Rainbow/AppDelegate.m similarity index 99% rename from ios/BalanceWallet/AppDelegate.m rename to ios/Rainbow/AppDelegate.m index e89dce7e213..3b7b54fbb1d 100644 --- a/ios/BalanceWallet/AppDelegate.m +++ b/ios/Rainbow/AppDelegate.m @@ -40,7 +40,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation - moduleName:@"BalanceWallet" + moduleName:@"Rainbow" initialProperties:nil launchOptions:launchOptions]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; diff --git a/ios/BalanceWallet/Base.lproj/LaunchScreen.xib b/ios/Rainbow/Base.lproj/LaunchScreen.xib similarity index 100% rename from ios/BalanceWallet/Base.lproj/LaunchScreen.xib rename to ios/Rainbow/Base.lproj/LaunchScreen.xib diff --git a/ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ios/BalanceWallet/Images.xcassets/AppIcon.appiconset/Contents.json rename to ios/Rainbow/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-1024.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-1024.png new file mode 100644 index 00000000000..d234cc1d508 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-1024.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png new file mode 100644 index 00000000000..c25ae02a89e Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@2x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png new file mode 100644 index 00000000000..9af28d8f621 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-20@3x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png new file mode 100644 index 00000000000..3e634381caa Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@2x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png new file mode 100644 index 00000000000..2ff4aa6a563 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-29@3x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png new file mode 100644 index 00000000000..4fff6e32436 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@2x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png new file mode 100644 index 00000000000..f04d3f7d8b5 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-40@3x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png new file mode 100644 index 00000000000..f04d3f7d8b5 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@2x.png differ diff --git a/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png new file mode 100644 index 00000000000..039c78fe7b2 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/AppIcon.appiconset/appicon-60@3x.png differ diff --git a/ios/BalanceWallet/Images.xcassets/Contents.json b/ios/Rainbow/Images.xcassets/Contents.json similarity index 100% rename from ios/BalanceWallet/Images.xcassets/Contents.json rename to ios/Rainbow/Images.xcassets/Contents.json diff --git a/ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/Contents.json b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/Contents.json similarity index 100% rename from ios/BalanceWallet/Images.xcassets/SplashIcon.imageset/Contents.json rename to ios/Rainbow/Images.xcassets/SplashIcon.imageset/Contents.json diff --git a/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png new file mode 100644 index 00000000000..3b61c7fe366 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@1x.png differ diff --git a/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png new file mode 100644 index 00000000000..0afcbf26996 Binary files /dev/null and b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@2x.png differ diff --git a/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png new file mode 100644 index 00000000000..9733717201b Binary files /dev/null and b/ios/Rainbow/Images.xcassets/SplashIcon.imageset/balance-logo-white@3x.png differ diff --git a/ios/BalanceWallet/Info.plist b/ios/Rainbow/Info.plist similarity index 93% rename from ios/BalanceWallet/Info.plist rename to ios/Rainbow/Info.plist index 2fac738708c..01536b0f1b0 100644 --- a/ios/BalanceWallet/Info.plist +++ b/ios/Rainbow/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Balance + Rainbow CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.3.0 + 0.0.1 CFBundleSignature ???? CFBundleVersion - 25 + 2 CodePushDeploymentKey $(CODEPUSH_KEY) ITSAppUsesNonExemptEncryption @@ -40,23 +40,23 @@ NSAppleMusicUsageDescription - Balance Wallet + Rainbow NSBluetoothPeripheralUsageDescription - Balance Wallet + Rainbow NSCalendarsUsageDescription - Balance Wallet + Rainbow NSCameraUsageDescription Used to scan QR codes NSFaceIDUsageDescription Used to sign transactions NSLocationWhenInUseUsageDescription - Balance Wallet + Rainbow NSMicrophoneUsageDescription - Balance Wallet + Rainbow NSMotionUsageDescription - Balance Wallet + Rainbow NSSpeechRecognitionUsageDescription - Balance Wallet + Rainbow UIAppFonts Graphik-Black.otf diff --git a/ios/BalanceWallet/BalanceWallet.entitlements b/ios/Rainbow/Rainbow.entitlements similarity index 100% rename from ios/BalanceWallet/BalanceWallet.entitlements rename to ios/Rainbow/Rainbow.entitlements diff --git a/ios/BalanceWallet/main.m b/ios/Rainbow/main.m similarity index 100% rename from ios/BalanceWallet/main.m rename to ios/Rainbow/main.m diff --git a/ios/BalanceWalletTests/Info.plist b/ios/RainbowTests/Info.plist similarity index 100% rename from ios/BalanceWalletTests/Info.plist rename to ios/RainbowTests/Info.plist diff --git a/ios/BalanceWalletTests/BalanceWalletTests.m b/ios/RainbowTests/RainbowTests.m similarity index 95% rename from ios/BalanceWalletTests/BalanceWalletTests.m rename to ios/RainbowTests/RainbowTests.m index 256c69d47a4..64305d1ec7c 100644 --- a/ios/BalanceWalletTests/BalanceWalletTests.m +++ b/ios/RainbowTests/RainbowTests.m @@ -14,11 +14,11 @@ #define TIMEOUT_SECONDS 600 #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" -@interface BalanceWalletTests : XCTestCase +@interface RainbowTests : XCTestCase @end -@implementation BalanceWalletTests +@implementation RainbowTests - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test { diff --git a/ios/fastlane/Appfile b/ios/fastlane/Appfile index 93db83046bc..9c492e07f14 100644 --- a/ios/fastlane/Appfile +++ b/ios/fastlane/Appfile @@ -1,8 +1,8 @@ -app_identifier("io.balance.balancewallet") # The bundle identifier of your app -apple_id("admin@balancemy.money") # Your Apple email address +app_identifier("me.rainbow") # The bundle identifier of your app +apple_id("admin@rainbow.me") # Your Apple email address -itc_team_id("118397822") # App Store Connect Team ID -team_id("Q4G66XSS36") # Developer Portal Team ID +itc_team_id("1457119021") # App Store Connect Team ID +team_id("L74NQAQB8H") # Developer Portal Team ID # For more information about the Appfile, see: # https://docs.fastlane.tools/advanced/#appfile diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index ab189b6110c..327293eb805 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -23,26 +23,26 @@ platform :ios do desc "Submit a new Beta build to Apple TestFlight" lane :beta do update_info_plist( - plist_path: "BalanceWallet/Info.plist", - display_name: "Balance" + plist_path: "Rainbow/Info.plist", + display_name: "Rainbow" ) update_app_identifier( - app_identifier: "io.balance.balancewallet", - xcodeproj: "BalanceWallet.xcodeproj", - plist_path: "BalanceWallet/Info.plist", + app_identifier: "me.rainbow", + xcodeproj: "Rainbow.xcodeproj", + plist_path: "Rainbow/Info.plist", ) match( type: "appstore", - app_identifier: "io.balance.balancewallet", - git_url: "git@github.com:balance-io/balance-code-signing.git" + app_identifier: "me.rainbow", + git_url: "git@github.com:rainbow-me/rainbow-code-signing.git" ) gym( - scheme: "BalanceWallet", + scheme: "Rainbow", export_method: "app-store", include_symbols: true, ) pilot( - app_identifier: "io.balance.balancewallet" + app_identifier: "me.rainbow" ) download_dsyms upload_symbols_to_crashlytics @@ -52,26 +52,26 @@ platform :ios do desc "Submit a new Internal build to Apple TestFlight" lane :internal do update_info_plist( - plist_path: "BalanceWallet/Info.plist", + plist_path: "Rainbow/Info.plist", display_name: "Internal" ) update_app_identifier( - app_identifier: "io.balance.balancewallet.internal", - xcodeproj: "BalanceWallet.xcodeproj", - plist_path: "BalanceWallet/Info.plist", + app_identifier: "me.rainbow.internal", + xcodeproj: "Rainbow.xcodeproj", + plist_path: "Rainbow/Info.plist", ) match( type: "appstore", - app_identifier: "io.balance.balancewallet.internal", - git_url: "git@github.com:balance-io/balance-code-signing.git" + app_identifier: "me.rainbow.internal", + git_url: "git@github.com:rainbow-me/rainbow-code-signing.git" ) gym( - scheme: "BalanceWallet", + scheme: "Rainbow", export_method: "app-store", include_symbols: true, ) pilot( - app_identifier: "io.balance.balancewallet.internal" + app_identifier: "me.rainbow.internal" ) download_dsyms upload_symbols_to_crashlytics diff --git a/ios/fastlane/README.md b/ios/fastlane/README.md index 8429edf3cd9..75c01d65a04 100644 --- a/ios/fastlane/README.md +++ b/ios/fastlane/README.md @@ -16,6 +16,11 @@ or alternatively using `brew cask install fastlane` # Available Actions ## iOS +### ios refresh_dsyms +``` +fastlane ios refresh_dsyms +``` +Refresh dSYMs ### ios beta ``` fastlane ios beta diff --git a/package.json b/package.json index a6621c8741e..2b74a4fd8f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "BalanceWallet", - "version": "0.3.0-25", + "name": "Rainbow", + "version": "0.4.0-1", "private": true, "scripts": { "start": "node node_modules/react-native/local-cli/cli.js start", @@ -15,10 +15,10 @@ "@hocs/omit-props": "^0.4.0", "@hocs/safe-timers": "^0.4.0", "@hocs/with-view-layout-props": "^0.2.0", + "@rainbow-me/rainbow-common": "^0.6.38", "@tradle/react-native-http": "^2.0.0", "assert": "^1.4.1", "axios": "^0.18.0", - "balance-common": "^0.6.33", "bignumber.js": "^8.0.2", "browserify-zlib": "^0.1.4", "buffer": "^4.9.1", @@ -50,16 +50,16 @@ "react-native": "0.57.1", "react-native-actionsheet": "^2.4.2", "react-native-blur": "^3.2.2", - "react-native-camera": "^1.4.3", + "react-native-camera": "^1.10.2", "react-native-circular-progress": "^1.0.1", "react-native-code-push": "^5.4.1", "react-native-crypto": "^2.1.2", "react-native-device-info": "^0.26.2", "react-native-emoji": "^1.3.1", - "react-native-fast-image": "^5.0.11", + "react-native-fast-image": "^5.1.2", "react-native-firebase": "^4.3.8", - "react-native-gesture-handler": "^1.0.7", - "react-native-haptic-feedback": "^1.2.0", + "react-native-gesture-handler": "^1.0.15", + "react-native-haptic-feedback": "^1.5.0", "react-native-indicators": "^0.13.0", "react-native-iphone-x-helper": "^1.2.0", "react-native-keychain": "^3.0.0", @@ -67,26 +67,25 @@ "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.4.2", "react-native-mail": "^3.0.6", - "react-native-matomo": "git+https://github.com/BonifyByForteil/react-native-matomo.git", "react-native-os": "^1.2.1", "react-native-permissions": "^1.1.1", "react-native-qrcode-scanner": "mikedemarais/react-native-qrcode-scanner#2ca70b8c64afb87e712aba578e11409c6406069e", "react-native-qrcode-svg": "git+https://github.com/mikedemarais/react-native-qrcode-svg.git", "react-native-radial-gradient": "^1.0.4", "react-native-randombytes": "^3.1.0", - "react-native-reanimated": "^1.0.0-alpha.9", + "react-native-reanimated": "^1.0.0-alpha.12", "react-native-safe-area-view": "mikedemarais/react-native-safe-area-view", "react-native-screens": "^1.0.0-alpha.22", "react-native-shimmer-placeholder": "^1.0.29", "react-native-splash-screen": "crazycodeboy/react-native-splash-screen#285/head", "react-native-storage": "^0.2.2", - "react-native-svg": "^8.0.8", + "react-native-svg": "^9.2.4", "react-native-tcp": "^3.3.0", "react-native-tooltip": "^5.2.0", - "react-native-touch-id": "^4.1.0", + "react-native-touch-id": "^4.3.0", "react-native-udp": "^2.3.1", "react-native-version-number": "^0.3.5", - "react-navigation": "^3.1.4", + "react-navigation": "^3.2.1", "react-navigation-fluid-transitions": "^0.2.72", "react-primitives": "^0.7.0", "react-redux": "^5.0.7", diff --git a/src/App.js b/src/App.js index 867b91c5e6b..9dc4a7d9530 100644 --- a/src/App.js +++ b/src/App.js @@ -1,13 +1,12 @@ +import { get, isEmpty } from 'lodash'; +import PropTypes from 'prop-types'; import { accountLoadState, commonStorage, settingsInitializeState, settingsUpdateAccountAddress, -} from 'balance-common'; -import { get, isEmpty } from 'lodash'; -import PropTypes from 'prop-types'; +} from '@rainbow-me/rainbow-common'; import React, { Component } from 'react'; -import Piwik from 'react-native-matomo'; import { AlertIOS, AppRegistry, AppState } from 'react-native'; import { StackActions } from 'react-navigation'; import CodePush from 'react-native-code-push'; @@ -20,7 +19,6 @@ import OfflineBadge from './components/OfflineBadge'; import { withAccountRefresh, withHideSplashScreen, - withTrackingDate, withWalletConnectConnections, } from './hoc'; import { @@ -58,7 +56,6 @@ class App extends Component { settingsUpdateAccountAddress: PropTypes.func, setWalletConnectors: PropTypes.func, sortedWalletConnectors: PropTypes.arrayOf(PropTypes.object), - trackingDateInit: PropTypes.func, transactionIfExists: PropTypes.func, transactionsToApproveInit: PropTypes.func, } @@ -71,12 +68,11 @@ class App extends Component { await this.handleWalletConfig(); this.props.onHideSplashScreen(); await this.props.refreshAccount(); - Piwik.initTracker('https://matomo.balance.io/piwik.php', 2); AppState.addEventListener('change', this.handleAppStateChange); firebase.messaging().getToken() .then(fcmToken => { if (fcmToken) { - commonStorage.saveLocal('balanceWalletFcmToken', { data: fcmToken }); + commonStorage.saveLocal('rainbowFcmToken', { data: fcmToken }); } }) .catch(error => { @@ -84,7 +80,7 @@ class App extends Component { }); this.onTokenRefreshListener = firebase.messaging().onTokenRefresh(fcmToken => { - commonStorage.saveLocal('balanceWalletFcmToken', { data: fcmToken }); + commonStorage.saveLocal('rainbowFcmToken', { data: fcmToken }); }); this.notificationListener = firebase.notifications().onNotification(notification => { @@ -114,9 +110,8 @@ class App extends Component { handleWalletConfig = async (seedPhrase) => { try { - this.props.trackingDateInit(); const { isWalletBrandNew, walletAddress } = await walletInit(seedPhrase); - this.props.settingsUpdateAccountAddress(walletAddress, 'BALANCEWALLET'); + this.props.settingsUpdateAccountAddress(walletAddress, 'RAINBOWWALLET'); if (isWalletBrandNew) { return walletAddress; } @@ -144,7 +139,6 @@ class App extends Component { handleAppStateChange = async (nextAppState) => { if (this.state.appState.match(/unknown|background/) && nextAppState === 'active') { - Piwik.trackEvent('screen', 'view', 'app'); this.fetchAllRequestsFromWalletConnectSessions(); } this.setState({ appState: nextAppState }); @@ -228,7 +222,6 @@ const AppWithRedux = compose( withProps({ store }), withAccountRefresh, withHideSplashScreen, - withTrackingDate, withWalletConnectConnections, connect( null, @@ -249,4 +242,4 @@ const AppWithCodePush = CodePush({ installMode: CodePush.InstallMode.ON_NEXT_RESUME, })(AppWithRedux); -AppRegistry.registerComponent('BalanceWallet', () => AppWithCodePush); +AppRegistry.registerComponent('Rainbow', () => AppWithCodePush); diff --git a/src/components/AddFundsInterstitial.js b/src/components/AddFundsInterstitial.js index e692f177fbe..8b7346d034d 100644 --- a/src/components/AddFundsInterstitial.js +++ b/src/components/AddFundsInterstitial.js @@ -52,13 +52,13 @@ const AddFundsInterstitial = ({ }) => ( - - diff --git a/src/components/Divider.js b/src/components/Divider.js index b651d263ef9..bd59dc7d22f 100644 --- a/src/components/Divider.js +++ b/src/components/Divider.js @@ -79,7 +79,7 @@ const Divider = ({ Divider.propTypes = { color: PropTypes.string, horizontal: PropTypes.bool, - inset: PropTypes.arrayOf(PropTypes.number), + inset: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.bool]), size: PropTypes.number, }; diff --git a/src/components/SendFeedback.js b/src/components/SendFeedback.js index 39dff056d36..6d00a3b0b17 100644 --- a/src/components/SendFeedback.js +++ b/src/components/SendFeedback.js @@ -6,7 +6,7 @@ import Mailer from 'react-native-mail'; import { Alert } from './alerts'; import { Button } from './buttons'; -const FeedbackEmailAddress = 'contact+alphafeedback@balance.io'; +const FeedbackEmailAddress = 'support@rainbow.me'; const FeedbackErrorAlert = () => Alert({ buttons: [{ diff --git a/src/components/activity-list/ActivityList.js b/src/components/activity-list/ActivityList.js index 844bfdaa5c6..cd0dcf881b4 100644 --- a/src/components/activity-list/ActivityList.js +++ b/src/components/activity-list/ActivityList.js @@ -6,13 +6,13 @@ import { onlyUpdateForKeys, withProps, } from 'recompact'; -import List from './RecyclerActivityList'; import { buildTransactionsSectionsSelector } from '../../helpers/transactions'; import { withAccountAddress, withAccountSettings, withAccountTransactions, } from '../../hoc'; +import RecyclerActivityList from './RecyclerActivityList'; const ActivityList = ({ hasPendingTransaction, @@ -21,7 +21,7 @@ const ActivityList = ({ pendingTransactionsCount, sections, }) => ( - diff --git a/src/components/activity-list/RecyclerActivityList.js b/src/components/activity-list/RecyclerActivityList.js index 7651dc31511..bda497f1b0f 100644 --- a/src/components/activity-list/RecyclerActivityList.js +++ b/src/components/activity-list/RecyclerActivityList.js @@ -1,13 +1,13 @@ import { get } from 'lodash'; -import React from 'react'; +import PropTypes from 'prop-types'; +import React, { Component } from 'react'; import { Dimensions } from 'react-native'; import { RecyclerListView, DataProvider, LayoutProvider } from 'recyclerlistview'; import StickyContainer from 'recyclerlistview/dist/reactnative/core/StickyContainer'; import styled from 'styled-components/primitives/dist/styled-components-primitives.esm'; -import PropTypes from 'prop-types'; import { RequestCoinRow, TransactionCoinRow } from '../coin-row'; -import ActivityListHeader from './ActivityListHeader'; import ListFooter from '../list/ListFooter'; +import ActivityListHeader from './ActivityListHeader'; const ViewTypes = { COMPONENT_HEADER: 0, @@ -22,7 +22,7 @@ const Wrapper = styled.View` width: 100%; `; -export default class RecyclerActivityList extends React.Component { +export default class RecyclerActivityList extends Component { static propTypes = { header: PropTypes.node, sections: PropTypes.arrayOf(PropTypes.shape({ @@ -36,9 +36,20 @@ export default class RecyclerActivityList extends React.Component { const { width } = Dimensions.get('window'); this.state = { dataProvider: new DataProvider((r1, r2) => { + if (r1.hash === '_header') { + const r1Address = get(r1, 'header.props.accountAddress', ''); + const r2Address = get(r2, 'header.props.accountAddress', ''); + if (r1Address !== r2Address) { + return true; + } + } + + const r1Symbol = get(r1, 'native.symbol', ''); + const r2Symbol = get(r2, 'native.symbol', ''); + const r1Key = r1.hash ? r1.hash : get(r1, 'transactionDisplayDetails.timestampInMs', ''); const r2Key = r2.hash ? r2.hash : get(r2, 'transactionDisplayDetails.timestampInMs', ''); - return r1Key !== r2Key; + return (r1Key !== r2Key) || (r1Symbol !== r2Symbol); }), headersIndices: [], }; @@ -86,8 +97,10 @@ export default class RecyclerActivityList extends React.Component { }]) .concat(section.data) .concat([{ hash: `${section.title}_end` }]); // footer - }, [{ hash: '_header' }]); // header - items.pop(); // remove last footer + }, [{ hash: '_header', header: props.header }]); // header + if (items.length > 1) { + items.pop(); // remove last footer + } return { dataProvider: state.dataProvider.cloneWithRows(items), headersIndices, @@ -96,43 +109,29 @@ export default class RecyclerActivityList extends React.Component { rowRenderer = (type, data) => { if (type === ViewTypes.COMPONENT_HEADER) { - return this.props.header; + return data.header; } if (type === ViewTypes.HEADER) { - return ( - - ); + return ; } if (type === ViewTypes.FOOTER) { - return ( - - ); + return ; } if (!data.hash) { - return ( - - ); + return ; } - return ( - - ); + return ; } render() { return ( - + diff --git a/src/components/animations/ButtonPressAnimation.js b/src/components/animations/ButtonPressAnimation.js index 09a2615c8ca..cbdb04b9efe 100644 --- a/src/components/animations/ButtonPressAnimation.js +++ b/src/components/animations/ButtonPressAnimation.js @@ -23,7 +23,7 @@ export default class ButtonPressAnimation extends PureComponent { children: PropTypes.any, disabled: PropTypes.bool, enableHapticFeedback: PropTypes.bool, - onPress: PropTypes.func.isRequired, + onPress: PropTypes.func, scaleTo: PropTypes.number, style: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), transformOrigin: directionPropType, @@ -128,7 +128,7 @@ export default class ButtonPressAnimation extends PureComponent { ReactNativeHapticFeedback.trigger('impactLight'); } - if (state === State.END) { + if (state === State.END && onPress) { onPress(); } } diff --git a/src/components/animations/FadeInAnimation.js b/src/components/animations/FadeInAnimation.js index e99d13ded90..c055fdc5db2 100644 --- a/src/components/animations/FadeInAnimation.js +++ b/src/components/animations/FadeInAnimation.js @@ -1,29 +1,28 @@ import PropTypes from 'prop-types'; import React, { PureComponent } from 'react'; -import Animated, { Easing } from 'react-native-reanimated'; import { InteractionManager } from 'react-native'; +import Animated, { Easing } from 'react-native-reanimated'; const { - set, + block, + call, + Clock, + clockRunning, cond, + set, startClock, stopClock, - clockRunning, - block, timing, - call, Value, - Clock, } = Animated; - export default class FadeInAnimation extends PureComponent { static propTypes = { children: PropTypes.node, duration: PropTypes.number, easing: PropTypes.func, from: PropTypes.number, - isInteraction: PropTypes.boolean, + isInteraction: PropTypes.bool, style: PropTypes.object, to: PropTypes.number, } @@ -38,7 +37,11 @@ export default class FadeInAnimation extends PureComponent { runTiming = () => { const { - to, easing, from, duration, isInteraction, + duration, + easing, + from, + isInteraction, + to, } = this.props; const handle = isInteraction && InteractionManager.createInteractionHandle(); diff --git a/src/components/animations/FlyInAnimation.js b/src/components/animations/FlyInAnimation.js new file mode 100644 index 00000000000..e05e6dfddc8 --- /dev/null +++ b/src/components/animations/FlyInAnimation.js @@ -0,0 +1,45 @@ +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; +import Animated, { Easing } from 'react-native-reanimated'; + +const buildAnimation = (value, toValue) => ( + Animated.timing(value, { + duration: 150, + easing: Easing.elastic(0.666), + isInteraction: false, + toValue, + useNativeDriver: true, + }).start() +); + +export default class FlyInAnimation extends PureComponent { + static propTypes = { + children: PropTypes.any, + style: PropTypes.object, + }; + + animation = new Animated.Value(0) + + componentDidMount = () => buildAnimation(this.animation, 1) + + componentWillUnmount = () => buildAnimation(this.animation, 0) + + buildInterpolation = outputRange => ( + Animated.interpolate(this.animation, { + inputRange: [0, 1], + outputRange, + }) + ) + + render = () => ( + + {this.props.children} + + ) +} diff --git a/src/components/animations/ScaleInAnimation.js b/src/components/animations/ScaleInAnimation.js new file mode 100644 index 00000000000..d0f0bc63147 --- /dev/null +++ b/src/components/animations/ScaleInAnimation.js @@ -0,0 +1,58 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { pure, toClass } from 'recompact'; +import Animated from 'react-native-reanimated'; +import stylePropType from 'react-style-proptype'; +import { position } from '../../styles'; +import { Centered } from '../layout'; + +const { createAnimatedComponent, interpolate } = Animated; + +const AnimatedCentered = createAnimatedComponent(toClass(Centered)); + +const ScaleInAnimation = ({ + range, + scaleTo, + style, + value, + ...props +}) => ( + +); + +ScaleInAnimation.propTypes = { + range: PropTypes.shape({ + from: PropTypes.number, + to: PropTypes.number, + }), + scaleTo: PropTypes.number, + style: stylePropType, + value: PropTypes.object, +}; + +ScaleInAnimation.defaultProps = { + range: { + from: 0, + to: 100, + }, + scaleTo: 0.420, +}; + +export default pure(ScaleInAnimation); diff --git a/src/components/animations/index.js b/src/components/animations/index.js index 06ea1789ad4..461d66034e7 100644 --- a/src/components/animations/index.js +++ b/src/components/animations/index.js @@ -1,3 +1,5 @@ export { default as ButtonPressAnimation } from './ButtonPressAnimation'; export { default as FadeInAnimation } from './FadeInAnimation'; +export { default as FlyInAnimation } from './FlyInAnimation'; +export { default as ScaleInAnimation } from './ScaleInAnimation'; export { default as SpinAnimation } from './SpinAnimation'; diff --git a/src/components/asset-list/AssetListSkeleton.js b/src/components/asset-list/AssetListSkeleton.js index b4351182887..c1e1e05b2ad 100644 --- a/src/components/asset-list/AssetListSkeleton.js +++ b/src/components/asset-list/AssetListSkeleton.js @@ -20,14 +20,12 @@ const renderSkeleton = index => ( const AssetListSkeleton = () => ( - + {times(5, renderSkeleton)} - {( - - )} + ); diff --git a/src/components/buttons/BlockButton.js b/src/components/buttons/BlockButton.js index 9246cd92495..604b9b58d77 100644 --- a/src/components/buttons/BlockButton.js +++ b/src/components/buttons/BlockButton.js @@ -11,6 +11,7 @@ import { shadow, } from '../../styles'; import ButtonPressAnimation from '../animations'; +import InnerBorder from '../InnerBorder'; import { Centered } from '../layout'; import { Text } from '../text'; import { Icon } from '../icons'; @@ -36,25 +37,6 @@ const Content = styled(Centered)` overflow: hidden; `; -const GradientBackground = styled(RadialGradient)` - ${position.cover} -`; - -const InnerBorder = styled.View` - ${position.cover} - border-color: ${colors.alpha(colors.black, 0.06)} - border-radius: ${BlockButtonBorderRadius}; - border-width: 0.5; -`; - -const Label = styled(Text).attrs({ - color: 'white', - size: 'large', - weight: 'medium', -})` - margin-bottom: 2; -`; - const Shadow = styled.View` ${containerStyles} ${shadow.build(0, 6, 10, colors.purple, 0.14)} @@ -89,16 +71,22 @@ const BlockButton = ({ - - + {leftIconName ? : null} - + {rightIconName ? : null} diff --git a/src/components/buttons/Button.js b/src/components/buttons/Button.js index 9cc7842193e..f938de896a7 100644 --- a/src/components/buttons/Button.js +++ b/src/components/buttons/Button.js @@ -1,4 +1,4 @@ -import { pick } from 'lodash'; +import { isArray, isString, pick } from 'lodash'; import PropTypes from 'prop-types'; import React from 'react'; import styled from 'styled-components/primitives'; @@ -24,23 +24,37 @@ const ButtonShapeTypes = { rounded: 'rounded', }; -const Container = styled(Centered)` - ${({ size }) => padding(...ButtonSizeTypes[size].padding)} - background-color: ${({ bgColor }) => bgColor}; - border-radius: ${({ type }) => ((type === 'rounded') ? 14 : 50)}; - flex-grow: 0; - position: relative; +const shadowStyles = ` shadow-color: ${colors.blueGreyLight}; shadow-offset: 0px 4px; shadow-opacity: 0.2; shadow-radius: 6; - ${({ containerStyles }) => containerStyles}; `; +const Container = styled(Centered)` + ${({ showShadow }) => (showShadow ? shadowStyles : '')} + ${({ size }) => padding(...ButtonSizeTypes[size].padding)} + background-color: ${({ backgroundColor }) => backgroundColor}; + border-radius: ${({ type }) => ((type === 'rounded') ? 14 : 50)}; + flex-grow: 0; +`; + +const shouldRenderChildrenAsText = (children) => ( + isArray(children) + ? isString(children[0]) + : isString(children) +); + const Button = ({ + backgroundColor, + borderColor, + borderOpacity, + borderWidth, children, containerStyles, + disabled, onPress, + showShadow, size, style, textProps, @@ -49,33 +63,54 @@ const Button = ({ }) => ( - - {children} - - {type !== 'pill' && } + {!shouldRenderChildrenAsText(children) + ? children + : ( + + {children} + + ) + } + {(!onPress || !disabled) && ( + + )} ); Button.propTypes = { - bgColor: PropTypes.string, + backgroundColor: PropTypes.string, + borderColor: PropTypes.string, + borderOpacity: PropTypes.string, + borderWidth: PropTypes.number, children: PropTypes.node.isRequired, containerStyles: PropTypes.string, - onPress: PropTypes.func.isRequired, + disabled: PropTypes.bool, + onPress: PropTypes.func, + showShadow: PropTypes.bool, size: PropTypes.oneOf(Object.keys(ButtonSizeTypes)), style: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), textProps: PropTypes.object, @@ -83,7 +118,8 @@ Button.propTypes = { }; Button.defaultProps = { - bgColor: colors.grey, + backgroundColor: colors.grey, + showShadow: true, size: 'default', type: ButtonShapeTypes.pill, }; diff --git a/src/components/buttons/HoldToAuthorizeButton.js b/src/components/buttons/HoldToAuthorizeButton.js new file mode 100644 index 00000000000..b66ecbf3e32 --- /dev/null +++ b/src/components/buttons/HoldToAuthorizeButton.js @@ -0,0 +1,251 @@ +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; +import { + LongPressGestureHandler, + State, + TapGestureHandler, +} from 'react-native-gesture-handler'; +import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; +import RadialGradient from 'react-native-radial-gradient'; +import Animated, { Easing } from 'react-native-reanimated'; +import { withProps } from 'recompact'; +import styled from 'styled-components/primitives'; +import { colors, padding, position } from '../../styles'; +import { deviceUtils } from '../../utils'; +import { ScaleInAnimation } from '../animations'; +import { BiometryIcon, Icon } from '../icons'; +import InnerBorder from '../InnerBorder'; +import { Centered } from '../layout'; +import { ShadowStack } from '../shadow-stack'; +import { Text } from '../text'; + +const { + cond, + divide, + greaterThan, + multiply, + sub, + timing, + Value, + View, +} = Animated; + +const ButtonBorderRadius = 30; +const ButtonHeight = 59; +const ButtonShadows = { + default: [ + [0, 3, 5, colors.dark, 0.2], + [0, 6, 10, colors.dark, 0.14], + [0, 1, 18, colors.dark, 0.12], + ], + disabled: [ + [0, 2, 6, colors.dark, 0.06], + [0, 3, 9, colors.dark, 0.08], + ], +}; + +const progressDurationMs = 500; // @christian approves + +const Content = styled(Centered)` + ${padding(15)} + border-radius: ${ButtonBorderRadius}; + flex-grow: 0; + height: ${ButtonHeight}; + overflow: hidden; +`; + +const IconContainer = styled(Centered)` + ${position.size(34)} + left: 19; + margin-bottom: 2; + position: absolute; +`; + +const Title = withProps({ + color: 'white', + size: 'large', + style: { marginBottom: 2 }, + weight: 'semibold', +})(Text); + +const GradientColors = { + default: { + from: colors.primaryBlue, + to: '#006FFF', + }, + disabled: { + from: colors.grey, + to: colors.grey, + }, +}; + +const buildAnimation = (value, options) => { + const { + duration = 150, + isInteraction = false, + toValue, + } = options; + + return timing(value, { + duration, + easing: Easing.inOut(Easing.ease), + isInteraction, + toValue, + useNativeDriver: true, + }); +}; + +const calculateReverseDuration = progess => multiply(divide(progess, 100), progressDurationMs); + +const HoldToAuthorizeButtonIcon = ({ animatedValue, isAuthorizing }) => { + const isSpinnerVisible = greaterThan(animatedValue, 0); + const spinnerIn = sub(22, animatedValue); + const spinnerOut = divide(1, animatedValue); + + return ( + + + + + + + + + ); +}; + +HoldToAuthorizeButtonIcon.propTypes = { + animatedValue: PropTypes.object, + isAuthorizing: PropTypes.bool, +}; + +export default class HoldToAuthorizeButton extends PureComponent { + static propTypes = { + children: PropTypes.any, + disabled: PropTypes.bool, + isAuthorizing: PropTypes.bool, + onLongPress: PropTypes.func.isRequired, + style: PropTypes.object, + } + + static defaultProps = { + disabled: false, + } + + state = { + isAuthorizing: false, + } + + animation = new Value(0) + + progress = new Value(0) + + scale = new Value(1) + + tapHandlerState = 1 + + componentDidUpdate = () => { + if (this.state.isAuthorizing && !this.props.isAuthorizing) { + this.setState({ isAuthorizing: false }); + } + } + + onTapChange = ({ nativeEvent }) => { + const { disabled } = this.props; + + this.tapHandlerState = nativeEvent.state; + + if (nativeEvent.state === State.BEGAN) { + if (disabled) { + ReactNativeHapticFeedback.trigger('notificationWarning'); + buildAnimation(this.scale, { toValue: 0.99 }).start(() => { + buildAnimation(this.scale, { toValue: 1 }).start(); + }); + } else { + buildAnimation(this.scale, { toValue: 0.97 }).start(); + buildAnimation(this.animation, { + duration: progressDurationMs, + toValue: 100, + }).start(); + } + } else if (!disabled && nativeEvent.state === State.END) { + buildAnimation(this.scale, { toValue: 1 }).start(); + buildAnimation(this.animation, { + duration: calculateReverseDuration(this.animation), + isInteraction: true, + toValue: 0, + }).start(); + } + } + + onLongPressChange = ({ nativeEvent }) => { + const { disabled, onLongPress } = this.props; + + if (!disabled && nativeEvent.state === State.ACTIVE) { + ReactNativeHapticFeedback.trigger('notificationSuccess'); + + buildAnimation(this.scale, { + isInteraction: true, + toValue: 1, + }).start(() => this.setState({ isAuthorizing: true })); + + if (onLongPress) { + onLongPress(); + } + } + } + + render() { + const { + children, + disabled, + style, + ...props + } = this.props; + + const theme = disabled ? 'disabled' : 'default'; + + return ( + + + + + + + + + {this.state.isAuthorizing + ? 'Authorizing' + : children + } + + + + + + + + ); + } +} diff --git a/src/components/buttons/PasteAddressButton.js b/src/components/buttons/PasteAddressButton.js new file mode 100644 index 00000000000..8a3698160f4 --- /dev/null +++ b/src/components/buttons/PasteAddressButton.js @@ -0,0 +1,60 @@ +import { isValidAddress } from '@rainbow-me/rainbow-common'; +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; +import { Clipboard, InteractionManager } from 'react-native'; +import { withAppState } from '../../hoc'; +import { colors } from '../../styles'; +import Button from './Button'; + +class PasteAddressButton extends PureComponent { + static propTypes = { + appState: PropTypes.string, + onPress: PropTypes.func.isRequired, + } + + state = { clipboardContents: null } + + componentDidMount() { + this.getClipboardContents(); + } + + componentDidUpdate(prevProps) { + if (prevProps.appState === 'background' && this.props.appState === 'active') { + this.getClipboardContents(); + } + } + + getClipboardContents = async () => Clipboard.getString().then(this.setClipboardContents) + + handlePress = () => { + if (this.state.clipboardContents) { + this.props.onPress(this.state.clipboardContents); + } + } + + setClipboardContents = (clipboardContents) => { + InteractionManager.runAfterInteractions(() => { + if (isValidAddress(clipboardContents)) { + this.setState({ clipboardContents }); + } + }); + } + + render() { + const { clipboardContents } = this.state; + + return ( + + ); + } +} + +export default withAppState(PasteAddressButton); diff --git a/src/components/buttons/index.js b/src/components/buttons/index.js index 896c8b24ce8..72f64968559 100644 --- a/src/components/buttons/index.js +++ b/src/components/buttons/index.js @@ -1,3 +1,5 @@ -export { default as BlockButton } from './BlockButton'; +// export { default as BlockButton } from './BlockButton'; export { default as Button } from './Button'; -export { default as LongPressButton } from './LongPressButton'; +export { default as PasteAddressButton } from './PasteAddressButton'; +export { default as HoldToAuthorizeButton } from './HoldToAuthorizeButton'; +// export { default as LongPressButton } from './LongPressButton'; diff --git a/src/components/coin-row/BalanceCoinRow.js b/src/components/coin-row/BalanceCoinRow.js index 93a93f276e6..29cf0c0ebc0 100644 --- a/src/components/coin-row/BalanceCoinRow.js +++ b/src/components/coin-row/BalanceCoinRow.js @@ -1,7 +1,6 @@ import { get } from 'lodash'; import PropTypes from 'prop-types'; import React, { Fragment } from 'react'; -import Piwik from 'react-native-matomo'; import { compose, shouldUpdate, withHandlers } from 'recompact'; import { withAccountSettings } from '../../hoc'; import { colors } from '../../styles'; @@ -94,7 +93,6 @@ export default compose( withHandlers({ onPress: ({ item, onPress }) => () => { if (onPress) { - Piwik.trackEvent('BalanceCoinRow', 'view-expanded', 'OpenBalanceCoinRow'); onPress(item); } }, diff --git a/src/components/coin-row/CoinRow.js b/src/components/coin-row/CoinRow.js index 99dc0ce049f..5edeebd3a20 100644 --- a/src/components/coin-row/CoinRow.js +++ b/src/components/coin-row/CoinRow.js @@ -17,14 +17,12 @@ const Container = styled(Row)` ${padding(CoinRowPaddingVertical, 19, CoinRowPaddingVertical, 15)} background-color: ${colors.white}; width: 100%; - ${({ containerStyles }) => containerStyles} `; const Content = styled(Column)` background-color: ${colors.white}; height: ${CoinIcon.size}; margin-left: ${CoinRowPaddingVertical}; - ${({ contentStyles }) => contentStyles} `; const CoinRow = ({ @@ -38,9 +36,9 @@ const CoinRow = ({ topRowRender, ...props }) => ( - + {createElement(coinIconRender, { symbol, ...props })} - + {topRowRender({ symbol, ...props })} @@ -59,7 +57,7 @@ CoinRow.propTypes = { bottomRowRender: PropTypes.func, children: PropTypes.node, coinIconRender: PropTypes.func, - containerStyles: PropTypes.string, + containerStyles: PropTypes.oneOfType([PropTypes.array, PropTypes.string]), contentStyles: PropTypes.string, onPress: PropTypes.func, symbol: PropTypes.string, diff --git a/src/components/coin-row/RequestCoinRow.js b/src/components/coin-row/RequestCoinRow.js index d75d85edbd3..8e1e56ad631 100644 --- a/src/components/coin-row/RequestCoinRow.js +++ b/src/components/coin-row/RequestCoinRow.js @@ -55,7 +55,7 @@ const RequestCoinRow = ({ topRowRender={topRowRender} > + )} - - - + + + + + ); } } diff --git a/src/components/floating-emojis/FloatingEmoji.js b/src/components/floating-emojis/FloatingEmoji.js new file mode 100644 index 00000000000..9e7e4717b42 --- /dev/null +++ b/src/components/floating-emojis/FloatingEmoji.js @@ -0,0 +1,108 @@ +import PropTypes from 'prop-types'; +import React, { PureComponent } from 'react'; +import Animated, { Easing } from 'react-native-reanimated'; +import stylePropType from 'react-style-proptype'; +import { colors, fonts } from '../../styles'; +import { Emoji } from '../text'; + +const { + concat, + interpolate, + timing, + Value, + View, +} = Animated; + +export default class FloatingEmoji extends PureComponent { + static propTypes = { + distance: PropTypes.number.isRequired, + duration: PropTypes.number.isRequired, + emoji: PropTypes.string.isRequired, + id: PropTypes.string.isRequired, + onComplete: PropTypes.func.isRequired, + right: PropTypes.string.isRequired, + size: PropTypes.string.isRequired, + style: stylePropType, + } + + static defaultProps = { + distance: 100, + duration: 2000, + emoji: '+1', + right: 0, + } + + position = new Value(0) + + componentDidMount() { + const animationConfig = { + duration: this.props.duration, + easing: Easing.elastic(), + toValue: this.props.distance * -1, + }; + + timing(this.position, animationConfig).start(this.handleAnimationComplete); + } + + handleAnimationComplete = () => this.props.onComplete(this.props.id) + + render() { + const { + emoji, + right, + size, + style, + } = this.props; + + const distance = Math.ceil(this.props.distance); + const negativeHeight = distance * -1; + + const sizeAsNumber = parseFloat(fonts.size[size]); + + this.yAnimation = interpolate(this.position, { + inputRange: [negativeHeight, 0], + outputRange: [distance, 0], + }); + + this.opacityAnimation = interpolate(this.yAnimation, { + inputRange: [0, distance / 2, distance - sizeAsNumber], + outputRange: [1, 0.89, 0], + }); + + this.rotateAnimation = interpolate(this.yAnimation, { + inputRange: [0, distance / 4, distance / 3, distance / 2, distance], + outputRange: [0, -2, 0, 2, 0], + }); + + this.scaleAnimation = interpolate(this.yAnimation, { + inputRange: [0, 15, 30, 50, distance], + outputRange: [0, 1.2, 1.1, 1, 1], + }); + + this.xAnimation = interpolate(this.yAnimation, { + inputRange: [0, distance / 2, distance], + outputRange: [0, 15, 0], + }); + + return ( + + + + ); + } +} diff --git a/src/components/floating-emojis/FloatingEmojis.js b/src/components/floating-emojis/FloatingEmojis.js new file mode 100644 index 00000000000..f6c7ca69609 --- /dev/null +++ b/src/components/floating-emojis/FloatingEmojis.js @@ -0,0 +1,75 @@ +import React, { PureComponent } from 'react'; +import { View } from 'react-primitives'; +import PropTypes from 'prop-types'; +import stylePropType from 'react-style-proptype'; +import { position } from '../../styles'; +import FloatingEmoji from './FloatingEmoji'; + +const getRandomNumber = (min, max) => Math.random() * (max - min) + min; + +const createEmojiItem = () => { + const right = `${getRandomNumber(0, 80)}%`; + + return ({ + id: right, + right, + }); +}; + +export default class FloatingEmojis extends PureComponent { + static propTypes = { + color: PropTypes.string, + count: PropTypes.number, + distance: PropTypes.number, + emoji: PropTypes.string.isRequired, + size: PropTypes.string.isRequired, + style: stylePropType, + } + + static defaultProps = { + count: -1, + size: 'h2', + } + + state = { + emojis: [], + } + + componentWillUpdate(nextProps) { + const oldCount = this.props.count; + const newCount = nextProps.count; + const numEmojis = newCount - oldCount; + + if (numEmojis <= 0) return; + + const items = Array(numEmojis).fill(); + const newEmojis = items.map((_, i) => oldCount + i).map(createEmojiItem); + + this.setState({ emojis: this.state.emojis.concat(newEmojis) }); + } + + removeEmoji = (id) => { + const newEmojis = this.state.emojis.filter(emoji => emoji.id !== id); + this.setState({ emojis: newEmojis }); + } + + render = () => ( + + {this.state.emojis.map(({ id, ...item }) => ( + + ))} + + ) +} diff --git a/src/components/floating-emojis/index.js b/src/components/floating-emojis/index.js new file mode 100644 index 00000000000..e30fa49074f --- /dev/null +++ b/src/components/floating-emojis/index.js @@ -0,0 +1,2 @@ +export { default as FloatingEmoji } from './FloatingEmoji'; +export { default as FloatingEmojis } from './FloatingEmojis'; diff --git a/src/components/icons/BiometryIcon.js b/src/components/icons/BiometryIcon.js new file mode 100644 index 00000000000..9f45f362e59 --- /dev/null +++ b/src/components/icons/BiometryIcon.js @@ -0,0 +1,64 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import TouchID from 'react-native-touch-id'; +import stylePropType from 'react-style-proptype'; +import { + compose, + lifecycle, + omitProps, + onlyUpdateForKeys, + withHandlers, + withProps, + withState, +} from 'recompact'; +import { position } from '../../styles'; +import { Centered } from '../layout'; +import Icon from './Icon'; + +const DefaultBiometryType = 'FaceID'; + +const BiometryIcon = ({ + isFaceID, + size, + style, + ...props +}) => ( + + + +); + +BiometryIcon.propTypes = { + isFaceID: PropTypes.bool, + size: PropTypes.number, + style: stylePropType, +}; + +BiometryIcon.defaultProps = { + size: 34, +}; + +export default compose( + withState('biometryType', 'setBiometryType', DefaultBiometryType), + withHandlers({ + setBiometryType: ({ setBiometryType }) => (biometryType) => { + setBiometryType(biometryType || DefaultBiometryType); + }, + }), + lifecycle({ + componentDidMount() { + TouchID.isSupported().then(this.props.setBiometryType); + }, + }), + withProps(({ biometryType }) => ({ isFaceID: biometryType === DefaultBiometryType })), + onlyUpdateForKeys(['biometryType', 'size']), + omitProps('biometryType', 'setBiometryType'), +)(BiometryIcon); diff --git a/src/components/icons/DoubleArrowSelectionIcon.js b/src/components/icons/DoubleArrowSelectionIcon.js new file mode 100644 index 00000000000..058417ea3b9 --- /dev/null +++ b/src/components/icons/DoubleArrowSelectionIcon.js @@ -0,0 +1,35 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { onlyUpdateForPropTypes } from 'recompact'; +import { colors } from '../../styles'; +import { Column } from '../layout'; +import Icon from './Icon'; + +const DoubleArrowSelectionIcon = ({ color, size, ...props }) => ( + + + + +); + +DoubleArrowSelectionIcon.propTypes = { + color: PropTypes.string, + size: PropTypes.number, +}; + +DoubleArrowSelectionIcon.defaultProps = { + color: colors.dark, + size: 6, +}; + +export default onlyUpdateForPropTypes(DoubleArrowSelectionIcon); diff --git a/src/components/icons/Icon.js b/src/components/icons/Icon.js index 21a4de5503f..192fc059622 100644 --- a/src/components/icons/Icon.js +++ b/src/components/icons/Icon.js @@ -6,7 +6,7 @@ import ArrowCircledIcon from './svg/ArrowCircledIcon'; import ArrowIcon from './svg/ArrowIcon'; import AssetListItemSkeletonIcon from './svg/AssetListItemSkeletonIcon'; import AvatarIcon from './svg/AvatarIcon'; -import BalanceLogoIcon from './svg/BalanceLogoIcon'; +import RainbowLogoIcon from './svg/BalanceLogoIcon'; import CameraIcon from './svg/CameraIcon'; import CaretIcon from './svg/CaretIcon'; import CaretThinIcon from './svg/CaretThinIcon'; @@ -39,7 +39,7 @@ Icon.IconTypes = { arrowCircled: ArrowCircledIcon, assetListItemSkeleton: AssetListItemSkeletonIcon, avatar: AvatarIcon, - balanceLogo: BalanceLogoIcon, + rainbowLogo: RainbowLogoIcon, camera: CameraIcon, caret: CaretIcon, caretThin: CaretThinIcon, diff --git a/src/components/icons/Svg.js b/src/components/icons/Svg.js index 5df4ccbd089..6247a5ed980 100644 --- a/src/components/icons/Svg.js +++ b/src/components/icons/Svg.js @@ -1,13 +1,23 @@ -import { compose, mapProps, omitProps } from 'recompact'; -import Svg from 'svgs'; +import Animated from 'react-native-reanimated'; +import { + compose, + mapProps, + omitProps, + toClass, +} from 'recompact'; +import SvgPrimitive from 'svgs'; import { reduceStylesArrayToObject } from '../../utils'; const BlacklistedSVGProps = ['direction']; -export default compose( +const Svg = compose( omitProps(...BlacklistedSVGProps), mapProps(({ style, ...props }) => ({ ...props, style: reduceStylesArrayToObject(style), })), -)(Svg); +)(SvgPrimitive); + +export const AnimatedSvg = Animated.createAnimatedComponent(toClass(Svg)); + +export default Svg; diff --git a/src/components/icons/index.js b/src/components/icons/index.js index 08b1894db34..7ce58b639c4 100644 --- a/src/components/icons/index.js +++ b/src/components/icons/index.js @@ -1,2 +1,4 @@ +export { default as BiometryIcon } from './BiometryIcon'; +export { default as DoubleArrowSelectionIcon } from './DoubleArrowSelectionIcon'; export { default as Icon } from './Icon'; -export { default as Svg } from './Svg'; +export { default as Svg, AnimatedSvg } from './Svg'; diff --git a/src/components/icons/svg/ClockIcon.js b/src/components/icons/svg/ClockIcon.js index 8bfe75ac884..54d0ee477b0 100644 --- a/src/components/icons/svg/ClockIcon.js +++ b/src/components/icons/svg/ClockIcon.js @@ -5,7 +5,7 @@ import { colors } from '../../../styles'; import Svg from '../Svg'; const ClockIcon = ({ color, ...props }) => ( - + ( - +const FaceIdIcon = ({ color, ...props }) => ( + ( FaceIdIcon.propTypes = { color: PropTypes.string, - size: PropTypes.number, }; FaceIdIcon.defaultProps = { diff --git a/src/components/icons/svg/HandleIcon.js b/src/components/icons/svg/HandleIcon.js index f67103a3716..e6eba50027c 100644 --- a/src/components/icons/svg/HandleIcon.js +++ b/src/components/icons/svg/HandleIcon.js @@ -1,49 +1,25 @@ import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import { Animated } from 'react-native'; +import React from 'react'; import { Path } from 'svgs'; import { colors } from '../../../styles'; import Svg from '../Svg'; -class HandleIcon extends Component { - static propTypes = { - color: PropTypes.string, - progress: PropTypes.number, - }; +const HandleIcon = ({ color, ...props }) => ( + + + +); - static defaultProps = { - color: colors.white, - progress: 6.5, - }; +HandleIcon.propTypes = { + color: PropTypes.string, +}; - render() { - const { color, progress } = this.props; +HandleIcon.defaultProps = { + color: colors.black, +}; - return ( - - - - - ); - } -} - -export default Animated.createAnimatedComponent(HandleIcon); +export default HandleIcon; diff --git a/src/components/icons/svg/ProgressIcon.js b/src/components/icons/svg/ProgressIcon.js index 9f6d32efd44..04e1f6d8b39 100644 --- a/src/components/icons/svg/ProgressIcon.js +++ b/src/components/icons/svg/ProgressIcon.js @@ -1,82 +1,109 @@ import PropTypes from 'prop-types'; -import React, { Component } from 'react'; +import React from 'react'; +import Animated from 'react-native-reanimated'; +import { pure } from 'recompact'; import { G, Path } from 'svgs'; -import { Animated } from 'react-native'; -import { colors } from '../../../styles'; -import Svg from '../Svg'; +import { colors, position } from '../../../styles'; +import { Centered } from '../../layout'; +import { AnimatedSvg } from '../Svg'; -function polarToCartesian(centerX, centerY, radius, angleInDegrees) { - const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180; +const { + add, + concat, + cond, + cos, + createAnimatedComponent, + divide, + lessOrEq, + max, + min, + multiply, + sin, + sub, +} = Animated; +const AnimatedPath = createAnimatedComponent(Path); + +const convertProgress = progress => divide(multiply(360, min(100, max(0, progress))), 100); + +function polarToCartesian(center, radius, angleInDegrees) { + const angleInRadians = divide(multiply(sub(angleInDegrees, 90), Math.PI), 180); return { - x: centerX + (radius * Math.cos(angleInRadians)), - y: centerY + (radius * Math.sin(angleInRadians)), + x: concat(add(center, multiply(radius, cos(angleInRadians)))), + y: concat(add(center, multiply(radius, sin(angleInRadians)))), }; } -function circlePath(x, y, radius, startAngle, endAngle) { - const start = polarToCartesian(x, y, radius, endAngle * 0.9999); - const end = polarToCartesian(x, y, radius, startAngle); - const largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1'; - const d = [ +function circlePath(center, radius, startAngle, endAngle) { + const start = polarToCartesian(center, radius, multiply(endAngle, 0.9999)); + const end = polarToCartesian(center, radius, startAngle); + const largeArcFlag = cond(lessOrEq(sub(endAngle, startAngle), 180), 0, 1); + + const path = [ 'M', start.x, start.y, 'A', radius, radius, 0, largeArcFlag, 0, end.x, end.y, ]; - return d.join(' '); -} - -function convertProgress(progress) { - return (360 * Math.min(100, Math.max(0, progress || 0))) / 100; + const pathWithSpaces = path.reduce((arr, p) => [...arr, p, ' '], []); + return concat(...pathWithSpaces); } -class ProgressIcon extends Component { - static propTypes = { - color: PropTypes.string, - progress: PropTypes.number, - progressColor: PropTypes.string, - size: PropTypes.number, - }; - - static defaultProps = { - color: colors.white, - progress: 0, - progressColor: colors.black, - }; - - render() { - const { - color, - progress, - progressColor, - size, - } = this.props; +const ProgressIcon = ({ + color, + progress, + progressColor, + size, + strokeWidth, + ...props +}) => { + const radius = size / 2; + const center = radius + 2; + const viewBoxSize = size + (strokeWidth * 2); - const centerX = (size / 2) + 2; - const centerY = (size / 2) + 2; - const radius = size / 2; - - return ( - - - + + + - {progress > 0 ? : null} + strokeWidth={strokeWidth} + /> - - ); - } -} + + + ); +}; + +ProgressIcon.propTypes = { + color: PropTypes.string, + progress: PropTypes.object, + progressColor: PropTypes.string, + size: PropTypes.number, + strokeWidth: PropTypes.number, +}; + +ProgressIcon.defaultProps = { + color: colors.alpha(colors.sendScreen.grey, 0.3), + progress: 0, + progressColor: colors.white, + size: 29, + strokeWidth: 2, +}; -export default Animated.createAnimatedComponent(ProgressIcon); +export default pure(ProgressIcon); diff --git a/src/components/icons/svg/SpinnerIcon.js b/src/components/icons/svg/SpinnerIcon.js index d75b7299af0..80221abde43 100644 --- a/src/components/icons/svg/SpinnerIcon.js +++ b/src/components/icons/svg/SpinnerIcon.js @@ -7,10 +7,7 @@ import Svg from '../Svg'; const SpinnerIcon = ({ color, size, ...props }) => ( - + ( - + ( - ); Input.propTypes = { + allowFontScaling: PropTypes.bool, autoCapitalize: PropTypes.string, autoCorrect: PropTypes.bool, + keyboardType: PropTypes.oneOf([ + 'decimal-pad', + 'default', + 'email-address', + 'name-phone-pad', + 'number-pad', + 'numeric', + 'phone-pad', + ]), placeholderTextColor: PropTypes.string, spellCheck: PropTypes.bool, }; Input.defaultProps = { + allowFontScaling: false, autoCapitalize: 'none', autoCorrect: false, placeholderTextColor: colors.placeholder, diff --git a/src/components/labels/PillLabel.js b/src/components/labels/PillLabel.js deleted file mode 100644 index 7208ac9c005..00000000000 --- a/src/components/labels/PillLabel.js +++ /dev/null @@ -1,57 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import styled from 'styled-components/primitives'; -import { TouchableOpacity } from 'react-native'; - -import { Centered } from '../layout'; -import { - colors, - fonts, - padding, - shadow, -} from '../../styles'; -import { Icon } from '../icons'; - -const Container = styled(Centered)` - ${padding(0, 12)} - ${shadow.build(0, 0, 0, colors.dark, 0.1)} - background-color: ${props => props.backgroundColor || colors.white} - border-radius: 15px; - height: 30px; -`; - -const LabelIcon = styled(Icon).attrs({ - color: props => colors.alpha(props.color || colors.blueGreyLight, 0.8), - height: 14, - width: 14, -})` - margin-right: 6px; -`; - -const Label = styled.Text` - color: ${props => colors.alpha(props.color || colors.blueGreyLight, 0.8)}; - font-family: ${fonts.family.SFProText}; - font-size: ${fonts.size.medium}; - font-weight: ${fonts.weight.medium}; -`; - -const PillLabel = ({ - children, - color, - icon, - onPress, -}) => ( - - {icon ? : null} - - -); - -PillLabel.propTypes = { - children: PropTypes.any, - color: PropTypes.string, - icon: PropTypes.string, - onPress: PropTypes.func, -}; - -export default PillLabel; diff --git a/src/components/labels/index.js b/src/components/labels/index.js deleted file mode 100644 index cef955cd2d9..00000000000 --- a/src/components/labels/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as PillLabel } from './PillLabel'; diff --git a/src/components/layout/FlyInView.js b/src/components/layout/FlyInView.js deleted file mode 100644 index 5036953fada..00000000000 --- a/src/components/layout/FlyInView.js +++ /dev/null @@ -1,43 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import { Animated } from 'react-native'; -import Flex from './Flex'; - -export default class FlyInView extends Component { - static propTypes = { - children: PropTypes.any, - style: PropTypes.object, - }; - - state = { - animation: new Animated.Value(0), - }; - - componentDidMount() { - const { animation } = this.state; - - Animated.timing(animation, { duration: 300, toValue: 1 }).start(); - } - - componentWillUnmount() { - const { animation } = this.state; - - Animated.timing(animation, { duration: 300, toValue: 0 }).start(); - animation.stopAnimation(); - } - - render() { - const { children, style } = this.props; - const { animation } = this.state; - - return ( - - {children} - - ); - } -} diff --git a/src/components/layout/LayoutWithMargins.js b/src/components/layout/LayoutWithMargins.js index 90228914548..24c243f1f93 100644 --- a/src/components/layout/LayoutWithMargins.js +++ b/src/components/layout/LayoutWithMargins.js @@ -10,11 +10,11 @@ const LayoutWithMargins = ({ ...props }) => ( - {Children.map(children, (child, index) => ( + {Children.toArray(children).map((child, index, array) => ( cloneElement(child, { style: { ...get(child, 'props.style', {}), - [marginKey]: (index < children.length - 1) ? margin : 0, + [marginKey]: (index < array.length - 1) ? margin : 0, }, })))} diff --git a/src/components/layout/index.js b/src/components/layout/index.js index a4a8179697b..11700256eaf 100644 --- a/src/components/layout/index.js +++ b/src/components/layout/index.js @@ -3,7 +3,6 @@ export { default as Column } from './Column'; export { default as ColumnWithMargins } from './ColumnWithMargins'; export { default as Flex } from './Flex'; export { default as FlexItem } from './FlexItem'; -export { default as FlyInView } from './FlyInView'; export { default as LayoutWithMargins } from './LayoutWithMargins'; export { default as Page } from './Page'; export { default as Row } from './Row'; diff --git a/src/components/profile/ProfileMasthead.js b/src/components/profile/ProfileMasthead.js index 7fda5b02164..7f860572625 100644 --- a/src/components/profile/ProfileMasthead.js +++ b/src/components/profile/ProfileMasthead.js @@ -4,7 +4,8 @@ import { Clipboard } from 'react-native'; import FastImage from 'react-native-fast-image'; import { compose, - onlyUpdateForKeys, + onlyUpdateForPropTypes, + withState, pure, setStatic, withHandlers, @@ -16,6 +17,7 @@ import { abbreviations } from '../../utils'; import CopyTooltip from '../CopyTooltip'; import Divider from '../Divider'; import { Column, RowWithMargins } from '../layout'; +import { FloatingEmojis } from '../floating-emojis'; import { TruncatedAddress } from '../text'; import ProfileAction from './ProfileAction'; @@ -34,6 +36,7 @@ const AddressAbbreviation = styled(TruncatedAddress).attrs({ const ProfileMasthead = ({ accountAddress, + emojiCount, onPressCopy, onPressReceive, showBottomDivider, @@ -51,23 +54,32 @@ const ProfileMasthead = ({ - + + + + - {showBottomDivider && } + {showBottomDivider && } ); ProfileMasthead.propTypes = { accountAddress: PropTypes.string, + emojiCount: PropTypes.number, onPressCopy: PropTypes.func, onPressReceive: PropTypes.func, showBottomDivider: PropTypes.bool, @@ -79,10 +91,14 @@ ProfileMasthead.defaultProps = { export default compose( setStatic({ height: ProfileMastheadHeight }), + withState('emojiCount', 'setEmojiCount', 0), withHandlers({ - onPressCopy: ({ accountAddress }) => () => Clipboard.setString(accountAddress), + onPressCopy: ({ accountAddress, emojiCount, setEmojiCount }) => () => { + setEmojiCount(emojiCount + 1); + Clipboard.setString(accountAddress); + }, onPressReceive: ({ navigation }) => () => navigation.navigate('ReceiveModal'), }), - onlyUpdateForKeys(['accountAddress', 'showBottomDivider']), pure, + onlyUpdateForPropTypes, )(ProfileMasthead); diff --git a/src/components/qrcode-scanner/QRCodeScannerNeedsAuthorization.js b/src/components/qrcode-scanner/QRCodeScannerNeedsAuthorization.js index 954cb4dae9b..37852716c7b 100644 --- a/src/components/qrcode-scanner/QRCodeScannerNeedsAuthorization.js +++ b/src/components/qrcode-scanner/QRCodeScannerNeedsAuthorization.js @@ -47,7 +47,7 @@ class QRCodeScannerNeedsAuthorization extends PureComponent { css={margin(7, 0, 30)} lineHeight="looser" > - In order to use WalletConnect, you must first give Balance Wallet + In order to use WalletConnect, you must first give Rainbow permission to access your phone's camera. + + ); } } diff --git a/src/screens/SendSheetWithData.js b/src/screens/SendSheetWithData.js index 5ca310fe9f8..77b6f4137c5 100644 --- a/src/screens/SendSheetWithData.js +++ b/src/screens/SendSheetWithData.js @@ -1,21 +1,17 @@ -import { withSendComponentWithData } from 'balance-common'; -import SendSheet from './SendSheet'; +import { withSendComponentWithData } from '@rainbow-me/rainbow-common'; import { sendTransaction } from '../model/wallet'; +import SendSheet from './SendSheet'; const SendSheetWithData = withSendComponentWithData(SendSheet, { gasFormat: 'short', sendTransactionCallback: sendTransaction, }); -SendSheetWithData.navigationOptions = ({ navigation }) => { - const { params } = navigation.state; - - return { - effect: 'sheet', - gestureResponseDistance: { - vertical: params && params.verticalGestureResponseDistance, - }, - }; -}; +SendSheetWithData.navigationOptions = ({ navigation: { state: { params } } }) => ({ + effect: 'sheet', + gestureResponseDistance: { + vertical: params && params.verticalGestureResponseDistance, + }, +}); export default SendSheetWithData; diff --git a/src/screens/TransactionConfirmationScreen.js b/src/screens/TransactionConfirmationScreen.js index c2f2c71f1b6..12894023205 100644 --- a/src/screens/TransactionConfirmationScreen.js +++ b/src/screens/TransactionConfirmationScreen.js @@ -6,20 +6,12 @@ import { Animated } from 'react-native'; import TouchID from 'react-native-touch-id'; import styled from 'styled-components'; import BalanceManagerLogo from '../assets/balance-manager-logo.png'; -import { BlockButton, Button, LongPressButton } from '../components/buttons'; +import { Button, HoldToAuthorizeButton } from '../components/buttons'; import { Centered, Column } from '../components/layout'; import TransactionConfirmationSection from '../components/TransactionConfirmationSection'; import MessageSigningSection from '../components/MessageSigningSection'; import { Text } from '../components/text'; -import { - colors, - padding, - position, -} from '../styles'; - -const SendButton = styled(BlockButton).attrs({ component: LongPressButton })` - ${padding(0, 0)} -`; +import { colors, position } from '../styles'; const CancelButtonContainer = styled.View` bottom: 22; @@ -112,29 +104,14 @@ class TransactionConfirmationScreen extends Component { await onConfirm(requestType); }; - renderSendButton() { - const { requestType } = this.props; - const { biometryType, sendLongPressProgress } = this.state; - const leftIconName = biometryType === 'FaceID' ? 'faceid' : 'touchid'; - const label = (requestType === 'message') ? 'Hold to Sign' : 'Hold to Send'; - return ( - - {label} - - ); - } + renderSendButton = () => ( + + {`Hold to ${(this.props.requestType === 'message') ? 'Sign' : 'Send'}`} + + ) render = () => { const { @@ -161,7 +138,7 @@ class TransactionConfirmationScreen extends Component { {lang.t('wallet.transaction.request')}