@@ -230,6 +230,31 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
230
230
return exportFile ;
231
231
}
232
232
233
+ /**
234
+ * Exports .xcarchive for a development device.
235
+ */
236
+ private async exportDevelopmentArchive ( projectData : IProjectData , buildConfig : IBuildConfig , options : { archivePath : string , exportDir ?: string , teamID ?: string } ) : Promise < string > {
237
+ let platformData = this . getPlatformData ( projectData ) ;
238
+ let projectRoot = platformData . projectRoot ;
239
+ let archivePath = options . archivePath ;
240
+ let buildOutputPath = path . join ( projectRoot , "build" , "device" ) ;
241
+
242
+ // The xcodebuild exportPath expects directory and writes the <project-name>.ipa at that directory.
243
+ let exportPath = path . resolve ( options . exportDir || buildOutputPath ) ;
244
+ let exportFile = path . join ( exportPath , projectData . projectName + ".ipa" ) ;
245
+
246
+ let args = [ "-exportArchive" ,
247
+ "-archivePath" , archivePath ,
248
+ "-exportPath" , exportPath ,
249
+ "-exportOptionsPlist" , platformData . configurationFilePath
250
+ ] ;
251
+ await this . $childProcess . spawnFromEvent ( "xcodebuild" , args , "exit" ,
252
+ { stdio : buildConfig . buildOutputStdio || 'inherit' , cwd : this . getPlatformData ( projectData ) . projectRoot } ,
253
+ { emitOptions : { eventName : constants . BUILD_OUTPUT_EVENT_NAME } , throwError : true } ) ;
254
+
255
+ return exportFile ;
256
+ }
257
+
233
258
private xcbuildProjectArgs ( projectRoot : string , projectData : IProjectData , product ?: "scheme" | "target" ) : string [ ] {
234
259
let xcworkspacePath = path . join ( projectRoot , projectData . projectName + ".xcworkspace" ) ;
235
260
if ( this . $fs . exists ( xcworkspacePath ) ) {
@@ -343,7 +368,7 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
343
368
{ emitOptions : { eventName : constants . BUILD_OUTPUT_EVENT_NAME } , throwError : true } ) ;
344
369
// this.$logger.out("xcodebuild build succeded.");
345
370
346
- await this . createIpa ( projectRoot , projectData , buildConfig . buildOutputStdio ) ;
371
+ await this . createIpa ( projectRoot , projectData , buildConfig ) ;
347
372
}
348
373
349
374
private async setupSigningFromProvision ( projectRoot : string , projectData : IProjectData , provision ?: any ) : Promise < void > {
@@ -430,22 +455,15 @@ export class IOSProjectService extends projectServiceBaseLib.PlatformProjectServ
430
455
{ emitOptions : { eventName : constants . BUILD_OUTPUT_EVENT_NAME } , throwError : false } ) ;
431
456
}
432
457
433
- private async createIpa ( projectRoot : string , projectData : IProjectData , buildOutputStdio ?: string ) : Promise < void > {
434
- let buildOutputPath = path . join ( projectRoot , "build" , "device" ) ;
435
- let xcrunArgs = [
436
- "-sdk" , "iphoneos" ,
437
- "PackageApplication" ,
438
- path . join ( buildOutputPath , projectData . projectName + ".app" ) ,
439
- "-o" , path . join ( buildOutputPath , projectData . projectName + ".ipa" )
440
- ] ;
441
- // if (this.$logger.getLevel() !== "INFO") {
442
- xcrunArgs . push ( "-verbose" ) ;
443
- // }
444
- // this.$logger.out("Packaging project...");
445
- await this . $childProcess . spawnFromEvent ( "xcrun" , xcrunArgs , "exit" ,
446
- { stdio : buildOutputStdio || "inherit" , cwd : this . getPlatformData ( projectData ) . projectRoot } ,
447
- { emitOptions : { eventName : constants . BUILD_OUTPUT_EVENT_NAME } , throwError : false } ) ;
448
- // this.$logger.out("Project package succeeded.");
458
+ private async createIpa ( projectRoot : string , projectData : IProjectData , buildConfig : IBuildConfig ) : Promise < string > {
459
+ let xarchivePath = await this . archive ( projectData ) ;
460
+ let exportFileIpa = await this . exportDevelopmentArchive ( projectData ,
461
+ buildConfig ,
462
+ {
463
+ archivePath : xarchivePath ,
464
+ } ) ;
465
+
466
+ return exportFileIpa ;
449
467
}
450
468
451
469
public isPlatformPrepared ( projectRoot : string , projectData : IProjectData ) : boolean {
0 commit comments