* OPS: randombytes work * OPS: porting to RN android: added prompt, refactoring * OPS: better android prompt * FIX: scan qr callback * FIX: correct fee sat calculation for HD & classic segwit wallets * FIX: Fixed height for button in empty transaction list * FIX: keyboard issue on fee selection modal * FIX: slow QR code generation for HD backup screen * ADD: wallet reorder * FIX: TypeError: undefined is not an object (evaluating 'recommendedFees.halfHourFee') #133 * FIX: android appstore link * OPS: Code to Migrate Expo json * REF: renamed blitzhub to lndhub * OPS: Migration: move expo files instead of parsing * FIX: lndhub uri usage * FIX: no security alert on android (it was ios specific) * REF: better tx list rendering and sorting * ADD: verify tx on coinb.in * FIX: Tap to dismiss is not working #137 * REF: Removed Wallet gradients duplication. * REF: about screen * FIX: bech32 qr scan in send screen * FIX: better bip21 handling * Use of dayjs for transaction details * REF: QR code content follows BIP21 * ADD: fee in local currency when send * FIX: Refresh wallet info on page focuslocalNotifications
@ -1,8 +1,3 @@ |
|||
{ |
|||
"presets": ["babel-preset-expo"], |
|||
"env": { |
|||
"development": { |
|||
"plugins": ["transform-react-jsx-source"] |
|||
} |
|||
} |
|||
} |
|||
"presets": ["module:metro-react-native-babel-preset"] |
|||
} |
@ -1,14 +0,0 @@ |
|||
import './shim.js'; |
|||
import MainBottomTabs from './MainBottomTabs'; |
|||
import Sentry from 'sentry-expo'; |
|||
Sentry.config('https://23377936131848ca8003448a893cb622@sentry.io/1295736').install(); |
|||
|
|||
/** @type {AppStorage} */ |
|||
require('./BlueApp'); |
|||
|
|||
if (!Error.captureStackTrace) { |
|||
// captureStackTrace is only available when debugging
|
|||
Error.captureStackTrace = () => {}; |
|||
} |
|||
|
|||
export default MainBottomTabs; |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.linked.project.id="BlueWallet" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="java-gradle" name="Java-Gradle"> |
|||
<configuration> |
|||
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> |
|||
<option name="BUILDABLE" value="false" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="android-gradle" name="Android-Gradle"> |
|||
<configuration> |
|||
<option name="GRADLE_PROJECT_PATH" value=":" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$" /> |
|||
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,65 @@ |
|||
# To learn about Buck see [Docs](https://buckbuild.com/). |
|||
# To run your application with Buck: |
|||
# - install Buck |
|||
# - `npm start` - to start the packager |
|||
# - `cd android` |
|||
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` |
|||
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck |
|||
# - `buck install -r android/app` - compile, install and run application |
|||
# |
|||
|
|||
lib_deps = [] |
|||
|
|||
for jarfile in glob(['libs/*.jar']): |
|||
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')] |
|||
lib_deps.append(':' + name) |
|||
prebuilt_jar( |
|||
name = name, |
|||
binary_jar = jarfile, |
|||
) |
|||
|
|||
for aarfile in glob(['libs/*.aar']): |
|||
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')] |
|||
lib_deps.append(':' + name) |
|||
android_prebuilt_aar( |
|||
name = name, |
|||
aar = aarfile, |
|||
) |
|||
|
|||
android_library( |
|||
name = "all-libs", |
|||
exported_deps = lib_deps, |
|||
) |
|||
|
|||
android_library( |
|||
name = "app-code", |
|||
srcs = glob([ |
|||
"src/main/java/**/*.java", |
|||
]), |
|||
deps = [ |
|||
":all-libs", |
|||
":build_config", |
|||
":res", |
|||
], |
|||
) |
|||
|
|||
android_build_config( |
|||
name = "build_config", |
|||
package = "io.bluewallet.bluewallet", |
|||
) |
|||
|
|||
android_resource( |
|||
name = "res", |
|||
package = "io.bluewallet.bluewallet", |
|||
res = "src/main/res", |
|||
) |
|||
|
|||
android_binary( |
|||
name = "app", |
|||
keystore = "//android/keystores:debug", |
|||
manifest = "src/main/AndroidManifest.xml", |
|||
package_type = "debug", |
|||
deps = [ |
|||
":app-code", |
|||
], |
|||
) |
@ -0,0 +1,165 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="android-gradle" name="Android-Gradle"> |
|||
<configuration> |
|||
<option name="GRADLE_PROJECT_PATH" value=":app" /> |
|||
</configuration> |
|||
</facet> |
|||
<facet type="android" name="Android"> |
|||
<configuration> |
|||
<option name="SELECTED_BUILD_VARIANT" value="debug" /> |
|||
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> |
|||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> |
|||
<afterSyncTasks> |
|||
<task>generateDebugSources</task> |
|||
</afterSyncTasks> |
|||
<option name="ALLOW_USER_CONFIGURATION" value="false" /> |
|||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |
|||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |
|||
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> |
|||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> |
|||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> |
|||
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" /> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/react/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
|||
</content> |
|||
<orderEntry type="jdk" jdkName="Android API 27 Platform" jdkType="Android SDK" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:fbcore-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:fresco-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:drawee-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.1.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-okhttp3-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-analytics-impl-16.0.5" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tasks-16.0.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.11.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-ads-identifier-16.0.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-compat-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.parse.bolts:bolts-tasks:1.4.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:viewmodel-1.1.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-measurement-base-16.0.4" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-analytics-16.0.5" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-stats-16.0.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp-urlconnection:3.11.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-basement-16.0.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat-26.1.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: org.webkit:android-jsc-r174650" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-v4-26.1.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-tagmanager-v4-impl-16.0.5" level="project" /> |
|||
<orderEntry type="library" name="Gradle: io.sentry:sentry:1.7.5@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.android.gms:play-services-base-16.0.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: javax.inject:javax.inject:1@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:support-fragment-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.core:runtime-1.1.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.soloader:soloader-0.5.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.react:react-native-0.57.5" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.infer.annotation:infer-annotation:0.11.2@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: org.slf4j:slf4j-api:1.7.24@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-27.1.1" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:3.0.2@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:livedata-core-1.1.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: io.sentry:sentry-android:1.7.5@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.core:common:1.1.0@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.fasterxml.jackson.core:jackson-core:2.8.7@jar" level="project" /> |
|||
<orderEntry type="library" name="Gradle: com.facebook.fresco:imagepipeline-base-1.10.0" level="project" /> |
|||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.1.0" level="project" /> |
|||
<orderEntry type="module" module-name="react-native-sentry" /> |
|||
<orderEntry type="module" module-name="react-native-google-analytics-bridge" /> |
|||
<orderEntry type="module" module-name="react-native-haptic-feedback" /> |
|||
<orderEntry type="module" module-name="react-native-gesture-handler" /> |
|||
<orderEntry type="module" module-name="react-native-prompt-android" /> |
|||
<orderEntry type="module" module-name="react-native-linear-gradient" /> |
|||
<orderEntry type="module" module-name="react-native-vector-icons" /> |
|||
<orderEntry type="module" module-name="react-native-svg" /> |
|||
<orderEntry type="module" module-name="react-native-device-info" /> |
|||
<orderEntry type="module" module-name="react-native-randombytes" /> |
|||
<orderEntry type="module" module-name="react-native-camera" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,177 @@ |
|||
apply plugin: "com.android.application" |
|||
|
|||
import com.android.build.OutputFile |
|||
|
|||
/** |
|||
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets |
|||
* and bundleReleaseJsAndAssets). |
|||
* These basically call `react-native bundle` with the correct arguments during the Android build |
|||
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the |
|||
* bundle directly from the development server. Below you can see all the possible configurations |
|||
* and their defaults. If you decide to add a configuration block, make sure to add it before the |
|||
* `apply from: "../../node_modules/react-native/react.gradle"` line. |
|||
* |
|||
* project.ext.react = [ |
|||
* // the name of the generated asset file containing your JS bundle |
|||
* bundleAssetName: "index.android.bundle", |
|||
* |
|||
* // the entry file for bundle generation |
|||
* entryFile: "index.android.js", |
|||
* |
|||
* // whether to bundle JS and assets in debug mode |
|||
* bundleInDebug: false, |
|||
* |
|||
* // whether to bundle JS and assets in release mode |
|||
* bundleInRelease: true, |
|||
* |
|||
* // whether to bundle JS and assets in another build variant (if configured). |
|||
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants |
|||
* // The configuration property can be in the following formats |
|||
* // 'bundleIn${productFlavor}${buildType}' |
|||
* // 'bundleIn${buildType}' |
|||
* // bundleInFreeDebug: true, |
|||
* // bundleInPaidRelease: true, |
|||
* // bundleInBeta: true, |
|||
* |
|||
* // whether to disable dev mode in custom build variants (by default only disabled in release) |
|||
* // for example: to disable dev mode in the staging build type (if configured) |
|||
* devDisabledInStaging: true, |
|||
* // The configuration property can be in the following formats |
|||
* // 'devDisabledIn${productFlavor}${buildType}' |
|||
* // 'devDisabledIn${buildType}' |
|||
* |
|||
* // the root of your project, i.e. where "package.json" lives |
|||
* root: "../../", |
|||
* |
|||
* // where to put the JS bundle asset in debug mode |
|||
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug", |
|||
* |
|||
* // where to put the JS bundle asset in release mode |
|||
* jsBundleDirRelease: "$buildDir/intermediates/assets/release", |
|||
* |
|||
* // where to put drawable resources / React Native assets, e.g. the ones you use via |
|||
* // require('./image.png')), in debug mode |
|||
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", |
|||
* |
|||
* // where to put drawable resources / React Native assets, e.g. the ones you use via |
|||
* // require('./image.png')), in release mode |
|||
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release", |
|||
* |
|||
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means |
|||
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to |
|||
* // date; if you have any other folders that you want to ignore for performance reasons (gradle |
|||
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ |
|||
* // for example, you might want to remove it from here. |
|||
* inputExcludes: ["android/**", "ios/**"], |
|||
* |
|||
* // override which node gets called and with what additional arguments |
|||
* nodeExecutableAndArgs: ["node"], |
|||
* |
|||
* // supply additional arguments to the packager |
|||
* extraPackagerArgs: [] |
|||
* ] |
|||
*/ |
|||
|
|||
project.ext.react = [ |
|||
entryFile: "index.js" |
|||
] |
|||
|
|||
apply from: "../../node_modules/react-native/react.gradle" |
|||
apply from: "../../node_modules/react-native-sentry/sentry.gradle" |
|||
|
|||
/** |
|||
* Set this to true to create two separate APKs instead of one: |
|||
* - An APK that only works on ARM devices |
|||
* - An APK that only works on x86 devices |
|||
* The advantage is the size of the APK is reduced by about 4MB. |
|||
* Upload all the APKs to the Play Store and people will download |
|||
* the correct one based on the CPU architecture of their device. |
|||
*/ |
|||
def enableSeparateBuildPerCPUArchitecture = false |
|||
|
|||
/** |
|||
* Run Proguard to shrink the Java bytecode in release builds. |
|||
*/ |
|||
def enableProguardInReleaseBuilds = false |
|||
|
|||
android { |
|||
compileSdkVersion rootProject.ext.compileSdkVersion |
|||
buildToolsVersion rootProject.ext.buildToolsVersion |
|||
|
|||
defaultConfig { |
|||
applicationId "io.bluewallet.bluewallet" |
|||
minSdkVersion rootProject.ext.minSdkVersion |
|||
targetSdkVersion rootProject.ext.targetSdkVersion |
|||
versionCode 9 |
|||
versionName "3.2.3" |
|||
ndk { |
|||
abiFilters "armeabi-v7a", "x86" |
|||
} |
|||
} |
|||
signingConfigs { |
|||
release { |
|||
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { |
|||
storeFile file(MYAPP_RELEASE_STORE_FILE) |
|||
storePassword MYAPP_RELEASE_STORE_PASSWORD |
|||
keyAlias MYAPP_RELEASE_KEY_ALIAS |
|||
keyPassword MYAPP_RELEASE_KEY_PASSWORD |
|||
} |
|||
} |
|||
} |
|||
splits { |
|||
abi { |
|||
reset() |
|||
enable enableSeparateBuildPerCPUArchitecture |
|||
universalApk false // If true, also generate a universal APK |
|||
include "armeabi-v7a", "x86" |
|||
} |
|||
} |
|||
buildTypes { |
|||
release { |
|||
minifyEnabled enableProguardInReleaseBuilds |
|||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" |
|||
signingConfig signingConfigs.release |
|||
} |
|||
} |
|||
// applicationVariants are e.g. debug, release |
|||
applicationVariants.all { variant -> |
|||
variant.outputs.each { output -> |
|||
// For each separate APK per architecture, set a unique version code as described here: |
|||
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits |
|||
def versionCodes = ["armeabi-v7a":1, "x86":2] |
|||
def abi = output.getFilter(OutputFile.ABI) |
|||
if (abi != null) { // null for the universal-debug, universal-release variants |
|||
output.versionCodeOverride = |
|||
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
dependencies { |
|||
compile project(':react-native-camera') |
|||
compile project(':react-native-fs') |
|||
compile project(':react-native-gesture-handler') |
|||
compile project(':react-native-vector-icons') |
|||
compile project(':react-native-svg') |
|||
compile project(':react-native-sentry') |
|||
compile project(':react-native-randombytes') |
|||
compile project(':react-native-prompt-android') |
|||
compile project(':react-native-linear-gradient') |
|||
compile project(':react-native-haptic-feedback') |
|||
compile project(':react-native-google-analytics-bridge') |
|||
compile project(':react-native-device-info') |
|||
implementation (project(':react-native-camera')) { |
|||
exclude group: "com.android.support" |
|||
} |
|||
implementation fileTree(dir: "libs", include: ["*.jar"]) |
|||
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" |
|||
implementation "com.facebook.react:react-native:+" // From node_modules |
|||
} |
|||
|
|||
// Run this once to be able to run the application with BUCK |
|||
// puts all compile dependencies into folder libs for BUCK to use |
|||
task copyDownloadableDepsToLibs(type: Copy) { |
|||
from configurations.compile |
|||
into 'libs' |
|||
} |
@ -0,0 +1,17 @@ |
|||
# Add project specific ProGuard rules here. |
|||
# By default, the flags in this file are appended to flags specified |
|||
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt |
|||
# You can edit the include path and order by changing the proguardFiles |
|||
# directive in build.gradle. |
|||
# |
|||
# For more details, see |
|||
# http://developer.android.com/guide/developing/tools/proguard.html |
|||
|
|||
# Add any project specific keep options here: |
|||
|
|||
# If your project uses WebView with JS, uncomment the following |
|||
# and specify the fully qualified class name to the JavaScript interface |
|||
# class: |
|||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
|||
# public *; |
|||
#} |
@ -0,0 +1,27 @@ |
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|||
package="io.bluewallet.bluewallet"> |
|||
|
|||
<uses-permission android:name="android.permission.INTERNET" /> |
|||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> |
|||
<uses-permission android:name="android.permission.CAMERA" /> |
|||
|
|||
<application |
|||
android:name=".MainApplication" |
|||
android:label="@string/app_name" |
|||
android:icon="@mipmap/ic_launcher" |
|||
android:allowBackup="false" |
|||
android:theme="@style/AppTheme"> |
|||
<activity |
|||
android:name=".MainActivity" |
|||
android:label="@string/app_name" |
|||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" |
|||
android:windowSoftInputMode="adjustResize"> |
|||
<intent-filter> |
|||
<action android:name="android.intent.action.MAIN" /> |
|||
<category android:name="android.intent.category.LAUNCHER" /> |
|||
</intent-filter> |
|||
</activity> |
|||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" /> |
|||
</application> |
|||
|
|||
</manifest> |
@ -0,0 +1,28 @@ |
|||
package io.bluewallet.bluewallet; |
|||
|
|||
import com.facebook.react.ReactActivity; |
|||
import com.facebook.react.ReactActivityDelegate; |
|||
import com.facebook.react.ReactRootView; |
|||
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; |
|||
|
|||
public class MainActivity extends ReactActivity { |
|||
|
|||
/** |
|||
* Returns the name of the main component registered from JavaScript. |
|||
* This is used to schedule rendering of the component. |
|||
*/ |
|||
@Override |
|||
protected String getMainComponentName() { |
|||
return "BlueWallet"; // this one too
|
|||
} |
|||
|
|||
@Override |
|||
protected ReactActivityDelegate createReactActivityDelegate() { |
|||
return new ReactActivityDelegate(this, getMainComponentName()) { |
|||
@Override |
|||
protected ReactRootView createRootView() { |
|||
return new RNGestureHandlerEnabledRootView(MainActivity.this); |
|||
} |
|||
}; |
|||
} |
|||
} |
@ -0,0 +1,69 @@ |
|||
package io.bluewallet.bluewallet; |
|||
|
|||
import android.app.Application; |
|||
|
|||
import com.facebook.react.ReactApplication; |
|||
import com.oblador.vectoricons.VectorIconsPackage; |
|||
import com.horcrux.svg.SvgPackage; |
|||
import io.sentry.RNSentryPackage; |
|||
import com.bitgo.randombytes.RandomBytesPackage; |
|||
import im.shimo.react.prompt.RNPromptPackage; |
|||
import com.BV.LinearGradient.LinearGradientPackage; |
|||
import com.mkuczera.RNReactNativeHapticFeedbackPackage; |
|||
import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; |
|||
import com.learnium.RNDeviceInfo.RNDeviceInfo; |
|||
import com.facebook.react.ReactNativeHost; |
|||
import com.facebook.react.ReactPackage; |
|||
import com.facebook.react.shell.MainReactPackage; |
|||
import com.facebook.soloader.SoLoader; |
|||
import org.reactnative.camera.RNCameraPackage; |
|||
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; |
|||
import com.rnfs.RNFSPackage; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
|
|||
public class MainApplication extends Application implements ReactApplication { |
|||
|
|||
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { |
|||
@Override |
|||
public boolean getUseDeveloperSupport() { |
|||
return BuildConfig.DEBUG; |
|||
} |
|||
|
|||
@Override |
|||
protected List<ReactPackage> getPackages() { |
|||
return Arrays.<ReactPackage>asList( |
|||
new MainReactPackage(), |
|||
new RNFSPackage() , |
|||
new VectorIconsPackage(), |
|||
new SvgPackage(), |
|||
new RNSentryPackage(), |
|||
new RandomBytesPackage(), |
|||
new RNPromptPackage(), |
|||
new LinearGradientPackage(), |
|||
new RNReactNativeHapticFeedbackPackage(), |
|||
new GoogleAnalyticsBridgePackage(), |
|||
new RNDeviceInfo(), |
|||
new RNCameraPackage(), |
|||
new RNGestureHandlerPackage() |
|||
); |
|||
} |
|||
|
|||
@Override |
|||
protected String getJSMainModuleName() { |
|||
return "index"; |
|||
} |
|||
}; |
|||
|
|||
@Override |
|||
public ReactNativeHost getReactNativeHost() { |
|||
return mReactNativeHost; |
|||
} |
|||
|
|||
@Override |
|||
public void onCreate() { |
|||
super.onCreate(); |
|||
SoLoader.init(this, /* native exopackage */ false); |
|||
} |
|||
} |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,3 @@ |
|||
<resources> |
|||
<string name="app_name">Blue Wallet</string> |
|||
</resources> |
@ -0,0 +1,8 @@ |
|||
<resources> |
|||
|
|||
<!-- Base application theme. --> |
|||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> |
|||
<!-- Customize your theme here. --> |
|||
</style> |
|||
|
|||
</resources> |
@ -0,0 +1,50 @@ |
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
|||
|
|||
buildscript { |
|||
ext { |
|||
buildToolsVersion = "27.0.3" |
|||
minSdkVersion = 16 |
|||
compileSdkVersion = 27 |
|||
targetSdkVersion = 26 |
|||
supportLibVersion = "27.1.1" |
|||
} |
|||
repositories { |
|||
google() |
|||
jcenter() |
|||
} |
|||
dependencies { |
|||
classpath 'com.android.tools.build:gradle:3.1.4' |
|||
|
|||
// NOTE: Do not place your application dependencies here; they belong |
|||
// in the individual module build.gradle files |
|||
} |
|||
} |
|||
|
|||
allprojects { |
|||
repositories { |
|||
mavenLocal() |
|||
google() |
|||
jcenter() |
|||
maven { |
|||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm |
|||
url "$rootDir/../node_modules/react-native/android" |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
task wrapper(type: Wrapper) { |
|||
gradleVersion = '4.4' |
|||
distributionUrl = distributionUrl.replace("bin", "all") |
|||
} |
|||
|
|||
subprojects { |
|||
project.configurations.all { |
|||
resolutionStrategy.eachDependency { details -> |
|||
if (details.requested.group == 'com.android.support' |
|||
&& !details.requested.name.contains('multidex') ) { |
|||
details.useVersion "26.1.0" |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,93 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<com.android.support> |
|||
<support-compat versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<leanback-v17 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<recommendation versions="23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-tv-provider versions="26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-vector-drawable versions="23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<recyclerview-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<preference-leanback-v17 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<preference-v14 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<percent versions="22.2.0,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-media-compat versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<cardview-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<wearable versions="26.0.0-alpha1"/> |
|||
<exifinterface versions="25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-annotations versions="19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<appcompat-v7 versions="18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<palette-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<multidex-instrumentation versions="1.0.0,1.0.1,1.0.2,1.0.3"/> |
|||
<multidex versions="1.0.0,1.0.1,1.0.2,1.0.3"/> |
|||
<mediarouter-v7 versions="18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-alpha4,28.0.0-alpha5,28.0.0-beta01,28.0.0"/> |
|||
<preference-v7 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-dynamic-animation versions="25.3.0,25.3.1,25.4.0,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-fragment versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<design versions="22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<transition versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<customtabs versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-core-ui versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<gridlayout-v7 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<animated-vector-drawable versions="23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-core-utils versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-v13 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<instantvideo versions="26.0.0-alpha1"/> |
|||
<support-v4 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-emoji versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<wear versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-emoji-appcompat versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-emoji-bundled versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<support-content versions="27.0.0,27.0.1,27.0.2,27.1.0,27.1.1,28.0.0-alpha1"/> |
|||
<design-bottomnavigation versions="28.0.0-alpha1"/> |
|||
<design-button versions="28.0.0-alpha1"/> |
|||
<design-circularreveal-cardview versions="28.0.0-alpha1"/> |
|||
<design-bottomappbar versions="28.0.0-alpha1"/> |
|||
<design-card versions="28.0.0-alpha1"/> |
|||
<design-shape versions="28.0.0-alpha1"/> |
|||
<design-drawable versions="28.0.0-alpha1"/> |
|||
<design-bottomsheet versions="28.0.0-alpha1"/> |
|||
<design-floatingactionbutton versions="28.0.0-alpha1"/> |
|||
<design-circularreveal-coordinatorlayout versions="28.0.0-alpha1"/> |
|||
<design-textfield versions="28.0.0-alpha1"/> |
|||
<design-stateful versions="28.0.0-alpha1"/> |
|||
<design-circularreveal versions="28.0.0-alpha1"/> |
|||
<design-expandable versions="28.0.0-alpha1"/> |
|||
<design-navigation versions="28.0.0-alpha1"/> |
|||
<design-dialog versions="28.0.0-alpha1"/> |
|||
<design-canvas versions="28.0.0-alpha1"/> |
|||
<design-tabs versions="28.0.0-alpha1"/> |
|||
<design-chip versions="28.0.0-alpha1"/> |
|||
<design-snackbar versions="28.0.0-alpha1"/> |
|||
<design-theme versions="28.0.0-alpha1"/> |
|||
<design-math versions="28.0.0-alpha1"/> |
|||
<design-transformation versions="28.0.0-alpha1"/> |
|||
<design-widget versions="28.0.0-alpha1"/> |
|||
<design-animation versions="28.0.0-alpha1"/> |
|||
<design-typography versions="28.0.0-alpha1"/> |
|||
<design-color versions="28.0.0-alpha1"/> |
|||
<design-internal versions="28.0.0-alpha1"/> |
|||
<design-resources versions="28.0.0-alpha1"/> |
|||
<design-ripple versions="28.0.0-alpha1"/> |
|||
<coordinatorlayout versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<collections versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<slidingpanelayout versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<asynclayoutinflater versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<slices-view versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<recyclerview-selection versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<viewpager versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<cursoradapter versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<localbroadcastmanager versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<heifwriter versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<customview versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<print versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<slices-builders versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<interpolator versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<slices-core versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<loader versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<swiperefreshlayout versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<drawerlayout versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<documentfile versions="28.0.0-alpha1,28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<webkit versions="28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<car versions="28.0.0-alpha3,28.0.0-alpha4,28.0.0-alpha5"/> |
|||
<versionedparcelable versions="28.0.0-alpha3,28.0.0-beta01,28.0.0-rc01,28.0.0-rc02,28.0.0"/> |
|||
<media2 versions="28.0.0-alpha01,28.0.0-alpha02,28.0.0-alpha03"/> |
|||
</com.android.support> |
@ -0,0 +1,115 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<metadata> |
|||
<com.android.support.constraint/> |
|||
<com.android.databinding/> |
|||
<com.android.support/> |
|||
<com.android.support.test/> |
|||
<com.android.support.test.janktesthelper/> |
|||
<com.android.support.test.uiautomator/> |
|||
<com.android.support.test.espresso/> |
|||
<android.arch.persistence.room/> |
|||
<android.arch.lifecycle/> |
|||
<android.arch.core/> |
|||
<com.google.android.instantapps/> |
|||
<com.google.android.instantapps.thirdpartycompat/> |
|||
<com.android.java.tools.build/> |
|||
<com.android.tools/> |
|||
<com.android.tools.layoutlib/> |
|||
<com.android.tools.ddms/> |
|||
<com.android.tools.external.com-intellij/> |
|||
<com.android.tools.build/> |
|||
<com.android.tools.analytics-library/> |
|||
<com.android.tools.internal.build.test/> |
|||
<com.android.tools.lint/> |
|||
<com.android.tools.external.org-jetbrains/> |
|||
<com.android.support.test.espresso.idling/> |
|||
<com.android.support.test.services/> |
|||
<com.google.firebase/> |
|||
<com.google.android.gms/> |
|||
<com.google.gms/> |
|||
<android.arch.paging/> |
|||
<com.crashlytics.sdk.android/> |
|||
<io.fabric.sdk.android/> |
|||
<android.arch.persistence/> |
|||
<com.google.android.wearable/> |
|||
<com.google.android.support/> |
|||
<com.android.installreferrer/> |
|||
<com.google.ar/> |
|||
<androidx.core/> |
|||
<com.google.android.things/> |
|||
<com.android.tools.build.jetifier/> |
|||
<tools.base.build-system.debug/> |
|||
<androidx.databinding/> |
|||
<androidx.constraintlayout/> |
|||
<org.chromium.net/> |
|||
<com.google.android.play/> |
|||
<androidx.multidex/> |
|||
<com.google.android.material/> |
|||
<androidx.test.services/> |
|||
<androidx.test.janktesthelper/> |
|||
<androidx.test/> |
|||
<androidx.test.espresso/> |
|||
<androidx.test.espresso.idling/> |
|||
<androidx.test.uiautomator/> |
|||
<androidx.room/> |
|||
<androidx.paging/> |
|||
<androidx.lifecycle/> |
|||
<androidx.sqlite/> |
|||
<androidx.arch.core/> |
|||
<android.arch.work/> |
|||
<android.arch.navigation/> |
|||
<androidx.mediarouter/> |
|||
<androidx.percentlayout/> |
|||
<androidx.emoji/> |
|||
<androidx.cardview/> |
|||
<androidx.preference/> |
|||
<androidx.wear/> |
|||
<androidx.legacy/> |
|||
<androidx.documentfile/> |
|||
<androidx.car/> |
|||
<androidx.swiperefreshlayout/> |
|||
<androidx.leanback/> |
|||
<androidx.appcompat/> |
|||
<androidx.customview/> |
|||
<androidx.gridlayout/> |
|||
<androidx.vectordrawable/> |
|||
<androidx.heifwriter/> |
|||
<androidx.transition/> |
|||
<androidx.print/> |
|||
<androidx.viewpager/> |
|||
<androidx.annotation/> |
|||
<androidx.exifinterface/> |
|||
<androidx.dynamicanimation/> |
|||
<androidx.browser/> |
|||
<androidx.localbroadcastmanager/> |
|||
<androidx.asynclayoutinflater/> |
|||
<androidx.contentpager/> |
|||
<androidx.slidingpanelayout/> |
|||
<androidx.cursoradapter/> |
|||
<androidx.media/> |
|||
<androidx.loader/> |
|||
<androidx.interpolator/> |
|||
<androidx.coordinatorlayout/> |
|||
<androidx.fragment/> |
|||
<androidx.tvprovider/> |
|||
<androidx.slice/> |
|||
<androidx.collection/> |
|||
<androidx.recommendation/> |
|||
<androidx.drawerlayout/> |
|||
<androidx.recyclerview/> |
|||
<androidx.webkit/> |
|||
<androidx.palette/> |
|||
<com.google.ar.sceneform/> |
|||
<com.google.ar.sceneform.ux/> |
|||
<androidx.test.ext/> |
|||
<com.google.android.ads.consent/> |
|||
<androidx.versionedparcelable/> |
|||
<androidx.media2/> |
|||
<com.google.ads.afsn/> |
|||
<com.google.android.ads/> |
|||
<androidx.biometric/> |
|||
<androidx.concurrent/> |
|||
<androidx.activity/> |
|||
<com.android.tools.apkparser/> |
|||
<com.android.tools.pixelprobe/> |
|||
</metadata> |
@ -0,0 +1,18 @@ |
|||
# Project-wide Gradle settings. |
|||
|
|||
# IDE (e.g. Android Studio) users: |
|||
# Gradle settings configured through the IDE *will override* |
|||
# any settings specified in this file. |
|||
|
|||
# For more details on how to configure your build environment visit |
|||
# http://www.gradle.org/docs/current/userguide/build_environment.html |
|||
|
|||
# Specifies the JVM arguments used for the daemon process. |
|||
# The setting is particularly useful for tweaking memory settings. |
|||
# Default value: -Xmx10248m -XX:MaxPermSize=256m |
|||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 |
|||
|
|||
# When configured, Gradle will run in incubating parallel mode. |
|||
# This option should only be used with decoupled projects. More details, visit |
|||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects |
|||
# org.gradle.parallel=true |
@ -0,0 +1,5 @@ |
|||
distributionBase=GRADLE_USER_HOME |
|||
distributionPath=wrapper/dists |
|||
zipStoreBase=GRADLE_USER_HOME |
|||
zipStorePath=wrapper/dists |
|||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip |
@ -0,0 +1,172 @@ |
|||
#!/usr/bin/env sh |
|||
|
|||
############################################################################## |
|||
## |
|||
## Gradle start up script for UN*X |
|||
## |
|||
############################################################################## |
|||
|
|||
# Attempt to set APP_HOME |
|||
# Resolve links: $0 may be a link |
|||
PRG="$0" |
|||
# Need this for relative symlinks. |
|||
while [ -h "$PRG" ] ; do |
|||
ls=`ls -ld "$PRG"` |
|||
link=`expr "$ls" : '.*-> \(.*\)$'` |
|||
if expr "$link" : '/.*' > /dev/null; then |
|||
PRG="$link" |
|||
else |
|||
PRG=`dirname "$PRG"`"/$link" |
|||
fi |
|||
done |
|||
SAVED="`pwd`" |
|||
cd "`dirname \"$PRG\"`/" >/dev/null |
|||
APP_HOME="`pwd -P`" |
|||
cd "$SAVED" >/dev/null |
|||
|
|||
APP_NAME="Gradle" |
|||
APP_BASE_NAME=`basename "$0"` |
|||
|
|||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|||
DEFAULT_JVM_OPTS="" |
|||
|
|||
# Use the maximum available, or set MAX_FD != -1 to use that value. |
|||
MAX_FD="maximum" |
|||
|
|||
warn () { |
|||
echo "$*" |
|||
} |
|||
|
|||
die () { |
|||
echo |
|||
echo "$*" |
|||
echo |
|||
exit 1 |
|||
} |
|||
|
|||
# OS specific support (must be 'true' or 'false'). |
|||
cygwin=false |
|||
msys=false |
|||
darwin=false |
|||
nonstop=false |
|||
case "`uname`" in |
|||
CYGWIN* ) |
|||
cygwin=true |
|||
;; |
|||
Darwin* ) |
|||
darwin=true |
|||
;; |
|||
MINGW* ) |
|||
msys=true |
|||
;; |
|||
NONSTOP* ) |
|||
nonstop=true |
|||
;; |
|||
esac |
|||
|
|||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
|||
|
|||
# Determine the Java command to use to start the JVM. |
|||
if [ -n "$JAVA_HOME" ] ; then |
|||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
|||
# IBM's JDK on AIX uses strange locations for the executables |
|||
JAVACMD="$JAVA_HOME/jre/sh/java" |
|||
else |
|||
JAVACMD="$JAVA_HOME/bin/java" |
|||
fi |
|||
if [ ! -x "$JAVACMD" ] ; then |
|||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
|||
|
|||
Please set the JAVA_HOME variable in your environment to match the |
|||
location of your Java installation." |
|||
fi |
|||
else |
|||
JAVACMD="java" |
|||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|||
|
|||
Please set the JAVA_HOME variable in your environment to match the |
|||
location of your Java installation." |
|||
fi |
|||
|
|||
# Increase the maximum file descriptors if we can. |
|||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then |
|||
MAX_FD_LIMIT=`ulimit -H -n` |
|||
if [ $? -eq 0 ] ; then |
|||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |
|||
MAX_FD="$MAX_FD_LIMIT" |
|||
fi |
|||
ulimit -n $MAX_FD |
|||
if [ $? -ne 0 ] ; then |
|||
warn "Could not set maximum file descriptor limit: $MAX_FD" |
|||
fi |
|||
else |
|||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |
|||
fi |
|||
fi |
|||
|
|||
# For Darwin, add options to specify how the application appears in the dock |
|||
if $darwin; then |
|||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |
|||
fi |
|||
|
|||
# For Cygwin, switch paths to Windows format before running java |
|||
if $cygwin ; then |
|||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` |
|||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |
|||
JAVACMD=`cygpath --unix "$JAVACMD"` |
|||
|
|||
# We build the pattern for arguments to be converted via cygpath |
|||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |
|||
SEP="" |
|||
for dir in $ROOTDIRSRAW ; do |
|||
ROOTDIRS="$ROOTDIRS$SEP$dir" |
|||
SEP="|" |
|||
done |
|||
OURCYGPATTERN="(^($ROOTDIRS))" |
|||
# Add a user-defined pattern to the cygpath arguments |
|||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then |
|||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |
|||
fi |
|||
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
|||
i=0 |
|||
for arg in "$@" ; do |
|||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |
|||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option |
|||
|
|||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition |
|||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |
|||
else |
|||
eval `echo args$i`="\"$arg\"" |
|||
fi |
|||
i=$((i+1)) |
|||
done |
|||
case $i in |
|||
(0) set -- ;; |
|||
(1) set -- "$args0" ;; |
|||
(2) set -- "$args0" "$args1" ;; |
|||
(3) set -- "$args0" "$args1" "$args2" ;; |
|||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; |
|||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |
|||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |
|||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |
|||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |
|||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |
|||
esac |
|||
fi |
|||
|
|||
# Escape application args |
|||
save () { |
|||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done |
|||
echo " " |
|||
} |
|||
APP_ARGS=$(save "$@") |
|||
|
|||
# Collect all arguments for the java command, following the shell quoting and substitution rules |
|||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" |
|||
|
|||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong |
|||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then |
|||
cd "$(dirname "$0")" |
|||
fi |
|||
|
|||
exec "$JAVACMD" "$@" |
@ -0,0 +1,84 @@ |
|||
@if "%DEBUG%" == "" @echo off |
|||
@rem ########################################################################## |
|||
@rem |
|||
@rem Gradle startup script for Windows |
|||
@rem |
|||
@rem ########################################################################## |
|||
|
|||
@rem Set local scope for the variables with windows NT shell |
|||
if "%OS%"=="Windows_NT" setlocal |
|||
|
|||
set DIRNAME=%~dp0 |
|||
if "%DIRNAME%" == "" set DIRNAME=. |
|||
set APP_BASE_NAME=%~n0 |
|||
set APP_HOME=%DIRNAME% |
|||
|
|||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|||
set DEFAULT_JVM_OPTS= |
|||
|
|||
@rem Find java.exe |
|||
if defined JAVA_HOME goto findJavaFromJavaHome |
|||
|
|||
set JAVA_EXE=java.exe |
|||
%JAVA_EXE% -version >NUL 2>&1 |
|||
if "%ERRORLEVEL%" == "0" goto init |
|||
|
|||
echo. |
|||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|||
echo. |
|||
echo Please set the JAVA_HOME variable in your environment to match the |
|||
echo location of your Java installation. |
|||
|
|||
goto fail |
|||
|
|||
:findJavaFromJavaHome |
|||
set JAVA_HOME=%JAVA_HOME:"=% |
|||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe |
|||
|
|||
if exist "%JAVA_EXE%" goto init |
|||
|
|||
echo. |
|||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |
|||
echo. |
|||
echo Please set the JAVA_HOME variable in your environment to match the |
|||
echo location of your Java installation. |
|||
|
|||
goto fail |
|||
|
|||
:init |
|||
@rem Get command-line arguments, handling Windows variants |
|||
|
|||
if not "%OS%" == "Windows_NT" goto win9xME_args |
|||
|
|||
:win9xME_args |
|||
@rem Slurp the command line arguments. |
|||
set CMD_LINE_ARGS= |
|||
set _SKIP=2 |
|||
|
|||
:win9xME_args_slurp |
|||
if "x%~1" == "x" goto execute |
|||
|
|||
set CMD_LINE_ARGS=%* |
|||
|
|||
:execute |
|||
@rem Setup the command line |
|||
|
|||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |
|||
|
|||
@rem Execute Gradle |
|||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% |
|||
|
|||
: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 |
|||
rem the _cmd.exe /c_ return code! |
|||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 |
|||
exit /b 1 |
|||
|
|||
:mainEnd |
|||
if "%OS%"=="Windows_NT" endlocal |
|||
|
|||
:omega |
@ -0,0 +1,8 @@ |
|||
keystore( |
|||
name = "debug", |
|||
properties = "debug.keystore.properties", |
|||
store = "debug.keystore", |
|||
visibility = [ |
|||
"PUBLIC", |
|||
], |
|||
) |
@ -0,0 +1,4 @@ |
|||
key.store=debug.keystore |
|||
key.alias=androiddebugkey |
|||
key.store.password=android |
|||
key.alias.password=android |
@ -0,0 +1,5 @@ |
|||
defaults.url=https://sentry.io/ |
|||
defaults.org=bluewallet |
|||
defaults.project=bluewallet |
|||
auth.token=0ee298bd4d3743819f710a5ed555f5429e4ffe64acbb41ac933f2745b0c163da |
|||
cli.executable=node_modules/@sentry/cli/bin/sentry-cli |
@ -0,0 +1,29 @@ |
|||
rootProject.name = 'BlueWallet' |
|||
include ':react-native-camera' |
|||
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') |
|||
include ':react-native-fs' |
|||
project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android') |
|||
include ':react-native-gesture-handler' |
|||
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') |
|||
include ':react-native-vector-icons' |
|||
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') |
|||
include ':react-native-svg' |
|||
project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') |
|||
include ':react-native-sentry' |
|||
project(':react-native-sentry').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sentry/android') |
|||
include ':react-native-randombytes' |
|||
project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') |
|||
include ':react-native-prompt-android' |
|||
project(':react-native-prompt-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-prompt-android/android') |
|||
include ':react-native-linear-gradient' |
|||
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') |
|||
include ':react-native-haptic-feedback' |
|||
project(':react-native-haptic-feedback').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-haptic-feedback/android') |
|||
include ':react-native-google-analytics-bridge' |
|||
project(':react-native-google-analytics-bridge').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-analytics-bridge/android') |
|||
include ':react-native-device-info' |
|||
project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') |
|||
include ':react-native-camera' |
|||
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') |
|||
|
|||
include ':app' |
@ -1,56 +1,7 @@ |
|||
{ |
|||
"expo": { |
|||
"sdkVersion": "30.0.0", |
|||
"version": "3.1.2", |
|||
"privacy": "public", |
|||
"platforms": [ |
|||
"ios" |
|||
], |
|||
"ios": { |
|||
"buildNumber": "117", |
|||
"supportsTablet": true, |
|||
"bundleIdentifier": "io.bluewallet.bluewallet", |
|||
"infoPlist": { |
|||
"NSLocationWhenInUseUsageDescription": "Discover local stores nearby that accept Bitcoin", |
|||
"NSCameraUsageDescription": "Allow BlueWallet to scan QR codes", |
|||
"ITSAppUsesNonExemptEncryption": false |
|||
} |
|||
}, |
|||
"name": "Blue Wallet", |
|||
"description": "Bitcoin wallet app. Alpha version (iOS only)", |
|||
"slug": "bluewallet", |
|||
"githubUrl": "https://github.com/BlueWallet/BlueWallet", |
|||
"orientation": "portrait", |
|||
"primaryColor": "#00aced", |
|||
"icon": "img/icon.png", |
|||
"notification": { |
|||
"icon": "https://s3.amazonaws.com/exp-us-standard/placeholder-push-icon.png", |
|||
"color": "#000000" |
|||
}, |
|||
"splash": { |
|||
"backgroundColor": "#FFFFFF", |
|||
"image": "./img/splash/splash.png" |
|||
}, |
|||
"android": { |
|||
"package": "io.bluewallet.bluewallet" |
|||
}, |
|||
"updates": { |
|||
"enabled": false |
|||
}, |
|||
"assetBundlePatterns": [ |
|||
"**/*" |
|||
], |
|||
"hooks": { |
|||
"postPublish": [ |
|||
{ |
|||
"file": "sentry-expo/upload-sourcemaps", |
|||
"config": { |
|||
"organization": "bluewallet", |
|||
"project": "bluewallet", |
|||
"authToken": "sentry_api_key" |
|||
} |
|||
} |
|||
] |
|||
} |
|||
"displayName": "Blue Wallet", |
|||
"name": "BlueWallet", |
|||
"ios": { |
|||
"buildNumber": "118" |
|||
} |
|||
} |
|||
} |
@ -1,69 +0,0 @@ |
|||
import { AppStorage } from './class'; |
|||
import { Accelerometer } from 'expo'; |
|||
import { AsyncStorage } from 'react-native'; |
|||
const bitcoin = require('bitcoinjs-lib'); |
|||
const REQUIRE_NUM_CHUNKS = 16; |
|||
|
|||
// 256 priv key = 32 bytes x 8 chunks
|
|||
// each chunk needs 32 bits of entropy (since ISAAC is 32 bit)
|
|||
// 8 * 32 = 256 bits of entropy for one private key
|
|||
// we read accelerometer 10 times per sec, getting 2 bits of entropy => 20 bits of entropy per sec
|
|||
// 256/20 = 13 sec of gathering entropy
|
|||
|
|||
let chunks = []; // array of 32bit ints
|
|||
let currenChunk = ''; // temp storage of bits (string)
|
|||
let runningListeners = 0; |
|||
|
|||
let listener = function(accelerometerData) { |
|||
let hex = bitcoin.crypto.sha256(accelerometerData.x + '\t' + accelerometerData.y + '\t' + accelerometerData.z).toString('hex'); // whitening
|
|||
let dec = parseInt('0x' + hex[0] + hex[1]); |
|||
let entropyBits = dec & 0b11; |
|||
|
|||
currenChunk += ((entropyBits < 2 && '0') || '') + entropyBits.toString(2); // always 2-char string
|
|||
|
|||
if (currenChunk.length === 32) { |
|||
// got enough bits for 32bit int
|
|||
console.log(currenChunk, parseInt(currenChunk, 2)); |
|||
chunks.push(currenChunk); |
|||
chunks.push(parseInt(currenChunk, 2)); |
|||
currenChunk = ''; |
|||
} |
|||
|
|||
if (chunks.length >= REQUIRE_NUM_CHUNKS) { |
|||
console.log('got enough entropy, saving to storage'); |
|||
Accelerometer.removeAllListeners(); |
|||
runningListeners--; |
|||
AsyncStorage.setItem(AppStorage.ENTROPY, JSON.stringify(chunks)); |
|||
} |
|||
}; |
|||
|
|||
async function start() { |
|||
let entropy = await AsyncStorage.getItem(AppStorage.ENTROPY); |
|||
try { |
|||
entropy = JSON.parse(entropy); |
|||
} catch (Err) { |
|||
entropy = []; |
|||
} |
|||
chunks = entropy || []; |
|||
console.log('got', chunks.length * 32, 'bits of entropy'); |
|||
|
|||
setInterval(() => { |
|||
if (chunks.length < REQUIRE_NUM_CHUNKS && runningListeners === 0) { |
|||
console.log('not enough entropy, starting listener to gather'); |
|||
Accelerometer.addListener(listener); |
|||
runningListeners++; |
|||
} |
|||
}, 1000); |
|||
} |
|||
|
|||
function gotEnoughEntropy() { |
|||
return chunks.length >= 8; // enough for at least one priv key
|
|||
} |
|||
|
|||
function get32bitInt() { |
|||
return chunks.pop(); |
|||
} |
|||
|
|||
module.exports.get32bitInt = get32bitInt; |
|||
module.exports.start = start; |
|||
module.exports.gotEnoughEntropy = gotEnoughEntropy; |
@ -0,0 +1,9 @@ |
|||
ANDROID |
|||
======= |
|||
|
|||
https://facebook.github.io/react-native/docs/signed-apk-android |
|||
https://developer.android.com/studio/run/emulator-commandline |
|||
|
|||
./gradlew cleanBuildCache |
|||
./gradlew assembleRelease |
|||
react-native run-android --variant=release |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 252 KiB |
After Width: | Height: | Size: 481 KiB |
@ -0,0 +1,35 @@ |
|||
import React from 'react'; |
|||
import './shim.js'; |
|||
import MainBottomTabs from './MainBottomTabs'; |
|||
import { Sentry } from 'react-native-sentry'; |
|||
import { AppRegistry } from 'react-native'; |
|||
import WalletMigrate from './screen/wallets/walletMigrate'; |
|||
import { name as appName } from './app.json'; |
|||
/** @type {AppStorage} */ |
|||
const BlueApp = require('./BlueApp'); |
|||
if (process.env.NODE_ENV !== 'development') { |
|||
Sentry.config('https://23377936131848ca8003448a893cb622@sentry.io/1295736').install(); |
|||
} |
|||
|
|||
if (!Error.captureStackTrace) { |
|||
// captureStackTrace is only available when debugging
|
|||
Error.captureStackTrace = () => {}; |
|||
} |
|||
|
|||
class BlueAppComponent extends React.Component { |
|||
constructor(props) { |
|||
super(props); |
|||
this.state = { isMigratingData: true }; |
|||
} |
|||
|
|||
async setIsMigratingData() { |
|||
await BlueApp.startAndDecrypt(); |
|||
this.setState({ isMigratingData: false }); |
|||
} |
|||
|
|||
render() { |
|||
return this.state.isMigratingData ? <WalletMigrate onComplete={() => this.setIsMigratingData()} /> : <MainBottomTabs />; |
|||
} |
|||
} |
|||
|
|||
AppRegistry.registerComponent(appName, () => BlueAppComponent); |
@ -0,0 +1,54 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>en</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>$(EXECUTABLE_NAME)</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundleName</key> |
|||
<string>$(PRODUCT_NAME)</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>1.0</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>1</string> |
|||
<key>LSRequiresIPhoneOS</key> |
|||
<true/> |
|||
<key>UILaunchStoryboardName</key> |
|||
<string>LaunchScreen</string> |
|||
<key>UIRequiredDeviceCapabilities</key> |
|||
<array> |
|||
<string>armv7</string> |
|||
</array> |
|||
<key>UISupportedInterfaceOrientations</key> |
|||
<array> |
|||
<string>UIInterfaceOrientationPortrait</string> |
|||
<string>UIInterfaceOrientationLandscapeLeft</string> |
|||
<string>UIInterfaceOrientationLandscapeRight</string> |
|||
</array> |
|||
<key>UIViewControllerBasedStatusBarAppearance</key> |
|||
<false/> |
|||
<key>NSLocationWhenInUseUsageDescription</key> |
|||
<string></string> |
|||
<key>NSAppTransportSecurity</key> |
|||
<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ --> |
|||
<dict> |
|||
<key>NSExceptionDomains</key> |
|||
<dict> |
|||
<key>localhost</key> |
|||
<dict> |
|||
<key>NSExceptionAllowsInsecureHTTPLoads</key> |
|||
<true/> |
|||
</dict> |
|||
</dict> |
|||
</dict> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,24 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>en</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>$(EXECUTABLE_NAME)</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundleName</key> |
|||
<string>$(PRODUCT_NAME)</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>BNDL</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>1.0</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>1</string> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<Workspace |
|||
version = "1.0"> |
|||
<FileRef |
|||
location = "self:"> |
|||
</FileRef> |
|||
</Workspace> |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!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/> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,5 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<array/> |
|||
</plist> |
@ -0,0 +1,129 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<Scheme |
|||
LastUpgradeVersion = "1010" |
|||
version = "1.3"> |
|||
<BuildAction |
|||
parallelizeBuildables = "NO" |
|||
buildImplicitDependencies = "YES"> |
|||
<BuildActionEntries> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D2A28121D9B038B00D4039D" |
|||
BuildableName = "libReact.a" |
|||
BlueprintName = "React-tvOS" |
|||
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOS.app" |
|||
BlueprintName = "BlueWallet-tvOS" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "NO" |
|||
buildForArchiving = "NO" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOSTests.xctest" |
|||
BlueprintName = "BlueWallet-tvOSTests" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
</BuildActionEntries> |
|||
</BuildAction> |
|||
<TestAction |
|||
buildConfiguration = "Debug" |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
shouldUseLaunchSchemeArgsEnv = "YES"> |
|||
<Testables> |
|||
<TestableReference |
|||
skipped = "NO"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOSTests.xctest" |
|||
BlueprintName = "BlueWallet-tvOSTests" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</TestableReference> |
|||
</Testables> |
|||
<MacroExpansion> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOS.app" |
|||
BlueprintName = "BlueWallet-tvOS" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</MacroExpansion> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</TestAction> |
|||
<LaunchAction |
|||
buildConfiguration = "Debug" |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
launchStyle = "0" |
|||
useCustomWorkingDirectory = "NO" |
|||
ignoresPersistentStateOnLaunch = "NO" |
|||
debugDocumentVersioning = "YES" |
|||
debugServiceExtension = "internal" |
|||
allowLocationSimulation = "YES"> |
|||
<BuildableProductRunnable |
|||
runnableDebuggingMode = "0"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOS.app" |
|||
BlueprintName = "BlueWallet-tvOS" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</LaunchAction> |
|||
<ProfileAction |
|||
buildConfiguration = "Release" |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
savedToolIdentifier = "" |
|||
useCustomWorkingDirectory = "NO" |
|||
debugDocumentVersioning = "YES"> |
|||
<BuildableProductRunnable |
|||
runnableDebuggingMode = "0"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7" |
|||
BuildableName = "BlueWallet-tvOS.app" |
|||
BlueprintName = "BlueWallet-tvOS" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
</ProfileAction> |
|||
<AnalyzeAction |
|||
buildConfiguration = "Debug"> |
|||
</AnalyzeAction> |
|||
<ArchiveAction |
|||
buildConfiguration = "Release" |
|||
revealArchiveInOrganizer = "YES"> |
|||
</ArchiveAction> |
|||
</Scheme> |
@ -0,0 +1,129 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<Scheme |
|||
LastUpgradeVersion = "1010" |
|||
version = "1.3"> |
|||
<BuildAction |
|||
parallelizeBuildables = "NO" |
|||
buildImplicitDependencies = "YES"> |
|||
<BuildActionEntries> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192" |
|||
BuildableName = "libReact.a" |
|||
BlueprintName = "React" |
|||
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
|||
BuildableName = "BlueWallet.app" |
|||
BlueprintName = "BlueWallet" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "NO" |
|||
buildForArchiving = "NO" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "00E356ED1AD99517003FC87E" |
|||
BuildableName = "BlueWalletTests.xctest" |
|||
BlueprintName = "BlueWalletTests" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
</BuildActionEntries> |
|||
</BuildAction> |
|||
<TestAction |
|||
buildConfiguration = "Debug" |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
shouldUseLaunchSchemeArgsEnv = "YES"> |
|||
<Testables> |
|||
<TestableReference |
|||
skipped = "NO"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "00E356ED1AD99517003FC87E" |
|||
BuildableName = "BlueWalletTests.xctest" |
|||
BlueprintName = "BlueWalletTests" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</TestableReference> |
|||
</Testables> |
|||
<MacroExpansion> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
|||
BuildableName = "BlueWallet.app" |
|||
BlueprintName = "BlueWallet" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</MacroExpansion> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</TestAction> |
|||
<LaunchAction |
|||
buildConfiguration = "Release" |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
launchStyle = "0" |
|||
useCustomWorkingDirectory = "NO" |
|||
ignoresPersistentStateOnLaunch = "NO" |
|||
debugDocumentVersioning = "YES" |
|||
debugServiceExtension = "internal" |
|||
allowLocationSimulation = "YES"> |
|||
<BuildableProductRunnable |
|||
runnableDebuggingMode = "0"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
|||
BuildableName = "BlueWallet.app" |
|||
BlueprintName = "BlueWallet" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</LaunchAction> |
|||
<ProfileAction |
|||
buildConfiguration = "Release" |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
savedToolIdentifier = "" |
|||
useCustomWorkingDirectory = "NO" |
|||
debugDocumentVersioning = "YES"> |
|||
<BuildableProductRunnable |
|||
runnableDebuggingMode = "0"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A" |
|||
BuildableName = "BlueWallet.app" |
|||
BlueprintName = "BlueWallet" |
|||
ReferencedContainer = "container:BlueWallet.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
</ProfileAction> |
|||
<AnalyzeAction |
|||
buildConfiguration = "Debug"> |
|||
</AnalyzeAction> |
|||
<ArchiveAction |
|||
buildConfiguration = "Release" |
|||
revealArchiveInOrganizer = "YES"> |
|||
</ArchiveAction> |
|||
</Scheme> |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>SchemeUserState</key> |
|||
<dict> |
|||
<key>BlueWallet-tvOS.xcscheme_^#shared#^_</key> |
|||
<dict> |
|||
<key>orderHint</key> |
|||
<integer>1</integer> |
|||
</dict> |
|||
<key>BlueWallet.xcscheme_^#shared#^_</key> |
|||
<dict> |
|||
<key>orderHint</key> |
|||
<integer>0</integer> |
|||
</dict> |
|||
</dict> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,14 @@ |
|||
/**
|
|||
* Copyright (c) 2015-present, Facebook, Inc. |
|||
* |
|||
* This source code is licensed under the MIT license found in the |
|||
* LICENSE file in the root directory of this source tree. |
|||
*/ |
|||
|
|||
#import <UIKit/UIKit.h> |
|||
|
|||
@interface AppDelegate : UIResponder <UIApplicationDelegate> |
|||
|
|||
@property (nonatomic, strong) UIWindow *window; |
|||
|
|||
@end |
@ -0,0 +1,42 @@ |
|||
/** |
|||
* Copyright (c) 2015-present, Facebook, Inc. |
|||
* |
|||
* This source code is licensed under the MIT license found in the |
|||
* LICENSE file in the root directory of this source tree. |
|||
*/ |
|||
|
|||
#import "AppDelegate.h" |
|||
|
|||
#import <React/RCTBundleURLProvider.h> |
|||
#import <React/RCTRootView.h> |
|||
#if __has_include(<React/RNSentry.h>) |
|||
#import <React/RNSentry.h> // This is used for versions of react >= 0.40 |
|||
#else |
|||
#import "RNSentry.h" // This is used for versions of react < 0.40 |
|||
#endif |
|||
|
|||
@implementation AppDelegate |
|||
|
|||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions |
|||
{ |
|||
NSURL *jsCodeLocation; |
|||
|
|||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; |
|||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation |
|||
moduleName:@"BlueWallet" |
|||
initialProperties:nil |
|||
launchOptions:launchOptions]; |
|||
|
|||
[RNSentry installWithRootView:rootView]; |
|||
|
|||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; |
|||
|
|||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; |
|||
UIViewController *rootViewController = [UIViewController new]; |
|||
rootViewController.view = rootView; |
|||
self.window.rootViewController = rootViewController; |
|||
[self.window makeKeyAndVisible]; |
|||
return YES; |
|||
} |
|||
|
|||
@end |
@ -0,0 +1,39 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES"> |
|||
<device id="retina4_7" orientation="portrait"> |
|||
<adaptation id="fullscreen"/> |
|||
</device> |
|||
<dependencies> |
|||
<deployment identifier="iOS"/> |
|||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/> |
|||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
|||
</dependencies> |
|||
<objects> |
|||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
|||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
|||
<view contentMode="scaleToFill" id="iN0-l3-epB"> |
|||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/> |
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|||
<subviews> |
|||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon" translatesAutoresizingMaskIntoConstraints="NO" id="5GZ-ze-kHb"> |
|||
<rect key="frame" x="154" y="184" width="173" height="112"/> |
|||
<constraints> |
|||
<constraint firstAttribute="height" constant="112" id="Zm5-a8-A8d"/> |
|||
<constraint firstAttribute="width" constant="173" id="t2s-74-qaQ"/> |
|||
</constraints> |
|||
</imageView> |
|||
</subviews> |
|||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
|||
<constraints> |
|||
<constraint firstItem="5GZ-ze-kHb" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="UkL-ek-FgS"/> |
|||
<constraint firstItem="5GZ-ze-kHb" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="mWu-9a-P4V"/> |
|||
</constraints> |
|||
<nil key="simulatedStatusBarMetrics"/> |
|||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
|||
<point key="canvasLocation" x="547.20000000000005" y="454.27286356821594"/> |
|||
</view> |
|||
</objects> |
|||
<resources> |
|||
<image name="icon" width="512" height="512"/> |
|||
</resources> |
|||
</document> |
@ -0,0 +1,116 @@ |
|||
{ |
|||
"images" : [ |
|||
{ |
|||
"size" : "20x20", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-40.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "20x20", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-60.png", |
|||
"scale" : "3x" |
|||
}, |
|||
{ |
|||
"size" : "29x29", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-58.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "29x29", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-87.png", |
|||
"scale" : "3x" |
|||
}, |
|||
{ |
|||
"size" : "40x40", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-80.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "40x40", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-121.png", |
|||
"scale" : "3x" |
|||
}, |
|||
{ |
|||
"size" : "60x60", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-120.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "60x60", |
|||
"idiom" : "iphone", |
|||
"filename" : "Icon-180.png", |
|||
"scale" : "3x" |
|||
}, |
|||
{ |
|||
"size" : "20x20", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-20.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"size" : "20x20", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-41.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "29x29", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-29.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"size" : "29x29", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-59.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "40x40", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-42.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"size" : "40x40", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-81.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "76x76", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-76.png", |
|||
"scale" : "1x" |
|||
}, |
|||
{ |
|||
"size" : "76x76", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-152.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "83.5x83.5", |
|||
"idiom" : "ipad", |
|||
"filename" : "Icon-167.png", |
|||
"scale" : "2x" |
|||
}, |
|||
{ |
|||
"size" : "1024x1024", |
|||
"idiom" : "ios-marketing", |
|||
"filename" : "Icon-1024.png", |
|||
"scale" : "1x" |
|||
} |
|||
], |
|||
"info" : { |
|||
"version" : 1, |
|||
"author" : "xcode" |
|||
} |
|||
} |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 827 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 4.0 KiB |