@@ -6,13 +6,22 @@ import { spawn, spawnSync } from "node:child_process";
66import * as fs from "node:fs" ;
77import { URL , fileURLToPath } from "node:url" ;
88import * as util from "node:util" ;
9- import { readTextFile } from "../helpers.js" ;
9+ import { readTextFile , toVersionNumber , v } from "../helpers.js" ;
1010import { setReactVersion } from "../internal/set-react-version.mts" ;
11- import type { BuildConfig , TargetPlatform } from "../types.js" ;
1211import { green , red , yellow } from "../utils/colors.mjs" ;
1312import { getIOSSimulatorName , installPods } from "./test-apple.mts" ;
1413import { $ , $$ , test } from "./test-e2e.mts" ;
1514
15+ type ApplePlatform = "ios" | "macos" | "visionos" ;
16+ type TargetPlatform = ApplePlatform | "android" | "windows" ;
17+
18+ type BuildConfig = {
19+ version : string ;
20+ platform : TargetPlatform ;
21+ variant : "fabric" | "paper" ;
22+ engine ?: "hermes" | "jsc" ;
23+ } ;
24+
1625type PlatformConfig = {
1726 name : string ;
1827 engines : ReadonlyArray < "hermes" | "jsc" > ;
@@ -43,7 +52,17 @@ const PLATFORM_CONFIG: Record<TargetPlatform, PlatformConfig> = {
4352 ios : {
4453 name : "iOS" ,
4554 engines : [ "jsc" , "hermes" ] ,
46- isAvailable : ( ) => process . platform === "darwin" ,
55+ isAvailable : ( { version, engine } ) => {
56+ if ( process . platform !== "darwin" ) {
57+ return false ;
58+ }
59+
60+ if ( engine === "jsc" && toVersionNumber ( version ) >= v ( 0 , 80 , 0 ) ) {
61+ return false ;
62+ }
63+
64+ return true ;
65+ } ,
4766 prebuild : installPods ,
4867 } ,
4968 macos : {
@@ -203,15 +222,15 @@ function buildAndRun(platform: TargetPlatform) {
203222 }
204223}
205224
206- async function buildRunTest ( { platform, variant } : BuildConfig ) {
225+ async function buildRunTest ( { version , platform, variant } : BuildConfig ) {
207226 const setup = PLATFORM_CONFIG [ platform ] ;
208227 if ( ! setup ) {
209228 log ( yellow ( `⚠ Unknown platform: ${ platform } ` ) ) ;
210229 return ;
211230 }
212231
213232 for ( const engine of setup . engines ) {
214- const configWithEngine = { platform, variant, engine } ;
233+ const configWithEngine = { version , platform, variant, engine } ;
215234 if ( ! setup . isAvailable ( configWithEngine ) ) {
216235 continue ;
217236 }
@@ -285,13 +304,13 @@ if (platforms.length === 0) {
285304 return job . then ( ( ) =>
286305 withReactNativeVersion ( version , async ( ) => {
287306 for ( const platform of platforms ) {
288- await buildRunTest ( { platform, variant } ) ;
307+ await buildRunTest ( { version , platform, variant } ) ;
289308 }
290309 } )
291310 ) ;
292311 } , prestart ( ) )
293312 . then ( ( ) => {
294- showBanner ( ` Initialize new app` ) ;
313+ showBanner ( " Initialize new app" ) ;
295314 $ (
296315 PACKAGE_MANAGER ,
297316 "init-test-app" ,
@@ -306,7 +325,7 @@ if (platforms.length === 0) {
306325 ) ;
307326 } )
308327 . then ( ( ) => {
309- showBanner ( ` Reconfigure existing app` ) ;
328+ showBanner ( " Reconfigure existing app" ) ;
310329 const args = [
311330 "configure-test-app" ,
312331 "-p" ,
0 commit comments