in Tasks/IpaResign/ios-signing-common.ts [131:185]
export async function getProvisioningProfileUUID(provProfilePath: string) {
//find the provisioning profile UUID
let provProfileDetails: string;
let getProvProfileDetailsCmd: ToolRunner = tl.tool(tl.which('security', true));
getProvProfileDetailsCmd.arg(['cms', '-D', '-i', provProfilePath]);
getProvProfileDetailsCmd.on('stdout', function(data) {
if (data) {
if (provProfileDetails) {
provProfileDetails = provProfileDetails.concat(data.toString().trim().replace(/[,\n\r\f\v]/gm, ''));
} else {
provProfileDetails = data.toString().trim().replace(/[,\n\r\f\v]/gm, '');
}
}
});
await getProvProfileDetailsCmd.exec();
let tmpPlist: string;
if (provProfileDetails) {
//write the provisioning profile to a plist
tmpPlist = '_xcodetasktmp.plist';
fs.writeFileSync(tmpPlist, provProfileDetails);
} else {
throw tl.loc('ProvProfileDetailsNotFound', provProfilePath);
}
//use PlistBuddy to figure out the UUID
let provProfileUUID: string;
let plist: string = tl.which('/usr/libexec/PlistBuddy', true);
let plistTool: ToolRunner = tl.tool(plist);
plistTool.arg(['-c', 'Print UUID', tmpPlist]);
plistTool.on('stdout', function (data) {
if (data) {
provProfileUUID = data.toString();
}
});
await plistTool.exec();
//delete the temporary plist file
let deletePlistCommand: ToolRunner = tl.tool(tl.which('rm', true));
deletePlistCommand.arg(['-f', tmpPlist]);
await deletePlistCommand.exec();
if (provProfileUUID) {
//copy the provisioning profile file to ~/Library/MobileDevice/Provisioning Profiles
tl.mkdirP(userProvisioningProfilesPath); // Path may not exist if Xcode has not been run yet.
let pathToProvProfile: string = getProvisioningProfilePath(provProfileUUID);
let copyProvProfileCmd: ToolRunner = tl.tool(tl.which('cp', true));
copyProvProfileCmd.arg(['-f', provProfilePath, pathToProvProfile]);
await copyProvProfileCmd.exec();
return provProfileUUID;
} else {
throw tl.loc('ProvProfileUUIDNotFound', provProfilePath);
}
}