瀏覽代碼

react native v0.70.2

pull/738/head
Guillaume Vincent 2 年之前
父節點
當前提交
84e185a3bc
共有 91 個文件被更改,包括 4610 次插入3015 次删除
  1. +1
    -1
      mobile/.bundle/config
  2. +12
    -0
      mobile/.eslintrc.js
  3. +0
    -65
      mobile/.flowconfig
  4. +6
    -3
      mobile/.gitignore
  5. +1
    -0
      mobile/.node-version
  6. +7
    -0
      mobile/.prettierrc.js
  7. +1
    -1
      mobile/.ruby-version
  8. +1
    -1
      mobile/.watchmanconfig
  9. +0
    -0
      mobile/App.tsx
  10. +4
    -2
      mobile/Gemfile
  11. +14
    -0
      mobile/__tests__/App-test.tsx
  12. +0
    -0
      mobile/android/app/_BUCK
  13. +106
    -29
      mobile/android/app/build.gradle
  14. +1
    -1
      mobile/android/app/src/debug/java/com/lesspass/ReactNativeFlipper.java
  15. +46
    -0
      mobile/android/app/src/main/java/com/lesspass/android/LessPassClipboardModule.java
  16. +2
    -1
      mobile/android/app/src/main/java/com/lesspass/android/LessPassPackage.java
  17. +22
    -1
      mobile/android/app/src/main/java/com/lesspass/android/MainActivity.java
  18. +12
    -11
      mobile/android/app/src/main/java/com/lesspass/android/MainApplication.java
  19. +116
    -0
      mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/MainApplicationReactNativeHost.java
  20. +36
    -0
      mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/components/MainComponentsRegistry.java
  21. +48
    -0
      mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
  22. +7
    -0
      mobile/android/app/src/main/jni/CMakeLists.txt
  23. +32
    -0
      mobile/android/app/src/main/jni/MainApplicationModuleProvider.cpp
  24. +16
    -0
      mobile/android/app/src/main/jni/MainApplicationModuleProvider.h
  25. +45
    -0
      mobile/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
  26. +38
    -0
      mobile/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
  27. +65
    -0
      mobile/android/app/src/main/jni/MainComponentsRegistry.cpp
  28. +32
    -0
      mobile/android/app/src/main/jni/MainComponentsRegistry.h
  29. +11
    -0
      mobile/android/app/src/main/jni/OnLoad.cpp
  30. +8
    -1
      mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml
  31. +0
    -0
      mobile/android/app/src/test/java/com/lesspass/CryptoTest.java
  32. +16
    -34
      mobile/android/build.gradle
  33. +2
    -0
      mobile/android/gradle.properties
  34. 二進制
      mobile/android/gradle/wrapper/gradle-wrapper.jar
  35. +1
    -1
      mobile/android/gradle/wrapper/gradle-wrapper.properties
  36. +1
    -1
      mobile/android/gradlew
  37. +2
    -1
      mobile/android/gradlew.bat
  38. +4
    -1
      mobile/android/settings.gradle
  39. +1
    -1
      mobile/app.json
  40. +5
    -0
      mobile/babel.config.js
  41. +11
    -0
      mobile/ios/.xcode.env
  42. +321
    -124
      mobile/ios/LessPass.xcodeproj/project.pbxproj
  43. +0
    -7
      mobile/ios/LessPass.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  44. +1
    -15
      mobile/ios/LessPass.xcodeproj/xcshareddata/xcschemes/LessPass.xcscheme
  45. +2
    -2
      mobile/ios/LessPass.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  46. +0
    -62
      mobile/ios/LessPass/AppDelegate.m
  47. +133
    -0
      mobile/ios/LessPass/AppDelegate.mm
  48. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/100.png
  49. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/1024.png
  50. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/114.png
  51. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/120.png
  52. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/128.png
  53. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/144.png
  54. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/152.png
  55. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/16.png
  56. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/167.png
  57. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/172.png
  58. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/180.png
  59. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/196.png
  60. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/20.png
  61. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/216.png
  62. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/256.png
  63. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/29.png
  64. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/32.png
  65. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/40.png
  66. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/48.png
  67. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/50.png
  68. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/512.png
  69. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/55.png
  70. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/57.png
  71. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/58.png
  72. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/60.png
  73. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/64.png
  74. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/72.png
  75. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/76.png
  76. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/80.png
  77. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/87.png
  78. 二進制
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/88.png
  79. +277
    -130
      mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/Contents.json
  80. +3
    -16
      mobile/ios/LessPass/Info.plist
  81. +8
    -0
      mobile/ios/LessPassClipboardModule.h
  82. +14
    -0
      mobile/ios/LessPassClipboardModule.m
  83. +14
    -13
      mobile/ios/LessPassTests/LessPassTests.m
  84. +21
    -11
      mobile/ios/Podfile
  85. +302
    -280
      mobile/ios/Podfile.lock
  86. +47
    -37
      mobile/package.json
  87. +0
    -7
      mobile/react-native.config.js
  88. +3
    -3
      mobile/src/password/PasswordGeneratorScreen.js
  89. +1
    -1
      mobile/src/version.json
  90. +10
    -0
      mobile/tsconfig.json
  91. +2720
    -2151
      mobile/yarn.lock

+ 1
- 1
mobile/.bundle/config 查看文件

@@ -1,2 +1,2 @@
BUNDLE_PATH: "vendor/bundle"
BUNDLE_FORCE_RUBY_PLATFORM: 1
BUNDLE_FORCE_RUBY_PLATFORM: 1

+ 12
- 0
mobile/.eslintrc.js 查看文件

@@ -1,4 +1,16 @@
module.exports = {
root: true,
extends: '@react-native-community',
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
overrides: [
{
files: ['*.ts', '*.tsx'],
rules: {
'@typescript-eslint/no-shadow': ['error'],
'no-shadow': 'off',
'no-undef': 'off',
},
},
],
};

+ 0
- 65
mobile/.flowconfig 查看文件

@@ -1,65 +0,0 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js

; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/

; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*

; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js

[untyped]
.*/node_modules/@react-native-community/cli/.*/.*

[include]

[libs]
node_modules/react-native/interface.js
node_modules/react-native/flow/

[options]
emoji=true

exact_by_default=true

format.bracket_spacing=false

module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js

munge_underscores=true

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

[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
unnecessary-invariant=warn
signature-verification-failure=warn

[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import

[version]
^0.170.0

+ 6
- 3
mobile/.gitignore 查看文件

@@ -20,6 +20,7 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
ios/.xcode.env.local

# Android/IntelliJ
#
@@ -29,6 +30,7 @@ build/
local.properties
*.iml
*.hprof
.cxx/

# node.js
#
@@ -49,9 +51,10 @@ buck-out/
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/

*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
**/fastlane/report.xml
**/fastlane/Preview.html
**/fastlane/screenshots
**/fastlane/test_output

# Bundle artifact
*.jsbundle


+ 1
- 0
mobile/.node-version 查看文件

@@ -0,0 +1 @@
16

+ 7
- 0
mobile/.prettierrc.js 查看文件

@@ -0,0 +1,7 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: false,
singleQuote: true,
trailingComma: 'all',
};

+ 1
- 1
mobile/.ruby-version 查看文件

@@ -1 +1 @@
2.7.4
2.7.5

+ 1
- 1
mobile/.watchmanconfig 查看文件

@@ -1 +1 @@
{}
{}

mobile/App.js → mobile/App.tsx 查看文件


+ 4
- 2
mobile/Gemfile 查看文件

@@ -1,4 +1,6 @@
source 'https://rubygems.org'

# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '2.7.4'
gem 'cocoapods', '~> 1.11', '>= 1.11.2'
ruby '2.7.5'

gem 'cocoapods', '~> 1.11', '>= 1.11.2'

+ 14
- 0
mobile/__tests__/App-test.tsx 查看文件

@@ -0,0 +1,14 @@
/**
* @format
*/

import 'react-native';
import React from 'react';
import App from '../App';

// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';

it('renders correctly', () => {
renderer.create(<App />);
});

mobile/android/app/BUCK → mobile/android/app/_BUCK 查看文件


+ 106
- 29
mobile/android/app/build.gradle 查看文件

@@ -1,6 +1,7 @@
apply plugin: "com.android.application"

import com.android.build.OutputFile
import org.apache.tools.ant.taskdefs.condition.Os

/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
@@ -123,16 +124,19 @@ 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
* This should be set on project.ext.react and that value will be read 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);

/**
* Architectures to build native code for in debug.
* Architectures to build native code for.
*/
def nativeArchitectures = project.getProperties().get("reactNativeDebugArchitectures")
def reactNativeArchitectures() {
def value = project.getProperties().get("reactNativeArchitectures")
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}

android {
ndkVersion rootProject.ext.ndkVersion
@@ -143,9 +147,77 @@ android {
applicationId "com.lesspass.android"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode versionMajor * 10000 + versionMinor * 100 + versionPatch
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
multiDexEnabled true
versionCode 9007001
versionName "9.7.1"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()

if (isNewArchitectureEnabled()) {
// We configure the CMake build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
cmake {
arguments "-DPROJECT_BUILD_DIR=$buildDir",
"-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
"-DNODE_MODULES_DIR=$rootDir/../node_modules",
"-DANDROID_STL=c++_shared"
}
}
if (!enableSeparateBuildPerCPUArchitecture) {
ndk {
abiFilters (*reactNativeArchitectures())
}
}
}
}

if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
cmake {
path "$projectDir/src/main/jni/CMakeLists.txt"
}
}
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
into("$buildDir/react-ndk/exported")
}
afterEvaluate {
// If you wish to add a custom TurboModule or component locally,
// you should uncomment this line.
// preBuild.dependsOn("generateCodegenArtifactsFromSchema")
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)

// Due to a bug inside AGP, we have to explicitly set a dependency
// between configureCMakeDebug* tasks and the preBuild tasks.
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
configureCMakeDebug.dependsOn(preDebugBuild)
reactNativeArchitectures().each { architecture ->
tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
dependsOn("preDebugBuild")
}
tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
dependsOn("preReleaseBuild")
}
}
}
}

splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include (*reactNativeArchitectures())
}
}
signingConfigs {
debug {
@@ -163,23 +235,9 @@ android {
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
if (nativeArchitectures) {
ndk {
abiFilters nativeArchitectures.split(',')
}
}
manifestPlaceholders = [excludeSystemAlertWindowPermission: "false"]
}
release {
minifyEnabled enableProguardInReleaseBuilds
@@ -194,11 +252,12 @@ android {
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
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) * 10000000 + defaultConfig.versionCode
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}

}
@@ -207,6 +266,7 @@ android {

dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])

//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules

@@ -226,21 +286,30 @@ dependencies {
}

implementation "com.madgag.spongycastle:core:1.58.0.0"

if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
//noinspection GradleDynamicVersion
implementation("com.facebook.react:hermes-engine:+") { // From node_modules
exclude group:'com.facebook.fbjni'
}
} else {
implementation jscFlavor
}
testImplementation "junit:junit:4.12"
implementation "com.android.support:multidex:1.0.3"
}

sourceSets {
test {
java {
srcDirs = ["test"]
if (isNewArchitectureEnabled()) {
// If new architecture is enabled, we let you build RN from source
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
// This will be applied to all the imported transtitive dependency.
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))
.using(project(":ReactAndroid"))
.because("On New Architecture we're building React Native from source")
substitute(module("com.facebook.react:hermes-engine"))
.using(project(":ReactAndroid:hermes-engine"))
.because("On New Architecture we're building Hermes from source")
}
}
}
@@ -253,3 +322,11 @@ task copyDownloadableDepsToLibs(type: Copy) {
}

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

def isNewArchitectureEnabled() {
// To opt-in for the New Architecture, you can either:
// - Set `newArchEnabled` to true inside the `gradle.properties` file
// - Invoke gradle with `-newArchEnabled=true`
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}

mobile/android/app/src/debug/java/com/lesspass/android/ReactNativeFlipper.java → mobile/android/app/src/debug/java/com/lesspass/ReactNativeFlipper.java 查看文件


+ 46
- 0
mobile/android/app/src/main/java/com/lesspass/android/LessPassClipboardModule.java 查看文件

@@ -0,0 +1,46 @@
package com.lesspass.android;

import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.os.PersistableBundle;
import android.content.Context;

import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;


public class LessPassClipboardModule extends ReactContextBaseJavaModule {
private ReactApplicationContext reactContext;

public LessPassClipboardModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
}

@Override
public String getName() {
return "LessPassClipboard";
}

private ClipboardManager getClipboardService() {
return (ClipboardManager) reactContext.getSystemService(Context.CLIPBOARD_SERVICE);
}

@ReactMethod
public void copy(String text) {
try {
ClipData clipdata = ClipData.newPlainText(null, text);
PersistableBundle extras = new PersistableBundle();
extras.putBoolean("android.content.extra.IS_SENSITIVE", true);
clipdata.getDescription().setExtras(extras);
ClipboardManager clipboard = getClipboardService();
clipboard.setPrimaryClip(clipdata);
} catch (Exception e) {
e.printStackTrace();
}
}
}

mobile/android/app/src/main/java/com/lesspass/android/LessPassReactPackage.java → mobile/android/app/src/main/java/com/lesspass/android/LessPassPackage.java 查看文件

@@ -9,7 +9,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LessPassReactPackage implements ReactPackage {
public class LessPassPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
@@ -19,6 +19,7 @@ public class LessPassReactPackage implements ReactPackage {
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new LessPassModule(reactContext));
modules.add(new LessPassClipboardModule(reactContext));
return modules;
}
}

+ 22
- 1
mobile/android/app/src/main/java/com/lesspass/android/MainActivity.java 查看文件

@@ -1,11 +1,17 @@
package com.lesspass.android;

import android.os.Bundle;

import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;

public class MainActivity extends ReactActivity {

/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "LessPass";
@@ -13,16 +19,19 @@ public class MainActivity extends ReactActivity {

/**
* Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
* you can specify the rendered you wish to use (Fabric or the older renderer).
* you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
* (Paper).
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new MainActivityDelegate(this, getMainComponentName());
}

public static class MainActivityDelegate extends ReactActivityDelegate {
public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
super(activity, mainComponentName);
}

@Override
protected ReactRootView createRootView() {
ReactRootView reactRootView = new ReactRootView(getContext());
@@ -30,5 +39,17 @@ public class MainActivity extends ReactActivity {
reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
return reactRootView;
}

@Override
protected boolean isConcurrentRootEnabled() {
// If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).
// More on this on https://reactjs.org/blog/2022/03/29/react-v18.html
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
}
}

+ 12
- 11
mobile/android/app/src/main/java/com/lesspass/android/MainApplication.java 查看文件

@@ -2,7 +2,6 @@ package com.lesspass.android;

import android.app.Application;
import android.content.Context;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
@@ -10,7 +9,7 @@ import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
import com.lesspass.newarchitecture.MainApplicationReactNativeHost;
import com.lesspass.android.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

@@ -27,7 +26,9 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(new LessPassReactPackage());
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
packages.add(new LessPassPackage());
return packages;
}

@@ -59,21 +60,21 @@ public class MainApplication extends Application implements ReactApplication {
}

/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(
Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
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.lesspass.android.ReactNativeFlipper");
Class<?> aClass = Class.forName("com.lesspass.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);


+ 116
- 0
mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/MainApplicationReactNativeHost.java 查看文件

@@ -0,0 +1,116 @@
package com.lesspass.android.newarchitecture;

import android.app.Application;
import androidx.annotation.NonNull;
import com.facebook.react.PackageList;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleProvider;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JSIModuleType;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.react.fabric.CoreComponentsRegistry;
import com.facebook.react.fabric.FabricJSIModuleProvider;
import com.facebook.react.fabric.ReactNativeConfig;
import com.facebook.react.uimanager.ViewManagerRegistry;
import com.lesspass.android.BuildConfig;
import com.lesspass.android.newarchitecture.components.MainComponentsRegistry;
import com.lesspass.android.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
import java.util.ArrayList;
import java.util.List;

/**
* A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both
* TurboModule delegates and the Fabric Renderer.
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationReactNativeHost extends ReactNativeHost {
public MainApplicationReactNativeHost(Application application) {
super(application);
}

@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}

@Override
protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
// TurboModules must also be loaded here providing a valid TurboReactPackage implementation:
// packages.add(new TurboReactPackage() { ... });
// If you have custom Fabric Components, their ViewManagers should also be loaded here
// inside a ReactPackage.
return packages;
}

@Override
protected String getJSMainModuleName() {
return "index";
}

@NonNull
@Override
protected ReactPackageTurboModuleManagerDelegate.Builder
getReactPackageTurboModuleManagerDelegateBuilder() {
// Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary
// for the new architecture and to use TurboModules correctly.
return new MainApplicationTurboModuleManagerDelegate.Builder();
}

@Override
protected JSIModulePackage getJSIModulePackage() {
return new JSIModulePackage() {
@Override
public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
final List<JSIModuleSpec> specs = new ArrayList<>();

// Here we provide a new JSIModuleSpec that will be responsible of providing the
// custom Fabric Components.
specs.add(
new JSIModuleSpec() {
@Override
public JSIModuleType getJSIModuleType() {
return JSIModuleType.UIManager;
}

@Override
public JSIModuleProvider<UIManager> getJSIModuleProvider() {
final ComponentFactory componentFactory = new ComponentFactory();
CoreComponentsRegistry.register(componentFactory);

// Here we register a Components Registry.
// The one that is generated with the template contains no components
// and just provides you the one from React Native core.
MainComponentsRegistry.register(componentFactory);

final ReactInstanceManager reactInstanceManager = getReactInstanceManager();

ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
reactInstanceManager.getOrCreateViewManagers(reactApplicationContext));

return new FabricJSIModuleProvider(
reactApplicationContext,
componentFactory,
ReactNativeConfig.DEFAULT_CONFIG,
viewManagerRegistry);
}
});
return specs;
}
};
}
}

+ 36
- 0
mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/components/MainComponentsRegistry.java 查看文件

@@ -0,0 +1,36 @@
package com.lesspass.android.newarchitecture.components;

import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.fabric.ComponentFactory;
import com.facebook.soloader.SoLoader;

/**
* Class responsible to load the custom Fabric Components. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
@DoNotStrip
public class MainComponentsRegistry {
static {
SoLoader.loadLibrary("fabricjni");
}

@DoNotStrip private final HybridData mHybridData;

@DoNotStrip
private native HybridData initHybrid(ComponentFactory componentFactory);

@DoNotStrip
private MainComponentsRegistry(ComponentFactory componentFactory) {
mHybridData = initHybrid(componentFactory);
}

@DoNotStrip
public static MainComponentsRegistry register(ComponentFactory componentFactory) {
return new MainComponentsRegistry(componentFactory);
}
}

+ 48
- 0
mobile/android/app/src/main/java/com/lesspass/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java 查看文件

@@ -0,0 +1,48 @@
package com.lesspass.android.newarchitecture.modules;

import com.facebook.jni.HybridData;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.soloader.SoLoader;
import java.util.List;

/**
* Class responsible to load the TurboModules. This class has native methods and needs a
* corresponding C++ implementation/header file to work correctly (already placed inside the jni/
* folder for you).
*
* <p>Please note that this class is used ONLY if you opt-in for the New Architecture (see the
* `newArchEnabled` property). Is ignored otherwise.
*/
public class MainApplicationTurboModuleManagerDelegate
extends ReactPackageTurboModuleManagerDelegate {

private static volatile boolean sIsSoLibraryLoaded;

protected MainApplicationTurboModuleManagerDelegate(
ReactApplicationContext reactApplicationContext, List<ReactPackage> packages) {
super(reactApplicationContext, packages);
}

protected native HybridData initHybrid();

native boolean canCreateTurboModule(String moduleName);

public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {
protected MainApplicationTurboModuleManagerDelegate build(
ReactApplicationContext context, List<ReactPackage> packages) {
return new MainApplicationTurboModuleManagerDelegate(context, packages);
}
}

@Override
protected synchronized void maybeLoadOtherSoLibraries() {
if (!sIsSoLibraryLoaded) {
// If you change the name of your application .so file in the Android.mk file,
// make sure you update the name here as well.
SoLoader.loadLibrary("lesspass_appmodules");
sIsSoLibraryLoaded = true;
}
}
}

+ 7
- 0
mobile/android/app/src/main/jni/CMakeLists.txt 查看文件

@@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.13)

# Define the library name here.
project(lesspass_appmodules)

# This file includes all the necessary to let you build your application with the New Architecture.
include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake)

+ 32
- 0
mobile/android/app/src/main/jni/MainApplicationModuleProvider.cpp 查看文件

@@ -0,0 +1,32 @@
#include "MainApplicationModuleProvider.h"

#include <rncli.h>
#include <rncore.h>

namespace facebook {
namespace react {

std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string &moduleName,
const JavaTurboModule::InitParams &params) {
// Here you can provide your own module provider for TurboModules coming from
// either your application or from external libraries. The approach to follow
// is similar to the following (for a library called `samplelibrary`:
//
// auto module = samplelibrary_ModuleProvider(moduleName, params);
// if (module != nullptr) {
// return module;
// }
// return rncore_ModuleProvider(moduleName, params);

// Module providers autolinked by RN CLI
auto rncli_module = rncli_ModuleProvider(moduleName, params);
if (rncli_module != nullptr) {
return rncli_module;
}

return rncore_ModuleProvider(moduleName, params);
}

} // namespace react
} // namespace facebook

+ 16
- 0
mobile/android/app/src/main/jni/MainApplicationModuleProvider.h 查看文件

@@ -0,0 +1,16 @@
#pragma once

#include <memory>
#include <string>

#include <ReactCommon/JavaTurboModule.h>

namespace facebook {
namespace react {

std::shared_ptr<TurboModule> MainApplicationModuleProvider(
const std::string &moduleName,
const JavaTurboModule::InitParams &params);

} // namespace react
} // namespace facebook

+ 45
- 0
mobile/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp 查看文件

@@ -0,0 +1,45 @@
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainApplicationModuleProvider.h"

namespace facebook {
namespace react {

jni::local_ref<MainApplicationTurboModuleManagerDelegate::jhybriddata>
MainApplicationTurboModuleManagerDelegate::initHybrid(
jni::alias_ref<jhybridobject>) {
return makeCxxInstance();
}

void MainApplicationTurboModuleManagerDelegate::registerNatives() {
registerHybrid({
makeNativeMethod(
"initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
makeNativeMethod(
"canCreateTurboModule",
MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
});
}

std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string &name,
const std::shared_ptr<CallInvoker> &jsInvoker) {
// Not implemented yet: provide pure-C++ NativeModules here.
return nullptr;
}

std::shared_ptr<TurboModule>
MainApplicationTurboModuleManagerDelegate::getTurboModule(
const std::string &name,
const JavaTurboModule::InitParams &params) {
return MainApplicationModuleProvider(name, params);
}

bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
const std::string &name) {
return getTurboModule(name, nullptr) != nullptr ||
getTurboModule(name, {.moduleName = name}) != nullptr;
}

} // namespace react
} // namespace facebook

+ 38
- 0
mobile/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h 查看文件

@@ -0,0 +1,38 @@
#include <memory>
#include <string>

#include <ReactCommon/TurboModuleManagerDelegate.h>
#include <fbjni/fbjni.h>

namespace facebook {
namespace react {

class MainApplicationTurboModuleManagerDelegate
: public jni::HybridClass<
MainApplicationTurboModuleManagerDelegate,
TurboModuleManagerDelegate> {
public:
// Adapt it to the package you used for your Java class.
static constexpr auto kJavaDescriptor =
"Lcom/lesspass/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";

static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);

static void registerNatives();

std::shared_ptr<TurboModule> getTurboModule(
const std::string &name,
const std::shared_ptr<CallInvoker> &jsInvoker) override;
std::shared_ptr<TurboModule> getTurboModule(
const std::string &name,
const JavaTurboModule::InitParams &params) override;

/**
* Test-only method. Allows user to verify whether a TurboModule can be
* created by instances of this class.
*/
bool canCreateTurboModule(const std::string &name);
};

} // namespace react
} // namespace facebook

+ 65
- 0
mobile/android/app/src/main/jni/MainComponentsRegistry.cpp 查看文件

@@ -0,0 +1,65 @@
#include "MainComponentsRegistry.h"

#include <CoreComponentsRegistry.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/components/rncore/ComponentDescriptors.h>
#include <rncli.h>

namespace facebook {
namespace react {

MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}

std::shared_ptr<ComponentDescriptorProviderRegistry const>
MainComponentsRegistry::sharedProviderRegistry() {
auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();

// Autolinked providers registered by RN CLI
rncli_registerProviders(providerRegistry);

// Custom Fabric Components go here. You can register custom
// components coming from your App or from 3rd party libraries here.
//
// providerRegistry->add(concreteComponentDescriptorProvider<
// AocViewerComponentDescriptor>());
return providerRegistry;
}

jni::local_ref<MainComponentsRegistry::jhybriddata>
MainComponentsRegistry::initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate) {
auto instance = makeCxxInstance(delegate);

auto buildRegistryFunction =
[](EventDispatcher::Weak const &eventDispatcher,
ContextContainer::Shared const &contextContainer)
-> ComponentDescriptorRegistry::Shared {
auto registry = MainComponentsRegistry::sharedProviderRegistry()
->createComponentDescriptorRegistry(
{eventDispatcher, contextContainer});

auto mutableRegistry =
std::const_pointer_cast<ComponentDescriptorRegistry>(registry);

mutableRegistry->setFallbackComponentDescriptor(
std::make_shared<UnimplementedNativeViewComponentDescriptor>(
ComponentDescriptorParameters{
eventDispatcher, contextContainer, nullptr}));

return registry;
};

delegate->buildRegistryFunction = buildRegistryFunction;
return instance;
}

void MainComponentsRegistry::registerNatives() {
registerHybrid({
makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
});
}

} // namespace react
} // namespace facebook

+ 32
- 0
mobile/android/app/src/main/jni/MainComponentsRegistry.h 查看文件

@@ -0,0 +1,32 @@
#pragma once

#include <ComponentFactory.h>
#include <fbjni/fbjni.h>
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>

namespace facebook {
namespace react {

class MainComponentsRegistry
: public facebook::jni::HybridClass<MainComponentsRegistry> {
public:
// Adapt it to the package you used for your Java class.
constexpr static auto kJavaDescriptor =
"Lcom/lesspass/newarchitecture/components/MainComponentsRegistry;";

static void registerNatives();

MainComponentsRegistry(ComponentFactory *delegate);

private:
static std::shared_ptr<ComponentDescriptorProviderRegistry const>
sharedProviderRegistry();

static jni::local_ref<jhybriddata> initHybrid(
jni::alias_ref<jclass>,
ComponentFactory *delegate);
};

} // namespace react
} // namespace facebook

+ 11
- 0
mobile/android/app/src/main/jni/OnLoad.cpp 查看文件

@@ -0,0 +1,11 @@
#include <fbjni/fbjni.h>
#include "MainApplicationTurboModuleManagerDelegate.h"
#include "MainComponentsRegistry.h"

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
return facebook::jni::initialize(vm, [] {
facebook::react::MainApplicationTurboModuleManagerDelegate::
registerNatives();
facebook::react::MainComponentsRegistry::registerNatives();
});
}

+ 8
- 1
mobile/android/app/src/main/res/drawable/rn_edit_text_material.xml 查看文件

@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project

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.
@@ -15,15 +18,19 @@
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">

<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'

<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>

For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>

</inset>

mobile/android/app/src/test/java/com/lesspass/android/CryptoTest.java → mobile/android/app/src/test/java/com/lesspass/CryptoTest.java 查看文件


+ 16
- 34
mobile/android/build.gradle 查看文件

@@ -1,16 +1,28 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
import groovy.json.JsonSlurper

buildscript {
ext {
buildToolsVersion = "31.0.0"
minSdkVersion = 21
compileSdkVersion = 31
targetSdkVersion = 31

if (System.properties['os.arch'] == "aarch64") {
// For M1 Users we need to use the NDK 24 which added support for aarch64
ndkVersion = "24.0.8215888"
} else {
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"
}
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:7.0.4")
classpath("com.android.tools.build:gradle:7.2.1")
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("de.undercouch:gradle-download-task:4.1.2")

classpath("de.undercouch:gradle-download-task:5.0.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -34,36 +46,6 @@ allprojects {
}
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}

ext {
buildToolsVersion = "31.0.0"
minSdkVersion = 21
compileSdkVersion = 31
targetSdkVersion = 31
if (System.properties['os.arch'] == "aarch64") {
// For M1 Users we need to use the NDK 24 which added support for aarch64
ndkVersion = "24.0.8215888"
} else {
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"
}
def npmVersion = getNpmVersionArray()
versionMajor = npmVersion[0]
versionMinor = npmVersion[1]
versionPatch = npmVersion[2]
}

def getNpmVersion() {
def inputFile = new File("../package.json")
def packageJson = new JsonSlurper().parseText(inputFile.text)
return packageJson["version"]
}

def getNpmVersionArray() {
def (major, minor, patch) = getNpmVersion().tokenize('.')
return [Integer.parseInt(major), Integer.parseInt(minor), Integer.parseInt(patch)] as int[]
}

+ 2
- 0
mobile/android/gradle.properties 查看文件

@@ -26,10 +26,12 @@ android.enableJetifier=true

# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.125.0

# Use this property to specify which architecture you want to build.
# You can also override it from the CLI using
# ./gradlew <task> -PreactNativeArchitectures=x86_64
reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64

# Use this property to enable support to the new architecture.
# This will allow you to use TurboModules and the Fabric render in
# your application. You should enable this flag either if you want


二進制
mobile/android/gradle/wrapper/gradle-wrapper.jar 查看文件


+ 1
- 1
mobile/android/gradle/wrapper/gradle-wrapper.properties 查看文件

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

+ 1
- 1
mobile/android/gradlew 查看文件

@@ -231,4 +231,4 @@ eval "set -- $(
tr '\n' ' '
)" '"$@"'

exec "$JAVACMD" "$@"
exec "$JAVACMD" "$@"

+ 2
- 1
mobile/android/gradlew.bat 查看文件

@@ -5,7 +5,7 @@
@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 https://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,
@@ -75,6 +75,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of


+ 4
- 1
mobile/android/settings.gradle 查看文件

@@ -2,7 +2,10 @@ rootProject.name = 'LessPass'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
includeBuild('../node_modules/react-native-gradle-plugin')

if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
include(":ReactAndroid")
project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
}
include(":ReactAndroid:hermes-engine")
project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')
}

+ 1
- 1
mobile/app.json 查看文件

@@ -1,4 +1,4 @@
{
"name": "LessPass",
"displayName": "LessPass"
}
}

+ 5
- 0
mobile/babel.config.js 查看文件

@@ -1,3 +1,8 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
env: {
production: {
plugins: ['react-native-paper/babel'],
},
},
};

+ 11
- 0
mobile/ios/.xcode.env 查看文件

@@ -0,0 +1,11 @@
# This `.xcode.env` file is versioned and is used to source the environment
# used when running script phases inside Xcode.
# To customize your local environment, you can create an `.xcode.env.local`
# file that is not versioned.

# NODE_BINARY variable contains the PATH to the node executable.
#
# Customize the NODE_BINARY variable here.
# For example, to use nvm with brew, add the following line
# . "$(brew --prefix nvm)/nvm.sh" --no-use
export NODE_BINARY=$(command -v node)

+ 321
- 124
mobile/ios/LessPass.xcodeproj/project.pbxproj 查看文件

@@ -3,73 +3,114 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 54;
objects = {

/* Begin PBXBuildFile section */
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
00E356F31AD99517003FC87E /* LessPassTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* LessPassTests.m */; };
0C80B921A6F3F58F76C31292 /* libPods-LessPass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-LessPass.a */; };
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2135E9CC48DB47BCB711C12B /* Hack.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2A7E546E77E74EF3A37A6A77 /* Hack.ttf */; };
7699B88040F8A987B510C191 /* libPods-LessPass-LessPassTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-LessPass-LessPassTests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
F08AE89A24CCC1AC00473F32 /* LessPassModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = F08AE89924CCC1AC00473F32 /* LessPassModule.swift */; };
F08AE89C24CCC24600473F32 /* LessPassModule.m in Sources */ = {isa = PBXBuildFile; fileRef = F08AE89B24CCC24600473F32 /* LessPassModule.m */; };
F469205BC7F04E6E826112BF /* libPods-LessPass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7C3CEA04B154D4EA5B5FE2D /* libPods-LessPass.a */; };
F0198E9428FDD15300D6FFF4 /* LessPassClipboardModule.m in Sources */ = {isa = PBXBuildFile; fileRef = F0198E9328FDD15300D6FFF4 /* LessPassClipboardModule.m */; };
F0198E9528FDD15300D6FFF4 /* LessPassClipboardModule.m in Sources */ = {isa = PBXBuildFile; fileRef = F0198E9328FDD15300D6FFF4 /* LessPassClipboardModule.m */; };
F0614DEC28F4B29F00A63AC5 /* Hack.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F0614DEB28F4B29F00A63AC5 /* Hack.ttf */; };
F0614DEF28F4B49C00A63AC5 /* LessPassModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0614DEE28F4B49C00A63AC5 /* LessPassModule.swift */; };
F0614DF128F4B58B00A63AC5 /* LessPassModule.m in Sources */ = {isa = PBXBuildFile; fileRef = F0614DF028F4B58B00A63AC5 /* LessPassModule.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = LessPass;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
0033D790DF6D0BD054D0FE0B /* Pods-LessPass.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass.release.xcconfig"; path = "Target Support Files/Pods-LessPass/Pods-LessPass.release.xcconfig"; sourceTree = "<group>"; };
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
00E356EE1AD99517003FC87E /* LessPassTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LessPassTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* LessPassTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LessPassTests.m; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* LessPass.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LessPass.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = LessPass/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = LessPass/AppDelegate.m; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = LessPass/AppDelegate.mm; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = LessPass/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = LessPass/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = LessPass/main.m; sourceTree = "<group>"; };
2A7E546E77E74EF3A37A6A77 /* Hack.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Hack.ttf; path = ../assets/fonts/Hack.ttf; sourceTree = "<group>"; };
19F6CBCC0A4E27FBF8BF4A61 /* libPods-LessPass-LessPassTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LessPass-LessPassTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
3B4392A12AC88292D35C810B /* Pods-LessPass.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass.debug.xcconfig"; path = "Target Support Files/Pods-LessPass/Pods-LessPass.debug.xcconfig"; sourceTree = "<group>"; };
5709B34CF0A7D63546082F79 /* Pods-LessPass.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass.release.xcconfig"; path = "Target Support Files/Pods-LessPass/Pods-LessPass.release.xcconfig"; sourceTree = "<group>"; };
5B7EB9410499542E8C5724F5 /* Pods-LessPass-LessPassTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass-LessPassTests.debug.xcconfig"; path = "Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests.debug.xcconfig"; sourceTree = "<group>"; };
5DCACB8F33CDC322A6C60F78 /* libPods-LessPass.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LessPass.a"; sourceTree = BUILT_PRODUCTS_DIR; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LessPass/LaunchScreen.storyboard; sourceTree = "<group>"; };
87960872BEE8F60939847679 /* Pods-LessPass.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass.debug.xcconfig"; path = "Target Support Files/Pods-LessPass/Pods-LessPass.debug.xcconfig"; sourceTree = "<group>"; };
A7C3CEA04B154D4EA5B5FE2D /* libPods-LessPass.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LessPass.a"; sourceTree = BUILT_PRODUCTS_DIR; };
89C6BE57DB24E9ADA2F236DE /* Pods-LessPass-LessPassTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LessPass-LessPassTests.release.xcconfig"; path = "Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests.release.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F08AE89824CCC1AB00473F32 /* LessPass-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LessPass-Bridging-Header.h"; sourceTree = "<group>"; };
F08AE89924CCC1AC00473F32 /* LessPassModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LessPassModule.swift; sourceTree = "<group>"; };
F08AE89B24CCC24600473F32 /* LessPassModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LessPassModule.m; sourceTree = "<group>"; };
F0198E9228FDD07E00D6FFF4 /* LessPassClipboardModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LessPassClipboardModule.h; sourceTree = "<group>"; };
F0198E9328FDD15300D6FFF4 /* LessPassClipboardModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LessPassClipboardModule.m; sourceTree = "<group>"; };
F0614DE728F4B26B00A63AC5 /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
F0614DE928F4B27800A63AC5 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
F0614DEB28F4B29F00A63AC5 /* Hack.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Hack.ttf; path = ../assets/fonts/Hack.ttf; sourceTree = "<group>"; };
F0614DED28F4B49C00A63AC5 /* LessPass-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LessPass-Bridging-Header.h"; sourceTree = "<group>"; };
F0614DEE28F4B49C00A63AC5 /* LessPassModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LessPassModule.swift; sourceTree = "<group>"; };
F0614DF028F4B58B00A63AC5 /* LessPassModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LessPassModule.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
00E356EB1AD99517003FC87E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7699B88040F8A987B510C191 /* libPods-LessPass-LessPassTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F469205BC7F04E6E826112BF /* libPods-LessPass.a in Frameworks */,
0C80B921A6F3F58F76C31292 /* libPods-LessPass.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
057FF7BE84754F339DE1FDE2 /* Resources */ = {
00E356EF1AD99517003FC87E /* LessPassTests */ = {
isa = PBXGroup;
children = (
2A7E546E77E74EF3A37A6A77 /* Hack.ttf */,
00E356F21AD99517003FC87E /* LessPassTests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
name = Resources;
path = LessPassTests;
sourceTree = "<group>";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* LessPass */ = {
isa = PBXGroup;
children = (
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
F0614DE628F4B1EA00A63AC5 /* Fonts */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
F08AE89924CCC1AC00473F32 /* LessPassModule.swift */,
F08AE89824CCC1AB00473F32 /* LessPass-Bridging-Header.h */,
F08AE89B24CCC24600473F32 /* LessPassModule.m */,
F0614DEE28F4B49C00A63AC5 /* LessPassModule.swift */,
F0614DF028F4B58B00A63AC5 /* LessPassModule.m */,
F0614DED28F4B49C00A63AC5 /* LessPass-Bridging-Header.h */,
F0198E9228FDD07E00D6FFF4 /* LessPassClipboardModule.h */,
F0198E9328FDD15300D6FFF4 /* LessPassClipboardModule.m */,
);
name = LessPass;
sourceTree = "<group>";
@@ -78,8 +119,8 @@
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
A7C3CEA04B154D4EA5B5FE2D /* libPods-LessPass.a */,
5DCACB8F33CDC322A6C60F78 /* libPods-LessPass.a */,
19F6CBCC0A4E27FBF8BF4A61 /* libPods-LessPass-LessPassTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -96,10 +137,10 @@
children = (
13B07FAE1A68108700A75B9A /* LessPass */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* LessPassTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
D727F9DEC1CEF1C5FAE9CF83 /* Pods */,
057FF7BE84754F339DE1FDE2 /* Resources */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "<group>";
@@ -110,34 +151,68 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* LessPass.app */,
00E356EE1AD99517003FC87E /* LessPassTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
D727F9DEC1CEF1C5FAE9CF83 /* Pods */ = {
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup;
children = (
87960872BEE8F60939847679 /* Pods-LessPass.debug.xcconfig */,
0033D790DF6D0BD054D0FE0B /* Pods-LessPass.release.xcconfig */,
3B4392A12AC88292D35C810B /* Pods-LessPass.debug.xcconfig */,
5709B34CF0A7D63546082F79 /* Pods-LessPass.release.xcconfig */,
5B7EB9410499542E8C5724F5 /* Pods-LessPass-LessPassTests.debug.xcconfig */,
89C6BE57DB24E9ADA2F236DE /* Pods-LessPass-LessPassTests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
F0614DE628F4B1EA00A63AC5 /* Fonts */ = {
isa = PBXGroup;
children = (
F0614DEB28F4B29F00A63AC5 /* Hack.ttf */,
F0614DE928F4B27800A63AC5 /* MaterialCommunityIcons.ttf */,
F0614DE728F4B26B00A63AC5 /* FontAwesome.ttf */,
);
name = Fonts;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* LessPassTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LessPassTests" */;
buildPhases = (
A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = LessPassTests;
productName = LessPassTests;
productReference = 00E356EE1AD99517003FC87E /* LessPassTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* LessPass */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "LessPass" */;
buildPhases = (
8446EE65DD72C14B0E665F02 /* [CP] Check Pods Manifest.lock */,
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
87F65528C05E5E581ABE0A81 /* [CP] Embed Pods Frameworks */,
352DA40C15F903EA6E9A3A11 /* [CP] Copy Pods Resources */,
00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -154,17 +229,19 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1230;
LastUpgradeCheck = 1210;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
DevelopmentTeam = 5Y4MF2AT83;
LastSwiftMigration = 1160;
ProvisioningStyle = Automatic;
LastSwiftMigration = 1320;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "LessPass" */;
compatibilityVersion = "Xcode 3.2";
compatibilityVersion = "Xcode 12.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -177,18 +254,26 @@
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* LessPass */,
00E356ED1AD99517003FC87E /* LessPassTests */,
);
};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
00E356EC1AD99517003FC87E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
F0614DEC28F4B29F00A63AC5 /* Hack.ttf in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
2135E9CC48DB47BCB711C12B /* Hack.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -201,65 +286,56 @@
files = (
);
inputPaths = (
"$(SRCROOT)/.xcode.env.local",
"$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
};
00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
352DA40C15F903EA6E9A3A11 /* [CP] Copy Pods Resources */ = {
A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-resources.sh",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf",
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
"$(DERIVED_FILE_DIR)/Pods-LessPass-LessPassTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-resources.sh\"\n";
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
8446EE65DD72C14B0E665F02 /* [CP] Check Pods Manifest.lock */ = {
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -281,26 +357,55 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
87F65528C05E5E581ABE0A81 /* [CP] Embed Pods Frameworks */ = {
C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-frameworks.sh",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/double-conversion.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-frameworks.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass/Pods-LessPass-resources.sh\"\n";
showEnvVarsInLog = 0;
};
F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LessPass-LessPassTests/Pods-LessPass-LessPassTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
@@ -325,39 +430,105 @@
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
00E356EA1AD99517003FC87E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F0198E9528FDD15300D6FFF4 /* LessPassClipboardModule.m in Sources */,
00E356F31AD99517003FC87E /* LessPassTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
F08AE89A24CCC1AC00473F32 /* LessPassModule.swift in Sources */,
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
F0614DEF28F4B49C00A63AC5 /* LessPassModule.swift in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
F08AE89C24CCC24600473F32 /* LessPassModule.m in Sources */,
F0614DF128F4B58B00A63AC5 /* LessPassModule.m in Sources */,
F0198E9428FDD15300D6FFF4 /* LessPassClipboardModule.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* LessPass */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-LessPass-LessPassTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = LessPassTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.lesspass.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LessPass.app/LessPass";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-LessPass-LessPassTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = LessPassTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.lesspass.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LessPass.app/LessPass";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 87960872BEE8F60939847679 /* Pods-LessPass.debug.xcconfig */;
baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-LessPass.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 5Y4MF2AT83;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
INFOPLIST_FILE = LessPass/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"FB_SONARKIT_ENABLED=1",
"@executable_path/Frameworks",
);
INFOPLIST_FILE = LessPass/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 9.7.0;
MARKETING_VERSION = 9.7.1;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -365,28 +536,27 @@
);
PRODUCT_BUNDLE_IDENTIFIER = com.lesspass.ios;
PRODUCT_NAME = LessPass;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "LessPass-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0033D790DF6D0BD054D0FE0B /* Pods-LessPass.release.xcconfig */;
baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-LessPass.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 5Y4MF2AT83;
INFOPLIST_FILE = LessPass/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 9.7.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 9.7.1;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -394,7 +564,6 @@
);
PRODUCT_BUNDLE_IDENTIFIER = com.lesspass.ios;
PRODUCT_NAME = LessPass;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "LessPass-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -407,7 +576,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -435,7 +604,7 @@
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -451,15 +620,25 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"$(SDKROOT)/usr/lib/swift",
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
};
name = Debug;
@@ -469,7 +648,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@@ -497,7 +676,7 @@
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -506,16 +685,25 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"$(SDKROOT)/usr/lib/swift",
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
};
name = Release;
@@ -523,6 +711,15 @@
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LessPassTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "LessPass" */ = {
isa = XCConfigurationList;
buildConfigurations = (


+ 0
- 7
mobile/ios/LessPass.xcodeproj/project.xcworkspace/contents.xcworkspacedata 查看文件

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

+ 1
- 15
mobile/ios/LessPass.xcodeproj/xcshareddata/xcschemes/LessPass.xcscheme 查看文件

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1230"
LastUpgradeVersion = "1210"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -20,20 +20,6 @@
ReferencedContainer = "container:LessPass.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1BEE828C124E6416179B904A9F66D794"
BuildableName = "React"
BlueprintName = "React"
ReferencedContainer = "container:Pods/Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction


mobile/ios/LessPass.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist → mobile/ios/LessPass.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings 查看文件

@@ -2,7 +2,7 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

+ 0
- 62
mobile/ios/LessPass/AppDelegate.m 查看文件

@@ -1,62 +0,0 @@
#import "AppDelegate.h"

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>

#ifdef FB_SONARKIT_ENABLED
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>

static void InitializeFlipper(UIApplication *application) {
FlipperClient *client = [FlipperClient sharedClient];
SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
[client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
[client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
[client addPlugin:[FlipperKitReactPlugin new]];
[client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
[client start];
}
#endif

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef FB_SONARKIT_ENABLED
InitializeFlipper(application);
#endif

RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"LessPass"
initialProperties:nil];

if (@available(iOS 13.0, *)) {
rootView.backgroundColor = [UIColor systemBackgroundColor];
} else {
rootView.backgroundColor = [UIColor whiteColor];
}

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

@end

+ 133
- 0
mobile/ios/LessPass/AppDelegate.mm 查看文件

@@ -0,0 +1,133 @@
#import "AppDelegate.h"

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>

#import <React/RCTAppSetupUtils.h>

#if RCT_NEW_ARCH_ENABLED
#import <React/CoreModulesPlugins.h>
#import <React/RCTCxxBridgeDelegate.h>
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
#import <React/RCTSurfacePresenter.h>
#import <React/RCTSurfacePresenterBridgeAdapter.h>
#import <ReactCommon/RCTTurboModuleManager.h>

#import <react/config/ReactNativeConfig.h>

static NSString *const kRNConcurrentRoot = @"concurrentRoot";

@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {
RCTTurboModuleManager *_turboModuleManager;
RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;
facebook::react::ContextContainer::Shared _contextContainer;
}
@end
#endif

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
RCTAppSetupPrepareApp(application);

RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];

#if RCT_NEW_ARCH_ENABLED
_contextContainer = std::make_shared<facebook::react::ContextContainer const>();
_reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();
_contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
_bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
#endif

NSDictionary *initProps = [self prepareInitialProps];
UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"LessPass", initProps);

if (@available(iOS 13.0, *)) {
rootView.backgroundColor = [UIColor systemBackgroundColor];
} else {
rootView.backgroundColor = [UIColor whiteColor];
}

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}

/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
///
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.
- (BOOL)concurrentRootEnabled
{
// Switch this bool to turn on and off the concurrent root
return true;
}

- (NSDictionary *)prepareInitialProps
{
NSMutableDictionary *initProps = [NSMutableDictionary new];

#ifdef RCT_NEW_ARCH_ENABLED
initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);
#endif

return initProps;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

#if RCT_NEW_ARCH_ENABLED

#pragma mark - RCTCxxBridgeDelegate

- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
{
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
delegate:self
jsInvoker:bridge.jsCallInvoker];
return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);
}

#pragma mark RCTTurboModuleManagerDelegate

- (Class)getModuleClassFromName:(const char *)name
{
return RCTCoreModulesClassProvider(name);
}

- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
{
return nullptr;
}

- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
initParams:
(const facebook::react::ObjCTurboModule::InitParams &)params
{
return nullptr;
}

- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
{
return RCTAppSetupDefaultModuleFromClass(moduleClass);
}

#endif

@end

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/100.png 查看文件

Before After
Width: 100  |  Height: 100  |  Size: 2.2 KiB Width: 100  |  Height: 100  |  Size: 3.3 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/1024.png 查看文件

Before After
Width: 1024  |  Height: 1024  |  Size: 16 KiB Width: 1024  |  Height: 1024  |  Size: 43 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/114.png 查看文件

Before After
Width: 114  |  Height: 114  |  Size: 2.5 KiB Width: 114  |  Height: 114  |  Size: 3.8 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/120.png 查看文件

Before After
Width: 120  |  Height: 120  |  Size: 2.6 KiB Width: 120  |  Height: 120  |  Size: 4.1 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/128.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 4.3 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/144.png 查看文件

Before After
Width: 144  |  Height: 144  |  Size: 3.0 KiB Width: 144  |  Height: 144  |  Size: 4.7 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/152.png 查看文件

Before After
Width: 152  |  Height: 152  |  Size: 3.2 KiB Width: 152  |  Height: 152  |  Size: 5.0 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/16.png 查看文件

Before After
Width: 16  |  Height: 16  |  Size: 570 B

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/167.png 查看文件

Before After
Width: 167  |  Height: 167  |  Size: 3.5 KiB Width: 167  |  Height: 167  |  Size: 5.8 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/172.png 查看文件

Before After
Width: 172  |  Height: 172  |  Size: 6.0 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/180.png 查看文件

Before After
Width: 180  |  Height: 180  |  Size: 3.7 KiB Width: 180  |  Height: 180  |  Size: 6.1 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/196.png 查看文件

Before After
Width: 196  |  Height: 196  |  Size: 6.9 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/20.png 查看文件

Before After
Width: 20  |  Height: 20  |  Size: 553 B Width: 20  |  Height: 20  |  Size: 726 B

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/216.png 查看文件

Before After
Width: 216  |  Height: 216  |  Size: 7.6 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/256.png 查看文件

Before After
Width: 256  |  Height: 256  |  Size: 9.4 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/29.png 查看文件

Before After
Width: 29  |  Height: 29  |  Size: 744 B Width: 29  |  Height: 29  |  Size: 1.0 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/32.png 查看文件

Before After
Width: 32  |  Height: 32  |  Size: 1.1 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/40.png 查看文件

Before After
Width: 40  |  Height: 40  |  Size: 968 B Width: 40  |  Height: 40  |  Size: 1.4 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/48.png 查看文件

Before After
Width: 48  |  Height: 48  |  Size: 1.6 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/50.png 查看文件

Before After
Width: 50  |  Height: 50  |  Size: 1.2 KiB Width: 50  |  Height: 50  |  Size: 1.7 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/512.png 查看文件

Before After
Width: 512  |  Height: 512  |  Size: 22 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/55.png 查看文件

Before After
Width: 55  |  Height: 55  |  Size: 1.9 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/57.png 查看文件

Before After
Width: 57  |  Height: 57  |  Size: 1.4 KiB Width: 57  |  Height: 57  |  Size: 2.0 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/58.png 查看文件

Before After
Width: 58  |  Height: 58  |  Size: 1.3 KiB Width: 58  |  Height: 58  |  Size: 1.9 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/60.png 查看文件

Before After
Width: 60  |  Height: 60  |  Size: 1.4 KiB Width: 60  |  Height: 60  |  Size: 1.9 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/64.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 2.2 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/72.png 查看文件

Before After
Width: 72  |  Height: 72  |  Size: 1.7 KiB Width: 72  |  Height: 72  |  Size: 2.5 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/76.png 查看文件

Before After
Width: 76  |  Height: 76  |  Size: 1.7 KiB Width: 76  |  Height: 76  |  Size: 2.5 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/80.png 查看文件

Before After
Width: 80  |  Height: 80  |  Size: 1.8 KiB Width: 80  |  Height: 80  |  Size: 2.8 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/87.png 查看文件

Before After
Width: 87  |  Height: 87  |  Size: 1.9 KiB Width: 87  |  Height: 87  |  Size: 2.9 KiB

二進制
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/88.png 查看文件

Before After
Width: 88  |  Height: 88  |  Size: 3.0 KiB

+ 277
- 130
mobile/ios/LessPass/Images.xcassets/AppIcon.appiconset/Contents.json 查看文件

@@ -1,183 +1,330 @@
{
"images": [
"images" : [
{
"size": "60x60",
"expected-size": "180",
"filename": "180.png",
"idiom": "iphone",
"scale": "3x"
"filename" : "40.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"size": "40x40",
"expected-size": "80",
"filename": "80.png",
"idiom": "iphone",
"scale": "2x"
"filename" : "60.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"size": "40x40",
"expected-size": "120",
"filename": "120.png",
"idiom": "iphone",
"scale": "3x"
"filename" : "29.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "29x29"
},
{
"size": "60x60",
"expected-size": "120",
"filename": "120.png",
"idiom": "iphone",
"scale": "2x"
"filename" : "58.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"size": "57x57",
"expected-size": "57",
"filename": "57.png",
"idiom": "iphone",
"scale": "1x"
"filename" : "87.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"size": "29x29",
"expected-size": "58",
"filename": "58.png",
"idiom": "iphone",
"scale": "2x"
"filename" : "80.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"size": "29x29",
"expected-size": "29",
"filename": "29.png",
"idiom": "iphone",
"scale": "1x"
"filename" : "120.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"size": "29x29",
"expected-size": "87",
"filename": "87.png",
"idiom": "iphone",
"scale": "3x"
"filename" : "57.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "57x57"
},
{
"size": "57x57",
"expected-size": "114",
"filename": "114.png",
"idiom": "iphone",
"scale": "2x"
"filename" : "114.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "57x57"
},
{
"size": "20x20",
"expected-size": "40",
"filename": "40.png",
"idiom": "iphone",
"scale": "2x"
"filename" : "120.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"size": "20x20",
"expected-size": "60",
"filename": "60.png",
"idiom": "iphone",
"scale": "3x"
"filename" : "180.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"size": "1024x1024",
"filename": "1024.png",
"expected-size": "1024",
"idiom": "ios-marketing",
"scale": "1x"
"filename" : "20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"size": "40x40",
"expected-size": "80",
"filename": "80.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "40.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"size": "72x72",
"expected-size": "72",
"filename": "72.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"size": "76x76",
"expected-size": "152",
"filename": "152.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "58.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"size": "50x50",
"expected-size": "100",
"filename": "100.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "40.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"size": "29x29",
"expected-size": "58",
"filename": "58.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "80.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"size": "76x76",
"expected-size": "76",
"filename": "76.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "50.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "50x50"
},
{
"size": "29x29",
"expected-size": "29",
"filename": "29.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "100.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "50x50"
},
{
"size": "50x50",
"expected-size": "50",
"filename": "50.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "72.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "72x72"
},
{
"size": "72x72",
"expected-size": "144",
"filename": "144.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "144.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "72x72"
},
{
"size": "40x40",
"expected-size": "40",
"filename": "40.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"size": "83.5x83.5",
"expected-size": "167",
"filename": "167.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "152.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"size": "20x20",
"expected-size": "20",
"filename": "20.png",
"idiom": "ipad",
"scale": "1x"
"filename" : "167.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"size": "20x20",
"expected-size": "40",
"filename": "40.png",
"idiom": "ipad",
"scale": "2x"
"filename" : "1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
},
{
"filename" : "48.png",
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "24x24",
"subtype" : "38mm"
},
{
"filename" : "55.png",
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "27.5x27.5",
"subtype" : "42mm"
},
{
"filename" : "58.png",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "87.png",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "33x33",
"subtype" : "45mm"
},
{
"filename" : "80.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "40x40",
"subtype" : "38mm"
},
{
"filename" : "88.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "44x44",
"subtype" : "40mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "46x46",
"subtype" : "41mm"
},
{
"filename" : "100.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "50x50",
"subtype" : "44mm"
},
{
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "51x51",
"subtype" : "45mm"
},
{
"filename" : "172.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "86x86",
"subtype" : "38mm"
},
{
"filename" : "196.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "98x98",
"subtype" : "42mm"
},
{
"filename" : "216.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "108x108",
"subtype" : "44mm"
},
{
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "117x117",
"subtype" : "45mm"
},
{
"filename" : "1024.png",
"idiom" : "watch-marketing",
"scale" : "1x",
"size" : "1024x1024"
},
{
"filename" : "16.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "32.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "32.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "64.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "128.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "256.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "256.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "512.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "512.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"filename" : "1024.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info": {
"author": "xcode",
"version": 1
"info" : {
"author" : "xcode",
"version" : 1
}
}
}

+ 3
- 16
mobile/ios/LessPass/Info.plist 查看文件

@@ -23,7 +23,7 @@
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<true />
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
@@ -32,25 +32,12 @@
<key>NSFaceIDUsageDescription</key>
<string>Enabling Face ID allows you quick and secure your master password.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>UIAppFonts</key>
<string />
<key>UIAppFonts</key>
<array>
<string>AntDesign.ttf</string>
<string>Entypo.ttf</string>
<string>EvilIcons.ttf</string>
<string>Feather.ttf</string>
<string>FontAwesome.ttf</string>
<string>FontAwesome5_Brands.ttf</string>
<string>FontAwesome5_Regular.ttf</string>
<string>FontAwesome5_Solid.ttf</string>
<string>Foundation.ttf</string>
<string>Ionicons.ttf</string>
<string>MaterialIcons.ttf</string>
<string>MaterialCommunityIcons.ttf</string>
<string>Hack.ttf</string>
<string>SimpleLineIcons.ttf</string>
<string>Octicons.ttf</string>
<string>Zocial.ttf</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>


+ 8
- 0
mobile/ios/LessPassClipboardModule.h 查看文件

@@ -0,0 +1,8 @@
#ifndef LessPassClipboardModule_h
#define LessPassClipboardModule_h

#import <React/RCTBridgeModule.h>
@interface LessPassClipboardModule : NSObject <RCTBridgeModule>
@end

#endif

+ 14
- 0
mobile/ios/LessPassClipboardModule.m 查看文件

@@ -0,0 +1,14 @@
#import "LessPassClipboardModule.h"

@implementation LessPassClipboardModule

RCT_EXPORT_MODULE(LessPassClipboard);


RCT_EXPORT_METHOD(copy:(NSString *)content)
{
UIPasteboard *clipboard = [UIPasteboard generalPasteboard];
clipboard.string = (content ? : @"");
}

@end

+ 14
- 13
mobile/ios/LessPassTests/LessPassTests.m 查看文件

@@ -13,7 +13,7 @@

@implementation LessPassTests

- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
{
if (test(view)) {
return YES;
@@ -34,23 +34,25 @@

__block NSString *redboxError = nil;
#ifdef DEBUG
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
if (level >= RCTLogLevelError) {
redboxError = message;
}
});
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]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];

foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
return YES;
}
return NO;
}];
foundElement = [self findSubviewInView:vc.view
matching:^BOOL(UIView *view) {
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
return YES;
}
return NO;
}];
}

#ifdef DEBUG
@@ -61,5 +63,4 @@
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}


@end

+ 21
- 11
mobile/ios/Podfile 查看文件

@@ -1,7 +1,7 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '11.0'
platform :ios, '12.4'
install! 'cocoapods', :deterministic_uuids => false

target 'LessPass' do
@@ -12,22 +12,32 @@ target 'LessPass' do

use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => flags[:hermes_enabled],
# Hermes is now enabled by default. Disable by setting this flag to false.
# Upcoming versions of React Native may rely on get_default_flags(), but
# we make it explicit here to aid in the React Native upgrade process.
:hermes_enabled => true,
:fabric_enabled => flags[:fabric_enabled],
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
:flipper_configuration => FlipperConfiguration.enabled,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)

use_native_modules!
target 'LessPassTests' do
inherit! :complete
# Pods for testing
end

# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
use_flipper!()
post_install do |installer|
react_native_post_install(installer)
react_native_post_install(
installer,
# Set `mac_catalyst_enabled` to `true` in order to apply patches
# necessary for Mac Catalyst builds
:mac_catalyst_enabled => false
)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end
end

+ 302
- 280
mobile/ios/Podfile.lock 查看文件

@@ -2,19 +2,19 @@ PODS:
- boost (1.76.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.68.2)
- FBReactNativeSpec (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.2)
- RCTTypeSafety (= 0.68.2)
- React-Core (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- FBLazyVector (0.70.2)
- FBReactNativeSpec (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.2)
- RCTTypeSafety (= 0.70.2)
- React-Core (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- Flipper (0.125.0):
- Flipper-Folly (~> 2.6)
- Flipper-RSocket (~> 1.4)
- Flipper-Boost-iOSX (1.76.0.1.11)
- Flipper-DoubleConversion (3.2.0)
- Flipper-DoubleConversion (3.2.0.1)
- Flipper-Fmt (7.1.7)
- Flipper-Folly (2.6.10):
- Flipper-Boost-iOSX
@@ -23,7 +23,7 @@ PODS:
- Flipper-Glog
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- Flipper-Glog (0.5.0.4)
- Flipper-Glog (0.5.0.5)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.4.3):
- Flipper-Folly (~> 2.6)
@@ -73,300 +73,317 @@ PODS:
- FlipperKit/FlipperKitNetworkPlugin
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.70.2)
- libevent (2.1.12)
- OpenSSL-Universal (1.1.1100)
- RCT-Folly (2021.06.28.00-v2):
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Default (= 2021.06.28.00-v2)
- RCT-Folly/Default (2021.06.28.00-v2):
- RCT-Folly/Default (= 2021.07.22.00)
- RCT-Folly/Default (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCTRequired (0.68.2)
- RCTTypeSafety (0.68.2):
- FBLazyVector (= 0.68.2)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.2)
- React-Core (= 0.68.2)
- React (0.68.2):
- React-Core (= 0.68.2)
- React-Core/DevSupport (= 0.68.2)
- React-Core/RCTWebSocket (= 0.68.2)
- React-RCTActionSheet (= 0.68.2)
- React-RCTAnimation (= 0.68.2)
- React-RCTBlob (= 0.68.2)
- React-RCTImage (= 0.68.2)
- React-RCTLinking (= 0.68.2)
- React-RCTNetwork (= 0.68.2)
- React-RCTSettings (= 0.68.2)
- React-RCTText (= 0.68.2)
- React-RCTVibration (= 0.68.2)
- React-callinvoker (0.68.2)
- React-Codegen (0.68.2):
- FBReactNativeSpec (= 0.68.2)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.2)
- RCTTypeSafety (= 0.68.2)
- React-Core (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-Core (0.68.2):
- RCT-Folly/Futures (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- libevent
- RCTRequired (0.70.2)
- RCTTypeSafety (0.70.2):
- FBLazyVector (= 0.70.2)
- RCTRequired (= 0.70.2)
- React-Core (= 0.70.2)
- React (0.70.2):
- React-Core (= 0.70.2)
- React-Core/DevSupport (= 0.70.2)
- React-Core/RCTWebSocket (= 0.70.2)
- React-RCTActionSheet (= 0.70.2)
- React-RCTAnimation (= 0.70.2)
- React-RCTBlob (= 0.70.2)
- React-RCTImage (= 0.70.2)
- React-RCTLinking (= 0.70.2)
- React-RCTNetwork (= 0.70.2)
- React-RCTSettings (= 0.70.2)
- React-RCTText (= 0.70.2)
- React-RCTVibration (= 0.70.2)
- React-bridging (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.70.2)
- React-callinvoker (0.70.2)
- React-Codegen (0.70.2):
- FBReactNativeSpec (= 0.70.2)
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.2)
- RCTTypeSafety (= 0.70.2)
- React-Core (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-Core (0.70.2):
- glog
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/CoreModulesHeaders (0.68.2):
- React-Core/CoreModulesHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/Default (0.68.2):
- React-Core/Default (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/DevSupport (0.68.2):
- React-Core/DevSupport (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.2)
- React-Core/RCTWebSocket (= 0.68.2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-jsinspector (= 0.68.2)
- React-perflogger (= 0.68.2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.2)
- React-Core/RCTWebSocket (= 0.70.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-jsinspector (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTActionSheetHeaders (0.68.2):
- React-Core/RCTActionSheetHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTAnimationHeaders (0.68.2):
- React-Core/RCTAnimationHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTBlobHeaders (0.68.2):
- React-Core/RCTBlobHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTImageHeaders (0.68.2):
- React-Core/RCTImageHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTLinkingHeaders (0.68.2):
- React-Core/RCTLinkingHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTNetworkHeaders (0.68.2):
- React-Core/RCTNetworkHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTSettingsHeaders (0.68.2):
- React-Core/RCTSettingsHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTTextHeaders (0.68.2):
- React-Core/RCTTextHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTVibrationHeaders (0.68.2):
- React-Core/RCTVibrationHeaders (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-Core/RCTWebSocket (0.68.2):
- React-Core/RCTWebSocket (0.70.2):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsiexecutor (= 0.68.2)
- React-perflogger (= 0.68.2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-perflogger (= 0.70.2)
- Yoga
- React-CoreModules (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.2)
- React-Codegen (= 0.68.2)
- React-Core/CoreModulesHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- React-RCTImage (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-cxxreact (0.68.2):
- React-CoreModules (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.2)
- React-Codegen (= 0.70.2)
- React-Core/CoreModulesHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- React-RCTImage (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-cxxreact (0.70.2):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.2)
- React-jsi (= 0.68.2)
- React-jsinspector (= 0.68.2)
- React-logger (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-runtimeexecutor (= 0.68.2)
- React-jsi (0.68.2):
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsinspector (= 0.70.2)
- React-logger (= 0.70.2)
- React-perflogger (= 0.70.2)
- React-runtimeexecutor (= 0.70.2)
- React-hermes (0.70.2):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-jsiexecutor (= 0.70.2)
- React-jsinspector (= 0.70.2)
- React-perflogger (= 0.70.2)
- React-jsi (0.70.2):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.68.2)
- React-jsi/Default (0.68.2):
- RCT-Folly (= 2021.07.22.00)
- React-jsi/Default (= 0.70.2)
- React-jsi/Default (0.70.2):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.68.2):
- RCT-Folly (= 2021.07.22.00)
- React-jsiexecutor (0.70.2):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-perflogger (= 0.68.2)
- React-jsinspector (0.68.2)
- React-logger (0.68.2):
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-perflogger (= 0.70.2)
- React-jsinspector (0.70.2)
- React-logger (0.70.2):
- glog
- react-native-safe-area-context (4.2.5):
- react-native-safe-area-context (4.4.1):
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React
- React-Core
- ReactCommon/turbomodule/core
- React-perflogger (0.68.2)
- React-RCTActionSheet (0.68.2):
- React-Core/RCTActionSheetHeaders (= 0.68.2)
- React-RCTAnimation (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.2)
- React-Codegen (= 0.68.2)
- React-Core/RCTAnimationHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTBlob (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.2)
- React-Core/RCTBlobHeaders (= 0.68.2)
- React-Core/RCTWebSocket (= 0.68.2)
- React-jsi (= 0.68.2)
- React-RCTNetwork (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTImage (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.2)
- React-Codegen (= 0.68.2)
- React-Core/RCTImageHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- React-RCTNetwork (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTLinking (0.68.2):
- React-Codegen (= 0.68.2)
- React-Core/RCTLinkingHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTNetwork (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.2)
- React-Codegen (= 0.68.2)
- React-Core/RCTNetworkHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTSettings (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.2)
- React-Codegen (= 0.68.2)
- React-Core/RCTSettingsHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-RCTText (0.68.2):
- React-Core/RCTTextHeaders (= 0.68.2)
- React-RCTVibration (0.68.2):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.2)
- React-Core/RCTVibrationHeaders (= 0.68.2)
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (= 0.68.2)
- React-runtimeexecutor (0.68.2):
- React-jsi (= 0.68.2)
- ReactCommon/turbomodule/core (0.68.2):
- React-perflogger (0.70.2)
- React-RCTActionSheet (0.70.2):
- React-Core/RCTActionSheetHeaders (= 0.70.2)
- React-RCTAnimation (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.2)
- React-Codegen (= 0.70.2)
- React-Core/RCTAnimationHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTBlob (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.2)
- React-Core/RCTBlobHeaders (= 0.70.2)
- React-Core/RCTWebSocket (= 0.70.2)
- React-jsi (= 0.70.2)
- React-RCTNetwork (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTImage (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.2)
- React-Codegen (= 0.70.2)
- React-Core/RCTImageHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- React-RCTNetwork (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTLinking (0.70.2):
- React-Codegen (= 0.70.2)
- React-Core/RCTLinkingHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTNetwork (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.2)
- React-Codegen (= 0.70.2)
- React-Core/RCTNetworkHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTSettings (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.2)
- React-Codegen (= 0.70.2)
- React-Core/RCTSettingsHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-RCTText (0.70.2):
- React-Core/RCTTextHeaders (= 0.70.2)
- React-RCTVibration (0.70.2):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.2)
- React-Core/RCTVibrationHeaders (= 0.70.2)
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (= 0.70.2)
- React-runtimeexecutor (0.70.2):
- React-jsi (= 0.70.2)
- ReactCommon/turbomodule/core (0.70.2):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.2)
- React-Core (= 0.68.2)
- React-cxxreact (= 0.68.2)
- React-jsi (= 0.68.2)
- React-logger (= 0.68.2)
- React-perflogger (= 0.68.2)
- RCT-Folly (= 2021.07.22.00)
- React-bridging (= 0.70.2)
- React-callinvoker (= 0.70.2)
- React-Core (= 0.70.2)
- React-cxxreact (= 0.70.2)
- React-jsi (= 0.70.2)
- React-logger (= 0.70.2)
- React-perflogger (= 0.70.2)
- RNCAsyncStorage (1.12.1):
- React-Core
- RNCClipboard (1.5.1):
- RNGestureHandler (2.7.0):
- React-Core
- RNCMaskedView (0.1.11):
- React
- RNGestureHandler (2.4.2):
- React-Core
- RNKeychain (8.0.0):
- RNKeychain (8.1.1):
- React-Core
- RNScreens (3.13.1):
- RNScreens (3.18.0):
- React-Core
- React-RCTImage
- RNVectorIcons (9.1.0):
- RNVectorIcons (9.2.0):
- React-Core
- SocketRocket (0.6.0)
- TouchID (4.4.1):
@@ -382,10 +399,10 @@ DEPENDENCIES:
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- Flipper (= 0.125.0)
- Flipper-Boost-iOSX (= 1.76.0.1.11)
- Flipper-DoubleConversion (= 3.2.0)
- Flipper-DoubleConversion (= 3.2.0.1)
- Flipper-Fmt (= 7.1.7)
- Flipper-Folly (= 2.6.10)
- Flipper-Glog (= 0.5.0.4)
- Flipper-Glog (= 0.5.0.5)
- Flipper-PeerTalk (= 0.0.4)
- Flipper-RSocket (= 1.4.3)
- FlipperKit (= 0.125.0)
@@ -402,11 +419,14 @@ DEPENDENCIES:
- FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
- FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-bridging (from `../node_modules/react-native/ReactCommon`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
@@ -414,6 +434,7 @@ DEPENDENCIES:
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
@@ -432,8 +453,6 @@ DEPENDENCIES:
- React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNKeychain (from `../node_modules/react-native-keychain`)
- RNScreens (from `../node_modules/react-native-screens`)
@@ -470,6 +489,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/React/FBReactNativeSpec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
hermes-engine:
:podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec"
RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTRequired:
@@ -478,6 +499,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
React-bridging:
:path: "../node_modules/react-native/ReactCommon"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
React-Codegen:
@@ -488,6 +511,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact"
React-hermes:
:path: "../node_modules/react-native/ReactCommon/hermes"
React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
@@ -524,10 +549,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon"
RNCAsyncStorage:
:path: "../node_modules/@react-native-community/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-community/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNKeychain:
@@ -544,60 +565,61 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648
FBReactNativeSpec: 81ce99032d5b586fddd6a38d450f8595f7e04be4
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
FBLazyVector: 0507edc21c06f1650c591f0981c846445469373b
FBReactNativeSpec: 698ef8604615cfa7ae2119e9ca4ed7687a6ae62e
Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
Flipper-DoubleConversion: 3d3d04a078d4f3a1b6c6916587f159dc11f232c4
Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
Flipper-Glog: 87bc98ff48de90cb5b0b5114ed3da79d85ee2dd4
Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 5337263514dd6f09803962437687240c5dc39aa4
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
hermes-engine: f9312a2ea8036d03b63568ebf392314f4fa8b474
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
RCTRequired: 3e917ea5377751094f38145fdece525aa90545a0
RCTTypeSafety: c43c072a4bd60feb49a9570b0517892b4305c45e
React: 176dd882de001854ced260fad41bb68a31aa4bd0
React-callinvoker: c2864d1818d6e64928d2faf774a3800dfc38fe1f
React-Codegen: 98b6f97f0a7abf7d67e4ce435c77c05b7a95cf05
React-Core: fdaa2916b1c893f39f02cff0476d1fb0cab1e352
React-CoreModules: fd8705b80699ec36c2cdd635c2ce9d874b9cfdfc
React-cxxreact: 1832d971f7b0cb2c7b943dc0ec962762c90c906e
React-jsi: 72af715135abe8c3f0dcf3b2548b71d048b69a7e
React-jsiexecutor: b7b553412f2ec768fe6c8f27cd6bafdb9d8719e6
React-jsinspector: c5989c77cb89ae6a69561095a61cce56a44ae8e8
React-logger: a0833912d93b36b791b7a521672d8ee89107aff1
react-native-safe-area-context: ebf8c413eb8b5f7c392a036a315eb7b46b96845f
React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6
React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162
React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034
React-RCTBlob: a1295c8e183756d7ef30ba6e8f8144dfe8a19215
React-RCTImage: a30d1ee09b1334067fbb6f30789aae2d7ac150c9
React-RCTLinking: ffc6d5b88d1cb9aca13c54c2ec6507fbf07f2ac4
React-RCTNetwork: f807a2facab6cf5cf36d592e634611de9cf12d81
React-RCTSettings: 861806819226ed8332e6a8f90df2951a34bb3e7f
React-RCTText: f3fb464cc41a50fc7a1aba4deeb76a9ad8282cb9
React-RCTVibration: 79040b92bfa9c3c2d2cb4f57e981164ec7ab9374
React-runtimeexecutor: b960b687d2dfef0d3761fbb187e01812ebab8b23
ReactCommon: 095366164a276d91ea704ce53cb03825c487a3f2
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
RCTRequired: d4033a367d0bfd1f23f67b501f8cdabf9afe617e
RCTTypeSafety: b112b2ccc59309a65284280c0a53baf1ce4b5860
React: 04474547a4729eef1fb378ca42f302f4b3219eb8
React-bridging: 1c8695b292b4a9baaca3960f6166d9766e20492d
React-callinvoker: 4d91e2db7773ee3fcea2d3a5c6beb52a5bfd4d71
React-Codegen: 33356335c6f3b0869cb4434055fdec219139f635
React-Core: 634b8aa20e1dad445425ee9581f4719bcfd1b19b
React-CoreModules: 746825283de4b54dcb4fd88703ff516297a5f60d
React-cxxreact: f8d2686d98b5ffed1b1de3aa62e1f81db4903153
React-hermes: 4e9f5f9cfff42a23e7d6d8083e6c8a3f6f4926ee
React-jsi: 198b9b3e0a85e68cb6898265400fd8bf34cacda4
React-jsiexecutor: 53bd208e5c27939c6e6365528393445a596a9a2b
React-jsinspector: 26c42646ab0bb69e29e837e23754fe7121eeaf94
React-logger: 1bfd109a0ffa4c0989bbfac0c2d8c4abe4637faa
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
React-perflogger: 6009895616a455781293950bbd63d53cfc7ffbc5
React-RCTActionSheet: 5e90aa5712af18bfc86c2c6d97d4dbe0e5451c1d
React-RCTAnimation: 50c44d6501f8bfb2fe885e544501f8798b4ff3d6
React-RCTBlob: 3cc08e7112dd7b77faf3fa481ba22ca2bba5f20a
React-RCTImage: ca8335860b5f64c383ad27f52a28d85089d49b7a
React-RCTLinking: 297cd91bdbf427efc861fc7943e6d683e61860fa
React-RCTNetwork: 8a197bff6f1dc5353484507a4cdcd47e9356316f
React-RCTSettings: d3db1f1e61a5ad8deb50f44f5cb6c7c3ef32b3ac
React-RCTText: c2c05ab3dbfb1cf5855b14802f392148970e48da
React-RCTVibration: 89e2cbea456ac5ec623943661d00e4dc45fe74b9
React-runtimeexecutor: 80065f60af4f4b05603661070c8622bb3740bf16
ReactCommon: 1209130f460e4aa9d255ddc75fa0a827ebf93dfb
RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f
RNKeychain: 4f63aada75ebafd26f4bc2c670199461eab85d94
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
RNVectorIcons: 7923e585eaeb139b9f4531d25a125a1500162a0b
RNGestureHandler: 7673697e7c0e9391adefae4faa087442bc04af33
RNKeychain: ff836453cba46938e0e9e4c22e43d43fa2c90333
RNScreens: f3230dd008a7d0ce5c0a8bc78ff12cf2315bda24
RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
Yoga: 99652481fcd320aefa4a7ef90095b95acd181952
Yoga: 043f8eb97345d0171f27fead4d1849cacf0472a5
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

PODFILE CHECKSUM: c24b137748bd89423e90c29bc22ce8bb9d0f5e81
PODFILE CHECKSUM: 1b974f561b4f45461b3a0f2c067841edea501508

COCOAPODS: 1.11.2

+ 47
- 37
mobile/package.json 查看文件

@@ -1,6 +1,6 @@
{
"name": "lesspass-mobile",
"version": "9.7.0",
"version": "9.7.1",
"description": "LessPass mobile application",
"license": "(MPL-2.0 OR GPL-3.0)",
"author": "Guillaume Vincent <guillaume@oslab.fr>",
@@ -12,57 +12,67 @@
"ios": "react-native run-ios",
"log:ios": "react-native log-ios",
"clean:ios": "cd ios && xcodebuild clean && cd ../",
"ios-pod-install": "pod install --project-directory=./ios",
"start": "react-native start",
"test": "jest",
"test:watch": "jest --watch",
"lint": "eslint .",
"postinstall": "pod-install",
"clean": "react-native-clean-project",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"postversion": "react-native-version --never-amend",
"postinstall": "pod install --project-directory=./ios",
"prettier": "prettier --write src"
},
"dependencies": {
"@react-native-community/async-storage": "^1.12.1",
"@react-native-community/clipboard": "^1.5.1",
"@react-native-community/masked-view": "^0.1.11",
"@react-navigation/bottom-tabs": "^6.3.1",
"@react-navigation/material-bottom-tabs": "^6.2.1",
"@react-navigation/native": "^6.0.10",
"@react-navigation/stack": "^6.2.1",
"axios": "^0.27.2",
"@react-navigation/bottom-tabs": "^6.4.0",
"@react-navigation/native": "^6.0.13",
"@react-navigation/native-stack": "^6.9.0",
"@react-navigation/stack": "^6.3.2",
"axios": "^1.1.2",
"fuzzysort": "^2.0.1",
"lesspass-fingerprint": "latest",
"lesspass-render-password": "latest",
"lesspass-fingerprint": "^9.1.9",
"lesspass-render-password": "^9.1.9",
"lodash": "^4.17.21",
"memoize-one": "^6.0.0",
"prettier": "^2.6.2",
"react": "18.1.0",
"react-native": "0.68.2",
"react-native-gesture-handler": "^2.4.2",
"react-native-keychain": "^8.0.0",
"react-native-paper": "^4.12.1",
"react-native-safe-area-context": "^4.2.5",
"react-native-screens": "^3.13.1",
"react-native-touch-id": "^4.1.0",
"react-native-vector-icons": "^9.1.0",
"react-redux": "^7.2.5",
"redux": "^4.1.1",
"react-native": "0.70.2",
"react-native-gesture-handler": "^2.7.0",
"react-native-keychain": "^8.1.1",
"react-native-paper": "^4.12.5",
"react-native-safe-area-context": "^4.4.1",
"react-native-screens": "^3.18.0",
"react-native-touch-id": "^4.4.1",
"react-native-vector-icons": "^9.2.0",
"react-redux": "^8.0.4",
"redux": "^4.2.0",
"redux-persist": "^6.0.0",
"redux-thunk": "^2.3.0"
"redux-thunk": "^2.4.1"
},
"devDependencies": {
"@babel/core": "^7.18.2",
"@babel/runtime": "^7.18.3",
"@react-native-community/eslint-config": "^3.0.2",
"babel-jest": "^28.1.0",
"@babel/core": "^7.12.9",
"@babel/runtime": "^7.12.5",
"@react-native-community/eslint-config": "^2.0.0",
"@tsconfig/react-native": "^2.0.2",
"@types/jest": "^26.0.23",
"@types/react-native": "^0.70.4",
"@types/react-test-renderer": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.37.0",
"@typescript-eslint/parser": "^5.37.0",
"babel-jest": "^26.6.3",
"eslint": "^7.32.0",
"jest": "^28.1.0",
"metro-react-native-babel-preset": "^0.67.0",
"pod-install": "^0.1.36",
"react-native-clean-project": "^4.0.1",
"react-test-renderer": "18.1.0"
"jest": "^26.6.3",
"metro-react-native-babel-preset": "0.72.3",
"prettier": "^2.7.1",
"react-native-version": "^4.0.0",
"react-test-renderer": "18.1.0",
"typescript": "^4.8.3"
},
"jest": {
"preset": "react-native"
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
]
}
}

+ 0
- 7
mobile/react-native.config.js 查看文件

@@ -1,7 +0,0 @@
module.exports = {
project: {
ios: {},
android: {}
},
assets: ["./assets/fonts/"]
};

+ 3
- 3
mobile/src/password/PasswordGeneratorScreen.js 查看文件

@@ -14,7 +14,7 @@ import Styles from "../ui/Styles";
import Counter from "./Counter";
import Options from "./Options";
import MasterPassword from "./MasterPassword";
import Clipboard from "@react-native-community/clipboard";
import { NativeModules } from "react-native";
import { savePasswordProfile, updatePasswordProfile } from "./profilesActions";
import { cleanPasswordProfile } from "../profiles/profileActions";
import {
@@ -163,7 +163,7 @@ export default function PasswordGeneratorScreen() {
passwordProfile
);
if (state.copyPasswordAfterGeneration) {
Clipboard.setString(password);
NativeModules.LessPassClipboard.copy(password);
setCopied(true);
}
setState((state) => ({ ...state, password }));
@@ -205,7 +205,7 @@ export default function PasswordGeneratorScreen() {
<Button
mode="outlined"
onPress={() => {
Clipboard.setString(state.password);
NativeModules.LessPassClipboard.copy(state.password);
setCopied(true);
}}
icon="clipboard"


+ 1
- 1
mobile/src/version.json 查看文件

@@ -1,3 +1,3 @@
{
"version": "9.7.0"
"version": "9.7.1"
}

+ 10
- 0
mobile/tsconfig.json 查看文件

@@ -0,0 +1,10 @@
// prettier-ignore
{
"extends": "@tsconfig/react-native/tsconfig.json", /* Recommended React Native TSConfig base */
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */

/* Completeness */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}

+ 2720
- 2151
mobile/yarn.lock
文件差異過大導致無法顯示
查看文件


Loading…
取消
儲存