vxrn 1.17.1 → 1.17.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.
Files changed (2) hide show
  1. package/expo-plugin.cjs +30 -15
  2. package/package.json +11 -11
package/expo-plugin.cjs CHANGED
@@ -173,8 +173,8 @@ const plugin = (config, options = {}) => {
173
173
  if (next !== podfile) {
174
174
  fs.writeFileSync(podfilePath, next, 'utf8')
175
175
  console.info(
176
- '[vxrn] patched Podfile to skip expo-updates Expo Metro invocation\n' +
177
- ' to disable: set "one.disableExpoUpdatesIosShellScriptPatch": "true" in ios/Podfile.properties.json'
176
+ '[vxrn] patched Podfile to generate the EXUpdates embedded manifest with EXPO_NO_METRO_WORKSPACE_ROOT=1\n' +
177
+ ' to disable patch entirely: set "one.disableExpoUpdatesIosShellScriptPatch": "true" in ios/Podfile.properties.json'
178
178
  )
179
179
  }
180
180
  return config
@@ -184,7 +184,6 @@ const plugin = (config, options = {}) => {
184
184
  ])
185
185
  }
186
186
 
187
-
188
187
  /**
189
188
  * RN disables Metro minification for iOS Hermes Release, expecting
190
189
  * hermesc -O to handle bytecode optimization. For large One/VxRN bundles
@@ -654,19 +653,32 @@ function injectSwift6WorkaroundIntoPodfile(podfile) {
654
653
 
655
654
  /**
656
655
  * Replace the EXUpdates pod's "Generate updates resources for expo-updates"
657
- * Xcode build phase with one that writes a minimal embedded manifest and sets
658
- * SKIP_BUNDLING=1.
656
+ * Xcode build phase. The wrapped script exports
657
+ * `EXPO_NO_METRO_WORKSPACE_ROOT=1` and runs Expo's real
658
+ * `create-updates-resources-ios.sh`, producing an `app.manifest` whose
659
+ * `nsBundleDir`/`nsBundleFilename` entries match the asset paths vxrn's
660
+ * iOS bundler writes into the `.app`. `expo-asset`'s runtime transformer
661
+ * then resolves project-local `require()`'d assets to real local file
662
+ * URIs.
663
+ *
664
+ * For this to actually produce non-blank URIs the app's Metro config
665
+ * also needs to pin `server.unstable_serverRoot` to `projectRoot` for
666
+ * release-shaped native bundles. Without that, vxrn writes assets at
667
+ * workspace-rooted paths while the manifest points at project-rooted
668
+ * paths and the mismatch leaves project-local images blank. `node_modules`
669
+ * assets resolve correctly either way.
659
670
  *
660
- * Why: expo-updates' shell script runs Expo Metro on the JS entry to produce
661
- * `app.manifest`. Under One/VxRN, release bundling is routed through the
662
- * react-native CLI override so One's router transforms are wired; Expo Metro
663
- * doesn't see those transforms and (on monorepos) often can't even resolve the
664
- * entry. The wrapped script still runs the original so fingerprint/resource
665
- * side-effects fire — only the Metro bundle step is skipped.
671
+ * Disable the patch entirely: set
672
+ * `"one.disableExpoUpdatesIosShellScriptPatch": "true"` in
673
+ * `ios/Podfile.properties.json`. The upstream script will then run
674
+ * untouched, which on most pnpm monorepos fails to resolve the One entry
675
+ * file and aborts the build.
666
676
  *
667
- * Disable: set "one.disableExpoUpdatesIosShellScriptPatch": "true" in
668
- * ios/Podfile.properties.json.
677
+ * See the "Monorepo asset resolution" section of the OTA Updates docs for
678
+ * the full picture (server-root pinning + this manifest mode together).
669
679
  */
680
+ // Preserved verbatim so existing patched Podfiles re-trigger the idempotency
681
+ // check on next pod install instead of getting the patch injected twice.
670
682
  const EXPO_UPDATES_METRO_SKIP_MARKER =
671
683
  '# [vxrn/one] skip expo-updates Expo Metro for embedded manifest'
672
684
 
@@ -702,9 +714,12 @@ function injectExpoUpdatesIosResourcesPatchIntoPodfile(podfile) {
702
714
  fi
703
715
 
704
716
  mkdir -p "$RESOURCE_DEST"
705
- "\${NODE_BINARY:-node}" -e "const c=require('node:crypto');const f=require('node:fs');f.writeFileSync(process.argv[1],JSON.stringify({id:c.randomUUID(),commitTime:Date.now(),assets:[]}))" "$RESOURCE_DEST/app.manifest"
706
717
 
707
- export SKIP_BUNDLING=1
718
+ # generate a real EXUpdates manifest. requires the app's Metro
719
+ # config to pin server.unstable_serverRoot to the project root
720
+ # for release-shaped native bundles; otherwise asset paths in
721
+ # the manifest won't match what vxrn writes into the .app.
722
+ export EXPO_NO_METRO_WORKSPACE_ROOT=1
708
723
 
709
724
  #{original_script}
710
725
  SCRIPT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.17.1",
3
+ "version": "1.17.2",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -59,16 +59,16 @@
59
59
  "@expo/config-plugins": "~55.0.6",
60
60
  "@hono/node-server": "^1.19.10",
61
61
  "@react-native/dev-middleware": "^0.83.4",
62
- "@vxrn/compiler": "1.17.1",
63
- "@vxrn/debug": "1.17.1",
64
- "@vxrn/query-string": "1.17.1",
65
- "@vxrn/resolve": "1.17.1",
66
- "@vxrn/safe-area": "1.17.1",
67
- "@vxrn/url-parse": "1.17.1",
68
- "@vxrn/utils": "1.17.1",
69
- "@vxrn/vendor": "1.17.1",
70
- "@vxrn/vite-flow": "1.17.1",
71
- "@vxrn/vite-plugin-metro": "1.17.1",
62
+ "@vxrn/compiler": "1.17.2",
63
+ "@vxrn/debug": "1.17.2",
64
+ "@vxrn/query-string": "1.17.2",
65
+ "@vxrn/resolve": "1.17.2",
66
+ "@vxrn/safe-area": "1.17.2",
67
+ "@vxrn/url-parse": "1.17.2",
68
+ "@vxrn/utils": "1.17.2",
69
+ "@vxrn/vendor": "1.17.2",
70
+ "@vxrn/vite-flow": "1.17.2",
71
+ "@vxrn/vite-plugin-metro": "1.17.2",
72
72
  "citty": "^0.1.6",
73
73
  "dotenv": "^17.2.1",
74
74
  "dotenv-expand": "^12.0.2",