peachsim 0.1.939 → 0.1.1399

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 (396) hide show
  1. package/README.md +28 -22
  2. package/cli/app-catalog.ts +29 -14
  3. package/cli/app-fonts.ts +5 -3
  4. package/cli/bridge-flow-runner.ts +40 -29
  5. package/cli/cloud-client.ts +57 -21
  6. package/cli/cloud-test-tunnel.ts +12 -18
  7. package/cli/commands/agent.ts +1 -1
  8. package/cli/commands/app-fonts.ts +3 -3
  9. package/cli/commands/assert.ts +8 -8
  10. package/cli/commands/auth.ts +8 -3
  11. package/cli/commands/box/bundle-plane.ts +13 -1
  12. package/cli/commands/box.ts +16 -5
  13. package/cli/commands/compat.ts +1 -1
  14. package/cli/commands/config.ts +2 -2
  15. package/cli/commands/control.ts +125 -71
  16. package/cli/commands/cpu-profile.ts +45 -1
  17. package/cli/commands/daemon.ts +131 -33
  18. package/cli/commands/debug.ts +24 -17
  19. package/cli/commands/desktop.ts +7 -1
  20. package/cli/commands/detect.ts +101 -0
  21. package/cli/commands/detox.ts +6 -6
  22. package/cli/commands/device.ts +12 -12
  23. package/cli/commands/electron.ts +32 -14
  24. package/cli/commands/flow.ts +49 -41
  25. package/cli/commands/guest-host.ts +39 -1
  26. package/cli/commands/inspect/core.ts +14 -8
  27. package/cli/commands/inspect/list.ts +1 -1
  28. package/cli/commands/inspect/settle.ts +5 -3
  29. package/cli/commands/inspect/settling.ts +229 -44
  30. package/cli/commands/inspect/wait-idle.ts +3 -2
  31. package/cli/commands/inspect.ts +105 -93
  32. package/cli/commands/install-cli.ts +36 -15
  33. package/cli/commands/install-desktop.ts +68 -195
  34. package/cli/commands/kotlin.ts +6 -5
  35. package/cli/commands/login.ts +5 -5
  36. package/cli/commands/maestro-compare.ts +554 -0
  37. package/cli/commands/maestro-generate.ts +6 -3
  38. package/cli/commands/maestro.ts +22 -0
  39. package/cli/commands/mode.ts +2 -2
  40. package/cli/commands/no-bridge-hint.ts +6 -2
  41. package/cli/commands/platform.ts +35 -6
  42. package/cli/commands/preview.ts +6 -0
  43. package/cli/commands/project-report.ts +10 -12
  44. package/cli/commands/record.ts +37 -37
  45. package/cli/commands/runtime.ts +9 -9
  46. package/cli/commands/screenshot-layers.ts +4 -4
  47. package/cli/commands/screenshot-mode.ts +2 -2
  48. package/cli/commands/screenshot.ts +8 -8
  49. package/cli/commands/screenshots-capture.ts +2 -2
  50. package/cli/commands/serve.ts +9 -12
  51. package/cli/commands/setup.ts +29 -14
  52. package/cli/commands/shell-boolean-mode.ts +2 -2
  53. package/cli/commands/show-touches-mode.ts +2 -2
  54. package/cli/commands/skills.ts +11 -11
  55. package/cli/commands/swift.ts +29 -11
  56. package/cli/commands/telemetry.ts +2 -2
  57. package/cli/commands/test.ts +5 -0
  58. package/cli/commands/three-mode.ts +3 -3
  59. package/cli/commands/timeline.ts +4 -4
  60. package/cli/commands/upgrade.ts +2 -2
  61. package/cli/commands/upload.ts +15 -15
  62. package/cli/commands/what-happened.ts +2 -2
  63. package/cli/current-sim.ts +6 -3
  64. package/cli/desktop-companion.ts +55 -149
  65. package/cli/dev-build-freshness.ts +2 -2
  66. package/cli/drivers/desktop.ts +17 -9
  67. package/cli/drivers/electron.ts +1 -2
  68. package/cli/drivers/playwright-sim-host.ts +11 -2
  69. package/cli/drivers/playwright.ts +35 -2
  70. package/cli/drivers/types.ts +8 -0
  71. package/cli/maestro-compare.ts +670 -0
  72. package/cli/outbound-endpoints.ts +46 -8
  73. package/cli/recording-access.ts +6 -6
  74. package/cli/run-registry.ts +1 -1
  75. package/cli/runtime-compat.ts +5 -1
  76. package/cli/send-to-box.ts +3 -3
  77. package/cli/shell-init.ts +2 -1
  78. package/cli/ws-bridge.ts +9 -5
  79. package/detox/element-types.ts +1 -0
  80. package/detox/gestures.ts +3 -3
  81. package/detox/index.ts +67 -38
  82. package/detox/navigation-lifecycle.ts +9 -6
  83. package/detox/proof-frame.cjs +6 -4
  84. package/dist-lib/agent-daemon-client.cjs +1 -1
  85. package/dist-lib/agent-events.cjs +1 -1
  86. package/dist-lib/attached-projects.cjs +1 -1
  87. package/dist-lib/auth/shared-session.cjs +1 -1
  88. package/dist-lib/backend-origin.cjs +1 -1
  89. package/dist-lib/beta.cjs +1 -1
  90. package/dist-lib/beta.mjs +1 -1
  91. package/dist-lib/bridge-constants.cjs +1 -1
  92. package/dist-lib/bridge-contract-input.cjs +42 -17
  93. package/dist-lib/bridge-contract-input.mjs +41 -16
  94. package/dist-lib/bridge-contract.cjs +1 -4
  95. package/dist-lib/bridge-contract.mjs +1 -3
  96. package/dist-lib/bundle-channel.cjs +2918 -550
  97. package/dist-lib/capture-contract.cjs +65 -24
  98. package/dist-lib/capture-contract.mjs +63 -24
  99. package/dist-lib/cloud-contract.cjs +2 -2
  100. package/dist-lib/cloud-contract.mjs +2 -2
  101. package/dist-lib/cloud-test-args.cjs +1 -1
  102. package/dist-lib/cloud-test-args.mjs +1 -1
  103. package/dist-lib/cloud.cjs +3 -3
  104. package/dist-lib/cloud.mjs +3 -3
  105. package/dist-lib/config.cjs +15 -5
  106. package/dist-lib/config.mjs +154 -0
  107. package/dist-lib/detox/index.cjs +495 -139
  108. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  109. package/dist-lib/expo-swift-bundle.cjs +1168 -238
  110. package/dist-lib/expo-swift-metadata.cjs +34 -23
  111. package/dist-lib/expo-swift-metadata.mjs +32 -23
  112. package/dist-lib/home-paths.cjs +2 -2
  113. package/dist-lib/host/bridge-host.cjs +2938 -654
  114. package/dist-lib/host/fetch-proxy-handler.cjs +14 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +7 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +5 -1
  117. package/dist-lib/host/replacement-module-handler.cjs +2 -2
  118. package/dist-lib/host/websocket-proxy.cjs +1 -1
  119. package/dist-lib/index.cjs +999 -353
  120. package/dist-lib/jump-to-source-babel.cjs +1 -1
  121. package/dist-lib/jump-to-source-native.cjs +1 -1
  122. package/dist-lib/kotlin-host.cjs +332 -19
  123. package/dist-lib/menu.cjs +1 -1
  124. package/dist-lib/menu.mjs +1 -1
  125. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  126. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  127. package/dist-lib/metro-production-bundle.cjs +7 -7
  128. package/dist-lib/metro-production-bundle.mjs +5 -5
  129. package/dist-lib/metro.cjs +688 -250
  130. package/dist-lib/native-app-identity-project.cjs +2647 -0
  131. package/dist-lib/native-app-identity-project.mjs +1257 -0
  132. package/dist-lib/native-app-identity.cjs +325 -25
  133. package/dist-lib/native-app-identity.mjs +323 -25
  134. package/dist-lib/native-firebase-metadata.cjs +1 -1
  135. package/dist-lib/native-firebase-metadata.mjs +1 -1
  136. package/dist-lib/plist.cjs +1 -1
  137. package/dist-lib/plist.mjs +1 -1
  138. package/dist-lib/profiles.cjs +1 -1
  139. package/dist-lib/public-brand.cjs +1 -1
  140. package/dist-lib/react-native-host-modules.cjs +5 -1
  141. package/dist-lib/react-native-host-modules.mjs +5 -1
  142. package/dist-lib/scripts/dev-server-scanner.cjs +57 -32
  143. package/dist-lib/sdk.cjs +231 -51
  144. package/dist-lib/sdk.mjs +231 -51
  145. package/dist-lib/skills.cjs +4107 -1374
  146. package/dist-lib/swift-compile.cjs +290 -30
  147. package/dist-lib/swift-compile.mjs +290 -30
  148. package/dist-lib/swift-package.cjs +143 -12
  149. package/dist-lib/swift-package.mjs +137 -11
  150. package/dist-lib/swift-submit.cjs +47 -5
  151. package/dist-lib/swift-submit.mjs +42 -5
  152. package/dist-lib/swift-toolchain.cjs +7 -2
  153. package/dist-lib/swift.cjs +1 -1
  154. package/dist-lib/vite-swift.cjs +1392 -458
  155. package/dist-lib/vite.cjs +13 -17
  156. package/dist-lib/worklet-executable.cjs +248 -33
  157. package/dist-lib/worklet-executable.mjs +248 -33
  158. package/install.sh +10 -1
  159. package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Resources.kt +9 -9
  160. package/kotlin/AndroidViewSources/android/graphics/Canvas.kt +20 -0
  161. package/kotlin/AndroidViewSources/android/view/View.kt +211 -0
  162. package/kotlin/AndroidViewSources/android/widget/FrameLayout.kt +61 -0
  163. package/kotlin/AndroidViewSources/android/widget/LinearLayout.kt +49 -0
  164. package/kotlin/AppSources/android/view/Window.kt +36 -0
  165. package/kotlin/AppSources/android/view/WindowInsets.kt +9 -0
  166. package/kotlin/AppSources/android/view/WindowInsetsController.kt +5 -0
  167. package/kotlin/AppSources/android/window/OnBackInvokedDispatcher.kt +48 -0
  168. package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +20 -5
  169. package/kotlin/AppSources/androidx/compose/foundation/layout/WindowInsets.kt +15 -0
  170. package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +2 -1
  171. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +42 -50
  172. package/kotlin/ComposeSources/PeachComposeHost.kt +200 -84
  173. package/kotlin/ExpoComposeSources/PeachAndroidView.kt +87 -0
  174. package/kotlin/ExpoComposeSources/PeachExpoViewMount.kt +24 -0
  175. package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +28 -0
  176. package/kotlin/ExpoComposeSources/expo/modules/kotlin/views/ExpoComposeView.kt +70 -0
  177. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +513 -0
  178. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +173 -0
  179. package/kotlin/ExpoSources/expo/modules/kotlin/AppContext.kt +20 -0
  180. package/kotlin/ExpoSources/expo/modules/kotlin/Promise.kt +19 -0
  181. package/kotlin/ExpoSources/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +198 -0
  182. package/kotlin/ExpoSources/expo/modules/kotlin/exception/CodedException.kt +126 -0
  183. package/kotlin/ExpoSources/expo/modules/kotlin/functions/Functions.kt +132 -0
  184. package/kotlin/ExpoSources/expo/modules/kotlin/jni/JavaScriptTypedArray.kt +81 -0
  185. package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +98 -0
  186. package/kotlin/ExpoSources/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +236 -0
  187. package/kotlin/ExpoSources/expo/modules/kotlin/records/Record.kt +12 -0
  188. package/kotlin/ExpoSources/expo/modules/kotlin/runtime/Runtime.kt +9 -0
  189. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObject.kt +50 -0
  190. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +57 -0
  191. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedRef.kt +19 -0
  192. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt +158 -0
  193. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/GenericTypedArray.kt +8 -0
  194. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArray.kt +29 -0
  195. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArrayIterator.kt +9 -0
  196. package/kotlin/ExpoSources/expo/modules/kotlin/types/AnyType.kt +155 -0
  197. package/kotlin/ExpoSources/expo/modules/kotlin/types/Either.kt +91 -0
  198. package/kotlin/ExpoSources/expo/modules/kotlin/types/Enumerable.kt +6 -0
  199. package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +54 -0
  200. package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +23 -0
  201. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +71 -0
  202. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +35 -0
  203. package/kotlin/README.md +13 -3
  204. package/kotlin/Sources/android/os/Build.kt +17 -0
  205. package/kotlin/Sources/android/os/Handler.kt +35 -0
  206. package/kotlin/Sources/android/os/Looper.kt +17 -0
  207. package/kotlin/Sources/android/os/MessageQueue.kt +56 -0
  208. package/kotlin/Sources/android/os/SystemClock.kt +14 -0
  209. package/kotlin/Sources/android/util/Log.kt +64 -0
  210. package/kotlin/Sources/java/security/MessageDigest.kt +114 -0
  211. package/kotlin/Sources/kotlin/text/StringFormat.kt +9 -0
  212. package/kotlin/Sources/org/json/JSON.kt +44 -0
  213. package/kotlin/fixtures/counter/Counter.d.kt.ts +1 -0
  214. package/kotlin/fixtures/counter/Counter.kt +10 -3
  215. package/kotlin/fixtures/counter/CounterApp.native.tsx +1 -1
  216. package/kotlin/fixtures/counter/vite.config.ts +2 -2
  217. package/kotlin/fixtures/headless-counter/Headless.kt +7 -6
  218. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +7 -0
  219. package/kotlin/fixtures/import-animation/Animation.kt +80 -0
  220. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +13 -0
  221. package/kotlin/fixtures/import-animation/README.md +24 -0
  222. package/kotlin/fixtures/import-animation/app/_layout.tsx +4 -0
  223. package/kotlin/fixtures/import-animation/app/index+spa.tsx +1 -0
  224. package/kotlin/fixtures/import-animation/app/routes.d.ts +18 -0
  225. package/kotlin/fixtures/import-animation/package.json +23 -0
  226. package/kotlin/fixtures/import-animation/tsconfig.json +20 -0
  227. package/kotlin/fixtures/import-animation/vite.config.ts +20 -0
  228. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +7 -0
  229. package/kotlin/fixtures/import-editor/Editor.kt +59 -0
  230. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +23 -0
  231. package/kotlin/fixtures/import-editor/README.md +27 -0
  232. package/kotlin/fixtures/import-editor/app/_layout.tsx +4 -0
  233. package/kotlin/fixtures/import-editor/app/index+spa.tsx +1 -0
  234. package/kotlin/fixtures/import-editor/package.json +23 -0
  235. package/kotlin/fixtures/import-editor/tsconfig.json +20 -0
  236. package/kotlin/fixtures/import-editor/vite.config.ts +20 -0
  237. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +7 -0
  238. package/kotlin/fixtures/import-effects/Effects.kt +87 -0
  239. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +13 -0
  240. package/kotlin/fixtures/import-effects/README.md +19 -0
  241. package/kotlin/fixtures/import-effects/app/_layout.tsx +4 -0
  242. package/kotlin/fixtures/import-effects/app/index+spa.tsx +1 -0
  243. package/kotlin/fixtures/import-effects/package.json +23 -0
  244. package/kotlin/fixtures/import-effects/tsconfig.json +20 -0
  245. package/kotlin/fixtures/import-effects/vite.config.ts +20 -0
  246. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +13 -0
  247. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +7 -0
  248. package/kotlin/fixtures/import-layout/Layout.kt +72 -0
  249. package/kotlin/fixtures/import-layout/README.md +24 -0
  250. package/kotlin/fixtures/import-layout/app/_layout.tsx +4 -0
  251. package/kotlin/fixtures/import-layout/app/index+spa.tsx +1 -0
  252. package/kotlin/fixtures/import-layout/package.json +23 -0
  253. package/kotlin/fixtures/import-layout/tsconfig.json +20 -0
  254. package/kotlin/fixtures/import-layout/vite.config.ts +20 -0
  255. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +18 -0
  256. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +7 -0
  257. package/kotlin/fixtures/import-navigation/Navigation.kt +104 -0
  258. package/kotlin/fixtures/import-navigation/README.md +31 -0
  259. package/kotlin/fixtures/import-navigation/app/_layout.tsx +4 -0
  260. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +1 -0
  261. package/kotlin/fixtures/import-navigation/package.json +23 -0
  262. package/kotlin/fixtures/import-navigation/tsconfig.json +20 -0
  263. package/kotlin/fixtures/import-navigation/vite.config.ts +20 -0
  264. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +29 -0
  265. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +7 -0
  266. package/kotlin/fixtures/import-overlays/Overlays.kt +93 -0
  267. package/kotlin/fixtures/import-overlays/README.md +34 -0
  268. package/kotlin/fixtures/import-overlays/app/_layout.tsx +4 -0
  269. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +1 -0
  270. package/kotlin/fixtures/import-overlays/package.json +23 -0
  271. package/kotlin/fixtures/import-overlays/tsconfig.json +20 -0
  272. package/kotlin/fixtures/import-overlays/vite.config.ts +20 -0
  273. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +13 -0
  274. package/kotlin/fixtures/import-scroll/README.md +23 -0
  275. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +7 -0
  276. package/kotlin/fixtures/import-scroll/Scroll.kt +91 -0
  277. package/kotlin/fixtures/import-scroll/app/_layout.tsx +4 -0
  278. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +1 -0
  279. package/kotlin/fixtures/import-scroll/package.json +23 -0
  280. package/kotlin/fixtures/import-scroll/tsconfig.json +20 -0
  281. package/kotlin/fixtures/import-scroll/vite.config.ts +20 -0
  282. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +44 -0
  283. package/kotlin/fixtures/import-selection/README.md +32 -0
  284. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +8 -0
  285. package/kotlin/fixtures/import-selection/Selection.kt +78 -0
  286. package/kotlin/fixtures/import-selection/app/_layout.tsx +4 -0
  287. package/kotlin/fixtures/import-selection/app/index+spa.tsx +1 -0
  288. package/kotlin/fixtures/import-selection/package.json +23 -0
  289. package/kotlin/fixtures/import-selection/tsconfig.json +20 -0
  290. package/kotlin/fixtures/import-selection/vite.config.ts +20 -0
  291. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +13 -0
  292. package/kotlin/fixtures/import-surfaces/README.md +22 -0
  293. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +7 -0
  294. package/kotlin/fixtures/import-surfaces/Surfaces.kt +64 -0
  295. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +4 -0
  296. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +1 -0
  297. package/kotlin/fixtures/import-surfaces/package.json +23 -0
  298. package/kotlin/fixtures/import-surfaces/tsconfig.json +20 -0
  299. package/kotlin/fixtures/import-surfaces/vite.config.ts +20 -0
  300. package/kotlin/fixtures/import-values/ImportValues.native.tsx +35 -0
  301. package/kotlin/fixtures/import-values/README.md +23 -0
  302. package/kotlin/fixtures/import-values/Values.d.kt.ts +11 -0
  303. package/kotlin/fixtures/import-values/Values.kt +66 -0
  304. package/kotlin/fixtures/import-values/app/_layout.tsx +4 -0
  305. package/kotlin/fixtures/import-values/app/index+spa.tsx +1 -0
  306. package/kotlin/fixtures/import-values/package.json +23 -0
  307. package/kotlin/fixtures/import-values/tsconfig.json +20 -0
  308. package/kotlin/fixtures/import-values/vite.config.ts +20 -0
  309. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +38 -0
  310. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +36 -0
  311. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +3 -1
  312. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +50 -0
  313. package/kotlin/fork/NOTICE +6 -1
  314. package/kotlin/fork/README.md +15 -7
  315. package/kotlin/fork/build.sh +2 -0
  316. package/kotlin/fork/compose-worker-globals.patch +186 -4
  317. package/kotlin/fork/fork.json +2 -2
  318. package/kotlin/fork/skiko-worker-clock.patch +12 -0
  319. package/kotlin/toolchain.json +12 -12
  320. package/kotlin/tools/expo-types.main.kts +115 -0
  321. package/package.json +17 -23
  322. package/scripts/dev-server-scanner.ts +92 -66
  323. package/skills/contrast/SKILL.md +2 -2
  324. package/skills/peach-debug/SKILL.md +1 -1
  325. package/skills/peach-perf/SKILL.md +1 -1
  326. package/skills/peach-setup/SKILL.md +2 -1
  327. package/skills/peach-test/SKILL.md +8 -0
  328. package/src/assetCatalogContract.ts +43 -1
  329. package/src/bridge-contract-input.ts +46 -19
  330. package/src/bridge-contract.ts +0 -1
  331. package/src/bundle-channel.mjs +197 -84
  332. package/src/bundleGlobalFooter.ts +38 -0
  333. package/src/capture-contract.ts +107 -33
  334. package/src/cloud-contract.ts +5 -1
  335. package/src/cloud.ts +5 -2
  336. package/src/config.ts +22 -3
  337. package/src/configured-bundle-producer.ts +1 -1
  338. package/src/desktop-host-delivery.ts +95 -1
  339. package/src/expo-kotlin-bundle.ts +29 -0
  340. package/src/expo-kotlin-host.ts +201 -0
  341. package/src/expo-swift-host.ts +96 -76
  342. package/src/expoKotlinContract.ts +70 -0
  343. package/src/expoSwiftContract.ts +4 -25
  344. package/src/home-paths.ts +7 -4
  345. package/src/host/bridge-host.ts +23 -3
  346. package/src/host/fetch-proxy-handler.ts +13 -0
  347. package/src/host/fetch-proxy-overrides.ts +11 -0
  348. package/src/host/replacement-module-handler.ts +5 -2
  349. package/src/index.ts +3 -1
  350. package/src/kotlin-host.ts +463 -19
  351. package/src/metro-plugin.ts +56 -28
  352. package/src/metro-production-bundle.ts +2 -2
  353. package/src/native-app-identity-project.ts +190 -0
  354. package/src/native-app-identity.ts +398 -34
  355. package/src/native-firebase-config.ts +69 -15
  356. package/src/native-seam-manifest.ts +6 -0
  357. package/src/one-widget-discovery.ts +2 -1
  358. package/src/openstep-plist.ts +107 -0
  359. package/src/react-native-host-modules.ts +4 -0
  360. package/src/runtime-assets.ts +2 -2
  361. package/src/sim-client.ts +2 -2
  362. package/src/swift-binary-modules.ts +3 -1
  363. package/src/swift-compile.ts +286 -38
  364. package/src/swift-distribution-contract.ts +4 -0
  365. package/src/swift-distribution.lock.json +123 -12
  366. package/src/swift-distribution.ts +7 -3
  367. package/src/swift-host.ts +298 -83
  368. package/src/swift-package-manifest.ts +29 -2
  369. package/src/swift-package.ts +180 -10
  370. package/src/swift-packages.ts +4 -0
  371. package/src/swift-standin-emit.ts +4 -1
  372. package/src/swift-standins.ts +274 -15
  373. package/src/swift-submit.ts +62 -7
  374. package/src/swift-toolchain.ts +6 -1
  375. package/src/swiftContract.ts +126 -3
  376. package/src/vite-plugin-one.ts +13 -16
  377. package/src/vite-plugin-swift.ts +4 -5
  378. package/src/vite-plugin.ts +360 -144
  379. package/src/vite.d.ts +1 -1
  380. package/src/worker-system-chunks.ts +221 -0
  381. package/src/worklet-executable.ts +348 -38
  382. package/src/worklets-babel.ts +1 -1
  383. package/src/xcode-project.ts +243 -127
  384. package/dist-lib/agent-identity.cjs +0 -39
  385. package/dist-lib/agent-sessions.cjs +0 -760
  386. package/dist-lib/cli-constants.cjs +0 -32
  387. package/dist-lib/render-mode.cjs +0 -44
  388. package/kotlin/AppSources/android/view/View.kt +0 -74
  389. package/kotlin/AppSources/android/widget/FrameLayout.kt +0 -6
  390. package/src/render-mode.ts +0 -15
  391. /package/kotlin/{AppSources → AndroidViewSources}/android/content/Context.kt +0 -0
  392. /package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Configuration.kt +0 -0
  393. /package/kotlin/{AppSources → AndroidViewSources}/android/graphics/Color.kt +0 -0
  394. /package/kotlin/{AppSources → AndroidViewSources}/android/util/DisplayMetrics.kt +0 -0
  395. /package/kotlin/{AppSources → AndroidViewSources}/dev/peach/app/JavaFormat.kt +0 -0
  396. /package/kotlin/{AppSources → Sources}/java/lang/Runnable.kt +0 -0
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.939 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! peach v0.1.1399 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -37,6 +37,100 @@ __export(native_app_identity_exports, {
37
37
  readNativeAppIdentityFromBundle: () => readNativeAppIdentityFromBundle
38
38
  });
39
39
  module.exports = __toCommonJS(native_app_identity_exports);
40
+
41
+ // src/openstep-plist.ts
42
+ function parseOpenStepPlist(text) {
43
+ let i = 0;
44
+ const fail = (message) => {
45
+ const line = text.slice(0, i).split("\n").length;
46
+ throw new Error(`project.pbxproj line ${line}: ${message}`);
47
+ };
48
+ const skip = () => {
49
+ for (; ; ) {
50
+ const ch = text[i];
51
+ if (ch === " " || ch === " " || ch === "\n" || ch === "\r") i++;
52
+ else if (ch === "/" && text[i + 1] === "*") {
53
+ const end = text.indexOf("*/", i + 2);
54
+ if (end < 0) fail("unterminated comment");
55
+ i = end + 2;
56
+ } else if (ch === "/" && text[i + 1] === "/") {
57
+ const end = text.indexOf("\n", i);
58
+ i = end < 0 ? text.length : end + 1;
59
+ } else return;
60
+ }
61
+ };
62
+ const quoted = () => {
63
+ i++;
64
+ let out = "";
65
+ for (; ; ) {
66
+ const ch = text[i++];
67
+ if (ch === void 0) fail("unterminated string");
68
+ if (ch === '"') return out;
69
+ if (ch !== "\\") {
70
+ out += ch;
71
+ continue;
72
+ }
73
+ const next = text[i++];
74
+ if (next === "n") out += "\n";
75
+ else if (next === "t") out += " ";
76
+ else if (next === "r") out += "\r";
77
+ else if (next === "U") {
78
+ out += String.fromCharCode(parseInt(text.slice(i, i + 4), 16));
79
+ i += 4;
80
+ } else out += next;
81
+ }
82
+ };
83
+ const value = () => {
84
+ skip();
85
+ const ch = text[i];
86
+ if (ch === "{") {
87
+ i++;
88
+ const dict = {};
89
+ for (; ; ) {
90
+ skip();
91
+ if (text[i] === "}") {
92
+ i++;
93
+ return dict;
94
+ }
95
+ const key = value();
96
+ if (typeof key !== "string") fail("dictionary key is not a string");
97
+ skip();
98
+ if (text[i++] !== "=") fail("expected =");
99
+ if (Object.hasOwn(dict, key)) fail(`duplicate key ${key}`);
100
+ dict[key] = value();
101
+ skip();
102
+ if (text[i++] !== ";") fail("expected ;");
103
+ }
104
+ }
105
+ if (ch === "(") {
106
+ i++;
107
+ const list = [];
108
+ for (; ; ) {
109
+ skip();
110
+ if (text[i] === ")") {
111
+ i++;
112
+ return list;
113
+ }
114
+ list.push(value());
115
+ skip();
116
+ if (text[i] === ",") i++;
117
+ else if (text[i] !== ")") fail("expected , or )");
118
+ }
119
+ }
120
+ if (ch === '"') return quoted();
121
+ const start = i;
122
+ while (i < text.length && /[A-Za-z0-9_$+/:.\-<>]/.test(text[i])) i++;
123
+ if (i === start) fail(`unexpected ${JSON.stringify(ch ?? "end of file")}`);
124
+ return text.slice(start, i);
125
+ };
126
+ if (text.startsWith("// !$*UTF8*$!")) i = text.indexOf("\n") + 1;
127
+ const root = value();
128
+ skip();
129
+ if (i !== text.length) fail("trailing content");
130
+ return root;
131
+ }
132
+
133
+ // src/native-app-identity.ts
40
134
  var NATIVE_APP_IDENTITY_PREFIX = "globalThis.__sootsimNativeAppIdentity=";
41
135
  var METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
42
136
  var NATIVE_APP_IDENTITY_HEADER = "Peach-Native-App-Identity";
@@ -48,13 +142,40 @@ function nonEmptyString(value) {
48
142
  }
49
143
  function isNativeAppIdentity(value) {
50
144
  if (!isRecord(value)) return false;
145
+ const oneUpdates = value.oneUpdates;
146
+ if (oneUpdates !== void 0 && (!isRecord(oneUpdates) || typeof oneUpdates.enabled !== "boolean" || oneUpdates.url !== null && typeof oneUpdates.url !== "string" || oneUpdates.runtimeVersion !== null && typeof oneUpdates.runtimeVersion !== "string" || oneUpdates.embeddedManifestJson !== null && typeof oneUpdates.embeddedManifestJson !== "string" || oneUpdates.enabled && (typeof oneUpdates.url !== "string" || oneUpdates.url.length === 0 || typeof oneUpdates.runtimeVersion !== "string" || oneUpdates.runtimeVersion.length === 0))) {
147
+ return false;
148
+ }
51
149
  const descriptions = value.permissionUsageDescriptions;
52
150
  if (descriptions !== void 0 && !isRecord(descriptions)) return false;
53
151
  if (value.urlQuerySchemes !== void 0 && !Array.isArray(value.urlQuerySchemes))
54
152
  return false;
55
153
  if (value.appIntentIdentifiers !== void 0 && (!Array.isArray(value.appIntentIdentifiers) || !value.appIntentIdentifiers.every((identifier) => typeof identifier === "string")))
56
154
  return false;
155
+ if (value.backgroundTaskIdentifiers !== void 0 && (!Array.isArray(value.backgroundTaskIdentifiers) || !value.backgroundTaskIdentifiers.every(
156
+ (identifier) => typeof identifier === "string"
157
+ )))
158
+ return false;
159
+ if (value.backgroundModes !== void 0 && (!Array.isArray(value.backgroundModes) || !value.backgroundModes.every((mode) => typeof mode === "string")))
160
+ return false;
161
+ if (value.shareIntoAppGroupId !== void 0 && typeof value.shareIntoAppGroupId !== "string")
162
+ return false;
163
+ if (value.applicationDisplayName !== void 0 && typeof value.applicationDisplayName !== "string")
164
+ return false;
165
+ if (value.rootViewBackgroundColor !== void 0 && (typeof value.rootViewBackgroundColor !== "number" || !Number.isInteger(value.rootViewBackgroundColor)))
166
+ return false;
167
+ for (const orientations of [
168
+ value.supportedInterfaceOrientations,
169
+ value.ipadSupportedInterfaceOrientations
170
+ ]) {
171
+ if (orientations !== void 0 && (!Array.isArray(orientations) || !orientations.every((orientation) => typeof orientation === "string")))
172
+ return false;
173
+ }
174
+ if (value.defaultScreenOrientationMask !== void 0 && typeof value.defaultScreenOrientationMask !== "string")
175
+ return false;
57
176
  const platform = value.platform;
177
+ if (value.alternateIconNames !== void 0 && (!Array.isArray(value.alternateIconNames) || !value.alternateIconNames.every((name) => typeof name === "string")))
178
+ return false;
58
179
  if (platform !== "ios" && platform !== "android") return false;
59
180
  const applicationName = value.applicationName;
60
181
  if (applicationName !== null && nonEmptyString(applicationName) === null) return false;
@@ -74,16 +195,39 @@ function readNativeAppIdentity(value) {
74
195
  }
75
196
  return {
76
197
  applicationName: value.applicationName,
198
+ ...value.applicationDisplayName === void 0 ? {} : { applicationDisplayName: value.applicationDisplayName },
199
+ ...value.rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor: value.rootViewBackgroundColor },
77
200
  ...value.bundleName === void 0 ? {} : { bundleName: value.bundleName },
78
201
  appVersion: value.appVersion,
79
202
  buildVersion: value.buildVersion,
80
203
  bundleIdentifier: value.bundleIdentifier,
81
204
  platform: value.platform,
205
+ ...value.alternateIconNames === void 0 ? {} : { alternateIconNames: [...value.alternateIconNames] },
82
206
  ...value.permissionUsageDescriptions === void 0 ? {} : {
83
207
  permissionUsageDescriptions: { ...value.permissionUsageDescriptions }
84
208
  },
85
209
  ...value.appIntentIdentifiers === void 0 ? {} : { appIntentIdentifiers: [...value.appIntentIdentifiers] },
86
- ...value.urlQuerySchemes === void 0 ? {} : { urlQuerySchemes: [...value.urlQuerySchemes] }
210
+ ...value.backgroundTaskIdentifiers === void 0 ? {} : { backgroundTaskIdentifiers: [...value.backgroundTaskIdentifiers] },
211
+ ...value.supportedInterfaceOrientations === void 0 ? {} : {
212
+ supportedInterfaceOrientations: [...value.supportedInterfaceOrientations]
213
+ },
214
+ ...value.ipadSupportedInterfaceOrientations === void 0 ? {} : {
215
+ ipadSupportedInterfaceOrientations: [
216
+ ...value.ipadSupportedInterfaceOrientations
217
+ ]
218
+ },
219
+ ...value.defaultScreenOrientationMask === void 0 ? {} : { defaultScreenOrientationMask: value.defaultScreenOrientationMask },
220
+ ...value.backgroundModes === void 0 ? {} : { backgroundModes: [...value.backgroundModes] },
221
+ ...value.shareIntoAppGroupId === void 0 ? {} : { shareIntoAppGroupId: value.shareIntoAppGroupId },
222
+ ...value.urlQuerySchemes === void 0 ? {} : { urlQuerySchemes: [...value.urlQuerySchemes] },
223
+ ...value.oneUpdates === void 0 ? {} : {
224
+ oneUpdates: {
225
+ enabled: value.oneUpdates.enabled,
226
+ url: value.oneUpdates.url,
227
+ runtimeVersion: value.oneUpdates.runtimeVersion,
228
+ embeddedManifestJson: value.oneUpdates.embeddedManifestJson
229
+ }
230
+ }
87
231
  };
88
232
  }
89
233
  function createNativeAppIdentityHeader(identity) {
@@ -111,7 +255,10 @@ function readNativeAppIdentityFromBundle(source, header) {
111
255
  }
112
256
  const identity = readNativeAppIdentity(value);
113
257
  if (!identity) throw new Error("native app identity response header is malformed");
114
- if (footer && !equalIdentityValues(identity, readNativeAppIdentity(footer))) {
258
+ const footerIdentity = footer ? readNativeAppIdentity(footer) : null;
259
+ const headerBase = { ...identity, oneUpdates: void 0 };
260
+ const footerBase = footerIdentity && { ...footerIdentity, oneUpdates: void 0 };
261
+ if (footerIdentity && !equalIdentityValues(headerBase, footerBase)) {
115
262
  throw new Error("native app identity response header conflicts with bundle footer");
116
263
  }
117
264
  return identity;
@@ -126,7 +273,9 @@ function getAppliedNativeAppIdentity() {
126
273
  return isNativeAppIdentity(value) ? value : null;
127
274
  }
128
275
  function createNativeAppIdentityFooter(identity) {
129
- const payload = JSON.stringify(identity).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
276
+ const footerIdentity = { ...identity };
277
+ delete footerIdentity.oneUpdates;
278
+ const payload = JSON.stringify(footerIdentity).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/<\//g, "<\\/");
130
279
  return `
131
280
  ${NATIVE_APP_IDENTITY_PREFIX}${payload};`;
132
281
  }
@@ -151,6 +300,9 @@ function readNativeAppIdentityFooter(source) {
151
300
  if (!isNativeAppIdentity(parsed)) {
152
301
  throw new Error("native app identity footer is malformed");
153
302
  }
303
+ if (parsed.oneUpdates !== void 0) {
304
+ throw new Error("native app identity footer cannot contain one updates receipt");
305
+ }
154
306
  return parsed;
155
307
  }
156
308
  function detachNativeAppIdentityFooter(source) {
@@ -254,30 +406,119 @@ function appTargetReleaseSettings(pbxproj, targetName, infoPlistRelativePath) {
254
406
  (candidate) => candidate.name === "Release" && named(candidate.settings)
255
407
  )?.settings ?? null;
256
408
  }
257
- function nativeAppIdentityFromIos(files, parseInfoPlist) {
409
+ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) {
258
410
  const pbxprojPath = Object.keys(files).find(
259
411
  (path) => /(?:^|\/)ios\/[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
260
- );
412
+ ) ?? Object.keys(files).find(
413
+ (path) => /(?:^|\/)[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
414
+ ) ?? Object.keys(files).find((path) => /(?:^|\/)project\.pbxproj$/.test(path));
261
415
  if (!pbxprojPath) return null;
262
416
  const pbxproj = files[pbxprojPath];
263
- const applicationTargets = new Set(
264
- [
265
- ...pbxproj.matchAll(
266
- /isa = PBXNativeTarget;[^}]*?name = "?([^";]+)"?;[^}]*?productType = "com\.apple\.product-type\.application";/g
267
- )
268
- ].map((match) => match[1])
417
+ let objects = {};
418
+ try {
419
+ const parsed = parseOpenStepPlist(pbxproj);
420
+ if (isRecord(parsed)) {
421
+ objects = isRecord(parsed.objects) ? parsed.objects : parsed;
422
+ }
423
+ } catch {
424
+ }
425
+ const targets = [];
426
+ for (const [id, obj] of Object.entries(objects)) {
427
+ if (isRecord(obj) && obj.isa === "PBXNativeTarget" && typeof obj.name === "string") {
428
+ targets.push({
429
+ id,
430
+ name: obj.name,
431
+ productType: typeof obj.productType === "string" ? obj.productType : void 0,
432
+ buildConfigurationList: typeof obj.buildConfigurationList === "string" ? obj.buildConfigurationList : void 0
433
+ });
434
+ }
435
+ }
436
+ const applicationTargetNames = new Set(
437
+ targets.filter((t) => t.productType === "com.apple.product-type.application").map((t) => t.name)
269
438
  );
270
- const appDelegatePattern = /(?:^|\/)ios\/([^/]+)\/AppDelegate\.(?:swift|mm|m)$/;
271
- const targetName = Object.keys(files).filter((path) => !path.includes("/Pods/")).map((path) => path.match(appDelegatePattern)?.[1]).find((name) => name !== void 0 && applicationTargets.has(name)) ?? null;
272
- if (!targetName) return null;
273
- const plist = files[`ios/${targetName}/Info.plist`];
439
+ if (applicationTargetNames.size === 0) {
440
+ for (const match of pbxproj.matchAll(
441
+ /isa = PBXNativeTarget;[^}]*?name = "?([^";]+)"?;[^}]*?productType = "com\.apple\.product-type\.application";/g
442
+ )) {
443
+ applicationTargetNames.add(match[1]);
444
+ }
445
+ }
446
+ let targetName = null;
447
+ if (iosTarget) {
448
+ if (applicationTargetNames.has(iosTarget)) {
449
+ targetName = iosTarget;
450
+ } else {
451
+ return null;
452
+ }
453
+ } else if (applicationTargetNames.size === 1) {
454
+ targetName = [...applicationTargetNames][0];
455
+ } else if (applicationTargetNames.size > 1) {
456
+ const appDelegatePattern = /(?:^|\/)ios\/([^/]+)\/AppDelegate\.(?:swift|mm|m)$/;
457
+ const delegateTargets = Object.keys(files).filter((path) => !path.includes("/Pods/")).map((path) => path.match(appDelegatePattern)?.[1]).filter(
458
+ (name) => typeof name === "string" && applicationTargetNames.has(name)
459
+ );
460
+ if (delegateTargets.length === 1) {
461
+ targetName = delegateTargets[0];
462
+ } else {
463
+ return null;
464
+ }
465
+ } else {
466
+ return null;
467
+ }
468
+ const selectedTarget = targets.find((t) => t.name === targetName);
469
+ const settings = {
470
+ TARGET_NAME: targetName,
471
+ PRODUCT_NAME: targetName
472
+ };
473
+ for (const obj of Object.values(objects)) {
474
+ if (isRecord(obj) && obj.isa === "PBXProject" && typeof obj.buildConfigurationList === "string") {
475
+ const listObj = objects[obj.buildConfigurationList];
476
+ if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
477
+ for (const configId of listObj.buildConfigurations) {
478
+ if (typeof configId === "string") {
479
+ const configObj = objects[configId];
480
+ if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
481
+ for (const [k, v] of Object.entries(configObj.buildSettings)) {
482
+ if (typeof v === "string") settings[k] = v;
483
+ }
484
+ }
485
+ }
486
+ }
487
+ }
488
+ }
489
+ }
490
+ if (selectedTarget?.buildConfigurationList) {
491
+ const listObj = objects[selectedTarget.buildConfigurationList];
492
+ if (isRecord(listObj) && Array.isArray(listObj.buildConfigurations)) {
493
+ for (const configId of listObj.buildConfigurations) {
494
+ if (typeof configId === "string") {
495
+ const configObj = objects[configId];
496
+ if (isRecord(configObj) && configObj.name === "Release" && isRecord(configObj.buildSettings)) {
497
+ for (const [k, v] of Object.entries(configObj.buildSettings)) {
498
+ if (typeof v === "string") settings[k] = v;
499
+ }
500
+ }
501
+ }
502
+ }
503
+ }
504
+ } else {
505
+ const legacy = appTargetReleaseSettings(
506
+ pbxproj,
507
+ targetName,
508
+ `${targetName}/Info.plist`
509
+ );
510
+ if (legacy) Object.assign(settings, legacy);
511
+ }
512
+ let plist;
513
+ const infoPlistPath = settings.INFOPLIST_FILE;
514
+ if (infoPlistPath) {
515
+ const normalized = infoPlistPath.replace(/^"|"$/g, "");
516
+ plist = files[`ios/${normalized}`] ?? files[normalized] ?? Object.entries(files).find(([k]) => k.endsWith(`/${normalized}`))?.[1];
517
+ }
518
+ if (!plist) {
519
+ plist = files[`ios/${targetName}/Info.plist`] ?? files[`${targetName}/Info.plist`] ?? Object.entries(files).find(([k]) => k.endsWith(`/${targetName}/Info.plist`))?.[1];
520
+ }
274
521
  if (!plist) return null;
275
- const settings = appTargetReleaseSettings(
276
- pbxproj,
277
- targetName,
278
- `${targetName}/Info.plist`
279
- );
280
- if (!settings) return null;
281
522
  const bundleIdentifier = identityFieldFrom(
282
523
  settings,
283
524
  plistString(plist, "CFBundleIdentifier"),
@@ -304,8 +545,57 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
304
545
  const applicationName = identityFieldFrom(settings, plistString(plist, "CFBundleDisplayName"), void 0) ?? bundleName;
305
546
  const dictionary = parseInfoPlist(plist);
306
547
  if (!isRecord(dictionary)) throw new Error("native app Info.plist is not a dictionary");
548
+ const declaredDisplayName = dictionary.CFBundleDisplayName;
549
+ const applicationDisplayName = typeof declaredDisplayName === "string" ? resolveBuildSetting(declaredDisplayName, settings) : void 0;
550
+ if (applicationDisplayName === null)
551
+ throw new Error("native app Info.plist CFBundleDisplayName is unresolved");
552
+ const declaredBackgroundColor = dictionary.RCTRootViewBackgroundColor;
553
+ const rootViewBackgroundColor = typeof declaredBackgroundColor === "number" && Number.isInteger(declaredBackgroundColor) ? declaredBackgroundColor : void 0;
554
+ const icons = dictionary.CFBundleIcons;
555
+ const alternates = isRecord(icons) ? icons.CFBundleAlternateIcons : void 0;
556
+ const alternateIconNames = /* @__PURE__ */ new Set();
557
+ for (const name of isRecord(alternates) ? Object.keys(alternates) : []) {
558
+ const resolved = resolveBuildSetting(name, settings);
559
+ if (resolved === null) throw new Error("native alternate icon name is unresolved");
560
+ alternateIconNames.add(resolved);
561
+ }
562
+ const alternateSetting = resolveBuildSetting(
563
+ settings.ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES ?? "",
564
+ settings
565
+ );
566
+ if (alternateSetting === null)
567
+ throw new Error("native alternate icon setting is unresolved");
568
+ for (const match of alternateSetting.replace(/\\"/g, '"').matchAll(/"([^"]*)"|([^\s(),]+)/g)) {
569
+ alternateIconNames.add(match[1] ?? match[2]);
570
+ }
307
571
  const intentIds = dictionary.OneAppIntentIdentifiers;
308
572
  const appIntentIdentifiers = Array.isArray(intentIds) && intentIds.every((value) => typeof value === "string") ? intentIds.map((value) => resolveBuildSetting(value, settings)) : [];
573
+ const backgroundIds = dictionary.BGTaskSchedulerPermittedIdentifiers;
574
+ const backgroundTaskIdentifiers = Array.isArray(backgroundIds) && backgroundIds.every((value) => typeof value === "string") ? backgroundIds.map((value) => resolveBuildSetting(value, settings)) : [];
575
+ const declaredModes = dictionary.UIBackgroundModes;
576
+ const backgroundModes = Array.isArray(declaredModes) && declaredModes.every((value) => typeof value === "string") ? declaredModes.map((value) => resolveBuildSetting(value, settings)) : [];
577
+ const screenOrientationLists = [
578
+ "UISupportedInterfaceOrientations",
579
+ "UISupportedInterfaceOrientations~ipad"
580
+ ].map((key) => {
581
+ const list = dictionary[key];
582
+ if (!Array.isArray(list) || !list.every((value) => typeof value === "string"))
583
+ return [];
584
+ return list.map((value) => {
585
+ const resolved = resolveBuildSetting(value, settings);
586
+ if (resolved === null) throw new Error(`native app Info.plist ${key} is unresolved`);
587
+ return resolved;
588
+ });
589
+ });
590
+ const [supportedInterfaceOrientations, ipadSupportedInterfaceOrientations] = screenOrientationLists;
591
+ const declaredDefaultOrientationMask = dictionary.EXDefaultScreenOrientationMask;
592
+ const defaultScreenOrientationMask = typeof declaredDefaultOrientationMask === "string" ? resolveBuildSetting(declaredDefaultOrientationMask, settings) : void 0;
593
+ if (defaultScreenOrientationMask === null)
594
+ throw new Error("native app Info.plist EXDefaultScreenOrientationMask is unresolved");
595
+ const declaredShareGroup = dictionary.ExpoShareIntoAppGroupId;
596
+ const shareIntoAppGroupId = typeof declaredShareGroup === "string" ? resolveBuildSetting(declaredShareGroup, settings) : void 0;
597
+ if (shareIntoAppGroupId === null)
598
+ throw new Error("native app Info.plist ExpoShareIntoAppGroupId is unresolved");
309
599
  const querySchemes = dictionary.LSApplicationQueriesSchemes;
310
600
  if (querySchemes !== void 0 && !Array.isArray(querySchemes)) {
311
601
  throw new Error("native app Info.plist LSApplicationQueriesSchemes is not an array");
@@ -319,7 +609,8 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
319
609
  });
320
610
  const permissionUsageDescriptions = {};
321
611
  for (const [key, value] of Object.entries(dictionary)) {
322
- if (!/^NS.*UsageDescription$/.test(key)) continue;
612
+ if (!/^NS.*UsageDescription$/.test(key) && key !== "NSLocationTemporaryUsageDescriptionDictionary")
613
+ continue;
323
614
  if (typeof value !== "string") {
324
615
  permissionUsageDescriptions[key] = value;
325
616
  continue;
@@ -340,21 +631,30 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
340
631
  }
341
632
  return {
342
633
  applicationName,
634
+ ...applicationDisplayName === void 0 ? {} : { applicationDisplayName },
635
+ ...rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor },
343
636
  bundleName,
344
637
  appVersion,
345
638
  buildVersion,
346
639
  bundleIdentifier,
347
640
  platform: "ios",
641
+ supportedInterfaceOrientations,
642
+ ipadSupportedInterfaceOrientations,
643
+ ...defaultScreenOrientationMask === void 0 ? {} : { defaultScreenOrientationMask },
644
+ alternateIconNames: [...alternateIconNames],
348
645
  permissionUsageDescriptions,
349
646
  urlQuerySchemes,
647
+ ...shareIntoAppGroupId === void 0 ? {} : { shareIntoAppGroupId },
648
+ backgroundTaskIdentifiers: backgroundTaskIdentifiers.every((value) => value !== null) ? backgroundTaskIdentifiers : [],
649
+ backgroundModes: backgroundModes.every((value) => value !== null) ? backgroundModes : [],
350
650
  appIntentIdentifiers: appIntentIdentifiers.every((value) => value !== null) ? appIntentIdentifiers : []
351
651
  };
352
652
  }
353
653
  function canExtractNativeAppIdentity(platform) {
354
654
  return platform === "ios";
355
655
  }
356
- function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist) {
357
- return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist) : null;
656
+ function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist, iosTarget) {
657
+ return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) : null;
358
658
  }
359
659
  // Annotate the CommonJS export names for ESM import in node:
360
660
  0 && (module.exports = {