expo-dev-launcher 57.0.19 → 57.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 57.0.20 — 2026-09-11
14
+
15
+ ### 🎉 New features
16
+
17
+ - Add `disableFab=1` and `disableAutoLaunch=1` URL params that update the dev menu preferences to hide the floating action button and prevent the dev menu from opening at launch. ([#49651](https://github.com/expo/expo/pull/49651) by [@janicduplessis](https://github.com/janicduplessis))
18
+
13
19
  ## 57.0.19 — 2026-09-01
14
20
 
15
21
  _This version does not introduce any user-facing changes._
@@ -26,13 +26,13 @@ expoModule {
26
26
  }
27
27
 
28
28
  group = "host.exp.exponent"
29
- version = "57.0.19"
29
+ version = "57.0.20"
30
30
 
31
31
  android {
32
32
  namespace "expo.modules.devlauncher"
33
33
  defaultConfig {
34
34
  versionCode 9
35
- versionName "57.0.19"
35
+ versionName "57.0.20"
36
36
  }
37
37
 
38
38
  buildTypes {
@@ -21,6 +21,7 @@ import expo.modules.devlauncher.helpers.DevLauncherInstallationIDHelper
21
21
  import expo.modules.devlauncher.helpers.DevLauncherMetadataHelper
22
22
  import expo.modules.devlauncher.helpers.DevLauncherUrl
23
23
  import expo.modules.devlauncher.helpers.getFieldInClassHierarchy
24
+ import expo.modules.devlauncher.helpers.hasEnabledFlag
24
25
  import expo.modules.devlauncher.helpers.hasUrlQueryParam
25
26
  import expo.modules.devlauncher.helpers.isDevLauncherUrl
26
27
  import expo.modules.devlauncher.helpers.runBlockingOnMainThread
@@ -166,6 +167,15 @@ class DevLauncherController private constructor(
166
167
  DependencyInjection.devMenuPreferences?.isOnboardingFinished = true
167
168
  }
168
169
 
170
+ if (hasEnabledFlag(url, "disableFab")) {
171
+ DependencyInjection.devMenuPreferences?.showFab = false
172
+ }
173
+
174
+ if (hasEnabledFlag(url, "disableAutoLaunch")) {
175
+ DependencyInjection.devMenuPreferences?.isOnboardingFinished = true
176
+ DependencyInjection.devMenuPreferences?.showsAtLaunch = false
177
+ }
178
+
169
179
  val appLoaderListener = appLoader.createOnDelegateWillBeCreatedListener()
170
180
  lifecycle.addListener(appLoaderListener)
171
181
  mode = Mode.APP
@@ -10,6 +10,10 @@ fun hasUrlQueryParam(uri: Uri): Boolean {
10
10
  return uri.getQueryParameter("url") != null
11
11
  }
12
12
 
13
+ fun hasEnabledFlag(uri: Uri, name: String): Boolean {
14
+ return uri.isHierarchical && uri.getQueryParameter(name) == "1"
15
+ }
16
+
13
17
  class DevLauncherUrl(var url: Uri) {
14
18
  val queryParams = mutableMapOf<String, String>()
15
19
 
@@ -410,9 +410,11 @@ static const NSTimeInterval EXDevLauncherDefaultRequestTimeout = 10.0;
410
410
  projectUrl = expoUrl;
411
411
  }
412
412
 
413
- // Disable onboarding popup if "&disableOnboarding=1" is a param
413
+ [EXDevLauncherURLHelper disableOnboardingPopupIfNeeded:url];
414
414
  [EXDevLauncherURLHelper disableOnboardingPopupIfNeeded:expoUrl];
415
415
 
416
+ [EXDevLauncherURLHelper applyDevMenuPreferencesIfNeeded:url];
417
+
416
418
  NSString *runtimeVersion = @"";
417
419
  if (_updatesInterface) {
418
420
  runtimeVersion = _updatesInterface.runtimeVersion ?: @"";
@@ -44,19 +44,31 @@ public class EXDevLauncherURLHelper: NSObject {
44
44
  return queryItems.contains { $0.name == "url" && $0.value != nil }
45
45
  }
46
46
 
47
- @objc
48
- public static func disableOnboardingPopupIfNeeded(_ url: URL) {
47
+ static func hasEnabledFlag(_ name: String, in url: URL) -> Bool {
49
48
  guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
50
49
  let queryItems = components.queryItems else {
51
- return
50
+ return false
51
+ }
52
+
53
+ return queryItems.contains { $0.name == name && ($0.value ?? "") == "1" }
54
+ }
55
+
56
+ @objc
57
+ public static func disableOnboardingPopupIfNeeded(_ url: URL) {
58
+ if hasEnabledFlag("disableOnboarding", in: url) {
59
+ DevMenuPreferences.isOnboardingFinished = true
52
60
  }
61
+ }
53
62
 
54
- let shouldDisable = queryItems.contains {
55
- $0.name == "disableOnboarding" && ($0.value ?? "") == "1"
63
+ @objc
64
+ public static func applyDevMenuPreferencesIfNeeded(_ url: URL) {
65
+ if hasEnabledFlag("disableFab", in: url) {
66
+ DevMenuManager.shared.setShowFloatingActionButton(false)
56
67
  }
57
68
 
58
- if shouldDisable {
69
+ if hasEnabledFlag("disableAutoLaunch", in: url) {
59
70
  DevMenuPreferences.isOnboardingFinished = true
71
+ DevMenuManager.shared.setShowsAtLaunch(false)
60
72
  }
61
73
  }
62
74
 
@@ -44,6 +44,20 @@ class EXDevLauncherURLHelperTests: XCTestCase {
44
44
  XCTAssertEqual(queryParams["url"], "http://localhost:8081")
45
45
  }
46
46
 
47
+ func testHasEnabledFlag() {
48
+ let devLauncherUrl = URL(string: "scheme://expo-development-client/?url=\(encodedUrlString)&disableFab=1")!
49
+
50
+ XCTAssertTrue(EXDevLauncherURLHelper.hasEnabledFlag("disableFab", in: devLauncherUrl))
51
+ XCTAssertTrue(EXDevLauncherURLHelper.hasEnabledFlag("disableAutoLaunch", in: URL(string: "http://localhost:8081?disableAutoLaunch=1")!))
52
+
53
+ XCTAssertFalse(EXDevLauncherURLHelper.hasEnabledFlag("disableAutoLaunch", in: devLauncherUrl))
54
+ XCTAssertFalse(EXDevLauncherURLHelper.hasEnabledFlag("disableFab", in: URL(string: "http://localhost:8081?disableFab=0")!))
55
+ XCTAssertFalse(EXDevLauncherURLHelper.hasEnabledFlag("disableFab", in: URL(string: "http://localhost:8081?disableFab")!))
56
+
57
+ let urlWithFlagInAppUrl = URL(string: "scheme://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081%3FdisableFab%3D1")!
58
+ XCTAssertFalse(EXDevLauncherURLHelper.hasEnabledFlag("disableFab", in: urlWithFlagInAppUrl))
59
+ }
60
+
47
61
  // HELPER
48
62
  func expectDevLauncherUrlToEqual(input: String, expected: String) {
49
63
  let devLauncherUrl = EXDevLauncherUrl(URL(string: input)!)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-dev-launcher",
3
3
  "title": "Expo Development Launcher",
4
- "version": "57.0.19",
4
+ "version": "57.0.20",
5
5
  "description": "Pre-release version of the Expo development launcher package for testing.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -17,7 +17,7 @@
17
17
  "dependencies": {
18
18
  "@expo/schema-utils": "^57.0.2",
19
19
  "expo-dev-menu": "~57.0.18",
20
- "expo-manifests": "~57.0.1"
20
+ "expo-manifests": "~57.0.2"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "expo": "*",
@@ -25,9 +25,9 @@
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^22.14.0",
28
- "expo": "57.0.19"
28
+ "expo": "57.0.22"
29
29
  },
30
- "gitHead": "730ffa946ce69c22d3be128d4bf48c4ea579261e",
30
+ "gitHead": "9e5319c0f821a27b7924841903abae50e2b41790",
31
31
  "scripts": {
32
32
  "build:plugin": "expo-module build plugin",
33
33
  "expo-module": "expo-module"