diff --git a/boilerplate/App.js b/boilerplate/App.js deleted file mode 100644 index 4e3371460..000000000 --- a/boilerplate/App.js +++ /dev/null @@ -1,19 +0,0 @@ -// This is the entry point if you run `yarn expo:start` -// If you run `yarn ios` or `yarn android`, it'll use ./index.js instead. -import App from "./app/app.tsx" -import React from "react" -import { registerRootComponent } from "expo" -import { Platform } from "react-native" -import * as SplashScreen from "expo-splash-screen" - -SplashScreen.preventAutoHideAsync() - -function IgniteApp() { - return -} - -if (Platform.OS !== "web") { - registerRootComponent(IgniteApp) -} - -export default IgniteApp diff --git a/boilerplate/App.tsx b/boilerplate/App.tsx new file mode 100644 index 000000000..1fd79cc56 --- /dev/null +++ b/boilerplate/App.tsx @@ -0,0 +1,11 @@ +import App from "./app/app" +import React from "react" +import * as SplashScreen from "expo-splash-screen" + +SplashScreen.preventAutoHideAsync() + +function IgniteApp() { + return +} + +export default IgniteApp diff --git a/boilerplate/android/app/BUCK b/boilerplate/android/app/BUCK deleted file mode 100644 index 0e7790483..000000000 --- a/boilerplate/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.helloworld", -) - -android_resource( - name = "res", - package = "com.helloworld", - 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/boilerplate/android/app/build.gradle b/boilerplate/android/app/build.gradle index ba6f03761..92abb3968 100644 --- a/boilerplate/android/app/build.gradle +++ b/boilerplate/android/app/build.gradle @@ -1,24 +1,7 @@ -/* - * 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. - */ - apply plugin: "com.android.application" apply plugin: "com.facebook.react" -import com.android.build.OutputFile - def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() -def expoDebuggableVariants = ['debug'] -// Override `debuggableVariants` for expo-updates debugging -if (System.getenv('EX_UPDATES_NATIVE_DEBUG') == "1") { - react { - expoDebuggableVariants = [] - } -} - /** * This is the configuration block to customize your React Native Android app. @@ -28,7 +11,12 @@ react { entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" - debuggableVariants = expoDebuggableVariants + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '..' @@ -37,8 +25,6 @@ react { // 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 @@ -49,9 +35,7 @@ react { /* 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) @@ -74,11 +58,6 @@ react { // hermesFlags = ["-O", "-output-source-map"] } -// Override `hermesEnabled` by `expo.jsEngine` -ext { - hermesEnabled = (findProperty('expo.jsEngine') ?: "hermes") == "hermes" -} - /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ @@ -102,15 +81,16 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion - namespace "com.helloworld" + namespace 'com.helloworld' defaultConfig { - applicationId "com.helloworld" + applicationId 'com.helloworld' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 - versionName "1.0" - } + versionName "1.0.0" + buildConfigField("boolean", "REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS", (findProperty("reactNative.unstable_useRuntimeSchedulerAlways") ?: true).toString()) + } signingConfigs { debug { storeFile file('debug.keystore') @@ -127,25 +107,68 @@ android { // Caution! In production, you need to generate your own keystore file. // see https://reactnative.dev/docs/signed-apk-android. signingConfig signingConfigs.debug + shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } } +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - - // RN BootSplash - implementation("androidx.core:core-splashscreen:1.0.0") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + def frescoVersion = rootProject.ext.frescoVersion + + // If your app supports Android versions before Ice Cream Sandwich (API level 14) + if (isGifEnabled || isWebpEnabled) { + implementation("com.facebook.fresco:fresco:${frescoVersion}") + implementation("com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}") + } + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${frescoVersion}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${frescoVersion}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${frescoVersion}") + } + } debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { exclude group:'com.squareup.okhttp3', module:'okhttp' } - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") + if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { @@ -153,4 +176,5 @@ dependencies { } } -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) \ No newline at end of file +apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); +applyNativeModulesAppBuildGradle(project) diff --git a/boilerplate/android/app/proguard-rules.pro b/boilerplate/android/app/proguard-rules.pro index 11b025724..551eb41da 100644 --- a/boilerplate/android/app/proguard-rules.pro +++ b/boilerplate/android/app/proguard-rules.pro @@ -7,4 +7,8 @@ # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html +# react-native-reanimated +-keep class com.swmansion.reanimated.** { *; } +-keep class com.facebook.react.turbomodule.** { *; } + # Add any project specific keep options here: diff --git a/boilerplate/android/app/src/debug/AndroidManifest.xml b/boilerplate/android/app/src/debug/AndroidManifest.xml index 4b185bc15..99e38fc5f 100644 --- a/boilerplate/android/app/src/debug/AndroidManifest.xml +++ b/boilerplate/android/app/src/debug/AndroidManifest.xml @@ -1,13 +1,7 @@ - - - - + diff --git a/boilerplate/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java b/boilerplate/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java index 283027d2d..595dd5831 100644 --- a/boilerplate/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +++ b/boilerplate/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java @@ -17,7 +17,6 @@ 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; @@ -35,7 +34,6 @@ public static void initializeFlipper(Context context, ReactInstanceManager react 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()); diff --git a/boilerplate/android/app/src/main/AndroidManifest.xml b/boilerplate/android/app/src/main/AndroidManifest.xml index 1976c1dee..46cca7111 100644 --- a/boilerplate/android/app/src/main/AndroidManifest.xml +++ b/boilerplate/android/app/src/main/AndroidManifest.xml @@ -1,32 +1,34 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/boilerplate/android/app/src/main/java/com/helloworld/MainActivity.java b/boilerplate/android/app/src/main/java/com/helloworld/MainActivity.java index 5e1b98aac..176fbf6a2 100644 --- a/boilerplate/android/app/src/main/java/com/helloworld/MainActivity.java +++ b/boilerplate/android/app/src/main/java/com/helloworld/MainActivity.java @@ -7,25 +7,32 @@ import com.facebook.react.ReactActivityDelegate; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactActivityDelegate; -import com.zoontek.rnbootsplash.RNBootSplash; import expo.modules.ReactActivityDelegateWrapper; public class MainActivity extends ReactActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + setTheme(R.style.AppTheme); + super.onCreate(null); + } /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. */ @Override protected String getMainComponentName() { - return "HelloWorld"; + return "main"; } /** - * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and - * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer - * (Paper). + * 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() { @@ -33,14 +40,7 @@ protected ReactActivityDelegate createReactActivityDelegate() { this, getMainComponentName(), // If you opted-in for the New Architecture, we enable the Fabric Renderer. - DefaultNewArchitectureEntryPoint.getFabricEnabled()) - ); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - RNBootSplash.init(this); // <- initialize the splash screen - super.onCreate(null); // or super.onCreate(savedInstanceState) when not using react-native-screens + DefaultNewArchitectureEntryPoint.getFabricEnabled())); } /** diff --git a/boilerplate/android/app/src/main/java/com/helloworld/MainApplication.java b/boilerplate/android/app/src/main/java/com/helloworld/MainApplication.java index 02f4c5c9b..8502c4402 100644 --- a/boilerplate/android/app/src/main/java/com/helloworld/MainApplication.java +++ b/boilerplate/android/app/src/main/java/com/helloworld/MainApplication.java @@ -8,15 +8,16 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; -import java.util.List; - import expo.modules.ApplicationLifecycleDispatcher; import expo.modules.ReactNativeHostWrapper; +import java.util.List; + public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = @@ -37,7 +38,7 @@ protected List getPackages() { @Override protected String getJSMainModuleName() { - return "index"; + return ".expo/.virtual-metro-entry"; } @Override @@ -60,6 +61,9 @@ public ReactNativeHost getReactNativeHost() { public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); + if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { + ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false; + } 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(); @@ -73,5 +77,4 @@ public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); } - -} \ No newline at end of file +} diff --git a/boilerplate/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/boilerplate/android/app/src/main/res/drawable-hdpi/splashscreen_image.png new file mode 100644 index 000000000..783923308 Binary files /dev/null and b/boilerplate/android/app/src/main/res/drawable-hdpi/splashscreen_image.png differ diff --git a/boilerplate/android/app/src/main/res/drawable-mdpi/splashscreen_image.png b/boilerplate/android/app/src/main/res/drawable-mdpi/splashscreen_image.png new file mode 100644 index 000000000..783923308 Binary files /dev/null and b/boilerplate/android/app/src/main/res/drawable-mdpi/splashscreen_image.png differ diff --git a/boilerplate/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/boilerplate/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png new file mode 100644 index 000000000..783923308 Binary files /dev/null and b/boilerplate/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png differ diff --git a/boilerplate/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png b/boilerplate/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png new file mode 100644 index 000000000..783923308 Binary files /dev/null and b/boilerplate/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png differ diff --git a/boilerplate/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png b/boilerplate/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png new file mode 100644 index 000000000..783923308 Binary files /dev/null and b/boilerplate/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png differ diff --git a/boilerplate/android/app/src/main/res/drawable/rn_edit_text_material.xml b/boilerplate/android/app/src/main/res/drawable/rn_edit_text_material.xml index f35d99620..73b37e4d9 100644 --- a/boilerplate/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ b/boilerplate/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -20,7 +20,7 @@ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> - - - - - - + + + + + \ No newline at end of file diff --git a/boilerplate/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java b/boilerplate/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java index 053f2a140..b51036440 100644 --- a/boilerplate/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +++ b/boilerplate/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java @@ -17,4 +17,4 @@ public class ReactNativeFlipper { public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { // Do nothing as we don't want to initialize Flipper on Release. } -} \ No newline at end of file +} diff --git a/boilerplate/android/build.gradle b/boilerplate/android/build.gradle index 6aeae4d36..bf861dbf3 100644 --- a/boilerplate/android/build.gradle +++ b/boilerplate/android/build.gradle @@ -1,5 +1,3 @@ -import org.apache.tools.ant.taskdefs.condition.Os - // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -8,9 +6,7 @@ buildscript { minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21') compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33') - if (findProperty('android.kotlinVersion')) { - kotlinVersion = findProperty('android.kotlinVersion') - } + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.8.10' frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0' // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. @@ -21,24 +17,24 @@ buildscript { mavenCentral() } dependencies { - classpath('com.android.tools.build:gradle:7.3.1') + classpath('com.android.tools.build:gradle:7.4.2') classpath('com.facebook.react:react-native-gradle-plugin') } } -// allprojects { -// repositories { -// maven { -// // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm -// url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) -// } -// maven { -// // Android JSC is installed from npm -// url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) -// } +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) + } -// google() -// mavenCentral() -// maven { url 'https://www.jitpack.io' } -// } -// } + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} diff --git a/boilerplate/android/gradle.properties b/boilerplate/android/gradle.properties index 93ee474b7..240ca06cb 100644 --- a/boilerplate/android/gradle.properties +++ b/boilerplate/android/gradle.properties @@ -21,23 +21,13 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true + # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true # Version of flipper SDK to use with React Native FLIPPER_VERSION=0.182.0 -# Enable GIF support in React Native images (~200 B increase) -expo.gif.enabled=true -# Enable webp support in React Native images (~85 KB increase) -expo.webp.enabled=true -# Enable animated webp support (~3.4 MB increase) -# Disabled by default because iOS doesn't support animated webp -expo.webp.animated=false -# Use hermes as JS engine. To disable remove this line -expo.jsEngine=hermes - - # Use this property to specify which architecture you want to build. # You can also override it from the CLI using # ./gradlew -PreactNativeArchitectures=x86_64 @@ -49,3 +39,18 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 # 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 + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true diff --git a/boilerplate/android/gradle/wrapper/gradle-wrapper.jar b/boilerplate/android/gradle/wrapper/gradle-wrapper.jar index 7454180f2..249e5832f 100644 Binary files a/boilerplate/android/gradle/wrapper/gradle-wrapper.jar and b/boilerplate/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/boilerplate/android/gradle/wrapper/gradle-wrapper.properties b/boilerplate/android/gradle/wrapper/gradle-wrapper.properties index 6d938f7f1..6ec1567a0 100644 --- a/boilerplate/android/gradle/wrapper/gradle-wrapper.properties +++ b/boilerplate/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/boilerplate/android/gradlew b/boilerplate/android/gradlew index 65dcd68d6..a69d9cb6c 100755 --- a/boilerplate/android/gradlew +++ b/boilerplate/android/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,11 +80,11 @@ do esac done -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,16 +143,12 @@ 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 diff --git a/boilerplate/android/gradlew.bat b/boilerplate/android/gradlew.bat index 877199efb..53a6b238d 100644 --- a/boilerplate/android/gradlew.bat +++ b/boilerplate/android/gradlew.bat @@ -26,7 +26,6 @@ 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% @@ -76,12 +75,11 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +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% diff --git a/boilerplate/app.json b/boilerplate/app.json index 1f690cd89..cf539cf02 100644 --- a/boilerplate/app.json +++ b/boilerplate/app.json @@ -54,7 +54,18 @@ "bundler": "metro" }, "plugins": [ - "expo-localization" + "expo-localization", + [ + "expo-build-properties", + { + "ios": { + "newArchEnabled": false + }, + "android": { + "newArchEnabled": false + } + } + ] ] } } diff --git a/boilerplate/app/app.tsx b/boilerplate/app/app.tsx index 30d81ceb5..c968524de 100644 --- a/boilerplate/app/app.tsx +++ b/boilerplate/app/app.tsx @@ -55,7 +55,7 @@ const config = { } interface AppProps { - hideSplashScreen: () => Promise + hideSplashScreen: () => Promise } /** diff --git a/boilerplate/app/devtools/ReactotronConfig.ts b/boilerplate/app/devtools/ReactotronConfig.ts index 1e1df9742..74bbf9146 100644 --- a/boilerplate/app/devtools/ReactotronConfig.ts +++ b/boilerplate/app/devtools/ReactotronConfig.ts @@ -72,6 +72,7 @@ Reactotron.onCustomCommand({ const { route } = args if (route) { Reactotron.log(`Navigating to: ${route}`) + // @ts-expect-error navigate(route) } else { Reactotron.log("Could not navigate. No route provided.") diff --git a/boilerplate/app/screens/WelcomeScreen.tsx b/boilerplate/app/screens/WelcomeScreen.tsx index c1826a867..7799d784f 100644 --- a/boilerplate/app/screens/WelcomeScreen.tsx +++ b/boilerplate/app/screens/WelcomeScreen.tsx @@ -7,7 +7,7 @@ import { } from "../components" import { isRTL } from "../i18n" import { useStores } from "../models" // @demo remove-current-line -import { AppStackScreenProps } from "../navigators" // @demo remove-current-line +import { AppStackScreenProps } from "../navigators" import { colors, spacing } from "../theme" import { useHeader } from "../utils/useHeader" // @demo remove-current-line import { useSafeAreaInsetsStyle } from "../utils/useSafeAreaInsetsStyle" diff --git a/boilerplate/babel.config.js b/boilerplate/babel.config.js index fe59befab..177cbe777 100644 --- a/boilerplate/babel.config.js +++ b/boilerplate/babel.config.js @@ -23,10 +23,13 @@ const plugins = [ ] /** @type {import('@babel/core').TransformOptions} */ -module.exports = { - presets: ["babel-preset-expo"], - env: { - production: {}, - }, - plugins, -} +module.exports = function(api) { + api.cache(true); + return { + presets: ["babel-preset-expo"], + env: { + production: {}, + }, + plugins, + }; +}; \ No newline at end of file diff --git a/boilerplate/bin/postInstall b/boilerplate/bin/postInstall index db77e754a..4f04be99b 100755 --- a/boilerplate/bin/postInstall +++ b/boilerplate/bin/postInstall @@ -14,14 +14,6 @@ if (["darwin", "linux"].includes(process.platform)) { run('pkill -f "cli.js start" || set exit 0') } -/** - * On darwin machine: - * 1. Check if CocoaPods CLI is installed (and if not, install it) - * 2. Find an Xcode project dir - * 3. Run `pod install`, if fails run `pod repo update` and try again - */ -run('npx pod-install') - // Run baby run function run(command) { console.log(`./bin/postInstall script running: ${command}`) diff --git a/boilerplate/index.js b/boilerplate/index.js deleted file mode 100644 index 5dd2335a5..000000000 --- a/boilerplate/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// This is the first file that ReactNative will run when it starts up. -// If you use Expo (`yarn expo:start`), the entry point is ./App.js instead. -// Both do essentially the same thing. - -import App from "./app/app.tsx" -import React from "react" -import { AppRegistry } from "react-native" -import RNBootSplash from "react-native-bootsplash" - -function IgniteApp() { - return -} - -AppRegistry.registerComponent("HelloWorld", () => IgniteApp) -export default App diff --git a/boilerplate/ios/.gitignore b/boilerplate/ios/.gitignore new file mode 100644 index 000000000..8beb34430 --- /dev/null +++ b/boilerplate/ios/.gitignore @@ -0,0 +1,30 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace +.xcode.env.local + +# Bundle artifacts +*.jsbundle + +# CocoaPods +/Pods/ diff --git a/boilerplate/ios/.xcode.env b/boilerplate/ios/.xcode.env index 9d643e97a..3d5782c71 100644 --- a/boilerplate/ios/.xcode.env +++ b/boilerplate/ios/.xcode.env @@ -2,9 +2,10 @@ # 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) \ No newline at end of file +export NODE_BINARY=$(command -v node) diff --git a/boilerplate/ios/HelloWorld.xcodeproj/project.pbxproj b/boilerplate/ios/HelloWorld.xcodeproj/project.pbxproj index 424e6be57..bcab337e4 100644 --- a/boilerplate/ios/HelloWorld.xcodeproj/project.pbxproj +++ b/boilerplate/ios/HelloWorld.xcodeproj/project.pbxproj @@ -3,99 +3,62 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* HelloWorldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* HelloWorldTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.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 */; }; - 2215ACBC1E62C44583DB69A9 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AFED2E09CC2E86D1338C0F /* ExpoModulesProvider.swift */; }; - 400EB2C1E1807E6CBC68B7AB /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 951E59D51E504BC9C5F46169 /* ExpoModulesProvider.swift */; }; - 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */; }; - BE406F562862D73000A81E39 /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BE406F552862D73000A81E39 /* BootSplash.storyboard */; }; + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */; }; + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; + FBB8240DE3B54DA7A908FDE3 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4CED417AFB41E4AD6B7776 /* noop-file.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = HelloWorld; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* HelloWorldTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HelloWorldTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* HelloWorldTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HelloWorldTests.m; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HelloWorld/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = HelloWorld/AppDelegate.mm; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = HelloWorld/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = HelloWorld/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = HelloWorld/main.m; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld-HelloWorldTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld-HelloWorldTests.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests.release.xcconfig"; sourceTree = ""; }; - 951E59D51E504BC9C5F46169 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift"; sourceTree = ""; }; - BE406F552862D73000A81E39 /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = HelloWorld/BootSplash.storyboard; sourceTree = ""; }; - D5AFED2E09CC2E86D1338C0F /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-HelloWorld-HelloWorldTests/ExpoModulesProvider.swift"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = ""; }; + 7B4CED417AFB41E4AD6B7776 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "HelloWorld/noop-file.swift"; sourceTree = ""; }; + A6B2159584A643268307CED8 /* HelloWorld-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "HelloWorld-Bridging-Header.h"; path = "HelloWorld/HelloWorld-Bridging-Header.h"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = HelloWorld/SplashScreen.storyboard; sourceTree = ""; }; + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-HelloWorld/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7699B88040F8A987B510C191 /* libPods-HelloWorld-HelloWorldTests.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C80B921A6F3F58F76C31292 /* libPods-HelloWorld.a in Frameworks */, + 96905EF65AED1B983A6B3ABC /* libPods-HelloWorld.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* HelloWorldTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* HelloWorldTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = HelloWorldTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; 13B07FAE1A68108700A75B9A /* HelloWorld */ = { isa = PBXGroup; children = ( + BB2F792B24A3F905000567C9 /* Supporting */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.mm */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, - BE406F552862D73000A81E39 /* BootSplash.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, + 7B4CED417AFB41E4AD6B7776 /* noop-file.swift */, + A6B2159584A643268307CED8 /* HelloWorld-Bridging-Header.h */, ); name = HelloWorld; sourceTree = ""; @@ -104,29 +67,11 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-HelloWorld.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-HelloWorld-HelloWorldTests.a */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-HelloWorld.a */, ); name = Frameworks; sourceTree = ""; }; - 547A8E9E9663ECB3355FB756 /* ExpoModulesProviders */ = { - isa = PBXGroup; - children = ( - 6289853FD5D818F15D17248E /* HelloWorld */, - E4DC8A9EFE6F9C5F90DD96E4 /* HelloWorldTests */, - ); - name = ExpoModulesProviders; - sourceTree = ""; - }; - 6289853FD5D818F15D17248E /* HelloWorld */ = { - isa = PBXGroup; - children = ( - 951E59D51E504BC9C5F46169 /* ExpoModulesProvider.swift */, - ); - name = HelloWorld; - sourceTree = ""; - }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -139,11 +84,10 @@ children = ( 13B07FAE1A68108700A75B9A /* HelloWorld */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* HelloWorldTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - 547A8E9E9663ECB3355FB756 /* ExpoModulesProviders */, + D65327D7A22EEC0BE12398D9 /* Pods */, + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -154,68 +98,60 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* HelloWorld.app */, - 00E356EE1AD99517003FC87E /* HelloWorldTests.xctest */, ); name = Products; sourceTree = ""; }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { + 92DBD88DE9BF7D494EA9DA96 /* HelloWorld */ = { isa = PBXGroup; children = ( - 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */, + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, + ); + name = HelloWorld; + sourceTree = ""; + }; + BB2F792B24A3F905000567C9 /* Supporting */ = { + isa = PBXGroup; + children = ( + BB2F792C24A3F905000567C9 /* Expo.plist */, + ); + name = Supporting; + path = HelloWorld/Supporting; + sourceTree = ""; + }; + D65327D7A22EEC0BE12398D9 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */, ); path = Pods; sourceTree = ""; }; - E4DC8A9EFE6F9C5F90DD96E4 /* HelloWorldTests */ = { + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { isa = PBXGroup; children = ( - D5AFED2E09CC2E86D1338C0F /* ExpoModulesProvider.swift */, + 92DBD88DE9BF7D494EA9DA96 /* HelloWorld */, ); - name = HelloWorldTests; + name = ExpoModulesProviders; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* HelloWorldTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "HelloWorldTests" */; - buildPhases = ( - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, - D132AD5E4383288EDCDF417A /* [Expo] Configure project */, - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = HelloWorldTests; - productName = HelloWorldTests; - productReference = 00E356EE1AD99517003FC87E /* HelloWorldTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; 13B07F861A680F5B00A75B9A /* HelloWorld */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "HelloWorld" */; buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, - 99A971CD1133B5D286761AA1 /* [Expo] Configure project */, + DF553021445C9DD787E8BC0F /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 01C5DD6A5E465E3E1E466CBC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -232,19 +168,15 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1340; + LastUpgradeCheck = 1130; TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; + LastSwiftMigration = 1250; }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "HelloWorld" */; - compatibilityVersion = "Xcode 12.0"; + compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -257,25 +189,18 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* HelloWorld */, - 00E356ED1AD99517003FC87E /* HelloWorldTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BE406F562862D73000A81E39 /* BootSplash.storyboard in Resources */, + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -288,53 +213,33 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", ); name = "Bundle React Native code and images"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/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"; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { + 01C5DD6A5E465E3E1E466CBC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks-${CONFIGURATION}-output-files.xcfilelist", + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 99A971CD1133B5D286761AA1 /* [Expo] Configure project */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-HelloWorld/expo-configure-project.sh\"\n"; - }; - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -349,53 +254,34 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HelloWorld-HelloWorldTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-HelloWorld-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; }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", ); + name = "[CP] Copy Pods Resources"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HelloWorld-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; - }; - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n"; showEnvVarsInLog = 0; }; - D132AD5E4383288EDCDF417A /* [Expo] Configure project */ = { + DF553021445C9DD787E8BC0F /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -412,41 +298,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-HelloWorld-HelloWorldTests/expo-configure-project.sh\"\n"; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HelloWorld-HelloWorldTests/Pods-HelloWorld-HelloWorldTests-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-HelloWorld/expo-configure-project.sh\"\n"; }; FD10A7F022414F080027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; @@ -464,112 +316,43 @@ ); 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 = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/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 `$NODE_BINARY --print \"require('path').dirname(require.resolve('expo/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* HelloWorldTests.m in Sources */, - 2215ACBC1E62C44583DB69A9 /* ExpoModulesProvider.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, - 400EB2C1E1807E6CBC68B7AB /* ExpoModulesProvider.swift in Sources */, + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, + FBB8240DE3B54DA7A908FDE3 /* noop-file.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* HelloWorld */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-HelloWorld-HelloWorldTests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = HelloWorldTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = com.helloworld; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HelloWorld.app/HelloWorld"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-HelloWorld-HelloWorldTests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = HelloWorldTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; - PRODUCT_BUNDLE_IDENTIFIER = com.helloworld; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HelloWorld.app/HelloWorld"; - }; - name = Release; - }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-HelloWorld.debug.xcconfig */; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-HelloWorld.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = HelloWorld/HelloWorld.entitlements; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; - INFOPLIST_FILE = HelloWorld/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( + GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "@executable_path/Frameworks", + "FB_SONARKIT_ENABLED=1", ); + INFOPLIST_FILE = HelloWorld/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -578,24 +361,26 @@ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.helloworld; PRODUCT_NAME = HelloWorld; + SWIFT_OBJC_BRIDGING_HEADER = "HelloWorld/HelloWorld-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-HelloWorld.release.xcconfig */; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-HelloWorld.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = HelloWorld/HelloWorld.entitlements; CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = HelloWorld/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -604,7 +389,9 @@ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = com.helloworld; PRODUCT_NAME = HelloWorld; + SWIFT_OBJC_BRIDGING_HEADER = "HelloWorld/HelloWorld-Bridging-Header.h"; SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; @@ -632,7 +419,6 @@ 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; @@ -659,24 +445,12 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(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", - ); + OTHER_CPLUSPLUSFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; @@ -705,7 +479,6 @@ 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; @@ -725,26 +498,13 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - ); + OTHER_CPLUSPLUSFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; }; name = Release; @@ -752,15 +512,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "HelloWorldTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "HelloWorld" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/boilerplate/ios/HelloWorld.xcodeproj/xcshareddata/xcschemes/HelloWorld.xcscheme b/boilerplate/ios/HelloWorld.xcodeproj/xcshareddata/xcschemes/HelloWorld.xcscheme index c7c584ca8..39743fdfd 100644 --- a/boilerplate/ios/HelloWorld.xcodeproj/xcshareddata/xcschemes/HelloWorld.xcscheme +++ b/boilerplate/ios/HelloWorld.xcodeproj/xcshareddata/xcschemes/HelloWorld.xcscheme @@ -1,6 +1,6 @@ #import @@ -8,25 +7,19 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - self.moduleName = @"HelloWorld"; + self.moduleName = @"main"; // 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 = @{}; - [super application:application didFinishLaunchingWithOptions:launchOptions]; - - // RN BootSplash - UIView *rootView = self.window.rootViewController.view; // react-native >= 0.71 specific - [RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; - - return YES; + return [super application:application didFinishLaunchingWithOptions:launchOptions]; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif diff --git a/boilerplate/ios/HelloWorld/BootSplash.storyboard b/boilerplate/ios/HelloWorld/BootSplash.storyboard deleted file mode 100644 index 68d8237b2..000000000 --- a/boilerplate/ios/HelloWorld/BootSplash.storyboard +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/boilerplate/ios/HelloWorld-Bridging-Header.h b/boilerplate/ios/HelloWorld/HelloWorld-Bridging-Header.h similarity index 99% rename from boilerplate/ios/HelloWorld-Bridging-Header.h rename to boilerplate/ios/HelloWorld/HelloWorld-Bridging-Header.h index 1b2cb5d6d..e11d920b1 100644 --- a/boilerplate/ios/HelloWorld-Bridging-Header.h +++ b/boilerplate/ios/HelloWorld/HelloWorld-Bridging-Header.h @@ -1,4 +1,3 @@ // // Use this file to import your target's public headers that you would like to expose to Swift. // - diff --git a/boilerplate/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/boilerplate/ios/HelloWorld/HelloWorld.entitlements similarity index 64% rename from boilerplate/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to boilerplate/ios/HelloWorld/HelloWorld.entitlements index 18d981003..018a6e20c 100644 --- a/boilerplate/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ b/boilerplate/ios/HelloWorld/HelloWorld.entitlements @@ -1,8 +1,8 @@ - - IDEDidComputeMac32BitWarning - - - + + aps-environment + development + + \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 000000000..2f61b9273 Binary files /dev/null and b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json index bc6b57a1e..90d8d4c2a 100644 --- a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,116 +1,14 @@ { "images": [ { - "filename": "Icon-20-iphone@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "20x20" - }, - { - "filename": "Icon-20-iphone@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "20x20" - }, - { - "filename": "Icon-29-iphone@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "29x29" - }, - { - "filename": "Icon-29-iphone@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "29x29" - }, - { - "filename": "Icon-40-iphone@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "40x40" - }, - { - "filename": "Icon-40-iphone@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "40x40" - }, - { - "filename": "Icon-60-iphone@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "60x60" - }, - { - "filename": "Icon-60-iphone@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "60x60" - }, - { - "filename": "Icon-20-ipad.png", - "idiom": "ipad", - "scale": "1x", - "size": "20x20" - }, - { - "filename": "Icon-20-ipad@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "20x20" - }, - { - "filename": "Icon-29-ipad.png", - "idiom": "ipad", - "scale": "1x", - "size": "29x29" - }, - { - "filename": "Icon-29-ipad@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "29x29" - }, - { - "filename": "Icon-40-ipad.png", - "idiom": "ipad", - "scale": "1x", - "size": "40x40" - }, - { - "filename": "Icon-40-ipad@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "40x40" - }, - { - "filename": "Icon-76-ipad.png", - "idiom": "ipad", - "scale": "1x", - "size": "76x76" - }, - { - "filename": "Icon-76-ipad@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "76x76" - }, - { - "filename": "Icon-83.5-ipad@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "83.5x83.5" - }, - { - "filename": "Icon-1024-ios-marketing.png", - "idiom": "ios-marketing", - "scale": "1x", + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", "size": "1024x1024" } ], "info": { - "author": "xcode", - "version": 1 + "version": 1, + "author": "expo" } -} +} \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-1024-ios-marketing.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-1024-ios-marketing.png deleted file mode 100644 index 652bef698..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-1024-ios-marketing.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad.png deleted file mode 100644 index 26a53b6db..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad@2x.png deleted file mode 100644 index e8d2f8b9c..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-ipad@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@2x.png deleted file mode 100644 index e8d2f8b9c..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@3x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@3x.png deleted file mode 100644 index 658052b76..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-20-iphone@3x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad.png deleted file mode 100644 index d57f5ef07..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad@2x.png deleted file mode 100644 index 33ad2ffa6..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-ipad@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@2x.png deleted file mode 100644 index 33ad2ffa6..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@3x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@3x.png deleted file mode 100644 index 32ee24bf0..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-29-iphone@3x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad.png deleted file mode 100644 index e8d2f8b9c..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad@2x.png deleted file mode 100644 index 46467da55..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-ipad@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@2x.png deleted file mode 100644 index 46467da55..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@3x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@3x.png deleted file mode 100644 index d15ec4ec1..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-40-iphone@3x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@2x.png deleted file mode 100644 index d15ec4ec1..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@3x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@3x.png deleted file mode 100644 index a1eed3f4b..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-60-iphone@3x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad.png deleted file mode 100644 index 63dc271e4..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad@2x.png deleted file mode 100644 index e5cdb61b6..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-76-ipad@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-83.5-ipad@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-83.5-ipad@2x.png deleted file mode 100644 index 30fadf77a..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/AppIcon.appiconset/Icon-83.5-ipad@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png b/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png deleted file mode 100644 index fa7cd52c0..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png b/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png deleted file mode 100644 index 50c70f6a1..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png b/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png deleted file mode 100644 index bdc1181d9..000000000 Binary files a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png and /dev/null differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/Contents.json b/boilerplate/ios/HelloWorld/Images.xcassets/Contents.json index 97a8662eb..ed285c2e5 100644 --- a/boilerplate/ios/HelloWorld/Images.xcassets/Contents.json +++ b/boilerplate/ios/HelloWorld/Images.xcassets/Contents.json @@ -1,6 +1,6 @@ { - "info": { - "version": 1, - "author": "xcode" + "info" : { + "version" : 1, + "author" : "expo" } } diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/Contents.json b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/Contents.json new file mode 100644 index 000000000..24e14594e --- /dev/null +++ b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/Contents.json @@ -0,0 +1,30 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "image.png", + "scale": "1x" + }, + { + "idiom": "universal", + "scale": "2x" + }, + { + "idiom": "universal", + "scale": "3x" + }, + { + "idiom": "ipad", + "filename": "tablet_image.png", + "scale": "1x" + }, + { + "idiom": "ipad", + "scale": "2x" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/image.png b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/image.png new file mode 100644 index 000000000..a6b6390ab Binary files /dev/null and b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/image.png differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/tablet_image.png b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/tablet_image.png new file mode 100644 index 000000000..49bba1be3 Binary files /dev/null and b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreen.imageset/tablet_image.png differ diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/Contents.json b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/Contents.json similarity index 60% rename from boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/Contents.json rename to boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/Contents.json index 570652dfd..3cf848977 100644 --- a/boilerplate/ios/HelloWorld/Images.xcassets/BootSplashLogo.imageset/Contents.json +++ b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/Contents.json @@ -2,22 +2,20 @@ "images": [ { "idiom": "universal", - "filename": "bootsplash_logo.png", + "filename": "image.png", "scale": "1x" }, { "idiom": "universal", - "filename": "bootsplash_logo@2x.png", "scale": "2x" }, { "idiom": "universal", - "filename": "bootsplash_logo@3x.png", "scale": "3x" } ], "info": { "version": 1, - "author": "xcode" + "author": "expo" } -} +} \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/image.png b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/image.png new file mode 100644 index 000000000..31a209f6a Binary files /dev/null and b/boilerplate/ios/HelloWorld/Images.xcassets/SplashScreenBackground.imageset/image.png differ diff --git a/boilerplate/ios/HelloWorld/Info.plist b/boilerplate/ios/HelloWorld/Info.plist index 6e2265e92..100abd778 100644 --- a/boilerplate/ios/HelloWorld/Info.plist +++ b/boilerplate/ios/HelloWorld/Info.plist @@ -1,55 +1,79 @@ - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - HelloWorld - 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 - BootSplash - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + HelloWorld + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + helloworld + com.helloworld + + + + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/SplashScreen.storyboard b/boilerplate/ios/HelloWorld/SplashScreen.storyboard new file mode 100644 index 000000000..ed03a5299 --- /dev/null +++ b/boilerplate/ios/HelloWorld/SplashScreen.storyboard @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/Supporting/Expo.plist b/boilerplate/ios/HelloWorld/Supporting/Expo.plist new file mode 100644 index 000000000..64eaffaac --- /dev/null +++ b/boilerplate/ios/HelloWorld/Supporting/Expo.plist @@ -0,0 +1,14 @@ + + + + + EXUpdatesCheckOnLaunch + ALWAYS + EXUpdatesEnabled + + EXUpdatesLaunchWaitMs + 0 + EXUpdatesSDKVersion + 49.0.0 + + \ No newline at end of file diff --git a/boilerplate/ios/HelloWorld/main.m b/boilerplate/ios/HelloWorld/main.m index d645c7246..25181b6cc 100644 --- a/boilerplate/ios/HelloWorld/main.m +++ b/boilerplate/ios/HelloWorld/main.m @@ -2,9 +2,9 @@ #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/boilerplate/ios/HelloWorld/ignite-noop.swift b/boilerplate/ios/HelloWorld/noop-file.swift similarity index 100% rename from boilerplate/ios/HelloWorld/ignite-noop.swift rename to boilerplate/ios/HelloWorld/noop-file.swift diff --git a/boilerplate/ios/HelloWorldTests/HelloWorldTests.m b/boilerplate/ios/HelloWorldTests/HelloWorldTests.m deleted file mode 100644 index 884d405d6..000000000 --- a/boilerplate/ios/HelloWorldTests/HelloWorldTests.m +++ /dev/null @@ -1,66 +0,0 @@ -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React" - -@interface HelloWorldTests : XCTestCase - -@end - -@implementation HelloWorldTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; -#ifdef DEBUG - RCTSetLogFunction( - ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); -#endif - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[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; - }]; - } - -#ifdef DEBUG - RCTSetLogFunction(RCTDefaultLogFunction); -#endif - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - -@end diff --git a/boilerplate/ios/HelloWorldTests/Info.plist b/boilerplate/ios/HelloWorldTests/Info.plist deleted file mode 100644 index ba72822e8..000000000 --- a/boilerplate/ios/HelloWorldTests/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/boilerplate/ios/Podfile b/boilerplate/ios/Podfile index 871589286..2402cc34b 100644 --- a/boilerplate/ios/Podfile +++ b/boilerplate/ios/Podfile @@ -1,16 +1,11 @@ -pod_folder = Pathname.new(__FILE__).dirname.realpath - -require File.join(File.dirname(`cd #{pod_folder} && node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") -# TODO come back to this for the react_native_pods.rb to allow for hoisting -require File.join(File.dirname(`cd #{pod_folder} && node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") -require File.join(File.dirname(`cd #{pod_folder} && node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules") +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") require 'json' podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} -production = ENV["PRODUCTION"] == "1" ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' -ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = '1' if podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] == 'true' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0' install! 'cocoapods', @@ -30,7 +25,7 @@ prepare_react_native_project! # } # ``` flipper_config = FlipperConfiguration.disabled -if ENV['NO_FLIPPER'] == "1" || ENV['CI'] then +if ENV['NO_FLIPPER'] == '1' then # Explicitly disabled through environment variables flipper_config = FlipperConfiguration.disabled elsif podfile_properties.key?('ios.flipper') then @@ -54,33 +49,22 @@ target 'HelloWorld' do use_react_native!( :path => config[:reactNativePath], - :production => production, - # Hermes is now enabled by default. Disable by setting this in Podfile.properties.json. - # Upcoming versions of React Native may rely on get_default_flags(), but - # we make it explicit here to aid in the React Native upgrade process. :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', :fabric_enabled => flags[:fabric_enabled], - # Note that if you have use_frameworks! enabled, Flipper will not work if enabled - :flipper_configuration => flipper_config, # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." + :app_path => "#{Pod::Config.instance.installation_root}/..", + # Note that if you have use_frameworks! enabled, Flipper will not work if enabled + :flipper_configuration => flipper_config ) - target 'HelloWorldTests' do - inherit! :complete - # Pods for testing - end - post_install do |installer| - # https://github.com/facebook/react-native/blob/main/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) - File.delete("./.xcode.env.local") if File.exist?("./.xcode.env.local") - + # This is necessary for Xcode 14, because it signs resource bundles by default # when building for devices. installer.target_installation_results.pod_target_installation_results diff --git a/boilerplate/ios/Podfile.lock b/boilerplate/ios/Podfile.lock index 134016c4e..02cfe1d14 100644 --- a/boilerplate/ios/Podfile.lock +++ b/boilerplate/ios/Podfile.lock @@ -1,6 +1,5 @@ PODS: - boost (1.76.0) - - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - EXApplication (5.3.0): - ExpoModulesCore @@ -10,7 +9,7 @@ PODS: - ExpoModulesCore - EXFont (11.4.0): - ExpoModulesCore - - Expo (49.0.0-beta.0): + - Expo (49.0.3): - ExpoModulesCore - ExpoDevice (5.4.0): - ExpoModulesCore @@ -18,89 +17,30 @@ PODS: - ExpoModulesCore - ExpoLocalization (14.3.0): - ExpoModulesCore - - ExpoModulesCore (1.5.3): + - ExpoModulesCore (1.5.7): - RCT-Folly (= 2021.07.22.00) - React-Core - React-NativeModulesApple - React-RCTAppDelegate - ReactCommon/turbomodule/core - - EXSplashScreen (0.20.2): + - EXSplashScreen (0.20.4): - ExpoModulesCore - RCT-Folly (= 2021.07.22.00) - React-Core - - FBLazyVector (0.72.0) - - FBReactNativeSpec (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.72.0) - - RCTTypeSafety (= 0.72.0) - - React-Core (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - 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 + - FBLazyVector (0.72.3) + - FBReactNativeSpec (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.72.3) + - RCTTypeSafety (= 0.72.3) + - React-Core (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.72.0): - - hermes-engine/Pre-built (= 0.72.0) - - hermes-engine/Pre-built (0.72.0) + - hermes-engine (0.72.3): + - hermes-engine/Pre-built (= 0.72.3) + - hermes-engine/Pre-built (0.72.3) - libevent (2.1.12) - - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.07.22.00): - boost - DoubleConversion @@ -118,26 +58,26 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.72.0) - - RCTTypeSafety (0.72.0): - - FBLazyVector (= 0.72.0) - - RCTRequired (= 0.72.0) - - React-Core (= 0.72.0) - - React (0.72.0): - - React-Core (= 0.72.0) - - React-Core/DevSupport (= 0.72.0) - - React-Core/RCTWebSocket (= 0.72.0) - - React-RCTActionSheet (= 0.72.0) - - React-RCTAnimation (= 0.72.0) - - React-RCTBlob (= 0.72.0) - - React-RCTImage (= 0.72.0) - - React-RCTLinking (= 0.72.0) - - React-RCTNetwork (= 0.72.0) - - React-RCTSettings (= 0.72.0) - - React-RCTText (= 0.72.0) - - React-RCTVibration (= 0.72.0) - - React-callinvoker (0.72.0) - - React-Codegen (0.72.0): + - RCTRequired (0.72.3) + - RCTTypeSafety (0.72.3): + - FBLazyVector (= 0.72.3) + - RCTRequired (= 0.72.3) + - React-Core (= 0.72.3) + - React (0.72.3): + - React-Core (= 0.72.3) + - React-Core/DevSupport (= 0.72.3) + - React-Core/RCTWebSocket (= 0.72.3) + - React-RCTActionSheet (= 0.72.3) + - React-RCTAnimation (= 0.72.3) + - React-RCTBlob (= 0.72.3) + - React-RCTImage (= 0.72.3) + - React-RCTLinking (= 0.72.3) + - React-RCTNetwork (= 0.72.3) + - React-RCTSettings (= 0.72.3) + - React-RCTText (= 0.72.3) + - React-RCTVibration (= 0.72.3) + - React-callinvoker (0.72.3) + - React-Codegen (0.72.3): - DoubleConversion - FBReactNativeSpec - glog @@ -152,11 +92,11 @@ PODS: - React-rncore - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.72.0): + - React-Core (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.0) + - React-Core/Default (= 0.72.3) - React-cxxreact - React-hermes - React-jsi @@ -164,9 +104,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.72.0): + - React-Core/CoreModulesHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -178,9 +118,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.72.0): + - React-Core/Default (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -191,25 +131,25 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.72.0): + - React-Core/DevSupport (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.0) - - React-Core/RCTWebSocket (= 0.72.0) + - React-Core/Default (= 0.72.3) + - React-Core/RCTWebSocket (= 0.72.3) - React-cxxreact - React-hermes - React-jsi - React-jsiexecutor - - React-jsinspector (= 0.72.0) + - React-jsinspector (= 0.72.3) - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.72.0): + - React-Core/RCTActionSheetHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -221,9 +161,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.72.0): + - React-Core/RCTAnimationHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -235,9 +175,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.72.0): + - React-Core/RCTBlobHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -249,9 +189,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.72.0): + - React-Core/RCTImageHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -263,9 +203,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.72.0): + - React-Core/RCTLinkingHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -277,9 +217,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.72.0): + - React-Core/RCTNetworkHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -291,9 +231,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.72.0): + - React-Core/RCTSettingsHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -305,9 +245,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.72.0): + - React-Core/RCTTextHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -319,9 +259,9 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.72.0): + - React-Core/RCTVibrationHeaders (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -333,13 +273,13 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.72.0): + - React-Core/RCTWebSocket (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.72.0) + - React-Core/Default (= 0.72.3) - React-cxxreact - React-hermes - React-jsi @@ -347,58 +287,59 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket (= 0.6.0) + - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.72.0): + - React-CoreModules (0.72.3): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.0) - - React-Codegen (= 0.72.0) - - React-Core/CoreModulesHeaders (= 0.72.0) - - React-jsi (= 0.72.0) + - RCTTypeSafety (= 0.72.3) + - React-Codegen (= 0.72.3) + - React-Core/CoreModulesHeaders (= 0.72.3) + - React-jsi (= 0.72.3) - React-RCTBlob - - React-RCTImage (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - SocketRocket (= 0.6.0) - - React-cxxreact (0.72.0): + - React-RCTImage (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - SocketRocket (= 0.6.1) + - React-cxxreact (0.72.3): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.0) - - React-jsi (= 0.72.0) - - React-jsinspector (= 0.72.0) - - React-logger (= 0.72.0) - - React-perflogger (= 0.72.0) - - React-runtimeexecutor (= 0.72.0) - - React-debug (0.72.0) - - React-hermes (0.72.0): + - React-callinvoker (= 0.72.3) + - React-debug (= 0.72.3) + - React-jsi (= 0.72.3) + - React-jsinspector (= 0.72.3) + - React-logger (= 0.72.3) + - React-perflogger (= 0.72.3) + - React-runtimeexecutor (= 0.72.3) + - React-debug (0.72.3) + - React-hermes (0.72.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.72.0) + - React-cxxreact (= 0.72.3) - React-jsi - - React-jsiexecutor (= 0.72.0) - - React-jsinspector (= 0.72.0) - - React-perflogger (= 0.72.0) - - React-jsi (0.72.0): + - React-jsiexecutor (= 0.72.3) + - React-jsinspector (= 0.72.3) + - React-perflogger (= 0.72.3) + - React-jsi (0.72.3): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.72.0): + - React-jsiexecutor (0.72.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.72.0) - - React-jsi (= 0.72.0) - - React-perflogger (= 0.72.0) - - React-jsinspector (0.72.0) - - React-logger (0.72.0): + - React-cxxreact (= 0.72.3) + - React-jsi (= 0.72.3) + - React-perflogger (= 0.72.3) + - React-jsinspector (0.72.3) + - React-logger (0.72.3): - glog - react-native-safe-area-context (4.6.3): - RCT-Folly @@ -406,7 +347,7 @@ PODS: - RCTTypeSafety - React-Core - ReactCommon/turbomodule/core - - React-NativeModulesApple (0.72.0): + - React-NativeModulesApple (0.72.3): - hermes-engine - React-callinvoker - React-Core @@ -415,17 +356,17 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.72.0) - - React-RCTActionSheet (0.72.0): - - React-Core/RCTActionSheetHeaders (= 0.72.0) - - React-RCTAnimation (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.0) - - React-Codegen (= 0.72.0) - - React-Core/RCTAnimationHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTAppDelegate (0.72.0): + - React-perflogger (0.72.3) + - React-RCTActionSheet (0.72.3): + - React-Core/RCTActionSheetHeaders (= 0.72.3) + - React-RCTAnimation (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.3) + - React-Codegen (= 0.72.3) + - React-Core/RCTAnimationHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTAppDelegate (0.72.3): - RCT-Folly - RCTRequired - RCTTypeSafety @@ -437,54 +378,54 @@ PODS: - React-RCTNetwork - React-runtimescheduler - ReactCommon/turbomodule/core - - React-RCTBlob (0.72.0): + - React-RCTBlob (0.72.3): - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.72.0) - - React-Core/RCTBlobHeaders (= 0.72.0) - - React-Core/RCTWebSocket (= 0.72.0) - - React-jsi (= 0.72.0) - - React-RCTNetwork (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTImage (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.0) - - React-Codegen (= 0.72.0) - - React-Core/RCTImageHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - React-RCTNetwork (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTLinking (0.72.0): - - React-Codegen (= 0.72.0) - - React-Core/RCTLinkingHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTNetwork (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.0) - - React-Codegen (= 0.72.0) - - React-Core/RCTNetworkHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTSettings (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.72.0) - - React-Codegen (= 0.72.0) - - React-Core/RCTSettingsHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-RCTText (0.72.0): - - React-Core/RCTTextHeaders (= 0.72.0) - - React-RCTVibration (0.72.0): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.72.0) - - React-Core/RCTVibrationHeaders (= 0.72.0) - - React-jsi (= 0.72.0) - - ReactCommon/turbomodule/core (= 0.72.0) - - React-rncore (0.72.0) - - React-runtimeexecutor (0.72.0): - - React-jsi (= 0.72.0) - - React-runtimescheduler (0.72.0): + - React-Codegen (= 0.72.3) + - React-Core/RCTBlobHeaders (= 0.72.3) + - React-Core/RCTWebSocket (= 0.72.3) + - React-jsi (= 0.72.3) + - React-RCTNetwork (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTImage (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.3) + - React-Codegen (= 0.72.3) + - React-Core/RCTImageHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - React-RCTNetwork (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTLinking (0.72.3): + - React-Codegen (= 0.72.3) + - React-Core/RCTLinkingHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTNetwork (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.3) + - React-Codegen (= 0.72.3) + - React-Core/RCTNetworkHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTSettings (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.72.3) + - React-Codegen (= 0.72.3) + - React-Core/RCTSettingsHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-RCTText (0.72.3): + - React-Core/RCTTextHeaders (= 0.72.3) + - React-RCTVibration (0.72.3): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.72.3) + - React-Core/RCTVibrationHeaders (= 0.72.3) + - React-jsi (= 0.72.3) + - ReactCommon/turbomodule/core (= 0.72.3) + - React-rncore (0.72.3) + - React-runtimeexecutor (0.72.3): + - React-jsi (= 0.72.3) + - React-runtimescheduler (0.72.3): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) @@ -492,32 +433,30 @@ PODS: - React-debug - React-jsi - React-runtimeexecutor - - React-utils (0.72.0): + - React-utils (0.72.3): - glog - RCT-Folly (= 2021.07.22.00) - React-debug - - ReactCommon/turbomodule/bridging (0.72.0): + - ReactCommon/turbomodule/bridging (0.72.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.0) - - React-cxxreact (= 0.72.0) - - React-jsi (= 0.72.0) - - React-logger (= 0.72.0) - - React-perflogger (= 0.72.0) - - ReactCommon/turbomodule/core (0.72.0): + - React-callinvoker (= 0.72.3) + - React-cxxreact (= 0.72.3) + - React-jsi (= 0.72.3) + - React-logger (= 0.72.3) + - React-perflogger (= 0.72.3) + - ReactCommon/turbomodule/core (0.72.3): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.72.0) - - React-cxxreact (= 0.72.0) - - React-jsi (= 0.72.0) - - React-logger (= 0.72.0) - - React-perflogger (= 0.72.0) - - RNBootSplash (4.5.0): - - React-Core + - React-callinvoker (= 0.72.3) + - React-cxxreact (= 0.72.3) + - React-jsi (= 0.72.3) + - React-logger (= 0.72.3) + - React-perflogger (= 0.72.3) - RNCAsyncStorage (1.18.2): - React-Core - RNGestureHandler (2.12.0): @@ -554,10 +493,8 @@ PODS: - RNScreens (3.22.0): - React-Core - React-RCTImage - - SocketRocket (0.6.0) + - 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`) @@ -574,30 +511,9 @@ DEPENDENCIES: - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - 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`) @@ -605,7 +521,6 @@ DEPENDENCIES: - 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`) @@ -633,7 +548,6 @@ DEPENDENCIES: - 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`) - - RNBootSplash (from `../node_modules/react-native-bootsplash`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNReanimated (from `../node_modules/react-native-reanimated`) @@ -642,20 +556,9 @@ DEPENDENCIES: SPEC REPOS: trunk: - - 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: @@ -757,8 +660,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/utils" ReactCommon: :path: "../node_modules/react-native/ReactCommon" - RNBootSplash: - :path: "../node_modules/react-native-bootsplash" RNCAsyncStorage: :path: "../node_modules/@react-native-async-storage/async-storage" RNGestureHandler: @@ -772,75 +673,63 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 57d2868c099736d80fcd648bf211b4431e51a558 - CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 EXApplication: 02655a251434d564bb0e73291f5a490c74b5b76f EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1 EXFileSystem: d7f59869885cfeab3ac771e2a8d0f5ed98cd3fdb EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee - Expo: 9e72fb8ba10f6ee5e95745f69a845b16bceeef00 + Expo: d5956de70d4076190861f6730b93e75478b6faf8 ExpoDevice: 1c1b0c9cad96c292c1de73948649cfd654b2b3c0 ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d ExpoLocalization: be37fdd0b5930c6a49cd307b4542f4b426d6134c - ExpoModulesCore: c7fc9558697e1dc7efef2b4841096cd6ab2b760f - EXSplashScreen: 04ae8fa26b4954c6a49780c5653860a3613db4a4 - FBLazyVector: bb17efca94c43508cbe54fb0a35e36df30da5213 - FBReactNativeSpec: 6e7e74b1ed7f0a1a469a82a67521b33285f5fef3 - Flipper: 6edb735e6c3e332975d1b17956bcc584eccf5818 - Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c - Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 - Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b - Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 - Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 - Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 - FlipperKit: 2efad7007d6745a3f95e4034d547be637f89d3f6 + ExpoModulesCore: f8f3cac222bb0f574c77664d7e05817eaa97434b + EXSplashScreen: 89586b0961acd173b04713b7457949b063a659da + FBLazyVector: 4cce221dd782d3ff7c4172167bba09d58af67ccb + FBReactNativeSpec: c6bd9e179757b3c0ecf815864fae8032377903ef fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b - hermes-engine: c85f703623cb12d7e1d9db91afe53b3ea8aa7219 + hermes-engine: 10fbd3f62405c41ea07e71973ea61e1878d07322 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: 656ef0536dd60a9740961ade6a64ba0cb0572d2b - RCTTypeSafety: 82bd23b63f043d1a6b8e80e72fd15c08e04528a4 - React: 4f2c0b59d1a1c0ae02771deb69e5ee78999fee79 - React-callinvoker: d5aa9fa6cd6b67d6033de2cb5af6de7ae3dac6ca - React-Codegen: 57ded8852b5614bcedee54cb8644b30b41bc6f12 - React-Core: 668dad9409152ff684f52bcb125133b8fec4c941 - React-CoreModules: b02ca7a4fb869bcbe4c0ed2c939d433f13a120c5 - React-cxxreact: 2882426515cd264fac5b8a5501d2b1e8ba127544 - React-debug: 77ab539975d81d27153e2998bc1214a2473cde01 - React-hermes: 118fc1a6278dd1a4fddd627185dd21ef150c6423 - React-jsi: deef1a7418729b2e7e1b99c87e1c6d9df23c2e18 - React-jsiexecutor: 990287d74aedc4fdd08ebd80736b1a5c71b54da2 - React-jsinspector: 8d754fc957255a29d93e52fc67a895045cdc8703 - React-logger: 454ffb01980778a43b0153ee98721d0275b56616 + RCTRequired: a2faf4bad4e438ca37b2040cb8f7799baa065c18 + RCTTypeSafety: cb09f3e4747b6d18331a15eb05271de7441ca0b3 + React: 13109005b5353095c052f26af37413340ccf7a5d + React-callinvoker: c8c87bce983aa499c13cb06d4447c025a35274d6 + React-Codegen: 712d523524d89d71f1cf7cc624854941be983c4d + React-Core: 688f88b7f3a3d30b4848036223f8b07102c687e5 + React-CoreModules: 63c063a3ade8fb3b1bec5fd9a50f17b0421558c6 + React-cxxreact: 37765b4975541105b2a3322a4b473417c158c869 + React-debug: 51f11ef8db14b47f24e71c42a4916d4192972156 + React-hermes: 935ae71fb3d7654e947beba8498835cd5e479707 + React-jsi: ec628dc7a15ffea969f237b0ea6d2fde212b19dd + React-jsiexecutor: 59d1eb03af7d30b7d66589c410f13151271e8006 + React-jsinspector: b511447170f561157547bc0bef3f169663860be7 + React-logger: c5b527272d5f22eaa09bb3c3a690fee8f237ae95 react-native-safe-area-context: 36cc67648134e89465663b8172336a19eeda493d - React-NativeModulesApple: 038cd625999ff352fc13d11fd335ea7509794599 - React-perflogger: 684a11499a0589cc42135d6d5cc04d0e4e0e261a - React-RCTActionSheet: 00b0a4c382a13b834124fa3f541a7d8d1d56efb9 - React-RCTAnimation: 10c24c66fb504f2faa53f4ec0666c4568255cff9 - React-RCTAppDelegate: ba51460896227d9fb530298746eb543d38face7a - React-RCTBlob: 10814291c4e8ef09fd2ceca81825eae29ee5a4ec - React-RCTImage: 2f609dd1c80c4aec8edf2ca235cba476fdd442ec - React-RCTLinking: d7f20b7d51246bf34790ce1362d124cc1b42671b - React-RCTNetwork: 6b0133de954b5eff5e6a6294eef5fca45df7e5e8 - React-RCTSettings: 9a1f3f5f3e104c0617d953acc54e60e4bfaf11bd - React-RCTText: f5b4c03708c0283699c0dc23c7fb9f97ce7ac6bd - React-RCTVibration: fb4135690f091ac9bcfbeb8dc4388208ca0e18b1 - React-rncore: 91a21f0b3c16a5e011bc54d1e204bd6c5bfdf8e2 - React-runtimeexecutor: 56b9f7665138fe8cda0d6c210cf95ee3f625c237 - React-runtimescheduler: 24614bcd31643eacb06c78c0b9101b453d6aac47 - React-utils: c12d2e75c8bbc727939ddc4319ed95493395ed5a - ReactCommon: 517b45ed311ba9146aa8b55a8ef6617425f7448e - RNBootSplash: 364ec0f6a61d96bce40e8630d80d949c214a5749 + React-NativeModulesApple: c57f3efe0df288a6532b726ad2d0322a9bf38472 + React-perflogger: 6bd153e776e6beed54c56b0847e1220a3ff92ba5 + React-RCTActionSheet: c0b62af44e610e69d9a2049a682f5dba4e9dff17 + React-RCTAnimation: f9bf9719258926aea9ecb8a2aa2595d3ff9a6022 + React-RCTAppDelegate: e5ac35d4dbd1fae7df3a62b47db04b6a8d151592 + React-RCTBlob: c4f1e69a6ef739aa42586b876d637dab4e3b5bed + React-RCTImage: e5798f01aba248416c02a506cf5e6dfcba827638 + React-RCTLinking: f5b6227c879e33206f34e68924c458f57bbb96d9 + React-RCTNetwork: d5554fbfac1c618da3c8fa29933108ea22837788 + React-RCTSettings: 189c71e3e6146ba59f4f7e2cbeb494cf2ad42afa + React-RCTText: 19425aea9d8b6ccae55a27916355b17ab577e56e + React-RCTVibration: 388ac0e1455420895d1ca2548401eed964b038a6 + React-rncore: 755a331dd67b74662108f2d66a384454bf8dc1a1 + React-runtimeexecutor: 369ae9bb3f83b65201c0c8f7d50b72280b5a1dbc + React-runtimescheduler: 837c1bebd2f84572db17698cd702ceaf585b0d9a + React-utils: bcb57da67eec2711f8b353f6e3d33bd8e4b2efa3 + ReactCommon: 3ccb8fb14e6b3277e38c73b0ff5e4a1b8db017a9 RNCAsyncStorage: ddc4ee162bfd41b0d2c68bf2d95acd81dd7f1f93 RNGestureHandler: dec4645026e7401a0899f2846d864403478ff6a5 RNReanimated: 9f7068e43b9358a46a688d94a5a3adb258139457 RNScreens: 68fd1060f57dd1023880bf4c05d74784b5392789 - SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: 1d6727ed193122f6adaf435c3de1a768326ff83b - YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: 8796b55dba14d7004f980b54bcc9833ee45b28ce -PODFILE CHECKSUM: f38d71b4d5072d25d951c106c13e979ea5f1db62 +PODFILE CHECKSUM: 5faa1531e1f4f6e0f2b15de33eedc4f75e89b7b7 COCOAPODS: 1.12.1 diff --git a/boilerplate/ios/Podfile.properties.json b/boilerplate/ios/Podfile.properties.json index a6c86e376..de9f7b752 100644 --- a/boilerplate/ios/Podfile.properties.json +++ b/boilerplate/ios/Podfile.properties.json @@ -1,5 +1,4 @@ { - "expo.jsEngine": "hermes", - "ios.flipper": "true", - "newArchEnabled": "false" -} \ No newline at end of file + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true" +} diff --git a/boilerplate/metro.config.js b/boilerplate/metro.config.js deleted file mode 100644 index b2649b0ab..000000000 --- a/boilerplate/metro.config.js +++ /dev/null @@ -1,56 +0,0 @@ -const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); -const { getDefaultConfig: getDefaultExpoConfig } = require("@expo/metro-config") - -const config = {} -let metroConfig -let isExpo = false -try { - const Constants = require("expo-constants") - // True if the app is running in an `expo build` app or if it's running in Expo Go. - isExpo = - Constants.executionEnvironment === "standalone" || - Constants.executionEnvironment === "storeClient" -} catch {} - -if (isExpo) { - /** - * Expo metro config - * Learn more https://docs.expo.io/guides/customizing-metro - - * For one idea on how to support symlinks in Expo, see: - * https://github.com/infinitered/ignite/issues/1904#issuecomment-1054535068 - */ - metroConfig = getDefaultExpoConfig(__dirname) -} else { - metroConfig = mergeConfig(getDefaultConfig(__dirname), config); - /** - * Vanilla metro config - we're using a custom metro config because we want to support symlinks - * out of the box. This allows you to use pnpm and/or play better in a monorepo. - * - * You can safely delete this file and remove @rnx-kit/metro-* if you're not - * using PNPM or monorepo or symlinks at all. - * - * However, it doesn't hurt to have it either. - */ - // const { makeMetroConfig } = require("@rnx-kit/metro-config") - // const MetroSymlinksResolver = require("@rnx-kit/metro-resolver-symlinks") - - // metroConfig = (async () => { - // const defaultConfig = await getDefaultConfig() - // return makeMetroConfig({ - // projectRoot: __dirname, - // // watchFolders: [`${__dirname}/../..`], // for monorepos - // resolver: { - // /** - // * This custom resolver is for if you're using symlinks. - // * - // * You can disable it if you're not using pnpm or a monorepo or symlinks. - // */ - // resolveRequest: MetroSymlinksResolver(), - // assetExts: [...defaultConfig.resolver.assetExts, "bin"], - // }, - // }) - // })() -} - -module.exports = metroConfig diff --git a/boilerplate/package.json b/boilerplate/package.json index 37d33e7f6..e8d9909a6 100644 --- a/boilerplate/package.json +++ b/boilerplate/package.json @@ -4,12 +4,9 @@ "private": true, "main": "node_modules/expo/AppEntry.js", "scripts": { - "start": "react-native start", - "ios": "react-native run-ios", - "android": "react-native run-android --active-arch-only", "compile": "tsc --noEmit -p . --pretty", "format": "prettier --write \"app/**/*.{js,jsx,json,md,ts,tsx}\"", - "lint": "eslint index.js App.js app test --fix --ext .js,.ts,.tsx && npm run format", + "lint": "eslint App.tsx app test --fix --ext .js,.ts,.tsx && npm run format", "patch": "patch-package", "test": "jest", "test:watch": "jest --watch", @@ -22,10 +19,10 @@ "release:android": "cd android && rm -rf app/src/main/res/drawable-* && ./gradlew assembleRelease && cd - && echo 'APK generated in ./android/app/build/outputs/apk/release/app-release.apk'", "clean": "npx react-native-clean-project", "clean-all": "npx react-native clean-project-auto", - "expo:start": "npx expo start", - "expo:android": "npx expo start --android", - "expo:ios": "npx expo start --ios", - "expo:web": "npx expo start --web", + "start": "npx expo start", + "android": "npx expo run:android", + "ios": "npx expo run:ios", + "web": "npx expo start --web", "bundle:web": "npx expo export --platform web", "serve:web": "npx server dist" }, @@ -34,56 +31,54 @@ }, "dependencies": { "@expo-google-fonts/space-grotesk": "^0.2.2", - "@expo/metro-config": "^0.7.1", "@react-native-async-storage/async-storage": "1.18.2", "@react-navigation/bottom-tabs": "^6.3.2", "@react-navigation/native": "^6.0.2", "@react-navigation/native-stack": "^6.0.2", "apisauce": "2.1.5", "date-fns": "^2.29.2", - "expo": "49.0.0-beta.0", + "expo": "^49.0.3", "expo-application": "~5.3.0", + "expo-build-properties": "~0.8.3", "expo-constants": "~14.4.2", "expo-device": "~5.4.0", "expo-file-system": "~15.4.2", "expo-font": "~11.4.0", "expo-linking": "~5.0.2", "expo-localization": "~14.3.0", - "expo-modules-core": "~1.5.3", - "expo-splash-screen": "~0.20.2", + "expo-modules-core": "~1.5.7", + "expo-splash-screen": "~0.20.4", "expo-status-bar": "~1.6.0", "i18n-js": "3.9.2", "mobx": "6.6.0", "mobx-react-lite": "3.4.0", "mobx-state-tree": "5.1.5", "react": "18.2.0", - "react-native": "0.72.0", - "react-native-bootsplash": "4.5.0", + "react-dom": "18.2.0", + "react-native": "0.72.3", "react-native-gesture-handler": "~2.12.0", "react-native-reanimated": "~3.3.0", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", - "reactotron-mst": "3.1.4", - "reactotron-react-js": "^3.3.7", - "reactotron-react-native": "5.0.3" + "react-native-web": "~0.19.6" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", - "@react-native-community/cli-platform-ios": "^8.0.2", - "@react-native/metro-config": "^0.72.6", - "@rnx-kit/metro-config": "^1.3.5", - "@rnx-kit/metro-resolver-symlinks": "^0.1.26", "@types/i18n-js": "3.8.2", "@types/jest": "^29.2.1", - "@types/react": "~18.0.27", + "@types/react": "~18.2.14", "@types/react-test-renderer": "^18.0.0", "@typescript-eslint/eslint-plugin": "^5.59.0", "@typescript-eslint/parser": "^5.59.0", "babel-jest": "^29.2.1", - "babel-loader": "8.2.5", "babel-plugin-root-import": "^6.6.0", "eslint": "8.17.0", "eslint-config-prettier": "8.5.0", @@ -95,26 +90,26 @@ "eslint-plugin-react": "7.30.0", "eslint-plugin-react-native": "4.0.0", "expo-modules-autolinking": "~1.5.0", - "fbjs-scripts": "3.0.1", "jest": "^29.2.1", - "jest-circus": "29", - "jest-environment-node": "29", "jest-expo": "49.0.0", - "metro-react-native-babel-preset": "0.76.5", - "metro-source-map": "0.75.1", - "mocha": "6", "patch-package": "6.4.7", "postinstall-prepare": "1.0.1", "prettier": "2.8.8", - "query-string": "^7.0.1", - "react-devtools-core": "4.24.7", - "react-dom": "18.2.0", - "react-native-web": "~0.18.7", "react-test-renderer": "18.2.0", - "reactotron-core-client": "^2.8.10", + "reactotron-core-client": "2.8.11-beta.4", + "reactotron-mst": "3.1.5-beta.4", + "reactotron-react-js": "3.3.9-beta.4", + "reactotron-react-native": "5.0.4-beta.4", "regenerator-runtime": "^0.13.4", "ts-jest": "^29.1.1", - "typescript": "^5.0.4" + "typescript": "^5.1.3" + }, + "expo": { + "install": { + "exclude": [ + "typescript" + ] + } }, "resolutions": { "@types/react": "^18", diff --git a/boilerplate/tsconfig.json b/boilerplate/tsconfig.json index 78e6ad786..2da578fe1 100644 --- a/boilerplate/tsconfig.json +++ b/boilerplate/tsconfig.json @@ -18,6 +18,6 @@ "baseUrl": "./" }, "exclude": ["node_modules"], - "include": ["index.js", "App.js", "app", "test", "*.js"], + "include": ["index.js", "App.tsx", "app", "test", "*.js"], "extends": "expo/tsconfig.base" } diff --git a/docs/Folder-Structure.md b/docs/Folder-Structure.md index 27d4de93f..f3e312052 100644 --- a/docs/Folder-Structure.md +++ b/docs/Folder-Structure.md @@ -4,8 +4,9 @@ A new Ignite boilerplate project's structure looks similar to this: ``` ignite-project -├── android (if not Expo) -├── ios (if not Expo) +├── .maestro +├── android +├── ios ├── app │   ├── components │   ├── i18n @@ -22,11 +23,9 @@ ignite-project │   ├── mock-i18n.ts │   ├── mock-reactotron.ts │   ├── setup.ts -├── e2e -│   └── config.json ├── ignite │   └── templates -├── index.js +├── App.tsx ├── package.json └── README.md ``` diff --git a/docs/Generators.md b/docs/Generators.md index 607fc8917..6c8d2bdeb 100644 --- a/docs/Generators.md +++ b/docs/Generators.md @@ -93,8 +93,6 @@ By default, the generator will exit if the input-files in your templates folder Similar to app/launcher icons, the splash-screen is somewhat tricky to configure and manage due to platform (and OS version) differences. Therefore, splash-screens come preconfigured in the latest versions of Ignite boilerplate and a handy generator is provided to aid with customization. -Note, on latest vanilla-flavored Ignite projects, the awesome library [`react-native-bootsplash`](https://github.com/zoontek/react-native-bootsplash) is used for both generation and integration within the app. Using this generator with older Ignite boilerplates will result in a warning to install and configure that library. On Expo, the splash-screen is configured via `app.json`. - Unlike the app/launcher generator however, only a single input file is needed. This file, called `logo.png`, can be found and customized in the following templates folder: `ignite/templates/splash-screen`. The generator requires a single parameter for the splash-screen's background color (in hex format). @@ -107,22 +105,7 @@ npx ignite-cli generate splash-screen "#FF0000" npx ignite-cli generate splash-screen fff ``` -The generator will modify the following folders/files: - -- iOS - - - (vanilla) Updates `./ios/**/Images.xcassets/BootSplashLogo.imageset/`. - - (vanilla) Updates `./ios/**/BootSplash.storyboard`. - - (expo) Updates `./assets/images/` including the root file `./app.json`. - -- Android - - - (vanilla) Updates `./android/app/src/main/res/`. - - (vanilla) Updates `./android/app/src/main/res/values/colors.xml`. - - (expo) Updates `./assets/images/` including the root file `./app.json`. - -- Web - - (expo) Updates `./assets/images/` including the root file `./app.json`. +The generator will modify the `./assets/images/` and attempt to update `./app.json`. However, if your project is configured to use `app.config.js` or `app.config.ts`, the config changes will be output in the console for you to make them manually. You can read more about Expo's dynamic configuration [here](https://docs.expo.dev/workflow/configuration/#dynamic-configuration-with-appconfigjs). Logo size transformations are predetermined based on platform. The defaults are meant to work in _most_ cases. However, you can adjust the logo transformation size according to your needs by using flags: diff --git a/src/commands/generate/app-icon.ts b/src/commands/generate/app-icon.ts index 7d072661d..6a132858c 100644 --- a/src/commands/generate/app-icon.ts +++ b/src/commands/generate/app-icon.ts @@ -1,6 +1,6 @@ import { GluegunToolbox } from "gluegun" import { generateAppIcons, runGenerator, validateAppIconGenerator } from "../../tools/generators" -import { command, heading, p, warning } from "../../tools/pretty" +import { heading, p, warning } from "../../tools/pretty" module.exports = { alias: ["launcher-icon"], @@ -14,26 +14,14 @@ module.exports = { async function generate(toolbox: GluegunToolbox) { const { parameters } = toolbox - // what generator are we running? - const generator = parameters.command.toLowerCase() - - // we need a platform to generate app-icons - const option = parameters.first - if (!option) { - warning(`⚠️ Please specify which icons you would like to generate:`) - p() - command(`ignite g ${generator} all|ios|android|expo`) - return - } - - const { isValid, messages } = await validateAppIconGenerator(option as any, parameters.options) + const { isValid, messages } = await validateAppIconGenerator("expo", parameters.options) if (!isValid) { messages.forEach((message) => warning(message)) return } - const isSuccessful = await generateAppIcons(option as any) + const isSuccessful = await generateAppIcons("expo") if (isSuccessful) { heading(`App icons generated!`) diff --git a/src/commands/new.ts b/src/commands/new.ts index 1b9b8543d..a0ad11277 100644 --- a/src/commands/new.ts +++ b/src/commands/new.ts @@ -77,12 +77,6 @@ export interface Options { * @default false */ overwrite?: boolean - /** - * Input Source: `parameter.option` - * @deprecated this option is deprecated. Ignite sets you up to run native or Expo - * @default undefined - */ - expo?: boolean /** * Package manager to install dependencies with * @@ -124,6 +118,11 @@ export interface Options { * @default false */ yes?: boolean + /** + * Whether or not to opt into React Native's New Architecture + * @default false + */ + experimentalNewArch?: boolean } export default { @@ -347,14 +346,21 @@ export default { } // #endregion - // #region Expo - // show warning about --expo going away - const expo = boolFlag(options.expo) - if (expo) { - warning( - " Detected --expo, this option is deprecated. Ignite sets you up to run native or Expo!", - ) - p() + // #region Prompt to enable New Architecture + const defaultNewArch = false + let experimentalNewArch = useDefault(options.experimentalNewArch) + ? defaultNewArch + : boolFlag(options.experimentalNewArch) + if (experimentalNewArch === undefined) { + const newArchResponse = await prompt.ask<{ experimentalNewArch: boolean }>(() => ({ + type: "confirm", + name: "experimentalNewArch", + message: "❗EXPERIMENTAL❗Would you like to enable the New Architecture?", + initial: defaultNewArch, + format: prettyPrompt.format.boolean, + prefix, + })) + experimentalNewArch = newArchResponse.experimentalNewArch } // #endregion @@ -552,6 +558,21 @@ export default { } // #endregion + // #region Enable New Architecture if requested + if (experimentalNewArch === true) { + startSpinner(" Enabling New Architecture") + try { + let appJsonRaw = read("app.json") + appJsonRaw = appJsonRaw.replace(/"newArchEnabled": false/g, '"newArchEnabled": true') + const appJson = JSON.parse(appJsonRaw) + write("./app.json", appJson) + } catch (e) { + log(e) + p(yellow("Unable to enable New Architecture.")) + } + stopSpinner(" Enabling New Architecture", "🆕") + } + // #region Create Git Repository and Initial Commit // commit any changes if (git === true) { @@ -608,10 +629,10 @@ export default { git, installDeps, overwrite, - expo, packager: packagerName, targetPath, removeDemo, + experimentalNewArch, useCache, y: yname, yes: yname, @@ -662,12 +683,6 @@ export default { } else { command(`${packager.runCmd("android", packagerOptions)}`) } - - p2() - p2("With Expo:") - command(`cd ${projectName}`) - if (!installDeps) command(packager.installCmd({ packagerName })) - command(`${packager.runCmd("expo:start", packagerOptions)}`) p2() p2() // #endregion @@ -692,7 +707,7 @@ function buildCliCommand(args: { type Flag = keyof typeof flags type FlagEntry = [key: Flag, value: Options[Flag]] - const privateFlags: Flag[] = ["b", "boilerplate", "debug", "expo", "useCache", "y", "yes"] + const privateFlags: Flag[] = ["b", "boilerplate", "debug", "useCache", "y", "yes"] const stringFlag = ([key, value]: FlagEntry) => `--${kebabCase(key)}=${value}` const booleanFlag = ([key, value]: FlagEntry) => diff --git a/src/tools/generators.ts b/src/tools/generators.ts index 3252cee1a..7f53854e7 100644 --- a/src/tools/generators.ts +++ b/src/tools/generators.ts @@ -3,7 +3,7 @@ import { filesystem, GluegunToolbox, GluegunPatchingPatchOptions, patching, stri import { Options } from "gluegun/build/types/domain/options" import * as sharp from "sharp" import * as YAML from "yaml" -import { command, direction, heading, igniteHeading, p, warning } from "./pretty" +import { command, direction, heading, igniteHeading, link, p, warning } from "./pretty" const NEW_LINE = filesystem.eol @@ -504,7 +504,7 @@ export async function generateAppIcons(option: `${Platforms}` | "all") { // start the generation process for each platform // looping instead of mapping allows us to await for each platform sequentially for (const o of options) { - const optionProjectName = { ios: "iOS", android: "Android", expo: "Expo" }[o] + const optionProjectName = { expo: "Expo" }[o] // find the output path for platform and check if it exists // iOS is a bit weird since it's named differently for each project @@ -633,9 +633,9 @@ export async function generateAppIcons(option: `${Platforms}` | "all") { expo: () => { const merge = require("deepmerge-json") const sourceExpoConfig = require(path(boilerplateDirPath, "app.json"))?.expo - const outputAppConfig = require(path(cwd, "app.json")) + const outputAppConfig = path(cwd, "app.json") - const updatedConfig = merge(outputAppConfig, { + const iconConfig = { expo: { icon: sourceExpoConfig?.icon, android: { @@ -645,9 +645,32 @@ export async function generateAppIcons(option: `${Platforms}` | "all") { ios: { icon: sourceExpoConfig?.ios?.icon }, web: { favicon: sourceExpoConfig?.web?.favicon }, }, - }) + } + + // Check if app.json exists - however, could also be `app.config.js` or `app.config.ts` in + // which case we should output a warning of what files to update + if (!exists(outputAppConfig)) { + const appConfigFiles = find(cwd, { matching: "app.config.*" }) + if (appConfigFiles.length > 0) { + warning( + `⚠️ No "app.json" found at "${outputAppConfig}". It looks like you are using a dynamic configuration! Learn more at ${link( + "https://docs.expo.dev/workflow/configuration/#dynamic-configuration-with-appconfigjs", + )}`, + ) + warning(`⚠️ Please add the following to your app.config.js manually:`) + JSON.stringify(iconConfig, null, 2) + .split("\n") + .map((line) => p(` ${line}`)) + } else { + warning(`⚠️ No "app.json" found at "${outputAppConfig}". Skipping...`) + } + + return + } + + const updatedConfig = merge(require(outputAppConfig), iconConfig) - write(path(cwd, "app.json"), updatedConfig) + write(path(cwd, "app.json"), JSON.stringify(updatedConfig, null, 2) + "\n") direction(`✅ app.json`) }, }[o] @@ -755,92 +778,8 @@ export async function generateSplashScreen(options: { const inputFilePath = path(templatesDir(), "splash-screen", "logo.png") const expoOutputDirPath = path(cwd, "assets/images") const isExpoOutputDirExists = exists(expoOutputDirPath) === "dir" - const bootsplashCliPath = path( - cwd, - "node_modules/react-native-bootsplash/dist/commonjs/generate.js", - ) - const isBootsplashCliInstalled = exists(bootsplashCliPath) === "file" - const optionGenerationSuccesses = [] - - async function generateForVanilla(type: "ios" | "android", size: number) { - const typeName = { ios: "iOS", android: "Android" }[type] - - const bootsplashOutputPath = { - android: path(cwd, "android/app"), - ios: (function () { - const searchPath = path(cwd, "ios") - - if (!exists(searchPath)) return searchPath - - const xcodeprojPath = find(searchPath, { - directories: true, - files: false, - matching: "*.xcodeproj", - recursive: false, - })?.[0] - if (!xcodeprojPath) return searchPath - - return xcodeprojPath.replace(/.xcodeproj$/, "") - })(), - }[type] - - const isBootsplashOutputPathExists = exists(bootsplashOutputPath) === "dir" - - heading(`Generating ${typeName} splash screen...`) - - if (!isBootsplashOutputPathExists) { - warning( - `⚠️ No output directory found for "${typeName}" at "${bootsplashOutputPath}". Skipping...`, - ) - return - } - - if (!isBootsplashCliInstalled) { - warning( - `⚠️ If you are attempting to generate a splash screen for bare/vanilla ${typeName} react-native project, please install and configure the "react-native-bootsplash" package. Skipping...`, - ) - return - } - - const { generate } = require(bootsplashCliPath) || {} - const logFn = console.log - const outputFileNames: string[] = [] - - console.log = function (log: string) { - if (typeof log !== "string") return - - const filePathMatch = log.match(/(?:android|ios)\/.*\.(?:png|storyboard|xml)/) - - if (!filePathMatch) return - - outputFileNames.push(`✅ ${filePathMatch[0]}`) - } - - try { - await generate({ - android: type === "android" && { sourceDir: bootsplashOutputPath }, - ios: type === "ios" && { projectPath: bootsplashOutputPath }, - workingPath: cwd, - logoPath: inputFilePath, - assetsPath: null, - backgroundColor, - flavor: "main", - logoWidth: size, - }) - - console.log = logFn - - outputFileNames.forEach(direction) - optionGenerationSuccesses.push(true) - } catch (error) { - console.log = logFn - - warning( - `⚠️ Something went wrong generating splash screen for ${typeName}, please file an issue on GitHub. Skipping...`, - ) - } - } + const optionGenerationSuccesses = [] async function generateForExpo( type: "ios" | "android" | "web" | "all", @@ -874,9 +813,6 @@ export async function generateSplashScreen(options: { } } - await generateForVanilla("ios", iosSize) - await generateForVanilla("android", androidSize) - heading(`Generating Expo splash screens (Android, iOS, and Web)...`) if (isExpoOutputDirExists) { await generateForExpo("ios", iosSize, [ @@ -893,9 +829,9 @@ export async function generateSplashScreen(options: { const boilerplateDirPath = path(igniteCliRootDir(), "boilerplate") const merge = require("deepmerge-json") const sourceExpoConfig = require(path(boilerplateDirPath, "app.json"))?.expo - const outputAppConfig = require(path(cwd, "app.json")) + const outputAppConfig = path(cwd, "app.json") - const updatedConfig = merge(outputAppConfig, { + const splashConfig = { expo: { splash: { backgroundColor, @@ -924,9 +860,32 @@ export async function generateSplashScreen(options: { }, }, }, - }) + } + + // Check if app.json exists - however, could also be `app.config.js` or `app.config.ts` in + // which case we should output a warning of what files to update + if (!exists(outputAppConfig)) { + const appConfigFiles = find(cwd, { matching: "app.config.*" }) + if (appConfigFiles.length > 0) { + warning( + `⚠️ No "app.json" found at "${outputAppConfig}". It looks like you are using a dynamic configuration! Learn more at ${link( + "https://docs.expo.dev/workflow/configuration/#dynamic-configuration-with-appconfigjs", + )}`, + ) + warning(`⚠️ Please add the following to your app.config.js manually:`) + JSON.stringify(splashConfig, null, 2) + .split("\n") + .map((line) => p(` ${line}`)) + } else { + warning(`⚠️ No "app.json" found at "${outputAppConfig}". Skipping...`) + } + + return + } + + const updatedConfig = merge(require(outputAppConfig), splashConfig) - write(path(cwd, "app.json"), updatedConfig) + write(path(cwd, "app.json"), JSON.stringify(updatedConfig, null, 2) + "\n") direction(`✅ app.json`) } else { warning(`⚠️ No output directory found for "Expo" at "${expoOutputDirPath}". Skipping...`) diff --git a/src/tools/react-native.ts b/src/tools/react-native.ts index eb309ba64..35ce62ff3 100644 --- a/src/tools/react-native.ts +++ b/src/tools/react-native.ts @@ -89,7 +89,8 @@ export async function renameReactNativeApp( await Promise.allSettled([ rename(`ios/${oldName}.xcodeproj/xcshareddata/xcschemes/${oldName}.xcscheme`, `${newName}.xcscheme`), rename(`ios/${oldName}Tests/${oldName}Tests.m`, `${newName}Tests.m`), - rename(`ios/${oldName}-Bridging-Header.h`, `${newName}-Bridging-Header.h`), + rename(`ios/${oldName}/${oldName}-Bridging-Header.h`, `${newName}-Bridging-Header.h`), + rename(`ios/${oldName}/${oldName}.entitlements`, `${newName}.entitlements`), rename(`ios/${oldName}.xcworkspace`, `${newName}.xcworkspace`), rename(`ios/${oldName}`, `${newName}`), ]) @@ -129,7 +130,6 @@ export async function renameReactNativeApp( const filesToPatch = [ `app.json`, `package.json`, - `index.js`, `android/settings.gradle`, `android/app/_BUCK`, `android/app/BUCK`, diff --git a/test/vanilla/ignite-new.test.ts b/test/vanilla/ignite-new.test.ts index b8d0aa3da..9716d7f85 100644 --- a/test/vanilla/ignite-new.test.ts +++ b/test/vanilla/ignite-new.test.ts @@ -145,31 +145,14 @@ describe("ignite new", () => { ) // app-icons - const allAppIcons = ["android", "ios", "expo"].reduce((acc: string[], type) => { - const searchPath = { - android: "android/app/src/main/res", - ios: "ios", - expo: "assets/images", - }[type] as string - - const matchString = { - android: "ic_launch*.png", - ios: `Icon-*.png`, - expo: "app-icon*.png", - }[type] - - try { - const iconsMatches = filesystem.find(filesystem.path(appPath, searchPath), { - directories: false, - files: true, - matching: matchString, - }) - - return [...acc, ...iconsMatches] - } catch (error) { - return acc - } - }, []) + const iconSearchPath = "assets/images" + const iconMatchString = "app-icon*.png" + + const allAppIcons = filesystem.find(filesystem.path(appPath, iconSearchPath), { + directories: false, + files: true, + matching: iconMatchString, + }) allAppIcons.forEach((i) => { expect(filesystem.exists(i) === "file").toBe(true) @@ -178,27 +161,12 @@ describe("ignite new", () => { }) const appIconGen = await runIgnite( - `generate app-icon all --skip-source-equality-validation`, + `generate app-icon --skip-source-equality-validation`, runOpts, ) expect(appIconGen).toContain(`Generating Expo app icons...`) - const iosProjectExists = filesystem.exists(filesystem.path(appPath, "ios")) - const androidProjectExists = filesystem.exists(filesystem.path(appPath, "android")) - - if (androidProjectExists) { - expect(appIconGen).toContain(`Generating Android app icons...`) - } else { - expect(appIconGen).toContain(`No output directory found for "Android"`) - } - - if (iosProjectExists) { - expect(appIconGen).toContain(`Generating iOS app icons...`) - } else { - expect(appIconGen).toContain(`No output directory found for "iOS"`) - } - allAppIcons.forEach((i) => { expect(filesystem.exists(i) === "file").toBe(true) }) @@ -222,31 +190,14 @@ describe("ignite new", () => { }) // splash-screen - const splashScreenAssets = ["android", "ios", "expo"].reduce((acc: string[], type) => { - const searchPath = { - android: "android/app/src/main/res", - ios: "ios", - expo: "assets/images", - }[type] as string - - const matchString = { - android: "bootsplash*.png", - ios: `bootsplash*.png`, - expo: "splash-logo*.png", - }[type] - - try { - const splashMatches = filesystem.find(filesystem.path(appPath, searchPath), { - directories: false, - files: true, - matching: matchString, - }) - - return [...acc, ...splashMatches] - } catch (error) { - return acc - } - }, []) + const splashSearchPath = "assets/images" + const splashMatchString = "splash-logo*.png" + + const splashScreenAssets = filesystem.find(filesystem.path(appPath, splashSearchPath), { + directories: false, + files: true, + matching: splashMatchString, + }) splashScreenAssets.forEach((i) => { expect(filesystem.exists(i) === "file").toBe(true) @@ -284,28 +235,11 @@ describe("ignite new", () => { expect(splashScreenGen).toContain(`Generating Expo splash screens`) - if (androidProjectExists) { - expect(splashScreenGen).toContain(`Generating Android splash screen...`) - } else { - expect(splashScreenGen).toContain(`No output directory found for "Android"`) - } - - if (iosProjectExists) { - expect(splashScreenGen).toContain(`Generating iOS splash screen...`) - } else { - expect(splashScreenGen).toContain(`No output directory found for "iOS"`) - } - splashScreenAssets.forEach((i) => { expect(filesystem.exists(i) === "file").toBe(true) }) - verifySplashScreenColor("android", `#000000`) verifySplashScreenColor("expo", `#000000`) - verifySplashScreenColor( - "ios", - `red="0.00000000000000" green="0.00000000000000" blue="0.00000000000000"`, - ) const inputFile = filesystem.path(appPath, "ignite/templates/splash-screen/logo.png") expect(filesystem.exists(inputFile) === "file").toBe(true) @@ -318,14 +252,6 @@ describe("ignite new", () => { // #region Assert Changes Can Be Commit To Git // commit the change await run(`git add ./app/models ./app/components ./app.json ./assets/images`, runOpts) - if (iosProjectExists) { - await run(`git add ./ios/Foo/Images.xcassets/AppIcon.appiconset`, runOpts) - await run(`git add ./ios/Foo/Images.xcassets/BootSplashLogo.imageset`, runOpts) - await run(`git add ./ios/Foo/BootSplash.storyboard`, runOpts) - } - if (androidProjectExists) { - await run(`git add ./android/app/src/main/res`, runOpts) - } await run(`git commit -m "generated test components & assets"`, runOpts) // #endregion @@ -343,7 +269,7 @@ describe("ignite new", () => { }) async function checkForLeftoverHelloWorld(filePath: string) { - const ignoreFolders = ["/xcuserdata", ".git", "node_modules", "Pods", "/build"] + const ignoreFolders = ["/xcuserdata", ".git", "node_modules", "Pods", "/build", ".expo"] // ignore some folders if (!ignoreFolders.every((f) => !filePath.includes(f))) return