expo-dev-launcher 55.0.1 → 55.0.2
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 +4 -1
- package/android/build.gradle +2 -2
- package/android/src/debug/java/expo/modules/devlauncher/DevLauncherController.kt +1 -2
- package/android/src/debug/java/expo/modules/devlauncher/helpers/DevLauncherUpdatesHelper.kt +6 -6
- package/android/src/debug/java/expo/modules/devlauncher/launcher/loaders/DevLauncherAppLoaderFactory.kt +2 -3
- package/android/src/debug/java/expo/modules/devlauncher/react/DevLauncherReactNativeHostHandler.kt +1 -2
- package/ios/EXDevLauncherController.h +1 -1
- package/ios/EXDevLauncherController.m +4 -4
- package/ios/ReactDelegateHandler/ExpoDevLauncherReactDelegateHandler.swift +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 55.0.2 — 2026-01-22
|
|
14
|
+
|
|
15
|
+
_This version does not introduce any user-facing changes._
|
|
16
|
+
|
|
13
17
|
## 55.0.1 — 2026-01-22
|
|
14
18
|
|
|
15
19
|
_This version does not introduce any user-facing changes._
|
|
@@ -24,7 +28,6 @@ _This version does not introduce any user-facing changes._
|
|
|
24
28
|
- [iOS] Add activity indicator when loading dev server URL. ([#40825](https://github.com/expo/expo/pull/40825) by [@alanjhughes](https://github.com/alanjhughes))
|
|
25
29
|
- Add initial macOS support ([#41330](https://github.com/expo/expo/pull/41330) by [@gabrieldonadel](https://github.com/gabrieldonadel))
|
|
26
30
|
- Add api to change bundleUrl from JS ([#42065](https://github.com/expo/expo/pull/42065) by [@alanjhughes](https://github.com/alanjhughes))
|
|
27
|
-
- Full native interface for updates. ([#41527](https://github.com/expo/expo/pull/41527) by [@douglowder](https://github.com/douglowder))
|
|
28
31
|
|
|
29
32
|
### 🐛 Bug fixes
|
|
30
33
|
|
package/android/build.gradle
CHANGED
|
@@ -26,13 +26,13 @@ expoModule {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
group = "host.exp.exponent"
|
|
29
|
-
version = "55.0.
|
|
29
|
+
version = "55.0.2"
|
|
30
30
|
|
|
31
31
|
android {
|
|
32
32
|
namespace "expo.modules.devlauncher"
|
|
33
33
|
defaultConfig {
|
|
34
34
|
versionCode 9
|
|
35
|
-
versionName "55.0.
|
|
35
|
+
versionName "55.0.2"
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
buildTypes {
|
|
@@ -42,7 +42,6 @@ import expo.modules.devlauncher.services.DependencyInjection
|
|
|
42
42
|
import expo.modules.kotlin.weak
|
|
43
43
|
import expo.modules.manifests.core.Manifest
|
|
44
44
|
import expo.modules.updatesinterface.UpdatesInterface
|
|
45
|
-
import expo.modules.updatesinterface.UpdatesDevLauncherInterface
|
|
46
45
|
import kotlinx.coroutines.CoroutineScope
|
|
47
46
|
import kotlinx.coroutines.Dispatchers
|
|
48
47
|
import kotlinx.coroutines.launch
|
|
@@ -147,7 +146,7 @@ class DevLauncherController private constructor(
|
|
|
147
146
|
val manifestParser = DevLauncherManifestParser(httpClient, parsedUrl, installationIDHelper.getOrCreateInstallationID(context))
|
|
148
147
|
val appIntent = createAppIntent()
|
|
149
148
|
|
|
150
|
-
|
|
149
|
+
updatesInterface?.reset()
|
|
151
150
|
|
|
152
151
|
val appLoaderFactory = DevLauncherAppLoaderFactory(
|
|
153
152
|
context,
|
|
@@ -2,7 +2,7 @@ package expo.modules.devlauncher.helpers
|
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.net.Uri
|
|
5
|
-
import expo.modules.updatesinterface.
|
|
5
|
+
import expo.modules.updatesinterface.UpdatesInterface
|
|
6
6
|
import org.json.JSONObject
|
|
7
7
|
import java.lang.Exception
|
|
8
8
|
import java.util.*
|
|
@@ -11,16 +11,16 @@ import kotlin.coroutines.resume
|
|
|
11
11
|
import kotlin.coroutines.resumeWithException
|
|
12
12
|
import kotlin.coroutines.suspendCoroutine
|
|
13
13
|
|
|
14
|
-
suspend fun
|
|
14
|
+
suspend fun UpdatesInterface.loadUpdate(
|
|
15
15
|
configuration: HashMap<String, Any>,
|
|
16
16
|
context: Context,
|
|
17
17
|
shouldContinue: (manifest: JSONObject) -> Boolean
|
|
18
|
-
):
|
|
18
|
+
): UpdatesInterface.Update =
|
|
19
19
|
suspendCoroutine { cont ->
|
|
20
20
|
this.fetchUpdateWithConfiguration(
|
|
21
21
|
configuration,
|
|
22
|
-
object :
|
|
23
|
-
override fun onSuccess(update:
|
|
22
|
+
object : UpdatesInterface.UpdateCallback {
|
|
23
|
+
override fun onSuccess(update: UpdatesInterface.Update?) {
|
|
24
24
|
// if the update is null, we previously aborted the fetch, so we've already resumed
|
|
25
25
|
update?.let { cont.resume(update) }
|
|
26
26
|
}
|
|
@@ -32,7 +32,7 @@ suspend fun UpdatesDevLauncherInterface.loadUpdate(
|
|
|
32
32
|
return if (shouldContinue(manifest)) {
|
|
33
33
|
true
|
|
34
34
|
} else {
|
|
35
|
-
cont.resume(object :
|
|
35
|
+
cont.resume(object : UpdatesInterface.Update {
|
|
36
36
|
override val manifest: JSONObject = manifest
|
|
37
37
|
override val launchAssetPath: String
|
|
38
38
|
get() = throw Exception("Tried to access launch asset path for a manifest that was not loaded")
|
|
@@ -9,7 +9,6 @@ import expo.modules.devlauncher.helpers.createUpdatesConfigurationWithUrl
|
|
|
9
9
|
import expo.modules.devlauncher.helpers.loadUpdate
|
|
10
10
|
import expo.modules.devlauncher.launcher.manifest.DevLauncherManifestParser
|
|
11
11
|
import expo.modules.manifests.core.Manifest
|
|
12
|
-
import expo.modules.updatesinterface.UpdatesDevLauncherInterface
|
|
13
12
|
import expo.modules.updatesinterface.UpdatesInterface
|
|
14
13
|
|
|
15
14
|
class DevLauncherAppLoaderFactory(
|
|
@@ -37,7 +36,7 @@ class DevLauncherAppLoaderFactory(
|
|
|
37
36
|
null
|
|
38
37
|
} else {
|
|
39
38
|
val configurationCandidate = createUpdatesConfigurationWithUrl(url, projectUrl, runtimeVersion, installationIDHelper.getOrCreateInstallationID(context))
|
|
40
|
-
if (
|
|
39
|
+
if (it.isValidUpdatesConfiguration(configurationCandidate)) {
|
|
41
40
|
configurationCandidate
|
|
42
41
|
} else {
|
|
43
42
|
null
|
|
@@ -52,7 +51,7 @@ class DevLauncherAppLoaderFactory(
|
|
|
52
51
|
}
|
|
53
52
|
DevLauncherLocalAppLoader(manifest!!, appHost, context, controller)
|
|
54
53
|
} else {
|
|
55
|
-
val update =
|
|
54
|
+
val update = updatesInterface!!.loadUpdate(validConfiguration, context) {
|
|
56
55
|
manifest = Manifest.fromManifestJson(it) // TODO: might be able to pass actual manifest object in here
|
|
57
56
|
return@loadUpdate !manifest!!.isUsingDeveloperTool()
|
|
58
57
|
}
|
package/android/src/debug/java/expo/modules/devlauncher/react/DevLauncherReactNativeHostHandler.kt
CHANGED
|
@@ -9,7 +9,6 @@ import expo.modules.core.interfaces.ReactNativeHostHandler
|
|
|
9
9
|
import expo.modules.devlauncher.DevLauncherController
|
|
10
10
|
import java.lang.ref.WeakReference
|
|
11
11
|
import expo.modules.updatesinterface.UpdatesControllerRegistry
|
|
12
|
-
import expo.modules.updatesinterface.UpdatesDevLauncherInterface
|
|
13
12
|
import kotlinx.coroutines.CoroutineScope
|
|
14
13
|
import kotlinx.coroutines.Dispatchers
|
|
15
14
|
import kotlinx.coroutines.launch
|
|
@@ -46,7 +45,7 @@ class DevLauncherReactNativeHostHandler(context: Context) : ReactNativeHostHandl
|
|
|
46
45
|
CoroutineScope(Dispatchers.Main).launch {
|
|
47
46
|
UpdatesControllerRegistry.controller?.get()?.let {
|
|
48
47
|
DevLauncherController.instance.updatesInterface = it
|
|
49
|
-
|
|
48
|
+
it.updatesInterfaceCallbacks = WeakReference(DevLauncherController.instance)
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
}
|
|
@@ -45,7 +45,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
45
45
|
@property (nonatomic, weak) EXAppContext * _Nullable appContext;
|
|
46
46
|
@property (nonatomic, strong) EXDevLauncherPendingDeepLinkRegistry *pendingDeepLinkRegistry;
|
|
47
47
|
@property (nonatomic, strong) EXDevLauncherRecentlyOpenedAppsRegistry *recentlyOpenedAppsRegistry;
|
|
48
|
-
@property (nonatomic, strong) id<
|
|
48
|
+
@property (nonatomic, strong) id<EXUpdatesExternalInterface> updatesInterface;
|
|
49
49
|
|
|
50
50
|
+ (instancetype)sharedInstance;
|
|
51
51
|
|
|
@@ -270,8 +270,8 @@
|
|
|
270
270
|
|
|
271
271
|
- (nullable NSURL *)sourceUrl
|
|
272
272
|
{
|
|
273
|
-
if (_shouldPreferUpdatesInterfaceSourceUrl && _updatesInterface && ((id<
|
|
274
|
-
return ((id<
|
|
273
|
+
if (_shouldPreferUpdatesInterfaceSourceUrl && _updatesInterface && ((id<EXUpdatesExternalInterface>)_updatesInterface).launchAssetURL) {
|
|
274
|
+
return ((id<EXUpdatesExternalInterface>)_updatesInterface).launchAssetURL;
|
|
275
275
|
}
|
|
276
276
|
return _sourceUrl;
|
|
277
277
|
}
|
|
@@ -406,7 +406,7 @@
|
|
|
406
406
|
// do nothing for now
|
|
407
407
|
} success:^(NSDictionary * _Nullable manifest) {
|
|
408
408
|
if (manifest) {
|
|
409
|
-
launchExpoApp(((id<
|
|
409
|
+
launchExpoApp(((id<EXUpdatesExternalInterface>)self->_updatesInterface).launchAssetURL, [EXManifestsManifestFactory manifestForManifestJSON:manifest]);
|
|
410
410
|
}
|
|
411
411
|
} error:onError];
|
|
412
412
|
};
|
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
return updatesConfig;
|
|
670
670
|
}
|
|
671
671
|
|
|
672
|
-
- (void)updatesExternalInterfaceDidRequestRelaunch:(id<
|
|
672
|
+
- (void)updatesExternalInterfaceDidRequestRelaunch:(id<EXUpdatesExternalInterface> _Nonnull)updatesExternalInterface {
|
|
673
673
|
NSURL * _Nullable appUrl = self.appManifestURLWithFallback;
|
|
674
674
|
if (!appUrl) {
|
|
675
675
|
return;
|
|
@@ -60,7 +60,7 @@ public class ExpoDevLauncherReactDelegateHandler: ExpoReactDelegateHandler, EXDe
|
|
|
60
60
|
self.reactDelegate = reactDelegate
|
|
61
61
|
self.launchOptions = launchOptions
|
|
62
62
|
|
|
63
|
-
if let sharedController = UpdatesControllerRegistry.sharedInstance.controller
|
|
63
|
+
if let sharedController = UpdatesControllerRegistry.sharedInstance.controller {
|
|
64
64
|
// for some reason the swift compiler and bridge are having issues here
|
|
65
65
|
EXDevLauncherController.sharedInstance().updatesInterface = sharedController
|
|
66
66
|
sharedController.updatesExternalInterfaceDelegate = EXDevLauncherController.sharedInstance()
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-dev-launcher",
|
|
3
3
|
"title": "Expo Development Launcher",
|
|
4
|
-
"version": "55.0.
|
|
4
|
+
"version": "55.0.2",
|
|
5
5
|
"description": "Pre-release version of the Expo development launcher package for testing.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"homepage": "https://docs.expo.dev",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@expo/schema-utils": "^55.0.
|
|
19
|
-
"expo-dev-menu": "55.0.
|
|
18
|
+
"@expo/schema-utils": "^55.0.1",
|
|
19
|
+
"expo-dev-menu": "55.0.1",
|
|
20
20
|
"expo-manifests": "~55.0.1"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"expo": "*"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "4728ba25fbd4d5835780306de78a83bd1628e271"
|
|
26
26
|
}
|