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.
- package/README.md +28 -22
- package/cli/app-catalog.ts +29 -14
- package/cli/app-fonts.ts +5 -3
- package/cli/bridge-flow-runner.ts +40 -29
- package/cli/cloud-client.ts +57 -21
- package/cli/cloud-test-tunnel.ts +12 -18
- package/cli/commands/agent.ts +1 -1
- package/cli/commands/app-fonts.ts +3 -3
- package/cli/commands/assert.ts +8 -8
- package/cli/commands/auth.ts +8 -3
- package/cli/commands/box/bundle-plane.ts +13 -1
- package/cli/commands/box.ts +16 -5
- package/cli/commands/compat.ts +1 -1
- package/cli/commands/config.ts +2 -2
- package/cli/commands/control.ts +125 -71
- package/cli/commands/cpu-profile.ts +45 -1
- package/cli/commands/daemon.ts +131 -33
- package/cli/commands/debug.ts +24 -17
- package/cli/commands/desktop.ts +7 -1
- package/cli/commands/detect.ts +101 -0
- package/cli/commands/detox.ts +6 -6
- package/cli/commands/device.ts +12 -12
- package/cli/commands/electron.ts +32 -14
- package/cli/commands/flow.ts +49 -41
- package/cli/commands/guest-host.ts +39 -1
- package/cli/commands/inspect/core.ts +14 -8
- package/cli/commands/inspect/list.ts +1 -1
- package/cli/commands/inspect/settle.ts +5 -3
- package/cli/commands/inspect/settling.ts +229 -44
- package/cli/commands/inspect/wait-idle.ts +3 -2
- package/cli/commands/inspect.ts +105 -93
- package/cli/commands/install-cli.ts +36 -15
- package/cli/commands/install-desktop.ts +68 -195
- package/cli/commands/kotlin.ts +6 -5
- package/cli/commands/login.ts +5 -5
- package/cli/commands/maestro-compare.ts +554 -0
- package/cli/commands/maestro-generate.ts +6 -3
- package/cli/commands/maestro.ts +22 -0
- package/cli/commands/mode.ts +2 -2
- package/cli/commands/no-bridge-hint.ts +6 -2
- package/cli/commands/platform.ts +35 -6
- package/cli/commands/preview.ts +6 -0
- package/cli/commands/project-report.ts +10 -12
- package/cli/commands/record.ts +37 -37
- package/cli/commands/runtime.ts +9 -9
- package/cli/commands/screenshot-layers.ts +4 -4
- package/cli/commands/screenshot-mode.ts +2 -2
- package/cli/commands/screenshot.ts +8 -8
- package/cli/commands/screenshots-capture.ts +2 -2
- package/cli/commands/serve.ts +9 -12
- package/cli/commands/setup.ts +29 -14
- package/cli/commands/shell-boolean-mode.ts +2 -2
- package/cli/commands/show-touches-mode.ts +2 -2
- package/cli/commands/skills.ts +11 -11
- package/cli/commands/swift.ts +29 -11
- package/cli/commands/telemetry.ts +2 -2
- package/cli/commands/test.ts +5 -0
- package/cli/commands/three-mode.ts +3 -3
- package/cli/commands/timeline.ts +4 -4
- package/cli/commands/upgrade.ts +2 -2
- package/cli/commands/upload.ts +15 -15
- package/cli/commands/what-happened.ts +2 -2
- package/cli/current-sim.ts +6 -3
- package/cli/desktop-companion.ts +55 -149
- package/cli/dev-build-freshness.ts +2 -2
- package/cli/drivers/desktop.ts +17 -9
- package/cli/drivers/electron.ts +1 -2
- package/cli/drivers/playwright-sim-host.ts +11 -2
- package/cli/drivers/playwright.ts +35 -2
- package/cli/drivers/types.ts +8 -0
- package/cli/maestro-compare.ts +670 -0
- package/cli/outbound-endpoints.ts +46 -8
- package/cli/recording-access.ts +6 -6
- package/cli/run-registry.ts +1 -1
- package/cli/runtime-compat.ts +5 -1
- package/cli/send-to-box.ts +3 -3
- package/cli/shell-init.ts +2 -1
- package/cli/ws-bridge.ts +9 -5
- package/detox/element-types.ts +1 -0
- package/detox/gestures.ts +3 -3
- package/detox/index.ts +67 -38
- package/detox/navigation-lifecycle.ts +9 -6
- package/detox/proof-frame.cjs +6 -4
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +42 -17
- package/dist-lib/bridge-contract-input.mjs +41 -16
- package/dist-lib/bridge-contract.cjs +1 -4
- package/dist-lib/bridge-contract.mjs +1 -3
- package/dist-lib/bundle-channel.cjs +2918 -550
- package/dist-lib/capture-contract.cjs +65 -24
- package/dist-lib/capture-contract.mjs +63 -24
- package/dist-lib/cloud-contract.cjs +2 -2
- package/dist-lib/cloud-contract.mjs +2 -2
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +3 -3
- package/dist-lib/cloud.mjs +3 -3
- package/dist-lib/config.cjs +15 -5
- package/dist-lib/config.mjs +154 -0
- package/dist-lib/detox/index.cjs +495 -139
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +1168 -238
- package/dist-lib/expo-swift-metadata.cjs +34 -23
- package/dist-lib/expo-swift-metadata.mjs +32 -23
- package/dist-lib/home-paths.cjs +2 -2
- package/dist-lib/host/bridge-host.cjs +2938 -654
- package/dist-lib/host/fetch-proxy-handler.cjs +14 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +7 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +5 -1
- package/dist-lib/host/replacement-module-handler.cjs +2 -2
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +981 -353
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +332 -19
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +7 -7
- package/dist-lib/metro-production-bundle.mjs +5 -5
- package/dist-lib/metro.cjs +670 -250
- package/dist-lib/native-app-identity-project.cjs +2647 -0
- package/dist-lib/native-app-identity-project.mjs +1257 -0
- package/dist-lib/native-app-identity.cjs +304 -25
- package/dist-lib/native-app-identity.mjs +302 -25
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +1 -1
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +5 -1
- package/dist-lib/react-native-host-modules.mjs +5 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +57 -32
- package/dist-lib/sdk.cjs +231 -51
- package/dist-lib/sdk.mjs +231 -51
- package/dist-lib/skills.cjs +4107 -1374
- package/dist-lib/swift-compile.cjs +290 -30
- package/dist-lib/swift-compile.mjs +290 -30
- package/dist-lib/swift-package.cjs +143 -12
- package/dist-lib/swift-package.mjs +137 -11
- package/dist-lib/swift-submit.cjs +47 -5
- package/dist-lib/swift-submit.mjs +42 -5
- package/dist-lib/swift-toolchain.cjs +7 -2
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +1392 -458
- package/dist-lib/vite.cjs +13 -17
- package/dist-lib/worklet-executable.cjs +248 -33
- package/dist-lib/worklet-executable.mjs +248 -33
- package/install.sh +10 -1
- package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Resources.kt +9 -9
- package/kotlin/AndroidViewSources/android/graphics/Canvas.kt +20 -0
- package/kotlin/AndroidViewSources/android/view/View.kt +211 -0
- package/kotlin/AndroidViewSources/android/widget/FrameLayout.kt +61 -0
- package/kotlin/AndroidViewSources/android/widget/LinearLayout.kt +49 -0
- package/kotlin/AppSources/android/view/Window.kt +36 -0
- package/kotlin/AppSources/android/view/WindowInsets.kt +9 -0
- package/kotlin/AppSources/android/view/WindowInsetsController.kt +5 -0
- package/kotlin/AppSources/android/window/OnBackInvokedDispatcher.kt +48 -0
- package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +20 -5
- package/kotlin/AppSources/androidx/compose/foundation/layout/WindowInsets.kt +15 -0
- package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +2 -1
- package/kotlin/AppSources/dev/peach/app/PeachApp.kt +42 -50
- package/kotlin/ComposeSources/PeachComposeHost.kt +200 -84
- package/kotlin/ExpoComposeSources/PeachAndroidView.kt +87 -0
- package/kotlin/ExpoComposeSources/PeachExpoViewMount.kt +24 -0
- package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +28 -0
- package/kotlin/ExpoComposeSources/expo/modules/kotlin/views/ExpoComposeView.kt +70 -0
- package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +513 -0
- package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +173 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/AppContext.kt +20 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/Promise.kt +19 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +198 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/exception/CodedException.kt +126 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/functions/Functions.kt +132 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/jni/JavaScriptTypedArray.kt +81 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +98 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +236 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/records/Record.kt +12 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/runtime/Runtime.kt +9 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObject.kt +50 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +57 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedRef.kt +19 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt +158 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/GenericTypedArray.kt +8 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArray.kt +29 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArrayIterator.kt +9 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/AnyType.kt +155 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/Either.kt +91 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/types/Enumerable.kt +6 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +54 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +23 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +71 -0
- package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +35 -0
- package/kotlin/README.md +13 -3
- package/kotlin/Sources/android/os/Build.kt +17 -0
- package/kotlin/Sources/android/os/Handler.kt +35 -0
- package/kotlin/Sources/android/os/Looper.kt +17 -0
- package/kotlin/Sources/android/os/MessageQueue.kt +56 -0
- package/kotlin/Sources/android/os/SystemClock.kt +14 -0
- package/kotlin/Sources/android/util/Log.kt +64 -0
- package/kotlin/Sources/java/security/MessageDigest.kt +114 -0
- package/kotlin/Sources/kotlin/text/StringFormat.kt +9 -0
- package/kotlin/Sources/org/json/JSON.kt +44 -0
- package/kotlin/fixtures/counter/Counter.d.kt.ts +1 -0
- package/kotlin/fixtures/counter/Counter.kt +10 -3
- package/kotlin/fixtures/counter/CounterApp.native.tsx +1 -1
- package/kotlin/fixtures/counter/vite.config.ts +2 -2
- package/kotlin/fixtures/headless-counter/Headless.kt +7 -6
- package/kotlin/fixtures/import-animation/Animation.d.kt.ts +7 -0
- package/kotlin/fixtures/import-animation/Animation.kt +80 -0
- package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +13 -0
- package/kotlin/fixtures/import-animation/README.md +24 -0
- package/kotlin/fixtures/import-animation/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-animation/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-animation/app/routes.d.ts +18 -0
- package/kotlin/fixtures/import-animation/package.json +23 -0
- package/kotlin/fixtures/import-animation/tsconfig.json +20 -0
- package/kotlin/fixtures/import-animation/vite.config.ts +20 -0
- package/kotlin/fixtures/import-editor/Editor.d.kt.ts +7 -0
- package/kotlin/fixtures/import-editor/Editor.kt +59 -0
- package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +23 -0
- package/kotlin/fixtures/import-editor/README.md +27 -0
- package/kotlin/fixtures/import-editor/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-editor/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-editor/package.json +23 -0
- package/kotlin/fixtures/import-editor/tsconfig.json +20 -0
- package/kotlin/fixtures/import-editor/vite.config.ts +20 -0
- package/kotlin/fixtures/import-effects/Effects.d.kt.ts +7 -0
- package/kotlin/fixtures/import-effects/Effects.kt +87 -0
- package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +13 -0
- package/kotlin/fixtures/import-effects/README.md +19 -0
- package/kotlin/fixtures/import-effects/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-effects/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-effects/package.json +23 -0
- package/kotlin/fixtures/import-effects/tsconfig.json +20 -0
- package/kotlin/fixtures/import-effects/vite.config.ts +20 -0
- package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +13 -0
- package/kotlin/fixtures/import-layout/Layout.d.kt.ts +7 -0
- package/kotlin/fixtures/import-layout/Layout.kt +72 -0
- package/kotlin/fixtures/import-layout/README.md +24 -0
- package/kotlin/fixtures/import-layout/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-layout/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-layout/package.json +23 -0
- package/kotlin/fixtures/import-layout/tsconfig.json +20 -0
- package/kotlin/fixtures/import-layout/vite.config.ts +20 -0
- package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +18 -0
- package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +7 -0
- package/kotlin/fixtures/import-navigation/Navigation.kt +104 -0
- package/kotlin/fixtures/import-navigation/README.md +31 -0
- package/kotlin/fixtures/import-navigation/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-navigation/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-navigation/package.json +23 -0
- package/kotlin/fixtures/import-navigation/tsconfig.json +20 -0
- package/kotlin/fixtures/import-navigation/vite.config.ts +20 -0
- package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +29 -0
- package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +7 -0
- package/kotlin/fixtures/import-overlays/Overlays.kt +93 -0
- package/kotlin/fixtures/import-overlays/README.md +34 -0
- package/kotlin/fixtures/import-overlays/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-overlays/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-overlays/package.json +23 -0
- package/kotlin/fixtures/import-overlays/tsconfig.json +20 -0
- package/kotlin/fixtures/import-overlays/vite.config.ts +20 -0
- package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +13 -0
- package/kotlin/fixtures/import-scroll/README.md +23 -0
- package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +7 -0
- package/kotlin/fixtures/import-scroll/Scroll.kt +91 -0
- package/kotlin/fixtures/import-scroll/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-scroll/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-scroll/package.json +23 -0
- package/kotlin/fixtures/import-scroll/tsconfig.json +20 -0
- package/kotlin/fixtures/import-scroll/vite.config.ts +20 -0
- package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +44 -0
- package/kotlin/fixtures/import-selection/README.md +32 -0
- package/kotlin/fixtures/import-selection/Selection.d.kt.ts +8 -0
- package/kotlin/fixtures/import-selection/Selection.kt +78 -0
- package/kotlin/fixtures/import-selection/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-selection/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-selection/package.json +23 -0
- package/kotlin/fixtures/import-selection/tsconfig.json +20 -0
- package/kotlin/fixtures/import-selection/vite.config.ts +20 -0
- package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +13 -0
- package/kotlin/fixtures/import-surfaces/README.md +22 -0
- package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +7 -0
- package/kotlin/fixtures/import-surfaces/Surfaces.kt +64 -0
- package/kotlin/fixtures/import-surfaces/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-surfaces/package.json +23 -0
- package/kotlin/fixtures/import-surfaces/tsconfig.json +20 -0
- package/kotlin/fixtures/import-surfaces/vite.config.ts +20 -0
- package/kotlin/fixtures/import-values/ImportValues.native.tsx +35 -0
- package/kotlin/fixtures/import-values/README.md +23 -0
- package/kotlin/fixtures/import-values/Values.d.kt.ts +11 -0
- package/kotlin/fixtures/import-values/Values.kt +66 -0
- package/kotlin/fixtures/import-values/app/_layout.tsx +4 -0
- package/kotlin/fixtures/import-values/app/index+spa.tsx +1 -0
- package/kotlin/fixtures/import-values/package.json +23 -0
- package/kotlin/fixtures/import-values/tsconfig.json +20 -0
- package/kotlin/fixtures/import-values/vite.config.ts +20 -0
- package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +38 -0
- package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +36 -0
- package/kotlin/fixtures/kotlin-app-variants/Ime.kt +3 -1
- package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +50 -0
- package/kotlin/fork/NOTICE +6 -1
- package/kotlin/fork/README.md +15 -7
- package/kotlin/fork/build.sh +2 -0
- package/kotlin/fork/compose-worker-globals.patch +186 -4
- package/kotlin/fork/fork.json +2 -2
- package/kotlin/fork/skiko-worker-clock.patch +12 -0
- package/kotlin/toolchain.json +12 -12
- package/kotlin/tools/expo-types.main.kts +115 -0
- package/package.json +17 -23
- package/scripts/dev-server-scanner.ts +92 -66
- package/skills/contrast/SKILL.md +2 -2
- package/skills/peach-debug/SKILL.md +1 -1
- package/skills/peach-perf/SKILL.md +1 -1
- package/skills/peach-setup/SKILL.md +2 -1
- package/skills/peach-test/SKILL.md +8 -0
- package/src/assetCatalogContract.ts +43 -1
- package/src/bridge-contract-input.ts +46 -19
- package/src/bridge-contract.ts +0 -1
- package/src/bundle-channel.mjs +197 -84
- package/src/bundleGlobalFooter.ts +38 -0
- package/src/capture-contract.ts +107 -33
- package/src/cloud-contract.ts +5 -1
- package/src/cloud.ts +5 -2
- package/src/config.ts +22 -3
- package/src/configured-bundle-producer.ts +1 -1
- package/src/desktop-host-delivery.ts +95 -1
- package/src/expo-kotlin-bundle.ts +29 -0
- package/src/expo-kotlin-host.ts +201 -0
- package/src/expo-swift-host.ts +96 -76
- package/src/expoKotlinContract.ts +70 -0
- package/src/expoSwiftContract.ts +4 -25
- package/src/home-paths.ts +7 -4
- package/src/host/bridge-host.ts +23 -3
- package/src/host/fetch-proxy-handler.ts +13 -0
- package/src/host/fetch-proxy-overrides.ts +11 -0
- package/src/host/replacement-module-handler.ts +5 -2
- package/src/index.ts +3 -1
- package/src/kotlin-host.ts +463 -19
- package/src/metro-plugin.ts +56 -28
- package/src/metro-production-bundle.ts +2 -2
- package/src/native-app-identity-project.ts +190 -0
- package/src/native-app-identity.ts +367 -34
- package/src/native-firebase-config.ts +69 -15
- package/src/native-seam-manifest.ts +6 -0
- package/src/one-widget-discovery.ts +2 -1
- package/src/openstep-plist.ts +107 -0
- package/src/react-native-host-modules.ts +4 -0
- package/src/runtime-assets.ts +2 -2
- package/src/sim-client.ts +2 -2
- package/src/swift-binary-modules.ts +3 -1
- package/src/swift-compile.ts +286 -38
- package/src/swift-distribution-contract.ts +4 -0
- package/src/swift-distribution.lock.json +123 -12
- package/src/swift-distribution.ts +7 -3
- package/src/swift-host.ts +298 -83
- package/src/swift-package-manifest.ts +29 -2
- package/src/swift-package.ts +180 -10
- package/src/swift-packages.ts +4 -0
- package/src/swift-standin-emit.ts +4 -1
- package/src/swift-standins.ts +274 -15
- package/src/swift-submit.ts +62 -7
- package/src/swift-toolchain.ts +6 -1
- package/src/swiftContract.ts +126 -3
- package/src/vite-plugin-one.ts +13 -16
- package/src/vite-plugin-swift.ts +4 -5
- package/src/vite-plugin.ts +360 -144
- package/src/vite.d.ts +1 -1
- package/src/worker-system-chunks.ts +221 -0
- package/src/worklet-executable.ts +348 -38
- package/src/worklets-babel.ts +1 -1
- package/src/xcode-project.ts +243 -127
- package/dist-lib/agent-identity.cjs +0 -39
- package/dist-lib/agent-sessions.cjs +0 -760
- package/dist-lib/cli-constants.cjs +0 -32
- package/dist-lib/render-mode.cjs +0 -44
- package/kotlin/AppSources/android/view/View.kt +0 -74
- package/kotlin/AppSources/android/widget/FrameLayout.kt +0 -6
- package/src/render-mode.ts +0 -15
- /package/kotlin/{AppSources → AndroidViewSources}/android/content/Context.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Configuration.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/graphics/Color.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/android/util/DisplayMetrics.kt +0 -0
- /package/kotlin/{AppSources → AndroidViewSources}/dev/peach/app/JavaFormat.kt +0 -0
- /package/kotlin/{AppSources → Sources}/java/lang/Runnable.kt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*!
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
)
|
|
271
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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))
|
|
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 = {
|