peachsim 0.1.940 → 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 +981 -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 +670 -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 +304 -25
  133. package/dist-lib/native-app-identity.mjs +302 -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 +367 -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.940 | (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,12 +142,37 @@ 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;
58
177
  if (value.alternateIconNames !== void 0 && (!Array.isArray(value.alternateIconNames) || !value.alternateIconNames.every((name) => typeof name === "string")))
59
178
  return false;
@@ -76,6 +195,8 @@ function readNativeAppIdentity(value) {
76
195
  }
77
196
  return {
78
197
  applicationName: value.applicationName,
198
+ ...value.applicationDisplayName === void 0 ? {} : { applicationDisplayName: value.applicationDisplayName },
199
+ ...value.rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor: value.rootViewBackgroundColor },
79
200
  ...value.bundleName === void 0 ? {} : { bundleName: value.bundleName },
80
201
  appVersion: value.appVersion,
81
202
  buildVersion: value.buildVersion,
@@ -86,7 +207,27 @@ function readNativeAppIdentity(value) {
86
207
  permissionUsageDescriptions: { ...value.permissionUsageDescriptions }
87
208
  },
88
209
  ...value.appIntentIdentifiers === void 0 ? {} : { appIntentIdentifiers: [...value.appIntentIdentifiers] },
89
- ...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
+ }
90
231
  };
91
232
  }
92
233
  function createNativeAppIdentityHeader(identity) {
@@ -114,7 +255,10 @@ function readNativeAppIdentityFromBundle(source, header) {
114
255
  }
115
256
  const identity = readNativeAppIdentity(value);
116
257
  if (!identity) throw new Error("native app identity response header is malformed");
117
- 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)) {
118
262
  throw new Error("native app identity response header conflicts with bundle footer");
119
263
  }
120
264
  return identity;
@@ -129,7 +273,9 @@ function getAppliedNativeAppIdentity() {
129
273
  return isNativeAppIdentity(value) ? value : null;
130
274
  }
131
275
  function createNativeAppIdentityFooter(identity) {
132
- 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, "<\\/");
133
279
  return `
134
280
  ${NATIVE_APP_IDENTITY_PREFIX}${payload};`;
135
281
  }
@@ -154,6 +300,9 @@ function readNativeAppIdentityFooter(source) {
154
300
  if (!isNativeAppIdentity(parsed)) {
155
301
  throw new Error("native app identity footer is malformed");
156
302
  }
303
+ if (parsed.oneUpdates !== void 0) {
304
+ throw new Error("native app identity footer cannot contain one updates receipt");
305
+ }
157
306
  return parsed;
158
307
  }
159
308
  function detachNativeAppIdentityFooter(source) {
@@ -257,30 +406,119 @@ function appTargetReleaseSettings(pbxproj, targetName, infoPlistRelativePath) {
257
406
  (candidate) => candidate.name === "Release" && named(candidate.settings)
258
407
  )?.settings ?? null;
259
408
  }
260
- function nativeAppIdentityFromIos(files, parseInfoPlist) {
409
+ function nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) {
261
410
  const pbxprojPath = Object.keys(files).find(
262
411
  (path) => /(?:^|\/)ios\/[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
263
- );
412
+ ) ?? Object.keys(files).find(
413
+ (path) => /(?:^|\/)[^/]+\.xcodeproj\/project\.pbxproj$/.test(path)
414
+ ) ?? Object.keys(files).find((path) => /(?:^|\/)project\.pbxproj$/.test(path));
264
415
  if (!pbxprojPath) return null;
265
416
  const pbxproj = files[pbxprojPath];
266
- const applicationTargets = new Set(
267
- [
268
- ...pbxproj.matchAll(
269
- /isa = PBXNativeTarget;[^}]*?name = "?([^";]+)"?;[^}]*?productType = "com\.apple\.product-type\.application";/g
270
- )
271
- ].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)
272
438
  );
273
- const appDelegatePattern = /(?:^|\/)ios\/([^/]+)\/AppDelegate\.(?:swift|mm|m)$/;
274
- 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;
275
- if (!targetName) return null;
276
- 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
+ }
277
521
  if (!plist) return null;
278
- const settings = appTargetReleaseSettings(
279
- pbxproj,
280
- targetName,
281
- `${targetName}/Info.plist`
282
- );
283
- if (!settings) return null;
284
522
  const bundleIdentifier = identityFieldFrom(
285
523
  settings,
286
524
  plistString(plist, "CFBundleIdentifier"),
@@ -307,6 +545,12 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
307
545
  const applicationName = identityFieldFrom(settings, plistString(plist, "CFBundleDisplayName"), void 0) ?? bundleName;
308
546
  const dictionary = parseInfoPlist(plist);
309
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;
310
554
  const icons = dictionary.CFBundleIcons;
311
555
  const alternates = isRecord(icons) ? icons.CFBundleAlternateIcons : void 0;
312
556
  const alternateIconNames = /* @__PURE__ */ new Set();
@@ -326,6 +570,32 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
326
570
  }
327
571
  const intentIds = dictionary.OneAppIntentIdentifiers;
328
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");
329
599
  const querySchemes = dictionary.LSApplicationQueriesSchemes;
330
600
  if (querySchemes !== void 0 && !Array.isArray(querySchemes)) {
331
601
  throw new Error("native app Info.plist LSApplicationQueriesSchemes is not an array");
@@ -339,7 +609,8 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
339
609
  });
340
610
  const permissionUsageDescriptions = {};
341
611
  for (const [key, value] of Object.entries(dictionary)) {
342
- if (!/^NS.*UsageDescription$/.test(key)) continue;
612
+ if (!/^NS.*UsageDescription$/.test(key) && key !== "NSLocationTemporaryUsageDescriptionDictionary")
613
+ continue;
343
614
  if (typeof value !== "string") {
344
615
  permissionUsageDescriptions[key] = value;
345
616
  continue;
@@ -360,22 +631,30 @@ function nativeAppIdentityFromIos(files, parseInfoPlist) {
360
631
  }
361
632
  return {
362
633
  applicationName,
634
+ ...applicationDisplayName === void 0 ? {} : { applicationDisplayName },
635
+ ...rootViewBackgroundColor === void 0 ? {} : { rootViewBackgroundColor },
363
636
  bundleName,
364
637
  appVersion,
365
638
  buildVersion,
366
639
  bundleIdentifier,
367
640
  platform: "ios",
641
+ supportedInterfaceOrientations,
642
+ ipadSupportedInterfaceOrientations,
643
+ ...defaultScreenOrientationMask === void 0 ? {} : { defaultScreenOrientationMask },
368
644
  alternateIconNames: [...alternateIconNames],
369
645
  permissionUsageDescriptions,
370
646
  urlQuerySchemes,
647
+ ...shareIntoAppGroupId === void 0 ? {} : { shareIntoAppGroupId },
648
+ backgroundTaskIdentifiers: backgroundTaskIdentifiers.every((value) => value !== null) ? backgroundTaskIdentifiers : [],
649
+ backgroundModes: backgroundModes.every((value) => value !== null) ? backgroundModes : [],
371
650
  appIntentIdentifiers: appIntentIdentifiers.every((value) => value !== null) ? appIntentIdentifiers : []
372
651
  };
373
652
  }
374
653
  function canExtractNativeAppIdentity(platform) {
375
654
  return platform === "ios";
376
655
  }
377
- function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist) {
378
- return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist) : null;
656
+ function extractNativeAppIdentityFromFiles(files, platform, parseInfoPlist, iosTarget) {
657
+ return canExtractNativeAppIdentity(platform) ? nativeAppIdentityFromIos(files, parseInfoPlist, iosTarget) : null;
379
658
  }
380
659
  // Annotate the CommonJS export names for ESM import in node:
381
660
  0 && (module.exports = {