@@ -0,0 +1,4 @@ | |||
module.exports = { | |||
root: true, | |||
extends: '@react-native-community', | |||
}; |
@@ -5,19 +5,18 @@ | |||
; Ignore "BUCK" generated dirs | |||
<PROJECT_ROOT>/\.buckd/ | |||
; Ignore unexpected extra "@providesModule" | |||
.*/node_modules/.*/node_modules/fbjs/.* | |||
; Ignore polyfills | |||
node_modules/react-native/Libraries/polyfills/.* | |||
; Ignore duplicate module providers | |||
; For RN Apps installed via npm, "Libraries" folder is inside | |||
; "node_modules/react-native" but in the source repo it is in the root | |||
.*/Libraries/react-native/React.js | |||
; These should not be required directly | |||
; require from fbjs/lib instead: require('fbjs/lib/warning') | |||
node_modules/warning/.* | |||
; Ignore polyfills | |||
.*/Libraries/polyfills/.* | |||
; Flow doesn't support platforms | |||
.*/Libraries/Utilities/LoadingView.js | |||
; Ignore metro | |||
.*/node_modules/metro/.* | |||
[untyped] | |||
.*/node_modules/@react-native-community/cli/.*/.* | |||
[include] | |||
@@ -31,39 +30,46 @@ emoji=true | |||
esproposal.optional_chaining=enable | |||
esproposal.nullish_coalescing=enable | |||
module.system=haste | |||
module.system.haste.use_name_reducers=true | |||
# get basename | |||
module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1' | |||
# strip .js or .js.flow suffix | |||
module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1' | |||
# strip .ios suffix | |||
module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1' | |||
module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1' | |||
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1' | |||
module.system.haste.paths.blacklist=.*/__tests__/.* | |||
module.system.haste.paths.blacklist=.*/__mocks__/.* | |||
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/Animated/src/polyfills/.* | |||
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/Libraries/.* | |||
module.file_ext=.js | |||
module.file_ext=.json | |||
module.file_ext=.ios.js | |||
munge_underscores=true | |||
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' | |||
module.file_ext=.js | |||
module.file_ext=.jsx | |||
module.file_ext=.json | |||
module.file_ext=.native.js | |||
module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation' | |||
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1' | |||
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub' | |||
suppress_type=$FlowIssue | |||
suppress_type=$FlowFixMe | |||
suppress_type=$FlowFixMeProps | |||
suppress_type=$FlowFixMeState | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ | |||
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError | |||
[lints] | |||
sketchy-null-number=warn | |||
sketchy-null-mixed=warn | |||
sketchy-number=warn | |||
untyped-type-import=warn | |||
nonstrict-import=warn | |||
deprecated-type=warn | |||
unsafe-getters-setters=warn | |||
inexact-spread=warn | |||
unnecessary-invariant=warn | |||
signature-verification-failure=warn | |||
deprecated-utility=error | |||
[strict] | |||
deprecated-type | |||
nonstrict-import | |||
sketchy-null | |||
unclear-type | |||
unsafe-getters-setters | |||
untyped-import | |||
untyped-type-import | |||
[version] | |||
^0.92.0 | |||
^0.105.0 |
@@ -20,7 +20,6 @@ DerivedData | |||
*.hmap | |||
*.ipa | |||
*.xcuserstate | |||
project.xcworkspace | |||
# Android/IntelliJ | |||
# | |||
@@ -40,6 +39,7 @@ yarn-error.log | |||
buck-out/ | |||
\.buckd/ | |||
*.keystore | |||
!debug.keystore | |||
# fastlane | |||
# | |||
@@ -54,3 +54,6 @@ buck-out/ | |||
# Bundle artifact | |||
*.jsbundle | |||
# CocoaPods | |||
/ios/Pods/ |
@@ -0,0 +1,33 @@ | |||
/** | |||
* Sample React Native App | |||
* https://github.com/facebook/react-native | |||
* | |||
* @format | |||
* @flow | |||
*/ | |||
import React from "react"; | |||
import { Provider } from "react-redux"; | |||
import { Provider as PaperProvider } from "react-native-paper"; | |||
import { PersistGate } from "redux-persist/lib/integration/react"; | |||
import { persistor, store } from "./src/store"; | |||
import Theme from "./src/ui/Theme"; | |||
import Header from "./src/header/Header"; | |||
import Errors from "./src/errors/Errors"; | |||
import AppContainer from "./src/AppContainer"; | |||
const App = () => { | |||
return ( | |||
<Provider store={store}> | |||
<PersistGate persistor={persistor}> | |||
<PaperProvider theme={Theme}> | |||
<Header /> | |||
<Errors /> | |||
<AppContainer /> | |||
</PaperProvider> | |||
</PersistGate> | |||
</Provider> | |||
); | |||
}; | |||
export default App; |
@@ -18,6 +18,9 @@ import com.android.build.OutputFile | |||
* // the entry file for bundle generation | |||
* entryFile: "index.android.js", | |||
* | |||
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format | |||
* bundleCommand: "ram-bundle", | |||
* | |||
* // whether to bundle JS and assets in debug mode | |||
* bundleInDebug: false, | |||
* | |||
@@ -75,7 +78,8 @@ import com.android.build.OutputFile | |||
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" | |||
project.ext.react = [ | |||
entryFile: "index.js" | |||
entryFile: "index.js", | |||
enableHermes: false, // clean and rebuild if changing | |||
] | |||
apply from: "../../node_modules/react-native/react.gradle" | |||
@@ -95,6 +99,28 @@ def enableSeparateBuildPerCPUArchitecture = true | |||
*/ | |||
def enableProguardInReleaseBuilds = false | |||
/** | |||
* The preferred build flavor of JavaScriptCore. | |||
* | |||
* For example, to use the international variant, you can use: | |||
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'` | |||
* | |||
* The international variant includes ICU i18n library and necessary data | |||
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that | |||
* give correct results when using with locales other than en-US. Note that | |||
* this variant is about 6MiB larger per architecture than default. | |||
*/ | |||
def jscFlavor = 'org.webkit:android-jsc:+' | |||
/** | |||
* Whether to enable the Hermes VM. | |||
* | |||
* This should be set on project.ext.react and mirrored here. If it is not set | |||
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode | |||
* and the benefits of using Hermes will therefore be sharply reduced. | |||
*/ | |||
def enableHermes = project.ext.react.get("enableHermes", false); | |||
android { | |||
compileSdkVersion rootProject.ext.compileSdkVersion | |||
@@ -111,6 +137,12 @@ android { | |||
versionName "${versionMajor}.${versionMinor}.${versionPatch}" | |||
} | |||
signingConfigs { | |||
debug { | |||
storeFile file('debug.keystore') | |||
storePassword 'android' | |||
keyAlias 'androiddebugkey' | |||
keyPassword 'android' | |||
} | |||
release { | |||
if (project.hasProperty('LESSPASS_RELEASE_STORE_FILE')) { | |||
storeFile file(LESSPASS_RELEASE_STORE_FILE) | |||
@@ -129,6 +161,9 @@ android { | |||
} | |||
} | |||
buildTypes { | |||
debug { | |||
signingConfig signingConfigs.debug | |||
} | |||
release { | |||
minifyEnabled enableProguardInReleaseBuilds | |||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" | |||
@@ -139,25 +174,29 @@ android { | |||
applicationVariants.all { variant -> | |||
variant.outputs.each { output -> | |||
// For each separate APK per architecture, set a unique version code as described here: | |||
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits | |||
def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4] | |||
// https://developer.android.com/studio/build/configure-apk-splits.html | |||
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] | |||
def abi = output.getFilter(OutputFile.ABI) | |||
if (abi != null) { // null for the universal-debug, universal-release variants | |||
output.versionCodeOverride = | |||
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode | |||
} | |||
} | |||
} | |||
} | |||
dependencies { | |||
implementation fileTree(dir: "libs", include: ["*.jar"]) | |||
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" | |||
implementation "com.facebook.react:react-native:+" // From node_modules | |||
implementation "com.madgag.spongycastle:core:1.58.0.0" | |||
implementation project(':react-native-touch-id') | |||
implementation project(':react-native-keychain') | |||
implementation project(':react-native-gesture-handler') | |||
if (enableHermes) { | |||
def hermesPath = "../../node_modules/hermes-engine/android/"; | |||
debugImplementation files(hermesPath + "hermes-debug.aar") | |||
releaseImplementation files(hermesPath + "hermes-release.aar") | |||
} else { | |||
implementation jscFlavor | |||
} | |||
testImplementation "junit:junit:4.12" | |||
} | |||
@@ -175,3 +214,5 @@ task copyDownloadableDepsToLibs(type: Copy) { | |||
from configurations.compile | |||
into 'libs' | |||
} | |||
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) |
@@ -8,10 +8,3 @@ | |||
# http://developer.android.com/guide/developing/tools/proguard.html | |||
# Add any project specific keep options here: | |||
# If your project uses WebView with JS, uncomment the following | |||
# and specify the fully qualified class name to the JavaScript interface | |||
# class: | |||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | |||
# public *; | |||
#} |
@@ -1,23 +1,11 @@ | |||
package com.lesspass.android; | |||
import com.facebook.react.ReactActivity; | |||
import com.facebook.react.ReactActivityDelegate; | |||
import com.facebook.react.ReactRootView; | |||
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; | |||
public class MainActivity extends ReactActivity { | |||
@Override | |||
protected String getMainComponentName() { | |||
return "LessPass"; | |||
} | |||
@Override | |||
protected ReactActivityDelegate createReactActivityDelegate() { | |||
return new ReactActivityDelegate(this, getMainComponentName()) { | |||
@Override | |||
protected ReactRootView createRootView() { | |||
return new RNGestureHandlerEnabledRootView(MainActivity.this); | |||
} | |||
}; | |||
} | |||
@Override | |||
protected String getMainComponentName() { | |||
return "LessPass"; | |||
} | |||
} |
@@ -1,42 +1,37 @@ | |||
package com.lesspass.android; | |||
import android.app.Application; | |||
import android.content.Context; | |||
import com.facebook.react.PackageList; | |||
import com.facebook.react.ReactApplication; | |||
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; | |||
import com.oblador.keychain.KeychainPackage; | |||
import com.rnfingerprint.FingerprintAuthPackage; | |||
import com.facebook.react.ReactNativeHost; | |||
import com.facebook.react.ReactPackage; | |||
import com.facebook.react.shell.MainReactPackage; | |||
import com.facebook.soloader.SoLoader; | |||
import java.util.Arrays; | |||
import java.lang.reflect.InvocationTargetException; | |||
import java.util.List; | |||
public class MainApplication extends Application implements ReactApplication { | |||
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { | |||
@Override | |||
public boolean getUseDeveloperSupport() { | |||
return BuildConfig.DEBUG; | |||
} | |||
private final ReactNativeHost mReactNativeHost = | |||
new ReactNativeHost(this) { | |||
@Override | |||
public boolean getUseDeveloperSupport() { | |||
return BuildConfig.DEBUG; | |||
} | |||
@Override | |||
protected List<ReactPackage> getPackages() { | |||
return Arrays.<ReactPackage>asList( | |||
new MainReactPackage(), | |||
new RNGestureHandlerPackage(), | |||
new KeychainPackage(), | |||
new FingerprintAuthPackage(), | |||
new LessPassReactPackage() | |||
); | |||
} | |||
@Override | |||
protected List<ReactPackage> getPackages() { | |||
@SuppressWarnings("UnnecessaryLocalVariable") | |||
List<ReactPackage> packages = new PackageList(this).getPackages(); | |||
packages.add(new LessPassReactPackage()); | |||
return packages; | |||
} | |||
@Override | |||
protected String getJSMainModuleName() { | |||
return "index"; | |||
} | |||
}; | |||
@Override | |||
protected String getJSMainModuleName() { | |||
return "index"; | |||
} | |||
}; | |||
@Override | |||
public ReactNativeHost getReactNativeHost() { | |||
@@ -47,5 +42,32 @@ public class MainApplication extends Application implements ReactApplication { | |||
public void onCreate() { | |||
super.onCreate(); | |||
SoLoader.init(this, /* native exopackage */ false); | |||
initializeFlipper(this); // Remove this line if you don't want Flipper enabled | |||
} | |||
/** | |||
* Loads Flipper in React Native templates. | |||
* | |||
* @param context | |||
*/ | |||
private static void initializeFlipper(Context context) { | |||
if (BuildConfig.DEBUG) { | |||
try { | |||
/* | |||
We use reflection here to pick up the class that initializes Flipper, | |||
since Flipper library is not available in release mode | |||
*/ | |||
Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); | |||
aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); | |||
} catch (ClassNotFoundException e) { | |||
e.printStackTrace(); | |||
} catch (NoSuchMethodException e) { | |||
e.printStackTrace(); | |||
} catch (IllegalAccessException e) { | |||
e.printStackTrace(); | |||
} catch (InvocationTargetException e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
} | |||
} |
@@ -7,7 +7,7 @@ buildscript { | |||
jcenter() | |||
} | |||
dependencies { | |||
classpath 'com.android.tools.build:gradle:3.3.1' | |||
classpath("com.android.tools.build:gradle:3.4.2") | |||
// NOTE: Do not place your application dependencies here; they belong | |||
// in the individual module build.gradle files | |||
@@ -17,12 +17,18 @@ buildscript { | |||
allprojects { | |||
repositories { | |||
mavenLocal() | |||
google() | |||
jcenter() | |||
maven { | |||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm | |||
url "$rootDir/../node_modules/react-native/android" | |||
url("$rootDir/../node_modules/react-native/android") | |||
} | |||
maven { | |||
// Android JSC is installed from npm | |||
url("$rootDir/../node_modules/jsc-android/dist") | |||
} | |||
google() | |||
jcenter() | |||
maven { url 'https://jitpack.io' } | |||
} | |||
} | |||
@@ -31,7 +37,6 @@ ext { | |||
minSdkVersion = 21 | |||
compileSdkVersion = 28 | |||
targetSdkVersion = 28 | |||
supportLibVersion = "28.0.0" | |||
def npmVersion = getNpmVersionArray() | |||
versionMajor = npmVersion[0] | |||
versionMinor = npmVersion[1] | |||
@@ -16,5 +16,6 @@ | |||
# This option should only be used with decoupled projects. More details, visit | |||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | |||
# org.gradle.parallel=true | |||
android.useAndroidX=true | |||
android.enableJetifier=true | |||
android.enableJetifier=true |
@@ -1,5 +1,5 @@ | |||
distributionBase=GRADLE_USER_HOME | |||
distributionPath=wrapper/dists | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip | |||
zipStoreBase=GRADLE_USER_HOME | |||
zipStorePath=wrapper/dists | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip |
@@ -1,5 +1,21 @@ | |||
#!/usr/bin/env sh | |||
# | |||
# Copyright 2015 the original author or authors. | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
############################################################################## | |||
## | |||
## Gradle start up script for UN*X | |||
@@ -28,7 +44,7 @@ APP_NAME="Gradle" | |||
APP_BASE_NAME=`basename "$0"` | |||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
DEFAULT_JVM_OPTS="" | |||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' | |||
# Use the maximum available, or set MAX_FD != -1 to use that value. | |||
MAX_FD="maximum" | |||
@@ -1,3 +1,19 @@ | |||
@rem | |||
@rem Copyright 2015 the original author or authors. | |||
@rem | |||
@rem Licensed under the Apache License, Version 2.0 (the "License"); | |||
@rem you may not use this file except in compliance with the License. | |||
@rem You may obtain a copy of the License at | |||
@rem | |||
@rem http://www.apache.org/licenses/LICENSE-2.0 | |||
@rem | |||
@rem Unless required by applicable law or agreed to in writing, software | |||
@rem distributed under the License is distributed on an "AS IS" BASIS, | |||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
@rem See the License for the specific language governing permissions and | |||
@rem limitations under the License. | |||
@rem | |||
@if "%DEBUG%" == "" @echo off | |||
@rem ########################################################################## | |||
@rem | |||
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0 | |||
set APP_HOME=%DIRNAME% | |||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
set DEFAULT_JVM_OPTS= | |||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" | |||
@rem Find java.exe | |||
if defined JAVA_HOME goto findJavaFromJavaHome | |||
@@ -1,8 +0,0 @@ | |||
keystore( | |||
name = "debug", | |||
properties = "debug.keystore.properties", | |||
store = "debug.keystore", | |||
visibility = [ | |||
"PUBLIC", | |||
], | |||
) |
@@ -1,4 +0,0 @@ | |||
key.store=debug.keystore | |||
key.alias=androiddebugkey | |||
key.store.password=android | |||
key.alias.password=android |
@@ -1,9 +1,3 @@ | |||
rootProject.name = 'LessPass' | |||
include ':react-native-gesture-handler' | |||
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') | |||
include ':react-native-keychain' | |||
project(':react-native-keychain').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keychain/android') | |||
include ':react-native-touch-id' | |||
project(':react-native-touch-id').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-touch-id/android') | |||
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) | |||
include ':app' |
@@ -1,5 +1,9 @@ | |||
/** | |||
* @format | |||
*/ | |||
import {AppRegistry} from 'react-native'; | |||
import App from './src/App'; | |||
import App from './App'; | |||
import {name as appName} from './app.json'; | |||
AppRegistry.registerComponent(appName, () => App); |
@@ -7,7 +7,7 @@ | |||
<key>CFBundleExecutable</key> | |||
<string>$(EXECUTABLE_NAME)</string> | |||
<key>CFBundleIdentifier</key> | |||
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string> | |||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |||
<key>CFBundleInfoDictionaryVersion</key> | |||
<string>6.0</string> | |||
<key>CFBundleName</key> | |||
@@ -22,6 +22,19 @@ | |||
<string>1</string> | |||
<key>LSRequiresIPhoneOS</key> | |||
<true/> | |||
<key>NSAppTransportSecurity</key> | |||
<dict> | |||
<key>NSExceptionDomains</key> | |||
<dict> | |||
<key>localhost</key> | |||
<dict> | |||
<key>NSExceptionAllowsInsecureHTTPLoads</key> | |||
<true/> | |||
</dict> | |||
</dict> | |||
</dict> | |||
<key>NSLocationWhenInUseUsageDescription</key> | |||
<string></string> | |||
<key>UILaunchStoryboardName</key> | |||
<string>LaunchScreen</string> | |||
<key>UIRequiredDeviceCapabilities</key> | |||
@@ -36,19 +49,5 @@ | |||
</array> | |||
<key>UIViewControllerBasedStatusBarAppearance</key> | |||
<false/> | |||
<key>NSLocationWhenInUseUsageDescription</key> | |||
<string></string> | |||
<key>NSAppTransportSecurity</key> | |||
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ --> | |||
<dict> | |||
<key>NSExceptionDomains</key> | |||
<dict> | |||
<key>localhost</key> | |||
<dict> | |||
<key>NSExceptionAllowsInsecureHTTPLoads</key> | |||
<true/> | |||
</dict> | |||
</dict> | |||
</dict> | |||
</dict> | |||
</plist> |
@@ -24,6 +24,19 @@ | |||
<string>1</string> | |||
<key>LSRequiresIPhoneOS</key> | |||
<true/> | |||
<key>NSAppTransportSecurity</key> | |||
<dict> | |||
<key>NSAllowsArbitraryLoads</key> | |||
<true/> | |||
<key>NSExceptionDomains</key> | |||
<dict> | |||
<key>localhost</key> | |||
<dict> | |||
<key>NSExceptionAllowsInsecureHTTPLoads</key> | |||
<true/> | |||
</dict> | |||
</dict> | |||
</dict> | |||
<key>NSLocationWhenInUseUsageDescription</key> | |||
<string></string> | |||
<key>UILaunchStoryboardName</key> | |||
@@ -40,21 +53,5 @@ | |||
</array> | |||
<key>UIViewControllerBasedStatusBarAppearance</key> | |||
<false/> | |||
<key>NSLocationWhenInUseUsageDescription</key> | |||
<string></string> | |||
<key>NSAppTransportSecurity</key> | |||
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ --> | |||
<dict> | |||
<key>NSAllowsArbitraryLoads</key> | |||
<true/> | |||
<key>NSExceptionDomains</key> | |||
<dict> | |||
<key>localhost</key> | |||
<dict> | |||
<key>NSExceptionAllowsInsecureHTTPLoads</key> | |||
<true/> | |||
</dict> | |||
</dict> | |||
</dict> | |||
</dict> | |||
</plist> |
@@ -12,7 +12,7 @@ | |||
#import <React/RCTRootView.h> | |||
#define TIMEOUT_SECONDS 600 | |||
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!" | |||
#define TEXT_TO_LOOK_FOR @"Welcome to React" | |||
@interface LessPassTests : XCTestCase | |||
@@ -40,11 +40,13 @@ | |||
BOOL foundElement = NO; | |||
__block NSString *redboxError = nil; | |||
#ifdef DEBUG | |||
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { | |||
if (level >= RCTLogLevelError) { | |||
redboxError = message; | |||
} | |||
}); | |||
#endif | |||
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { | |||
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; | |||
@@ -57,8 +59,10 @@ | |||
return NO; | |||
}]; | |||
} | |||
#ifdef DEBUG | |||
RCTSetLogFunction(RCTDefaultLogFunction); | |||
#endif | |||
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); | |||
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); | |||
@@ -0,0 +1,53 @@ | |||
platform :ios, '9.0' | |||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' | |||
target 'LessPass' do | |||
# Pods for LessPass | |||
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" | |||
pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" | |||
pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" | |||
pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" | |||
pod 'React', :path => '../node_modules/react-native/' | |||
pod 'React-Core', :path => '../node_modules/react-native/' | |||
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' | |||
pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' | |||
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' | |||
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' | |||
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' | |||
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' | |||
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' | |||
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' | |||
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' | |||
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' | |||
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' | |||
pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' | |||
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' | |||
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' | |||
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' | |||
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' | |||
pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" | |||
pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" | |||
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' | |||
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' | |||
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' | |||
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' | |||
target 'LessPassTests' do | |||
inherit! :search_paths | |||
# Pods for testing | |||
end | |||
use_native_modules! | |||
end | |||
target 'LessPass-tvOS' do | |||
# Pods for LessPass-tvOS | |||
target 'LessPass-tvOSTests' do | |||
inherit! :search_paths | |||
# Pods for testing | |||
end | |||
end |
@@ -9,40 +9,44 @@ | |||
"url": "https://guillaumevincent.com" | |||
}, | |||
"scripts": { | |||
"start": "node node_modules/react-native/local-cli/cli.js start", | |||
"android": "react-native run-android", | |||
"ios": "react-native run-ios", | |||
"start": "react-native start", | |||
"test": "jest", | |||
"postinstall": "jetify" | |||
"lint": "eslint ." | |||
}, | |||
"dependencies": { | |||
"axios": "0.19.0", | |||
"debounce": "1.2.0", | |||
"fuse.js": "^3.4.4", | |||
"@react-native-community/async-storage": "^1.6.2", | |||
"axios": "^0.19.0", | |||
"fuse.js": "^3.4.5", | |||
"lesspass-fingerprint": "latest", | |||
"lesspass-render-password": "latest", | |||
"lodash": "^4.17.15", | |||
"memoize-one": "^5.0.4", | |||
"react": "^16.8.6", | |||
"react-native": "^0.60.5", | |||
"react-native-gesture-handler": "^1.1.0", | |||
"react-native-keychain": "^3.1.1", | |||
"react-native-paper": "^2.15.2", | |||
"memoize-one": "^5.1.1", | |||
"react": "16.9.0", | |||
"react-native": "0.61.2", | |||
"react-native-gesture-handler": "^1.4.1", | |||
"react-native-keychain": "^4.0.1", | |||
"react-native-paper": "^3.0.0", | |||
"react-native-touch-id": "^4.4.1", | |||
"react-native-vector-icons": "^6.4.2", | |||
"react-navigation": "^4.0.0", | |||
"react-navigation-material-bottom-tabs": "^1.1.1", | |||
"react-redux": "^7.0.1", | |||
"redux": "^4.0.1", | |||
"react-native-vector-icons": "^6.6.0", | |||
"react-navigation": "^4.0.10", | |||
"react-navigation-material-bottom-tabs": "^2.1.3", | |||
"react-navigation-stack": "^1.10.2", | |||
"react-redux": "^7.1.1", | |||
"redux": "^4.0.4", | |||
"redux-persist": "^6.0.0", | |||
"redux-thunk": "2.3.0" | |||
"redux-thunk": "^2.3.0" | |||
}, | |||
"devDependencies": { | |||
"@babel/core": "^7.4.3", | |||
"@babel/runtime": "^7.4.3", | |||
"babel-jest": "^24.7.1", | |||
"jest": "^24.7.1", | |||
"jetifier": "^1.6.4", | |||
"@babel/core": "^7.6.4", | |||
"@babel/runtime": "^7.6.3", | |||
"@react-native-community/eslint-config": "^0.0.5", | |||
"babel-jest": "^24.9.0", | |||
"eslint": "^6.5.1", | |||
"jest": "^24.9.0", | |||
"metro-react-native-babel-preset": "^0.56.0", | |||
"react-test-renderer": "^16.8.6" | |||
"react-test-renderer": "16.9.0" | |||
}, | |||
"jest": { | |||
"preset": "react-native" | |||
@@ -1,19 +1,13 @@ | |||
import React, { Component } from "react"; | |||
import { Provider } from "react-redux"; | |||
import { Provider as PaperProvider } from "react-native-paper"; | |||
import React from "react"; | |||
import { createMaterialBottomTabNavigator } from "react-navigation-material-bottom-tabs"; | |||
import Icon from "react-native-vector-icons/FontAwesome"; | |||
import { PersistGate } from "redux-persist/lib/integration/react"; | |||
import { createAppContainer, createSwitchNavigator } from "react-navigation"; | |||
import { persistor, store } from "./store"; | |||
import AuthStack from "./auth/AuthStack"; | |||
import AuthLoadingScreen from "./auth/AuthLoadingScreen"; | |||
import HelpScreen from "./help/HelpScreen"; | |||
import PasswordGeneratorScreen from "./password/PasswordGeneratorScreen"; | |||
import SettingsScreen from "./settings/SettingsScreen"; | |||
import Theme from "./ui/Theme"; | |||
import Header from "./header/Header"; | |||
import Errors from "./errors/Errors"; | |||
const commonTabs = { | |||
PasswordGenerator: { | |||
@@ -89,20 +83,4 @@ const AppContainer = createAppContainer( | |||
) | |||
); | |||
class App extends Component { | |||
render() { | |||
return ( | |||
<Provider store={store}> | |||
<PersistGate persistor={persistor}> | |||
<PaperProvider theme={Theme}> | |||
<Header /> | |||
<Errors /> | |||
<AppContainer /> | |||
</PaperProvider> | |||
</PersistGate> | |||
</Provider> | |||
); | |||
} | |||
} | |||
export default App; | |||
export default AppContainer; |
@@ -1,4 +1,4 @@ | |||
import { createStackNavigator } from "react-navigation"; | |||
import { createStackNavigator } from "react-navigation-stack"; | |||
import SignInScreen from "./SignInScreen"; | |||
import SignUpScreen from "./SignUpScreen"; | |||
@@ -1,7 +1,7 @@ | |||
import React from "react"; | |||
import { createStore, applyMiddleware, combineReducers } from "redux"; | |||
import { persistStore, persistReducer } from "redux-persist"; | |||
import storage from "redux-persist/lib/storage"; | |||
import AsyncStorage from "@react-native-community/async-storage"; | |||
import stateReconciler from "redux-persist/lib/stateReconciler/autoMergeLevel2"; | |||
import thunk from "redux-thunk"; | |||
@@ -19,7 +19,7 @@ const rootReducer = combineReducers({ | |||
const persistConfig = { | |||
key: "root", | |||
storage, | |||
storage: AsyncStorage, | |||
stateReconciler, | |||
whitelist: ["settings", "auth"] | |||
}; | |||