expo-modules-autolinking 56.0.11 → 56.0.13
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 +11 -0
- package/external-configs/ios/react-native-reanimated/spm.config.json +3 -3
- package/external-configs/ios/react-native-worklets/spm.config.json +3 -3
- package/package.json +3 -3
- package/scripts/ios/autolinking_manager.rb +1 -0
- package/scripts/ios/cocoapods/installer.rb +77 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,17 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 56.0.13 — 2026-05-26
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- [iOS] Align precompile feature flags for `react-native-worklets@0.8.3` and `react-native-reanimated@4.3.1` with upstream defaults. ([#46221](https://github.com/expo/expo/pull/46221) by [@chrfalch](https://github.com/chrfalch))
|
|
18
|
+
- [iOS] Raise every autolinked Expo module's deployment target to at least `ExpoModulesCore`'s during `pod install`, so adapters whose podspecs declare a lower platform value no longer fail. ([#46175](https://github.com/expo/expo/pull/46175) by [@vonovak](https://github.com/vonovak))
|
|
19
|
+
|
|
20
|
+
## 56.0.12 — 2026-05-23
|
|
21
|
+
|
|
22
|
+
_This version does not introduce any user-facing changes._
|
|
23
|
+
|
|
13
24
|
## 56.0.11 — 2026-05-21
|
|
14
25
|
|
|
15
26
|
### 🐛 Bug fixes
|
|
@@ -50,13 +50,13 @@
|
|
|
50
50
|
"c": [
|
|
51
51
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
52
52
|
"-DREANIMATED_VERSION=${PACKAGE_VERSION}",
|
|
53
|
-
"-DREANIMATED_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:
|
|
53
|
+
"-DREANIMATED_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:true][USE_COMMIT_HOOK_ONLY_FOR_REACT_COMMITS:true][ENABLE_SHARED_ELEMENT_TRANSITIONS:false][FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS:true]\""
|
|
54
54
|
],
|
|
55
55
|
"cxx": [
|
|
56
56
|
"-fno-cxx-modules",
|
|
57
57
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
58
58
|
"-DREANIMATED_VERSION=${PACKAGE_VERSION}",
|
|
59
|
-
"-DREANIMATED_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:
|
|
59
|
+
"-DREANIMATED_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:true][USE_COMMIT_HOOK_ONLY_FOR_REACT_COMMITS:true][ENABLE_SHARED_ELEMENT_TRANSITIONS:false][FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS:true]\""
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"debug": [ "-DHERMES_ENABLE_DEBUGGER=1" ]
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"-include", "QuartzCore/QuartzCore.h",
|
|
124
124
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
125
125
|
"-DREANIMATED_VERSION=${PACKAGE_VERSION}",
|
|
126
|
-
"-DREANIMATED_FEATURE_FLAGS=\\\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:
|
|
126
|
+
"-DREANIMATED_FEATURE_FLAGS=\\\"[RUNTIME_TEST_FLAG:false][DISABLE_COMMIT_PAUSING_MECHANISM:false][ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][IOS_SYNCHRONOUSLY_UPDATE_UI_PROPS:false][EXPERIMENTAL_CSS_ANIMATIONS_FOR_SVG_COMPONENTS:false][USE_SYNCHRONIZABLE_FOR_MUTABLES:true][USE_COMMIT_HOOK_ONLY_FOR_REACT_COMMITS:true][ENABLE_SHARED_ELEMENT_TRANSITIONS:false][FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS:true]\\\""
|
|
127
127
|
],
|
|
128
128
|
"fileMapping": [
|
|
129
129
|
{ "from": "*.h", "to": "reanimated/apple/{filename}", "type": "header" },
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"compilerFlags": {
|
|
48
48
|
"common": {
|
|
49
49
|
"c": [
|
|
50
|
-
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
50
|
+
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][FETCH_PREVIEW_ENABLED:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
51
51
|
"-DWORKLETS_VERSION=${PACKAGE_VERSION}",
|
|
52
52
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
53
53
|
"-DHERMES_V1_ENABLED",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
],
|
|
56
56
|
"cxx": [
|
|
57
57
|
"-fno-cxx-modules",
|
|
58
|
-
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
58
|
+
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][FETCH_PREVIEW_ENABLED:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
59
59
|
"-DWORKLETS_VERSION=${PACKAGE_VERSION}",
|
|
60
60
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
61
61
|
"-DHERMES_V1_ENABLED",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"common": [
|
|
101
101
|
"-include", "Foundation/Foundation.h",
|
|
102
102
|
"-include", "UIKit/UIKit.h",
|
|
103
|
-
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
103
|
+
"-DWORKLETS_FEATURE_FLAGS=\"[RUNTIME_TEST_FLAG:false][FETCH_PREVIEW_ENABLED:false][IOS_DYNAMIC_FRAMERATE_ENABLED:true]\"",
|
|
104
104
|
"-DWORKLETS_VERSION=${PACKAGE_VERSION}",
|
|
105
105
|
"-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}",
|
|
106
106
|
"-DHERMES_V1_ENABLED",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-modules-autolinking",
|
|
3
|
-
"version": "56.0.
|
|
3
|
+
"version": "56.0.13",
|
|
4
4
|
"description": "Scripts that autolink Expo modules.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -44,12 +44,12 @@
|
|
|
44
44
|
"expo-module-scripts": "56.0.2"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@expo/require-utils": "^56.1.
|
|
47
|
+
"@expo/require-utils": "^56.1.3",
|
|
48
48
|
"@expo/spawn-async": "^1.8.0",
|
|
49
49
|
"chalk": "^4.1.0",
|
|
50
50
|
"commander": "^7.2.0"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "f67a101bcbe56114e982184834b93da7bbed00af",
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "expo-module build",
|
|
55
55
|
"clean": "expo-module clean",
|
|
@@ -108,6 +108,7 @@ module Expo
|
|
|
108
108
|
|
|
109
109
|
# Install the pod.
|
|
110
110
|
@podfile.pod(pod.pod_name, pod_options)
|
|
111
|
+
@podfile.expo_autolinked_pod_names << pod.pod_name
|
|
111
112
|
|
|
112
113
|
# TODO: Can remove this once we move all the interfaces into the core.
|
|
113
114
|
next if pod.pod_name.end_with?('Interface')
|
|
@@ -19,6 +19,14 @@ module Pod
|
|
|
19
19
|
def expo_add_modules_to_patch(modules)
|
|
20
20
|
framework_modules_to_patch.concat(modules)
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
# Pod names of Expo modules registered by `use_expo_modules!`.
|
|
24
|
+
# Used at post-install time to reconcile their deployment targets
|
|
25
|
+
# with ExpoModulesCore's, so an adapter declaring a lower platform
|
|
26
|
+
# value in its podspec doesn't fail the Swift module-import check.
|
|
27
|
+
def expo_autolinked_pod_names
|
|
28
|
+
@expo_autolinked_pod_names ||= []
|
|
29
|
+
end
|
|
22
30
|
end
|
|
23
31
|
|
|
24
32
|
class Installer
|
|
@@ -50,6 +58,14 @@ module Pod
|
|
|
50
58
|
|
|
51
59
|
# Run all precompiled module post-install configuration
|
|
52
60
|
Expo::PrecompiledModules.perform_post_install(self)
|
|
61
|
+
|
|
62
|
+
# Raise every autolinked Expo module's deployment target to at least
|
|
63
|
+
# ExpoModulesCore's. CocoaPods + react_native_post_install only raise
|
|
64
|
+
# pods to RN's iOS floor, which can leave Expo adapters declaring a
|
|
65
|
+
# lower platform value below ExpoModulesCore's requirement, leading to
|
|
66
|
+
# "Compiling for iOS 15.1, but module 'ExpoModulesCore' has a minimum deployment target of iOS 16.4"
|
|
67
|
+
# type of message
|
|
68
|
+
reconcile_expo_module_deployment_targets()
|
|
53
69
|
end
|
|
54
70
|
|
|
55
71
|
define_method(:run_podfile_pre_install_hooks) do
|
|
@@ -84,6 +100,67 @@ module Pod
|
|
|
84
100
|
|
|
85
101
|
private
|
|
86
102
|
|
|
103
|
+
# See call site in perform_post_install_actions for rationale.
|
|
104
|
+
# This runs AFTER the user's `post_install` hook, so it will overwrite any
|
|
105
|
+
# deployment target a consumer set there for an Expo module. That is
|
|
106
|
+
# intentional — the bumped pod list is logged so the override is visible.
|
|
107
|
+
def reconcile_expo_module_deployment_targets
|
|
108
|
+
# Mapping from Pod::Platform symbol to the Xcode build setting key
|
|
109
|
+
# that stores its deployment target and a human-readable label.
|
|
110
|
+
deployment_targets = {
|
|
111
|
+
ios: { key: 'IPHONEOS_DEPLOYMENT_TARGET', label: 'iOS' },
|
|
112
|
+
osx: { key: 'MACOSX_DEPLOYMENT_TARGET', label: 'macOS' },
|
|
113
|
+
tvos: { key: 'TVOS_DEPLOYMENT_TARGET', label: 'tvOS' },
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
expo_pod_names = @podfile.expo_autolinked_pod_names.to_set
|
|
117
|
+
return if expo_pod_names.empty?
|
|
118
|
+
|
|
119
|
+
core_target = self.pod_targets.find { |t| t.pod_name == 'ExpoModulesCore' }
|
|
120
|
+
core_spec = core_target&.root_spec
|
|
121
|
+
return if core_spec.nil?
|
|
122
|
+
|
|
123
|
+
required = deployment_targets
|
|
124
|
+
.map { |platform, info| [info[:key], { label: info[:label], version: core_spec.deployment_target(platform) }] }
|
|
125
|
+
.reject { |_, info| info[:version].nil? || info[:version].empty? }
|
|
126
|
+
.to_h
|
|
127
|
+
return if required.empty?
|
|
128
|
+
|
|
129
|
+
bumped = {} # pod_name => Array of bumped platform labels
|
|
130
|
+
self.target_installation_results.pod_target_installation_results.each_value do |result|
|
|
131
|
+
# Keys in pod_target_installation_results are target names, which can
|
|
132
|
+
# differ from pod names under scoped targets — use pod_name explicitly.
|
|
133
|
+
pod_name = result.target.pod_name
|
|
134
|
+
next unless expo_pod_names.include?(pod_name)
|
|
135
|
+
next if pod_name == 'ExpoModulesCore'
|
|
136
|
+
|
|
137
|
+
bumped_platforms = []
|
|
138
|
+
result.native_target.build_configurations.each do |config|
|
|
139
|
+
required.each do |key, info|
|
|
140
|
+
current = config.build_settings[key]
|
|
141
|
+
# nil means the pod doesn't target this platform — don't create a setting for it.
|
|
142
|
+
# Empty string or an xcconfig reference (e.g. `$(inherited)`) means we can't
|
|
143
|
+
# compare versions, so leave it alone.
|
|
144
|
+
next if current.nil? || current.empty? || current.start_with?('$')
|
|
145
|
+
next unless Gem::Version.new(current) < Gem::Version.new(info[:version])
|
|
146
|
+
config.build_settings[key] = info[:version]
|
|
147
|
+
bumped_platforms << info[:label] unless bumped_platforms.include?(info[:label])
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
bumped[pod_name] = bumped_platforms unless bumped_platforms.empty?
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
unless bumped.empty?
|
|
154
|
+
versions_by_label = required.values.map { |info| [info[:label], info[:version]] }.to_h
|
|
155
|
+
Pod::UI.puts "[Expo] ".blue + "Raised deployment target for Expo modules matching ExpoModulesCore:".yellow
|
|
156
|
+
bumped.each do |pod_name, platforms|
|
|
157
|
+
summary = platforms.map { |label| "#{label}=#{versions_by_label[label]}" }.join(' ')
|
|
158
|
+
Pod::UI.puts " #{pod_name} (#{summary})".yellow
|
|
159
|
+
end
|
|
160
|
+
self.pods_project.save
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
87
164
|
# Ensures every slice declared by ExpoModulesJSI's podspec exists in
|
|
88
165
|
# `Products/ExpoModulesJSI.xcframework`. CocoaPods only runs
|
|
89
166
|
# prepare_command when a pod is freshly downloaded or its podspec
|