async function setupIosProject()

in provider-utils/awscloudformation/utils/video-player.js [60:106]


async function setupIosProject(context, resourceName) {
  const { amplify } = context;
  const amplifyMeta = amplify.getProjectMeta();
  const { serviceType, output } = amplifyMeta.video[resourceName];
  const projectRootPath = amplify.pathManager.searchProjectRootPath();
  const framework = videoPlayerUtils.getProjectConfig(context).frontend;
  const pbxprojPath = `${projectRootPath}/${videoPlayerUtils.getProjectConfig(context).projectName}.xcodeproj/project.pbxproj`;
  const pbxproj = xcode.project(pbxprojPath);
  const dependency = {};
  const props = {};

  if (serviceType === 'ivs') {
    dependency.podName = 'AmazonIVSPlayer';
    await videoPlayerUtils.installIosDependencies(context, dependency);
    props.serviceType = serviceType;
  } else {
    dependency.podName = 'MobileVLCKit';
    dependency.podVersion = '3.3.0';
    dependency.platformVersion = '8.4';
    await videoPlayerUtils.installIosDependencies(context, dependency);
  }
  props.src = videoPlayerUtils.getServiceUrl({ serviceType, output });
  props.creationDate = new Date();
  props.projectName = videoPlayerUtils.getProjectConfig(context).projectName;

  const videoTemplate = fs.readFileSync(`${__dirname}/../video-player-templates/ios/video-player.ejs`, { encoding: 'utf-8' });
  const appendVideoTemplate = ejs.render(videoTemplate, props);
  const videoComponentTemplate = fs.readFileSync(`${__dirname}/../video-player-templates/ios/${framework}-video-component.ejs`, { encoding: 'utf-8' });
  const parser = pbxproj.parseSync();
  const [hash] = Object.entries(parser.hash.project.objects.PBXGroup).find(
    ([, group]) => group.path === videoPlayerUtils.getProjectConfig(context).projectName,
  );

  fs.writeFileSync(`${projectRootPath}/${videoPlayerUtils.getProjectConfig(context).projectName}/VideoPlayer.${videoPlayerUtils.fileExtension(framework)}`, appendVideoTemplate);
  pbxproj.addSourceFile(`VideoPlayer.${videoPlayerUtils.fileExtension(framework)}`, {}, hash);
  if (serviceType !== 'ivs') {
    ['h', 'cpp', 'hpp'].map((extension) => videoPlayerUtils.genIosSourcesAndHeaders(context, props, extension));
    pbxproj.addSourceFile('empty.cpp', {}, hash);
    pbxproj.addHeaderFile('empty.hpp', {}, hash);
    pbxproj.addHeaderFile(`${videoPlayerUtils.getProjectConfig(context).projectName}-Bridging-Header.h`, {}, hash);
    pbxproj.addBuildProperty('SWIFT_OBJC_BRIDGING_HEADER', `${videoPlayerUtils.getProjectConfig(context).projectName}/${videoPlayerUtils.getProjectConfig(context).projectName}-Bridging-Header.h`, 'Debug');
    pbxproj.addBuildProperty('SWIFT_OBJC_BRIDGING_HEADER', `${videoPlayerUtils.getProjectConfig(context).projectName}/${videoPlayerUtils.getProjectConfig(context).projectName}-Bridging-Header.h`, 'Release');
  }
  fs.writeFileSync(pbxprojPath, pbxproj.writeSync());
  context.print.blue(chalk`{underline Import and add the following ${framework} component to your ContentView:}`);
  context.print.info(videoComponentTemplate);
}