@expo/config-plugins 4.0.17 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +17 -2
  2. package/build/android/EasBuild.js +8 -8
  3. package/build/android/EasBuild.js.map +1 -1
  4. package/build/android/GoogleServices.js +16 -14
  5. package/build/android/GoogleServices.js.map +1 -1
  6. package/build/android/Manifest.js +7 -5
  7. package/build/android/Manifest.js.map +1 -1
  8. package/build/android/Package.js +26 -14
  9. package/build/android/Package.js.map +1 -1
  10. package/build/android/Paths.js +6 -6
  11. package/build/android/Paths.js.map +1 -1
  12. package/build/android/Scheme.d.ts +5 -2
  13. package/build/android/Scheme.js +26 -15
  14. package/build/android/Scheme.js.map +1 -1
  15. package/build/ios/BundleIdentifier.js +6 -6
  16. package/build/ios/BundleIdentifier.js.map +1 -1
  17. package/build/ios/Entitlements.js +20 -8
  18. package/build/ios/Entitlements.js.map +1 -1
  19. package/build/ios/Google.d.ts +5 -5
  20. package/build/ios/Google.js +62 -12
  21. package/build/ios/Google.js.map +1 -1
  22. package/build/ios/Locales.js +13 -13
  23. package/build/ios/Locales.js.map +1 -1
  24. package/build/ios/Maps.js +7 -7
  25. package/build/ios/Maps.js.map +1 -1
  26. package/build/ios/Paths.d.ts +3 -2
  27. package/build/ios/Paths.js +21 -9
  28. package/build/ios/Paths.js.map +1 -1
  29. package/build/ios/ProvisioningProfile.js +4 -4
  30. package/build/ios/ProvisioningProfile.js.map +1 -1
  31. package/build/ios/Swift.js +5 -5
  32. package/build/ios/Swift.js.map +1 -1
  33. package/build/ios/XcodeProjectFile.js +5 -5
  34. package/build/ios/XcodeProjectFile.js.map +1 -1
  35. package/build/plugins/ios-plugins.d.ts +1 -1
  36. package/build/plugins/ios-plugins.js.map +1 -1
  37. package/build/plugins/withAndroidBaseMods.js +0 -3
  38. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  39. package/build/utils/Updates.d.ts +1 -1
  40. package/build/utils/Updates.js +15 -7
  41. package/build/utils/Updates.js.map +1 -1
  42. package/build/utils/XML.d.ts +1 -0
  43. package/build/utils/XML.js +33 -11
  44. package/build/utils/XML.js.map +1 -1
  45. package/build/utils/fs.d.ts +4 -0
  46. package/build/utils/fs.js +56 -0
  47. package/build/utils/fs.js.map +1 -0
  48. package/package.json +4 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/Locales.ts"],"names":["withLocales","config","modResults","setLocalesAsync","projectRoot","modRequest","project","getLocales","locales","localesMap","getResolvedLocalesAsync","projectName","supportingDirectory","stringName","lang","localizationObj","Object","entries","dir","fs","ensureDir","strings","buffer","plistKey","localVersion","push","writeFile","join","group","children","some","comment","filepath","groupName","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","e"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport JsonFile from '@expo/json-file';\nimport * as fs from 'fs-extra';\nimport { join } from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\nimport { addResourceFileToGroup, ensureGroupRecursively, getProjectName } from './utils/Xcodeproj';\n\ntype LocaleJson = Record<string, string>;\ntype ResolvedLocalesJson = Record<string, LocaleJson>;\ntype ExpoConfigLocales = NonNullable<ExpoConfig['locales']>;\n\nexport const withLocales: ConfigPlugin = config => {\n return withXcodeProject(config, async config => {\n config.modResults = await setLocalesAsync(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getLocales(\n config: Pick<ExpoConfig, 'locales'>\n): Record<string, string | LocaleJson> | null {\n return config.locales ?? null;\n}\n\nexport async function setLocalesAsync(\n config: Pick<ExpoConfig, 'locales'>,\n { projectRoot, project }: { projectRoot: string; project: XcodeProject }\n): Promise<XcodeProject> {\n const locales = getLocales(config);\n if (!locales) {\n return project;\n }\n // possibly validate CFBundleAllowMixedLocalizations is enabled\n const localesMap = await getResolvedLocalesAsync(projectRoot, locales);\n\n const projectName = getProjectName(projectRoot);\n const supportingDirectory = join(projectRoot, 'ios', projectName, 'Supporting');\n\n // TODO: Should we delete all before running? Revisit after we land on a lock file.\n const stringName = 'InfoPlist.strings';\n\n for (const [lang, localizationObj] of Object.entries(localesMap)) {\n const dir = join(supportingDirectory, `${lang}.lproj`);\n await fs.ensureDir(dir);\n const strings = join(dir, stringName);\n const buffer = [];\n for (const [plistKey, localVersion] of Object.entries(localizationObj)) {\n buffer.push(`${plistKey} = \"${localVersion}\";`);\n }\n // Write the file to the file system.\n await fs.writeFile(strings, buffer.join('\\n'));\n\n // deep find the correct folder\n const group = ensureGroupRecursively(project, `${projectName}/Supporting/${lang}.lproj`);\n\n // Ensure the file doesn't already exist\n if (!group?.children.some(({ comment }) => comment === stringName)) {\n // Only write the file if it doesn't already exist.\n project = addResourceFileToGroup({\n filepath: strings,\n groupName: `${projectName}/Supporting/${lang}.lproj`,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n }\n\n return project;\n}\n\nexport async function getResolvedLocalesAsync(\n projectRoot: string,\n input: ExpoConfigLocales\n): Promise<ResolvedLocalesJson> {\n const locales: ResolvedLocalesJson = {};\n for (const [lang, localeJsonPath] of Object.entries(input)) {\n if (typeof localeJsonPath === 'string') {\n try {\n locales[lang] = await JsonFile.readAsync(join(projectRoot, localeJsonPath));\n } catch (e) {\n // Add a warning when a json file cannot be parsed.\n addWarningIOS(\n `locales.${lang}`,\n `Failed to parse JSON of locale file for language: ${lang}`,\n 'https://docs.expo.dev/distribution/app-stores/#localizing-your-ios-app'\n );\n }\n } else {\n // In the off chance that someone defined the locales json in the config, pass it directly to the object.\n // We do this to make the types more elegant.\n locales[lang] = localeJsonPath;\n }\n }\n\n return locales;\n}\n"],"file":"Locales.js"}
1
+ {"version":3,"sources":["../../src/ios/Locales.ts"],"names":["withLocales","config","modResults","setLocalesAsync","projectRoot","modRequest","project","getLocales","locales","localesMap","getResolvedLocalesAsync","projectName","supportingDirectory","stringName","lang","localizationObj","Object","entries","dir","fs","promises","mkdir","recursive","strings","buffer","plistKey","localVersion","push","writeFile","join","groupName","group","children","some","comment","filepath","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","e"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport JsonFile from '@expo/json-file';\nimport fs from 'fs';\nimport { join, relative } from 'path';\nimport { XcodeProject } from 'xcode';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addWarningIOS } from '../utils/warnings';\nimport { addResourceFileToGroup, ensureGroupRecursively, getProjectName } from './utils/Xcodeproj';\n\ntype LocaleJson = Record<string, string>;\ntype ResolvedLocalesJson = Record<string, LocaleJson>;\ntype ExpoConfigLocales = NonNullable<ExpoConfig['locales']>;\n\nexport const withLocales: ConfigPlugin = config => {\n return withXcodeProject(config, async config => {\n config.modResults = await setLocalesAsync(config, {\n projectRoot: config.modRequest.projectRoot,\n project: config.modResults,\n });\n return config;\n });\n};\n\nexport function getLocales(\n config: Pick<ExpoConfig, 'locales'>\n): Record<string, string | LocaleJson> | null {\n return config.locales ?? null;\n}\n\nexport async function setLocalesAsync(\n config: Pick<ExpoConfig, 'locales'>,\n { projectRoot, project }: { projectRoot: string; project: XcodeProject }\n): Promise<XcodeProject> {\n const locales = getLocales(config);\n if (!locales) {\n return project;\n }\n // possibly validate CFBundleAllowMixedLocalizations is enabled\n const localesMap = await getResolvedLocalesAsync(projectRoot, locales);\n\n const projectName = getProjectName(projectRoot);\n const supportingDirectory = join(projectRoot, 'ios', projectName, 'Supporting');\n\n // TODO: Should we delete all before running? Revisit after we land on a lock file.\n const stringName = 'InfoPlist.strings';\n\n for (const [lang, localizationObj] of Object.entries(localesMap)) {\n const dir = join(supportingDirectory, `${lang}.lproj`);\n // await fs.ensureDir(dir);\n await fs.promises.mkdir(dir, { recursive: true });\n\n const strings = join(dir, stringName);\n const buffer = [];\n for (const [plistKey, localVersion] of Object.entries(localizationObj)) {\n buffer.push(`${plistKey} = \"${localVersion}\";`);\n }\n // Write the file to the file system.\n await fs.promises.writeFile(strings, buffer.join('\\n'));\n\n const groupName = `${projectName}/Supporting/${lang}.lproj`;\n // deep find the correct folder\n const group = ensureGroupRecursively(project, groupName);\n\n // Ensure the file doesn't already exist\n if (!group?.children.some(({ comment }) => comment === stringName)) {\n // Only write the file if it doesn't already exist.\n project = addResourceFileToGroup({\n filepath: relative(supportingDirectory, strings),\n groupName,\n project,\n isBuildFile: true,\n verbose: true,\n });\n }\n }\n\n return project;\n}\n\nexport async function getResolvedLocalesAsync(\n projectRoot: string,\n input: ExpoConfigLocales\n): Promise<ResolvedLocalesJson> {\n const locales: ResolvedLocalesJson = {};\n for (const [lang, localeJsonPath] of Object.entries(input)) {\n if (typeof localeJsonPath === 'string') {\n try {\n locales[lang] = await JsonFile.readAsync(join(projectRoot, localeJsonPath));\n } catch (e) {\n // Add a warning when a json file cannot be parsed.\n addWarningIOS(\n `locales.${lang}`,\n `Failed to parse JSON of locale file for language: ${lang}`,\n 'https://docs.expo.dev/distribution/app-stores/#localizing-your-ios-app'\n );\n }\n } else {\n // In the off chance that someone defined the locales json in the config, pass it directly to the object.\n // We do this to make the types more elegant.\n locales[lang] = localeJsonPath;\n }\n }\n\n return locales;\n}\n"],"file":"Locales.js"}
package/build/ios/Maps.js CHANGED
@@ -14,10 +14,10 @@ exports.removeMapsCocoaPods = removeMapsCocoaPods;
14
14
  exports.setGoogleMapsApiKey = setGoogleMapsApiKey;
15
15
  exports.withMaps = void 0;
16
16
 
17
- function _fsExtra() {
18
- const data = _interopRequireDefault(require("fs-extra"));
17
+ function _fs() {
18
+ const data = _interopRequireDefault(require("fs"));
19
19
 
20
- _fsExtra = function () {
20
+ _fs = function () {
21
21
  return data;
22
22
  };
23
23
 
@@ -208,7 +208,7 @@ const withMapsCocoaPods = (config, {
208
208
  return (0, _withDangerousMod().withDangerousMod)(config, ['ios', async config => {
209
209
  const filePath = _path().default.join(config.modRequest.platformProjectRoot, 'Podfile');
210
210
 
211
- const contents = await _fsExtra().default.readFile(filePath, 'utf-8');
211
+ const contents = await _fs().default.promises.readFile(filePath, 'utf-8');
212
212
  let results; // Only add the block if react-native-maps is installed in the project (best effort).
213
213
  // Generally prebuild runs after a yarn install so this should always work as expected.
214
214
 
@@ -233,7 +233,7 @@ const withMapsCocoaPods = (config, {
233
233
  }
234
234
 
235
235
  if (results.didMerge || results.didClear) {
236
- await _fsExtra().default.writeFile(filePath, results.contents);
236
+ await _fs().default.promises.writeFile(filePath, results.contents);
237
237
  }
238
238
 
239
239
  return config;
@@ -244,7 +244,7 @@ const withGoogleMapsAppDelegate = (config, {
244
244
  apiKey
245
245
  }) => {
246
246
  return (0, _iosPlugins().withAppDelegate)(config, config => {
247
- if (config.modResults.language === 'objc') {
247
+ if (['objc', 'objcpp'].includes(config.modResults.language)) {
248
248
  if (apiKey && isReactNativeMapsAutolinked(config) && isReactNativeMapsInstalled(config.modRequest.projectRoot)) {
249
249
  try {
250
250
  config.modResults.contents = addGoogleMapsAppDelegateImport(config.modResults.contents).contents;
@@ -261,7 +261,7 @@ const withGoogleMapsAppDelegate = (config, {
261
261
  config.modResults.contents = removeGoogleMapsAppDelegateInit(config.modResults.contents).contents;
262
262
  }
263
263
  } else {
264
- throw new Error('Cannot setup Google Maps because the AppDelegate is not Objective C');
264
+ throw new Error(`Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`);
265
265
  }
266
266
 
267
267
  return config;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/Maps.ts"],"names":["debug","require","MATCH_INIT","withGoogleMapsKey","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","filePath","modRequest","platformProjectRoot","contents","fs","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","modResults","language"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\n// Match against `UMModuleRegistryAdapter` (unimodules), and React Native without unimodules (Expo Modules), and SDK +44 React AppDelegate subscriber.\nexport const MATCH_INIT = /(?:(self\\.|_)(\\w+)\\s?=\\s?\\[\\[UMModuleRegistryAdapter alloc\\])|(?:RCTBridge\\s?\\*\\s?(\\w+)\\s?=\\s?\\[\\[RCTBridge alloc\\])|(\\[self\\.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions\\])/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = config => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 0,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async config => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, config => {\n if (config.modResults.language === 'objc') {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error('Cannot setup Google Maps because the AppDelegate is not Objective C');\n }\n return config;\n });\n};\n"],"file":"Maps.js"}
1
+ {"version":3,"sources":["../../src/ios/Maps.ts"],"names":["debug","require","MATCH_INIT","withGoogleMapsKey","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","filePath","modRequest","platformProjectRoot","contents","fs","promises","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","includes","modResults","language"],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\nimport fs from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { ConfigPlugin, InfoPlist } from '../Plugin.types';\nimport { createInfoPlistPlugin, withAppDelegate } from '../plugins/ios-plugins';\nimport { withDangerousMod } from '../plugins/withDangerousMod';\nimport { mergeContents, MergeResults, removeContents } from '../utils/generateCode';\n\nconst debug = require('debug')('expo:config-plugins:ios:maps') as typeof console.log;\n\n// Match against `UMModuleRegistryAdapter` (unimodules), and React Native without unimodules (Expo Modules), and SDK +44 React AppDelegate subscriber.\nexport const MATCH_INIT = /(?:(self\\.|_)(\\w+)\\s?=\\s?\\[\\[UMModuleRegistryAdapter alloc\\])|(?:RCTBridge\\s?\\*\\s?(\\w+)\\s?=\\s?\\[\\[RCTBridge alloc\\])|(\\[self\\.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions\\])/g;\n\nconst withGoogleMapsKey = createInfoPlistPlugin(setGoogleMapsApiKey, 'withGoogleMapsKey');\n\nexport const withMaps: ConfigPlugin = config => {\n config = withGoogleMapsKey(config);\n\n const apiKey = getGoogleMapsApiKey(config);\n // Technically adds react-native-maps (Apple maps) and google maps.\n\n debug('Google Maps API Key:', apiKey);\n config = withMapsCocoaPods(config, { useGoogleMaps: !!apiKey });\n\n // Adds/Removes AppDelegate setup for Google Maps API on iOS\n config = withGoogleMapsAppDelegate(config, { apiKey });\n\n return config;\n};\n\nexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'ios'>) {\n return config.ios?.config?.googleMapsApiKey ?? null;\n}\n\nexport function setGoogleMapsApiKey(\n config: Pick<ExpoConfig, 'ios'>,\n { GMSApiKey, ...infoPlist }: InfoPlist\n): InfoPlist {\n const apiKey = getGoogleMapsApiKey(config);\n\n if (apiKey === null) {\n return infoPlist;\n }\n\n return {\n ...infoPlist,\n GMSApiKey: apiKey,\n };\n}\n\nexport function addGoogleMapsAppDelegateImport(src: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n '#import <GoogleMaps/GoogleMaps.h>',\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-import',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: /#import \"AppDelegate\\.h\"/,\n offset: 1,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateImport(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-import',\n src,\n });\n}\n\nexport function addGoogleMapsAppDelegateInit(src: string, apiKey: string): MergeResults {\n const newSrc = [];\n newSrc.push(\n '#if __has_include(<GoogleMaps/GoogleMaps.h>)',\n ` [GMSServices provideAPIKey:@\"${apiKey}\"];`,\n '#endif'\n );\n\n return mergeContents({\n tag: 'react-native-maps-init',\n src,\n newSrc: newSrc.join('\\n'),\n anchor: MATCH_INIT,\n offset: 0,\n comment: '//',\n });\n}\n\nexport function removeGoogleMapsAppDelegateInit(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps-init',\n src,\n });\n}\n\n/**\n * @param src The contents of the Podfile.\n * @returns Podfile with Google Maps added.\n */\nexport function addMapsCocoaPods(src: string): MergeResults {\n return mergeContents({\n tag: 'react-native-maps',\n src,\n newSrc: ` pod 'react-native-google-maps', path: File.dirname(\\`node --print \"require.resolve('react-native-maps/package.json')\"\\`)`,\n anchor: /use_native_modules/,\n offset: 0,\n comment: '#',\n });\n}\n\nexport function removeMapsCocoaPods(src: string): MergeResults {\n return removeContents({\n tag: 'react-native-maps',\n src,\n });\n}\n\nfunction isReactNativeMapsInstalled(projectRoot: string): string | null {\n const resolved = resolveFrom.silent(projectRoot, 'react-native-maps/package.json');\n return resolved ? path.dirname(resolved) : null;\n}\n\nfunction isReactNativeMapsAutolinked(config: Pick<ExpoConfig, '_internal'>): boolean {\n // Only add the native code changes if we know that the package is going to be linked natively.\n // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)\n // but another app will not have it installed in the package.json, causing it to not be linked natively.\n // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.\n\n // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.\n return true;\n\n // return (\n // !config._internal?.autolinkedModules ||\n // config._internal.autolinkedModules.includes('react-native-maps')\n // );\n}\n\nconst withMapsCocoaPods: ConfigPlugin<{ useGoogleMaps: boolean }> = (config, { useGoogleMaps }) => {\n return withDangerousMod(config, [\n 'ios',\n async config => {\n const filePath = path.join(config.modRequest.platformProjectRoot, 'Podfile');\n const contents = await fs.promises.readFile(filePath, 'utf-8');\n let results: MergeResults;\n // Only add the block if react-native-maps is installed in the project (best effort).\n // Generally prebuild runs after a yarn install so this should always work as expected.\n const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);\n const isLinked = isReactNativeMapsAutolinked(config);\n debug('Is Expo Autolinked:', isLinked);\n debug('react-native-maps path:', googleMapsPath);\n if (isLinked && googleMapsPath && useGoogleMaps) {\n try {\n results = addMapsCocoaPods(contents);\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add react-native-maps to the project's ios/Podfile because it's malformed. Please report this with a copy of your project Podfile.`\n );\n }\n throw error;\n }\n } else {\n // If the package is no longer installed, then remove the block.\n results = removeMapsCocoaPods(contents);\n }\n if (results.didMerge || results.didClear) {\n await fs.promises.writeFile(filePath, results.contents);\n }\n return config;\n },\n ]);\n};\n\nconst withGoogleMapsAppDelegate: ConfigPlugin<{ apiKey: string | null }> = (config, { apiKey }) => {\n return withAppDelegate(config, config => {\n if (['objc', 'objcpp'].includes(config.modResults.language)) {\n if (\n apiKey &&\n isReactNativeMapsAutolinked(config) &&\n isReactNativeMapsInstalled(config.modRequest.projectRoot)\n ) {\n try {\n config.modResults.contents = addGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = addGoogleMapsAppDelegateInit(\n config.modResults.contents,\n apiKey\n ).contents;\n } catch (error: any) {\n if (error.code === 'ERR_NO_MATCH') {\n throw new Error(\n `Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`\n );\n }\n throw error;\n }\n } else {\n config.modResults.contents = removeGoogleMapsAppDelegateImport(\n config.modResults.contents\n ).contents;\n config.modResults.contents = removeGoogleMapsAppDelegateInit(\n config.modResults.contents\n ).contents;\n }\n } else {\n throw new Error(\n `Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`\n );\n }\n return config;\n });\n};\n"],"file":"Maps.js"}
@@ -3,14 +3,15 @@ interface ProjectFile<L extends string = string> {
3
3
  language: L;
4
4
  contents: string;
5
5
  }
6
- export declare type AppDelegateProjectFile = ProjectFile<'objc' | 'swift'>;
6
+ declare type AppleLanguage = 'objc' | 'objcpp' | 'swift';
7
+ export declare type AppDelegateProjectFile = ProjectFile<AppleLanguage>;
7
8
  export declare function getAppDelegateHeaderFilePath(projectRoot: string): string;
8
9
  export declare function getAppDelegateFilePath(projectRoot: string): string;
9
10
  export declare function getAppDelegateObjcHeaderFilePath(projectRoot: string): string;
10
11
  export declare function getFileInfo(filePath: string): {
11
12
  path: string;
12
13
  contents: string;
13
- language: "objc" | "swift";
14
+ language: AppleLanguage;
14
15
  };
15
16
  export declare function getAppDelegate(projectRoot: string): AppDelegateProjectFile;
16
17
  export declare function getSourceRoot(projectRoot: string): string;
@@ -22,10 +22,10 @@ exports.getSourceRoot = getSourceRoot;
22
22
  exports.getSupportingPath = getSupportingPath;
23
23
  exports.getXcodeProjectPath = getXcodeProjectPath;
24
24
 
25
- function _fsExtra() {
26
- const data = require("fs-extra");
25
+ function _fs() {
26
+ const data = require("fs");
27
27
 
28
- _fsExtra = function () {
28
+ _fs = function () {
29
29
  return data;
30
30
  };
31
31
 
@@ -103,7 +103,7 @@ function getAppDelegateHeaderFilePath(projectRoot) {
103
103
  }
104
104
 
105
105
  function getAppDelegateFilePath(projectRoot) {
106
- const [using, ...extra] = (0, _glob().sync)('ios/*/AppDelegate.@(m|swift)', {
106
+ const [using, ...extra] = (0, _glob().sync)('ios/*/AppDelegate.@(m|mm|swift)', {
107
107
  absolute: true,
108
108
  cwd: projectRoot,
109
109
  ignore: ignoredPaths
@@ -154,6 +154,9 @@ function getLanguage(filePath) {
154
154
  const extension = path().extname(filePath);
155
155
 
156
156
  switch (extension) {
157
+ case '.mm':
158
+ return 'objcpp';
159
+
157
160
  case '.m':
158
161
  case '.h':
159
162
  return 'objc';
@@ -169,7 +172,7 @@ function getLanguage(filePath) {
169
172
  function getFileInfo(filePath) {
170
173
  return {
171
174
  path: path().normalize(filePath),
172
- contents: (0, _fsExtra().readFileSync)(filePath, 'utf8'),
175
+ contents: (0, _fs().readFileSync)(filePath, 'utf8'),
173
176
  language: getLanguage(filePath)
174
177
  };
175
178
  }
@@ -199,11 +202,20 @@ function findSchemeNames(projectRoot) {
199
202
 
200
203
  function getAllXcodeProjectPaths(projectRoot) {
201
204
  const iosFolder = 'ios';
202
- const pbxprojPaths = (0, _glob().sync)('**/*.xcodeproj', {
205
+ const pbxprojPaths = (0, _glob().sync)('ios/**/*.xcodeproj', {
203
206
  cwd: projectRoot,
204
207
  ignore: ignoredPaths
205
- }).filter(project => !/test|example|sample/i.test(project) || path().dirname(project) === iosFolder).sort(project => path().dirname(project) === iosFolder ? -1 : 1) // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)
206
- .sort();
208
+ }).filter(project => !/test|example|sample/i.test(project) || path().dirname(project) === iosFolder) // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)
209
+ .sort().sort((a, b) => {
210
+ const isAInIos = path().dirname(a) === iosFolder;
211
+ const isBInIos = path().dirname(b) === iosFolder; // preserve previous sort order
212
+
213
+ if (isAInIos && isBInIos || !isAInIos && !isBInIos) {
214
+ return 0;
215
+ }
216
+
217
+ return isAInIos ? -1 : 1;
218
+ });
207
219
 
208
220
  if (!pbxprojPaths.length) {
209
221
  throw new (_errors().UnexpectedError)(`Failed to locate the ios/*.xcodeproj files relative to path "${projectRoot}".`);
@@ -234,7 +246,7 @@ function getXcodeProjectPath(projectRoot) {
234
246
 
235
247
  function getAllPBXProjectPaths(projectRoot) {
236
248
  const projectPaths = getAllXcodeProjectPaths(projectRoot);
237
- const paths = projectPaths.map(value => path().join(value, 'project.pbxproj')).filter(value => (0, _fsExtra().pathExistsSync)(value));
249
+ const paths = projectPaths.map(value => path().join(value, 'project.pbxproj')).filter(value => (0, _fs().existsSync)(value));
238
250
 
239
251
  if (!paths.length) {
240
252
  throw new (_errors().UnexpectedError)(`Failed to locate the ios/*.xcodeproj/project.pbxproj files relative to path "${projectRoot}".`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/Paths.ts"],"names":["ignoredPaths","getAppDelegateHeaderFilePath","projectRoot","using","extra","absolute","cwd","ignore","UnexpectedError","length","warnMultipleFiles","tag","fileName","getAppDelegateFilePath","getAppDelegateObjcHeaderFilePath","getLanguage","filePath","extension","path","extname","getFileInfo","normalize","contents","language","getAppDelegate","getSourceRoot","appDelegate","dirname","findSchemePaths","findSchemeNames","schemePaths","map","schemePath","parse","name","getAllXcodeProjectPaths","iosFolder","pbxprojPaths","filter","project","test","sort","value","join","getXcodeProjectPath","getAllPBXProjectPaths","projectPaths","paths","getPBXProjectPath","getAllInfoPlistPaths","a","b","getInfoPlistPath","getAllEntitlementsPaths","getEntitlementsPath","getSupportingPath","resolve","basename","getExpoPlistPath","supportingPath","usingPath","relative","extraPaths","v","JSON","stringify"],"mappings":"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","sourcesContent":["import { pathExistsSync, readFileSync } from 'fs-extra';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst ignoredPaths = ['**/@(Carthage|Pods|vendor|node_modules)/**'];\n\ninterface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\nexport type AppDelegateProjectFile = ProjectFile<'objc' | 'swift'>;\n\nexport function getAppDelegateHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(\n `Could not locate a valid AppDelegate header at root: \"${projectRoot}\"`\n );\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-header',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.@(m|swift)', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateObjcHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate.h at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-objc-header',\n fileName: 'AppDelegate.h',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nfunction getLanguage(filePath: string): 'objc' | 'swift' {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.m':\n case '.h':\n return 'objc';\n case '.swift':\n return 'swift';\n default:\n throw new UnexpectedError(`Unexpected iOS file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath),\n };\n}\n\nexport function getAppDelegate(projectRoot: string): AppDelegateProjectFile {\n const filePath = getAppDelegateFilePath(projectRoot);\n return getFileInfo(filePath);\n}\n\nexport function getSourceRoot(projectRoot: string): string {\n const appDelegate = getAppDelegate(projectRoot);\n return path.dirname(appDelegate.path);\n}\n\nexport function findSchemePaths(projectRoot: string): string[] {\n return globSync('ios/*.xcodeproj/xcshareddata/xcschemes/*.xcscheme', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n}\n\nexport function findSchemeNames(projectRoot: string): string[] {\n const schemePaths = findSchemePaths(projectRoot);\n return schemePaths.map(schemePath => path.parse(schemePath).name);\n}\n\nexport function getAllXcodeProjectPaths(projectRoot: string): string[] {\n const iosFolder = 'ios';\n const pbxprojPaths = globSync('**/*.xcodeproj', { cwd: projectRoot, ignore: ignoredPaths })\n .filter(project => !/test|example|sample/i.test(project) || path.dirname(project) === iosFolder)\n .sort(project => (path.dirname(project) === iosFolder ? -1 : 1))\n // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)\n .sort();\n\n if (!pbxprojPaths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj files relative to path \"${projectRoot}\".`\n );\n }\n return pbxprojPaths.map(value => path.join(projectRoot, value));\n}\n\n/**\n * Get the pbxproj for the given path\n */\nexport function getXcodeProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllXcodeProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'xcodeproj',\n fileName: '*.xcodeproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllPBXProjectPaths(projectRoot: string): string[] {\n const projectPaths = getAllXcodeProjectPaths(projectRoot);\n const paths = projectPaths\n .map(value => path.join(value, 'project.pbxproj'))\n .filter(value => pathExistsSync(value));\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj/project.pbxproj files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getPBXProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllPBXProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'project-pbxproj',\n fileName: 'project.pbxproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllInfoPlistPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/Info.plist', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n }).sort(\n // longer name means more suffixes, we want the shortest possible one to be first.\n (a, b) => a.length - b.length\n );\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate Info.plist files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getInfoPlistPath(projectRoot: string): string {\n const [using, ...extra] = getAllInfoPlistPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'info-plist',\n fileName: 'Info.plist',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllEntitlementsPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/*.entitlements', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n return paths;\n}\n\n/**\n * Get the entitlements file path if it exists.\n *\n * @param projectRoot\n */\nexport function getEntitlementsPath(projectRoot: string): string | null {\n const [using, ...extra] = getAllEntitlementsPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'entitlements',\n fileName: '*.entitlements',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using ?? null;\n}\n\nexport function getSupportingPath(projectRoot: string): string {\n return path.resolve(projectRoot, 'ios', path.basename(getSourceRoot(projectRoot)), 'Supporting');\n}\n\nexport function getExpoPlistPath(projectRoot: string): string {\n const supportingPath = getSupportingPath(projectRoot);\n return path.join(supportingPath, 'Expo.plist');\n}\n\nfunction warnMultipleFiles({\n tag,\n fileName,\n projectRoot,\n using,\n extra,\n}: {\n tag: string;\n fileName: string;\n projectRoot?: string;\n using: string;\n extra: string[];\n}) {\n const usingPath = projectRoot ? path.relative(projectRoot, using) : using;\n const extraPaths = projectRoot ? extra.map(v => path.relative(projectRoot, v)) : extra;\n addWarningIOS(\n `paths-${tag}`,\n `Found multiple ${fileName} file paths, using \"${usingPath}\". Ignored paths: ${JSON.stringify(\n extraPaths\n )}`\n );\n}\n"],"file":"Paths.js"}
1
+ {"version":3,"sources":["../../src/ios/Paths.ts"],"names":["ignoredPaths","getAppDelegateHeaderFilePath","projectRoot","using","extra","absolute","cwd","ignore","UnexpectedError","length","warnMultipleFiles","tag","fileName","getAppDelegateFilePath","getAppDelegateObjcHeaderFilePath","getLanguage","filePath","extension","path","extname","getFileInfo","normalize","contents","language","getAppDelegate","getSourceRoot","appDelegate","dirname","findSchemePaths","findSchemeNames","schemePaths","map","schemePath","parse","name","getAllXcodeProjectPaths","iosFolder","pbxprojPaths","filter","project","test","sort","a","b","isAInIos","isBInIos","value","join","getXcodeProjectPath","getAllPBXProjectPaths","projectPaths","paths","getPBXProjectPath","getAllInfoPlistPaths","getInfoPlistPath","getAllEntitlementsPaths","getEntitlementsPath","getSupportingPath","resolve","basename","getExpoPlistPath","supportingPath","usingPath","relative","extraPaths","v","JSON","stringify"],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { sync as globSync } from 'glob';\nimport * as path from 'path';\n\nimport { UnexpectedError } from '../utils/errors';\nimport { addWarningIOS } from '../utils/warnings';\n\nconst ignoredPaths = ['**/@(Carthage|Pods|vendor|node_modules)/**'];\n\ninterface ProjectFile<L extends string = string> {\n path: string;\n language: L;\n contents: string;\n}\n\ntype AppleLanguage = 'objc' | 'objcpp' | 'swift';\n\nexport type AppDelegateProjectFile = ProjectFile<AppleLanguage>;\n\nexport function getAppDelegateHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(\n `Could not locate a valid AppDelegate header at root: \"${projectRoot}\"`\n );\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-header',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.@(m|mm|swift)', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate',\n fileName: 'AppDelegate',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAppDelegateObjcHeaderFilePath(projectRoot: string): string {\n const [using, ...extra] = globSync('ios/*/AppDelegate.h', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n\n if (!using) {\n throw new UnexpectedError(`Could not locate a valid AppDelegate.h at root: \"${projectRoot}\"`);\n }\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'app-delegate-objc-header',\n fileName: 'AppDelegate.h',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nfunction getLanguage(filePath: string): AppleLanguage {\n const extension = path.extname(filePath);\n switch (extension) {\n case '.mm':\n return 'objcpp';\n case '.m':\n case '.h':\n return 'objc';\n case '.swift':\n return 'swift';\n default:\n throw new UnexpectedError(`Unexpected iOS file extension: ${extension}`);\n }\n}\n\nexport function getFileInfo(filePath: string) {\n return {\n path: path.normalize(filePath),\n contents: readFileSync(filePath, 'utf8'),\n language: getLanguage(filePath),\n };\n}\n\nexport function getAppDelegate(projectRoot: string): AppDelegateProjectFile {\n const filePath = getAppDelegateFilePath(projectRoot);\n return getFileInfo(filePath);\n}\n\nexport function getSourceRoot(projectRoot: string): string {\n const appDelegate = getAppDelegate(projectRoot);\n return path.dirname(appDelegate.path);\n}\n\nexport function findSchemePaths(projectRoot: string): string[] {\n return globSync('ios/*.xcodeproj/xcshareddata/xcschemes/*.xcscheme', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n}\n\nexport function findSchemeNames(projectRoot: string): string[] {\n const schemePaths = findSchemePaths(projectRoot);\n return schemePaths.map(schemePath => path.parse(schemePath).name);\n}\n\nexport function getAllXcodeProjectPaths(projectRoot: string): string[] {\n const iosFolder = 'ios';\n const pbxprojPaths = globSync('ios/**/*.xcodeproj', { cwd: projectRoot, ignore: ignoredPaths })\n .filter(project => !/test|example|sample/i.test(project) || path.dirname(project) === iosFolder)\n // sort alphabetically to ensure this works the same across different devices (Fail in CI (linux) without this)\n .sort()\n .sort((a, b) => {\n const isAInIos = path.dirname(a) === iosFolder;\n const isBInIos = path.dirname(b) === iosFolder;\n // preserve previous sort order\n if ((isAInIos && isBInIos) || (!isAInIos && !isBInIos)) {\n return 0;\n }\n return isAInIos ? -1 : 1;\n });\n\n if (!pbxprojPaths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj files relative to path \"${projectRoot}\".`\n );\n }\n return pbxprojPaths.map(value => path.join(projectRoot, value));\n}\n\n/**\n * Get the pbxproj for the given path\n */\nexport function getXcodeProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllXcodeProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'xcodeproj',\n fileName: '*.xcodeproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllPBXProjectPaths(projectRoot: string): string[] {\n const projectPaths = getAllXcodeProjectPaths(projectRoot);\n const paths = projectPaths\n .map(value => path.join(value, 'project.pbxproj'))\n .filter(value => existsSync(value));\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate the ios/*.xcodeproj/project.pbxproj files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getPBXProjectPath(projectRoot: string): string {\n const [using, ...extra] = getAllPBXProjectPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'project-pbxproj',\n fileName: 'project.pbxproj',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllInfoPlistPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/Info.plist', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n }).sort(\n // longer name means more suffixes, we want the shortest possible one to be first.\n (a, b) => a.length - b.length\n );\n\n if (!paths.length) {\n throw new UnexpectedError(\n `Failed to locate Info.plist files relative to path \"${projectRoot}\".`\n );\n }\n return paths;\n}\n\nexport function getInfoPlistPath(projectRoot: string): string {\n const [using, ...extra] = getAllInfoPlistPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'info-plist',\n fileName: 'Info.plist',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using;\n}\n\nexport function getAllEntitlementsPaths(projectRoot: string): string[] {\n const paths = globSync('ios/*/*.entitlements', {\n absolute: true,\n cwd: projectRoot,\n ignore: ignoredPaths,\n });\n return paths;\n}\n\n/**\n * Get the entitlements file path if it exists.\n *\n * @param projectRoot\n */\nexport function getEntitlementsPath(projectRoot: string): string | null {\n const [using, ...extra] = getAllEntitlementsPaths(projectRoot);\n\n if (extra.length) {\n warnMultipleFiles({\n tag: 'entitlements',\n fileName: '*.entitlements',\n projectRoot,\n using,\n extra,\n });\n }\n\n return using ?? null;\n}\n\nexport function getSupportingPath(projectRoot: string): string {\n return path.resolve(projectRoot, 'ios', path.basename(getSourceRoot(projectRoot)), 'Supporting');\n}\n\nexport function getExpoPlistPath(projectRoot: string): string {\n const supportingPath = getSupportingPath(projectRoot);\n return path.join(supportingPath, 'Expo.plist');\n}\n\nfunction warnMultipleFiles({\n tag,\n fileName,\n projectRoot,\n using,\n extra,\n}: {\n tag: string;\n fileName: string;\n projectRoot?: string;\n using: string;\n extra: string[];\n}) {\n const usingPath = projectRoot ? path.relative(projectRoot, using) : using;\n const extraPaths = projectRoot ? extra.map(v => path.relative(projectRoot, v)) : extra;\n addWarningIOS(\n `paths-${tag}`,\n `Found multiple ${fileName} file paths, using \"${usingPath}\". Ignored paths: ${JSON.stringify(\n extraPaths\n )}`\n );\n}\n"],"file":"Paths.js"}
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.setProvisioningProfileForPbxproj = setProvisioningProfileForPbxproj;
7
7
 
8
- function _fsExtra() {
9
- const data = _interopRequireDefault(require("fs-extra"));
8
+ function _fs() {
9
+ const data = _interopRequireDefault(require("fs"));
10
10
 
11
- _fsExtra = function () {
11
+ _fs = function () {
12
12
  return data;
13
13
  };
14
14
 
@@ -62,7 +62,7 @@ function setProvisioningProfileForPbxproj(projectRoot, {
62
62
  item.attributes.TargetAttributes[nativeTargetId].ProvisioningStyle = 'Manual';
63
63
  });
64
64
 
65
- _fsExtra().default.writeFileSync(project.filepath, project.writeSync());
65
+ _fs().default.writeFileSync(project.filepath, project.writeSync());
66
66
  }
67
67
 
68
68
  const ensureQuotes = value => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/ProvisioningProfile.ts"],"names":["setProvisioningProfileForPbxproj","projectRoot","targetName","profileName","appleTeamId","buildConfiguration","project","nativeTargetEntry","nativeTargetId","nativeTarget","quotedAppleTeamId","ensureQuotes","buildConfigurationList","filter","item","name","forEach","buildSettings","PROVISIONING_PROFILE_SPECIFIER","DEVELOPMENT_TEAM","CODE_SIGN_IDENTITY","CODE_SIGN_STYLE","Object","entries","isNotComment","attributes","TargetAttributes","DevelopmentTeam","ProvisioningStyle","fs","writeFileSync","filepath","writeSync","value","match"],"mappings":";;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAgBO,SAASA,gCAAT,CACLC,WADK,EAEL;AACEC,EAAAA,UADF;AAEEC,EAAAA,WAFF;AAGEC,EAAAA,WAHF;AAIEC,EAAAA,kBAAkB,GAAG;AAJvB,CAFK,EAQC;AACN,QAAMC,OAAO,GAAG,6BAAWL,WAAX,CAAhB;AAEA,QAAMM,iBAAiB,GAAGL,UAAU,GAChC,sCAAuBI,OAAvB,EAAgCJ,UAAhC,CADgC,GAEhC,qCAAsBI,OAAtB,CAFJ;AAGA,QAAM,CAACE,cAAD,EAAiBC,YAAjB,IAAiCF,iBAAvC;AAEA,QAAMG,iBAAiB,GAAGC,YAAY,CAACP,WAAD,CAAtC;AAEA,oDAAgCE,OAAhC,EAAyCG,YAAY,CAACG,sBAAtD,EACGC,MADH,CACU,CAAC,GAAGC,IAAH,CAAD,KAAyCA,IAAI,CAACC,IAAL,KAAcV,kBADjE,EAEGW,OAFH,CAEW,CAAC,GAAGF,IAAH,CAAD,KAAyC;AAChDA,IAAAA,IAAI,CAACG,aAAL,CAAmBC,8BAAnB,GAAqD,IAAGf,WAAY,GAApE;AACAW,IAAAA,IAAI,CAACG,aAAL,CAAmBE,gBAAnB,GAAsCT,iBAAtC;AACAI,IAAAA,IAAI,CAACG,aAAL,CAAmBG,kBAAnB,GAAwC,uBAAxC;AACAN,IAAAA,IAAI,CAACG,aAAL,CAAmBI,eAAnB,GAAqC,QAArC;AACD,GAPH;AASAC,EAAAA,MAAM,CAACC,OAAP,CAAe,oCAAkBjB,OAAlB,CAAf,EACGO,MADH,CACUW,yBADV,EAEGR,OAFH,CAEW,CAAC,GAAGF,IAAH,CAAD,KAAmC;AAC1C,QAAI,CAACA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,CAAL,EAAuD;AACrDM,MAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,IAAmD,EAAnD;AACD;;AACDM,IAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,EAAiDmB,eAAjD,GAAmEjB,iBAAnE;AACAI,IAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,EAAiDoB,iBAAjD,GAAqE,QAArE;AACD,GARH;;AAUAC,qBAAGC,aAAH,CAAiBxB,OAAO,CAACyB,QAAzB,EAAmCzB,OAAO,CAAC0B,SAAR,EAAnC;AACD;;AAED,MAAMrB,YAAY,GAAIsB,KAAD,IAAmB;AACtC,MAAI,CAACA,KAAK,CAACC,KAAN,CAAY,OAAZ,CAAL,EAA2B;AACzB,WAAQ,IAAGD,KAAM,GAAjB;AACD;;AACD,SAAOA,KAAP;AACD,CALD","sourcesContent":["import fs from 'fs-extra';\n\nimport { findFirstNativeTarget, findNativeTargetByName } from './Target';\nimport {\n ConfigurationSectionEntry,\n getBuildConfigurationsForListId,\n getPbxproj,\n getProjectSection,\n isNotComment,\n ProjectSectionEntry,\n} from './utils/Xcodeproj';\n\ntype ProvisioningProfileSettings = {\n targetName?: string;\n appleTeamId: string;\n profileName: string;\n buildConfiguration?: string;\n};\n\nexport function setProvisioningProfileForPbxproj(\n projectRoot: string,\n {\n targetName,\n profileName,\n appleTeamId,\n buildConfiguration = 'Release',\n }: ProvisioningProfileSettings\n): void {\n const project = getPbxproj(projectRoot);\n\n const nativeTargetEntry = targetName\n ? findNativeTargetByName(project, targetName)\n : findFirstNativeTarget(project);\n const [nativeTargetId, nativeTarget] = nativeTargetEntry;\n\n const quotedAppleTeamId = ensureQuotes(appleTeamId);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList)\n .filter(([, item]: ConfigurationSectionEntry) => item.name === buildConfiguration)\n .forEach(([, item]: ConfigurationSectionEntry) => {\n item.buildSettings.PROVISIONING_PROFILE_SPECIFIER = `\"${profileName}\"`;\n item.buildSettings.DEVELOPMENT_TEAM = quotedAppleTeamId;\n item.buildSettings.CODE_SIGN_IDENTITY = '\"iPhone Distribution\"';\n item.buildSettings.CODE_SIGN_STYLE = 'Manual';\n });\n\n Object.entries(getProjectSection(project))\n .filter(isNotComment)\n .forEach(([, item]: ProjectSectionEntry) => {\n if (!item.attributes.TargetAttributes[nativeTargetId]) {\n item.attributes.TargetAttributes[nativeTargetId] = {};\n }\n item.attributes.TargetAttributes[nativeTargetId].DevelopmentTeam = quotedAppleTeamId;\n item.attributes.TargetAttributes[nativeTargetId].ProvisioningStyle = 'Manual';\n });\n\n fs.writeFileSync(project.filepath, project.writeSync());\n}\n\nconst ensureQuotes = (value: string) => {\n if (!value.match(/^['\"]/)) {\n return `\"${value}\"`;\n }\n return value;\n};\n"],"file":"ProvisioningProfile.js"}
1
+ {"version":3,"sources":["../../src/ios/ProvisioningProfile.ts"],"names":["setProvisioningProfileForPbxproj","projectRoot","targetName","profileName","appleTeamId","buildConfiguration","project","nativeTargetEntry","nativeTargetId","nativeTarget","quotedAppleTeamId","ensureQuotes","buildConfigurationList","filter","item","name","forEach","buildSettings","PROVISIONING_PROFILE_SPECIFIER","DEVELOPMENT_TEAM","CODE_SIGN_IDENTITY","CODE_SIGN_STYLE","Object","entries","isNotComment","attributes","TargetAttributes","DevelopmentTeam","ProvisioningStyle","fs","writeFileSync","filepath","writeSync","value","match"],"mappings":";;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAgBO,SAASA,gCAAT,CACLC,WADK,EAEL;AACEC,EAAAA,UADF;AAEEC,EAAAA,WAFF;AAGEC,EAAAA,WAHF;AAIEC,EAAAA,kBAAkB,GAAG;AAJvB,CAFK,EAQC;AACN,QAAMC,OAAO,GAAG,6BAAWL,WAAX,CAAhB;AAEA,QAAMM,iBAAiB,GAAGL,UAAU,GAChC,sCAAuBI,OAAvB,EAAgCJ,UAAhC,CADgC,GAEhC,qCAAsBI,OAAtB,CAFJ;AAGA,QAAM,CAACE,cAAD,EAAiBC,YAAjB,IAAiCF,iBAAvC;AAEA,QAAMG,iBAAiB,GAAGC,YAAY,CAACP,WAAD,CAAtC;AAEA,oDAAgCE,OAAhC,EAAyCG,YAAY,CAACG,sBAAtD,EACGC,MADH,CACU,CAAC,GAAGC,IAAH,CAAD,KAAyCA,IAAI,CAACC,IAAL,KAAcV,kBADjE,EAEGW,OAFH,CAEW,CAAC,GAAGF,IAAH,CAAD,KAAyC;AAChDA,IAAAA,IAAI,CAACG,aAAL,CAAmBC,8BAAnB,GAAqD,IAAGf,WAAY,GAApE;AACAW,IAAAA,IAAI,CAACG,aAAL,CAAmBE,gBAAnB,GAAsCT,iBAAtC;AACAI,IAAAA,IAAI,CAACG,aAAL,CAAmBG,kBAAnB,GAAwC,uBAAxC;AACAN,IAAAA,IAAI,CAACG,aAAL,CAAmBI,eAAnB,GAAqC,QAArC;AACD,GAPH;AASAC,EAAAA,MAAM,CAACC,OAAP,CAAe,oCAAkBjB,OAAlB,CAAf,EACGO,MADH,CACUW,yBADV,EAEGR,OAFH,CAEW,CAAC,GAAGF,IAAH,CAAD,KAAmC;AAC1C,QAAI,CAACA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,CAAL,EAAuD;AACrDM,MAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,IAAmD,EAAnD;AACD;;AACDM,IAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,EAAiDmB,eAAjD,GAAmEjB,iBAAnE;AACAI,IAAAA,IAAI,CAACW,UAAL,CAAgBC,gBAAhB,CAAiClB,cAAjC,EAAiDoB,iBAAjD,GAAqE,QAArE;AACD,GARH;;AAUAC,gBAAGC,aAAH,CAAiBxB,OAAO,CAACyB,QAAzB,EAAmCzB,OAAO,CAAC0B,SAAR,EAAnC;AACD;;AAED,MAAMrB,YAAY,GAAIsB,KAAD,IAAmB;AACtC,MAAI,CAACA,KAAK,CAACC,KAAN,CAAY,OAAZ,CAAL,EAA2B;AACzB,WAAQ,IAAGD,KAAM,GAAjB;AACD;;AACD,SAAOA,KAAP;AACD,CALD","sourcesContent":["import fs from 'fs';\n\nimport { findFirstNativeTarget, findNativeTargetByName } from './Target';\nimport {\n ConfigurationSectionEntry,\n getBuildConfigurationsForListId,\n getPbxproj,\n getProjectSection,\n isNotComment,\n ProjectSectionEntry,\n} from './utils/Xcodeproj';\n\ntype ProvisioningProfileSettings = {\n targetName?: string;\n appleTeamId: string;\n profileName: string;\n buildConfiguration?: string;\n};\n\nexport function setProvisioningProfileForPbxproj(\n projectRoot: string,\n {\n targetName,\n profileName,\n appleTeamId,\n buildConfiguration = 'Release',\n }: ProvisioningProfileSettings\n): void {\n const project = getPbxproj(projectRoot);\n\n const nativeTargetEntry = targetName\n ? findNativeTargetByName(project, targetName)\n : findFirstNativeTarget(project);\n const [nativeTargetId, nativeTarget] = nativeTargetEntry;\n\n const quotedAppleTeamId = ensureQuotes(appleTeamId);\n\n getBuildConfigurationsForListId(project, nativeTarget.buildConfigurationList)\n .filter(([, item]: ConfigurationSectionEntry) => item.name === buildConfiguration)\n .forEach(([, item]: ConfigurationSectionEntry) => {\n item.buildSettings.PROVISIONING_PROFILE_SPECIFIER = `\"${profileName}\"`;\n item.buildSettings.DEVELOPMENT_TEAM = quotedAppleTeamId;\n item.buildSettings.CODE_SIGN_IDENTITY = '\"iPhone Distribution\"';\n item.buildSettings.CODE_SIGN_STYLE = 'Manual';\n });\n\n Object.entries(getProjectSection(project))\n .filter(isNotComment)\n .forEach(([, item]: ProjectSectionEntry) => {\n if (!item.attributes.TargetAttributes[nativeTargetId]) {\n item.attributes.TargetAttributes[nativeTargetId] = {};\n }\n item.attributes.TargetAttributes[nativeTargetId].DevelopmentTeam = quotedAppleTeamId;\n item.attributes.TargetAttributes[nativeTargetId].ProvisioningStyle = 'Manual';\n });\n\n fs.writeFileSync(project.filepath, project.writeSync());\n}\n\nconst ensureQuotes = (value: string) => {\n if (!value.match(/^['\"]/)) {\n return `\"${value}\"`;\n }\n return value;\n};\n"],"file":"ProvisioningProfile.js"}
@@ -9,10 +9,10 @@ exports.getDesignatedSwiftBridgingHeaderFileReference = getDesignatedSwiftBridgi
9
9
  exports.linkBridgingHeaderFile = linkBridgingHeaderFile;
10
10
  exports.withSwiftBridgingHeader = exports.withNoopSwiftFile = void 0;
11
11
 
12
- function _fsExtra() {
13
- const data = _interopRequireDefault(require("fs-extra"));
12
+ function _fs() {
13
+ const data = _interopRequireDefault(require("fs"));
14
14
 
15
- _fsExtra = function () {
15
+ _fs = function () {
16
16
  return data;
17
17
  };
18
18
 
@@ -196,9 +196,9 @@ function createBridgingHeaderFile({
196
196
  }) {
197
197
  const bridgingHeaderProjectPath = _path().default.join((0, _Paths().getSourceRoot)(projectRoot), bridgingHeader);
198
198
 
199
- if (!_fsExtra().default.existsSync(bridgingHeaderProjectPath)) {
199
+ if (!_fs().default.existsSync(bridgingHeaderProjectPath)) {
200
200
  // Create the file
201
- _fsExtra().default.writeFileSync(bridgingHeaderProjectPath, templateBridgingHeader, 'utf8');
201
+ _fs().default.writeFileSync(bridgingHeaderProjectPath, templateBridgingHeader, 'utf8');
202
202
  } // This is non-standard, Xcode generates the bridging header in `/ios` which is kinda annoying.
203
203
  // Instead, this'll generate the default header in the application code folder `/ios/myproject/`.
204
204
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/Swift.ts"],"names":["templateBridgingHeader","withSwiftBridgingHeader","config","modResults","ensureSwiftBridgingHeaderSetup","project","projectRoot","modRequest","shouldCreateSwiftBridgingHeader","projectName","bridgingHeader","createBridgingHeaderFileName","createBridgingHeaderFile","linkBridgingHeaderFile","path","join","isObjc","language","getDesignatedSwiftBridgingHeaderFileReference","configurations","pbxXCBuildConfigurationSection","buildSettings","Object","values","PRODUCT_NAME","SWIFT_OBJC_BRIDGING_HEADER","bridgingHeaderProjectPath","fs","existsSync","writeFileSync","filePath","hasFile","filepath","groupName","isBuildFile","verbose","withNoopSwiftFile","contents"],"mappings":"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","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\n\nimport { ConfigPlugin, XcodeProject } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { getAppDelegate, getSourceRoot } from './Paths';\nimport { withBuildSourceFile } from './XcodeProjectFile';\nimport { addResourceFileToGroup, getProjectName } from './utils/Xcodeproj';\n\nconst templateBridgingHeader = `//\n// Use this file to import your target's public headers that you would like to expose to Swift.\n//\n`;\n\n/**\n * Ensure a Swift bridging header is created for the project.\n * This helps fix problems related to using modules that are written in Swift (lottie, FBSDK).\n *\n * 1. Ensures the file exists given the project path.\n * 2. Writes the file and links to Xcode as a resource file.\n * 3. Sets the build configuration `SWIFT_OBJC_BRIDGING_HEADER = [PROJECT_NAME]-Bridging-Header.h`\n */\nexport const withSwiftBridgingHeader: ConfigPlugin = config => {\n return withXcodeProject(config, config => {\n config.modResults = ensureSwiftBridgingHeaderSetup({\n project: config.modResults,\n projectRoot: config.modRequest.projectRoot,\n });\n return config;\n });\n};\n\nexport function ensureSwiftBridgingHeaderSetup({\n projectRoot,\n project,\n}: {\n projectRoot: string;\n project: XcodeProject;\n}) {\n // Only create a bridging header if using objective-c\n if (shouldCreateSwiftBridgingHeader({ projectRoot, project })) {\n const projectName = getProjectName(projectRoot);\n const bridgingHeader = createBridgingHeaderFileName(projectName);\n // Ensure a bridging header is created in the Xcode project.\n project = createBridgingHeaderFile({\n project,\n projectName,\n projectRoot,\n bridgingHeader,\n });\n // Designate the newly created file as the Swift bridging header in the Xcode project.\n project = linkBridgingHeaderFile({\n project,\n bridgingHeader: path.join(projectName, bridgingHeader),\n });\n }\n return project;\n}\n\nfunction shouldCreateSwiftBridgingHeader({\n projectRoot,\n project,\n}: {\n projectRoot: string;\n project: XcodeProject;\n}): boolean {\n // Only create a bridging header if the project is using in Objective C (AppDelegate is written in Objc).\n const isObjc = getAppDelegate(projectRoot).language === 'objc';\n return isObjc && !getDesignatedSwiftBridgingHeaderFileReference({ project });\n}\n\n/**\n * @returns String matching the default name used when Xcode automatically creates a bridging header file.\n */\nfunction createBridgingHeaderFileName(projectName: string): string {\n return `${projectName}-Bridging-Header.h`;\n}\n\nexport function getDesignatedSwiftBridgingHeaderFileReference({\n project,\n}: {\n project: XcodeProject;\n}): string | null {\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n if (\n typeof buildSettings.SWIFT_OBJC_BRIDGING_HEADER === 'string' &&\n buildSettings.SWIFT_OBJC_BRIDGING_HEADER\n ) {\n return buildSettings.SWIFT_OBJC_BRIDGING_HEADER;\n }\n }\n }\n return null;\n}\n\n/**\n *\n * @param bridgingHeader The bridging header filename ex: `ExpoAPIs-Bridging-Header.h`\n * @returns\n */\nexport function linkBridgingHeaderFile({\n project,\n bridgingHeader,\n}: {\n project: XcodeProject;\n bridgingHeader: string;\n}): XcodeProject {\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n buildSettings.SWIFT_OBJC_BRIDGING_HEADER = bridgingHeader;\n }\n }\n\n return project;\n}\n\nexport function createBridgingHeaderFile({\n projectRoot,\n projectName,\n project,\n bridgingHeader,\n}: {\n project: XcodeProject;\n projectName: string;\n projectRoot: string;\n bridgingHeader: string;\n}): XcodeProject {\n const bridgingHeaderProjectPath = path.join(getSourceRoot(projectRoot), bridgingHeader);\n if (!fs.existsSync(bridgingHeaderProjectPath)) {\n // Create the file\n fs.writeFileSync(bridgingHeaderProjectPath, templateBridgingHeader, 'utf8');\n }\n\n // This is non-standard, Xcode generates the bridging header in `/ios` which is kinda annoying.\n // Instead, this'll generate the default header in the application code folder `/ios/myproject/`.\n const filePath = `${projectName}/${bridgingHeader}`;\n // Ensure the file is linked with Xcode resource files\n if (!project.hasFile(filePath)) {\n project = addResourceFileToGroup({\n filepath: filePath,\n groupName: projectName,\n project,\n // Not sure why, but this is how Xcode generates it.\n isBuildFile: false,\n verbose: false,\n });\n }\n return project;\n}\n\nexport const withNoopSwiftFile: ConfigPlugin = config => {\n return withBuildSourceFile(config, {\n filePath: 'noop-file.swift',\n contents: [\n '//',\n '// @generated',\n '// A blank Swift file must be created for native modules with Swift files to work correctly.',\n '//',\n '',\n ].join('\\n'),\n });\n};\n"],"file":"Swift.js"}
1
+ {"version":3,"sources":["../../src/ios/Swift.ts"],"names":["templateBridgingHeader","withSwiftBridgingHeader","config","modResults","ensureSwiftBridgingHeaderSetup","project","projectRoot","modRequest","shouldCreateSwiftBridgingHeader","projectName","bridgingHeader","createBridgingHeaderFileName","createBridgingHeaderFile","linkBridgingHeaderFile","path","join","isObjc","language","getDesignatedSwiftBridgingHeaderFileReference","configurations","pbxXCBuildConfigurationSection","buildSettings","Object","values","PRODUCT_NAME","SWIFT_OBJC_BRIDGING_HEADER","bridgingHeaderProjectPath","fs","existsSync","writeFileSync","filePath","hasFile","filepath","groupName","isBuildFile","verbose","withNoopSwiftFile","contents"],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { ConfigPlugin, XcodeProject } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { getAppDelegate, getSourceRoot } from './Paths';\nimport { withBuildSourceFile } from './XcodeProjectFile';\nimport { addResourceFileToGroup, getProjectName } from './utils/Xcodeproj';\n\nconst templateBridgingHeader = `//\n// Use this file to import your target's public headers that you would like to expose to Swift.\n//\n`;\n\n/**\n * Ensure a Swift bridging header is created for the project.\n * This helps fix problems related to using modules that are written in Swift (lottie, FBSDK).\n *\n * 1. Ensures the file exists given the project path.\n * 2. Writes the file and links to Xcode as a resource file.\n * 3. Sets the build configuration `SWIFT_OBJC_BRIDGING_HEADER = [PROJECT_NAME]-Bridging-Header.h`\n */\nexport const withSwiftBridgingHeader: ConfigPlugin = config => {\n return withXcodeProject(config, config => {\n config.modResults = ensureSwiftBridgingHeaderSetup({\n project: config.modResults,\n projectRoot: config.modRequest.projectRoot,\n });\n return config;\n });\n};\n\nexport function ensureSwiftBridgingHeaderSetup({\n projectRoot,\n project,\n}: {\n projectRoot: string;\n project: XcodeProject;\n}) {\n // Only create a bridging header if using objective-c\n if (shouldCreateSwiftBridgingHeader({ projectRoot, project })) {\n const projectName = getProjectName(projectRoot);\n const bridgingHeader = createBridgingHeaderFileName(projectName);\n // Ensure a bridging header is created in the Xcode project.\n project = createBridgingHeaderFile({\n project,\n projectName,\n projectRoot,\n bridgingHeader,\n });\n // Designate the newly created file as the Swift bridging header in the Xcode project.\n project = linkBridgingHeaderFile({\n project,\n bridgingHeader: path.join(projectName, bridgingHeader),\n });\n }\n return project;\n}\n\nfunction shouldCreateSwiftBridgingHeader({\n projectRoot,\n project,\n}: {\n projectRoot: string;\n project: XcodeProject;\n}): boolean {\n // Only create a bridging header if the project is using in Objective C (AppDelegate is written in Objc).\n const isObjc = getAppDelegate(projectRoot).language === 'objc';\n return isObjc && !getDesignatedSwiftBridgingHeaderFileReference({ project });\n}\n\n/**\n * @returns String matching the default name used when Xcode automatically creates a bridging header file.\n */\nfunction createBridgingHeaderFileName(projectName: string): string {\n return `${projectName}-Bridging-Header.h`;\n}\n\nexport function getDesignatedSwiftBridgingHeaderFileReference({\n project,\n}: {\n project: XcodeProject;\n}): string | null {\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n if (\n typeof buildSettings.SWIFT_OBJC_BRIDGING_HEADER === 'string' &&\n buildSettings.SWIFT_OBJC_BRIDGING_HEADER\n ) {\n return buildSettings.SWIFT_OBJC_BRIDGING_HEADER;\n }\n }\n }\n return null;\n}\n\n/**\n *\n * @param bridgingHeader The bridging header filename ex: `ExpoAPIs-Bridging-Header.h`\n * @returns\n */\nexport function linkBridgingHeaderFile({\n project,\n bridgingHeader,\n}: {\n project: XcodeProject;\n bridgingHeader: string;\n}): XcodeProject {\n const configurations = project.pbxXCBuildConfigurationSection();\n // @ts-ignore\n for (const { buildSettings } of Object.values(configurations || {})) {\n // Guessing that this is the best way to emulate Xcode.\n // Using `project.addToBuildSettings` modifies too many targets.\n if (typeof buildSettings?.PRODUCT_NAME !== 'undefined') {\n buildSettings.SWIFT_OBJC_BRIDGING_HEADER = bridgingHeader;\n }\n }\n\n return project;\n}\n\nexport function createBridgingHeaderFile({\n projectRoot,\n projectName,\n project,\n bridgingHeader,\n}: {\n project: XcodeProject;\n projectName: string;\n projectRoot: string;\n bridgingHeader: string;\n}): XcodeProject {\n const bridgingHeaderProjectPath = path.join(getSourceRoot(projectRoot), bridgingHeader);\n if (!fs.existsSync(bridgingHeaderProjectPath)) {\n // Create the file\n fs.writeFileSync(bridgingHeaderProjectPath, templateBridgingHeader, 'utf8');\n }\n\n // This is non-standard, Xcode generates the bridging header in `/ios` which is kinda annoying.\n // Instead, this'll generate the default header in the application code folder `/ios/myproject/`.\n const filePath = `${projectName}/${bridgingHeader}`;\n // Ensure the file is linked with Xcode resource files\n if (!project.hasFile(filePath)) {\n project = addResourceFileToGroup({\n filepath: filePath,\n groupName: projectName,\n project,\n // Not sure why, but this is how Xcode generates it.\n isBuildFile: false,\n verbose: false,\n });\n }\n return project;\n}\n\nexport const withNoopSwiftFile: ConfigPlugin = config => {\n return withBuildSourceFile(config, {\n filePath: 'noop-file.swift',\n contents: [\n '//',\n '// @generated',\n '// A blank Swift file must be created for native modules with Swift files to work correctly.',\n '//',\n '',\n ].join('\\n'),\n });\n};\n"],"file":"Swift.js"}
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createBuildSourceFile = createBuildSourceFile;
7
7
  exports.withBuildSourceFile = void 0;
8
8
 
9
- function _fsExtra() {
10
- const data = _interopRequireDefault(require("fs-extra"));
9
+ function _fs() {
10
+ const data = _interopRequireDefault(require("fs"));
11
11
 
12
- _fsExtra = function () {
12
+ _fs = function () {
13
13
  return data;
14
14
  };
15
15
 
@@ -95,9 +95,9 @@ function createBuildSourceFile({
95
95
  }) {
96
96
  const absoluteFilePath = _path().default.join(nativeProjectRoot, filePath);
97
97
 
98
- if (overwrite || !_fsExtra().default.existsSync(absoluteFilePath)) {
98
+ if (overwrite || !_fs().default.existsSync(absoluteFilePath)) {
99
99
  // Create the file
100
- _fsExtra().default.writeFileSync(absoluteFilePath, fileContents, 'utf8');
100
+ _fs().default.writeFileSync(absoluteFilePath, fileContents, 'utf8');
101
101
  } // `myapp`
102
102
 
103
103
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ios/XcodeProjectFile.ts"],"names":["withBuildSourceFile","config","filePath","contents","overwrite","projectName","modRequest","projectRoot","modResults","createBuildSourceFile","project","nativeProjectRoot","platformProjectRoot","fileContents","path","join","absoluteFilePath","fs","existsSync","writeFileSync","groupName","dirname","hasFile","filepath"],"mappings":";;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,mBAIX,GAAG,CAACC,MAAD,EAAS;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,QAAZ;AAAsBC,EAAAA;AAAtB,CAAT,KAA+C;AAClD,SAAO,oCAAiBH,MAAjB,EAAyBA,MAAM,IAAI;AACxC,UAAMI,WAAW,GAAG,iCAAeJ,MAAM,CAACK,UAAP,CAAkBC,WAAjC,CAApB;AAEAN,IAAAA,MAAM,CAACO,UAAP,GAAoBC,qBAAqB,CAAC;AACxCC,MAAAA,OAAO,EAAET,MAAM,CAACO,UADwB;AAExCG,MAAAA,iBAAiB,EAAEV,MAAM,CAACK,UAAP,CAAkBM,mBAFG;AAGxCC,MAAAA,YAAY,EAAEV,QAH0B;AAIxCD,MAAAA,QAAQ,EAAEY,gBAAKC,IAAL,CAAUV,WAAV,EAAuBH,QAAvB,CAJ8B;AAKxCE,MAAAA;AALwC,KAAD,CAAzC;AAOA,WAAOH,MAAP;AACD,GAXM,CAAP;AAYD,CAjBM;AAmBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASQ,qBAAT,CAA+B;AACpCC,EAAAA,OADoC;AAEpCC,EAAAA,iBAFoC;AAGpCT,EAAAA,QAHoC;AAIpCW,EAAAA,YAJoC;AAKpCT,EAAAA;AALoC,CAA/B,EAYU;AACf,QAAMY,gBAAgB,GAAGF,gBAAKC,IAAL,CAAUJ,iBAAV,EAA6BT,QAA7B,CAAzB;;AACA,MAAIE,SAAS,IAAI,CAACa,mBAAGC,UAAH,CAAcF,gBAAd,CAAlB,EAAmD;AACjD;AACAC,uBAAGE,aAAH,CAAiBH,gBAAjB,EAAmCH,YAAnC,EAAiD,MAAjD;AACD,GALc,CAOf;;;AACA,QAAMO,SAAS,GAAGN,gBAAKO,OAAL,CAAanB,QAAb,CAAlB,CARe,CAUf;;;AACA,MAAI,CAACQ,OAAO,CAACY,OAAR,CAAgBpB,QAAhB,CAAL,EAAgC;AAC9BQ,IAAAA,OAAO,GAAG,4CAA0B;AAClCa,MAAAA,QAAQ,EAAErB,QADwB;AAElCkB,MAAAA,SAFkC;AAGlCV,MAAAA;AAHkC,KAA1B,CAAV;AAKD;;AACD,SAAOA,OAAP;AACD","sourcesContent":["import fs from 'fs-extra';\nimport path from 'path';\n\nimport { ConfigPlugin, XcodeProject } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addBuildSourceFileToGroup, getProjectName } from './utils/Xcodeproj';\n\n/**\n * Create a build source file and link it to Xcode.\n *\n * @param config\n * @param props.filePath relative to the build source folder. ex: `ViewController.swift` would be created in `ios/myapp/ViewController.swift`.\n * @param props.contents file contents to write.\n * @param props.overwrite should the contents overwrite any existing file in the same location on disk.\n * @returns\n */\nexport const withBuildSourceFile: ConfigPlugin<{\n filePath: string;\n contents: string;\n overwrite?: boolean;\n}> = (config, { filePath, contents, overwrite }) => {\n return withXcodeProject(config, config => {\n const projectName = getProjectName(config.modRequest.projectRoot);\n\n config.modResults = createBuildSourceFile({\n project: config.modResults,\n nativeProjectRoot: config.modRequest.platformProjectRoot,\n fileContents: contents,\n filePath: path.join(projectName, filePath),\n overwrite,\n });\n return config;\n });\n};\n\n/**\n * Add a source file to the Xcode project and write it to the file system.\n *\n * @param nativeProjectRoot absolute path to the native app root `user/app/ios`\n * @param filePath path relative to the `nativeProjectRoot` for the file to create `user/app/ios/myapp/foobar.swift`\n * @param fileContents string file contents to write to the `filePath`\n * @param overwrite should write file even if one already exists\n */\nexport function createBuildSourceFile({\n project,\n nativeProjectRoot,\n filePath,\n fileContents,\n overwrite,\n}: {\n project: XcodeProject;\n nativeProjectRoot: string;\n filePath: string;\n fileContents: string;\n overwrite?: boolean;\n}): XcodeProject {\n const absoluteFilePath = path.join(nativeProjectRoot, filePath);\n if (overwrite || !fs.existsSync(absoluteFilePath)) {\n // Create the file\n fs.writeFileSync(absoluteFilePath, fileContents, 'utf8');\n }\n\n // `myapp`\n const groupName = path.dirname(filePath);\n\n // Ensure the file is linked with Xcode resource files\n if (!project.hasFile(filePath)) {\n project = addBuildSourceFileToGroup({\n filepath: filePath,\n groupName,\n project,\n });\n }\n return project;\n}\n"],"file":"XcodeProjectFile.js"}
1
+ {"version":3,"sources":["../../src/ios/XcodeProjectFile.ts"],"names":["withBuildSourceFile","config","filePath","contents","overwrite","projectName","modRequest","projectRoot","modResults","createBuildSourceFile","project","nativeProjectRoot","platformProjectRoot","fileContents","path","join","absoluteFilePath","fs","existsSync","writeFileSync","groupName","dirname","hasFile","filepath"],"mappings":";;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,mBAIX,GAAG,CAACC,MAAD,EAAS;AAAEC,EAAAA,QAAF;AAAYC,EAAAA,QAAZ;AAAsBC,EAAAA;AAAtB,CAAT,KAA+C;AAClD,SAAO,oCAAiBH,MAAjB,EAAyBA,MAAM,IAAI;AACxC,UAAMI,WAAW,GAAG,iCAAeJ,MAAM,CAACK,UAAP,CAAkBC,WAAjC,CAApB;AAEAN,IAAAA,MAAM,CAACO,UAAP,GAAoBC,qBAAqB,CAAC;AACxCC,MAAAA,OAAO,EAAET,MAAM,CAACO,UADwB;AAExCG,MAAAA,iBAAiB,EAAEV,MAAM,CAACK,UAAP,CAAkBM,mBAFG;AAGxCC,MAAAA,YAAY,EAAEV,QAH0B;AAIxCD,MAAAA,QAAQ,EAAEY,gBAAKC,IAAL,CAAUV,WAAV,EAAuBH,QAAvB,CAJ8B;AAKxCE,MAAAA;AALwC,KAAD,CAAzC;AAOA,WAAOH,MAAP;AACD,GAXM,CAAP;AAYD,CAjBM;AAmBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASQ,qBAAT,CAA+B;AACpCC,EAAAA,OADoC;AAEpCC,EAAAA,iBAFoC;AAGpCT,EAAAA,QAHoC;AAIpCW,EAAAA,YAJoC;AAKpCT,EAAAA;AALoC,CAA/B,EAYU;AACf,QAAMY,gBAAgB,GAAGF,gBAAKC,IAAL,CAAUJ,iBAAV,EAA6BT,QAA7B,CAAzB;;AACA,MAAIE,SAAS,IAAI,CAACa,cAAGC,UAAH,CAAcF,gBAAd,CAAlB,EAAmD;AACjD;AACAC,kBAAGE,aAAH,CAAiBH,gBAAjB,EAAmCH,YAAnC,EAAiD,MAAjD;AACD,GALc,CAOf;;;AACA,QAAMO,SAAS,GAAGN,gBAAKO,OAAL,CAAanB,QAAb,CAAlB,CARe,CAUf;;;AACA,MAAI,CAACQ,OAAO,CAACY,OAAR,CAAgBpB,QAAhB,CAAL,EAAgC;AAC9BQ,IAAAA,OAAO,GAAG,4CAA0B;AAClCa,MAAAA,QAAQ,EAAErB,QADwB;AAElCkB,MAAAA,SAFkC;AAGlCV,MAAAA;AAHkC,KAA1B,CAAV;AAKD;;AACD,SAAOA,OAAP;AACD","sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nimport { ConfigPlugin, XcodeProject } from '../Plugin.types';\nimport { withXcodeProject } from '../plugins/ios-plugins';\nimport { addBuildSourceFileToGroup, getProjectName } from './utils/Xcodeproj';\n\n/**\n * Create a build source file and link it to Xcode.\n *\n * @param config\n * @param props.filePath relative to the build source folder. ex: `ViewController.swift` would be created in `ios/myapp/ViewController.swift`.\n * @param props.contents file contents to write.\n * @param props.overwrite should the contents overwrite any existing file in the same location on disk.\n * @returns\n */\nexport const withBuildSourceFile: ConfigPlugin<{\n filePath: string;\n contents: string;\n overwrite?: boolean;\n}> = (config, { filePath, contents, overwrite }) => {\n return withXcodeProject(config, config => {\n const projectName = getProjectName(config.modRequest.projectRoot);\n\n config.modResults = createBuildSourceFile({\n project: config.modResults,\n nativeProjectRoot: config.modRequest.platformProjectRoot,\n fileContents: contents,\n filePath: path.join(projectName, filePath),\n overwrite,\n });\n return config;\n });\n};\n\n/**\n * Add a source file to the Xcode project and write it to the file system.\n *\n * @param nativeProjectRoot absolute path to the native app root `user/app/ios`\n * @param filePath path relative to the `nativeProjectRoot` for the file to create `user/app/ios/myapp/foobar.swift`\n * @param fileContents string file contents to write to the `filePath`\n * @param overwrite should write file even if one already exists\n */\nexport function createBuildSourceFile({\n project,\n nativeProjectRoot,\n filePath,\n fileContents,\n overwrite,\n}: {\n project: XcodeProject;\n nativeProjectRoot: string;\n filePath: string;\n fileContents: string;\n overwrite?: boolean;\n}): XcodeProject {\n const absoluteFilePath = path.join(nativeProjectRoot, filePath);\n if (overwrite || !fs.existsSync(absoluteFilePath)) {\n // Create the file\n fs.writeFileSync(absoluteFilePath, fileContents, 'utf8');\n }\n\n // `myapp`\n const groupName = path.dirname(filePath);\n\n // Ensure the file is linked with Xcode resource files\n if (!project.hasFile(filePath)) {\n project = addBuildSourceFileToGroup({\n filepath: filePath,\n groupName,\n project,\n });\n }\n return project;\n}\n"],"file":"XcodeProjectFile.js"}
@@ -4,7 +4,7 @@ import type { XcodeProject } from 'xcode';
4
4
  import type { ConfigPlugin, Mod } from '../Plugin.types';
5
5
  import type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';
6
6
  import type { AppDelegateProjectFile } from '../ios/Paths';
7
- declare type MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => InfoPlist;
7
+ declare type MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => Promise<InfoPlist> | InfoPlist;
8
8
  /**
9
9
  * Helper method for creating mods from existing config functions.
10
10
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":"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","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject, JSONValue } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (expo: ExpoConfig, infoPlist: InfoPlist) => InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withInfoPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n action: MutateEntitlementsPlistAction,\n name: string\n): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withEntitlementsPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'appDelegate',\n action,\n });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n return withMod<InfoPlist>(config, {\n platform: 'ios',\n mod: 'infoPlist',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n return withMod<JSONObject>(config, {\n platform: 'ios',\n mod: 'entitlements',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'expoPlist',\n action,\n });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n action,\n });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>> = (\n config,\n action\n) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'podfileProperties',\n action,\n });\n};\n"],"file":"ios-plugins.js"}
1
+ {"version":3,"sources":["../../src/plugins/ios-plugins.ts"],"names":["createInfoPlistPlugin","action","name","withUnknown","config","withInfoPlist","modResults","Object","defineProperty","value","createEntitlementsPlugin","withEntitlementsPlist","withAppDelegate","platform","mod","ios","infoPlist","entitlements","withExpoPlist","withXcodeProject","withPodfileProperties"],"mappings":"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","sourcesContent":["import type { ExpoConfig } from '@expo/config-types';\nimport type { JSONObject, JSONValue } from '@expo/json-file';\nimport type { XcodeProject } from 'xcode';\n\nimport type { ConfigPlugin, Mod } from '../Plugin.types';\nimport type { ExpoPlist, InfoPlist } from '../ios/IosConfig.types';\nimport type { AppDelegateProjectFile } from '../ios/Paths';\nimport { withMod } from './withMod';\n\ntype MutateInfoPlistAction = (\n expo: ExpoConfig,\n infoPlist: InfoPlist\n) => Promise<InfoPlist> | InfoPlist;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createInfoPlistPlugin(action: MutateInfoPlistAction, name?: string): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withInfoPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\ntype MutateEntitlementsPlistAction = (expo: ExpoConfig, entitlements: JSONObject) => JSONObject;\n\n/**\n * Helper method for creating mods from existing config functions.\n *\n * @param action\n */\nexport function createEntitlementsPlugin(\n action: MutateEntitlementsPlistAction,\n name: string\n): ConfigPlugin {\n const withUnknown: ConfigPlugin = config =>\n withEntitlementsPlist(config, async config => {\n config.modResults = await action(config, config.modResults);\n return config;\n });\n if (name) {\n Object.defineProperty(withUnknown, 'name', {\n value: name,\n });\n }\n return withUnknown;\n}\n\n/**\n * Provides the AppDelegate file for modification.\n *\n * @param config\n * @param action\n */\nexport const withAppDelegate: ConfigPlugin<Mod<AppDelegateProjectFile>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'appDelegate',\n action,\n });\n};\n\n/**\n * Provides the Info.plist file for modification.\n * Keeps the config's expo.ios.infoPlist object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withInfoPlist: ConfigPlugin<Mod<InfoPlist>> = (config, action) => {\n return withMod<InfoPlist>(config, {\n platform: 'ios',\n mod: 'infoPlist',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.infoPlist = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the main .entitlements file for modification.\n * Keeps the config's expo.ios.entitlements object in sync with the data.\n *\n * @param config\n * @param action\n */\nexport const withEntitlementsPlist: ConfigPlugin<Mod<JSONObject>> = (config, action) => {\n return withMod<JSONObject>(config, {\n platform: 'ios',\n mod: 'entitlements',\n async action(config) {\n config = await action(config);\n if (!config.ios) {\n config.ios = {};\n }\n config.ios.entitlements = config.modResults;\n return config;\n },\n });\n};\n\n/**\n * Provides the Expo.plist for modification.\n *\n * @param config\n * @param action\n */\nexport const withExpoPlist: ConfigPlugin<Mod<ExpoPlist>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'expoPlist',\n action,\n });\n};\n\n/**\n * Provides the main .xcodeproj for modification.\n *\n * @param config\n * @param action\n */\nexport const withXcodeProject: ConfigPlugin<Mod<XcodeProject>> = (config, action) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'xcodeproj',\n action,\n });\n};\n\n/**\n * Provides the Podfile.properties.json for modification.\n *\n * @param config\n * @param action\n */\nexport const withPodfileProperties: ConfigPlugin<Mod<Record<string, JSONValue>>> = (\n config,\n action\n) => {\n return withMod(config, {\n platform: 'ios',\n mod: 'podfileProperties',\n action,\n });\n};\n"],"file":"ios-plugins.js"}
@@ -85,9 +85,6 @@ function getAndroidManifestTemplate(config) {
85
85
  <uses-permission android:name="android.permission.INTERNET"/>
86
86
  <!-- OPTIONAL PERMISSIONS, REMOVE WHATEVER YOU DO NOT NEED -->
87
87
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
88
- <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
89
- <uses-permission android:name="android.permission.VIBRATE"/>
90
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
91
88
  <!-- These require runtime permissions on M -->
92
89
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
93
90
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>