peachsim 0.1.2185 → 0.1.2186

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 (92) hide show
  1. package/cli/commands/cpu-profile.ts +6 -2
  2. package/cli/commands/shell-url.ts +3 -6
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/attached-projects.cjs +1 -1
  6. package/dist-lib/auth/shared-session.cjs +1 -1
  7. package/dist-lib/backend-origin.cjs +1 -1
  8. package/dist-lib/beta.cjs +1 -1
  9. package/dist-lib/beta.mjs +1 -1
  10. package/dist-lib/bridge-constants.cjs +1 -1
  11. package/dist-lib/bridge-contract-input.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.mjs +1 -1
  13. package/dist-lib/bridge-contract.cjs +1 -1
  14. package/dist-lib/bridge-contract.mjs +1 -1
  15. package/dist-lib/bundle-channel.cjs +55 -10
  16. package/dist-lib/capture-contract.cjs +1 -1
  17. package/dist-lib/capture-contract.mjs +1 -1
  18. package/dist-lib/cloud-contract.cjs +1 -1
  19. package/dist-lib/cloud-contract.mjs +1 -1
  20. package/dist-lib/cloud-test-args.cjs +1 -1
  21. package/dist-lib/cloud-test-args.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/config.mjs +1 -1
  26. package/dist-lib/detox/index.cjs +2 -2
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/expo-swift-bundle.cjs +41 -6
  29. package/dist-lib/expo-swift-metadata.cjs +2 -1
  30. package/dist-lib/expo-swift-metadata.mjs +2 -1
  31. package/dist-lib/home-paths.cjs +1 -1
  32. package/dist-lib/host/bridge-host.cjs +55 -10
  33. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  34. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  35. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  36. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  37. package/dist-lib/host/websocket-proxy.cjs +1 -1
  38. package/dist-lib/index.cjs +47 -6
  39. package/dist-lib/jump-to-source-babel.cjs +1 -1
  40. package/dist-lib/jump-to-source-native.cjs +1 -1
  41. package/dist-lib/kotlin-host.cjs +5 -3
  42. package/dist-lib/menu.cjs +1 -1
  43. package/dist-lib/menu.mjs +1 -1
  44. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  46. package/dist-lib/metro-production-bundle.cjs +1 -1
  47. package/dist-lib/metro-production-bundle.mjs +1 -1
  48. package/dist-lib/metro.cjs +47 -6
  49. package/dist-lib/native-app-identity-project.cjs +45 -4
  50. package/dist-lib/native-app-identity-project.mjs +45 -4
  51. package/dist-lib/native-app-identity.cjs +40 -2
  52. package/dist-lib/native-app-identity.mjs +40 -2
  53. package/dist-lib/native-firebase-metadata.cjs +1 -1
  54. package/dist-lib/native-firebase-metadata.mjs +1 -1
  55. package/dist-lib/pdfium-raster.cjs +1 -1
  56. package/dist-lib/pdfium-raster.mjs +1 -1
  57. package/dist-lib/plist.cjs +1 -1
  58. package/dist-lib/plist.mjs +1 -1
  59. package/dist-lib/profiles.cjs +1 -1
  60. package/dist-lib/public-brand.cjs +1 -1
  61. package/dist-lib/public-origins-lib-esm.json +24 -24
  62. package/dist-lib/public-origins-lib.json +53 -53
  63. package/dist-lib/react-native-host-modules.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.mjs +1 -1
  65. package/dist-lib/reap-browser.cjs +1 -1
  66. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  67. package/dist-lib/sdk.cjs +1 -1
  68. package/dist-lib/sdk.mjs +1 -1
  69. package/dist-lib/skills.cjs +67 -13
  70. package/dist-lib/swift-compile.cjs +2 -2
  71. package/dist-lib/swift-compile.mjs +2 -2
  72. package/dist-lib/swift-package.cjs +1 -1
  73. package/dist-lib/swift-package.mjs +1 -1
  74. package/dist-lib/swift-submit.cjs +1 -1
  75. package/dist-lib/swift-submit.mjs +1 -1
  76. package/dist-lib/swift-toolchain.cjs +1 -1
  77. package/dist-lib/swift.cjs +1 -1
  78. package/dist-lib/vite-swift.cjs +3 -3
  79. package/dist-lib/vite.cjs +4 -4
  80. package/dist-lib/worklet-executable.cjs +1 -1
  81. package/dist-lib/worklet-executable.mjs +1 -1
  82. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +1 -0
  83. package/kotlin/sdk.tar.gz +0 -0
  84. package/package.json +1 -1
  85. package/runtime-companion.json +1 -1
  86. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIImageAsset.h +1 -1
  87. package/src/expo-native-workspace.ts +7 -1
  88. package/src/kotlin-host.ts +4 -2
  89. package/src/native-app-identity-project.ts +10 -2
  90. package/src/native-app-identity.ts +15 -1
  91. package/src/nativeAppIconContract.ts +37 -0
  92. package/src/swift-installed-targets.ts +8 -0
@@ -38,6 +38,10 @@ interface ProfileOptions {
38
38
  verbose?: boolean
39
39
  }
40
40
 
41
+ // a page busy with the workload it profiles answers late, and stopping a long
42
+ // capture serializes every worker's profile
43
+ const CDP_COMMAND_TIMEOUT_MS = 30_000
44
+
41
45
  // compact CDP client with flatten-mode sessionId routing — one ws to the page
42
46
  // target carries the page session plus every auto-attached worker session.
43
47
  class Cdp {
@@ -97,8 +101,8 @@ class Cdp {
97
101
  return new Promise((res, rej) => {
98
102
  const timeout = setTimeout(() => {
99
103
  this.pending.delete(id)
100
- rej(new Error(`CDP ${method} timed out after 5s`))
101
- }, 5_000)
104
+ rej(new Error(`CDP ${method} timed out after ${CDP_COMMAND_TIMEOUT_MS / 1000}s`))
105
+ }, CDP_COMMAND_TIMEOUT_MS)
102
106
  this.pending.set(id, { res, rej, timeout })
103
107
  this.ws.send(
104
108
  JSON.stringify({ id, method, params, ...(sessionId ? { sessionId } : {}) }),
@@ -675,8 +675,8 @@ function readOneConfigNativeAppIdentity(appDir: string, platform: 'ios' | 'andro
675
675
  }
676
676
 
677
677
  // a plain Metro carries no identity footer or header, so the page carries the
678
- // identity the Peach Metro plugin reads from the same project. its icon
679
- // artwork stays with bundle builders, where data uris cannot swell a url. a
678
+ // identity the Peach Metro plugin reads from the same project. artwork travels
679
+ // in the staged launch metadata body with the rest of the native configuration.
680
680
  // `--ios-target` here and the plugin's iosTarget override the default scheme.
681
681
  function readProjectNativeAppIdentityWire(
682
682
  project: ResolvedAppProject,
@@ -695,10 +695,7 @@ function readProjectNativeAppIdentityWire(
695
695
  undefined,
696
696
  environment,
697
697
  ) ?? readOneConfigNativeAppIdentity(project.appDir, platform)
698
- return (
699
- identity &&
700
- createNativeAppIdentityHeader({ ...identity, appIconArtwork: undefined })
701
- )
698
+ return identity && createNativeAppIdentityHeader(identity)
702
699
  } catch (error) {
703
700
  if (error instanceof NativeAppTargetSelectionError) return null
704
701
  throw error
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1296,6 +1296,34 @@ var init_assetCatalogContract = __esm({
1296
1296
  });
1297
1297
 
1298
1298
  // src/nativeAppIconContract.ts
1299
+ function resolveNativeBundleIcons(icons, catalogNames, resolveReference) {
1300
+ if (!isRecord(icons) && catalogNames.length === 0) return void 0;
1301
+ const resolve4 = (value) => {
1302
+ if (typeof value === "string") return resolveReference(value);
1303
+ if (Array.isArray(value)) return value.map(resolve4);
1304
+ if (isRecord(value))
1305
+ return Object.fromEntries(
1306
+ Object.entries(value).map(([key2, entry]) => [
1307
+ resolveReference(key2),
1308
+ resolve4(entry)
1309
+ ])
1310
+ );
1311
+ return value;
1312
+ };
1313
+ const dictionary2 = isRecord(icons) ? Object.fromEntries(
1314
+ Object.entries(icons).map(([key2, value]) => [key2, resolve4(value)])
1315
+ ) : {};
1316
+ if (catalogNames.length === 0) return dictionary2;
1317
+ return {
1318
+ ...dictionary2,
1319
+ CFBundleAlternateIcons: {
1320
+ ...Object.fromEntries(
1321
+ catalogNames.map((name3) => [name3, { CFBundleIconName: name3 }])
1322
+ ),
1323
+ ...isRecord(dictionary2.CFBundleAlternateIcons) ? dictionary2.CFBundleAlternateIcons : {}
1324
+ }
1325
+ };
1326
+ }
1299
1327
  function isNativeAppIconArtwork(value) {
1300
1328
  return isRecord(value) && (value.primary === void 0 || isSwiftImageVariants(value.primary)) && isRecord(value.alternates) && Object.values(value.alternates).every(isSwiftImageVariants);
1301
1329
  }
@@ -1633,6 +1661,7 @@ function isNativeAppIdentity(value) {
1633
1661
  if (value.androidPhotoLibraryAddOnly !== void 0 && value.androidPhotoLibraryAddOnly !== true)
1634
1662
  return false;
1635
1663
  if (value.googleSignIn !== void 0 && !isRecord(value.googleSignIn)) return false;
1664
+ if (value.bundleIcons !== void 0 && !isRecord(value.bundleIcons)) return false;
1636
1665
  const descriptions = value.permissionUsageDescriptions;
1637
1666
  if (value.reanimatedStaticFeatureFlags !== void 0 && (!isRecord(value.reanimatedStaticFeatureFlags) || !Object.values(value.reanimatedStaticFeatureFlags).every(
1638
1667
  (flag) => typeof flag === "boolean"
@@ -30754,7 +30783,7 @@ var init_swift_compile = __esm({
30754
30783
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
30755
30784
  MULTI_MANIFEST_VERSION = 68;
30756
30785
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
30757
- compilerSourceDigest = true ? "e48d05f659c020e9d4ddc0f6a17da7924aae807faacd6bef7cbed911c43d08cc" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
30786
+ compilerSourceDigest = true ? "0d2e8d6fb4545fb31a692a87bd3215ef3a9a64a8c3e1b2fc1f2a3e79511325ec" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
30758
30787
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
30759
30788
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
30760
30789
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -37892,7 +37921,8 @@ async function prepareWorkspace(app, stage, key2, podsEnvironment) {
37892
37921
  const command = [...prefix, ...args];
37893
37922
  await run11(command[0], command.slice(1), cwd, env);
37894
37923
  };
37895
- if (manager.startsWith("bun@") && (!projectReady || !import_node_fs57.default.existsSync(bunExecutable)))
37924
+ const installedBun = manager.startsWith("bun@") ? (0, import_node_child_process32.spawnSync)(bunExecutable, ["--version"], { encoding: "utf8" }) : null;
37925
+ if (manager.startsWith("bun@") && (installedBun?.status !== 0 || installedBun.stdout.trim() !== manager.slice(4)))
37896
37926
  await execute(
37897
37927
  [
37898
37928
  "npm",
@@ -39149,9 +39179,13 @@ function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSo
39149
39179
  }
39150
39180
  }
39151
39181
  const alternateSetting = settings?.("ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES") ?? "";
39182
+ const catalogAlternateNames = [];
39152
39183
  for (const match of alternateSetting.replace(/\\"/g, '"').matchAll(/"([^"]*)"|([^\s(),]+)/g)) {
39153
39184
  const val = match[1] ?? match[2];
39154
- if (val) alternateIconNames.add(val);
39185
+ if (val) {
39186
+ alternateIconNames.add(val);
39187
+ catalogAlternateNames.push(val);
39188
+ }
39155
39189
  }
39156
39190
  const permissionUsageDescriptions = {};
39157
39191
  for (const [key2, value] of Object.entries(dictionary2)) {
@@ -39214,6 +39248,7 @@ function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSo
39214
39248
  ipadSupportedInterfaceOrientations,
39215
39249
  ...defaultScreenOrientationMask ? { defaultScreenOrientationMask } : {},
39216
39250
  alternateIconNames: [...alternateIconNames],
39251
+ bundleIcons: resolveNativeBundleIcons(icons, catalogAlternateNames, (value) => value),
39217
39252
  appIconArtwork: resolveNativeAppIconArtwork(
39218
39253
  app.resources,
39219
39254
  (file) => import_node_fs61.default.readFileSync(file, "utf8"),
@@ -42949,7 +42984,7 @@ var init_swift_standin_digest = __esm({
42949
42984
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
42950
42985
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
42951
42986
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
42952
- STANDIN_SOURCE_DIGEST = true ? "0981767eef4ad46fe5cb602ee15f1de9ea06dac3a2edb4dab0f6d5279b018a3b" : standinSourceDigest();
42987
+ STANDIN_SOURCE_DIGEST = true ? "62c7fc880aa6efc985c4786587cb8441b81094e44c28f8d65e1d6dffda9c24f4" : standinSourceDigest();
42953
42988
  }
42954
42989
  });
42955
42990
 
@@ -49813,6 +49848,14 @@ function applyInstalledSwiftTargets(collection, snapshot, generatedTargets, root
49813
49848
  return !collection.targets.some((target2) => target2.name === module2);
49814
49849
  });
49815
49850
  dropSuppliedHeaders(generated, native);
49851
+ if (native.flattensPublicHeaders && native.publicHeaders.length > 0)
49852
+ generated.swiftFlags = [
49853
+ ...generated.swiftFlags ?? [],
49854
+ "-Xcc",
49855
+ "-I",
49856
+ "-Xcc",
49857
+ `$(PEACH_INPUT_ROOT)/.build/peach-cxx-headers/${native.name}`
49858
+ ];
49816
49859
  const flags = originalModuleFlags(native.flags);
49817
49860
  generated.clangSettings = [
49818
49861
  { tool: "c", flags: [...flags, ...ndebug, ...search] },
@@ -54988,7 +55031,7 @@ var init_nitro_superset = __esm({
54988
55031
  init_nitroContract();
54989
55032
  init_swift_standin_digest();
54990
55033
  NITRO_SUPERSET_ENTRY_NAME = "superset";
54991
- NITRO_COMPILER_DIGEST = true ? "f02c3ec3fd9a77d144224ecf36dbf177c3878f12158689dcd8dcd6347e72ca55" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
55034
+ NITRO_COMPILER_DIGEST = true ? "657f6d25b5a8cead1b82960b638441e0fe6bc4380c409fbb9809a56d6f0102d6" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
54992
55035
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
54993
55036
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
54994
55037
  published = /* @__PURE__ */ new Map();
@@ -56213,7 +56256,7 @@ var init_expo_native_compiler_digest = __esm({
56213
56256
 
56214
56257
  // src/expo-native-prebuilt.ts
56215
56258
  function expoNativeCompilerDigestValue() {
56216
- return true ? "5096ba1e78a0087b6e56f15c4b37fcbd9bcabb2acde17a257d8add357efd462c" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
56259
+ return true ? "e50ab1d8ec731167f92f711da0833fa534d1aec4b5ce950a6ba947279df8c1e7" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
56217
56260
  }
56218
56261
  function readSources(value) {
56219
56262
  const sources = isRecord(value) ? value.sources : null;
@@ -60595,10 +60638,11 @@ function entrySource(ids) {
60595
60638
  "",
60596
60639
  "@OptIn(kotlin.js.ExperimentalJsExport::class)",
60597
60640
  "@JsExport",
60598
- "fun peachSetAndroidDeviceInfo(model: String, release: String, apiLevel: Int, locale: String, timeZone: String) {",
60641
+ "fun peachSetAndroidDeviceInfo(model: String, release: String, apiLevel: Int, locale: String, timeZone: String, settings: String) {",
60599
60642
  " Build.setDevice(model, release, apiLevel)",
60600
60643
  " java.util.Locale.setDefault(java.util.Locale.forLanguageTag(locale))",
60601
60644
  " java.util.TimeZone.setDevice(timeZone)",
60645
+ " dev.peach.android.ProcessSettings.configure(settings)",
60602
60646
  "}",
60603
60647
  "",
60604
60648
  "@OptIn(kotlin.js.ExperimentalJsExport::class, kotlinx.coroutines.DelicateCoroutinesApi::class)",
@@ -60966,10 +61010,11 @@ async function expoKotlinArtifact(root, moduleRoot, origin, modules) {
60966
61010
  " ))",
60967
61011
  "}",
60968
61012
  "",
60969
- "@JsExport fun peachSetAndroidDeviceInfo(model: String, release: String, apiLevel: Int, locale: String, timeZone: String) {",
61013
+ "@JsExport fun peachSetAndroidDeviceInfo(model: String, release: String, apiLevel: Int, locale: String, timeZone: String, settings: String) {",
60970
61014
  " android.os.Build.setDevice(model, release, apiLevel)",
60971
61015
  " java.util.Locale.setDefault(java.util.Locale.forLanguageTag(locale))",
60972
61016
  " java.util.TimeZone.setDevice(timeZone)",
61017
+ " dev.peach.android.ProcessSettings.configure(settings)",
60973
61018
  " PeachExpoRuntime.configureProcessLocale(locale)",
60974
61019
  "}",
60975
61020
  "",
@@ -62801,7 +62846,7 @@ var import_node_path5 = require("node:path");
62801
62846
  init_src();
62802
62847
 
62803
62848
  // runtime-companion.json
62804
- var runtime_companion_default = { abi: 1, sha256: "d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f", file: "node/cli-d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f.cjs" };
62849
+ var runtime_companion_default = { abi: 1, sha256: "c63f83dd24fd36986b72da8da6b6a51edce0a2d061e3bc05d3439d22b1a86c91", file: "node/cli-c63f83dd24fd36986b72da8da6b6a51edce0a2d061e3bc05d3439d22b1a86c91.cjs" };
62805
62850
 
62806
62851
  // src/cli-runtime.ts
62807
62852
  init_answeredNativePackages();
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 40761776;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/cloud-test-args.ts
4
4
  var CLOUD_TEST_ARGS_MAX_COUNT = 32;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../contrast-runtime-delivery/src/version.ts
4
4
  function isValidRuntimeVersion(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -2512,7 +2512,7 @@ function isValidRuntimeVersion(value) {
2512
2512
  }
2513
2513
 
2514
2514
  // runtime-companion.json
2515
- var runtime_companion_default = { abi: 1, sha256: "d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f", file: "node/cli-d1826a4d4d05c87a157d5b160177de9cd6f1fd10a3d142804a92a0d57ff3060f.cjs" };
2515
+ var runtime_companion_default = { abi: 1, sha256: "c63f83dd24fd36986b72da8da6b6a51edce0a2d061e3bc05d3439d22b1a86c91", file: "node/cli-c63f83dd24fd36986b72da8da6b6a51edce0a2d061e3bc05d3439d22b1a86c91.cjs" };
2516
2516
 
2517
2517
  // src/answeredNativePackages.ts
2518
2518
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -6905,6 +6905,34 @@ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
6905
6905
 
6906
6906
  // src/nativeAppIconContract.ts
6907
6907
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
6908
+ function resolveNativeBundleIcons(icons, catalogNames, resolveReference) {
6909
+ if (!isRecord(icons) && catalogNames.length === 0) return void 0;
6910
+ const resolve3 = (value) => {
6911
+ if (typeof value === "string") return resolveReference(value);
6912
+ if (Array.isArray(value)) return value.map(resolve3);
6913
+ if (isRecord(value))
6914
+ return Object.fromEntries(
6915
+ Object.entries(value).map(([key2, entry]) => [
6916
+ resolveReference(key2),
6917
+ resolve3(entry)
6918
+ ])
6919
+ );
6920
+ return value;
6921
+ };
6922
+ const dictionary2 = isRecord(icons) ? Object.fromEntries(
6923
+ Object.entries(icons).map(([key2, value]) => [key2, resolve3(value)])
6924
+ ) : {};
6925
+ if (catalogNames.length === 0) return dictionary2;
6926
+ return {
6927
+ ...dictionary2,
6928
+ CFBundleAlternateIcons: {
6929
+ ...Object.fromEntries(
6930
+ catalogNames.map((name3) => [name3, { CFBundleIconName: name3 }])
6931
+ ),
6932
+ ...isRecord(dictionary2.CFBundleAlternateIcons) ? dictionary2.CFBundleAlternateIcons : {}
6933
+ }
6934
+ };
6935
+ }
6908
6936
  function isNativeAppIconArtwork(value) {
6909
6937
  return isRecord(value) && (value.primary === void 0 || isSwiftImageVariants(value.primary)) && isRecord(value.alternates) && Object.values(value.alternates).every(isSwiftImageVariants);
6910
6938
  }
@@ -7221,6 +7249,7 @@ function isNativeAppIdentity(value) {
7221
7249
  if (value.androidPhotoLibraryAddOnly !== void 0 && value.androidPhotoLibraryAddOnly !== true)
7222
7250
  return false;
7223
7251
  if (value.googleSignIn !== void 0 && !isRecord(value.googleSignIn)) return false;
7252
+ if (value.bundleIcons !== void 0 && !isRecord(value.bundleIcons)) return false;
7224
7253
  const descriptions = value.permissionUsageDescriptions;
7225
7254
  if (value.reanimatedStaticFeatureFlags !== void 0 && (!isRecord(value.reanimatedStaticFeatureFlags) || !Object.values(value.reanimatedStaticFeatureFlags).every(
7226
7255
  (flag) => typeof flag === "boolean"
@@ -22974,7 +23003,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
22974
23003
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
22975
23004
  var MULTI_MANIFEST_VERSION = 68;
22976
23005
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
22977
- var compilerSourceDigest = true ? "e48d05f659c020e9d4ddc0f6a17da7924aae807faacd6bef7cbed911c43d08cc" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
23006
+ var compilerSourceDigest = true ? "0d2e8d6fb4545fb31a692a87bd3215ef3a9a64a8c3e1b2fc1f2a3e79511325ec" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
22978
23007
  function swiftArtifactHash(input, release, moduleRoot) {
22979
23008
  const hash = (0, import_node_crypto19.createHash)("sha256");
22980
23009
  hash.update(`swift-compile
@@ -31591,7 +31620,8 @@ async function prepareWorkspace(app, stage, key2, podsEnvironment) {
31591
31620
  const command = [...prefix, ...args];
31592
31621
  await run8(command[0], command.slice(1), cwd, env);
31593
31622
  };
31594
- if (manager.startsWith("bun@") && (!projectReady || !import_node_fs56.default.existsSync(bunExecutable)))
31623
+ const installedBun = manager.startsWith("bun@") ? (0, import_node_child_process32.spawnSync)(bunExecutable, ["--version"], { encoding: "utf8" }) : null;
31624
+ if (manager.startsWith("bun@") && (installedBun?.status !== 0 || installedBun.stdout.trim() !== manager.slice(4)))
31595
31625
  await execute(
31596
31626
  [
31597
31627
  "npm",
@@ -32232,7 +32262,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
32232
32262
  return hash.digest("hex");
32233
32263
  }
32234
32264
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
32235
- var STANDIN_SOURCE_DIGEST = true ? "0981767eef4ad46fe5cb602ee15f1de9ea06dac3a2edb4dab0f6d5279b018a3b" : standinSourceDigest();
32265
+ var STANDIN_SOURCE_DIGEST = true ? "62c7fc880aa6efc985c4786587cb8441b81094e44c28f8d65e1d6dffda9c24f4" : standinSourceDigest();
32236
32266
 
32237
32267
  // src/expoSwiftContract.ts
32238
32268
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -32311,9 +32341,13 @@ function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSo
32311
32341
  }
32312
32342
  }
32313
32343
  const alternateSetting = settings?.("ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES") ?? "";
32344
+ const catalogAlternateNames = [];
32314
32345
  for (const match of alternateSetting.replace(/\\"/g, '"').matchAll(/"([^"]*)"|([^\s(),]+)/g)) {
32315
32346
  const val = match[1] ?? match[2];
32316
- if (val) alternateIconNames.add(val);
32347
+ if (val) {
32348
+ alternateIconNames.add(val);
32349
+ catalogAlternateNames.push(val);
32350
+ }
32317
32351
  }
32318
32352
  const permissionUsageDescriptions = {};
32319
32353
  for (const [key2, value] of Object.entries(dictionary2)) {
@@ -32376,6 +32410,7 @@ function readNativeAppIdentityFromXcodeTarget(app, parseInfoPlist = parsePlistSo
32376
32410
  ipadSupportedInterfaceOrientations,
32377
32411
  ...defaultScreenOrientationMask ? { defaultScreenOrientationMask } : {},
32378
32412
  alternateIconNames: [...alternateIconNames],
32413
+ bundleIcons: resolveNativeBundleIcons(icons, catalogAlternateNames, (value) => value),
32379
32414
  appIconArtwork: resolveNativeAppIconArtwork(
32380
32415
  app.resources,
32381
32416
  (file) => import_node_fs59.default.readFileSync(file, "utf8"),
@@ -32498,7 +32533,7 @@ async function packageTreeDigest(root) {
32498
32533
  // src/expo-native-prebuilt.ts
32499
32534
  var EXPO_NATIVE_ENTRY_NAME = "ios";
32500
32535
  function expoNativeCompilerDigestValue() {
32501
- return true ? "5096ba1e78a0087b6e56f15c4b37fcbd9bcabb2acde17a257d8add357efd462c" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
32536
+ return true ? "e50ab1d8ec731167f92f711da0833fa534d1aec4b5ce950a6ba947279df8c1e7" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
32502
32537
  }
32503
32538
  var IDENTITY_SOURCE_SKIPS = 1 | 4 | 8 | 16 | 32 | 64 | 128 | 4096;
32504
32539
  function readSources(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -119,6 +119,7 @@ function isNativeAppIdentity(value) {
119
119
  if (value.androidPhotoLibraryAddOnly !== void 0 && value.androidPhotoLibraryAddOnly !== true)
120
120
  return false;
121
121
  if (value.googleSignIn !== void 0 && !isRecord(value.googleSignIn)) return false;
122
+ if (value.bundleIcons !== void 0 && !isRecord(value.bundleIcons)) return false;
122
123
  const descriptions = value.permissionUsageDescriptions;
123
124
  if (value.reanimatedStaticFeatureFlags !== void 0 && (!isRecord(value.reanimatedStaticFeatureFlags) || !Object.values(value.reanimatedStaticFeatureFlags).every(
124
125
  (flag) => typeof flag === "boolean"
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // ../peach-globals/src/bundle-global-footer.ts
4
4
  function findBundleFooter(source, prefix) {
@@ -89,6 +89,7 @@ function isNativeAppIdentity(value) {
89
89
  if (value.androidPhotoLibraryAddOnly !== void 0 && value.androidPhotoLibraryAddOnly !== true)
90
90
  return false;
91
91
  if (value.googleSignIn !== void 0 && !isRecord(value.googleSignIn)) return false;
92
+ if (value.bundleIcons !== void 0 && !isRecord(value.bundleIcons)) return false;
92
93
  const descriptions = value.permissionUsageDescriptions;
93
94
  if (value.reanimatedStaticFeatureFlags !== void 0 && (!isRecord(value.reanimatedStaticFeatureFlags) || !Object.values(value.reanimatedStaticFeatureFlags).every(
94
95
  (flag) => typeof flag === "boolean"
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2185 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2186 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;