From 317631a3e31bde8e1587622a6ef308c78e69a2ec Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Tue, 5 Sep 2023 16:23:36 +0100 Subject: [PATCH 1/4] chore: Update Example app to RN 0.72 --- Example/.eslintrc.js | 2 +- Example/.gitattributes | 1 - Example/.gitignore | 27 +- Example/.prettierrc.js | 3 +- Example/.watchmanconfig | 2 +- Example/App.js | 39 +- Example/Gemfile | 6 + Example/__tests__/App.test.tsx | 17 + Example/_bundle/config | 2 + Example/android/app/_BUCK | 55 -- Example/android/app/build.gradle | 214 ++--- Example/android/app/build_defs.bzl | 19 - .../android/app/src/debug/AndroidManifest.xml | 7 +- .../java/com/example/ReactNativeFlipper.java | 11 +- .../android/app/src/main/AndroidManifest.xml | 7 +- .../main/java/com/example/MainActivity.java | 17 + .../java/com/example/MainApplication.java | 52 +- .../res/drawable/rn_edit_text_material.xml | 36 + .../app/src/main/res/values/styles.xml | 2 +- .../java/com/example/ReactNativeFlipper.java | 20 + Example/android/build.gradle | 36 +- Example/android/gradle.properties | 22 +- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 61574 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- Example/android/gradlew | 269 +++--- Example/android/gradlew.bat | 195 ++--- Example/android/settings.gradle | 1 + Example/app.json | 2 +- Example/babel.config.js | 14 - Example/index.js | 8 +- Example/ios/.xcode.env | 1 + Example/ios/Example-tvOS/Info.plist | 53 -- Example/ios/Example-tvOSTests/Info.plist | 24 - Example/ios/Example.xcodeproj/project.pbxproj | 474 +++------- .../xcschemes/Example-tvOS.xcscheme | 88 -- .../xcshareddata/xcschemes/Example.xcscheme | 2 +- Example/ios/Example/AppDelegate.h | 9 +- Example/ios/Example/AppDelegate.m | 58 -- Example/ios/Example/AppDelegate.mm | 49 ++ .../AppIcon.appiconset/Contents.json | 45 +- Example/ios/Example/Info.plist | 8 +- Example/ios/Example/LaunchScreen.storyboard | 13 +- Example/ios/Example/main.m | 3 +- Example/ios/ExampleTests/ExampleTests.m | 27 +- Example/ios/Podfile | 57 +- Example/ios/Podfile.lock | 820 +++++++++++++----- Example/ios/_xcode.env | 11 + Example/jest.config.js | 3 + Example/metro.config.js | 24 +- Example/package.json | 36 +- Example/react-native.config.js | 9 - Example/tsconfig.json | 3 + 52 files changed, 1449 insertions(+), 1457 deletions(-) delete mode 100644 Example/.gitattributes create mode 100644 Example/Gemfile create mode 100644 Example/__tests__/App.test.tsx create mode 100644 Example/_bundle/config delete mode 100644 Example/android/app/_BUCK delete mode 100644 Example/android/app/build_defs.bzl create mode 100644 Example/android/app/src/main/res/drawable/rn_edit_text_material.xml create mode 100644 Example/android/app/src/release/java/com/example/ReactNativeFlipper.java create mode 100644 Example/ios/.xcode.env delete mode 100644 Example/ios/Example-tvOS/Info.plist delete mode 100644 Example/ios/Example-tvOSTests/Info.plist delete mode 100644 Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example-tvOS.xcscheme delete mode 100644 Example/ios/Example/AppDelegate.m create mode 100644 Example/ios/Example/AppDelegate.mm create mode 100644 Example/ios/_xcode.env create mode 100644 Example/jest.config.js delete mode 100644 Example/react-native.config.js create mode 100644 Example/tsconfig.json diff --git a/Example/.eslintrc.js b/Example/.eslintrc.js index 40c6dcd0..187894b6 100644 --- a/Example/.eslintrc.js +++ b/Example/.eslintrc.js @@ -1,4 +1,4 @@ module.exports = { root: true, - extends: '@react-native-community', + extends: '@react-native', }; diff --git a/Example/.gitattributes b/Example/.gitattributes deleted file mode 100644 index d42ff183..00000000 --- a/Example/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.pbxproj -text diff --git a/Example/.gitignore b/Example/.gitignore index ad572e63..0cab2ac6 100644 --- a/Example/.gitignore +++ b/Example/.gitignore @@ -20,6 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate +ios/.xcode.env.local # Android/IntelliJ # @@ -28,6 +29,10 @@ build/ .gradle local.properties *.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore # node.js # @@ -35,12 +40,6 @@ node_modules/ npm-debug.log yarn-error.log -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore - # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the @@ -48,12 +47,20 @@ buck-out/ # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output # Bundle artifact *.jsbundle -# CocoaPods +# Ruby / CocoaPods /ios/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage diff --git a/Example/.prettierrc.js b/Example/.prettierrc.js index 5c4de1a4..2b540746 100644 --- a/Example/.prettierrc.js +++ b/Example/.prettierrc.js @@ -1,6 +1,7 @@ module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, bracketSpacing: false, - jsxBracketSameLine: true, singleQuote: true, trailingComma: 'all', }; diff --git a/Example/.watchmanconfig b/Example/.watchmanconfig index 9e26dfee..0967ef42 100644 --- a/Example/.watchmanconfig +++ b/Example/.watchmanconfig @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/Example/App.js b/Example/App.js index 97ed16cf..9f6ab817 100644 --- a/Example/App.js +++ b/Example/App.js @@ -1,5 +1,5 @@ import React, {useState, useCallback, useMemo} from 'react'; -import {UIManager, Alert} from 'react-native'; +import {Alert} from 'react-native'; import { authorize, refresh, @@ -64,27 +64,24 @@ const App = () => { }); }, []); - const handleAuthorize = useCallback( - async provider => { - try { - const config = configs[provider]; - const newAuthState = await authorize({ - ...config, - connectionTimeoutSeconds: 5, - iosPrefersEphemeralSession: true - }); + const handleAuthorize = useCallback(async provider => { + try { + const config = configs[provider]; + const newAuthState = await authorize({ + ...config, + connectionTimeoutSeconds: 5, + iosPrefersEphemeralSession: true, + }); - setAuthState({ - hasLoggedInOnce: true, - provider: provider, - ...newAuthState, - }); - } catch (error) { - Alert.alert('Failed to log in', error.message); - } - }, - [authState], - ); + setAuthState({ + hasLoggedInOnce: true, + provider: provider, + ...newAuthState, + }); + } catch (error) { + Alert.alert('Failed to log in', error.message); + } + }, []); const handleRefresh = useCallback(async () => { try { diff --git a/Example/Gemfile b/Example/Gemfile new file mode 100644 index 00000000..1fa2c2e1 --- /dev/null +++ b/Example/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby ">= 2.6.10" + +gem 'cocoapods', '~> 1.12' diff --git a/Example/__tests__/App.test.tsx b/Example/__tests__/App.test.tsx new file mode 100644 index 00000000..3413ac1c --- /dev/null +++ b/Example/__tests__/App.test.tsx @@ -0,0 +1,17 @@ +/** + * @format + */ + +import 'react-native'; +import React from 'react'; +import App from '../App'; + +// Note: import explicitly to use the types shiped with jest. +import {it} from '@jest/globals'; + +// Note: test renderer must be required after react-native. +import renderer from 'react-test-renderer'; + +it('renders correctly', () => { + renderer.create(); +}); diff --git a/Example/_bundle/config b/Example/_bundle/config new file mode 100644 index 00000000..848943bb --- /dev/null +++ b/Example/_bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/Example/android/app/_BUCK b/Example/android/app/_BUCK deleted file mode 100644 index a4cb8a5b..00000000 --- a/Example/android/app/_BUCK +++ /dev/null @@ -1,55 +0,0 @@ -# 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 -# - -load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") - -lib_deps = [] - -create_aar_targets(glob(["libs/*.aar"])) - -create_jar_targets(glob(["libs/*.jar"])) - -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 = "com.example", -) - -android_resource( - name = "res", - package = "com.example", - res = "src/main/res", -) - -android_binary( - name = "app", - keystore = "//android/keystores:debug", - manifest = "src/main/AndroidManifest.xml", - package_type = "debug", - deps = [ - ":app-code", - ], -) diff --git a/Example/android/app/build.gradle b/Example/android/app/build.gradle index 01dfa31f..9724deb8 100644 --- a/Example/android/app/build.gradle +++ b/Example/android/app/build.gradle @@ -1,133 +1,79 @@ 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. If none specified and - * // "index.android.js" exists, it will be used. Otherwise "index.js" is - * // default. Can be overridden with ENTRY_FILE environment variable. - * entryFile: "index.android.js", - * - * // https://reactnative.dev/docs/performance#enable-the-ram-format - * bundleCommand: "ram-bundle", - * - * // 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 = [ - enableHermes: false, // clean and rebuild if changing -] - -apply from: "../../node_modules/react-native/react.gradle" +apply plugin: "com.facebook.react" /** - * 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. + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. */ -def enableSeparateBuildPerCPUArchitecture = false +react { + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '..' + // root = file("../") + // The folder where the react-native NPM package is. Default is ../node_modules/react-native + // reactNativeDir = file("../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen + // codegenDir = file("../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js + // cliFile = file("../node_modules/react-native/cli.js") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + // + // The command to run when bundling. By default is 'bundle' + // bundleCommand = "ram-bundle" + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] +} /** - * Run Proguard to shrink the Java bytecode in release builds. + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ def enableProguardInReleaseBuilds = false /** - * The preferred build flavor of JavaScriptCore. + * The preferred build flavor of JavaScriptCore (JSC) * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that + * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' -/** - * Whether to enable the Hermes VM. - * - * This should be set on project.ext.react and mirrored here. If it is not set - * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode - * and the benefits of using Hermes will therefore be sharply reduced. - */ -def enableHermes = project.ext.react.get("enableHermes", false); - android { - compileSdkVersion rootProject.ext.compileSdkVersion + ndkVersion rootProject.ext.ndkVersion - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } + compileSdkVersion rootProject.ext.compileSdkVersion + namespace "com.example" defaultConfig { applicationId "com.example" minSdkVersion rootProject.ext.minSdkVersion @@ -138,14 +84,6 @@ android { appAuthRedirectScheme: 'io.identityserver.demo' ] } - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" - } - } signingConfigs { debug { storeFile file('debug.keystore') @@ -166,57 +104,23 @@ android { proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } - - // 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: - // https://developer.android.com/studio/build/configure-apk-splits.html - def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - versionCodes.get(abi) * 1048576 + defaultConfig.versionCode - } - - } - } } dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" // From node_modules - - implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" - - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { - exclude group:'com.facebook.fbjni' - } + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' exclude group:'com.squareup.okhttp3', module:'okhttp' } - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - } - - if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") + debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") } else { implementation jscFlavor } } -// 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' -} - apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/Example/android/app/build_defs.bzl b/Example/android/app/build_defs.bzl deleted file mode 100644 index fff270f8..00000000 --- a/Example/android/app/build_defs.bzl +++ /dev/null @@ -1,19 +0,0 @@ -"""Helper definitions to glob .aar and .jar targets""" - -def create_aar_targets(aarfiles): - for aarfile in aarfiles: - name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] - lib_deps.append(":" + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -def create_jar_targets(jarfiles): - for jarfile in jarfiles: - name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] - lib_deps.append(":" + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) diff --git a/Example/android/app/src/debug/AndroidManifest.xml b/Example/android/app/src/debug/AndroidManifest.xml index fa26aa56..4b185bc1 100644 --- a/Example/android/app/src/debug/AndroidManifest.xml +++ b/Example/android/app/src/debug/AndroidManifest.xml @@ -4,5 +4,10 @@ - + + + diff --git a/Example/android/app/src/debug/java/com/example/ReactNativeFlipper.java b/Example/android/app/src/debug/java/com/example/ReactNativeFlipper.java index a1b70b8a..e75580ef 100644 --- a/Example/android/app/src/debug/java/com/example/ReactNativeFlipper.java +++ b/Example/android/app/src/debug/java/com/example/ReactNativeFlipper.java @@ -1,5 +1,5 @@ /** - * Copyright (c) Facebook, Inc. and its affiliates. + * Copyright (c) Meta Platforms, Inc. and affiliates. * *

This source code is licensed under the MIT license found in the LICENSE file in the root * directory of this source tree. @@ -17,20 +17,23 @@ import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.react.ReactFlipperPlugin; import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.react.ReactInstanceEventListener; import com.facebook.react.ReactInstanceManager; import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.network.NetworkingModule; import okhttp3.OkHttpClient; +/** + * Class responsible of loading Flipper inside your React Native application. This is the debug + * flavor of it. Here you can add your own plugins and customize the Flipper setup. + */ public class ReactNativeFlipper { public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { if (FlipperUtils.shouldEnableFlipper(context)) { final FlipperClient client = AndroidFlipperClient.getInstance(context); client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new ReactFlipperPlugin()); client.addPlugin(new DatabasesFlipperPlugin(context)); client.addPlugin(new SharedPreferencesFlipperPlugin(context)); client.addPlugin(CrashReporterPlugin.getInstance()); @@ -51,7 +54,7 @@ public void apply(OkHttpClient.Builder builder) { ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); if (reactContext == null) { reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceManager.ReactInstanceEventListener() { + new ReactInstanceEventListener() { @Override public void onReactContextInitialized(ReactContext reactContext) { reactInstanceManager.removeReactInstanceEventListener(this); diff --git a/Example/android/app/src/main/AndroidManifest.xml b/Example/android/app/src/main/AndroidManifest.xml index 5f345bcd..4122f36a 100644 --- a/Example/android/app/src/main/AndroidManifest.xml +++ b/Example/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + @@ -13,7 +12,7 @@ @@ -22,7 +21,5 @@ - - diff --git a/Example/android/app/src/main/java/com/example/MainActivity.java b/Example/android/app/src/main/java/com/example/MainActivity.java index 557797a8..fd92b73f 100644 --- a/Example/android/app/src/main/java/com/example/MainActivity.java +++ b/Example/android/app/src/main/java/com/example/MainActivity.java @@ -1,6 +1,9 @@ package com.example; import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; +import com.facebook.react.defaults.DefaultReactActivityDelegate; public class MainActivity extends ReactActivity { @@ -12,4 +15,18 @@ public class MainActivity extends ReactActivity { protected String getMainComponentName() { return "Example"; } + + /** + * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link + * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React + * (aka React 18) with two boolean flags. + */ + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new DefaultReactActivityDelegate( + this, + getMainComponentName(), + // If you opted-in for the New Architecture, we enable the Fabric Renderer. + DefaultNewArchitectureEntryPoint.getFabricEnabled()); + } } diff --git a/Example/android/app/src/main/java/com/example/MainApplication.java b/Example/android/app/src/main/java/com/example/MainApplication.java index fd8ec883..dd666be2 100644 --- a/Example/android/app/src/main/java/com/example/MainApplication.java +++ b/Example/android/app/src/main/java/com/example/MainApplication.java @@ -1,20 +1,19 @@ package com.example; import android.app.Application; -import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; +import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; -import java.lang.reflect.InvocationTargetException; import java.util.List; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = - new ReactNativeHost(this) { + new DefaultReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; @@ -33,6 +32,16 @@ protected List getPackages() { protected String getJSMainModuleName() { return "index"; } + + @Override + protected boolean isNewArchEnabled() { + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } + + @Override + protected Boolean isHermesEnabled() { + return BuildConfig.IS_HERMES_ENABLED; + } }; @Override @@ -44,37 +53,10 @@ public ReactNativeHost getReactNativeHost() { public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); - initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - } - - /** - * Loads Flipper in React Native templates. Call this in the onCreate method with something like - * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - * - * @param context - * @param reactInstanceManager - */ - private static void initializeFlipper( - Context context, ReactInstanceManager reactInstanceManager) { - if (BuildConfig.DEBUG) { - try { - /* - We use reflection here to pick up the class that initializes Flipper, - since Flipper library is not available in release mode - */ - Class aClass = Class.forName("com.example.ReactNativeFlipper"); - aClass - .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) - .invoke(null, context, reactInstanceManager); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + DefaultNewArchitectureEntryPoint.load(); } + ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); } } diff --git a/Example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/Example/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 00000000..73b37e4d --- /dev/null +++ b/Example/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/Example/android/app/src/main/res/values/styles.xml b/Example/android/app/src/main/res/values/styles.xml index 62fe59fa..5e4edc6e 100644 --- a/Example/android/app/src/main/res/values/styles.xml +++ b/Example/android/app/src/main/res/values/styles.xml @@ -3,7 +3,7 @@ diff --git a/Example/android/app/src/release/java/com/example/ReactNativeFlipper.java b/Example/android/app/src/release/java/com/example/ReactNativeFlipper.java new file mode 100644 index 00000000..c63f23c1 --- /dev/null +++ b/Example/android/app/src/release/java/com/example/ReactNativeFlipper.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package com.example; + +import android.content.Context; +import com.facebook.react.ReactInstanceManager; + +/** + * Class responsible of loading Flipper inside your React Native application. This is the release + * flavor of it so it's empty as we don't want to load Flipper. + */ +public class ReactNativeFlipper { + public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { + // Do nothing as we don't want to initialize Flipper on Release. + } +} diff --git a/Example/android/build.gradle b/Example/android/build.gradle index 147e0aac..34ea7181 100644 --- a/Example/android/build.gradle +++ b/Example/android/build.gradle @@ -2,36 +2,20 @@ buildscript { ext { - buildToolsVersion = "29.0.2" - minSdkVersion = 16 - compileSdkVersion = 31 - targetSdkVersion = 31 + buildToolsVersion = "33.0.0" + minSdkVersion = 21 + compileSdkVersion = 33 + targetSdkVersion = 33 + + // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. + ndkVersion = "23.1.7779620" } repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath('com.android.tools.build:gradle:4.2.1') - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - mavenLocal() - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url("$rootDir/../node_modules/react-native/android") - } - maven { - // Android JSC is installed from npm - url("$rootDir/../node_modules/jsc-android/dist") - } - - google() - jcenter() - maven { url 'https://www.jitpack.io' } + classpath("com.android.tools.build:gradle") + classpath("com.facebook.react:react-native-gradle-plugin") } } diff --git a/Example/android/gradle.properties b/Example/android/gradle.properties index 04ca0ef2..a3b2fa12 100644 --- a/Example/android/gradle.properties +++ b/Example/android/gradle.properties @@ -9,8 +9,8 @@ # 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 +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit @@ -25,4 +25,20 @@ android.useAndroidX=true android.enableJetifier=true # Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.37.0 +FLIPPER_VERSION=0.182.0 + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true diff --git a/Example/android/gradle/wrapper/gradle-wrapper.jar b/Example/android/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 39233 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 XzlJ0PkH9a_Rv8E<4FsY;_p9`ODYye< delta 36344 zcmY(JV|OJA*KFf-Y^&3;ZFOwhPCB-+W81cE+qP|+JHF>W-`@YQMvYaoX2?GH=mdBj z4QS)8t@1AfPlKa3E(j2iHE0kJ!NfT)qQu{qWPoDTZDl-F^q*~OcDP9>B?-!;7QYrY z2&oFSrlM*a|9}4|lNFGwxl@nWtvjy{%)r0!-uIOC-wWjB^u5ocel4fJjH`X*v2Yh2 z1`-{PMgf8k+f(o6srH;@$WM3pPIDeVvSYhFo@P&9LAv~2Wrpsh__XYWA_S?J$-@&} zI02>yta>(o!OV+Js=}SHE&CY7;7t&^%>G2Il9-$2@sm4ZCm(eAGl65lN3n?D*Xm&M z3ybeOPM$Z+O2N;gJv#@}K zS?(f>886Wr8He4JSvFJ7v_=~E?7;)rTJCC3o58Vo_iQrAP5Gl2p{3)JF_ zYUH~-Eu4%)Tg@bFt%SEq@Ay((lp+S%Bj&fAdaM|KhN0xd3T} z6EVzbm;I(gl*H(@(f7exBQWF3x^|EZkpZd4NqIRsgO+q^KDo5=FEZS<{hNB+9Q=;m zl$csx2BW|D`^oA3CO-)^rrrROxgZ#xVWl!hf z6?kipMuU_n=I~vn`!+f)cZl?O?y1C&0v&Rab_db3dKjV=a<|G+9DylG1eUw^Hu#*5J zsYf3m&+cJj-l7uvXoP2_pMd#j;fs!F8l4hXR4x&(jA`7R(Xcrz?5m32H{zEf{@@p6 zvx-W#F0kyQY3;BC<|X_$_>m@7fxj~J-6ma;9luCvWb3(q1s-uYuLGntb`@QB(H4-- z24gw>bJ07|9mtyyTm#(^C5LU1`AiVXb!)j-#k~l$cvplhJ$o&ahycr!=Ei0fjb4z? zOpEDwb7=2$_{3)WLEk8d5;HJ9807OY1U-=<$R)}!*%j`1vVredVKYsaH2=B);{Hg; zf|V&FEM+8bEEvyNmQ%HyA-iMW6xl!moKJt0&tfGmxg*?g?+n!CaifLtQ&r;zymM1k zC7Ejzr3|SG#Em{Ka7{JvV^Izfx>}eCDbG=3vg!}9Qv`;X5-XxAqgm<avSABNhOO3B5(qJc~njIuIwtmW)XJ{bcLE7oq~j1q6^ z?|%^3zCi#<_cJMK3#b(zbu3P|T&Foa9FLc;dlY`7?zV=waG2J#X&N%d;{&?1rS%CT z6+1hPbs-;^sP?i|neKgYp2wj*p3`ymaGmggaVZrnc=bwO${jbvm*CI7SMUhV<+71L zU3woMLa4-w^H!=>y28O7GjTT2vQJ#~c$2!_ko>r0zt+tF#$roSJU!tD&);1&N7X5D zJDFv8P$;#vdgzoaQ|v(-qk9ZQMfpJ#N8R{54l`B z{M>j#I6`L0hX|I3K5|DNBZQdq6LkSfFG`PgLIBRwz@WK;2jv z0E6urmxuM2B33N}v}EOjv1fkdZ_0N$=h`US+1n5ZXPcxID%VlyksJDQ`zI4>Zq^Y> zNmi0EA@LW1`g>hZ&N!C{I25Uu%qbBm6L$Pet^^um;ClX(v{rOJ1N)Bp4Fn_0Q?Xks z6V~F*5YS^QOd4;=6Li&ZKPAL;5diXk@8+m5_TUo{1jL;%u^&JIsMdsWS6OxWj%8)J zwRmb`^fTxiF=o{G$A%q9XKf7u1{FlgDj{MJm0Lt%VZcf<+a+i)I^rt47+oT}HQZF+ z$m)>6j>vicOFLY$BaU2mflPOSRd?IjuA@kLf%5`zOPdit60un8chh;h7GL@fy5|Sc;pa_q-_h9J;aePF0uiR~ zZmd8b(fd9Aw*-Q|8ZV$Kq!w5Y2{78Lg!*2JO$M?EsO`;u0YScn=zfZEzbA$+eY=nV z)giSwK)mNqZGoNG-p9k+dn8NXD7EDW1=`Qm=;}QK)Hh&xsQ0ZN=I18(T^UK`5D$nX zkTVL%05S-CRZ`hl z8g~-AVGC_m+wX(5|>?H-fr*iVuWXHIQccusCq*5Xc&3x z;MBM9#N*o$$!`=gmHKd7$jfq#zu0z5utDv5T}g(f?_1AFmK21y<@s91vs51+b*0}X zT>&~daAP|THR{%$hm)oQ!De%YD5I+`V@9%bo{s7gc`cDf@iDrF!U*u15*43w zNIbW~DOsE!mB<%|h7wYI7;bu0Ic#wyheity&x;!CSe@5s@Gz8RhnmG_@LNh9chU;E znycDJslfksgQFnwnOPk zky|>st2i;8a?G})|8%%h^GYHz_rDEnCQ8suPmu|WIjN_fnK}(+qnOgrmB|$83JUkGaqhicjb>X2 zYPbrMgPUWJ>TN9P!Z?aJ8?m-PETfH7Oz`Mk6Yh>7adabQ36sS>J~<>$>fh4Mp2>cZ z@CCztUc%-(A9rXL#{CXu8)ew|q{on}rX#&B%75BYlLv#cFg>$zx+z->NE!{=+;r%b`nDgh0F%yc?~ZO_{Lg=u)YcBRI4~_M>Z+& z;|~1~U=dH4QX0rpk?^vcX2WRbY+thcqd08V;TLj-&4E z;igHF7m`BXkvW22E&s{qedve@xWY2br)YHGiv zpoHRVb9QD_GlKYGp^cZ#s_U#g7cVKckBg-cxKUlIdWO&jYPwkMhagK0 zgiITAr{9*xI{?Q$jZ~lPtWxZ76>ZGMudL)a8-zkDj*<9B?JdeQI;P)&*pKZWpi^@j2wa9h}&r&SZ&x8S_a_~UxdF~syDDw z>Y2Tvo<&KY?ftjJ9N8Nzf)*1c$8feD&`8wlJLe`#ruo=Wf}B+>pC!@#b@z{HUSdY! zNgZiSHSzH<;`@>PZ~h_^(=+d39_{JX12&GXq=0Km6V>Q?28&qvi^_u~?TJ?-Dd10w z?AvNn(*&6NKQkh@rI=#OBXT!w_3J}r&GpSJ)1P^k;tHYJqz0+# zgY&EiqC(hb?MYc#ma>1AzBtLU)eM7+=uchnc8j#$!qaptjCvuGAr&59muI|la@B4M zH<(LCG-`WtQ092-2lO_JEmcPWvYD{#HVZduXX{NZlG8~pgi3Go$&EGY+Hh6BfPmWk zcPLA9Lxgd7%bI+(b)|Bf^5u_PGuoSe$E&4|>Z_ito5&3Hltkc{JB6xAp>{dPO0$VV zs^C{W`SC@A2T`M=o8rw^mO$QdNP{*k|MEWcU7(gaf$uMYsceCP_Ru8bEd2?Z%BoQL zpM&|y*&0NYs%jh+3>;fQ?ADgb`LK?qLO1}ZBH9zwG`x`TW+in_s1rh~S>3m0l{X9?SgUEB z17>CjSnF)wy{GW=L`CFF%tZ+9SCvJXrvG%J>TDMlX6h$aZhI74#>rKg1>l`@%4`9* zLSL{Esamkn(NqOEcdIMxV!v|DFaJO&)zE3Mcyj?5)&cxU<#&lJRKUScuI2+C7E8p$V5 zSRuBl7zLL!%M+G;R=$A08(^Q5KP>bPj&m5P&G5qcPBdy?`f7)PB%=0!wV4OVZL$0N zITI|0p$11oZxJE>2er^?K#QAkjf-FB3{C+(A^xbGWBTgI0 z8`weV%8Fe0c$?Mb%JLv7YmRvbbkH*v$uA_7)<+m%6+phC08&p3z12bWTru`cv8;fa z7&2hn43=YEWyIYFn`LIy>gWgU;WD2Mvm?qzDi?H=k6CM{iM@hX1^-+h9<=4Rh> z4WM=UoT6qPx%H5k!79h^9dz=8*b7EgXLyUMMx=odES&w=<`(kz3P4i#HpK-w6Ha9| z$8zLLY3`aXXT}DWt5;ZpeKVCQMW5mtL)R&qil^9VK)oj~Bq~hC1YNBWyZU(QTS-DY znSFry>V97!zL%Em9wylShEDh0(Rsz~*q(`1i(XA#2VsX&SsIj&pKlncLBObwCl||U#WuFE>ComXKZ-Yp3nSLy-Wn-WW0|`YmLBN zL)(f5UZ7Nx6c@8BNq>YIhBw?BPKZKudk56ADnnND=P>0c$twd)OkW$tW7OMcL}(F!sf zsK3wy>7n)6(8C$DCfYlYp6b|gsLu5m{}{4D_{nv^?T%Mz!dLc_&(_`&vsU}v=}s`y z_tX3TYjfh~C2r$kLM1Fhx-mOPDGUe*0wxFu^?ytkGf@r{7vPRQit!Dd-Bh~#Cm-$l zAHVTm3dJBQs7Nzn7)krzf5HCP`yDq)K)baX*~KPs^2w167j1+uqVW(Y$u(g7?&j=% zy?ELYMjag&=qz1KhCH8q&2P` zQTW--9-X;!O9o=bRydJv1>fMgweYzLI`g2gZH%0`zM@B%pR|d3}YtVw;jDo`w zJ{?|D54eX$xE<&|Ty8tM$Kvl?j*1GnhJO(%-7|_|cuVw~ zVq7|i4(qmEjD{YE!~*XXA&C-miBcnT749XyD`0a+%+Y!Oa0$>5OMc_?GlVjf0sr(A z9ZUiv0%|MPVrpTgF4i^|Ff9ZcYD;}?<7aNNuf;puUR_;oQGbcZos~Y9wB_LcyQr_$ za5M<)TLP%Dq&GYlb?e8LBKRwezqGvUq|``wX(N`>Pd1qAt9#kSaM${2HIy3})8aI8 zz$FFay}$vrrhTOgIxrF+Y3I$6MwGy$|CF%Ju^OCz zITW5p6(b?ws40iC@a@gGUeuFDKac@w7+Ji_mH;N=9kvL_wKK+=f2aT0t2JggXO5gN z$N{jdh?1{a(V80n*doG9n4Wry5+Bey>dU4q_^yPN*d%^Nb^(#l9VJ^^bE9!YPZa&>+V>-Fq)kfjN}i=?(|BLC$GCr4**kJ5Doie-juJaBB%9?2*q=20JcY05A<= zYJ36kc@PBpkk~$d38>wnA;cb(P8Hk>FO`=<;fNpz49;SF3Jo&c(;zVMiVh;nS#bK7 zQUjYqcK2GroOq`$5{@|uPxoE1W)zN-7xH^)p7yYRY_|!mC5xjV8b=bmds7FAATIdQ zS{u}gt>ub()9h;m0YkYEO`p640LhyfjKgEOfp5)zeb!G5z~Y@7&K6)VBLr}OJ2{v= z1!ooiSG7L{u)piLYYh8cxbN_(p8uP82wgPEVt`@-Lopvl6qqj0!72E(E``-Uaps8(13P!O-Y%{ffU z1Ql3Ijy@%!ROn|_=qtvBZjZ`gD{7-Di#DUH7lv76lwp91E?F3HFI2H|@b6`$`CCP# zm4|B@v9l;aU@(cJIgvT!Od$zD)Ot}CPrcEGA2L7a6dv=)txUUb@isDeFpm$e@vRVH z2IG-0CQ(n(o^j8vcz}liZgk2s!$PT;%SyGX{GA6RHqgpb29v)Y+^v7xFmYj}F10Bc zn=nwiaX*+;-&?19Y-Szw3Go@My@HeHnkKpeL;Ca} zU8-n2YA}=J#r=#p)#jdr^(+pl2CCO{tn|oMR_OmL6sFa(svN*0?_Jv~`6$wdb}%1Zj@STEW2gh%B}+x7F2{D#*vF6Cs2heweC z5$3sDdRWad0jugmtnwwH?%gm%)@!ku#6PJJcf?`8T!jp<%#{^}J=}J54!zxWxVGVImF{mF~xZf_~Lb}C(}Iv4fMCs(#S8S;q&TCx+zFdH zJzoE(8Cw~9jFF&zog;dH@m|T_f7l$cMuz%x0#Vu__5aW#VVXz--yIrTN&4z@^bi;4 zpj3>h%nWf(jJZ|}Ai3)kcDj;dG^S6dwXoX|%(2~sAx zK-b2E;*35n9YDyTUV}YHlJwh?5^#Z$_rAT1iE&9)Q7tfYJEHIRjQkyB#1*eg;-5-L zIf)-3P?82sjiRMw&F$Zdg)>mNH@F3Z$A;#3s({2?yXD@Yf6#r2PTFlwWMXL_gBx7SwHn?q=aIE<=tmmL#ZW3*ud z#w(WDqh2Br9T5`E3E1bg3E%!3h6XND8d;Ang zevr}r74R+Fk>|EYT<2qX$`yP8^yecS4P6Sa%2obcQ_T);^!AQ(7+O$Fp+>-h=?KkS z3}wEEYmwUgGQ%s%n3-|jwhP)U18V7-(jTNmzic23mo@r<+J9SGNTPoZH9*6|8{G}# z=euE)HW73|K?v(#rk1r6!#;J;ppX!g4eD>=Ac&&uE5uCVMwZJfT7ORkn`-gy%Vf`7 z4bkE?YoYm(kH1#kcJpf0;(V7xFUq1mc4i#w+q6_nxwGFhZeKeeJ+B|KGhe6qp`cX* z0w;#xw6+ObU2%AsndlrbQ2@*$GW>Xyfv})LW|JZh$0+gE(7Qi3`cpIv`zOU)_@^g` zI51r@VjOxi)7g*qSbF`1ou*x=wMGf*lkNyNF#F9i?;Xf`vkg1H52M}DYP;I;Uk~VH zfND8C)%c2C-S|vhftmBjH;2b=6Yf|$bjESj5_^1GUFriLLhgWHM1WuWfyCYtVrcwR zctnO46r|oNBivgIi!cJ@`-iA-=ON^Ed53kLBGG4RL8o|- z6Y1n7rCIFTm>Nl$>+c2|^K^}?>?LV3)8S99t!Rs;GMLR%!k)Y~l`<3xn}+N65?gA< zA(%Mz%O*;VBtCk(831{y&wV2{KH-as=1b277=J1G^!$u_2_%#>2cuuy!k(7HQvS!q zO--3p;%x9Gn?;!&jiP%s8SB5`vK1^-crM9^EK8P~y&ylU)uOt3>V!F(Yn+V~8ehu- z@k1vN5hwMQS3GibpB||olUx@`??W=AELgiOQxdEGl?Z=Gq5?$A3rboz+ahk_n-MMM z4PkPfP33EKNdIxIzZH?nxT20z;lCNdV+j@xD@$#<*$Ut;C#+*n!YmW6SjT$zlv~uR zWU?9Irr?r{fDUL$@f9^=7|S|TnS{EEu>6X32Exj7U*p9i7LfI;2G{VUOtsf`gt;o` z^Ryt}eiDjDBLdtiBvVBPN=dU4?m#qoOg*IrEc_>(W}HbnobKu{O}8ICpW4c~Ei#vE zvL)lpK}^M2Z8kH`MYP7lt7?My9AlGP3NucNbgVPdqW(5+N8zeP%nnAwwismws5Mco`NNM-s23aHcLE?%(1o3~wK$A2stv&Yd(wj% z(O1c>H2Tfmd%$y5?-L?QJDQZc+C^^@<|AoWMNAb0yX$ao9(wB1$u zTbZc#d0=}YZ($%Z5-P4Kf&9LI#g0M#c2sKaBawYd^v9-OQUJ??a;bn^zWIB+zU6!B z?lS#{KtOZAZr%6pAGtJ(Mfhn$*8w7rt%lh6Jc>IWm|pce=ugG|L||foz#)T(4p>@H znHr7FP=)Mdxm;%J<+!C(p5 z@go_irfwrjm?uNnj_Q4NjK^6U+-SEz&L_ zV*n;g){5e@0xd~(Rqq*fg?*+Ih4ebQaH*{J zWQk2ir^Pi_sCAb_cBZQaB|BSJ$Cz<&-~R6)%2%r0SB<9zTB%9zuo^Gd#>g~tenO#l zmHokmQ4;ujbFFuH9h8gHLWWieF_Zj2v- zh8jo(q0mdVxfnQheJ*?S@pMaJ%U^Y2R({hg%|n+0#HoZH?s^JLaG{~TT+|HmHZ3c0pd24aVFR=54J(V z*Q1SMz-RiP8T5WhD544VI3sjJB;L-U%$%m*?w0|N8MD}#s^){E!yfVcjH41$kd6t# z;E5MWZtr0}2!R>#Py_q3IU_Zk3d_MZ6awMcg}wb31nMr&*P6t)Rs zz@Mc}&Hz2r!?`=})U=FDqo^n(DJalcW;Ua$z}_CL*@xnrCp{T|ERR0Wb46TW!+Oj% z$-@#)ey=6vZ~WP>@F!Z6eLylzcR2%(4ZT9zXiEg$pWw>UUjzPG1pE);e2_s%ry(Zg zR&>#oU%VYg_#84qVS#^$6P}oE-I!cBY8-w-6$6)pZrOrLo6qu* zK73g5NV`U1c1eOB4ufuaV74h>c1vNlV^MpENT&EC%Y1RKjbLmsF98mbYaxjB1iA;m zT_Yi05=v|h3&po$`3~?she_5bW(xIr{Xy^1Um^hqerS%{@CIMIC2I)mr9w{9-x@WGm?dD5U1*m8nzOJ?B9?X6eNlz zH?@H7=yO!R{QV~Sza|D`E!>Uwe+CZ@6bMKnaVZO6TYgaidnC8fg@%S;Peil_BE12j z=ujA~0GlLy9^%Q!3}%O5!VtY9rYZZK$YU^=95tF;&vT#1)O*%qeI(7_blq!aGw1Y` z-)`38=kx0xt`C+FN1~8)P$*=e03OMtqo|N})D#@2>P*9w(UO1HX?Rjhml58E;Nf-4 z5qAXuH;NH^KEUs`Rl?9BihPG#Jtj({bF*9}b;hF?t#*D-4fU9e6}08TffVFZq$Cf_ zq(=fnVYEi4uZYw}=rt21uR`J%;K%I2P=3f}tthl%e<>TgOF0Z*oqn&m+kMbgZ?|0A zs&?Fs_wZJ%%}rkkEU{4@sMF)zH56E0l*b3m!sIefxd?i)s**MC`wL@ylpAmgssd+v zNM5iLf)98?tjUgE=Gg^eGMU>hNPBhYS!gk9;8UxHMji3${(xTkfON!;;QUh!V1I|o z77z?Hw<+(@N@uoE!Ij;`Y_R_Dqmv8^&ulX_`n4*PHkR=p);2;_=3c=*sXZGT!nOrW z-o+UfU0+Y%6WIYxUEr&S=fqI+6yzmubVIkg+Kp}$|e!9MQ!L$s}t5t7%`+4P|)HGR@34Y zeUOGrEJQUxn_DAgwuTk9)*?3lgEInP0xe4qVqr_1CO;FG=cj+n67yiteuus0aK1)s zI)c%aaCOhVzRQU2Uwo1$W&%blI7UhxR$2rlE=KX=NX}pSiYVoiXv~60Tgimk6-5R zJlRu(4g&I*4g}=)|A6OrIX-|G{?ZRZ2y-9?qDbf$Dm*9*GPtS-DZ}^}?fo=fLRoc- zsDp*B!e)R=bp)KMqGTWChSqAuaz%5sHr91bvs$GZ>+Vk%2TM9B5-335cf9*{+v}#? z{4LjMw$tMz5*i70UgmpB{?tB(b+8DBUbcpnq+$L@l0``m+?RS!5f%{ZiqiX8mix&o zb}}NxGBbO~ML7*2Ab)iD*%V13nOJ*gB7ks8C8VEsr$U7Fe(p=J)V3yH*fu1ObjONA zm2B2A!1BqOBmU+=KKr1|HJh@^wJ?=zwgbXFHu~Y-GhoWx-6wzgAcVu)KN?x|laVWb zG|aE}hvoPWP>HzeP8mSR@OUq|z%Y9vrMG{Y*gg?knhdM{VZrY@yhUxHChZhar%i%y z>D{F!wnEjVx35K%dvVB(v$j`C)}@$H`*H5VFT1~p!7oh6@pf*q^4S!?L8Eh9syg5U z$pO?zO%<~^q1rksb=j)2ADcCQz_b|ftw@d!%VmF{BoZ%i|7%J$kXD>XwSr3DryC!o!AG ze%Wq@l(@`TOxb#OWS&0llK7oOy99#w+oxH=dS7t7&eX4@K-hDyB1m8%1nY$T+& z_fn37L{gi&fKEEUn}yhPb$x%c*8E z)ZSDfmG6iw)BFX=6wlhh*%<2{7Gn}{%Y}`WHa)~ke{So@>YC1 zey5{p#)LD61<3DDqIYCk45@AZVrwzau#=^Q(#YNtKmNw$2_S=6kW3GU`8YNGV^~gD z%K;FgYYE&&AO@d6s(&-)*U`dgs5)rXWQY|t7)9wWEbb=5VCv_G!+OE=ngLe@bO>rjt@rtb^zYeB2u_=GJZ2PCtlL&}5Tv_Ww3g!;%4!6w1r$a# zaK>OlWt(IV^n5S6TN1+)HghQ`qaY)lu@3O|L~?gwj*v%MlZj#DS3m`&Q;ip|z)OE8 z4)SsgCE5s)L9%$rUhovc*0Ew>zRzm`-WgHe2s`vJ&)6kd+BX1V2+@R7J-Y(kz}5OQu3fhoiF$$jsXy1 zBEboQ)dx)sIcUzOoMAk>pib)mwH!WJ&H!QP6hyjAutI?T@KXqYV%BQ5O*KTjg=PcUkr zHr81vsDp)RcwkOb6+uJc%U;z@(E!{)=^|nsU#a9wUG{b&NcJf06Ts?2Hm!_mZLm0E zEjEFTW}VRHM6+wmnC_2bVA8y^O?D)f$mh;19l0+R&kX;}dM7Wl>t^6AOkKqrwMguH z@0AqUZ;|Oz6k|`Lh{45XE1D4`AF#cSb;YFFD|MZ~)Fv43H|Lw*-!}l03IQ74RpacH zHfpo!V2PZjcb_u<+f%qVX*7!}{RPIO<1`=KpV%@J)0f3(Fw5HMeArgbTDaCrd#fQZZ}Xr3 z2<)#V(B?M+r#IC2+5noXg@VeFO%gE3)(Gj-iw}h>q5dc^8PgfzVn}ihv>&Aq+ELh; z8P|em^YmWpXS9+9PFjwHPzX|AXz;`NEyOE~^U+gzhpU0`|rvMMIYYKm7*^6}|gDs}H~d4>V=r;s3jfD>g# zlven>{{EVP&iE4CT)7>HypI!U2<|AG-3)%RzL2~BfsslXWqLsqvV5&ulTuHvgaHsa&4Tym#P{gd;P_drCZ zeDW+$BZ-EdGK#tnMWdmx`sYe1*ru+yv;l#AB&s2=C`*9qvt{D;j%CcL9@s=F#hd&y z1yBUmQvXE%)I10PbJMJvD+QBxk6%^3v3g^{mg>J10q1<*trJ9HSU-bAB~zQV63TBR zk}f|OM6u_W{;J&-t?}tN98OYEKlQ)^v}FDgd6n;^TD3QTHxKOPAca>6mAK|>o|2rb zG(@3Pmd6#*E>*4ejMPV>#Z#&`nE4;FMsNJ3PB}r)9R^I#H?qPwQ`{RBla~Zrn?@9? z=H5SwfG6orix=YcB-m1|-Fi;ek7_(aNB`_^TP`k$RmE z?_!>$EPf;H+`ksjp7bi8dD8l&)*lnWns${0&5kn|h3eA2Np!BCT@7;qBp3!mtr?nH zi2D$~y6Ii7a6w@a{Q^>;<~{#$4(^W_T%gdq1Gf6~0{5&A6Uvk0=;s&m(v_?X`$Do> ziE&_V0?HkSS(@B@n`*eA)9R1;TKU=`lVjHI4?4@oty>uByuzoCD&3p~Jpk`dkc#*F z&5nOw)9aJ)r6~1KEST>7FKn7-z%Jp+i5jE7=q@RJJJ@rHo8Mq!j0nEmvUmu&wFmGB z0axbrO@QnHA4ys>uy?IVDHUC|60@`e|9+)SRf}*+Y7pb#ka&j~EJnWh_!V=rhs}DV zxB1J1zciJpQm+;4(WFejjk|IJZ#O*1o$}5F1l*bWWXajW<5}81#J>hdHO&q9#jXG)M$FLYgC%nCPykuGJ4u z*P=&)&?}BAb7~KL@9}oMeuQzIw)C#yt-WUT)mm-I3!g<(JvrHifIYg|^;fXO%5%36!FJ_<#yCU| zWrgGp)KB1dMQi%_YR`-W1qtK{puvu?JD%=k+dU6j?2CR%ipAyHg~pw;%kyH8sXn0; zLp)gy?F^s#_a7w4GhXi8w4UHr+IRNjF(1err=y2~i`GR^H2{-tfG_qxhT_|TFT$M} zXlRai$>8iH-8Iqgjx12&^Kv<**ZIDI0-qvu%v%yW!*PDxrqzvo=BC0iK&0y*H7E;C z0%#oadCrN^MUxJEmSA@Ij({4{h8z*{mK>1^+DpkJM?+_5-C&e>Gl4fr!QQg6K&V;~ zmZFY3P~4!fCWeTg35DTiKG0tC!crFHlPLj7qXh8p$+kM5s_fy{M;jV z2cZg@1^l)j1;cjOvTaotjMW{V-R0n^(Nt_YoTJ!HY2O4ruB!TyWMQSQ)3$KvoNy1b zd=1Yf6s|Jro%38;`;E@)^Y$$kG;fU#C6}w)>*g>4YYn_sOzmY6z##n~<8tyDvJ2X- z`u)T=Lm`D=>?SY#2G8Q}UmWJ{z?ez|N@mt_*UVTqHvu9AZc6>BgNCVw zsE`7ipfy?6v<%Q_WF2?%=u$e?-~mRJpqNt3w86YYN;#{sBH1L6Wi{@|jWPn`Q&7KD zZJp0FxH&pTCHCq(0GBh(wiv%6x6KONKaQxNxxR|cb3|-&M$T!!Prl||pXF|brwXFtLqQ2Bt(4#vxpP{vv78$A)i`zVHpS_yRjPwcH52BI>ZuJ=@Ab%-X z4m3#0vh#wZtCn6&6a23FO_8Z?Q$bCnTutIDph8Y-U2-|0PpyBY(oonAI$KHo#4F$d zOlk&~#|W$^1F@o9v;z&Twt7d_*t+HNK5VErSMECRzY6}F5cbbAjcyYPes7MG7IZef zfyk<$x$|5}_Z&Hvp$kfN<9lTpJIpWwE0_&*)i%rrL7yP-Hzgq$JW&aAni)(%KIVNL z048n|EG!#(Ne6^P7h+ZiY*)wswDQct?**p=6RHd5q%%1O`WY@oTpMIn3!i>=k)axS zY7`i`R-HbwPzxeQM7>$1#V&jU$BOo*%YEzDCJ`8`2dp<@~F=mF;SQJ~$uNh^z0?=UT z{$j>v!-%*hXv?UHc0zOO(_w25WZXw)@ZBv4Ai zNTdQN5)cd*q?9=NFPo=LJTrId(bH0226?MG_{;nLI{L^3qQAq%exb`W9O;XXqy30l z)5kXzMrIsWA+1aBE6=3UInD�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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | 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" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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 @@ -105,79 +140,105 @@ 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 +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg 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; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# 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" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/Example/android/gradlew.bat b/Example/android/gradlew.bat index 62bd9b9c..6689b85b 100644 --- a/Example/android/gradlew.bat +++ b/Example/android/gradlew.bat @@ -1,103 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@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 Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@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="-Xmx64m" "-Xms64m" - -@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 +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@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=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@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="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +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 execute + +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 + +: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 %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 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! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Example/android/settings.gradle b/Example/android/settings.gradle index 47725a0f..42c3b002 100644 --- a/Example/android/settings.gradle +++ b/Example/android/settings.gradle @@ -1,3 +1,4 @@ rootProject.name = 'Example' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/Example/app.json b/Example/app.json index e933d069..b5980516 100644 --- a/Example/app.json +++ b/Example/app.json @@ -1,4 +1,4 @@ { "name": "Example", "displayName": "Example" -} \ No newline at end of file +} diff --git a/Example/babel.config.js b/Example/babel.config.js index 065ffa1e..f842b77f 100644 --- a/Example/babel.config.js +++ b/Example/babel.config.js @@ -1,17 +1,3 @@ -const path = require('path'); -const pak = require('../package.json'); - module.exports = { presets: ['module:metro-react-native-babel-preset'], - plugins: [ - [ - 'module-resolver', - { - extensions: ['.tsx', '.ts', '.js', '.json'], - alias: { - [pak.name]: path.join(__dirname, '..', pak.main), - }, - }, - ], - ], }; diff --git a/Example/index.js b/Example/index.js index ab0ecbf4..a850d031 100644 --- a/Example/index.js +++ b/Example/index.js @@ -1,5 +1,9 @@ -import { AppRegistry } from 'react-native'; +/** + * @format + */ + +import {AppRegistry} from 'react-native'; import App from './App'; -import { name as appName } from './app.json'; +import {name as appName} from './app.json'; AppRegistry.registerComponent(appName, () => App); diff --git a/Example/ios/.xcode.env b/Example/ios/.xcode.env new file mode 100644 index 00000000..772b339b --- /dev/null +++ b/Example/ios/.xcode.env @@ -0,0 +1 @@ +export NODE_BINARY=$(command -v node) diff --git a/Example/ios/Example-tvOS/Info.plist b/Example/ios/Example-tvOS/Info.plist deleted file mode 100644 index ecbd496b..00000000 --- a/Example/ios/Example-tvOS/Info.plist +++ /dev/null @@ -1,53 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - NSLocationWhenInUseUsageDescription - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/Example/ios/Example-tvOSTests/Info.plist b/Example/ios/Example-tvOSTests/Info.plist deleted file mode 100644 index ba72822e..00000000 --- a/Example/ios/Example-tvOSTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Example/ios/Example.xcodeproj/project.pbxproj b/Example/ios/Example.xcodeproj/project.pbxproj index d366dbcf..29a6bfff 100644 --- a/Example/ios/Example.xcodeproj/project.pbxproj +++ b/Example/ios/Example.xcodeproj/project.pbxproj @@ -3,21 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ExampleTests.m */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; + 0C80B921A6F3F58F76C31292 /* libPods-Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-Example.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; - 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 2DCD954D1E0B4F2C00145EB5 /* ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ExampleTests.m */; }; - 7590CCEACB1158EF3C9D15F2 /* libPods-Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33523B654DF08F2521EF9B9E /* libPods-Example.a */; }; + 7699B88040F8A987B510C191 /* libPods-Example-ExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-Example-ExampleTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - B604AECF732D6FC8F11D9376 /* libPods-Example-ExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC447B6598B266EC56AADD16 /* libPods-Example-ExampleTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -28,37 +24,26 @@ remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = Example; }; - 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; - remoteInfo = "Example-tvOS"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 00E356EE1AD99517003FC87E /* ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* ExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExampleTests.m; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Example/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Example/AppDelegate.m; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Example/AppDelegate.mm; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Example/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Example/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Example/main.m; sourceTree = ""; }; - 2D02E47B1E0B4A5D006451C7 /* Example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D02E4901E0B4A5D006451C7 /* Example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Example-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 33523B654DF08F2521EF9B9E /* libPods-Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3AE15023C30305EE0BE4D3DC /* Pods-Example-ExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.debug.xcconfig"; sourceTree = ""; }; - 67145E0B9C52338B7AFEB08B /* Pods-Example-ExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.release.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.release.xcconfig"; sourceTree = ""; }; + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-Example-ExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example-ExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4392A12AC88292D35C810B /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; }; + 5B7EB9410499542E8C5724F5 /* Pods-Example-ExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.debug.xcconfig"; sourceTree = ""; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Example/LaunchScreen.storyboard; sourceTree = ""; }; - 92AB6697592B83C7171DC404 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; }; - C3452A571B433030B45BEDCF /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; }; - DC447B6598B266EC56AADD16 /* libPods-Example-ExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Example-ExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 89C6BE57DB24E9ADA2F236DE /* Pods-Example-ExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-ExampleTests.release.xcconfig"; path = "Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,7 +51,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B604AECF732D6FC8F11D9376 /* libPods-Example-ExampleTests.a in Frameworks */, + 7699B88040F8A987B510C191 /* libPods-Example-ExampleTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -74,21 +59,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7590CCEACB1158EF3C9D15F2 /* libPods-Example.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( + 0C80B921A6F3F58F76C31292 /* libPods-Example.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -115,9 +86,8 @@ 13B07FAE1A68108700A75B9A /* Example */ = { isa = PBXGroup; children = ( - 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, @@ -130,25 +100,12 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - 33523B654DF08F2521EF9B9E /* libPods-Example.a */, - DC447B6598B266EC56AADD16 /* libPods-Example-ExampleTests.a */, + 5DCACB8F33CDC322A6C60F78 /* libPods-Example.a */, + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-Example-ExampleTests.a */, ); name = Frameworks; sourceTree = ""; }; - 5FD8A79AA20FB24D60EDB7A5 /* Pods */ = { - isa = PBXGroup; - children = ( - 92AB6697592B83C7171DC404 /* Pods-Example.debug.xcconfig */, - C3452A571B433030B45BEDCF /* Pods-Example.release.xcconfig */, - 3AE15023C30305EE0BE4D3DC /* Pods-Example-ExampleTests.debug.xcconfig */, - 67145E0B9C52338B7AFEB08B /* Pods-Example-ExampleTests.release.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -164,7 +121,7 @@ 00E356EF1AD99517003FC87E /* ExampleTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - 5FD8A79AA20FB24D60EDB7A5 /* Pods */, + BBD78D7AC51CEA395F1C20DB /* Pods */, ); indentWidth = 2; sourceTree = ""; @@ -176,12 +133,21 @@ children = ( 13B07F961A680F5B00A75B9A /* Example.app */, 00E356EE1AD99517003FC87E /* ExampleTests.xctest */, - 2D02E47B1E0B4A5D006451C7 /* Example-tvOS.app */, - 2D02E4901E0B4A5D006451C7 /* Example-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; + BBD78D7AC51CEA395F1C20DB /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4392A12AC88292D35C810B /* Pods-Example.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-Example.release.xcconfig */, + 5B7EB9410499542E8C5724F5 /* Pods-Example-ExampleTests.debug.xcconfig */, + 89C6BE57DB24E9ADA2F236DE /* Pods-Example-ExampleTests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -189,11 +155,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ExampleTests" */; buildPhases = ( - 80716A54B1DF15863D396DF7 /* [CP] Check Pods Manifest.lock */, + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - 9EA1C523AA39A6548197E4C2 /* [CP] Copy Pods Resources */, + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -209,13 +176,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Example" */; buildPhases = ( - ABBD723A84A7842D20DB79DE /* [CP] Check Pods Manifest.lock */, + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 381B77E6C61A6FCDCF83295A /* [CP] Copy Pods Resources */, + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -226,50 +194,13 @@ productReference = 13B07F961A680F5B00A75B9A /* Example.app */; productType = "com.apple.product-type.application"; }; - 2D02E47A1E0B4A5D006451C7 /* Example-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Example-tvOS" */; - buildPhases = ( - FD10A7F122414F3F0027D42C /* Start Packager */, - 2D02E4771E0B4A5D006451C7 /* Sources */, - 2D02E4781E0B4A5D006451C7 /* Frameworks */, - 2D02E4791E0B4A5D006451C7 /* Resources */, - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Example-tvOS"; - productName = "Example-tvOS"; - productReference = 2D02E47B1E0B4A5D006451C7 /* Example-tvOS.app */; - productType = "com.apple.product-type.application"; - }; - 2D02E48F1E0B4A5D006451C7 /* Example-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Example-tvOSTests" */; - buildPhases = ( - 2D02E48C1E0B4A5D006451C7 /* Sources */, - 2D02E48D1E0B4A5D006451C7 /* Frameworks */, - 2D02E48E1E0B4A5D006451C7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, - ); - name = "Example-tvOSTests"; - productName = "Example-tvOSTests"; - productReference = 2D02E4901E0B4A5D006451C7 /* Example-tvOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1130; + LastUpgradeCheck = 1210; TargetAttributes = { 00E356ED1AD99517003FC87E = { CreatedOnToolsVersion = 6.2; @@ -278,19 +209,10 @@ 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1120; }; - 2D02E47A1E0B4A5D006451C7 = { - CreatedOnToolsVersion = 8.2.1; - ProvisioningStyle = Automatic; - }; - 2D02E48F1E0B4A5D006451C7 = { - CreatedOnToolsVersion = 8.2.1; - ProvisioningStyle = Automatic; - TestTargetID = 2D02E47A1E0B4A5D006451C7; - }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Example" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -304,8 +226,6 @@ targets = ( 13B07F861A680F5B00A75B9A /* Example */, 00E356ED1AD99517003FC87E /* ExampleTests */, - 2D02E47A1E0B4A5D006451C7 /* Example-tvOS */, - 2D02E48F1E0B4A5D006451C7 /* Example-tvOSTests */, ); }; /* End PBXProject section */ @@ -327,21 +247,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2D02E4791E0B4A5D006451C7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48E1E0B4A5D006451C7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -351,47 +256,56 @@ files = ( ); inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", ); name = "Bundle React Native code and images"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; - 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Bundle React Native Code And Images"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 381B77E6C61A6FCDCF83295A /* [CP] Copy Pods Resources */ = { + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "$(DERIVED_FILE_DIR)/Pods-Example-ExampleTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 80716A54B1DF15863D396DF7 /* [CP] Check Pods Manifest.lock */ = { + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -406,73 +320,65 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-ExampleTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 9EA1C523AA39A6548197E4C2 /* [CP] Copy Pods Resources */ = { + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - ABBD723A84A7842D20DB79DE /* [CP] Check Pods Manifest.lock */ = { + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-resources.sh\"\n"; showEnvVarsInLog = 0; }; - FD10A7F022414F080027D42C /* Start Packager */ = { + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); - name = "Start Packager"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-ExampleTests/Pods-Example-ExampleTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - FD10A7F122414F3F0027D42C /* Start Packager */ = { + FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -506,28 +412,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2D02E4771E0B4A5D006451C7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D02E48C1E0B4A5D006451C7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2DCD954D1E0B4F2C00145EB5 /* ExampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -536,17 +425,12 @@ target = 13B07F861A680F5B00A75B9A /* Example */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; - 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2D02E47A1E0B4A5D006451C7 /* Example-tvOS */; - targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3AE15023C30305EE0BE4D3DC /* Pods-Example-ExampleTests.debug.xcconfig */; + baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-Example-ExampleTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -554,8 +438,12 @@ "$(inherited)", ); INFOPLIST_FILE = ExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -569,13 +457,17 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 67145E0B9C52338B7AFEB08B /* Pods-Example-ExampleTests.release.xcconfig */; + baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-Example-ExampleTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = ExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -589,14 +481,18 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92AB6697592B83C7171DC404 /* Pods-Example.debug.xcconfig */; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; INFOPLIST_FILE = Example/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -612,13 +508,17 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3452A571B433030B45BEDCF /* Pods-Example.release.xcconfig */; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = Example/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -631,118 +531,12 @@ }; name = Release; }; - 2D02E4971E0B4A5E006451C7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Example-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.Example-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Debug; - }; - 2D02E4981E0B4A5E006451C7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Example-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.Example-tvOS"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Release; - }; - 2D02E4991E0B4A5E006451C7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_TESTABILITY = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Example-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.Example-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example-tvOS.app/Example-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.1; - }; - name = Debug; - }; - 2D02E49A1E0B4A5E006451C7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Example-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.Example-tvOSTests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example-tvOS.app/Example-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.1; - }; - name = Release; - }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -760,6 +554,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -769,6 +564,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -784,15 +580,26 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "$(inherited)"; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -802,7 +609,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -820,6 +627,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -829,6 +637,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -837,14 +646,25 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + IPHONEOS_DEPLOYMENT_TARGET = 12.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = "$(inherited)"; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -871,24 +691,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Example-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2D02E4971E0B4A5E006451C7 /* Debug */, - 2D02E4981E0B4A5E006451C7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Example-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2D02E4991E0B4A5E006451C7 /* Debug */, - 2D02E49A1E0B4A5E006451C7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Example" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example-tvOS.xcscheme b/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example-tvOS.xcscheme deleted file mode 100644 index 9e5f979c..00000000 --- a/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example-tvOS.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme index b28b8429..2dbf0217 100644 --- a/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme +++ b/Example/ios/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme @@ -1,6 +1,6 @@ +#import #import +#import #import "RNAppAuthAuthorizationFlowManager.h" -@interface AppDelegate : UIResponder +@interface AppDelegate : RCTAppDelegate -@property (nonatomic, strong) UIWindow *window; - -@property(nonatomic, weak)idauthorizationFlowManagerDelegate; +@property(nonatomic, weak) id authorizationFlowManagerDelegate; @end diff --git a/Example/ios/Example/AppDelegate.m b/Example/ios/Example/AppDelegate.m deleted file mode 100644 index dbc6f3ac..00000000 --- a/Example/ios/Example/AppDelegate.m +++ /dev/null @@ -1,58 +0,0 @@ -#import "AppDelegate.h" - -#import -#import -#import - -#ifdef FB_SONARKIT_ENABLED -#import -#import -#import -#import -#import -#import - -static void InitializeFlipper(UIApplication *application) { - FlipperClient *client = [FlipperClient sharedClient]; - SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; - [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; - [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; - [client addPlugin:[FlipperKitReactPlugin new]]; - [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; - [client start]; -} -#endif - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ -#ifdef FB_SONARKIT_ENABLED - InitializeFlipper(application); -#endif - - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge - moduleName:@"Example" - initialProperties:nil]; - - 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; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ -#if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; -#else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif -} - -@end diff --git a/Example/ios/Example/AppDelegate.mm b/Example/ios/Example/AppDelegate.mm new file mode 100644 index 00000000..057ed531 --- /dev/null +++ b/Example/ios/Example/AppDelegate.mm @@ -0,0 +1,49 @@ +#import "AppDelegate.h" + +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.moduleName = @"Example"; + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (BOOL) application: (UIApplication *)application + openURL: (NSURL *)url + options: (NSDictionary *) options +{ + // return [self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:url]; + return [RCTLinkingManager application:application openURL:url options:options]; +} + +- (BOOL) application: (UIApplication *) application +continueUserActivity: (nonnull NSUserActivity *)userActivity + restorationHandler: (nonnull void (^)(NSArray> * _Nullable))restorationHandler +{ + if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { + if (self.authorizationFlowManagerDelegate) { + BOOL resumableAuth = [self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:userActivity.webpageURL]; + if (resumableAuth) { + return YES; + } + } + } + return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +@end diff --git a/Example/ios/Example/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/ios/Example/Images.xcassets/AppIcon.appiconset/Contents.json index 118c98f7..81213230 100644 --- a/Example/ios/Example/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/ios/Example/Images.xcassets/AppIcon.appiconset/Contents.json @@ -2,37 +2,52 @@ "images" : [ { "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" + "scale" : "2x", + "size" : "20x20" }, { "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" + "scale" : "3x", + "size" : "20x20" }, { "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" + "scale" : "2x", + "size" : "29x29" }, { "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" + "scale" : "3x", + "size" : "29x29" }, { "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" + "scale" : "2x", + "size" : "40x40" }, { "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Example/ios/Example/Info.plist b/Example/ios/Example/Info.plist index 02362498..097f94ab 100644 --- a/Example/ios/Example/Info.plist +++ b/Example/ios/Example/Info.plist @@ -17,17 +17,15 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS NSAppTransportSecurity - NSAllowsArbitraryLoads - NSExceptionDomains localhost @@ -53,7 +51,7 @@ UIViewControllerBasedStatusBarAppearance - CFBundleURLTypes + CFBundleURLTypes CFBundleURLName diff --git a/Example/ios/Example/LaunchScreen.storyboard b/Example/ios/Example/LaunchScreen.storyboard index 17673ff2..11033114 100644 --- a/Example/ios/Example/LaunchScreen.storyboard +++ b/Example/ios/Example/LaunchScreen.storyboard @@ -16,32 +16,21 @@ - - + - - - diff --git a/Example/ios/Example/main.m b/Example/ios/Example/main.m index b1df44b9..d645c724 100644 --- a/Example/ios/Example/main.m +++ b/Example/ios/Example/main.m @@ -2,7 +2,8 @@ #import "AppDelegate.h" -int main(int argc, char * argv[]) { +int main(int argc, char *argv[]) +{ @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } diff --git a/Example/ios/ExampleTests/ExampleTests.m b/Example/ios/ExampleTests/ExampleTests.m index 75eb3117..8750e0c6 100644 --- a/Example/ios/ExampleTests/ExampleTests.m +++ b/Example/ios/ExampleTests/ExampleTests.m @@ -13,7 +13,7 @@ @interface ExampleTests : XCTestCase @implementation ExampleTests -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test { if (test(view)) { return YES; @@ -34,23 +34,25 @@ - (void)testRendersWelcomeScreen __block NSString *redboxError = nil; #ifdef DEBUG - RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); + RCTSetLogFunction( + ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); #endif while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; + foundElement = [self findSubviewInView:vc.view + matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; } #ifdef DEBUG @@ -61,5 +63,4 @@ - (void)testRendersWelcomeScreen XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); } - @end diff --git a/Example/ios/Podfile b/Example/ios/Podfile index ebedc70b..37ee3423 100644 --- a/Example/ios/Podfile +++ b/Example/ios/Podfile @@ -1,15 +1,62 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip -platform :ios, '10.0' +platform :ios, min_ios_version_supported +prepare_react_native_project! + +# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set. +# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded +# +# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js` +# ```js +# module.exports = { +# dependencies: { +# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}), +# ``` +flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled + +linkage = ENV['USE_FRAMEWORKS'] +if linkage != nil + Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green + use_frameworks! :linkage => linkage.to_sym +end target 'Example' do config = use_native_modules! - use_react_native!(:path => config["reactNativePath"]) + # Flags change depending on the env values. + flags = get_default_flags() + + use_react_native!( + :path => config[:reactNativePath], + # Hermes is now enabled by default. Disable by setting this flag to false. + :hermes_enabled => flags[:hermes_enabled], + :fabric_enabled => flags[:fabric_enabled], + # Enables Flipper. + # + # Note that if you have use_frameworks! enabled, Flipper will not work and + # you should disable the next line. + :flipper_configuration => flipper_config, + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) target 'ExampleTests' do inherit! :complete # Pods for testing end -end \ No newline at end of file + + post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false + ) + __apply_Xcode_12_5_M1_post_install_workaround(installer) + end +end diff --git a/Example/ios/Podfile.lock b/Example/ios/Podfile.lock index f4bb2dea..96e9b50d 100644 --- a/Example/ios/Podfile.lock +++ b/Example/ios/Podfile.lock @@ -1,282 +1,556 @@ PODS: - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): - AppAuth/Core - - boost-for-react-native (1.63.0) + - boost (1.76.0) + - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.63.2) - - FBReactNativeSpec (0.63.2): - - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.2) - - RCTTypeSafety (= 0.63.2) - - React-Core (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - Folly (2020.01.13.00): - - boost-for-react-native + - FBLazyVector (0.72.4) + - FBReactNativeSpec (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.72.4) + - RCTTypeSafety (= 0.72.4) + - React-Core (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - Flipper (0.182.0): + - Flipper-Folly (~> 2.6) + - Flipper-Boost-iOSX (1.76.0.1.11) + - Flipper-DoubleConversion (3.2.0.1) + - Flipper-Fmt (7.1.7) + - Flipper-Folly (2.6.10): + - Flipper-Boost-iOSX + - Flipper-DoubleConversion + - Flipper-Fmt (= 7.1.7) + - Flipper-Glog + - libevent (~> 2.1.12) + - OpenSSL-Universal (= 1.1.1100) + - Flipper-Glog (0.5.0.5) + - Flipper-PeerTalk (0.0.4) + - FlipperKit (0.182.0): + - FlipperKit/Core (= 0.182.0) + - FlipperKit/Core (0.182.0): + - Flipper (~> 0.182.0) + - FlipperKit/CppBridge + - FlipperKit/FBCxxFollyDynamicConvert + - FlipperKit/FBDefines + - FlipperKit/FKPortForwarding + - SocketRocket (~> 0.6.0) + - FlipperKit/CppBridge (0.182.0): + - Flipper (~> 0.182.0) + - FlipperKit/FBCxxFollyDynamicConvert (0.182.0): + - Flipper-Folly (~> 2.6) + - FlipperKit/FBDefines (0.182.0) + - FlipperKit/FKPortForwarding (0.182.0): + - CocoaAsyncSocket (~> 7.6) + - Flipper-PeerTalk (~> 0.0.4) + - FlipperKit/FlipperKitHighlightOverlay (0.182.0) + - FlipperKit/FlipperKitLayoutHelpers (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutTextSearchable + - FlipperKit/FlipperKitLayoutIOSDescriptors (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutHelpers + - YogaKit (~> 1.18) + - FlipperKit/FlipperKitLayoutPlugin (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitHighlightOverlay + - FlipperKit/FlipperKitLayoutHelpers + - FlipperKit/FlipperKitLayoutIOSDescriptors + - FlipperKit/FlipperKitLayoutTextSearchable + - YogaKit (~> 1.18) + - FlipperKit/FlipperKitLayoutTextSearchable (0.182.0) + - FlipperKit/FlipperKitNetworkPlugin (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitReactPlugin (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitUserDefaultsPlugin (0.182.0): + - FlipperKit/Core + - FlipperKit/SKIOSNetworkPlugin (0.182.0): + - FlipperKit/Core + - FlipperKit/FlipperKitNetworkPlugin + - fmt (6.2.1) + - glog (0.3.5) + - hermes-engine (0.72.4): + - hermes-engine/Pre-built (= 0.72.4) + - hermes-engine/Pre-built (0.72.4) + - libevent (2.1.12) + - OpenSSL-Universal (1.1.1100) + - RCT-Folly (2021.07.22.00): + - boost - DoubleConversion - - Folly/Default (= 2020.01.13.00) + - fmt (~> 6.2.1) - glog - - Folly/Default (2020.01.13.00): - - boost-for-react-native + - RCT-Folly/Default (= 2021.07.22.00) + - RCT-Folly/Default (2021.07.22.00): + - boost - DoubleConversion + - fmt (~> 6.2.1) - glog - - glog (0.3.5) - - RCTRequired (0.63.2) - - RCTTypeSafety (0.63.2): - - FBLazyVector (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.2) - - React-Core (= 0.63.2) - - React (0.63.2): - - React-Core (= 0.63.2) - - React-Core/DevSupport (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-RCTActionSheet (= 0.63.2) - - React-RCTAnimation (= 0.63.2) - - React-RCTBlob (= 0.63.2) - - React-RCTImage (= 0.63.2) - - React-RCTLinking (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - React-RCTSettings (= 0.63.2) - - React-RCTText (= 0.63.2) - - React-RCTVibration (= 0.63.2) - - React-callinvoker (0.63.2) - - React-Core (0.63.2): - - Folly (= 2020.01.13.00) + - RCT-Folly/Futures (2021.07.22.00): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - libevent + - RCTRequired (0.72.4) + - RCTTypeSafety (0.72.4): + - FBLazyVector (= 0.72.4) + - RCTRequired (= 0.72.4) + - React-Core (= 0.72.4) + - React (0.72.4): + - React-Core (= 0.72.4) + - React-Core/DevSupport (= 0.72.4) + - React-Core/RCTWebSocket (= 0.72.4) + - React-RCTActionSheet (= 0.72.4) + - React-RCTAnimation (= 0.72.4) + - React-RCTBlob (= 0.72.4) + - React-RCTImage (= 0.72.4) + - React-RCTLinking (= 0.72.4) + - React-RCTNetwork (= 0.72.4) + - React-RCTSettings (= 0.72.4) + - React-RCTText (= 0.72.4) + - React-RCTVibration (= 0.72.4) + - React-callinvoker (0.72.4) + - React-Codegen (0.72.4): + - DoubleConversion + - FBReactNativeSpec + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rncore + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-Core (0.72.4): - glog - - React-Core/Default (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.72.4) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/CoreModulesHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/Default (0.72.4): - glog - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/DevSupport (0.72.4): - glog - - React-Core/Default (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) - - React-jsinspector (= 0.63.2) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.72.4) + - React-Core/RCTWebSocket (= 0.72.4) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector (= 0.72.4) + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTActionSheetHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTAnimationHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTBlobHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTImageHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTLinkingHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTNetworkHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTSettingsHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTTextHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTVibrationHeaders (0.72.4): - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.63.2): - - Folly (= 2020.01.13.00) + - React-Core/RCTWebSocket (0.72.4): - glog - - React-Core/Default (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsiexecutor (= 0.63.2) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.72.4) + - React-cxxreact + - React-hermes + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimeexecutor + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/CoreModulesHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTImage (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-cxxreact (0.63.2): - - boost-for-react-native (= 1.63.0) + - React-CoreModules (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.4) + - React-Codegen (= 0.72.4) + - React-Core/CoreModulesHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - React-RCTBlob + - React-RCTImage (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - SocketRocket (= 0.6.1) + - React-cxxreact (0.72.4): + - boost (= 1.76.0) - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-callinvoker (= 0.63.2) - - React-jsinspector (= 0.63.2) - - React-jsi (0.63.2): - - boost-for-react-native (= 1.63.0) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.72.4) + - React-debug (= 0.72.4) + - React-jsi (= 0.72.4) + - React-jsinspector (= 0.72.4) + - React-logger (= 0.72.4) + - React-perflogger (= 0.72.4) + - React-runtimeexecutor (= 0.72.4) + - React-debug (0.72.4) + - React-hermes (0.72.4): - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-jsi/Default (= 0.63.2) - - React-jsi/Default (0.63.2): - - boost-for-react-native (= 1.63.0) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - RCT-Folly/Futures (= 2021.07.22.00) + - React-cxxreact (= 0.72.4) + - React-jsi + - React-jsiexecutor (= 0.72.4) + - React-jsinspector (= 0.72.4) + - React-perflogger (= 0.72.4) + - React-jsi (0.72.4): + - boost (= 1.76.0) - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-jsiexecutor (0.63.2): + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-jsiexecutor (0.72.4): - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) - - React-jsinspector (0.63.2) - - react-native-app-auth (6.4.3): + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact (= 0.72.4) + - React-jsi (= 0.72.4) + - React-perflogger (= 0.72.4) + - React-jsinspector (0.72.4) + - React-logger (0.72.4): + - glog + - react-native-app-auth (7.0.0-rc2): - AppAuth (~> 1.6) - React-Core - - React-RCTActionSheet (0.63.2): - - React-Core/RCTActionSheetHeaders (= 0.63.2) - - React-RCTAnimation (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTAnimationHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTBlob (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - React-Core/RCTBlobHeaders (= 0.63.2) - - React-Core/RCTWebSocket (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTImage (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTImageHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - React-RCTNetwork (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTLinking (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - React-Core/RCTLinkingHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTNetwork (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTNetworkHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTSettings (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.2) - - React-Core/RCTSettingsHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - React-RCTText (0.63.2): - - React-Core/RCTTextHeaders (= 0.63.2) - - React-RCTVibration (0.63.2): - - FBReactNativeSpec (= 0.63.2) - - Folly (= 2020.01.13.00) - - React-Core/RCTVibrationHeaders (= 0.63.2) - - React-jsi (= 0.63.2) - - ReactCommon/turbomodule/core (= 0.63.2) - - ReactCommon/turbomodule/core (0.63.2): + - React-NativeModulesApple (0.72.4): + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.72.4) + - React-RCTActionSheet (0.72.4): + - React-Core/RCTActionSheetHeaders (= 0.72.4) + - React-RCTAnimation (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.4) + - React-Codegen (= 0.72.4) + - React-Core/RCTAnimationHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTAppDelegate (0.72.4): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-hermes + - React-NativeModulesApple + - React-RCTImage + - React-RCTNetwork + - React-runtimescheduler + - ReactCommon/turbomodule/core + - React-RCTBlob (0.72.4): + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.72.4) + - React-Core/RCTBlobHeaders (= 0.72.4) + - React-Core/RCTWebSocket (= 0.72.4) + - React-jsi (= 0.72.4) + - React-RCTNetwork (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTImage (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.4) + - React-Codegen (= 0.72.4) + - React-Core/RCTImageHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - React-RCTNetwork (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTLinking (0.72.4): + - React-Codegen (= 0.72.4) + - React-Core/RCTLinkingHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTNetwork (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.4) + - React-Codegen (= 0.72.4) + - React-Core/RCTNetworkHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTSettings (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.4) + - React-Codegen (= 0.72.4) + - React-Core/RCTSettingsHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-RCTText (0.72.4): + - React-Core/RCTTextHeaders (= 0.72.4) + - React-RCTVibration (0.72.4): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.72.4) + - React-Core/RCTVibrationHeaders (= 0.72.4) + - React-jsi (= 0.72.4) + - ReactCommon/turbomodule/core (= 0.72.4) + - React-rncore (0.72.4) + - React-runtimeexecutor (0.72.4): + - React-jsi (= 0.72.4) + - React-runtimescheduler (0.72.4): + - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker + - React-debug + - React-jsi + - React-runtimeexecutor + - React-utils (0.72.4): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-debug + - ReactCommon/turbomodule/bridging (0.72.4): - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-callinvoker (= 0.63.2) - - React-Core (= 0.63.2) - - React-cxxreact (= 0.63.2) - - React-jsi (= 0.63.2) + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.72.4) + - React-cxxreact (= 0.72.4) + - React-jsi (= 0.72.4) + - React-logger (= 0.72.4) + - React-perflogger (= 0.72.4) + - ReactCommon/turbomodule/core (0.72.4): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.72.4) + - React-cxxreact (= 0.72.4) + - React-jsi (= 0.72.4) + - React-logger (= 0.72.4) + - React-perflogger (= 0.72.4) + - SocketRocket (0.6.1) - Yoga (1.14.0) + - YogaKit (1.18.1): + - Yoga (~> 1.14) DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) - - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) + - Flipper (= 0.182.0) + - Flipper-Boost-iOSX (= 1.76.0.1.11) + - Flipper-DoubleConversion (= 3.2.0.1) + - Flipper-Fmt (= 7.1.7) + - Flipper-Folly (= 2.6.10) + - Flipper-Glog (= 0.5.0.5) + - Flipper-PeerTalk (= 0.0.4) + - FlipperKit (= 0.182.0) + - FlipperKit/Core (= 0.182.0) + - FlipperKit/CppBridge (= 0.182.0) + - FlipperKit/FBCxxFollyDynamicConvert (= 0.182.0) + - FlipperKit/FBDefines (= 0.182.0) + - FlipperKit/FKPortForwarding (= 0.182.0) + - FlipperKit/FlipperKitHighlightOverlay (= 0.182.0) + - FlipperKit/FlipperKitLayoutPlugin (= 0.182.0) + - FlipperKit/FlipperKitLayoutTextSearchable (= 0.182.0) + - FlipperKit/FlipperKitNetworkPlugin (= 0.182.0) + - FlipperKit/FlipperKitReactPlugin (= 0.182.0) + - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.182.0) + - FlipperKit/SKIOSNetworkPlugin (= 0.182.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - libevent (~> 2.1.12) + - OpenSSL-Universal (= 1.1.1100) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - React-Core/DevSupport (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - - react-native-app-auth (from `../..`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - react-native-app-auth (from `../node_modules/react-native-app-auth`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) @@ -284,25 +558,47 @@ DEPENDENCIES: - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - AppAuth - - boost-for-react-native + - CocoaAsyncSocket + - Flipper + - Flipper-Boost-iOSX + - Flipper-DoubleConversion + - Flipper-Fmt + - Flipper-Folly + - Flipper-Glog + - Flipper-PeerTalk + - FlipperKit + - fmt + - libevent + - OpenSSL-Universal + - SocketRocket + - YogaKit EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" FBReactNativeSpec: - :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" - Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: :path: "../node_modules/react-native/Libraries/RCTRequired" RCTTypeSafety: @@ -311,24 +607,38 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios React-Core: :path: "../node_modules/react-native/" React-CoreModules: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" react-native-app-auth: - :path: "../.." + :path: "../node_modules/react-native-app-auth" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: :path: "../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" React-RCTBlob: :path: "../node_modules/react-native/Libraries/Blob" React-RCTImage: @@ -343,42 +653,76 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" ReactCommon: :path: "../node_modules/react-native/ReactCommon" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c - DoubleConversion: cde416483dac037923206447da6e1454df403714 - FBLazyVector: 3ef4a7f62e7db01092f9d517d2ebc0d0677c4a37 - FBReactNativeSpec: dc7fa9088f0f2a998503a352b0554d69a4391c5a - Folly: b73c3869541e86821df3c387eb0af5f65addfab4 - glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 - RCTRequired: f13f25e7b12f925f1f6a6a8c69d929a03c0129fe - RCTTypeSafety: 44982c5c8e43ff4141eb519a8ddc88059acd1f3a - React: e1c65dd41cb9db13b99f24608e47dd595f28ca9a - React-callinvoker: 552a6a6bc8b3bb794cf108ad59e5a9e2e3b4fc98 - React-Core: 9d341e725dc9cd2f49e4c49ad1fc4e8776aa2639 - React-CoreModules: 5335e168165da7f7083ce7147768d36d3e292318 - React-cxxreact: d3261ec5f7d11743fbf21e263a34ea51d1f13ebc - React-jsi: 54245e1d5f4b690dec614a73a3795964eeef13a8 - React-jsiexecutor: 8ca588cc921e70590820ce72b8789b02c67cce38 - React-jsinspector: b14e62ebe7a66e9231e9581279909f2fc3db6606 - react-native-app-auth: 0aaa426c98f354afa487f1d792bd711d83495a22 - React-RCTActionSheet: 910163b6b09685a35c4ebbc52b66d1bfbbe39fc5 - React-RCTAnimation: 9a883bbe1e9d2e158d4fb53765ed64c8dc2200c6 - React-RCTBlob: 39cf0ece1927996c4466510e25d2105f67010e13 - React-RCTImage: de355d738727b09ad3692f2a979affbd54b5f378 - React-RCTLinking: 8122f221d395a63364b2c0078ce284214bd04575 - React-RCTNetwork: 8f96c7b49ea6a0f28f98258f347b6ad218bc0830 - React-RCTSettings: 8a49622aff9c1925f5455fa340b6fe4853d64ab6 - React-RCTText: 1b6773e776e4b33f90468c20fe3b16ca3e224bb8 - React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d - ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce - Yoga: 7740b94929bbacbddda59bf115b5317e9a161598 + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + boost: 57d2868c099736d80fcd648bf211b4431e51a558 + CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 + DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 + FBLazyVector: 5d4a3b7f411219a45a6d952f77d2c0a6c9989da5 + FBReactNativeSpec: 3fc2d478e1c4b08276f9dd9128f80ec6d5d85c1f + Flipper: 6edb735e6c3e332975d1b17956bcc584eccf5818 + Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c + Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 + Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b + Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 + Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 + Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 + FlipperKit: 2efad7007d6745a3f95e4034d547be637f89d3f6 + fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 + glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b + hermes-engine: 81191603c4eaa01f5e4ae5737a9efcf64756c7b2 + libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 + OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c + RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 + RCTRequired: c0569ecc035894e4a68baecb30fe6a7ea6e399f9 + RCTTypeSafety: e90354072c21236e0bcf1699011e39acd25fea2f + React: a1be3c6dc0a6e949ccd3e659781aa47bbae1868f + React-callinvoker: 1020b33f6cb1a1824f9ca2a86609fbce2a73c6ed + React-Codegen: a0a26badf098d4a779acda922caf74f6ecabed28 + React-Core: 52075b80f10c26f62219d7b5d13d7d8089f027b3 + React-CoreModules: 21abab85d7ad9038ce2b1c33d39e3baaf7dc9244 + React-cxxreact: 4ad1cc861e32fb533dad6ff7a4ea25680fa1c994 + React-debug: 17366a3d5c5d2f5fc04f09101a4af38cb42b54ae + React-hermes: 37377d0a56aa0cf55c65248271866ce3268cde3f + React-jsi: 6de8b0ccc6b765b58e4eee9ee38049dbeaf5c221 + React-jsiexecutor: c7f826e40fa9cab5d37cab6130b1af237332b594 + React-jsinspector: aaed4cf551c4a1c98092436518c2d267b13a673f + React-logger: da1ebe05ae06eb6db4b162202faeafac4b435e77 + react-native-app-auth: 05c3b875b27bb65fe321bd5dc38cc1c04c5158be + React-NativeModulesApple: edb5ace14f73f4969df6e7b1f3e41bef0012740f + React-perflogger: 496a1a3dc6737f964107cb3ddae7f9e265ddda58 + React-RCTActionSheet: 02904b932b50e680f4e26e7a686b33ebf7ef3c00 + React-RCTAnimation: 88feaf0a85648fb8fd497ce749829774910276d6 + React-RCTAppDelegate: 5792ac0f0feccb584765fdd7aa81ea320c4d9b0b + React-RCTBlob: 0dbc9e2a13d241b37d46b53e54630cbad1f0e141 + React-RCTImage: b111645ab901f8e59fc68fbe31f5731bdbeef087 + React-RCTLinking: 3d719727b4c098aad3588aa3559361ee0579f5de + React-RCTNetwork: b44d3580be05d74556ba4efbf53570f17e38f734 + React-RCTSettings: c0c54b330442c29874cd4dae6e94190dc11a6f6f + React-RCTText: 9b9f5589d9b649d7246c3f336e116496df28cfe6 + React-RCTVibration: 691c67f3beaf1d084ceed5eb5c1dddd9afa8591e + React-rncore: 142268f6c92e296dc079aadda3fade778562f9e4 + React-runtimeexecutor: d465ba0c47ef3ed8281143f59605cacc2244d5c7 + React-runtimescheduler: 4941cc1b3cf08b792fbf666342c9fc95f1969035 + React-utils: b79f2411931f9d3ea5781404dcbb2fa8a837e13a + ReactCommon: 4b2bdcb50a3543e1c2b2849ad44533686610826d + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981 + YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 949ad8df05a48859791386bfa525887dad48241b +PODFILE CHECKSUM: 90be020bf55058ddd450ae593af00b72ed3379ce -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/Example/ios/_xcode.env b/Example/ios/_xcode.env new file mode 100644 index 00000000..3d5782c7 --- /dev/null +++ b/Example/ios/_xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/Example/jest.config.js b/Example/jest.config.js new file mode 100644 index 00000000..8eb675e9 --- /dev/null +++ b/Example/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/Example/metro.config.js b/Example/metro.config.js index 2337b599..067763ff 100644 --- a/Example/metro.config.js +++ b/Example/metro.config.js @@ -1,28 +1,20 @@ +const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); + /** - * Metro configuration for React Native - * https://github.com/facebook/react-native + * Metro configuration + * https://facebook.github.io/metro/docs/configuration * - * @format + * @type {import('metro-config').MetroConfig} */ -const path = require('path'); -// As the example project uses `link:../` for react-native-owl, which creates a symlink, we need to manually map the project so it is properly used my Metro. -// This will not be required by other projects using react-native-owl installed from a package repository. +const path = require('path'); const extraNodeModules = { 'react-native-app-auth': path.resolve(path.join(__dirname, '..')), }; const watchFolders = [path.resolve(path.join(__dirname, '..'))]; -module.exports = { - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, +const config = { resolver: { extraNodeModules: new Proxy(extraNodeModules, { get: (target, name) => @@ -33,3 +25,5 @@ module.exports = { }, watchFolders, }; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/Example/package.json b/Example/package.json index 15246ba5..b53da06e 100644 --- a/Example/package.json +++ b/Example/package.json @@ -5,27 +5,33 @@ "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", + "lint": "eslint .", "start": "react-native start", - "test": "jest", - "lint": "eslint ." + "test": "jest" }, "dependencies": { - "react": "16.13.1", - "react-native": "0.63.2", + "react": "18.2.0", + "react-native": "0.72.4", "react-native-app-auth": "link:../" }, "devDependencies": { - "@babel/core": "^7.8.4", - "@babel/runtime": "^7.8.4", - "@react-native-community/eslint-config": "^1.1.0", - "babel-jest": "^25.1.0", - "babel-plugin-module-resolver": "^4.1.0", - "eslint": "^6.5.1", - "jest": "^25.1.0", - "metro-react-native-babel-preset": "^0.59.0", - "react-test-renderer": "16.13.1" + "@babel/core": "^7.20.0", + "@babel/preset-env": "^7.20.0", + "@babel/runtime": "^7.20.0", + "@react-native/eslint-config": "^0.72.2", + "@react-native/metro-config": "^0.72.11", + "@tsconfig/react-native": "^3.0.0", + "@types/react": "^18.0.24", + "@types/react-test-renderer": "^18.0.0", + "babel-jest": "^29.2.1", + "eslint": "^8.19.0", + "jest": "^29.2.1", + "metro-react-native-babel-preset": "0.76.8", + "prettier": "^2.4.1", + "react-test-renderer": "18.2.0", + "typescript": "4.8.4" }, - "jest": { - "preset": "react-native" + "engines": { + "node": ">=16" } } diff --git a/Example/react-native.config.js b/Example/react-native.config.js deleted file mode 100644 index 5ff2b9f3..00000000 --- a/Example/react-native.config.js +++ /dev/null @@ -1,9 +0,0 @@ -const path = require('path'); - -module.exports = { - dependencies: { - 'react-native-app-auth': { - root: path.join(__dirname, '..'), - }, - }, -}; diff --git a/Example/tsconfig.json b/Example/tsconfig.json new file mode 100644 index 00000000..45a6c707 --- /dev/null +++ b/Example/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@tsconfig/react-native/tsconfig.json" +} From 4bd8ac5e63191804e08d5b5fc43f6093de8fc544 Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Tue, 5 Sep 2023 16:24:09 +0100 Subject: [PATCH 2/4] chore: add changeset --- .changeset/smart-gifts-bow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/smart-gifts-bow.md diff --git a/.changeset/smart-gifts-bow.md b/.changeset/smart-gifts-bow.md new file mode 100644 index 00000000..fa21d546 --- /dev/null +++ b/.changeset/smart-gifts-bow.md @@ -0,0 +1,5 @@ +--- +'react-native-app-auth': patch +--- + +Update the Example app to RN 0.72 From 0433d3be5df7a71022ef63ecca97d285e2ab0fc4 Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Wed, 6 Sep 2023 08:09:20 +0100 Subject: [PATCH 3/4] test: fix tests by ignoring Example directory --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2a19d07c..f1802491 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,10 @@ "react-native-base64": "0.0.2" }, "jest": { - "preset": "react-native" + "preset": "react-native", + "modulePathIgnorePatterns": [ + "/Example/" + ] }, "husky": { "hooks": { From b24b25bdd86eb130f802d35199b27f5bba3fb4c0 Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Wed, 6 Sep 2023 11:18:57 +0100 Subject: [PATCH 4/4] chore: Improve iOS openURL handler --- Example/ios/Example/AppDelegate.mm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Example/ios/Example/AppDelegate.mm b/Example/ios/Example/AppDelegate.mm index 057ed531..fcc93a01 100644 --- a/Example/ios/Example/AppDelegate.mm +++ b/Example/ios/Example/AppDelegate.mm @@ -18,7 +18,9 @@ - (BOOL) application: (UIApplication *)application openURL: (NSURL *)url options: (NSDictionary *) options { - // return [self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:url]; + if ([self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:url]) { + return YES; + } return [RCTLinkingManager application:application openURL:url options:options]; }