expo-modules-core 57.0.6 → 57.0.7
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 +5 -0
- package/android/build.gradle +2 -2
- package/ios/Core/Views/SwiftUI/SwiftUIViewHost.swift +31 -9
- package/package.json +3 -3
- package/prebuilds/output/debug/xcframeworks/ExpoModulesCore.tar.gz +0 -0
- package/prebuilds/output/debug/xcframeworks/ExpoModulesWorklets.tar.gz +0 -0
- package/prebuilds/output/release/xcframeworks/ExpoModulesCore.tar.gz +0 -0
- package/prebuilds/output/release/xcframeworks/ExpoModulesWorklets.tar.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 57.0.7 — 2026-07-22
|
|
14
|
+
|
|
15
|
+
_This version does not introduce any user-facing changes._
|
|
16
|
+
|
|
13
17
|
## 57.0.6 — 2026-07-17
|
|
14
18
|
|
|
15
19
|
### 🎉 New features
|
|
@@ -32,6 +36,7 @@ _This version does not introduce any user-facing changes._
|
|
|
32
36
|
|
|
33
37
|
### 🐛 Bug fixes
|
|
34
38
|
|
|
39
|
+
- [iOS] Fix SwiftUI-hosted React views corrupting Fabric rendering after unmount: `UIViewHost` now hands SwiftUI a disposable isolation container instead of the React-managed view, so leaked `autoresizingMask`/frame/visibility mutations (including deferred ones from `Menu`/`ContextMenu` teardown) can no longer zero-size or hide unrelated components. ([#47707](https://github.com/expo/expo/pull/47707) by [@cvburgess](https://github.com/cvburgess))
|
|
35
40
|
- [Android] Fix Compose-hosted React Native content (e.g. the `@expo/ui` community `BottomSheet`) keeping a stale size after a rapid resize such as dismissing the software keyboard, leaving bottom-anchored content stranded mid-view. The final shadow node size update could be dropped when its one-shot pre-draw listener fired without a following draw pass; the pending update is now also posted to the view so the latest size always flushes. ([#47778](https://github.com/expo/expo/issues/47778) by [@zayyartun-cgm](https://github.com/zayyartun-cgm)) ([#47810](https://github.com/expo/expo/pull/47810) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
|
|
36
41
|
- [iOS] Fixed a crash when the runtime is reloaded while async function calls are still suspended in their native body. Concurrent functions now decode `this` and the arguments buffer synchronously inside the host call and schedule only converted native values, so no JSI-owned wrappers are destroyed off the JS thread after the runtime is torn down. ([#47716](https://github.com/expo/expo/issues/47716), [#47717](https://github.com/expo/expo/pull/47717) by [@AlirezaHadjar](https://github.com/AlirezaHadjar))
|
|
37
42
|
- [Android] Support `android.graphics.Color` arguments and props on Android below API 26 by adding a `ColorCompat` wrapper, since the class-based `Color` API (`Color.valueOf` and the float accessors) only exists on API 26 and above. ([#47546](https://github.com/expo/expo/issues/47546) by [@anasvemmully](https://github.com/anasvemmully)) ([#47575](https://github.com/expo/expo/pull/47575) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
|
package/android/build.gradle
CHANGED
|
@@ -27,7 +27,7 @@ if (shouldIncludeCompose) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
group = 'host.exp.exponent'
|
|
30
|
-
version = '57.0.
|
|
30
|
+
version = '57.0.7'
|
|
31
31
|
|
|
32
32
|
def isExpoModulesCoreTests = {
|
|
33
33
|
Gradle gradle = getGradle()
|
|
@@ -94,7 +94,7 @@ android {
|
|
|
94
94
|
defaultConfig {
|
|
95
95
|
consumerProguardFiles 'proguard-rules.pro'
|
|
96
96
|
versionCode 1
|
|
97
|
-
versionName "57.0.
|
|
97
|
+
versionName "57.0.7"
|
|
98
98
|
buildConfigField "String", "EXPO_MODULES_CORE_VERSION", "\"${versionName}\""
|
|
99
99
|
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", "true"
|
|
100
100
|
|
|
@@ -13,7 +13,6 @@ extension ExpoSwiftUI {
|
|
|
13
13
|
|
|
14
14
|
#if os(macOS)
|
|
15
15
|
func makeNSView(context: Context) -> NSView {
|
|
16
|
-
context.coordinator.originalAutoresizingMask = view.autoresizingMask
|
|
17
16
|
return view
|
|
18
17
|
}
|
|
19
18
|
|
|
@@ -23,8 +22,17 @@ extension ExpoSwiftUI {
|
|
|
23
22
|
#endif
|
|
24
23
|
|
|
25
24
|
func makeUIView(context: Context) -> UIView {
|
|
26
|
-
|
|
25
|
+
#if os(macOS)
|
|
27
26
|
return view
|
|
27
|
+
#else
|
|
28
|
+
// SwiftUI mutates the view it hosts (autoresizingMask, frame, visibility), sometimes
|
|
29
|
+
// asynchronously after teardown, corrupting unmounted or recycled React views.
|
|
30
|
+
// Hand it a disposable container instead. Fixes expo/expo#47706; supersedes the #40604 mitigation.
|
|
31
|
+
let container = ReactViewIsolationContainer()
|
|
32
|
+
container.hostedView = view
|
|
33
|
+
container.addSubview(view)
|
|
34
|
+
return container
|
|
35
|
+
#endif
|
|
28
36
|
}
|
|
29
37
|
|
|
30
38
|
func updateUIView(_ uiView: UIView, context: Context) {
|
|
@@ -32,11 +40,7 @@ extension ExpoSwiftUI {
|
|
|
32
40
|
}
|
|
33
41
|
|
|
34
42
|
static func dismantleUIView(_ uiView: UIView, coordinator: Coordinator) {
|
|
35
|
-
//
|
|
36
|
-
// UIViewRepresentable attaches autoresizingMask w+h to the hosted UIView
|
|
37
|
-
// This causes issues for RN views when they are recycled.
|
|
38
|
-
// So we restore the original autoresizingMask to avoid issues.
|
|
39
|
-
uiView.autoresizingMask = coordinator.originalAutoresizingMask
|
|
43
|
+
// Nothing to restore — SwiftUI only ever touched the container.
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
func makeCoordinator() -> Coordinator {
|
|
@@ -44,7 +48,6 @@ extension ExpoSwiftUI {
|
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
class Coordinator {
|
|
47
|
-
var originalAutoresizingMask: UIView.AutoresizingMask = []
|
|
48
51
|
init() {}
|
|
49
52
|
}
|
|
50
53
|
|
|
@@ -63,5 +66,24 @@ extension ExpoSwiftUI {
|
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
|
|
69
|
+
#if !os(macOS)
|
|
70
|
+
/**
|
|
71
|
+
Disposable UIView handed to SwiftUI in place of the React-managed view —
|
|
72
|
+
see `UIViewHost.makeUIView`.
|
|
73
|
+
*/
|
|
74
|
+
private final class ReactViewIsolationContainer: UIView {
|
|
75
|
+
weak var hostedView: UIView?
|
|
76
|
+
|
|
77
|
+
override func layoutSubviews() {
|
|
78
|
+
super.layoutSubviews()
|
|
79
|
+
// Ignore transient zero bounds (initial layout, teardown) — never propagate them.
|
|
80
|
+
guard let hostedView, hostedView.superview === self, !bounds.isEmpty else {
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
if hostedView.frame != bounds {
|
|
84
|
+
hostedView.frame = bounds
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
#endif
|
|
66
89
|
}
|
|
67
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-modules-core",
|
|
3
|
-
"version": "57.0.
|
|
3
|
+
"version": "57.0.7",
|
|
4
4
|
"description": "The core of Expo Modules architecture",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@expo/expo-modules-macros-plugin": "0.6.1",
|
|
50
|
-
"expo-modules-jsi": "~57.0.
|
|
50
|
+
"expo-modules-jsi": "~57.0.4",
|
|
51
51
|
"invariant": "^2.2.4"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@types/invariant": "^2.2.33",
|
|
67
67
|
"expo-module-scripts": "56.0.3"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "a4789f1e53353f4929b0baddcfe5a7c622b99c71",
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build": "expo-module build",
|
|
72
72
|
"clean": "expo-module clean",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|