expo-modules-jsi 58.0.2 → 58.0.4
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 +14 -0
- package/apple/.generated/module.modulemap +1 -2
- package/apple/Package.swift +6 -0
- package/apple/Products/ExpoModulesJSI.xcframework/ios-arm64/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Products/ExpoModulesJSI.xcframework/ios-arm64_x86_64-maccatalyst/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Products/ExpoModulesJSI.xcframework/ios-arm64_x86_64-simulator/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Products/ExpoModulesJSI.xcframework/macos-arm64_x86_64/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Products/ExpoModulesJSI.xcframework/tvos-arm64/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Products/ExpoModulesJSI.xcframework/tvos-arm64_x86_64-simulator/ExpoModulesJSI.framework/ExpoModulesJSI +0 -0
- package/apple/Sources/ExpoModulesJSI/Runtime/Values/JavaScriptPromise.swift +1 -1
- package/apple/scripts/build-xcframework.sh +6 -2
- package/apple/scripts/create-stub-xcframework.sh +1 -1
- package/apple/scripts/generate-modulemap.sh +29 -22
- package/package.json +2 -2
- package/.npmignore +0 -24
- package/apple/.gitignore +0 -16
- package/turbo.json +0 -22
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,20 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 58.0.4 — 2026-09-25
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- [iOS] Fix the `.swiftinterface` failing to compile with Xcode 27 (Swift 6.4), because a C++ type extension was no longer stripped from it. ([#50569](https://github.com/expo/expo/pull/50569) by [@chrfalch](https://github.com/chrfalch))
|
|
18
|
+
- [iOS] Fix the xcframework build phase failing iOS archives under Xcode 27. ([#50587](https://github.com/expo/expo/pull/50587) by [@tsapeta](https://github.com/tsapeta))
|
|
19
|
+
- [iOS] Fix the xcframework build warning about jsi headers missing from the umbrella header. ([#50588](https://github.com/expo/expo/pull/50588) by [@tsapeta](https://github.com/tsapeta))
|
|
20
|
+
|
|
21
|
+
## 58.0.3 — 2026-09-21
|
|
22
|
+
|
|
23
|
+
### 🐛 Bug fixes
|
|
24
|
+
|
|
25
|
+
- [iOS] Fix `pod install` failing when the Command Line Tools SDK is newer than the selected Xcode. ([#50316](https://github.com/expo/expo/pull/50316) by [@alanjhughes](https://github.com/alanjhughes))
|
|
26
|
+
|
|
13
27
|
## 58.0.2 — 2026-09-15
|
|
14
28
|
|
|
15
29
|
### 🎉 New features
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module jsi {
|
|
2
|
-
|
|
2
|
+
header "/Users/alanhughes/Work/expo/packages/expo-modules-jsi/.expo-prebuild/pods-stage/Headers/Public/React-jsi/jsi/jsi.h"
|
|
3
3
|
header "/Users/alanhughes/Work/expo/packages/expo-modules-jsi/.expo-prebuild/pods-stage/Headers/Public/React-jsi/jsi/instrumentation.h"
|
|
4
4
|
|
|
5
5
|
export *
|
|
6
|
-
module * { export * }
|
|
7
6
|
}
|
package/apple/Package.swift
CHANGED
|
@@ -99,6 +99,12 @@ let package = Package(
|
|
|
99
99
|
"-Xfrontend",
|
|
100
100
|
"-clang-header-expose-decls=has-expose-attr",
|
|
101
101
|
|
|
102
|
+
// Xcode 27 reports a warning left on a SwiftCompile task as "the following command
|
|
103
|
+
// failed with exit code 0 but produced no further output" and fails the host app's
|
|
104
|
+
// build phase, with nothing pointing at the cause. This group is the one that has
|
|
105
|
+
// actually bitten us, so reject it at the line that causes it.
|
|
106
|
+
"-Werror", "ImplicitStrongCapture",
|
|
107
|
+
|
|
102
108
|
// Module map for the `jsi` Clang module, generated by build-xcframework.sh
|
|
103
109
|
// before xcodebuild runs.
|
|
104
110
|
"-Xcc", "-fmodule-map-file=\(generatedModuleMap)",
|
package/apple/Products/ExpoModulesJSI.xcframework/ios-arm64/ExpoModulesJSI.framework/ExpoModulesJSI
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/apple/Products/ExpoModulesJSI.xcframework/tvos-arm64/ExpoModulesJSI.framework/ExpoModulesJSI
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -242,7 +242,7 @@ public struct JavaScriptPromise: JavaScriptType, ~Copyable {
|
|
|
242
242
|
// thread, the same hop `resolve` and `reject` make. `@JavaScriptActor` does not get there on
|
|
243
243
|
// its own: its executor runs jobs inline on the calling thread. `execute` runs the closure
|
|
244
244
|
// inline when the caller is already on the JavaScript thread.
|
|
245
|
-
try await runtime.execute { [longLivedState] in
|
|
245
|
+
try await runtime.execute { [longLivedState, deferredPromise] in
|
|
246
246
|
let onFulfilled = runtime.createFunction { [weak deferredPromise] this, arguments in
|
|
247
247
|
guard let deferredPromise else { return .undefined }
|
|
248
248
|
let value = arguments[0]
|
|
@@ -78,6 +78,9 @@ SOURCE_FILES=(
|
|
|
78
78
|
"${PACKAGE_DIR}/scripts/build-xcframework.sh"
|
|
79
79
|
"${PACKAGE_DIR}/scripts/create-stub-xcframework.sh"
|
|
80
80
|
"${PACKAGE_DIR}/scripts/xcframework-helpers.sh"
|
|
81
|
+
# Defines the `jsi` module the slices compile against, so its contents change
|
|
82
|
+
# the build output the same way a source file does.
|
|
83
|
+
"${PACKAGE_DIR}/scripts/generate-modulemap.sh"
|
|
81
84
|
# JSI headers we compile against. `cat` follows the symlinks CocoaPods
|
|
82
85
|
# installs into Pods/Headers/Public so the real header contents get hashed.
|
|
83
86
|
"${PODS_ROOT}/Headers/Public/React-jsi/jsi/jsi.h"
|
|
@@ -284,7 +287,8 @@ build_slice() {
|
|
|
284
287
|
|
|
285
288
|
# Strip declarations from public .swiftinterface that external consumers can't resolve:
|
|
286
289
|
# - C++ type extensions (__ObjC) — entire blocks including their closing braces
|
|
287
|
-
# e.g. "extension __ObjC.expo.CppError : Swift.Error { ... }"
|
|
290
|
+
# e.g. "extension __ObjC.expo.CppError : Swift.Error { ... }", or with the module
|
|
291
|
+
# selectors Swift 6.4 prints: "extension __ObjC::expo.__ObjC::CppError : Swift::Error { ... }"
|
|
288
292
|
# - Package-internal conformances (_ConstraintThatIsNotPartOfTheAPIOfThisLibrary)
|
|
289
293
|
# e.g. "extension Swift.Optional : where Wrapped : _Constraint... {}"
|
|
290
294
|
# - @usableFromInline attributes preceding the _Constraint protocol definition
|
|
@@ -297,7 +301,7 @@ build_slice() {
|
|
|
297
301
|
# filename, failing with "can't read …: No such file or directory".
|
|
298
302
|
while IFS= read -r swiftinterface; do
|
|
299
303
|
local stripped_swiftinterface="${swiftinterface}.stripped"
|
|
300
|
-
sed '/^extension __ObjC
|
|
304
|
+
sed -E '/^extension __ObjC(\.|::)/,/^}/d;/^@usableFromInline$/{N;/_ConstraintThatIsNotPartOfTheAPIOfThisLibrary/d;};/_ConstraintThatIsNotPartOfTheAPIOfThisLibrary/d' "$swiftinterface" > "$stripped_swiftinterface"
|
|
301
305
|
mv "$stripped_swiftinterface" "$swiftinterface"
|
|
302
306
|
done < <(find "${modules_dir}/${PACKAGE_NAME}.swiftmodule" -name '*.swiftinterface')
|
|
303
307
|
|
|
@@ -31,7 +31,7 @@ echo -e "${BLUE}[Expo]${RESET} Ensuring required slices in ${PACKAGE_NAME}.xcfra
|
|
|
31
31
|
# reuse the same binary for every slice that needs stamping.
|
|
32
32
|
mkdir -p "$XCFRAMEWORK_PATH"
|
|
33
33
|
STUB_SOURCE="${XCFRAMEWORK_PATH}/.stub-binary"
|
|
34
|
-
echo "" | clang -x c - -dynamiclib \
|
|
34
|
+
echo "" | xcrun --sdk macosx clang -x c - -dynamiclib \
|
|
35
35
|
-o "$STUB_SOURCE" \
|
|
36
36
|
-install_name "@rpath/${PACKAGE_NAME}.framework/${PACKAGE_NAME}"
|
|
37
37
|
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Writes `.generated/module.modulemap` for the `jsi` Clang module.
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
# file.
|
|
5
|
+
# Headers are referenced by absolute path so the modulemap works regardless of
|
|
6
|
+
# where Pods lives. The `Pods/Headers/Public` path exists in non-frameworks and
|
|
7
|
+
# prebuilt-RN layouts; under static frameworks + source-built RN it doesn't, so
|
|
8
|
+
# we fall back to the canonical RN source. Stored outside `.build/` so SwiftPM
|
|
9
|
+
# state can be wiped without losing this file.
|
|
11
10
|
#
|
|
12
11
|
# Idempotent: re-running with the same inputs rewrites identical content.
|
|
13
|
-
# Switching PODS_ROOT updates the
|
|
12
|
+
# Switching PODS_ROOT updates the header paths.
|
|
14
13
|
#
|
|
15
14
|
# Used by build-xcframework.sh and test.sh; can also be run manually before
|
|
16
15
|
# opening the package in Xcode.
|
|
@@ -36,32 +35,40 @@ GENERATED_DIR="${PACKAGE_DIR}/.generated"
|
|
|
36
35
|
GENERATED_MODULE_MAP="${GENERATED_DIR}/module.modulemap"
|
|
37
36
|
mkdir -p "$GENERATED_DIR"
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
if [[ ! -f "$
|
|
38
|
+
JSI_HEADER="${PODS_ROOT}/Headers/Public/React-jsi/jsi/jsi.h"
|
|
39
|
+
if [[ ! -f "$JSI_HEADER" ]]; then
|
|
41
40
|
# Resolution order matches build-xcframework.sh: RN_ROOT (forwarded by the
|
|
42
41
|
# build script), REACT_NATIVE_PATH (exported by Xcode for hosts like Expo Go
|
|
43
42
|
# that build RN from a submodule), node resolve, then a relative fallback.
|
|
44
43
|
RN="${RN_ROOT:-${REACT_NATIVE_PATH:-$(node -p 'require("path").dirname(require.resolve("react-native/package.json"))' 2>/dev/null || echo "${PODS_ROOT}/../../node_modules/react-native")}}"
|
|
45
|
-
|
|
44
|
+
JSI_HEADER="${RN}/ReactCommon/jsi/jsi/jsi.h"
|
|
46
45
|
fi
|
|
47
|
-
[[ -f "$
|
|
46
|
+
[[ -f "$JSI_HEADER" ]] || { echo "error: cannot locate jsi.h" >&2; exit 1; }
|
|
48
47
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
JSI_DIR="$(dirname "$JSI_HEADER")"
|
|
49
|
+
|
|
50
|
+
# The two headers this package includes, listed one by one instead of behind an `umbrella header`.
|
|
51
|
+
# An umbrella claims every header sitting next to jsi.h, and the JSI pod ships several that jsi.h
|
|
52
|
+
# doesn't include (decorator.h, hermes-interfaces.h, JSIDynamic.h, jsilib.h, threadsafe.h). Clang
|
|
53
|
+
# warns "umbrella header for module 'jsi' does not include header ..." once per file, on every
|
|
54
|
+
# build of every slice. JSIDynamic.h would also pull in folly.
|
|
55
|
+
# jsi-inl.h needs no entry: jsi.h includes it, and Clang takes it textually from there.
|
|
56
|
+
JSI_HEADERS=""
|
|
57
|
+
for header in jsi.h instrumentation.h; do
|
|
58
|
+
if [[ -f "${JSI_DIR}/${header}" ]]; then
|
|
59
|
+
JSI_HEADERS="${JSI_HEADERS}
|
|
60
|
+
header \"${JSI_DIR}/${header}\""
|
|
61
|
+
fi
|
|
62
|
+
done
|
|
57
63
|
|
|
58
64
|
# Avoid touching the file when contents would be identical, so the xcframework
|
|
59
65
|
# hash cache and Xcode don't see a spurious change when inputs are unchanged.
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
#
|
|
67
|
+
# No `module * { export * }`: inferred submodules require an umbrella, and with headers listed
|
|
68
|
+
# explicitly there are no submodules to infer.
|
|
69
|
+
NEW_CONTENT="module jsi {${JSI_HEADERS}
|
|
62
70
|
|
|
63
71
|
export *
|
|
64
|
-
module * { export * }
|
|
65
72
|
}"
|
|
66
73
|
if [[ ! -f "$GENERATED_MODULE_MAP" ]] || [[ "$(cat "$GENERATED_MODULE_MAP")" != "$NEW_CONTENT" ]]; then
|
|
67
74
|
printf '%s\n' "$NEW_CONTENT" > "$GENERATED_MODULE_MAP"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-modules-jsi",
|
|
3
|
-
"version": "58.0.
|
|
3
|
+
"version": "58.0.4",
|
|
4
4
|
"description": "The JavaScript Interface for Expo Modules",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"sideEffects": [],
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"./apple/scripts/test.sh"
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "ad41d067bd3df6dd12f1788acc6b54a68e7a650d",
|
|
45
45
|
"scripts": {
|
|
46
46
|
"benchmark": "TEST_RUNNER_EXPO_BENCHMARK=1 DESTINATION=\"${DESTINATION:-platform=macOS,variant=Mac Catalyst}\" apple/scripts/test.sh -configuration Release -only-testing Benchmarks -enableCodeCoverage NO",
|
|
47
47
|
"build:xcframework": "apple/scripts/build-xcframework.sh",
|
package/.npmignore
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# @generated by expo-module-scripts
|
|
2
|
-
|
|
3
|
-
# Exclude all top-level hidden directories by convention
|
|
4
|
-
/.*/
|
|
5
|
-
|
|
6
|
-
# Exclude tarballs generated by `npm pack`
|
|
7
|
-
/*.tgz
|
|
8
|
-
|
|
9
|
-
__mocks__
|
|
10
|
-
__tests__
|
|
11
|
-
__rsc_tests__
|
|
12
|
-
|
|
13
|
-
/e2e
|
|
14
|
-
/e2e-cli
|
|
15
|
-
/babel.config.js
|
|
16
|
-
/oxlint.config.mjs
|
|
17
|
-
/android/src/androidTest/
|
|
18
|
-
/android/src/test/
|
|
19
|
-
/ios/Tests
|
|
20
|
-
|
|
21
|
-
# Exclude native build output (pnpm pack ignores nested .gitignore files)
|
|
22
|
-
.cxx/
|
|
23
|
-
.gradle/
|
|
24
|
-
/android/build/
|
package/apple/.gitignore
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
.DS_Store
|
|
2
|
-
.build
|
|
3
|
-
.DerivedData
|
|
4
|
-
.swiftpm
|
|
5
|
-
|
|
6
|
-
# Generated module map for the `jsi` Clang module (written by build-xcframework.sh)
|
|
7
|
-
.generated
|
|
8
|
-
|
|
9
|
-
# Staged slices for incremental xcframework builds
|
|
10
|
-
.xcframework-slices
|
|
11
|
-
|
|
12
|
-
# Symlinks to host-app xcframeworks used by the test target (written by scripts/test.sh)
|
|
13
|
-
.test-frameworks
|
|
14
|
-
|
|
15
|
-
# Built xcframework output
|
|
16
|
-
Products
|
package/turbo.json
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://turborepo.dev/schema.json",
|
|
3
|
-
"extends": ["//"],
|
|
4
|
-
"tasks": {
|
|
5
|
-
"precompile-ios": {
|
|
6
|
-
"inputs": [
|
|
7
|
-
"spm.config.json",
|
|
8
|
-
"*.podspec",
|
|
9
|
-
"apple/**",
|
|
10
|
-
"!apple/.DerivedData/**",
|
|
11
|
-
"!apple/.build/**",
|
|
12
|
-
"!apple/.swiftpm/**",
|
|
13
|
-
"!apple/.generated/**",
|
|
14
|
-
"!apple/Products/**",
|
|
15
|
-
"node_modules/react-native/package.json",
|
|
16
|
-
"node_modules/react-native/sdks/hermes-engine/version.properties",
|
|
17
|
-
"$TURBO_ROOT$/tools/src/prebuilds/**"
|
|
18
|
-
],
|
|
19
|
-
"dependsOn": []
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|