From bea8988a823a244ba06cb48d496582484aa9313d Mon Sep 17 00:00:00 2001 From: Eric Samelson Date: Tue, 14 Dec 2021 19:50:06 -0800 Subject: [PATCH 1/5] fix initializeReactNativeApp function in SDK 44 --- .../build/withDevLauncherAppDelegate.js | 26 ++++++- .../AppDelegate-expo-modules-sdk-44.m | 76 +++++++++++++++++++ .../plugin/src/withDevLauncherAppDelegate.ts | 29 ++++++- 3 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 packages/expo-dev-launcher/plugin/src/__tests__/fixtures/AppDelegate-expo-modules-sdk-44.m diff --git a/packages/expo-dev-launcher/plugin/build/withDevLauncherAppDelegate.js b/packages/expo-dev-launcher/plugin/build/withDevLauncherAppDelegate.js index b54360ef861a1..0c49ddc01c296 100644 --- a/packages/expo-dev-launcher/plugin/build/withDevLauncherAppDelegate.js +++ b/packages/expo-dev-launcher/plugin/build/withDevLauncherAppDelegate.js @@ -157,6 +157,20 @@ const DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION = (viewContro return bridge; } `; +const DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44 = ` +- (RCTBridge *)initializeReactNativeApp:(NSDictionary *)launchOptions +{ + RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; + rootView.backgroundColor = [UIColor whiteColor]; + UIViewController *rootViewController = [self.reactDelegate createRootViewController]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + + return bridge; + } +`; function addImports(appDelegate, shouldAddUpdatesIntegration) { if (!appDelegate.includes(DEV_LAUNCHER_APP_DELEGATE_IOS_IMPORT) && !appDelegate.includes(DEV_LAUNCHER_UPDATES_APP_DELEGATE_IOS_IMPORT)) { @@ -212,10 +226,13 @@ function modifyLegacyAppDelegate(appDelegate, expoUpdatesVersion = null) { exports.modifyLegacyAppDelegate = modifyLegacyAppDelegate; function modifyAppDelegate(appDelegate, expoUpdatesVersion = null) { const shouldAddUpdatesIntegration = expoUpdatesVersion != null && semver_1.default.gt(expoUpdatesVersion, '0.6.0'); - if (!DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_REGEX.test(appDelegate)) { + if (!DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_REGEX.test(appDelegate) && + !appDelegate.includes(DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44)) { let initToRemove; + let shouldAddSDK44Init = false; if (DEV_LAUNCHER_INIT_TO_REMOVE_SDK_44.test(appDelegate)) { initToRemove = DEV_LAUNCHER_INIT_TO_REMOVE_SDK_44; + shouldAddSDK44Init = true; } else if (DEV_LAUNCHER_INIT_TO_REMOVE.test(appDelegate)) { initToRemove = DEV_LAUNCHER_APP_DELEGATE_BRIDGE; @@ -228,9 +245,10 @@ function modifyAppDelegate(appDelegate, expoUpdatesVersion = null) { viewControllerInit = p1; return DEV_LAUNCHER_NEW_INIT; }); - appDelegate = (0, utils_1.addLines)(appDelegate, '@implementation AppDelegate', 1, [ - DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION(viewControllerInit), - ]); + const initToAdd = shouldAddSDK44Init + ? DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44 + : DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION(viewControllerInit); + appDelegate = (0, utils_1.addLines)(appDelegate, '@implementation AppDelegate', 1, [initToAdd]); } else { config_plugins_1.WarningAggregator.addWarningIOS('expo-dev-launcher', `Failed to modify AppDelegate init function. diff --git a/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/AppDelegate-expo-modules-sdk-44.m b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/AppDelegate-expo-modules-sdk-44.m new file mode 100644 index 0000000000000..dd9463bda0e4c --- /dev/null +++ b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/AppDelegate-expo-modules-sdk-44.m @@ -0,0 +1,76 @@ +#import "AppDelegate.h" + +#import +#import +#import +#import +#import + +#if defined(FB_SONARKIT_ENABLED) && __has_include() +#import +#import +#import +#import +#import +#import + +static void InitializeFlipper(UIApplication *application) { + FlipperClient *client = [FlipperClient sharedClient]; + SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; + [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; + [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; + [client addPlugin:[FlipperKitReactPlugin new]]; + [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; + [client start]; +} +#endif + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ +#if defined(FB_SONARKIT_ENABLED) && __has_include() + InitializeFlipper(application); +#endif + + RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; + rootView.backgroundColor = [UIColor whiteColor]; + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [self.reactDelegate createRootViewController]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + + [super application:application didFinishLaunchingWithOptions:launchOptions]; + + return YES; + } + +- (NSArray> *)extraModulesForBridge:(RCTBridge *)bridge +{ + // If you'd like to export some custom RCTBridgeModules, add them here! + return @[]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { + #ifdef DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; + #else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; + #endif +} + +// Linking API +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { + return [RCTLinkingManager application:application openURL:url options:options]; +} + +// Universal Links +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { + return [RCTLinkingManager application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler]; +} + +@end diff --git a/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts b/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts index ab5c1997ffa09..09306c59680a8 100644 --- a/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts +++ b/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts @@ -176,6 +176,21 @@ const DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION = ( } `; +const DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44 = ` +- (RCTBridge *)initializeReactNativeApp:(NSDictionary *)launchOptions +{ + RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil]; + rootView.backgroundColor = [UIColor whiteColor]; + UIViewController *rootViewController = [self.reactDelegate createRootViewController]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + + return bridge; + } +`; + function addImports(appDelegate: string, shouldAddUpdatesIntegration: boolean): string { if ( !appDelegate.includes(DEV_LAUNCHER_APP_DELEGATE_IOS_IMPORT) && @@ -273,10 +288,15 @@ export function modifyAppDelegate(appDelegate: string, expoUpdatesVersion: strin const shouldAddUpdatesIntegration = expoUpdatesVersion != null && semver.gt(expoUpdatesVersion, '0.6.0'); - if (!DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_REGEX.test(appDelegate)) { + if ( + !DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_REGEX.test(appDelegate) && + !appDelegate.includes(DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44) + ) { let initToRemove; + let shouldAddSDK44Init = false; if (DEV_LAUNCHER_INIT_TO_REMOVE_SDK_44.test(appDelegate)) { initToRemove = DEV_LAUNCHER_INIT_TO_REMOVE_SDK_44; + shouldAddSDK44Init = true; } else if (DEV_LAUNCHER_INIT_TO_REMOVE.test(appDelegate)) { initToRemove = DEV_LAUNCHER_APP_DELEGATE_BRIDGE; } @@ -289,9 +309,10 @@ export function modifyAppDelegate(appDelegate: string, expoUpdatesVersion: strin viewControllerInit = p1; return DEV_LAUNCHER_NEW_INIT; }); - appDelegate = addLines(appDelegate, '@implementation AppDelegate', 1, [ - DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION(viewControllerInit), - ]); + const initToAdd = shouldAddSDK44Init + ? DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION_SDK_44 + : DEV_LAUNCHER_INITIALIZE_REACT_NATIVE_APP_FUNCTION_DEFINITION(viewControllerInit); + appDelegate = addLines(appDelegate, '@implementation AppDelegate', 1, [initToAdd]); } else { WarningAggregator.addWarningIOS( 'expo-dev-launcher', From 7cd335bad1faa48076df5a99c4b1489db649bc1e Mon Sep 17 00:00:00 2001 From: Eric Samelson Date: Tue, 14 Dec 2021 19:50:26 -0800 Subject: [PATCH 2/5] fix wrong string bug --- .../expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts b/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts index 09306c59680a8..85b2f90137ddc 100644 --- a/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts +++ b/packages/expo-dev-launcher/plugin/src/withDevLauncherAppDelegate.ts @@ -298,7 +298,7 @@ export function modifyAppDelegate(appDelegate: string, expoUpdatesVersion: strin initToRemove = DEV_LAUNCHER_INIT_TO_REMOVE_SDK_44; shouldAddSDK44Init = true; } else if (DEV_LAUNCHER_INIT_TO_REMOVE.test(appDelegate)) { - initToRemove = DEV_LAUNCHER_APP_DELEGATE_BRIDGE; + initToRemove = DEV_LAUNCHER_INIT_TO_REMOVE; } if (initToRemove) { From 4ca5ff72ef3abcc30cb7936eaf9c4b97fed9a5ad Mon Sep 17 00:00:00 2001 From: Eric Samelson Date: Tue, 14 Dec 2021 19:58:19 -0800 Subject: [PATCH 3/5] fix tests for MainActivity --- .../withDevLauncher-test.ts.snap | 62 +++++++++++++++++-- .../fixtures/MainActivity-expo-modules.java | 55 ++++++++++++++++ .../MainActivity-with-on-new-intent.java | 11 ++++ .../src/__tests__/withDevLauncher-test.ts | 14 ++++- .../plugin/src/withDevLauncher.ts | 2 +- 5 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-expo-modules.java diff --git a/packages/expo-dev-launcher/plugin/src/__tests__/__snapshots__/withDevLauncher-test.ts.snap b/packages/expo-dev-launcher/plugin/src/__tests__/__snapshots__/withDevLauncher-test.ts.snap index 128c338487eda..7a20524460ec1 100644 --- a/packages/expo-dev-launcher/plugin/src/__tests__/__snapshots__/withDevLauncher-test.ts.snap +++ b/packages/expo-dev-launcher/plugin/src/__tests__/__snapshots__/withDevLauncher-test.ts.snap @@ -3,7 +3,14 @@ exports[`modifyJavaMainActivity modifies the MainActivity file for dev-launcher 1`] = ` "import android.content.Intent; import expo.modules.devlauncher.DevLauncherController; +import android.os.Build; +import android.os.Bundle; + import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; + +import expo.modules.ReactActivityDelegateWrapper; public class MainActivity extends ReactActivity { @@ -15,13 +22,49 @@ public class MainActivity extends ReactActivity { super.onNewIntent(intent); } + @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 \\"react-native-project\\"; + return \\"main\\"; + } + + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return DevLauncherController.wrapReactActivityDelegate(this, () -> new ReactActivityDelegateWrapper(this, + new ReactActivityDelegate(this, getMainComponentName()) + )); + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + @Override + public void invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed(); + } + return; + } + + // Use the default back button implementation on Android S + // because it's doing more than {@link Activity#moveTaskToBack} in fact. + super.invokeDefaultOnBackPressed(); } } " @@ -31,6 +74,10 @@ exports[`modifyJavaMainActivity modifies the MainActivity file for dev-launcher "import android.content.Intent; import expo.modules.devlauncher.DevLauncherController; import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; + +import expo.modules.ReactActivityDelegateWrapper; public class MainActivity extends ReactActivity { /** @@ -42,6 +89,13 @@ public class MainActivity extends ReactActivity { return \\"react-native-project\\"; } + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return DevLauncherController.wrapReactActivityDelegate(this, () -> new ReactActivityDelegateWrapper(this, + new ReactActivityDelegate(this, getMainComponentName()) + )); + } + @Override protected void onNewIntent(Intent intent) { if (DevLauncherController.tryToHandleIntent(this, intent)) { diff --git a/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-expo-modules.java b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-expo-modules.java new file mode 100644 index 0000000000000..4a95e84529e57 --- /dev/null +++ b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-expo-modules.java @@ -0,0 +1,55 @@ +import android.os.Build; +import android.os.Bundle; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; + +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. + */ + @Override + protected String getMainComponentName() { + return "main"; + } + + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegateWrapper(this, + new ReactActivityDelegate(this, getMainComponentName()) + ); + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + @Override + public void invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed(); + } + return; + } + + // Use the default back button implementation on Android S + // because it's doing more than {@link Activity#moveTaskToBack} in fact. + super.invokeDefaultOnBackPressed(); + } +} diff --git a/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-with-on-new-intent.java b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-with-on-new-intent.java index a9039a3a052d4..872ed838c5d67 100644 --- a/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-with-on-new-intent.java +++ b/packages/expo-dev-launcher/plugin/src/__tests__/fixtures/MainActivity-with-on-new-intent.java @@ -1,4 +1,8 @@ import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; + +import expo.modules.ReactActivityDelegateWrapper; public class MainActivity extends ReactActivity { /** @@ -10,6 +14,13 @@ protected String getMainComponentName() { return "react-native-project"; } + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegateWrapper(this, + new ReactActivityDelegate(this, getMainComponentName()) + ); + } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/packages/expo-dev-launcher/plugin/src/__tests__/withDevLauncher-test.ts b/packages/expo-dev-launcher/plugin/src/__tests__/withDevLauncher-test.ts index 31dc140f890ad..75f97ae06e226 100644 --- a/packages/expo-dev-launcher/plugin/src/__tests__/withDevLauncher-test.ts +++ b/packages/expo-dev-launcher/plugin/src/__tests__/withDevLauncher-test.ts @@ -4,6 +4,9 @@ import path from 'path'; import { modifyJavaMainActivity } from '../withDevLauncher'; describe(modifyJavaMainActivity, () => { + /** + * The config plugin cannot currently handle projects created with react-native init + * it(`modifies the MainActivity file for dev-launcher`, () => { const fixture = fs.readFileSync( path.join(__dirname, 'fixtures', 'MainActivity-react-native.java'), @@ -11,6 +14,15 @@ describe(modifyJavaMainActivity, () => { ); expect(modifyJavaMainActivity(fixture)).toMatchSnapshot(); }); + */ + + it(`modifies the MainActivity file for dev-launcher`, () => { + const fixture = fs.readFileSync( + path.join(__dirname, 'fixtures', 'MainActivity-expo-modules.java'), + 'utf8' + ); + expect(modifyJavaMainActivity(fixture)).toMatchSnapshot(); + }); it(`modifies the MainActivity file for dev-launcher when onNewIntent exists`, () => { const fixture = fs.readFileSync( @@ -22,7 +34,7 @@ describe(modifyJavaMainActivity, () => { it(`modifying MainActivity twice doesn't change the content`, () => { const firstModification = fs.readFileSync( - path.join(__dirname, 'fixtures', 'MainActivity-react-native.java'), + path.join(__dirname, 'fixtures', 'MainActivity-expo-modules.java'), 'utf8' ); modifyJavaMainActivity(firstModification); diff --git a/packages/expo-dev-launcher/plugin/src/withDevLauncher.ts b/packages/expo-dev-launcher/plugin/src/withDevLauncher.ts index f97e47c8e0ee0..52b452b6fd632 100644 --- a/packages/expo-dev-launcher/plugin/src/withDevLauncher.ts +++ b/packages/expo-dev-launcher/plugin/src/withDevLauncher.ts @@ -205,7 +205,7 @@ export function modifyJavaMainActivity(content: string): string { WarningAggregator.addWarningAndroid( 'expo-dev-launcher', `Failed to wrap 'ReactActivityDelegate' -See the expo-dev-client installation instructions to modify your MainApplication.java manually: ${InstallationPage}` +See the expo-dev-client installation instructions to modify your MainActivity.java manually: ${InstallationPage}` ); return content; } From 217fdefd88700d1a9abd8e0a2c81a1991c24f3a0 Mon Sep 17 00:00:00 2001 From: Eric Samelson Date: Tue, 14 Dec 2021 20:20:27 -0800 Subject: [PATCH 4/5] changelog --- packages/expo-dev-launcher/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/expo-dev-launcher/CHANGELOG.md b/packages/expo-dev-launcher/CHANGELOG.md index 7ae35898d57c9..ede0ce3e0fb93 100644 --- a/packages/expo-dev-launcher/CHANGELOG.md +++ b/packages/expo-dev-launcher/CHANGELOG.md @@ -12,6 +12,7 @@ - Fix plugin when `expo-updates` is not present. ([#15541](https://github.com/expo/expo/pull/15541) by [@esamelson](https://github.com/esamelson)) - Include expo-platform header in manifest requests. ([#15563](https://github.com/expo/expo/pull/15563) by [@esamelson](https://github.com/esamelson)) - Fix plugin compatibility with SDK 44. ([#15562](https://github.com/expo/expo/pull/15562) by [@lukmccall](https://github.com/lukmccall)) +- Second pass at fixing SDK 44 compatibility in config plugin. ### 💡 Others From 320f59a360f02849e0a8f56240002b480a1f0bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kosmaty?= Date: Wed, 15 Dec 2021 13:26:13 +0100 Subject: [PATCH 5/5] Combine changelogs --- packages/expo-dev-launcher/CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/expo-dev-launcher/CHANGELOG.md b/packages/expo-dev-launcher/CHANGELOG.md index ede0ce3e0fb93..ea5ab1634d1c9 100644 --- a/packages/expo-dev-launcher/CHANGELOG.md +++ b/packages/expo-dev-launcher/CHANGELOG.md @@ -11,8 +11,7 @@ - Fix plugin when `MainActivity.onNewIntent` exists. ([#15459](https://github.com/expo/expo/pull/15459) by [@janicduplessis](https://github.com/janicduplessis)) - Fix plugin when `expo-updates` is not present. ([#15541](https://github.com/expo/expo/pull/15541) by [@esamelson](https://github.com/esamelson)) - Include expo-platform header in manifest requests. ([#15563](https://github.com/expo/expo/pull/15563) by [@esamelson](https://github.com/esamelson)) -- Fix plugin compatibility with SDK 44. ([#15562](https://github.com/expo/expo/pull/15562) by [@lukmccall](https://github.com/lukmccall)) -- Second pass at fixing SDK 44 compatibility in config plugin. +- Fix plugin compatibility with SDK 44. ([#15562](https://github.com/expo/expo/pull/15562) & [#15570](https://github.com/expo/expo/pull/15570) by [@lukmccall](https://github.com/lukmccall) & [@esamelson](https://github.com/esamelson)) ### 💡 Others