@expo/config-plugins 5.0.4 → 6.0.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 (190) hide show
  1. package/build/Plugin.types.d.ts +7 -7
  2. package/build/Plugin.types.js +0 -9
  3. package/build/Plugin.types.js.map +1 -1
  4. package/build/android/AllowBackup.js +0 -15
  5. package/build/android/AllowBackup.js.map +1 -1
  6. package/build/android/BuildProperties.js +2 -16
  7. package/build/android/BuildProperties.js.map +1 -1
  8. package/build/android/Colors.js +3 -25
  9. package/build/android/Colors.js.map +1 -1
  10. package/build/android/EasBuild.js +2 -22
  11. package/build/android/EasBuild.js.map +1 -1
  12. package/build/android/EasBuildGradleScript.js.map +1 -1
  13. package/build/android/GoogleMapsApiKey.js +0 -12
  14. package/build/android/GoogleMapsApiKey.js.map +1 -1
  15. package/build/android/GoogleServices.js +10 -48
  16. package/build/android/GoogleServices.js.map +1 -1
  17. package/build/android/IntentFilters.d.ts +1 -1
  18. package/build/android/IntentFilters.js +8 -24
  19. package/build/android/IntentFilters.js.map +1 -1
  20. package/build/android/Manifest.d.ts +19 -19
  21. package/build/android/Manifest.js +7 -66
  22. package/build/android/Manifest.js.map +1 -1
  23. package/build/android/Name.js +6 -27
  24. package/build/android/Name.js.map +1 -1
  25. package/build/android/Orientation.js +2 -12
  26. package/build/android/Orientation.js.map +1 -1
  27. package/build/android/Package.js +26 -111
  28. package/build/android/Package.js.map +1 -1
  29. package/build/android/Paths.d.ts +2 -2
  30. package/build/android/Paths.js +0 -47
  31. package/build/android/Paths.js.map +1 -1
  32. package/build/android/Permissions.js +8 -52
  33. package/build/android/Permissions.js.map +1 -1
  34. package/build/android/PrimaryColor.js +0 -18
  35. package/build/android/PrimaryColor.js.map +1 -1
  36. package/build/android/Properties.d.ts +1 -1
  37. package/build/android/Properties.js +0 -9
  38. package/build/android/Properties.js.map +1 -1
  39. package/build/android/Resources.d.ts +4 -4
  40. package/build/android/Resources.js +9 -29
  41. package/build/android/Resources.js.map +1 -1
  42. package/build/android/Scheme.d.ts +1 -1
  43. package/build/android/Scheme.js +13 -66
  44. package/build/android/Scheme.js.map +1 -1
  45. package/build/android/StatusBar.js +5 -33
  46. package/build/android/StatusBar.js.map +1 -1
  47. package/build/android/Strings.js +0 -14
  48. package/build/android/Strings.js.map +1 -1
  49. package/build/android/Styles.js +7 -34
  50. package/build/android/Styles.js.map +1 -1
  51. package/build/android/Updates.d.ts +2 -0
  52. package/build/android/Updates.js +50 -47
  53. package/build/android/Updates.js.map +1 -1
  54. package/build/android/Version.js +3 -29
  55. package/build/android/Version.js.map +1 -1
  56. package/build/android/WindowSoftInputMode.js +0 -14
  57. package/build/android/WindowSoftInputMode.js.map +1 -1
  58. package/build/android/codeMod.js +6 -22
  59. package/build/android/codeMod.js.map +1 -1
  60. package/build/android/index.js +0 -94
  61. package/build/android/index.js.map +1 -1
  62. package/build/index.js +2 -65
  63. package/build/index.js.map +1 -1
  64. package/build/ios/Bitcode.d.ts +1 -1
  65. package/build/ios/Bitcode.js +8 -28
  66. package/build/ios/Bitcode.js.map +1 -1
  67. package/build/ios/BuildProperties.js +2 -14
  68. package/build/ios/BuildProperties.js.map +1 -1
  69. package/build/ios/BuildScheme.js +2 -34
  70. package/build/ios/BuildScheme.js.map +1 -1
  71. package/build/ios/BundleIdentifier.js +13 -72
  72. package/build/ios/BundleIdentifier.js.map +1 -1
  73. package/build/ios/DeviceFamily.js +6 -24
  74. package/build/ios/DeviceFamily.js.map +1 -1
  75. package/build/ios/Entitlements.js +4 -45
  76. package/build/ios/Entitlements.js.map +1 -1
  77. package/build/ios/Google.d.ts +2 -2
  78. package/build/ios/Google.js +11 -66
  79. package/build/ios/Google.js.map +1 -1
  80. package/build/ios/IosConfig.types.d.ts +6 -11
  81. package/build/ios/IosConfig.types.js.map +1 -1
  82. package/build/ios/Locales.d.ts +3 -3
  83. package/build/ios/Locales.js +12 -43
  84. package/build/ios/Locales.js.map +1 -1
  85. package/build/ios/Maps.js +16 -56
  86. package/build/ios/Maps.js.map +1 -1
  87. package/build/ios/Name.js +7 -31
  88. package/build/ios/Name.js.map +1 -1
  89. package/build/ios/Orientation.js +2 -10
  90. package/build/ios/Orientation.js.map +1 -1
  91. package/build/ios/Paths.d.ts +2 -2
  92. package/build/ios/Paths.js +8 -73
  93. package/build/ios/Paths.js.map +1 -1
  94. package/build/ios/Permissions.js +1 -16
  95. package/build/ios/Permissions.js.map +1 -1
  96. package/build/ios/ProvisioningProfile.d.ts +1 -1
  97. package/build/ios/ProvisioningProfile.js +0 -18
  98. package/build/ios/ProvisioningProfile.js.map +1 -1
  99. package/build/ios/RequiresFullScreen.js +19 -31
  100. package/build/ios/RequiresFullScreen.js.map +1 -1
  101. package/build/ios/Scheme.js +10 -32
  102. package/build/ios/Scheme.js.map +1 -1
  103. package/build/ios/Swift.js +16 -50
  104. package/build/ios/Swift.js.map +1 -1
  105. package/build/ios/Target.js +0 -30
  106. package/build/ios/Target.js.map +1 -1
  107. package/build/ios/Updates.js +10 -49
  108. package/build/ios/Updates.js.map +1 -1
  109. package/build/ios/UsesNonExemptEncryption.js +4 -10
  110. package/build/ios/UsesNonExemptEncryption.js.map +1 -1
  111. package/build/ios/Version.js +4 -11
  112. package/build/ios/Version.js.map +1 -1
  113. package/build/ios/XcodeProjectFile.js +5 -23
  114. package/build/ios/XcodeProjectFile.js.map +1 -1
  115. package/build/ios/codeMod.js +19 -60
  116. package/build/ios/codeMod.js.map +1 -1
  117. package/build/ios/index.js +0 -97
  118. package/build/ios/index.js.map +1 -1
  119. package/build/ios/utils/Xcodeproj.d.ts +6 -6
  120. package/build/ios/utils/Xcodeproj.js +15 -101
  121. package/build/ios/utils/Xcodeproj.js.map +1 -1
  122. package/build/ios/utils/getInfoPlistPath.js +2 -15
  123. package/build/ios/utils/getInfoPlistPath.js.map +1 -1
  124. package/build/ios/utils/string.js +0 -1
  125. package/build/ios/utils/string.js.map +1 -1
  126. package/build/plugins/android-plugins.d.ts +2 -2
  127. package/build/plugins/android-plugins.js +11 -42
  128. package/build/plugins/android-plugins.js.map +1 -1
  129. package/build/plugins/createBaseMod.d.ts +3 -3
  130. package/build/plugins/createBaseMod.js +8 -25
  131. package/build/plugins/createBaseMod.js.map +1 -1
  132. package/build/plugins/ios-plugins.d.ts +2 -2
  133. package/build/plugins/ios-plugins.js +8 -48
  134. package/build/plugins/ios-plugins.js.map +1 -1
  135. package/build/plugins/mod-compiler.js +21 -72
  136. package/build/plugins/mod-compiler.js.map +1 -1
  137. package/build/plugins/withAndroidBaseMods.d.ts +1 -1
  138. package/build/plugins/withAndroidBaseMods.js +4 -89
  139. package/build/plugins/withAndroidBaseMods.js.map +1 -1
  140. package/build/plugins/withDangerousMod.js +0 -5
  141. package/build/plugins/withDangerousMod.js.map +1 -1
  142. package/build/plugins/withIosBaseMods.d.ts +1 -1
  143. package/build/plugins/withIosBaseMods.js +26 -118
  144. package/build/plugins/withIosBaseMods.js.map +1 -1
  145. package/build/plugins/withMod.d.ts +1 -1
  146. package/build/plugins/withMod.js +24 -59
  147. package/build/plugins/withMod.js.map +1 -1
  148. package/build/plugins/withPlugins.js +0 -9
  149. package/build/plugins/withPlugins.js.map +1 -1
  150. package/build/plugins/withRunOnce.js +3 -9
  151. package/build/plugins/withRunOnce.js.map +1 -1
  152. package/build/plugins/withStaticPlugin.js +21 -43
  153. package/build/plugins/withStaticPlugin.js.map +1 -1
  154. package/build/utils/BuildProperties.types.d.ts +2 -2
  155. package/build/utils/BuildProperties.types.js.map +1 -1
  156. package/build/utils/Updates.d.ts +3 -1
  157. package/build/utils/Updates.js +18 -77
  158. package/build/utils/Updates.js.map +1 -1
  159. package/build/utils/XML.d.ts +1 -1
  160. package/build/utils/XML.js +7 -44
  161. package/build/utils/XML.js.map +1 -1
  162. package/build/utils/commonCodeMod.js +2 -10
  163. package/build/utils/commonCodeMod.js.map +1 -1
  164. package/build/utils/errors.d.ts +1 -1
  165. package/build/utils/errors.js +3 -11
  166. package/build/utils/errors.js.map +1 -1
  167. package/build/utils/fs.js +1 -12
  168. package/build/utils/fs.js.map +1 -1
  169. package/build/utils/generateCode.d.ts +1 -1
  170. package/build/utils/generateCode.js +8 -25
  171. package/build/utils/generateCode.js.map +1 -1
  172. package/build/utils/history.d.ts +1 -1
  173. package/build/utils/history.js +0 -6
  174. package/build/utils/history.js.map +1 -1
  175. package/build/utils/matchBrackets.d.ts +3 -3
  176. package/build/utils/matchBrackets.js +2 -17
  177. package/build/utils/matchBrackets.js.map +1 -1
  178. package/build/utils/modules.js +0 -10
  179. package/build/utils/modules.js.map +1 -1
  180. package/build/utils/obj.js +0 -4
  181. package/build/utils/obj.js.map +1 -1
  182. package/build/utils/plugin-resolver.js +25 -69
  183. package/build/utils/plugin-resolver.js.map +1 -1
  184. package/build/utils/sortObject.js +4 -10
  185. package/build/utils/sortObject.js.map +1 -1
  186. package/build/utils/versions.js +0 -10
  187. package/build/utils/versions.js.map +1 -1
  188. package/build/utils/warnings.js +1 -9
  189. package/build/utils/warnings.js.map +1 -1
  190. package/package.json +5 -5
@@ -7,69 +7,49 @@ exports.getLocales = getLocales;
7
7
  exports.getResolvedLocalesAsync = getResolvedLocalesAsync;
8
8
  exports.setLocalesAsync = setLocalesAsync;
9
9
  exports.withLocales = void 0;
10
-
11
10
  function _jsonFile() {
12
11
  const data = _interopRequireDefault(require("@expo/json-file"));
13
-
14
12
  _jsonFile = function () {
15
13
  return data;
16
14
  };
17
-
18
15
  return data;
19
16
  }
20
-
21
17
  function _fs() {
22
18
  const data = _interopRequireDefault(require("fs"));
23
-
24
19
  _fs = function () {
25
20
  return data;
26
21
  };
27
-
28
22
  return data;
29
23
  }
30
-
31
24
  function _path() {
32
25
  const data = require("path");
33
-
34
26
  _path = function () {
35
27
  return data;
36
28
  };
37
-
38
29
  return data;
39
30
  }
40
-
41
31
  function _iosPlugins() {
42
32
  const data = require("../plugins/ios-plugins");
43
-
44
33
  _iosPlugins = function () {
45
34
  return data;
46
35
  };
47
-
48
36
  return data;
49
37
  }
50
-
51
38
  function _warnings() {
52
39
  const data = require("../utils/warnings");
53
-
54
40
  _warnings = function () {
55
41
  return data;
56
42
  };
57
-
58
43
  return data;
59
44
  }
60
-
61
45
  function _Xcodeproj() {
62
46
  const data = require("./utils/Xcodeproj");
63
-
64
47
  _Xcodeproj = function () {
65
48
  return data;
66
49
  };
67
-
68
50
  return data;
69
51
  }
70
-
71
52
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
72
-
73
53
  const withLocales = config => {
74
54
  return (0, _iosPlugins().withXcodeProject)(config, async config => {
75
55
  config.modResults = await setLocalesAsync(config, {
@@ -79,51 +59,44 @@ const withLocales = config => {
79
59
  return config;
80
60
  });
81
61
  };
82
-
83
62
  exports.withLocales = withLocales;
84
-
85
63
  function getLocales(config) {
86
64
  var _config$locales;
87
-
88
65
  return (_config$locales = config.locales) !== null && _config$locales !== void 0 ? _config$locales : null;
89
66
  }
90
-
91
67
  async function setLocalesAsync(config, {
92
68
  projectRoot,
93
69
  project
94
70
  }) {
95
71
  const locales = getLocales(config);
96
-
97
72
  if (!locales) {
98
73
  return project;
99
- } // possibly validate CFBundleAllowMixedLocalizations is enabled
100
-
101
-
74
+ }
75
+ // possibly validate CFBundleAllowMixedLocalizations is enabled
102
76
  const localesMap = await getResolvedLocalesAsync(projectRoot, locales);
103
77
  const projectName = (0, _Xcodeproj().getProjectName)(projectRoot);
104
- const supportingDirectory = (0, _path().join)(projectRoot, 'ios', projectName, 'Supporting'); // TODO: Should we delete all before running? Revisit after we land on a lock file.
78
+ const supportingDirectory = (0, _path().join)(projectRoot, 'ios', projectName, 'Supporting');
105
79
 
80
+ // TODO: Should we delete all before running? Revisit after we land on a lock file.
106
81
  const stringName = 'InfoPlist.strings';
107
-
108
82
  for (const [lang, localizationObj] of Object.entries(localesMap)) {
109
- const dir = (0, _path().join)(supportingDirectory, `${lang}.lproj`); // await fs.ensureDir(dir);
110
-
83
+ const dir = (0, _path().join)(supportingDirectory, `${lang}.lproj`);
84
+ // await fs.ensureDir(dir);
111
85
  await _fs().default.promises.mkdir(dir, {
112
86
  recursive: true
113
87
  });
114
88
  const strings = (0, _path().join)(dir, stringName);
115
89
  const buffer = [];
116
-
117
90
  for (const [plistKey, localVersion] of Object.entries(localizationObj)) {
118
91
  buffer.push(`${plistKey} = "${localVersion}";`);
119
- } // Write the file to the file system.
120
-
121
-
92
+ }
93
+ // Write the file to the file system.
122
94
  await _fs().default.promises.writeFile(strings, buffer.join('\n'));
123
- const groupName = `${projectName}/Supporting/${lang}.lproj`; // deep find the correct folder
124
-
125
- const group = (0, _Xcodeproj().ensureGroupRecursively)(project, groupName); // Ensure the file doesn't already exist
95
+ const groupName = `${projectName}/Supporting/${lang}.lproj`;
96
+ // deep find the correct folder
97
+ const group = (0, _Xcodeproj().ensureGroupRecursively)(project, groupName);
126
98
 
99
+ // Ensure the file doesn't already exist
127
100
  if (!(group !== null && group !== void 0 && group.children.some(({
128
101
  comment
129
102
  }) => comment === stringName))) {
@@ -137,13 +110,10 @@ async function setLocalesAsync(config, {
137
110
  });
138
111
  }
139
112
  }
140
-
141
113
  return project;
142
114
  }
143
-
144
115
  async function getResolvedLocalesAsync(projectRoot, input) {
145
116
  const locales = {};
146
-
147
117
  for (const [lang, localeJsonPath] of Object.entries(input)) {
148
118
  if (typeof localeJsonPath === 'string') {
149
119
  try {
@@ -158,7 +128,6 @@ async function getResolvedLocalesAsync(projectRoot, input) {
158
128
  locales[lang] = localeJsonPath;
159
129
  }
160
130
  }
161
-
162
131
  return locales;
163
132
  }
164
133
  //# sourceMappingURL=Locales.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Locales.js","names":["withLocales","config","withXcodeProject","modResults","setLocalesAsync","projectRoot","modRequest","project","getLocales","locales","localesMap","getResolvedLocalesAsync","projectName","getProjectName","supportingDirectory","join","stringName","lang","localizationObj","Object","entries","dir","fs","promises","mkdir","recursive","strings","buffer","plistKey","localVersion","push","writeFile","groupName","group","ensureGroupRecursively","children","some","comment","addResourceFileToGroup","filepath","relative","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","addWarningIOS"],"sources":["../../src/ios/Locales.ts"],"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 {\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"],"mappings":"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"}
1
+ {"version":3,"file":"Locales.js","names":["withLocales","config","withXcodeProject","modResults","setLocalesAsync","projectRoot","modRequest","project","getLocales","locales","localesMap","getResolvedLocalesAsync","projectName","getProjectName","supportingDirectory","join","stringName","lang","localizationObj","Object","entries","dir","fs","promises","mkdir","recursive","strings","buffer","plistKey","localVersion","push","writeFile","groupName","group","ensureGroupRecursively","children","some","comment","addResourceFileToGroup","filepath","relative","isBuildFile","verbose","input","localeJsonPath","JsonFile","readAsync","addWarningIOS"],"sources":["../../src/ios/Locales.ts"],"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 {\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"],"mappings":"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"}
package/build/ios/Maps.js CHANGED
@@ -13,114 +13,87 @@ exports.removeGoogleMapsAppDelegateInit = removeGoogleMapsAppDelegateInit;
13
13
  exports.removeMapsCocoaPods = removeMapsCocoaPods;
14
14
  exports.setGoogleMapsApiKey = setGoogleMapsApiKey;
15
15
  exports.withMaps = void 0;
16
-
17
16
  function _fs() {
18
17
  const data = _interopRequireDefault(require("fs"));
19
-
20
18
  _fs = function () {
21
19
  return data;
22
20
  };
23
-
24
21
  return data;
25
22
  }
26
-
27
23
  function _path() {
28
24
  const data = _interopRequireDefault(require("path"));
29
-
30
25
  _path = function () {
31
26
  return data;
32
27
  };
33
-
34
28
  return data;
35
29
  }
36
-
37
30
  function _resolveFrom() {
38
31
  const data = _interopRequireDefault(require("resolve-from"));
39
-
40
32
  _resolveFrom = function () {
41
33
  return data;
42
34
  };
43
-
44
35
  return data;
45
36
  }
46
-
47
37
  function _iosPlugins() {
48
38
  const data = require("../plugins/ios-plugins");
49
-
50
39
  _iosPlugins = function () {
51
40
  return data;
52
41
  };
53
-
54
42
  return data;
55
43
  }
56
-
57
44
  function _withDangerousMod() {
58
45
  const data = require("../plugins/withDangerousMod");
59
-
60
46
  _withDangerousMod = function () {
61
47
  return data;
62
48
  };
63
-
64
49
  return data;
65
50
  }
66
-
67
51
  function _generateCode() {
68
52
  const data = require("../utils/generateCode");
69
-
70
53
  _generateCode = function () {
71
54
  return data;
72
55
  };
73
-
74
56
  return data;
75
57
  }
76
-
77
58
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
78
-
79
- const debug = require('debug')('expo:config-plugins:ios:maps'); // Match against `UMModuleRegistryAdapter` (unimodules), and React Native without unimodules (Expo Modules), and SDK +44 React AppDelegate subscriber.
80
-
81
-
82
- const MATCH_INIT = /(?:(self\.|_)(\w+)\s?=\s?\[\[UMModuleRegistryAdapter alloc\])|(?:RCTBridge\s?\*\s?(\w+)\s?=\s?\[\[RCTBridge alloc\])|(\[self\.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions\])/g;
59
+ const debug = require('debug')('expo:config-plugins:ios:maps');
60
+ const MATCH_INIT = /-\s*\(BOOL\)\s*application:\s*\(UIApplication\s*\*\s*\)\s*\w+\s+didFinishLaunchingWithOptions:/g;
83
61
  exports.MATCH_INIT = MATCH_INIT;
84
62
  const withGoogleMapsKey = (0, _iosPlugins().createInfoPlistPlugin)(setGoogleMapsApiKey, 'withGoogleMapsKey');
85
-
86
63
  const withMaps = config => {
87
64
  config = withGoogleMapsKey(config);
88
- const apiKey = getGoogleMapsApiKey(config); // Technically adds react-native-maps (Apple maps) and google maps.
65
+ const apiKey = getGoogleMapsApiKey(config);
66
+ // Technically adds react-native-maps (Apple maps) and google maps.
89
67
 
90
68
  debug('Google Maps API Key:', apiKey);
91
69
  config = withMapsCocoaPods(config, {
92
70
  useGoogleMaps: !!apiKey
93
- }); // Adds/Removes AppDelegate setup for Google Maps API on iOS
71
+ });
94
72
 
73
+ // Adds/Removes AppDelegate setup for Google Maps API on iOS
95
74
  config = withGoogleMapsAppDelegate(config, {
96
75
  apiKey
97
76
  });
98
77
  return config;
99
78
  };
100
-
101
79
  exports.withMaps = withMaps;
102
-
103
80
  function getGoogleMapsApiKey(config) {
104
81
  var _config$ios$config$go, _config$ios, _config$ios$config;
105
-
106
82
  return (_config$ios$config$go = (_config$ios = config.ios) === null || _config$ios === void 0 ? void 0 : (_config$ios$config = _config$ios.config) === null || _config$ios$config === void 0 ? void 0 : _config$ios$config.googleMapsApiKey) !== null && _config$ios$config$go !== void 0 ? _config$ios$config$go : null;
107
83
  }
108
-
109
84
  function setGoogleMapsApiKey(config, {
110
85
  GMSApiKey,
111
86
  ...infoPlist
112
87
  }) {
113
88
  const apiKey = getGoogleMapsApiKey(config);
114
-
115
89
  if (apiKey === null) {
116
90
  return infoPlist;
117
91
  }
118
-
119
- return { ...infoPlist,
92
+ return {
93
+ ...infoPlist,
120
94
  GMSApiKey: apiKey
121
95
  };
122
96
  }
123
-
124
97
  function addGoogleMapsAppDelegateImport(src) {
125
98
  const newSrc = [];
126
99
  newSrc.push('#if __has_include(<GoogleMaps/GoogleMaps.h>)', '#import <GoogleMaps/GoogleMaps.h>', '#endif');
@@ -133,14 +106,12 @@ function addGoogleMapsAppDelegateImport(src) {
133
106
  comment: '//'
134
107
  });
135
108
  }
136
-
137
109
  function removeGoogleMapsAppDelegateImport(src) {
138
110
  return (0, _generateCode().removeContents)({
139
111
  tag: 'react-native-maps-import',
140
112
  src
141
113
  });
142
114
  }
143
-
144
115
  function addGoogleMapsAppDelegateInit(src, apiKey) {
145
116
  const newSrc = [];
146
117
  newSrc.push('#if __has_include(<GoogleMaps/GoogleMaps.h>)', ` [GMSServices provideAPIKey:@"${apiKey}"];`, '#endif');
@@ -149,23 +120,21 @@ function addGoogleMapsAppDelegateInit(src, apiKey) {
149
120
  src,
150
121
  newSrc: newSrc.join('\n'),
151
122
  anchor: MATCH_INIT,
152
- offset: 0,
123
+ offset: 2,
153
124
  comment: '//'
154
125
  });
155
126
  }
156
-
157
127
  function removeGoogleMapsAppDelegateInit(src) {
158
128
  return (0, _generateCode().removeContents)({
159
129
  tag: 'react-native-maps-init',
160
130
  src
161
131
  });
162
132
  }
133
+
163
134
  /**
164
135
  * @param src The contents of the Podfile.
165
136
  * @returns Podfile with Google Maps added.
166
137
  */
167
-
168
-
169
138
  function addMapsCocoaPods(src) {
170
139
  return (0, _generateCode().mergeContents)({
171
140
  tag: 'react-native-maps',
@@ -176,27 +145,26 @@ function addMapsCocoaPods(src) {
176
145
  comment: '#'
177
146
  });
178
147
  }
179
-
180
148
  function removeMapsCocoaPods(src) {
181
149
  return (0, _generateCode().removeContents)({
182
150
  tag: 'react-native-maps',
183
151
  src
184
152
  });
185
153
  }
186
-
187
154
  function isReactNativeMapsInstalled(projectRoot) {
188
155
  const resolved = _resolveFrom().default.silent(projectRoot, 'react-native-maps/package.json');
189
-
190
156
  return resolved ? _path().default.dirname(resolved) : null;
191
157
  }
192
-
193
158
  function isReactNativeMapsAutolinked(config) {
194
159
  // Only add the native code changes if we know that the package is going to be linked natively.
195
160
  // This is specifically for monorepo support where one app might have react-native-maps (adding it to the node_modules)
196
161
  // but another app will not have it installed in the package.json, causing it to not be linked natively.
197
162
  // This workaround only exists because react-native-maps doesn't have a config plugin vendored in the package.
163
+
198
164
  // TODO: `react-native-maps` doesn't use Expo autolinking so we cannot safely disable the module.
199
- return true; // return (
165
+ return true;
166
+
167
+ // return (
200
168
  // !config._internal?.autolinkedModules ||
201
169
  // config._internal.autolinkedModules.includes('react-native-maps')
202
170
  // );
@@ -207,16 +175,14 @@ const withMapsCocoaPods = (config, {
207
175
  }) => {
208
176
  return (0, _withDangerousMod().withDangerousMod)(config, ['ios', async config => {
209
177
  const filePath = _path().default.join(config.modRequest.platformProjectRoot, 'Podfile');
210
-
211
178
  const contents = await _fs().default.promises.readFile(filePath, 'utf-8');
212
- let results; // Only add the block if react-native-maps is installed in the project (best effort).
179
+ let results;
180
+ // Only add the block if react-native-maps is installed in the project (best effort).
213
181
  // Generally prebuild runs after a yarn install so this should always work as expected.
214
-
215
182
  const googleMapsPath = isReactNativeMapsInstalled(config.modRequest.projectRoot);
216
183
  const isLinked = isReactNativeMapsAutolinked(config);
217
184
  debug('Is Expo Autolinked:', isLinked);
218
185
  debug('react-native-maps path:', googleMapsPath);
219
-
220
186
  if (isLinked && googleMapsPath && useGoogleMaps) {
221
187
  try {
222
188
  results = addMapsCocoaPods(contents);
@@ -224,22 +190,18 @@ const withMapsCocoaPods = (config, {
224
190
  if (error.code === 'ERR_NO_MATCH') {
225
191
  throw new Error(`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.`);
226
192
  }
227
-
228
193
  throw error;
229
194
  }
230
195
  } else {
231
196
  // If the package is no longer installed, then remove the block.
232
197
  results = removeMapsCocoaPods(contents);
233
198
  }
234
-
235
199
  if (results.didMerge || results.didClear) {
236
200
  await _fs().default.promises.writeFile(filePath, results.contents);
237
201
  }
238
-
239
202
  return config;
240
203
  }]);
241
204
  };
242
-
243
205
  const withGoogleMapsAppDelegate = (config, {
244
206
  apiKey
245
207
  }) => {
@@ -253,7 +215,6 @@ const withGoogleMapsAppDelegate = (config, {
253
215
  if (error.code === 'ERR_NO_MATCH') {
254
216
  throw new Error(`Cannot add Google Maps to the project's AppDelegate because it's malformed. Please report this with a copy of your project AppDelegate.`);
255
217
  }
256
-
257
218
  throw error;
258
219
  }
259
220
  } else {
@@ -263,7 +224,6 @@ const withGoogleMapsAppDelegate = (config, {
263
224
  } else {
264
225
  throw new Error(`Cannot setup Google Maps because the project AppDelegate is not a supported language: ${config.modResults.language}`);
265
226
  }
266
-
267
227
  return config;
268
228
  });
269
229
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Maps.js","names":["debug","require","MATCH_INIT","withGoogleMapsKey","createInfoPlistPlugin","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","mergeContents","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","removeContents","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","withDangerousMod","filePath","modRequest","platformProjectRoot","contents","fs","promises","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","withAppDelegate","includes","modResults","language"],"sources":["../../src/ios/Maps.ts"],"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 =\n /(?:(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"],"mappings":"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"}
1
+ {"version":3,"file":"Maps.js","names":["debug","require","MATCH_INIT","withGoogleMapsKey","createInfoPlistPlugin","setGoogleMapsApiKey","withMaps","config","apiKey","getGoogleMapsApiKey","withMapsCocoaPods","useGoogleMaps","withGoogleMapsAppDelegate","ios","googleMapsApiKey","GMSApiKey","infoPlist","addGoogleMapsAppDelegateImport","src","newSrc","push","mergeContents","tag","join","anchor","offset","comment","removeGoogleMapsAppDelegateImport","removeContents","addGoogleMapsAppDelegateInit","removeGoogleMapsAppDelegateInit","addMapsCocoaPods","removeMapsCocoaPods","isReactNativeMapsInstalled","projectRoot","resolved","resolveFrom","silent","path","dirname","isReactNativeMapsAutolinked","withDangerousMod","filePath","modRequest","platformProjectRoot","contents","fs","promises","readFile","results","googleMapsPath","isLinked","error","code","Error","didMerge","didClear","writeFile","withAppDelegate","includes","modResults","language"],"sources":["../../src/ios/Maps.ts"],"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\nexport const MATCH_INIT =\n /-\\s*\\(BOOL\\)\\s*application:\\s*\\(UIApplication\\s*\\*\\s*\\)\\s*\\w+\\s+didFinishLaunchingWithOptions:/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: 2,\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"],"mappings":"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"}
package/build/ios/Name.js CHANGED
@@ -8,37 +8,27 @@ exports.setDisplayName = setDisplayName;
8
8
  exports.setName = setName;
9
9
  exports.setProductName = setProductName;
10
10
  exports.withProductName = exports.withName = exports.withDisplayName = void 0;
11
-
12
11
  function _iosPlugins() {
13
12
  const data = require("../plugins/ios-plugins");
14
-
15
13
  _iosPlugins = function () {
16
14
  return data;
17
15
  };
18
-
19
16
  return data;
20
17
  }
21
-
22
18
  function _Target() {
23
19
  const data = require("./Target");
24
-
25
20
  _Target = function () {
26
21
  return data;
27
22
  };
28
-
29
23
  return data;
30
24
  }
31
-
32
25
  function _Xcodeproj() {
33
26
  const data = require("./utils/Xcodeproj");
34
-
35
27
  _Xcodeproj = function () {
36
28
  return data;
37
29
  };
38
-
39
30
  return data;
40
31
  }
41
-
42
32
  const withDisplayName = (0, _iosPlugins().createInfoPlistPluginWithPropertyGuard)(setDisplayName, {
43
33
  infoPlistProperty: 'CFBundleDisplayName',
44
34
  expoConfigProperty: 'name'
@@ -48,78 +38,66 @@ const withName = (0, _iosPlugins().createInfoPlistPluginWithPropertyGuard)(setNa
48
38
  infoPlistProperty: 'CFBundleName',
49
39
  expoConfigProperty: 'name'
50
40
  }, 'withName');
51
- /** Set the PRODUCT_NAME variable in the xcproj file based on the app.json name property. */
52
41
 
42
+ /** Set the PRODUCT_NAME variable in the xcproj file based on the app.json name property. */
53
43
  exports.withName = withName;
54
-
55
44
  const withProductName = config => {
56
45
  return (0, _iosPlugins().withXcodeProject)(config, config => {
57
46
  config.modResults = setProductName(config, config.modResults);
58
47
  return config;
59
48
  });
60
49
  };
61
-
62
50
  exports.withProductName = withProductName;
63
-
64
51
  function getName(config) {
65
52
  return typeof config.name === 'string' ? config.name : null;
66
53
  }
54
+
67
55
  /**
68
56
  * CFBundleDisplayName is used for most things: the name on the home screen, in
69
57
  * notifications, and others.
70
58
  */
71
-
72
-
73
59
  function setDisplayName(configOrName, {
74
60
  CFBundleDisplayName,
75
61
  ...infoPlist
76
62
  }) {
77
63
  let name = null;
78
-
79
64
  if (typeof configOrName === 'string') {
80
65
  name = configOrName;
81
66
  } else {
82
67
  name = getName(configOrName);
83
68
  }
84
-
85
69
  if (!name) {
86
70
  return infoPlist;
87
71
  }
88
-
89
- return { ...infoPlist,
72
+ return {
73
+ ...infoPlist,
90
74
  CFBundleDisplayName: name
91
75
  };
92
76
  }
77
+
93
78
  /**
94
79
  * CFBundleName is recommended to be 16 chars or less and is used in lists, eg:
95
80
  * sometimes on the App Store
96
81
  */
97
-
98
-
99
82
  function setName(config, {
100
83
  CFBundleName,
101
84
  ...infoPlist
102
85
  }) {
103
86
  const name = getName(config);
104
-
105
87
  if (!name) {
106
88
  return infoPlist;
107
89
  }
108
-
109
- return { ...infoPlist,
90
+ return {
91
+ ...infoPlist,
110
92
  CFBundleName: name
111
93
  };
112
94
  }
113
-
114
95
  function setProductName(config, project) {
115
96
  var _getName;
116
-
117
97
  const name = (0, _Xcodeproj().sanitizedName)((_getName = getName(config)) !== null && _getName !== void 0 ? _getName : '');
118
-
119
98
  if (!name) {
120
99
  return project;
121
100
  }
122
-
123
101
  const quotedName = ensureQuotes(name);
124
102
  const [, nativeTarget] = (0, _Target().findFirstNativeTarget)(project);
125
103
  (0, _Xcodeproj().getBuildConfigurationsForListId)(project, nativeTarget.buildConfigurationList).forEach(([, item]) => {
@@ -127,12 +105,10 @@ function setProductName(config, project) {
127
105
  });
128
106
  return project;
129
107
  }
130
-
131
108
  const ensureQuotes = value => {
132
109
  if (!value.match(/^['"]/)) {
133
110
  return `"${value}"`;
134
111
  }
135
-
136
112
  return value;
137
113
  };
138
114
  //# sourceMappingURL=Name.js.map