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.
- 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 +999 -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 +688 -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 +325 -25
- package/dist-lib/native-app-identity.mjs +323 -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 +398 -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,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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
)
|
|
268
|
-
|
|
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
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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))
|
|
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 = {
|