@@ -91,8 +91,6 @@ const buildIphoneSimulator = async () => {
9191  exec ( 'xcodebuild -sdk iphonesimulator -arch x86_64 -configuration Release -project ReactNativeBabylon.xcodeproj -scheme BabylonNative build CODE_SIGNING_ALLOWED=NO' ,  'iOS/Build' ) ; 
9292} ; 
9393
94- const  buildIOS  =  gulp . series ( makeXCodeProj ,  buildIphoneOS ,  buildIphoneSimulator ) ; 
95- const  buildIOSRNTA  =  gulp . series ( makeXCodeProjRNTA ,  buildIphoneOS ,  buildIphoneSimulator ) ; 
9694
9795const  buildAndroid  =  async  ( )  =>  { 
9896  const  basekitBuildProp  =  basekitBuild  ? "-PBASEKIT_BUILD=1"  : "" ; 
@@ -235,6 +233,68 @@ const createIOSUniversalLibs = async () => {
235233  libs . map ( lib  =>  exec ( `lipo -create iOS/Build/Release-iphoneos/${ lib } ${ lib } ${ assemblediOSAndroidDir } ${ lib }  ) ) ; 
236234} ; 
237235
236+ const  createXCFrameworks  =  async  ( )  =>  { 
237+   if  ( fs . existsSync ( '../Modules/@babylonjs/react-native-iosandroid/ios/libs/' ) )  { 
238+     console . log ( 'XCFrameworks already exist, skipping creation. If you want to recreate them, delete the ios/libs directory in the react-native-iosandroid module.' ) ; 
239+     return ; 
240+   } 
241+ 
242+   const  PLATFORMS_MAP  =  { 
243+     'iphoneos' : [ 'arm64' ] , 
244+     'iphonesimulator' : [ 'x86_64' ,  'arm64' ] , 
245+   } ; 
246+ 
247+   // Build static libraries for each platform 
248+   Object . keys ( PLATFORMS_MAP ) . forEach ( platform  =>  { 
249+     const  archs  =  PLATFORMS_MAP [ platform ] ; 
250+     archs . forEach ( arch  =>  { 
251+       const  outputDir  =  `iOS/Build/${ platform } ${ arch }  ; 
252+       shelljs . mkdir ( '-p' ,  outputDir ) ; 
253+       const  buildCommand  =  `xcodebuild -sdk ${ platform } ${ arch }  ; 
254+       exec ( buildCommand ,  'iOS/Build' ) ; 
255+       exec ( `mv iOS/Build/Release-${ platform } ${ outputDir }  ) ; 
256+       exec ( `rm -rf iOS/Build/Release-${ platform }  ) ; 
257+     } ) ; 
258+   } ) ; 
259+ 
260+   // Get the list of libraries 
261+   const  libs  =  await  readdirAsync ( `iOS/Build/iphoneos-arm64` ) ; 
262+ 
263+   // Merge multi arch libraries into single libraries for platform with multiple archs 
264+   Object . keys ( PLATFORMS_MAP ) . forEach ( platform  =>  { 
265+     const  archs  =  PLATFORMS_MAP [ platform ] ; 
266+     if  ( archs . length  ===  1 )  { 
267+       // Copy the single arch library to the output directory 
268+       const  outputDir  =  `${ assemblediOSAndroidDir } ${ platform }  ; 
269+       shelljs . mkdir ( '-p' ,  outputDir ) ; 
270+       exec ( `cp -r iOS/Build/${ platform } ${ archs [ 0 ] } ${ outputDir }  ) ; 
271+       return 
272+     } 
273+ 
274+     const  outputDir  =  `${ assemblediOSAndroidDir } ${ platform }  ;  
275+     shelljs . mkdir ( '-p' ,  outputDir ) ; 
276+     libs . forEach ( lib  =>  { 
277+       let  params  =  "" 
278+       archs . forEach ( arch  =>  { 
279+         params  +=  ` iOS/Build/${ platform } ${ arch } ${ lib }  
280+       } ) ; 
281+       exec ( `lipo -create ${ params } ${ outputDir } ${ lib }  ) ; 
282+     } ) ; 
283+   } ) ; 
284+ 
285+   // Create xcframework for each library 
286+   libs . forEach ( lib  =>  { 
287+     const  params  =  Object . keys ( PLATFORMS_MAP ) . map ( platform  =>  ` -library ${ assemblediOSAndroidDir } ${ platform } ${ lib }  ) . join ( '' ) ; 
288+     const  outputDir  =  `${ assemblediOSAndroidDir }  ; 
289+     const  libName  =  lib . split ( '.' ) [ 0 ] ; 
290+     exec ( `xcodebuild -create-xcframework ${ params } ${ outputDir } ${ libName }  ) ; 
291+   } ) ; 
292+ 
293+   shelljs . mkdir ( '-p' ,  '../Modules/@babylonjs/react-native-iosandroid/ios/libs' ) ; 
294+   exec ( `cp -r ${ assemblediOSAndroidDir }  ) ; 
295+   exec ( `rm -rf ${ assemblediOSAndroidDir }  ) ; 
296+ } ; 
297+ 
238298const  copyAndroidFiles  =  async  ( )  =>  { 
239299  await  new  Promise ( resolve  =>  { 
240300    gulp . src ( `${ basekitPackagePath }  ) 
@@ -621,6 +681,8 @@ const patchPackageVersion = async () => {
621681
622682const  copyFiles  =  gulp . parallel ( copyIOSAndroidCommonFiles ,  copyIOSFiles ,  copyAndroidFiles ) ; 
623683
684+ const  buildIOS  =  gulp . series ( makeXCodeProj ,  buildIphoneOS ,  buildIphoneSimulator ) ; 
685+ const  buildIOSRNTA  =  gulp . series ( makeXCodeProjRNTA ,  createXCFrameworks ) ; 
624686const  buildTS  =  gulp . series ( patchPackageVersion ,  copyCommonFiles ,  copySharedFiles ,  buildTypeScript ,  validateAssembled ) ; 
625687const  buildIOSAndroid  =  gulp . series ( patchPackageVersion ,  buildIOS ,  buildAndroid ,  createIOSUniversalLibs ,  copyFiles ,  validateAssemblediOSAndroid ) ; 
626688const  build  =  gulp . series ( buildIOSAndroid ,  switchToBaseKit ,  buildIOSAndroid ) ; 
@@ -635,6 +697,7 @@ exports.buildIOSRNTA = buildIOSRNTA;
635697exports . buildAndroid  =  buildAndroid ; 
636698exports . buildAndroidRNTA  =  buildAndroidRNTA ; 
637699exports . createIOSUniversalLibs  =  createIOSUniversalLibs ; 
700+ exports . createXCFrameworks  =  createXCFrameworks ; 
638701exports . copyFiles  =  copyFiles ; 
639702
640703exports . clean  =  clean ; 
0 commit comments