1*6020c730SEvan Baconimport { IOSConfig } from '@expo/config-plugins'; 2*6020c730SEvan Baconimport plist from '@expo/plist'; 3*6020c730SEvan Baconimport fs from 'fs'; 4*6020c730SEvan Bacon 5*6020c730SEvan Baconconst debug = require('debug')('expo:run:ios:codeSigning:simulator'); 6*6020c730SEvan Bacon 7*6020c730SEvan Bacon// NOTE(EvanBacon): These are entitlements that work in a simulator 8*6020c730SEvan Bacon// but still require the project to have development code signing setup. 9*6020c730SEvan Bacon// There may be more, but this is fine for now. 10*6020c730SEvan Baconconst ENTITLEMENTS_THAT_REQUIRE_CODE_SIGNING = [ 11*6020c730SEvan Bacon 'com.apple.developer.associated-domains', 12*6020c730SEvan Bacon 'com.apple.developer.applesignin', 13*6020c730SEvan Bacon]; 14*6020c730SEvan Bacon 15*6020c730SEvan Baconfunction getEntitlements(projectRoot: string): Record<string, any> | null { 16*6020c730SEvan Bacon try { 17*6020c730SEvan Bacon const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(projectRoot); 18*6020c730SEvan Bacon if (!entitlementsPath || !fs.existsSync(entitlementsPath)) { 19*6020c730SEvan Bacon return null; 20*6020c730SEvan Bacon } 21*6020c730SEvan Bacon 22*6020c730SEvan Bacon const entitlementsContents = fs.readFileSync(entitlementsPath, 'utf8'); 23*6020c730SEvan Bacon const entitlements = plist.parse(entitlementsContents); 24*6020c730SEvan Bacon return entitlements; 25*6020c730SEvan Bacon } catch (error) { 26*6020c730SEvan Bacon debug('Failed to read entitlements', error); 27*6020c730SEvan Bacon } 28*6020c730SEvan Bacon return null; 29*6020c730SEvan Bacon} 30*6020c730SEvan Bacon 31*6020c730SEvan Bacon/** @returns true if the simulator build should be code signed for development. */ 32*6020c730SEvan Baconexport function simulatorBuildRequiresCodeSigning(projectRoot: string): boolean { 33*6020c730SEvan Bacon const entitlements = getEntitlements(projectRoot); 34*6020c730SEvan Bacon if (!entitlements) { 35*6020c730SEvan Bacon return false; 36*6020c730SEvan Bacon } 37*6020c730SEvan Bacon return ENTITLEMENTS_THAT_REQUIRE_CODE_SIGNING.some((entitlement) => entitlement in entitlements); 38*6020c730SEvan Bacon} 39