UNPKG

6.61 kBSource Map (JSON)View Raw
1{"version":3,"file":"BundleIdentifier.js","sourceRoot":"","sources":["../../src/ios/BundleIdentifier.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport { join } from 'path';\n// @ts-ignore\nimport { project as Project } from 'xcode';\nimport plist, { PlistObject } from '@expo/plist';\nimport { InfoPlist } from './IosConfig.types';\nimport { ExpoConfig } from '../Config.types';\n\nexport function getBundleIdentifier(config: ExpoConfig) {\n return config.ios && config.ios.bundleIdentifier ? config.ios.bundleIdentifier : null;\n}\n\n/**\n * In Turtle v1 we set the bundleIdentifier directly on Info.plist rather\n * than in pbxproj\n */\n\nexport function setBundleIdentifier(config: ExpoConfig, infoPlist: InfoPlist) {\n let bundleIdentifier = getBundleIdentifier(config);\n\n if (!bundleIdentifier) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n CFBundleIdentifier: bundleIdentifier,\n };\n}\n\n/**\n * Updates the bundle identifier for a given pbxproj\n * * @param pbxprojPath Path to pbxproj file\n * @param bundleIdentifier Bundle identifier to set in the pbxproj\n */\n\nexport function updateBundleIdentifierForPbxproj(pbxprojPath: string, bundleIdentifier: string) {\n const project = Project(pbxprojPath);\n project.parseSync();\n\n Object.entries(project.pbxXCBuildConfigurationSection())\n .filter(filterComments)\n .filter(filterConfig)\n .filter(filterHosts)\n .forEach(({ 1: { buildSettings } }: any) => {\n if (buildSettings.PRODUCT_BUNDLE_IDENTIFIER === bundleIdentifier) {\n return;\n }\n\n buildSettings.PRODUCT_BUNDLE_IDENTIFIER = `\"${bundleIdentifier}\"`;\n\n const productName = bundleIdentifier.split('.').pop();\n if (!productName?.includes('$')) {\n buildSettings.PRODUCT_NAME = productName;\n }\n });\n fs.writeFileSync(pbxprojPath, project.writeSync());\n}\n\n/**\n * Updates the bundle identifier for pbx projects inside the ios directory of the given project root\n *\n * @param projectRoot Path to project root containing the ios directory\n * @param bundleIdentifier Desired bundle identifier\n */\nexport function setBundleIdentifierForPbxproj(projectRoot: string, bundleIdentifier: string) {\n // Get all pbx projects in the ${projectRoot}/ios directory\n const pbxprojPaths = globSync(join(projectRoot, 'ios', '*', 'project.pbxproj'));\n\n for (const pbxprojPath of pbxprojPaths) {\n updateBundleIdentifierForPbxproj(pbxprojPath, bundleIdentifier);\n }\n}\n\n/**\n * Reset bundle identifier field in Info.plist to use PRODUCT_BUNDLE_IDENTIFIER, as recommended by Apple.\n */\n\nconst defaultBundleId = '$(PRODUCT_BUNDLE_IDENTIFIER)';\n\nexport function resetAllPlistBundleIdentifiers(projectRoot: string) {\n const infoPlistPaths = globSync(join(projectRoot, 'ios', '*', 'Info.plist'));\n\n for (const plistPath of infoPlistPaths) {\n resetPlistBundleIdentifier(plistPath);\n }\n}\n\nexport function resetPlistBundleIdentifier(plistPath: string) {\n const rawPlist = fs.readFileSync(plistPath, 'utf8');\n const plistObject = plist.parse(rawPlist) as PlistObject;\n\n if (plistObject.CFBundleIdentifier) {\n if (plistObject.CFBundleIdentifier === defaultBundleId) return;\n\n // attempt to match default Info.plist format\n const format = { pretty: true, indent: `\\t` };\n\n const xml = plist.build(\n {\n ...plistObject,\n CFBundleIdentifier: defaultBundleId,\n },\n format\n );\n\n if (xml !== rawPlist) {\n fs.writeFileSync(plistPath, xml);\n }\n }\n}\n\nfunction filterComments([item]: any[]): boolean {\n return !item.endsWith(`_comment`);\n}\n\nfunction filterConfig(input: any[]): boolean {\n const {\n 1: { isa },\n } = input;\n return isa === 'XCBuildConfiguration';\n}\n\nfunction filterHosts(input: any[]): boolean {\n const {\n 1: { buildSettings },\n } = input;\n\n return !buildSettings.TEST_HOST;\n}\n"]}
\No newline at end of file