peachsim 0.1.2221 → 0.1.2223

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 (127) hide show
  1. package/cli/commands/compat.ts +4 -4
  2. package/cli/commands/report-issue.ts +1 -1
  3. package/cli/runtime-compat.ts +7 -2
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/attached-projects.cjs +1 -1
  7. package/dist-lib/auth/shared-session.cjs +1 -1
  8. package/dist-lib/backend-origin.cjs +1 -1
  9. package/dist-lib/beta.cjs +1 -1
  10. package/dist-lib/beta.mjs +1 -1
  11. package/dist-lib/bridge-constants.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.mjs +1 -1
  14. package/dist-lib/bridge-contract.cjs +1 -1
  15. package/dist-lib/bridge-contract.mjs +1 -1
  16. package/dist-lib/bundle-channel.cjs +461 -369
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cloud-contract.cjs +1 -1
  20. package/dist-lib/cloud-contract.mjs +1 -1
  21. package/dist-lib/cloud-test-args.cjs +1 -1
  22. package/dist-lib/cloud-test-args.mjs +1 -1
  23. package/dist-lib/cloud.cjs +1 -1
  24. package/dist-lib/cloud.mjs +1 -1
  25. package/dist-lib/config.cjs +1 -1
  26. package/dist-lib/config.mjs +1 -1
  27. package/dist-lib/detox/index.cjs +3 -2
  28. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  29. package/dist-lib/expo-swift-bundle.cjs +458 -367
  30. package/dist-lib/expo-swift-metadata.cjs +1 -1
  31. package/dist-lib/expo-swift-metadata.mjs +1 -1
  32. package/dist-lib/home-paths.cjs +1 -1
  33. package/dist-lib/host/bridge-host.cjs +681 -562
  34. package/dist-lib/host/fetch-proxy-handler.cjs +10 -7
  35. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  37. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  38. package/dist-lib/host/websocket-proxy.cjs +1 -1
  39. package/dist-lib/index.cjs +8232 -7815
  40. package/dist-lib/jump-to-source-babel.cjs +1 -1
  41. package/dist-lib/jump-to-source-native.cjs +1 -1
  42. package/dist-lib/kotlin-host.cjs +1 -1
  43. package/dist-lib/menu.cjs +1 -1
  44. package/dist-lib/menu.mjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  47. package/dist-lib/metro-production-bundle.cjs +1 -1
  48. package/dist-lib/metro-production-bundle.mjs +1 -1
  49. package/dist-lib/metro.cjs +8146 -7737
  50. package/dist-lib/native-app-identity-project.cjs +331 -13
  51. package/dist-lib/native-app-identity-project.mjs +331 -13
  52. package/dist-lib/native-app-identity.cjs +16 -3
  53. package/dist-lib/native-app-identity.mjs +16 -3
  54. package/dist-lib/native-firebase-metadata.cjs +1 -1
  55. package/dist-lib/native-firebase-metadata.mjs +1 -1
  56. package/dist-lib/pdfium-raster.cjs +1 -1
  57. package/dist-lib/pdfium-raster.mjs +1 -1
  58. package/dist-lib/plist.cjs +1 -1
  59. package/dist-lib/plist.mjs +1 -1
  60. package/dist-lib/profiles.cjs +1 -1
  61. package/dist-lib/public-brand.cjs +1 -1
  62. package/dist-lib/public-origins-lib-esm.json +25 -24
  63. package/dist-lib/public-origins-lib.json +99 -96
  64. package/dist-lib/react-native-host-modules.cjs +1 -1
  65. package/dist-lib/react-native-host-modules.mjs +1 -1
  66. package/dist-lib/reap-browser.cjs +1 -1
  67. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  68. package/dist-lib/sdk.cjs +1 -1
  69. package/dist-lib/sdk.mjs +1 -1
  70. package/dist-lib/skills.cjs +518 -408
  71. package/dist-lib/swift-compile.cjs +69 -36
  72. package/dist-lib/swift-compile.mjs +69 -36
  73. package/dist-lib/swift-package.cjs +1 -1
  74. package/dist-lib/swift-package.mjs +1 -1
  75. package/dist-lib/swift-submit.cjs +1 -1
  76. package/dist-lib/swift-submit.mjs +1 -1
  77. package/dist-lib/swift-toolchain.cjs +1 -1
  78. package/dist-lib/swift.cjs +1 -1
  79. package/dist-lib/vite-swift.cjs +143 -56
  80. package/dist-lib/vite.cjs +2930 -2800
  81. package/dist-lib/worklet-executable.cjs +1 -1
  82. package/dist-lib/worklet-executable.mjs +1 -1
  83. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +2 -1
  84. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +1 -0
  85. package/dist-types/packages/peach-engine/src/cli-host-terser.d.ts +7 -0
  86. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +1 -1
  87. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +1 -0
  88. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +1 -0
  89. package/dist-types/packages/peach-engine/src/engine/node.d.ts +5 -0
  90. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +8 -1
  91. package/dist-types/packages/peach-engine/src/engine/types.d.ts +3 -0
  92. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +1 -1
  93. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +2 -2
  94. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +1 -2
  95. package/dist-types/packages/peach-globals/src/browser-object-url.d.ts +10 -0
  96. package/dist-types/packages/peach-kit/src/internal.d.ts +1 -0
  97. package/dist-types/packages/peach-kit/src/ios-tint.d.ts +1 -0
  98. package/dist-types/packages/peach-kit/src/transitions/screen-transition-math.d.ts +25 -0
  99. package/kotlin/sdk.tar.gz +0 -0
  100. package/package.json +1 -1
  101. package/runtime-companion.json +1 -1
  102. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNAnimation.h +4 -4
  103. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNCameraController.h +1 -1
  104. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNConstraint.h +5 -5
  105. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNGeometry.h +1 -1
  106. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNLevelOfDetail.h +1 -1
  107. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParametricGeometry.h +9 -9
  108. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNParticleSystem.h +1 -1
  109. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNPhysicsBehavior.h +7 -7
  110. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNRenderer.h +1 -1
  111. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNShadable.h +1 -1
  112. package/sdk/ios/System/Library/Frameworks/SceneKit.framework/Headers/SCNTechnique.h +1 -1
  113. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UISegmentedControl.h +1 -1
  114. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UITabBar.h +1 -1
  115. package/src/cli-runtime.ts +1 -0
  116. package/src/conformance-pixel-comparison.ts +16 -3
  117. package/src/expo-native-workspace.ts +14 -10
  118. package/src/expo-workspace-exclusion.ts +10 -7
  119. package/src/react-native-autolinking.ts +2 -1
  120. package/src/runtime-delivery.ts +7 -0
  121. package/src/swift-compile.ts +51 -35
  122. package/src/swift-coverage/xcode-assets.ts +4 -2
  123. package/src/swift-host.ts +53 -14
  124. package/src/swift-root-lock.ts +27 -4
  125. package/src/wasm-optimize.ts +5 -1
  126. package/src/xcode-project.ts +26 -5
  127. package/src/xcode-target-members.ts +25 -3
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2221 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2223 | (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;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "99e03b74c961d2449afd58c2cbc415ba91d1d469a4f89e461c137fd6c305b27c", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "29c2661be4b952101c9b9b8fd861560e6ce63b25dd4464f47475aaf72024f4fe", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "25505683ca29a0b380413bf2a5026d4967eacf886e35bc11ece6e15317e5bb02", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "86f79e98323ec065e0e5195324c75ca608f490efbd95dcc25c53d5aa0b9aecc9", "xcode-target-members.ts": "ad7589132bffab265e8a10b64e24484fe88b4a2b1cc0ee19a97f151a002eca77", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "29c2661be4b952101c9b9b8fd861560e6ce63b25dd4464f47475aaf72024f4fe", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "25505683ca29a0b380413bf2a5026d4967eacf886e35bc11ece6e15317e5bb02", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "b6e04100805ba81f14d751383416fd4aab46901a6f94f5b62f831e66c28001c1", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -18689,6 +18689,12 @@ var init_registry = __esm({
18689
18689
  coverage: 0,
18690
18690
  note: "unsupported: the Bitmovin native player SDK is absent; 1.30.0 adds the RNPlayerViewManagerModule native module, an iOS dependencies.json and Google IMA source sets, and requires expo 57 peers",
18691
18691
  missing: "native Player and Source modules, RNPlayerViewManagerModule, player view, DRM, casting, offline playback, analytics, controls, events, and track management"
18692
+ },
18693
+ {
18694
+ range: "1.31.0",
18695
+ coverage: 0,
18696
+ note: "unsupported: the Bitmovin native player SDK is absent; 1.31.0 adds the PlaylistModule native module, native event relay and source registry, and Player.on and Source.on subscriptions, and keeps the expo 57 peers",
18697
+ missing: "native Player, Source and PlaylistModule modules, RNPlayerViewManagerModule, player view, DRM, casting, offline playback, analytics, controls, events, and track management"
18692
18698
  }
18693
18699
  ]
18694
18700
  },
@@ -29322,6 +29328,7 @@ function createRuntimeDelivery(product) {
29322
29328
  verify: product.verifyInstall,
29323
29329
  label: `runtime ${version2}`
29324
29330
  });
29331
+ await product.afterInstall?.(destDir);
29325
29332
  if (setActive) product.writeActiveRuntime(version2);
29326
29333
  pruneLocalRetention({ protectVersions });
29327
29334
  return {
@@ -31371,6 +31378,7 @@ function autolinkerJson(command, output2) {
31371
31378
  }
31372
31379
  }
31373
31380
  async function cliAdvertises(cli, args, token, appRoot, signal) {
31381
+ const started = Date.now();
31374
31382
  const { stdout, stderr } = await run4("node", [cli, ...args], {
31375
31383
  cwd: appRoot,
31376
31384
  signal,
@@ -31380,7 +31388,7 @@ async function cliAdvertises(cli, args, token, appRoot, signal) {
31380
31388
  });
31381
31389
  if (!stdout.trim())
31382
31390
  throw new Error(
31383
- `${cli} ${args.join(" ")} returned empty help output${stderr.trim() ? `: ${stderr.trim()}` : ""}`
31391
+ `${cli} ${args.join(" ")} exited 0 after ${Date.now() - started}ms with empty help output${stderr.trim() ? `: ${stderr.trim()}` : ""}`
31384
31392
  );
31385
31393
  return stdout.includes(token);
31386
31394
  }
@@ -34834,7 +34842,7 @@ async function workspaceExclusion(root, portable = false, linkedPackages = []) {
34834
34842
  listed.stdout.split("\0").filter(Boolean).map((entry) => entry.replace(/\/$/, ""))
34835
34843
  );
34836
34844
  const ignoreFiles = /* @__PURE__ */ new Map();
34837
- return (relative5) => {
34845
+ return (relative5, knownDirectory) => {
34838
34846
  const parts = relative5.split(import_node_path18.default.sep);
34839
34847
  const linked = linkedPackages.some(
34840
34848
  (directory2) => relative5.startsWith(directory2 + import_node_path18.default.sep)
@@ -34846,16 +34854,16 @@ async function workspaceExclusion(root, portable = false, linkedPackages = []) {
34846
34854
  }
34847
34855
  if (portable && relative5) {
34848
34856
  let excluded = false;
34849
- const isDirectory3 = import_node_fs22.default.lstatSync(import_node_path18.default.join(root, relative5)).isDirectory();
34857
+ const isDirectory3 = knownDirectory ?? import_node_fs22.default.lstatSync(import_node_path18.default.join(root, relative5)).isDirectory();
34850
34858
  for (let index = 0; index < parts.length; index++) {
34851
34859
  const directory2 = parts.slice(0, index).join(import_node_path18.default.sep);
34852
34860
  let rules2 = ignoreFiles.get(directory2);
34853
- if (!rules2) {
34854
- rules2 = (0, import_ignore.default)();
34861
+ if (rules2 === void 0) {
34855
34862
  const file = import_node_path18.default.join(root, directory2, ".gitignore");
34856
- if (import_node_fs22.default.existsSync(file)) rules2.add(import_node_fs22.default.readFileSync(file, "utf8"));
34863
+ rules2 = import_node_fs22.default.existsSync(file) ? (0, import_ignore.default)().add(import_node_fs22.default.readFileSync(file, "utf8")) : null;
34857
34864
  ignoreFiles.set(directory2, rules2);
34858
34865
  }
34866
+ if (!rules2) continue;
34859
34867
  const item = parts.slice(index).join("/");
34860
34868
  const result = rules2.test(isDirectory3 ? `${item}/` : item);
34861
34869
  if (result.ignored) excluded = true;
@@ -35167,6 +35175,302 @@ var init_plist = __esm({
35167
35175
  }
35168
35176
  });
35169
35177
 
35178
+ // src/ios-sdk-frameworks.json
35179
+ var ios_sdk_frameworks_default;
35180
+ var init_ios_sdk_frameworks = __esm({
35181
+ "src/ios-sdk-frameworks.json"() {
35182
+ ios_sdk_frameworks_default = {
35183
+ sdk: "iphonesimulator27.1",
35184
+ frameworks: [
35185
+ "ARKit",
35186
+ "AVFAudio",
35187
+ "AVFoundation",
35188
+ "AVKit",
35189
+ "AVRouting",
35190
+ "Accelerate",
35191
+ "Accessibility",
35192
+ "AccessoryLiveActivities",
35193
+ "AccessoryNotifications",
35194
+ "AccessorySetupKit",
35195
+ "AccessoryTransportExtension",
35196
+ "Accounts",
35197
+ "ActivityKit",
35198
+ "AdAttributionKit",
35199
+ "AdServices",
35200
+ "AdSupport",
35201
+ "AddressBook",
35202
+ "AddressBookUI",
35203
+ "AlarmKit",
35204
+ "AppClip",
35205
+ "AppIntents",
35206
+ "AppIntentsTypeSupport",
35207
+ "AppMigrationKit",
35208
+ "AppTrackingTransparency",
35209
+ "AssetsLibrary",
35210
+ "AudioToolbox",
35211
+ "AudioUnit",
35212
+ "AuthenticationServices",
35213
+ "AutomatedDeviceEnrollment",
35214
+ "AutomaticAssessmentConfiguration",
35215
+ "BackgroundAssets",
35216
+ "BackgroundTasks",
35217
+ "BrowserEngineCore",
35218
+ "BrowserEngineKit",
35219
+ "BrowserKit",
35220
+ "BusinessChat",
35221
+ "CFNetwork",
35222
+ "CallKit",
35223
+ "CarKey",
35224
+ "CarPlay",
35225
+ "Charts",
35226
+ "ClassKit",
35227
+ "ClassKitUI",
35228
+ "ClockKit",
35229
+ "CloudKit",
35230
+ "ColorSync",
35231
+ "Combine",
35232
+ "ComputeGraph",
35233
+ "ContactProvider",
35234
+ "Contacts",
35235
+ "ContactsUI",
35236
+ "CoreAudio",
35237
+ "CoreAudioKit",
35238
+ "CoreAudioTypes",
35239
+ "CoreBluetooth",
35240
+ "CoreData",
35241
+ "CoreFoundation",
35242
+ "CoreGraphics",
35243
+ "CoreHaptics",
35244
+ "CoreImage",
35245
+ "CoreLocation",
35246
+ "CoreLocationUI",
35247
+ "CoreMIDI",
35248
+ "CoreML",
35249
+ "CoreMedia",
35250
+ "CoreMotion",
35251
+ "CoreNFC",
35252
+ "CoreServices",
35253
+ "CoreSpotlight",
35254
+ "CoreTelephony",
35255
+ "CoreText",
35256
+ "CoreTransferable",
35257
+ "CoreVideo",
35258
+ "CreateMLComponents",
35259
+ "CryptoKit",
35260
+ "CryptoTokenKit",
35261
+ "DataDetection",
35262
+ "DeclaredAgeRange",
35263
+ "DeveloperToolsSupport",
35264
+ "DeviceActivity",
35265
+ "DeviceCheck",
35266
+ "DeviceDiscoveryExtension",
35267
+ "DeviceDiscoveryUI",
35268
+ "EnergyKit",
35269
+ "EventKit",
35270
+ "EventKitUI",
35271
+ "ExposureNotification",
35272
+ "ExtensionFoundation",
35273
+ "ExtensionKit",
35274
+ "ExternalAccessory",
35275
+ "FamilyControls",
35276
+ "FileProvider",
35277
+ "FileProviderUI",
35278
+ "FinanceKit",
35279
+ "FinanceKitUI",
35280
+ "Foundation",
35281
+ "FoundationModels",
35282
+ "GLKit",
35283
+ "GSS",
35284
+ "GameController",
35285
+ "GameKit",
35286
+ "GameSave",
35287
+ "GameplayKit",
35288
+ "GeoToolbox",
35289
+ "GroupActivities",
35290
+ "HealthKit",
35291
+ "HealthKitUI",
35292
+ "HomeKit",
35293
+ "IOKit",
35294
+ "IOSurface",
35295
+ "IdentityDocumentServices",
35296
+ "IdentityDocumentServicesUI",
35297
+ "IdentityLookup",
35298
+ "IdentityLookupUI",
35299
+ "ImageCaptureCore",
35300
+ "ImageIO",
35301
+ "ImagePlayground",
35302
+ "ImmersiveMediaSupport",
35303
+ "Intents",
35304
+ "IntentsUI",
35305
+ "JavaScriptCore",
35306
+ "LinkPresentation",
35307
+ "LinkSecurity",
35308
+ "LiveCommunicationKit",
35309
+ "LocalAuthentication",
35310
+ "LocalAuthenticationEmbeddedUI",
35311
+ "LockedCameraCapture",
35312
+ "ManagedApp",
35313
+ "ManagedAppDistribution",
35314
+ "ManagedSettings",
35315
+ "ManagedSettingsUI",
35316
+ "MapKit",
35317
+ "MarketplaceKit",
35318
+ "Matter",
35319
+ "MatterSupport",
35320
+ "MediaAccessibility",
35321
+ "MediaIntelligence",
35322
+ "MediaIntents",
35323
+ "MediaPlayer",
35324
+ "MediaToolbox",
35325
+ "MessageUI",
35326
+ "Messages",
35327
+ "Metal",
35328
+ "MetalKit",
35329
+ "MetalPerformancePrimitives",
35330
+ "MetalPerformanceShaders",
35331
+ "MetalPerformanceShadersGraph",
35332
+ "MetricKit",
35333
+ "MobileCoreServices",
35334
+ "ModelIO",
35335
+ "MultipeerConnectivity",
35336
+ "MusicKit",
35337
+ "MusicUnderstanding",
35338
+ "NaturalLanguage",
35339
+ "NearbyInteraction",
35340
+ "Network",
35341
+ "NetworkExtension",
35342
+ "NotificationCenter",
35343
+ "NowPlaying",
35344
+ "OSLog",
35345
+ "OpenAL",
35346
+ "OpenGLES",
35347
+ "PDFKit",
35348
+ "PHASE",
35349
+ "PaperKit",
35350
+ "PassKit",
35351
+ "PencilKit",
35352
+ "PermissionKit",
35353
+ "Photos",
35354
+ "PhotosUI",
35355
+ "ProximityReader",
35356
+ "PushKit",
35357
+ "PushToTalk",
35358
+ "QuartzCore",
35359
+ "QuickLook",
35360
+ "QuickLookThumbnailing",
35361
+ "RealityFoundation",
35362
+ "RealityKit",
35363
+ "RelevanceKit",
35364
+ "ReplayKit",
35365
+ "RoomPlan",
35366
+ "SafariServices",
35367
+ "SafetyKit",
35368
+ "SceneKit",
35369
+ "ScreenTime",
35370
+ "SecureElementCredential",
35371
+ "Security",
35372
+ "SecurityUI",
35373
+ "SensitiveContentAnalysis",
35374
+ "SensorKit",
35375
+ "ServicesAccountLinking",
35376
+ "SharedWithYou",
35377
+ "SharedWithYouCore",
35378
+ "ShazamKit",
35379
+ "Social",
35380
+ "SoundAnalysis",
35381
+ "Speech",
35382
+ "SpriteKit",
35383
+ "StateReporting",
35384
+ "StoreKit",
35385
+ "SuggestedActions",
35386
+ "SwiftData",
35387
+ "SwiftUI",
35388
+ "SwiftUICore",
35389
+ "Symbols",
35390
+ "SystemConfiguration",
35391
+ "SystemExtensions",
35392
+ "TabularData",
35393
+ "TelephonyMessagingKit",
35394
+ "TipKit",
35395
+ "TouchController",
35396
+ "Translation",
35397
+ "TranslationUIProvider",
35398
+ "TrustInsights",
35399
+ "Twitter",
35400
+ "UIKit",
35401
+ "USDKit",
35402
+ "UniformTypeIdentifiers",
35403
+ "UserNotifications",
35404
+ "UserNotificationsUI",
35405
+ "VideoSubscriberAccount",
35406
+ "VideoToolbox",
35407
+ "Vision",
35408
+ "VisionKit",
35409
+ "WatchConnectivity",
35410
+ "WeatherKit",
35411
+ "WebKit",
35412
+ "WiFiAware",
35413
+ "WidgetKit",
35414
+ "WorkoutKit",
35415
+ "_AVKit_SwiftUI",
35416
+ "_AdAttributionKit_StoreKit",
35417
+ "_AppIntents_HealthKit",
35418
+ "_AppIntents_SwiftUI",
35419
+ "_AppIntents_UIKit",
35420
+ "_AuthenticationServices_SwiftUI",
35421
+ "_Contacts_AppIntents",
35422
+ "_CoreData_CloudKit",
35423
+ "_CoreLocationUI_SwiftUI",
35424
+ "_CoreNFC_UIKit",
35425
+ "_CoreSpotlight_FoundationModels",
35426
+ "_DataDetection_SwiftUI",
35427
+ "_DeviceActivity_SwiftUI",
35428
+ "_DeviceDiscoveryUI_SwiftUI",
35429
+ "_FinanceKit_AppIntents",
35430
+ "_FoundationModels_SwiftUI",
35431
+ "_FoundationModels_UIKit",
35432
+ "_GameController_SwiftUI",
35433
+ "_GeoToolbox_AppIntents",
35434
+ "_GroupActivities_UIKit",
35435
+ "_HomeKit_SwiftUI",
35436
+ "_Intents_TipKit",
35437
+ "_LinkPresentation_AppIntents",
35438
+ "_LocationEssentials",
35439
+ "_MapKit_SwiftUI",
35440
+ "_MarketplaceKit_UIKit",
35441
+ "_MediaIntents_AppIntents",
35442
+ "_MediaPlayer_AppIntents",
35443
+ "_MusicKit_SwiftUI",
35444
+ "_NowPlaying_AppIntents",
35445
+ "_PassKit_SwiftUI",
35446
+ "_PermissionKit_SwiftUI",
35447
+ "_PermissionKit_UIKit",
35448
+ "_PhotosUI_SwiftUI",
35449
+ "_PhotosUI_WidgetKit",
35450
+ "_Photos_AppIntents",
35451
+ "_QuickLook_SwiftUI",
35452
+ "_RealityKit_ComputeGraph",
35453
+ "_RealityKit_SwiftUI",
35454
+ "_RelevanceKit_MapKit",
35455
+ "_SceneKit_SwiftUI",
35456
+ "_SecureElementCredential_SwiftUI",
35457
+ "_SecureElementCredential_UIKit",
35458
+ "_SharedWithYou_AppIntents",
35459
+ "_SpriteKit_SwiftUI",
35460
+ "_StoreKit_SwiftUI",
35461
+ "_SwiftData_CoreData",
35462
+ "_SwiftData_SwiftUI",
35463
+ "_Translation_SwiftUI",
35464
+ "_USDKit_RealityKit",
35465
+ "_UserNotifications_AppIntents",
35466
+ "_WebKit_SwiftUI",
35467
+ "_WorkoutKit_SwiftUI",
35468
+ "iAd"
35469
+ ]
35470
+ };
35471
+ }
35472
+ });
35473
+
35170
35474
  // src/android-string-value.ts
35171
35475
  function compileAndroidStringValue(text6, where) {
35172
35476
  if (/^\s*[@?]/.test(text6))
@@ -35671,8 +35975,20 @@ function xcodeTargetMemberVisitor(objects) {
35671
35975
  for (const id of refs) {
35672
35976
  const file = resolvePath(id);
35673
35977
  if (file === null) continue;
35674
- if (phase.isa === "PBXSourcesBuildPhase") visit3(file, "source");
35675
- else for (const inner of filesUnder(file)) visit3(inner, "resource");
35978
+ if (phase.isa === "PBXSourcesBuildPhase") {
35979
+ visit3(file, "source");
35980
+ continue;
35981
+ }
35982
+ const ref = objects[id];
35983
+ const type = isDict(ref) ? str(ref.lastKnownFileType) ?? str(ref.explicitFileType) ?? "" : "";
35984
+ const root = file.replace(/[\\/]+$/, "");
35985
+ const folder = FOLDER_REFERENCE.test(type) ? root.split(/[\\/]/).pop() : void 0;
35986
+ for (const inner of filesUnder(file))
35987
+ visit3(
35988
+ inner,
35989
+ "resource",
35990
+ folder && `${folder}/${inner.slice(root.length + 1).replaceAll("\\", "/")}`
35991
+ );
35676
35992
  }
35677
35993
  }
35678
35994
  }
@@ -35710,13 +36026,14 @@ function xcodeTargetMemberVisitor(objects) {
35710
36026
  }
35711
36027
  };
35712
36028
  }
35713
- var NEVER_MEMBER, BUNDLE_DIR;
36029
+ var NEVER_MEMBER, FOLDER_REFERENCE, BUNDLE_DIR;
35714
36030
  var init_xcode_target_members = __esm({
35715
36031
  "src/xcode-target-members.ts"() {
35716
36032
  "use strict";
35717
36033
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
35718
36034
  init_openstep_plist();
35719
36035
  NEVER_MEMBER = /(?:^|\/)(?:Info\.plist|[^/]+\.entitlements|[^/]+\.xcconfig|\.DS_Store)$/;
36036
+ FOLDER_REFERENCE = /^(?:folder|wrapper\.scnassets)$/;
35720
36037
  BUNDLE_DIR = /\.(xcassets|bundle|lproj|xcdatamodeld|scnassets|spriteatlas|rcproject|storyboardc|icon)$/;
35721
36038
  }
35722
36039
  });
@@ -38353,12 +38670,13 @@ function planAssetSymbols(resources, root, settings) {
38353
38670
  "2": ["ipad"],
38354
38671
  "1,2": ["iphone", "ipad"],
38355
38672
  "1,7": ["iphone"],
38673
+ "1,3,7": ["iphone"],
38356
38674
  "1,2,6": ["iphone", "ipad"],
38357
38675
  "1,2,7": ["iphone", "ipad"]
38358
38676
  }[families];
38359
38677
  if (!devices2)
38360
38678
  return unknown2(
38361
- `Generated asset symbols are proven only for TARGETED_DEVICE_FAMILY 1, 2, 1,2, 1,7, 1,2,6 or 1,2,7; this target resolves to "${families}".`
38679
+ `Generated asset symbols are proven only for TARGETED_DEVICE_FAMILY 1, 2, 1,2, 1,7, 1,3,7, 1,2,6 or 1,2,7; this target resolves to "${families}".`
38362
38680
  );
38363
38681
  const plan = {
38364
38682
  catalogs: catalogs.map((path141) => ({
@@ -52367,6 +52685,7 @@ async function runWasmOpt(file, output2, skipPasses, binary2) {
52367
52685
  const result = await (0, import_wasm_opt.wasmOpt)(
52368
52686
  [
52369
52687
  "-Oz",
52688
+ ...KEEP_WASM_NAMES ? ["-g"] : [],
52370
52689
  ...skipPasses.flatMap((pass) => ["--skip-pass", pass]),
52371
52690
  ...FEATURES.map((feature) => `--enable-${feature}`),
52372
52691
  file,
@@ -52400,7 +52719,7 @@ async function installWasmOpt() {
52400
52719
  async function optimizeWasm(file, output2, skipPasses = []) {
52401
52720
  await runWasmOpt(file, output2, skipPasses, await installWasmOpt());
52402
52721
  }
52403
- var import_node_fs45, import_node_path42, import_wasm_opt, FEATURES, WASM_OPTIMIZE_IDENTITY, PINNED_BINARYEN_VERSION, BINARYEN_RELEASES;
52722
+ var import_node_fs45, import_node_path42, import_wasm_opt, FEATURES, KEEP_WASM_NAMES, WASM_OPTIMIZE_IDENTITY, PINNED_BINARYEN_VERSION, BINARYEN_RELEASES;
52404
52723
  var init_wasm_optimize = __esm({
52405
52724
  "src/wasm-optimize.ts"() {
52406
52725
  "use strict";
@@ -52423,7 +52742,8 @@ var init_wasm_optimize = __esm({
52423
52742
  "reference-types",
52424
52743
  "sign-ext"
52425
52744
  ];
52426
- WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}`;
52745
+ KEEP_WASM_NAMES = process.env.PEACH_SWIFT_NAMES === "1";
52746
+ WASM_OPTIMIZE_IDENTITY = `wasm-opt ${import_wasm_opt.BINARYEN_VERSION} -Oz ${FEATURES.join(",")}${KEEP_WASM_NAMES ? " -g" : ""}`;
52427
52747
  PINNED_BINARYEN_VERSION = "132";
52428
52748
  BINARYEN_RELEASES = /* @__PURE__ */ new Map([
52429
52749
  [
@@ -53364,6 +53684,17 @@ function processTable(pid) {
53364
53684
  );
53365
53685
  }
53366
53686
  }
53687
+ async function processTableWithRetry(pid, signal) {
53688
+ for (let attempt = 1; ; attempt++) {
53689
+ try {
53690
+ return processTable(pid);
53691
+ } catch (error) {
53692
+ if (attempt >= INSPECT_ATTEMPTS) throw error;
53693
+ await pause(POLL_MS * attempt, signal);
53694
+ signal?.throwIfAborted();
53695
+ }
53696
+ }
53697
+ }
53367
53698
  function sameProcess(row, identity2) {
53368
53699
  return row.pid === identity2.pid && Math.abs(row.start - identity2.start) <= START_TOLERANCE_MS;
53369
53700
  }
@@ -53438,7 +53769,11 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
53438
53769
  );
53439
53770
  (0, import_node_fs51.mkdirSync)(directory2, { recursive: true });
53440
53771
  const token = (0, import_node_crypto24.randomUUID)();
53441
- const owner = JSON.stringify(ownIdentity(process.pid));
53772
+ const ownRow = (await processTableWithRetry(process.pid, signal)).find(
53773
+ (candidate) => candidate.pid === process.pid && !candidate.zombie
53774
+ );
53775
+ if (!ownRow) throw new Error(`swift root lock cannot find process ${process.pid}`);
53776
+ const owner = JSON.stringify({ pid: process.pid, start: ownRow.start });
53442
53777
  const pending2 = import_node_path47.default.join(directory2, `pending.${token}`);
53443
53778
  let held = 0;
53444
53779
  for (; ; ) {
@@ -53447,15 +53782,15 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
53447
53782
  const current2 = newest > 0 ? readGeneration(directory2, newest) : null;
53448
53783
  if (newest > 0 && !current2) continue;
53449
53784
  if (current2 && !current2.released) {
53450
- const owner2 = processTable(current2.holder.pid);
53451
- if (owner2.some((row) => !row.zombie && sameProcess(row, current2.holder))) {
53785
+ const holder = await processTableWithRetry(current2.holder.pid, signal);
53786
+ if (holder.some((row) => !row.zombie && sameProcess(row, current2.holder))) {
53452
53787
  if (!wait) return void 0;
53453
53788
  await pause(POLL_MS, signal);
53454
53789
  continue;
53455
53790
  }
53456
53791
  const children2 = readChildren(directory2, newest);
53457
53792
  if (children2.length) {
53458
- const table = processTable();
53793
+ const table = await processTableWithRetry(void 0, signal);
53459
53794
  if (children2.some((child) => groupAlive(table, child))) {
53460
53795
  if (!wait) return void 0;
53461
53796
  await pause(POLL_MS, signal);
@@ -53530,7 +53865,7 @@ async function withSwiftRootLock(root, work, signal, wait = true) {
53530
53865
  (0, import_node_fs51.writeFileSync)(import_node_path47.default.join(directory2, name2(held, "released")), "");
53531
53866
  }
53532
53867
  }
53533
- var import_node_child_process29, import_node_crypto24, import_node_fs51, import_node_os11, import_node_path47, POLL_MS, START_TOLERANCE_MS, name2;
53868
+ var import_node_child_process29, import_node_crypto24, import_node_fs51, import_node_os11, import_node_path47, POLL_MS, INSPECT_ATTEMPTS, START_TOLERANCE_MS, name2;
53534
53869
  var init_swift_root_lock = __esm({
53535
53870
  "src/swift-root-lock.ts"() {
53536
53871
  "use strict";
@@ -53543,6 +53878,7 @@ var init_swift_root_lock = __esm({
53543
53878
  init_process_group();
53544
53879
  init_process_table();
53545
53880
  POLL_MS = 250;
53881
+ INSPECT_ATTEMPTS = 5;
53546
53882
  START_TOLERANCE_MS = 2e3;
53547
53883
  name2 = (number3, suffix) => `${String(number3).padStart(12, "0")}.${suffix}`;
53548
53884
  }
@@ -54507,6 +54843,7 @@ ${release}
54507
54843
  `);
54508
54844
  hash.update(compilerSourceDigest);
54509
54845
  if (input.oneModule) hash.update("one-module\n");
54846
+ if (KEEP_WASM_NAMES) hash.update("names\n");
54510
54847
  hash.update(swiftModuleDigest(moduleRoot));
54511
54848
  if (input.optimize) hash.update(`optimize
54512
54849
  ${WASM_OPTIMIZE_IDENTITY}
@@ -54618,7 +54955,14 @@ function toolsetOrdersLibcxxBeforeDarwinOverlay(options) {
54618
54955
  return libcxx >= 0 && overlay > libcxx;
54619
54956
  }
54620
54957
  function emitSwiftPackageManifest(args) {
54621
- const { targets, siblings, moduleRoot, oneModule, spriteKit, distribution } = args;
54958
+ const {
54959
+ targets,
54960
+ siblings,
54961
+ moduleRoot,
54962
+ oneModule,
54963
+ gameProducts: gameProducts2 = [],
54964
+ distribution
54965
+ } = args;
54622
54966
  const prebuilt = args.prebuilt;
54623
54967
  const linkedObjects = Boolean(distribution || prebuilt);
54624
54968
  const cxxFlagsFor = (flags) => args.deferDarwinOverlay ? withoutWasmOverlayIsystem(flags) : flags;
@@ -54647,9 +54991,8 @@ function emitSwiftPackageManifest(args) {
54647
54991
  for (const name3 of [...siblings.values()].flat())
54648
54992
  if (OPTIONAL_FRAMEWORKS.has(name3) && !targets.some((target) => target.name === name3))
54649
54993
  reach(name3);
54650
- if (spriteKit) {
54651
- for (const name3 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name3);
54652
- }
54994
+ for (const product of gameProducts2)
54995
+ for (const name3 of GAME_REACH[product] ?? []) reach(name3);
54653
54996
  let distributionLinkPath;
54654
54997
  const distributionLink = args.distributionLink;
54655
54998
  if (distribution && distributionLink) {
@@ -54672,7 +55015,7 @@ function emitSwiftPackageManifest(args) {
54672
55015
  (object6) => !isProvider(object6) && !replacedObjects.has(object6)
54673
55016
  );
54674
55017
  const objects = available.filter(
54675
- (object6) => !targets.some((target) => object6.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, "SpriteKit", "PeachBox2D"].every(
55018
+ (object6) => !targets.some((target) => object6.startsWith(`lib/${target.name}-`)) && [...OPTIONAL_FRAMEWORKS, ...GAME_FAMILY, "PeachBox2D"].every(
54676
55019
  (name3) => !object6.startsWith(`lib/${name3}-`) || reachedFrameworks.has(name3)
54677
55020
  )
54678
55021
  );
@@ -54835,7 +55178,7 @@ function emitSwiftPackageManifest(args) {
54835
55178
  ...linkedObjects || clang && !target.executable ? [] : [
54836
55179
  '.product(name: "SwiftUI", package: "sootsim-swift")',
54837
55180
  ...oneModule ? [ONE_PRODUCT] : [],
54838
- ...spriteKit ? [SPRITEKIT_PRODUCT] : []
55181
+ ...gameProducts2.map(gameProduct)
54839
55182
  ],
54840
55183
  ...(siblings.get(target.name) ?? []).flatMap(
54841
55184
  (dependency) => clang && // textual native headers can include one another without imposing
@@ -54867,7 +55210,7 @@ function emitSwiftPackageManifest(args) {
54867
55210
  .unsafeFlags(${flagArray(`[
54868
55211
  ${REACTOR_FLAG}${executableLinkFlags(args.root)} "-Xlinker", "--export-if-defined=__main_argc_argv"${library},
54869
55212
  ]`)}),
54870
- .unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),
55213
+ ${KEEP_WASM_NAMES ? "" : '.unsafeFlags(["-Xlinker", "--strip-all"], .when(configuration: .release)),'}
54871
55214
  ]` : librarySettings.length > 0 ? `,
54872
55215
  linkerSettings: [${librarySettings.join(", ")}]` : "";
54873
55216
  const cDefines = macroSettings(target.cDefines);
@@ -56618,8 +56961,8 @@ ${swiftProjectFilesProblems(input.projectFiles).join("\n")}`
56618
56961
  const moduleName2 = swiftTargetModuleName(name3);
56619
56962
  const originalMap = originalMaps.get(moduleName2);
56620
56963
  const stagedMap = sourceModuleMaps.get(moduleName2);
56621
- const originalPath = originalMap ? import_node_path51.default.join(layout2.root, originalMap) : stagedMap?.path;
56622
- const originalContents = originalMap ? input.files[originalMap] : stagedMap?.contents;
56964
+ const originalPath = stagedMap?.path ?? (originalMap ? import_node_path51.default.join(layout2.root, originalMap) : void 0);
56965
+ const originalContents = stagedMap?.contents ?? (originalMap && input.files[originalMap]);
56623
56966
  const originalTokens = originalContents ? moduleMapTokens(originalContents) : [];
56624
56967
  if (originalPath && originalTokens.some(
56625
56968
  (token, index) => token === "module" && (originalTokens[index + 1] === "Swift" || originalTokens[index + 1] === `${moduleName2}.Swift`)
@@ -56894,14 +57237,17 @@ module ${moduleName2}.Swift {
56894
57237
  manifest = manifest.replace(product, `${product}
56895
57238
  ${ONE_PRODUCT},`).replace(flags, `${flags}${ONE_IMPLICIT_FLAGS}`);
56896
57239
  }
56897
- if (importsSpriteKit(input.files)) {
57240
+ const games = gameProducts(input.files);
57241
+ if (games.length > 0) {
56898
57242
  const anchor = '.product(name: "CoreLocation", package: "sootsim-swift"),';
56899
57243
  if (!manifest.includes(anchor))
56900
57244
  throw new Error(
56901
- "scripts/contrast-app-Package.swift lost the line the SpriteKit product links at"
57245
+ "scripts/contrast-app-Package.swift lost the line the game products link at"
56902
57246
  );
56903
- manifest = manifest.replace(anchor, `${anchor}
56904
- ${SPRITEKIT_PRODUCT},`);
57247
+ manifest = manifest.replace(
57248
+ anchor,
57249
+ [anchor, ...games.map((name3) => `${gameProduct(name3)},`)].join("\n ")
57250
+ );
56905
57251
  }
56906
57252
  files2.set(import_node_path51.default.join(layout2.root, "Package.swift"), manifest + moduleFiles);
56907
57253
  } else {
@@ -57016,7 +57362,7 @@ module ${moduleName2}.Swift {
57016
57362
  siblings: moduleSiblings,
57017
57363
  moduleRoot,
57018
57364
  oneModule: input.oneModule,
57019
- spriteKit: importsSpriteKit(input.files),
57365
+ gameProducts: gameProducts(input.files),
57020
57366
  distribution: distribution ?? void 0,
57021
57367
  moduleExcludes,
57022
57368
  deferDarwinOverlay: native.size > 0 && toolsetOrdersLibcxxBeforeDarwinOverlay(
@@ -57415,14 +57761,9 @@ function linkedFrameworkTargets(moduleRoot, input) {
57415
57761
  ))
57416
57762
  reach(match[1]);
57417
57763
  }
57418
- if (importsSpriteKit(input.files))
57419
- for (const name3 of ["SpriteKit", "PeachBox2D", "simd", "GLKit"]) reach(name3);
57420
- const wanted = [
57421
- "PeachApp",
57422
- ...input.oneModule ? ["One"] : [],
57423
- ...importsSpriteKit(input.files) ? ["SpriteKit"] : [],
57424
- ...reached
57425
- ];
57764
+ const games = gameProducts(input.files);
57765
+ for (const product of games) for (const name3 of GAME_REACH[product] ?? []) reach(name3);
57766
+ const wanted = ["PeachApp", ...input.oneModule ? ["One"] : [], ...games, ...reached];
57426
57767
  const linked = [...new Set(wanted)].filter((name3) => libraries.has(name3));
57427
57768
  if (!linked.includes("PeachApp"))
57428
57769
  throw new Error("swift-compile: the framework package declares no PeachApp library");
@@ -58325,7 +58666,7 @@ function compileSwiftProjectOnce(input, options) {
58325
58666
  options.signal
58326
58667
  );
58327
58668
  }
58328
- var import_node_child_process31, import_node_crypto25, import_node_fs54, import_node_os12, import_node_path51, v5, WASM_TRIPLE, SWIFTPM_PROGRESS, SWIFTPM_NOISE, SWIFT_BUILDER_TRANSPORT_MARGIN_MS, SWIFT_BUILDER_DEFAULT_COMPILE_MS, clangInterfaceHeader, swiftInterfaceDeclarations, linkedModuleDigests, SYSTEM_MODULE_LIBRARIES, SYSTEM_MODULE_IMPORT, OPTIONAL_FRAMEWORK_DEPENDENCIES, OPTIONAL_FRAMEWORKS, SWIFT_IMPORT, kleeneNot, kleeneAnd, kleeneOr, sdkPaths, availableModules, sdkOverlayFrameworks, DISTRIBUTION_CLANG_MODULES, ONE_PRODUCT, SPRITEKIT_PRODUCT, importsSpriteKit, FOUNDATION_IMPLICIT_MODULES, FOUNDATION_IMPLICIT_FLAGS, ONE_IMPLICIT_FLAGS, executableLinkFlags, darwinRecordsRegion, REACTOR_FLAG, MULTI_MANIFEST_VERSION, SWIFT_HEADER_PRODUCTS_TARGET, compilerSourceDigest, nativeCxxCompilerFlags, cFlagArray, cxxFlagArray, DIRECTIVE, OS_IOS, DELEGATE_CLASS, FOUNDATION_NETWORKING_TYPES, FOUNDATION_OVERLAY_TYPES, FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_GEOMETRY_TYPES, CORE_FOUNDATION_GRAPHICS_TYPES, CORE_FOUNDATION_HANDLE_IMPORTS, emptyMacroEnvironment, wasmMacroEnvironment, cPredefineTable, cPredefineCache, HIDDEN_UNITS, LIBXML_REFERENCE, LIBXML_SOURCE, ROOT_LOCKS, host, rootLocks, SHARED_ARTIFACT_BUDGET_BYTES, SHARED_ARTIFACT_GRACE_MS, RETIRED_PREFIX, retainedArtifacts, FRAMEWORK_LINK_TARGET, SWIFT_LINK_STAMP, SWIFT_FRAMEWORK_SLOTS, SWIFT_FRAMEWORK_SLOT_KEY, SWIFT_FRAMEWORK_SLOT_ORIGIN;
58669
+ var import_node_child_process31, import_node_crypto25, import_node_fs54, import_node_os12, import_node_path51, v5, WASM_TRIPLE, SWIFTPM_PROGRESS, SWIFTPM_NOISE, SWIFT_BUILDER_TRANSPORT_MARGIN_MS, SWIFT_BUILDER_DEFAULT_COMPILE_MS, clangInterfaceHeader, swiftInterfaceDeclarations, linkedModuleDigests, SYSTEM_MODULE_LIBRARIES, SYSTEM_MODULE_IMPORT, OPTIONAL_FRAMEWORK_DEPENDENCIES, OPTIONAL_FRAMEWORKS, SWIFT_IMPORT, kleeneNot, kleeneAnd, kleeneOr, sdkPaths, availableModules, sdkOverlayFrameworks, DISTRIBUTION_CLANG_MODULES, ONE_PRODUCT, GAME_FAMILY, gameProducts, gameProduct, GAME_REACH, FOUNDATION_IMPLICIT_MODULES, FOUNDATION_IMPLICIT_FLAGS, ONE_IMPLICIT_FLAGS, executableLinkFlags, darwinRecordsRegion, REACTOR_FLAG, MULTI_MANIFEST_VERSION, SWIFT_HEADER_PRODUCTS_TARGET, compilerSourceDigest, nativeCxxCompilerFlags, cFlagArray, cxxFlagArray, DIRECTIVE, OS_IOS, DELEGATE_CLASS, FOUNDATION_NETWORKING_TYPES, FOUNDATION_OVERLAY_TYPES, FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_OVERLAY_GLOBALS, CORE_FOUNDATION_GEOMETRY_TYPES, CORE_FOUNDATION_GRAPHICS_TYPES, CORE_FOUNDATION_HANDLE_IMPORTS, emptyMacroEnvironment, wasmMacroEnvironment, cPredefineTable, cPredefineCache, HIDDEN_UNITS, LIBXML_REFERENCE, LIBXML_SOURCE, ROOT_LOCKS, host, rootLocks, SHARED_ARTIFACT_BUDGET_BYTES, SHARED_ARTIFACT_GRACE_MS, RETIRED_PREFIX, retainedArtifacts, FRAMEWORK_LINK_TARGET, SWIFT_LINK_STAMP, SWIFT_FRAMEWORK_SLOTS, SWIFT_FRAMEWORK_SLOT_KEY, SWIFT_FRAMEWORK_SLOT_ORIGIN;
58329
58670
  var init_swift_compile = __esm({
58330
58671
  "src/swift-compile.ts"() {
58331
58672
  "use strict";
@@ -58400,7 +58741,8 @@ var init_swift_compile = __esm({
58400
58741
  PeachCFNetwork: [],
58401
58742
  JavaScriptCore: ["PeachJavaScriptCore"],
58402
58743
  PeachJavaScriptCore: [],
58403
- GameplayKit: [],
58744
+ // GameplayKit names SpriteKit and SceneKit nodes, as on iOS
58745
+ GameplayKit: ["SpriteKit", "SceneKit", "PeachBox2D", "simd", "GLKit"],
58404
58746
  simd: [],
58405
58747
  ModelIO: ["simd"],
58406
58748
  GLKit: ["ModelIO"],
@@ -58512,10 +58854,21 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
58512
58854
  }
58513
58855
  ];
58514
58856
  ONE_PRODUCT = '.product(name: "One", package: "sootsim-swift")';
58515
- SPRITEKIT_PRODUCT = '.product(name: "SpriteKit", package: "sootsim-swift")';
58516
- importsSpriteKit = (files2) => Object.entries(files2).some(
58517
- ([file, contents]) => file.endsWith(".swift") && swiftImportNames(contents).includes("SpriteKit")
58518
- );
58857
+ GAME_FAMILY = ["SpriteKit", "SceneKit"];
58858
+ gameProducts = (files2) => {
58859
+ const imported = new Set(
58860
+ Object.entries(files2).flatMap(
58861
+ ([file, contents]) => file.endsWith(".swift") ? swiftImportNames(contents) : []
58862
+ )
58863
+ );
58864
+ if (imported.has("SceneKit")) return [...GAME_FAMILY];
58865
+ return imported.has("SpriteKit") ? ["SpriteKit"] : [];
58866
+ };
58867
+ gameProduct = (name3) => `.product(name: "${name3}", package: "sootsim-swift")`;
58868
+ GAME_REACH = {
58869
+ SpriteKit: ["SpriteKit", "PeachBox2D", "simd", "GLKit"],
58870
+ SceneKit: ["SceneKit"]
58871
+ };
58519
58872
  FOUNDATION_IMPLICIT_MODULES = [
58520
58873
  "PeachObjC",
58521
58874
  "Dispatch",
@@ -58542,7 +58895,7 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
58542
58895
  REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
58543
58896
  MULTI_MANIFEST_VERSION = 68;
58544
58897
  SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
58545
- compilerSourceDigest = true ? "2e9f321a97a408a1b3b8b7d85bbcfb108f0761ed9726b832a3c6c2cc52102806" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
58898
+ compilerSourceDigest = true ? "ae9e08389e6ab1901846342a7b347d7c10f8074172cf5d4d6505f7e955879ad4" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
58546
58899
  nativeCxxCompilerFlags = ["-fno-cxx-modules"];
58547
58900
  cFlagArray = (flags) => JSON.stringify(withoutGlogModuleMap(flags));
58548
58901
  cxxFlagArray = (flags) => JSON.stringify([...nativeCxxCompilerFlags, ...withoutGlogModuleMap(flags)]);
@@ -58873,8 +59226,6 @@ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
58873
59226
  "NSURLProtectionSpaceHTTPS",
58874
59227
  "NSURLProtectionSpaceHTTPSProxy",
58875
59228
  "NSURLProtectionSpaceSOCKSProxy",
58876
- "NSURLSessionDownloadTaskResumeData",
58877
- "NSURLSessionTransferSizeUnknown",
58878
59229
  "NSURLSessionUploadTaskResumeData",
58879
59230
  "NSUTF16BigEndianStringEncoding",
58880
59231
  "NSUTF16LittleEndianStringEncoding",
@@ -61197,6 +61548,7 @@ function targetMembers(ref, settings, options, settingKeys, projectInputs) {
61197
61548
  const allSources = /* @__PURE__ */ new Set();
61198
61549
  const headers = /* @__PURE__ */ new Set();
61199
61550
  const resources = /* @__PURE__ */ new Set();
61551
+ const resourceNames = {};
61200
61552
  const scriptForOutput = /* @__PURE__ */ new Map();
61201
61553
  const copiedFiles = [];
61202
61554
  let generatedInfoPlist = false;
@@ -61366,13 +61718,14 @@ ${output2}`
61366
61718
  xcodePathResolver(project2.objects, project2.projectDir, import_node_path56.default.join, settings),
61367
61719
  (file) => isDirectory(file) ? walkFiles(file) : import_node_fs58.default.existsSync(file) ? [file] : [],
61368
61720
  import_node_path56.default.join,
61369
- (file, kind) => {
61721
+ (file, kind, bundleName) => {
61370
61722
  if (kind === "header") {
61371
61723
  headers.add(file);
61372
61724
  return;
61373
61725
  }
61374
61726
  if (kind === "resource") {
61375
61727
  resources.add(file);
61728
+ if (bundleName) resourceNames[file] = bundleName;
61376
61729
  return;
61377
61730
  }
61378
61731
  if (!import_node_fs58.default.existsSync(file)) {
@@ -61496,6 +61849,7 @@ ${output2}`
61496
61849
  return {
61497
61850
  sources: [...sources].sort(),
61498
61851
  resources: [...resources].sort(),
61852
+ resourceNames,
61499
61853
  copiedFiles,
61500
61854
  generatedInfoPlist,
61501
61855
  allSources: [...allSources].sort(),
@@ -62740,10 +63094,14 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
62740
63094
  byProduct.has(import_node_path56.default.basename(rawPath)))
62741
63095
  continue;
62742
63096
  const resolved = fileId ? project2.resolvePath(fileId) : null;
62743
- if (fileId && resolved !== null && !import_node_fs58.default.existsSync(resolved))
62744
- throw new Error(
62745
- `${str(target.name) ?? "target"}: linked framework ${name3} (${fileId}) points at missing ${resolved} in ${project2.projectFile}`
62746
- );
63097
+ if (fileId && resolved !== null && !import_node_fs58.default.existsSync(resolved)) {
63098
+ if (!ios_sdk_frameworks_default.frameworks.includes(name3))
63099
+ throw new Error(
63100
+ `${str(target.name) ?? "target"}: linked framework ${name3} (${fileId}) points at missing ${resolved} in ${project2.projectFile}`
63101
+ );
63102
+ sdkFrameworks.add(name3);
63103
+ continue;
63104
+ }
62747
63105
  if (!binaryFrameworks.get(name3)) binaryFrameworks.set(name3, resolved);
62748
63106
  }
62749
63107
  }
@@ -62820,7 +63178,12 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
62820
63178
  ...linkedProducts.flatMap(
62821
63179
  ({ source }) => source.kind === "local" && import_node_fs58.default.existsSync(source.dir) ? [source.dir] : []
62822
63180
  ),
62823
- ...new Set(podSourceDirs)
63181
+ ...new Set(podSourceDirs),
63182
+ // a target's own files may sit beside the project, such as an asset
63183
+ // catalog one folder up, and xcode builds them from there
63184
+ ...new Set(
63185
+ [...module2.allSources, ...module2.resources].filter((file) => import_node_fs58.default.existsSync(file)).map((file) => import_node_path56.default.dirname(file))
63186
+ )
62824
63187
  ].map((dir) => import_node_fs58.default.realpathSync.native(dir))
62825
63188
  ),
62826
63189
  projectFiles: [
@@ -62865,6 +63228,7 @@ var init_xcode_project = __esm({
62865
63228
  import_node_fs58 = __toESM(require("node:fs"), 1);
62866
63229
  import_node_path56 = __toESM(require("node:path"), 1);
62867
63230
  import_plist2 = __toESM(require("plist"), 1);
63231
+ init_ios_sdk_frameworks();
62868
63232
  init_is_record();
62869
63233
  init_native_app_identity();
62870
63234
  init_prepared_xcode_phases();
@@ -63918,7 +64282,7 @@ async function hashWorkspaceInputs(app, everyByte, signal, sourceOnly = false, p
63918
64282
  signal?.throwIfAborted();
63919
64283
  const file = import_node_path62.default.join(directory2, entry.name);
63920
64284
  const relative5 = import_node_path62.default.relative(root, file);
63921
- if (excluded(relative5)) continue;
64285
+ if (excluded(relative5, entry.isDirectory())) continue;
63922
64286
  hash.update(`${relative5}\0`);
63923
64287
  if (entry.isSymbolicLink()) {
63924
64288
  const link = `link\0${await import_node_fs64.default.promises.readlink(file)}\0`;
@@ -64042,8 +64406,10 @@ function syncChangedFiles(root, work, appRelative, excluded, installed2) {
64042
64406
  if (existing && (newerOnly ? existing.mtime.getTime() >= source.mtime.getTime() : existing.size === source.size && existing.mtime.getTime() === source.mtime.getTime()))
64043
64407
  return;
64044
64408
  import_node_fs64.default.mkdirSync(import_node_path62.default.dirname(target), { recursive: true });
64045
- import_node_fs64.default.copyFileSync(file, target);
64046
- import_node_fs64.default.utimesSync(target, source.atime, source.mtime);
64409
+ const staged = `${target}.${process.pid}.peach-sync`;
64410
+ import_node_fs64.default.copyFileSync(file, staged);
64411
+ import_node_fs64.default.utimesSync(staged, source.atime, source.mtime);
64412
+ import_node_fs64.default.renameSync(staged, target);
64047
64413
  };
64048
64414
  const walkInstalled = (directory2) => {
64049
64415
  for (const entry of import_node_fs64.default.readdirSync(directory2, { withFileTypes: true })) {
@@ -64061,7 +64427,7 @@ function syncChangedFiles(root, work, appRelative, excluded, installed2) {
64061
64427
  walkInstalled(file);
64062
64428
  continue;
64063
64429
  }
64064
- if (excluded(relative5) || entry.isSymbolicLink() || !sourceIos && relative5 === import_node_path62.default.join(appRelative, "ios"))
64430
+ if (excluded(relative5, entry.isDirectory()) || entry.isSymbolicLink() || !sourceIos && relative5 === import_node_path62.default.join(appRelative, "ios"))
64065
64431
  continue;
64066
64432
  if (entry.isDirectory()) walk3(file);
64067
64433
  else if (entry.isFile()) {
@@ -65009,7 +65375,7 @@ var init_swift_standin_digest = __esm({
65009
65375
  STANDIN_DIGEST_ENTRYPOINTS = ["swift-standins.ts", "swift-objc-compile.ts"];
65010
65376
  SPECIFIER = /from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
65011
65377
  standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
65012
- STANDIN_SOURCE_DIGEST = true ? "70b9e9f32fde5739daaee933df31b2584f9ef3289c322a0f5b03f1eaac947880" : standinSourceDigest();
65378
+ STANDIN_SOURCE_DIGEST = true ? "967c1c2a3b66ac640e0162783ed9e21b09ff285f8e1f7d4327b70416699e14c8" : standinSourceDigest();
65013
65379
  }
65014
65380
  });
65015
65381
 
@@ -65470,7 +65836,7 @@ var init_package_tree_digest = __esm({
65470
65836
 
65471
65837
  // src/expo-native-prebuilt.ts
65472
65838
  function expoNativeCompilerDigestValue() {
65473
- return true ? "7667f1dce279c8074ed9dd97de1e3b293077ae012cacf08fd6572978f8ef7dc0" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
65839
+ return true ? "960ff9f28de62c2587b34eeda2a04b383e5ecce370aae9948f12cef49f8b450b" : expoNativeCompilerDigest(__sootsim_import_meta_dirname);
65474
65840
  }
65475
65841
  function readSources(value) {
65476
65842
  const sources = isRecord(value) ? value.sources : null;
@@ -73896,302 +74262,6 @@ var init_core_data_entity_classes = __esm({
73896
74262
  }
73897
74263
  });
73898
74264
 
73899
- // src/ios-sdk-frameworks.json
73900
- var ios_sdk_frameworks_default;
73901
- var init_ios_sdk_frameworks = __esm({
73902
- "src/ios-sdk-frameworks.json"() {
73903
- ios_sdk_frameworks_default = {
73904
- sdk: "iphonesimulator27.1",
73905
- frameworks: [
73906
- "ARKit",
73907
- "AVFAudio",
73908
- "AVFoundation",
73909
- "AVKit",
73910
- "AVRouting",
73911
- "Accelerate",
73912
- "Accessibility",
73913
- "AccessoryLiveActivities",
73914
- "AccessoryNotifications",
73915
- "AccessorySetupKit",
73916
- "AccessoryTransportExtension",
73917
- "Accounts",
73918
- "ActivityKit",
73919
- "AdAttributionKit",
73920
- "AdServices",
73921
- "AdSupport",
73922
- "AddressBook",
73923
- "AddressBookUI",
73924
- "AlarmKit",
73925
- "AppClip",
73926
- "AppIntents",
73927
- "AppIntentsTypeSupport",
73928
- "AppMigrationKit",
73929
- "AppTrackingTransparency",
73930
- "AssetsLibrary",
73931
- "AudioToolbox",
73932
- "AudioUnit",
73933
- "AuthenticationServices",
73934
- "AutomatedDeviceEnrollment",
73935
- "AutomaticAssessmentConfiguration",
73936
- "BackgroundAssets",
73937
- "BackgroundTasks",
73938
- "BrowserEngineCore",
73939
- "BrowserEngineKit",
73940
- "BrowserKit",
73941
- "BusinessChat",
73942
- "CFNetwork",
73943
- "CallKit",
73944
- "CarKey",
73945
- "CarPlay",
73946
- "Charts",
73947
- "ClassKit",
73948
- "ClassKitUI",
73949
- "ClockKit",
73950
- "CloudKit",
73951
- "ColorSync",
73952
- "Combine",
73953
- "ComputeGraph",
73954
- "ContactProvider",
73955
- "Contacts",
73956
- "ContactsUI",
73957
- "CoreAudio",
73958
- "CoreAudioKit",
73959
- "CoreAudioTypes",
73960
- "CoreBluetooth",
73961
- "CoreData",
73962
- "CoreFoundation",
73963
- "CoreGraphics",
73964
- "CoreHaptics",
73965
- "CoreImage",
73966
- "CoreLocation",
73967
- "CoreLocationUI",
73968
- "CoreMIDI",
73969
- "CoreML",
73970
- "CoreMedia",
73971
- "CoreMotion",
73972
- "CoreNFC",
73973
- "CoreServices",
73974
- "CoreSpotlight",
73975
- "CoreTelephony",
73976
- "CoreText",
73977
- "CoreTransferable",
73978
- "CoreVideo",
73979
- "CreateMLComponents",
73980
- "CryptoKit",
73981
- "CryptoTokenKit",
73982
- "DataDetection",
73983
- "DeclaredAgeRange",
73984
- "DeveloperToolsSupport",
73985
- "DeviceActivity",
73986
- "DeviceCheck",
73987
- "DeviceDiscoveryExtension",
73988
- "DeviceDiscoveryUI",
73989
- "EnergyKit",
73990
- "EventKit",
73991
- "EventKitUI",
73992
- "ExposureNotification",
73993
- "ExtensionFoundation",
73994
- "ExtensionKit",
73995
- "ExternalAccessory",
73996
- "FamilyControls",
73997
- "FileProvider",
73998
- "FileProviderUI",
73999
- "FinanceKit",
74000
- "FinanceKitUI",
74001
- "Foundation",
74002
- "FoundationModels",
74003
- "GLKit",
74004
- "GSS",
74005
- "GameController",
74006
- "GameKit",
74007
- "GameSave",
74008
- "GameplayKit",
74009
- "GeoToolbox",
74010
- "GroupActivities",
74011
- "HealthKit",
74012
- "HealthKitUI",
74013
- "HomeKit",
74014
- "IOKit",
74015
- "IOSurface",
74016
- "IdentityDocumentServices",
74017
- "IdentityDocumentServicesUI",
74018
- "IdentityLookup",
74019
- "IdentityLookupUI",
74020
- "ImageCaptureCore",
74021
- "ImageIO",
74022
- "ImagePlayground",
74023
- "ImmersiveMediaSupport",
74024
- "Intents",
74025
- "IntentsUI",
74026
- "JavaScriptCore",
74027
- "LinkPresentation",
74028
- "LinkSecurity",
74029
- "LiveCommunicationKit",
74030
- "LocalAuthentication",
74031
- "LocalAuthenticationEmbeddedUI",
74032
- "LockedCameraCapture",
74033
- "ManagedApp",
74034
- "ManagedAppDistribution",
74035
- "ManagedSettings",
74036
- "ManagedSettingsUI",
74037
- "MapKit",
74038
- "MarketplaceKit",
74039
- "Matter",
74040
- "MatterSupport",
74041
- "MediaAccessibility",
74042
- "MediaIntelligence",
74043
- "MediaIntents",
74044
- "MediaPlayer",
74045
- "MediaToolbox",
74046
- "MessageUI",
74047
- "Messages",
74048
- "Metal",
74049
- "MetalKit",
74050
- "MetalPerformancePrimitives",
74051
- "MetalPerformanceShaders",
74052
- "MetalPerformanceShadersGraph",
74053
- "MetricKit",
74054
- "MobileCoreServices",
74055
- "ModelIO",
74056
- "MultipeerConnectivity",
74057
- "MusicKit",
74058
- "MusicUnderstanding",
74059
- "NaturalLanguage",
74060
- "NearbyInteraction",
74061
- "Network",
74062
- "NetworkExtension",
74063
- "NotificationCenter",
74064
- "NowPlaying",
74065
- "OSLog",
74066
- "OpenAL",
74067
- "OpenGLES",
74068
- "PDFKit",
74069
- "PHASE",
74070
- "PaperKit",
74071
- "PassKit",
74072
- "PencilKit",
74073
- "PermissionKit",
74074
- "Photos",
74075
- "PhotosUI",
74076
- "ProximityReader",
74077
- "PushKit",
74078
- "PushToTalk",
74079
- "QuartzCore",
74080
- "QuickLook",
74081
- "QuickLookThumbnailing",
74082
- "RealityFoundation",
74083
- "RealityKit",
74084
- "RelevanceKit",
74085
- "ReplayKit",
74086
- "RoomPlan",
74087
- "SafariServices",
74088
- "SafetyKit",
74089
- "SceneKit",
74090
- "ScreenTime",
74091
- "SecureElementCredential",
74092
- "Security",
74093
- "SecurityUI",
74094
- "SensitiveContentAnalysis",
74095
- "SensorKit",
74096
- "ServicesAccountLinking",
74097
- "SharedWithYou",
74098
- "SharedWithYouCore",
74099
- "ShazamKit",
74100
- "Social",
74101
- "SoundAnalysis",
74102
- "Speech",
74103
- "SpriteKit",
74104
- "StateReporting",
74105
- "StoreKit",
74106
- "SuggestedActions",
74107
- "SwiftData",
74108
- "SwiftUI",
74109
- "SwiftUICore",
74110
- "Symbols",
74111
- "SystemConfiguration",
74112
- "SystemExtensions",
74113
- "TabularData",
74114
- "TelephonyMessagingKit",
74115
- "TipKit",
74116
- "TouchController",
74117
- "Translation",
74118
- "TranslationUIProvider",
74119
- "TrustInsights",
74120
- "Twitter",
74121
- "UIKit",
74122
- "USDKit",
74123
- "UniformTypeIdentifiers",
74124
- "UserNotifications",
74125
- "UserNotificationsUI",
74126
- "VideoSubscriberAccount",
74127
- "VideoToolbox",
74128
- "Vision",
74129
- "VisionKit",
74130
- "WatchConnectivity",
74131
- "WeatherKit",
74132
- "WebKit",
74133
- "WiFiAware",
74134
- "WidgetKit",
74135
- "WorkoutKit",
74136
- "_AVKit_SwiftUI",
74137
- "_AdAttributionKit_StoreKit",
74138
- "_AppIntents_HealthKit",
74139
- "_AppIntents_SwiftUI",
74140
- "_AppIntents_UIKit",
74141
- "_AuthenticationServices_SwiftUI",
74142
- "_Contacts_AppIntents",
74143
- "_CoreData_CloudKit",
74144
- "_CoreLocationUI_SwiftUI",
74145
- "_CoreNFC_UIKit",
74146
- "_CoreSpotlight_FoundationModels",
74147
- "_DataDetection_SwiftUI",
74148
- "_DeviceActivity_SwiftUI",
74149
- "_DeviceDiscoveryUI_SwiftUI",
74150
- "_FinanceKit_AppIntents",
74151
- "_FoundationModels_SwiftUI",
74152
- "_FoundationModels_UIKit",
74153
- "_GameController_SwiftUI",
74154
- "_GeoToolbox_AppIntents",
74155
- "_GroupActivities_UIKit",
74156
- "_HomeKit_SwiftUI",
74157
- "_Intents_TipKit",
74158
- "_LinkPresentation_AppIntents",
74159
- "_LocationEssentials",
74160
- "_MapKit_SwiftUI",
74161
- "_MarketplaceKit_UIKit",
74162
- "_MediaIntents_AppIntents",
74163
- "_MediaPlayer_AppIntents",
74164
- "_MusicKit_SwiftUI",
74165
- "_NowPlaying_AppIntents",
74166
- "_PassKit_SwiftUI",
74167
- "_PermissionKit_SwiftUI",
74168
- "_PermissionKit_UIKit",
74169
- "_PhotosUI_SwiftUI",
74170
- "_PhotosUI_WidgetKit",
74171
- "_Photos_AppIntents",
74172
- "_QuickLook_SwiftUI",
74173
- "_RealityKit_ComputeGraph",
74174
- "_RealityKit_SwiftUI",
74175
- "_RelevanceKit_MapKit",
74176
- "_SceneKit_SwiftUI",
74177
- "_SecureElementCredential_SwiftUI",
74178
- "_SecureElementCredential_UIKit",
74179
- "_SharedWithYou_AppIntents",
74180
- "_SpriteKit_SwiftUI",
74181
- "_StoreKit_SwiftUI",
74182
- "_SwiftData_CoreData",
74183
- "_SwiftData_SwiftUI",
74184
- "_Translation_SwiftUI",
74185
- "_USDKit_RealityKit",
74186
- "_UserNotifications_AppIntents",
74187
- "_WebKit_SwiftUI",
74188
- "_WorkoutKit_SwiftUI",
74189
- "iAd"
74190
- ]
74191
- };
74192
- }
74193
- });
74194
-
74195
74265
  // src/swift-cxx-reachable.ts
74196
74266
  function cxxTrace(stderr) {
74197
74267
  const files2 = [];
@@ -75828,6 +75898,17 @@ function isPackageSource(file) {
75828
75898
  function sourceFiles(root) {
75829
75899
  return packageFiles(root, false).filter(isPackageSource);
75830
75900
  }
75901
+ function xcodeFlatResources(app) {
75902
+ if (!app) return /* @__PURE__ */ new Set();
75903
+ return new Set(
75904
+ app.resources.filter(
75905
+ (file) => !Object.hasOwn(app.resourceNames, file) && !file.split(import_node_path83.default.sep).some((segment) => segment.endsWith(".xcassets"))
75906
+ )
75907
+ );
75908
+ }
75909
+ function bundleResourcePath(flatResources, disk, file) {
75910
+ return flatResources.has(disk) && !file.split("/").includes("Resources") ? `Resources/${file}` : file;
75911
+ }
75831
75912
  function resourceCandidateFiles(root) {
75832
75913
  return packageFiles(root, false).filter(
75833
75914
  (file) => !isPackageSource(file) && !file.endsWith(".xcconfig") && !["project.pbxproj", "project.xcproj", "Package.resolved"].includes(
@@ -75900,12 +75981,24 @@ function buildSwiftResourceTable(project2, baseUrl, inputs) {
75900
75981
  const disk = byRelative.get(file);
75901
75982
  return !disk || !layout2?.targetDirs.get(disk)?.startsWith(`${XCODE_FRAMEWORKS_DIR}/`);
75902
75983
  });
75903
- const found = enumerateBundleImages(relative5, readContents2, (file) => {
75904
- const disk = byRelative.get(file);
75905
- if (!disk) throw new Error(`image source ${file} has no input file`);
75906
- const key2 = layout2 ? xcodeInputKey(layout2, disk, file) : file;
75907
- return swiftResourceBundleForFile(bundles, key2)?.path ?? ".";
75908
- });
75984
+ const flatResources = xcodeFlatResources(layout2?.app);
75985
+ const bundled = new Map(
75986
+ relative5.map((file) => [
75987
+ bundleResourcePath(flatResources, byRelative.get(file), file),
75988
+ file
75989
+ ])
75990
+ );
75991
+ const found = enumerateBundleImages(
75992
+ [...bundled.keys()],
75993
+ (file) => readContents2(bundled.get(file) ?? file),
75994
+ (marked) => {
75995
+ const file = bundled.get(marked) ?? marked;
75996
+ const disk = byRelative.get(file);
75997
+ if (!disk) throw new Error(`image source ${file} has no input file`);
75998
+ const key2 = layout2 ? xcodeInputKey(layout2, disk, file) : file;
75999
+ return swiftResourceBundleForFile(bundles, key2)?.path ?? ".";
76000
+ }
76001
+ ).map((image) => ({ ...image, file: bundled.get(image.file) ?? image.file }));
75909
76002
  const colors = enumerateBundleColors(catalogFiles2, readContents2);
75910
76003
  const symbols = enumerateBundleSymbols(catalogFiles2, readContents2, (file) => {
75911
76004
  const disk = byRelative.get(file);
@@ -76089,15 +76182,20 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
76089
76182
  }
76090
76183
  }
76091
76184
  const groups = /* @__PURE__ */ new Map();
76092
- const appResources = new Set(xcode?.app.resources ?? []);
76185
+ const flatResources = xcodeFlatResources(xcode?.app);
76093
76186
  for (const file of relative5) {
76094
76187
  const disk = import_node_path83.default.join(packagePath, ...file.split("/"));
76188
+ const folderName = xcode?.app.resourceNames[disk];
76189
+ if (folderName) {
76190
+ watched.push(file);
76191
+ addFile(folderName, readPackageFile2(packagePath, disk, limits.resourceBytes));
76192
+ continue;
76193
+ }
76095
76194
  const key2 = xcode ? xcodeInputKey(xcode, disk, file) : file;
76096
76195
  const bundle = swiftResourceBundleForFile(bundles, key2);
76097
76196
  const bundlePath = bundle?.path ?? ".";
76098
76197
  const group = groups.get(bundlePath) ?? /* @__PURE__ */ new Map();
76099
- const resource = appResources.has(disk) && !file.split("/").includes("Resources") ? `Resources/${file}` : file;
76100
- group.set(resource, disk);
76198
+ group.set(bundleResourcePath(flatResources, disk, file), disk);
76101
76199
  groups.set(bundlePath, group);
76102
76200
  }
76103
76201
  for (const bundle of bundles) {
@@ -86415,7 +86513,7 @@ var init_nitro_superset = __esm({
86415
86513
  init_nitroContract();
86416
86514
  init_swift_standin_digest();
86417
86515
  NITRO_SUPERSET_ENTRY_NAME = "superset";
86418
- NITRO_COMPILER_DIGEST = true ? "5586d24405a8b94499b182fe067e8af8be656d9b36558aa6ccbd8c7f9e4150dd" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
86516
+ NITRO_COMPILER_DIGEST = true ? "48d18c74e6a298bf524b2a8a4ae793e43480d5fdfb4f07d3ed1074d4e6e130c2" : nitroCompilerSourceDigest(__sootsim_import_meta_dirname, STANDIN_SOURCE_DIGEST2);
86419
86517
  nitroSupersetLock = parseLock(nitro_superset_lock_default);
86420
86518
  nitroSupersetKey = (inputs) => nativeEntryKey({ ...inputs, compiler: NITRO_COMPILER_DIGEST });
86421
86519
  published2 = /* @__PURE__ */ new Map();
@@ -87127,7 +87225,7 @@ var init_one_sdk_bundle = __esm({
87127
87225
  var runtime_companion_default;
87128
87226
  var init_runtime_companion = __esm({
87129
87227
  "runtime-companion.json"() {
87130
- runtime_companion_default = { abi: 1, sha256: "c3cfa87c38bca3be3b225d514efe1b9e2ab9119227137e7190dfa25eccf43fe7", file: "node/cli-c3cfa87c38bca3be3b225d514efe1b9e2ab9119227137e7190dfa25eccf43fe7.cjs" };
87228
+ runtime_companion_default = { abi: 1, sha256: "ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0", file: "node/cli-ec96dcaf1a90c0295f3ea5be7ec176c04c0714e27eda99ca6b2ba0a2e3394fd0.cjs" };
87131
87229
  }
87132
87230
  });
87133
87231
 
@@ -87188,6 +87286,7 @@ function getCliRuntime() {
87188
87286
  "Incompatible Peach runtime companion ABI; run `peach runtime install`"
87189
87287
  );
87190
87288
  }
87289
+ runtime.provideTerser(() => import("terser"));
87191
87290
  loaded2 = { root, runtime };
87192
87291
  return runtime;
87193
87292
  }
@@ -87207,46 +87306,11 @@ var init_cli_runtime = __esm({
87207
87306
  }
87208
87307
  });
87209
87308
 
87210
- // src/runtime-delivery.ts
87211
- var DEFAULT_RUNTIME_CDN_ORIGIN, RNX_CHANGELOG_URL, RNX_CHANGELOG_API_URL, RNX_RUNTIME_PRODUCT, rnxRuntime;
87212
- var init_runtime_delivery = __esm({
87213
- "src/runtime-delivery.ts"() {
87214
- "use strict";
87215
- init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
87216
- init_src();
87217
- init_cli_runtime();
87218
- init_home_paths();
87219
- init_public_brand();
87220
- DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin;
87221
- RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`;
87222
- RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`;
87223
- RNX_RUNTIME_PRODUCT = {
87224
- id: "peach",
87225
- defaultCdnOrigin: DEFAULT_RUNTIME_CDN_ORIGIN,
87226
- manifestPath: "/runtimes/manifest.json",
87227
- tarballPath: (version2) => `/runtimes/sootsim-runtime-${version2}.tar.zst`,
87228
- // the engine runtime is a static SPA: shell at the root, engine/ and
87229
- // engine-tenant/ beneath it. index.html is what the daemon and the
87230
- // vite/metro plugins serve, so its absence means the tarball is not one.
87231
- installedMarker: "index.html",
87232
- verifyInstall: ensureCliCompanion,
87233
- env: {
87234
- cdnOrigin: "PEACH_CDN_ORIGIN",
87235
- channel: "PEACH_RUNTIME_CHANNEL"
87236
- },
87237
- ensureHome: ensureRnxHome,
87238
- configFile: configFilePath,
87239
- runtimesDir,
87240
- runtimeDir,
87241
- cacheDir,
87242
- readActiveRuntime,
87243
- writeActiveRuntime
87244
- };
87245
- rnxRuntime = createRuntimeDelivery(RNX_RUNTIME_PRODUCT);
87246
- }
87247
- });
87248
-
87249
87309
  // src/runtime-packs.ts
87310
+ var runtime_packs_exports = {};
87311
+ __export(runtime_packs_exports, {
87312
+ ensureRuntimePackFor: () => ensureRuntimePackFor
87313
+ });
87250
87314
  function listedFiles(runtimeRoot) {
87251
87315
  let listed = listedByRoot.get(runtimeRoot);
87252
87316
  if (listed) return listed;
@@ -87413,6 +87477,52 @@ var init_runtime_packs = __esm({
87413
87477
  }
87414
87478
  });
87415
87479
 
87480
+ // src/runtime-delivery.ts
87481
+ var DEFAULT_RUNTIME_CDN_ORIGIN, RNX_CHANGELOG_URL, RNX_CHANGELOG_API_URL, RNX_RUNTIME_PRODUCT, rnxRuntime;
87482
+ var init_runtime_delivery = __esm({
87483
+ "src/runtime-delivery.ts"() {
87484
+ "use strict";
87485
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
87486
+ init_src();
87487
+ init_cli_runtime();
87488
+ init_home_paths();
87489
+ init_public_brand();
87490
+ DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin;
87491
+ RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`;
87492
+ RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`;
87493
+ RNX_RUNTIME_PRODUCT = {
87494
+ id: "peach",
87495
+ defaultCdnOrigin: DEFAULT_RUNTIME_CDN_ORIGIN,
87496
+ manifestPath: "/runtimes/manifest.json",
87497
+ tarballPath: (version2) => `/runtimes/sootsim-runtime-${version2}.tar.zst`,
87498
+ // the engine runtime is a static SPA: shell at the root, engine/ and
87499
+ // engine-tenant/ beneath it. index.html is what the daemon and the
87500
+ // vite/metro plugins serve, so its absence means the tarball is not one.
87501
+ installedMarker: "index.html",
87502
+ verifyInstall: ensureCliCompanion,
87503
+ // canvaskit's ganesh backend is a runtime pack because a browser with WebGPU
87504
+ // never runs it, but linux and CI browsers usually have no GPU and always do
87505
+ afterInstall: async (dir) => {
87506
+ if (process.platform !== "linux" && !process.env.CI) return;
87507
+ const { ensureRuntimePackFor: ensureRuntimePackFor2 } = await Promise.resolve().then(() => (init_runtime_packs(), runtime_packs_exports));
87508
+ await ensureRuntimePackFor2(dir, "/engine/canvaskit-ganesh.wasm");
87509
+ },
87510
+ env: {
87511
+ cdnOrigin: "PEACH_CDN_ORIGIN",
87512
+ channel: "PEACH_RUNTIME_CHANNEL"
87513
+ },
87514
+ ensureHome: ensureRnxHome,
87515
+ configFile: configFilePath,
87516
+ runtimesDir,
87517
+ runtimeDir,
87518
+ cacheDir,
87519
+ readActiveRuntime,
87520
+ writeActiveRuntime
87521
+ };
87522
+ rnxRuntime = createRuntimeDelivery(RNX_RUNTIME_PRODUCT);
87523
+ }
87524
+ });
87525
+
87416
87526
  // src/turbo-bundle.ts
87417
87527
  async function compiledTurboProviders(appRoot, projectRoot, iosTarget) {
87418
87528
  const config = await loadRNXAppConfig(resolveAppProject(appRoot));