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 +6 -0
- package/android/build.gradle +2 -2
- package/android/src/debug/java/expo/modules/devlauncher/DevLauncherController.kt +10 -0
- package/android/src/debug/java/expo/modules/devlauncher/helpers/DevLauncherURLHelper.kt +4 -0
- package/ios/EXDevLauncherController.m +3 -1
- package/ios/EXDevLauncherURLHelper.swift +18 -6
- package/ios/Tests/EXDevLauncherURLHelperTests.swift +14 -0
- package/package.json +4 -4
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._
|
package/android/build.gradle
CHANGED
|
@@ -26,13 +26,13 @@ expoModule {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
group = "host.exp.exponent"
|
|
29
|
-
version = "57.0.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
28
|
+
"expo": "57.0.22"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "9e5319c0f821a27b7924841903abae50e2b41790",
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build:plugin": "expo-module build plugin",
|
|
33
33
|
"expo-module": "expo-module"
|