@akylas/nativescript-cli 8.7.2 → 8.8.3

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 (295) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/docs/man_pages/project/configuration/native/native-add-java.md +32 -0
  3. package/docs/man_pages/project/configuration/native/native-add-kotlin.md +34 -0
  4. package/docs/man_pages/project/configuration/native/native-add-objective-c.md +34 -0
  5. package/docs/man_pages/project/configuration/native/native-add-swift.md +32 -0
  6. package/docs/man_pages/project/configuration/native/native-add.md +31 -0
  7. package/docs/man_pages/project/configuration/native/native.md +31 -0
  8. package/lib/.d.ts +2 -0
  9. package/lib/android-tools-info.js +9 -20
  10. package/lib/base-package-manager.js +47 -64
  11. package/lib/bootstrap.js +8 -0
  12. package/lib/bun-package-manager.js +65 -88
  13. package/lib/color.js +2 -2
  14. package/lib/commands/add-platform.js +14 -30
  15. package/lib/commands/apple-login.js +18 -29
  16. package/lib/commands/appstore-list.js +34 -45
  17. package/lib/commands/appstore-upload.js +55 -68
  18. package/lib/commands/build.js +57 -86
  19. package/lib/commands/clean.js +161 -176
  20. package/lib/commands/command-base.js +14 -27
  21. package/lib/commands/config.js +51 -70
  22. package/lib/commands/create-project.js +210 -229
  23. package/lib/commands/debug.js +66 -88
  24. package/lib/commands/deploy.js +28 -44
  25. package/lib/commands/embedding/embed.js +72 -0
  26. package/lib/commands/extensibility/install-extension.js +5 -16
  27. package/lib/commands/extensibility/list-extensions.js +13 -24
  28. package/lib/commands/extensibility/uninstall-extension.js +4 -15
  29. package/lib/commands/fonts.js +30 -41
  30. package/lib/commands/generate-assets.js +13 -28
  31. package/lib/commands/generate-help.js +2 -13
  32. package/lib/commands/generate.js +17 -26
  33. package/lib/commands/info.js +2 -13
  34. package/lib/commands/install.js +34 -49
  35. package/lib/commands/list-platforms.js +14 -25
  36. package/lib/commands/migrate.js +15 -26
  37. package/lib/commands/native-add.js +277 -0
  38. package/lib/commands/platform-clean.js +19 -32
  39. package/lib/commands/plugin/add-plugin.js +12 -25
  40. package/lib/commands/plugin/build-plugin.js +34 -45
  41. package/lib/commands/plugin/create-plugin.js +110 -133
  42. package/lib/commands/plugin/list-plugins.js +22 -33
  43. package/lib/commands/plugin/remove-plugin.js +20 -33
  44. package/lib/commands/plugin/update-plugin.js +20 -33
  45. package/lib/commands/post-install.js +20 -33
  46. package/lib/commands/prepare.js +28 -35
  47. package/lib/commands/preview.js +49 -62
  48. package/lib/commands/remove-platform.js +7 -18
  49. package/lib/commands/resources/resources-update.js +13 -26
  50. package/lib/commands/run.js +55 -76
  51. package/lib/commands/start.js +6 -19
  52. package/lib/commands/test-init.js +123 -134
  53. package/lib/commands/test.js +66 -89
  54. package/lib/commands/typings.js +126 -142
  55. package/lib/commands/update-platform.js +22 -35
  56. package/lib/commands/update.js +30 -43
  57. package/lib/common/child-process.js +53 -72
  58. package/lib/common/codeGeneration/code-entity.js +1 -1
  59. package/lib/common/codeGeneration/code-printer.js +1 -1
  60. package/lib/common/command-params.js +7 -18
  61. package/lib/common/commands/analytics.js +27 -40
  62. package/lib/common/commands/autocompletion.js +39 -56
  63. package/lib/common/commands/device/device-log-stream.js +12 -23
  64. package/lib/common/commands/device/get-file.js +22 -33
  65. package/lib/common/commands/device/list-applications.js +12 -23
  66. package/lib/common/commands/device/list-devices.js +72 -87
  67. package/lib/common/commands/device/list-files.js +23 -34
  68. package/lib/common/commands/device/put-file.js +22 -33
  69. package/lib/common/commands/device/run-application.js +12 -25
  70. package/lib/common/commands/device/stop-application.js +11 -22
  71. package/lib/common/commands/device/uninstall-application.js +6 -17
  72. package/lib/common/commands/generate-messages.js +17 -28
  73. package/lib/common/commands/help.js +20 -33
  74. package/lib/common/commands/package-manager-get.js +6 -17
  75. package/lib/common/commands/package-manager-set.js +9 -20
  76. package/lib/common/commands/post-install.js +2 -13
  77. package/lib/common/commands/preuninstall.js +23 -38
  78. package/lib/common/commands/proxy/proxy-base.js +8 -19
  79. package/lib/common/commands/proxy/proxy-clear.js +4 -15
  80. package/lib/common/commands/proxy/proxy-get.js +3 -14
  81. package/lib/common/commands/proxy/proxy-set.js +87 -100
  82. package/lib/common/constants.js +11 -11
  83. package/lib/common/decorators.js +10 -22
  84. package/lib/common/dispatchers.js +79 -96
  85. package/lib/common/errors.js +89 -104
  86. package/lib/common/file-system.js +106 -127
  87. package/lib/common/header.js +1 -2
  88. package/lib/common/helpers.js +149 -178
  89. package/lib/common/host-info.js +37 -50
  90. package/lib/common/http-client.js +93 -108
  91. package/lib/common/logger/appenders/cli-appender.js +1 -2
  92. package/lib/common/logger/appenders/emit-appender.js +1 -2
  93. package/lib/common/logger/layouts/cli-layout.js +1 -2
  94. package/lib/common/logger/logger.js +1 -1
  95. package/lib/common/mobile/android/android-application-manager.js +121 -142
  96. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
  97. package/lib/common/mobile/android/android-debug-bridge.js +87 -112
  98. package/lib/common/mobile/android/android-device-file-system.js +98 -131
  99. package/lib/common/mobile/android/android-device-hash-service.js +50 -75
  100. package/lib/common/mobile/android/android-device.js +74 -91
  101. package/lib/common/mobile/android/android-emulator-services.js +105 -130
  102. package/lib/common/mobile/android/android-log-filter.js +1 -1
  103. package/lib/common/mobile/android/android-virtual-device-service.js +76 -94
  104. package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
  105. package/lib/common/mobile/android/genymotion/genymotion-service.js +91 -118
  106. package/lib/common/mobile/android/genymotion/virtualbox-service.js +64 -81
  107. package/lib/common/mobile/android/logcat-helper.js +108 -118
  108. package/lib/common/mobile/application-manager-base.js +84 -107
  109. package/lib/common/mobile/device-log-provider-base.js +7 -18
  110. package/lib/common/mobile/emulator-helper.js +1 -0
  111. package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
  112. package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
  113. package/lib/common/mobile/ios/device/ios-device-operations.js +105 -142
  114. package/lib/common/mobile/ios/device/ios-device.js +20 -36
  115. package/lib/common/mobile/ios/ios-device-base.js +58 -81
  116. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +63 -92
  117. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
  118. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +60 -89
  119. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +27 -43
  120. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
  121. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
  122. package/lib/common/mobile/mobile-core/android-device-discovery.js +43 -62
  123. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +21 -32
  124. package/lib/common/mobile/mobile-core/android-process-service.js +143 -182
  125. package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
  126. package/lib/common/mobile/mobile-core/devices-service.js +385 -436
  127. package/lib/common/mobile/mobile-core/ios-device-discovery.js +24 -35
  128. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +47 -62
  129. package/lib/common/mobile/mobile-helper.js +15 -26
  130. package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
  131. package/lib/common/opener.js +2 -2
  132. package/lib/common/plist-parser.js +2 -2
  133. package/lib/common/prompter.js +90 -105
  134. package/lib/common/queue.js +9 -20
  135. package/lib/common/services/auto-completion-service.js +39 -52
  136. package/lib/common/services/cancellation.js +17 -28
  137. package/lib/common/services/commands-service.js +146 -169
  138. package/lib/common/services/help-service.js +132 -157
  139. package/lib/common/services/hooks-service.js +93 -108
  140. package/lib/common/services/ios-notification-service.js +21 -34
  141. package/lib/common/services/json-file-settings-service.js +52 -71
  142. package/lib/common/services/lock-service.js +35 -52
  143. package/lib/common/services/message-contract-generator.js +35 -46
  144. package/lib/common/services/micro-templating-service.js +4 -15
  145. package/lib/common/services/net-service.js +90 -107
  146. package/lib/common/services/project-files-manager.js +10 -23
  147. package/lib/common/services/proxy-service.js +13 -24
  148. package/lib/common/services/qr.js +13 -24
  149. package/lib/common/services/settings-service.js +1 -1
  150. package/lib/common/services/xcode-select-service.js +20 -35
  151. package/lib/common/utils.js +7 -0
  152. package/lib/common/validators/project-name-validator.js +1 -1
  153. package/lib/common/validators/validation-result.js +1 -1
  154. package/lib/common/verify-node-version.js +2 -3
  155. package/lib/common/yok.js +23 -36
  156. package/lib/config.js +7 -58
  157. package/lib/constants.js +24 -24
  158. package/lib/controllers/build-controller.js +82 -99
  159. package/lib/controllers/debug-controller.js +107 -128
  160. package/lib/controllers/deploy-controller.js +17 -22
  161. package/lib/controllers/migrate-controller.js +727 -800
  162. package/lib/controllers/platform-controller.js +72 -83
  163. package/lib/controllers/prepare-controller.js +264 -250
  164. package/lib/controllers/run-controller.js +392 -406
  165. package/lib/controllers/update-controller-base.js +16 -29
  166. package/lib/controllers/update-controller.js +94 -119
  167. package/lib/data/build-data.js +2 -0
  168. package/lib/data/prepare-data.js +5 -1
  169. package/lib/declarations.d.ts +14 -3
  170. package/lib/definitions/android-plugin-migrator.d.ts +1 -0
  171. package/lib/definitions/ios-debugger-port-service.d.ts +1 -1
  172. package/lib/definitions/livesync.d.ts +1 -1
  173. package/lib/definitions/platform.d.ts +1 -0
  174. package/lib/definitions/prepare.d.ts +3 -0
  175. package/lib/definitions/project.d.ts +5 -0
  176. package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
  177. package/lib/detached-processes/cleanup-process.js +16 -25
  178. package/lib/device-path-provider.js +23 -34
  179. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +149 -164
  180. package/lib/device-sockets/ios/notification.js +1 -1
  181. package/lib/device-sockets/ios/socket-request-executor.js +24 -39
  182. package/lib/helpers/android-bundle-validator-helper.js +1 -1
  183. package/lib/helpers/deploy-command-helper.js +45 -49
  184. package/lib/helpers/key-command-helper.js +4 -13
  185. package/lib/helpers/livesync-command-helper.js +137 -152
  186. package/lib/helpers/network-connectivity-validator.js +6 -17
  187. package/lib/helpers/options-track-helper.js +6 -17
  188. package/lib/helpers/platform-command-helper.js +102 -114
  189. package/lib/key-commands/index.js +161 -211
  190. package/lib/nativescript-cli.js +5 -14
  191. package/lib/node-package-manager.js +81 -104
  192. package/lib/options.js +12 -14
  193. package/lib/package-installation-manager.js +130 -165
  194. package/lib/package-manager.js +63 -86
  195. package/lib/platform-command-param.js +4 -15
  196. package/lib/pnpm-package-manager.js +59 -78
  197. package/lib/project-data.js +5 -2
  198. package/lib/providers/project-files-provider.js +2 -2
  199. package/lib/services/analytics/analytics-broker-process.js +13 -22
  200. package/lib/services/analytics/analytics-broker.js +17 -30
  201. package/lib/services/analytics/analytics-service.js +161 -198
  202. package/lib/services/analytics/google-analytics-provider.js +41 -56
  203. package/lib/services/analytics-settings-service.js +15 -32
  204. package/lib/services/android/android-bundle-tool-service.js +43 -60
  205. package/lib/services/android/gradle-build-args-service.js +13 -23
  206. package/lib/services/android/gradle-build-service.js +34 -47
  207. package/lib/services/android/gradle-command-service.js +23 -32
  208. package/lib/services/android-device-debug-service.js +90 -117
  209. package/lib/services/android-plugin-build-service.js +233 -247
  210. package/lib/services/android-project-service.js +180 -219
  211. package/lib/services/android-resources-migration-service.js +51 -64
  212. package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
  213. package/lib/services/apple-portal/apple-portal-session-service.js +171 -188
  214. package/lib/services/assets-generation/assets-generation-service.js +100 -113
  215. package/lib/services/build-artifacts-service.js +9 -20
  216. package/lib/services/build-info-file-service.js +20 -35
  217. package/lib/services/cleanup-service.js +47 -76
  218. package/lib/services/cocoapods-service.js +118 -133
  219. package/lib/services/device/device-install-app-service.js +73 -90
  220. package/lib/services/doctor-service.js +99 -118
  221. package/lib/services/extensibility-service.js +81 -100
  222. package/lib/services/files-hash-service.js +28 -44
  223. package/lib/services/hmr-status-service.js +1 -1
  224. package/lib/services/initialize-service.js +37 -50
  225. package/lib/services/ios/export-options-plist-service.js +38 -51
  226. package/lib/services/ios/ios-signing-service.js +161 -180
  227. package/lib/services/ios/spm-service.js +40 -53
  228. package/lib/services/ios/xcodebuild-args-service.js +77 -94
  229. package/lib/services/ios/xcodebuild-command-service.js +14 -25
  230. package/lib/services/ios/xcodebuild-service.js +50 -69
  231. package/lib/services/ios-debugger-port-service.js +23 -36
  232. package/lib/services/ios-device-debug-service.js +75 -102
  233. package/lib/services/ios-entitlements-service.js +31 -42
  234. package/lib/services/ios-extensions-service.js +18 -29
  235. package/lib/services/ios-project-service.js +418 -440
  236. package/lib/services/ios-provision-service.js +108 -129
  237. package/lib/services/ios-watch-app-service.js +21 -32
  238. package/lib/services/ip-service.js +38 -53
  239. package/lib/services/itmstransporter-service.js +129 -152
  240. package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
  241. package/lib/services/livesync/android-device-livesync-service.js +120 -149
  242. package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -155
  243. package/lib/services/livesync/android-livesync-service.js +16 -37
  244. package/lib/services/livesync/android-livesync-tool.js +89 -112
  245. package/lib/services/livesync/device-livesync-service-base.js +15 -28
  246. package/lib/services/livesync/ios-device-livesync-service.js +114 -143
  247. package/lib/services/livesync/ios-livesync-service.js +44 -60
  248. package/lib/services/livesync/platform-livesync-service-base.js +96 -120
  249. package/lib/services/log-parser-service.js +1 -1
  250. package/lib/services/log-source-map-service.js +33 -43
  251. package/lib/services/marking-mode-service.js +15 -28
  252. package/lib/services/npm-config-service.js +1 -1
  253. package/lib/services/pacote-service.js +49 -64
  254. package/lib/services/performance-service.js +1 -1
  255. package/lib/services/platform/add-platform-service.js +53 -69
  256. package/lib/services/platform/platform-validation-service.js +22 -33
  257. package/lib/services/platform/prepare-native-platform-service.js +50 -60
  258. package/lib/services/platform-environment-requirements.js +29 -38
  259. package/lib/services/plugins-service.js +128 -147
  260. package/lib/services/project-backup-service.js +1 -1
  261. package/lib/services/project-changes-service.js +129 -139
  262. package/lib/services/project-cleanup-service.js +64 -77
  263. package/lib/services/project-config-service.js +71 -80
  264. package/lib/services/project-data-service.js +116 -139
  265. package/lib/services/project-name-service.js +28 -43
  266. package/lib/services/project-service.js +84 -103
  267. package/lib/services/project-templates-service.js +52 -67
  268. package/lib/services/start-service.js +41 -59
  269. package/lib/services/temp-service.js +8 -21
  270. package/lib/services/terminal-spinner-service.js +13 -24
  271. package/lib/services/test-execution-service.js +59 -72
  272. package/lib/services/test-initialization-service.js +2 -2
  273. package/lib/services/timeline-profiler-service.js +1 -1
  274. package/lib/services/versions-service.js +119 -138
  275. package/lib/services/webpack/webpack-compiler-service.js +212 -224
  276. package/lib/services/xcconfig-service.js +8 -19
  277. package/lib/services/xcproj-service.js +12 -0
  278. package/lib/sys-info.js +45 -62
  279. package/lib/tools/node-modules/node-modules-builder.js +16 -27
  280. package/lib/yarn-package-manager.js +59 -78
  281. package/lib/yarn2-package-manager.js +60 -79
  282. package/package.json +59 -57
  283. package/vendor/aab-tool/README.txt +1 -1
  284. package/vendor/aab-tool/bundletool.jar +0 -0
  285. package/vendor/gradle-app/app/build.gradle +12 -4
  286. package/vendor/gradle-plugin/build.gradle +12 -4
  287. package/lib/common/resources/platform-tools/android/darwin/NOTICE.txt +0 -3407
  288. package/lib/common/resources/platform-tools/android/darwin/adb +0 -0
  289. package/lib/common/resources/platform-tools/android/linux/NOTICE.txt +0 -4451
  290. package/lib/common/resources/platform-tools/android/linux/adb +0 -0
  291. package/lib/common/resources/platform-tools/android/win32/AdbWinApi.dll +0 -0
  292. package/lib/common/resources/platform-tools/android/win32/AdbWinUsbApi.dll +0 -0
  293. package/lib/common/resources/platform-tools/android/win32/NOTICE.txt +0 -4451
  294. package/lib/common/resources/platform-tools/android/win32/adb.exe +0 -0
  295. package/lib/common/resources/platform-tools/android/win32/fastboot.exe +0 -0
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
8
  Object.defineProperty(exports, "__esModule", { value: true });
18
9
  exports.IOSProjectService = exports.VisionSimulatorPlatformSdkName = exports.VisionDevicePlatformSdkName = exports.SimulatorPlatformSdkName = exports.DevicePlatformSdkName = void 0;
19
10
  const path = require("path");
@@ -90,7 +81,9 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
90
81
  projectData.platformsDir &&
91
82
  this._platformsDirCache !== projectData.platformsDir) {
92
83
  const platform = this.$mobileHelper.normalizePlatformName((_a = this.$options.platformOverride) !== null && _a !== void 0 ? _a : this.$devicePlatformsConstants.iOS);
93
- const projectRoot = path.join(projectData.platformsDir, platform.toLowerCase());
84
+ const projectRoot = this.$options.hostProjectPath
85
+ ? this.$options.hostProjectPath
86
+ : path.join(projectData.platformsDir, platform.toLowerCase());
94
87
  const runtimePackage = this.$projectDataService.getRuntimePackage(projectData.projectDir, platform.toLowerCase());
95
88
  this._platformData = {
96
89
  frameworkPackageName: runtimePackage.name,
@@ -148,119 +141,107 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
148
141
  }
149
142
  return this._platformData;
150
143
  }
151
- validateOptions(projectId, provision, teamId) {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- if (provision && teamId) {
154
- this.$errors.fail("The options --provision and --teamId are mutually exclusive.");
155
- }
156
- if (provision === true) {
157
- yield this.$iOSProvisionService.listProvisions(projectId);
158
- this.$errors.fail("Please provide provisioning profile uuid or name with the --provision option.");
159
- }
160
- if (teamId === true) {
161
- yield this.$iOSProvisionService.listTeams();
162
- this.$errors.fail("Please provide team id or team name with the --teamId options.");
163
- }
164
- return true;
165
- });
144
+ async validateOptions(projectId, provision, teamId) {
145
+ if (provision && teamId) {
146
+ this.$errors.fail("The options --provision and --teamId are mutually exclusive.");
147
+ }
148
+ if (provision === true) {
149
+ await this.$iOSProvisionService.listProvisions(projectId);
150
+ this.$errors.fail("Please provide provisioning profile uuid or name with the --provision option.");
151
+ }
152
+ if (teamId === true) {
153
+ await this.$iOSProvisionService.listTeams();
154
+ this.$errors.fail("Please provide team id or team name with the --teamId options.");
155
+ }
156
+ return true;
166
157
  }
167
158
  getAppResourcesDestinationDirectoryPath(projectData) {
168
159
  return path.join(this.getPlatformData(projectData).projectRoot, projectData.projectName, "Resources");
169
160
  }
170
- validate(projectData, options, notConfiguredEnvOptions) {
171
- return __awaiter(this, void 0, void 0, function* () {
172
- if (!this.$hostInfo.isDarwin) {
173
- return;
174
- }
175
- const checkEnvironmentRequirementsOutput = yield this.$platformEnvironmentRequirements.checkEnvironmentRequirements({
176
- platform: this.getPlatformData(projectData).normalizedPlatformName,
177
- projectDir: projectData.projectDir,
178
- options,
179
- notConfiguredEnvOptions,
180
- });
181
- if (checkEnvironmentRequirementsOutput &&
182
- checkEnvironmentRequirementsOutput.canExecute) {
183
- const xcodeWarning = yield this.$sysInfo.getXcodeWarning();
184
- if (xcodeWarning) {
185
- this.$logger.warn(xcodeWarning);
186
- }
187
- }
188
- return {
189
- checkEnvironmentRequirementsOutput,
190
- };
161
+ async validate(projectData, options, notConfiguredEnvOptions) {
162
+ if (!this.$hostInfo.isDarwin) {
163
+ return;
164
+ }
165
+ const checkEnvironmentRequirementsOutput = await this.$platformEnvironmentRequirements.checkEnvironmentRequirements({
166
+ platform: this.getPlatformData(projectData).normalizedPlatformName,
167
+ projectDir: projectData.projectDir,
168
+ options,
169
+ notConfiguredEnvOptions,
191
170
  });
171
+ if (checkEnvironmentRequirementsOutput &&
172
+ checkEnvironmentRequirementsOutput.canExecute) {
173
+ const xcodeWarning = await this.$sysInfo.getXcodeWarning();
174
+ if (xcodeWarning) {
175
+ this.$logger.warn(xcodeWarning);
176
+ }
177
+ }
178
+ return {
179
+ checkEnvironmentRequirementsOutput,
180
+ };
192
181
  }
193
- createProject(frameworkDir, frameworkVersion, projectData) {
194
- return __awaiter(this, void 0, void 0, function* () {
195
- this.$fs.ensureDirectoryExists(path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER));
196
- shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
197
- });
182
+ async createProject(frameworkDir, frameworkVersion, projectData) {
183
+ this.$fs.ensureDirectoryExists(path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER));
184
+ shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
198
185
  }
199
- interpolateData(projectData) {
200
- return __awaiter(this, void 0, void 0, function* () {
201
- const projectRootFilePath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER);
202
- if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + "-Info.plist"))) {
203
- this.replaceFileName("-Info.plist", projectRootFilePath, projectData);
204
- }
205
- this.replaceFileName("-Prefix.pch", projectRootFilePath, projectData);
206
- if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + ".entitlements"))) {
207
- this.replaceFileName(".entitlements", projectRootFilePath, projectData);
208
- }
209
- const xcschemeDirPath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
210
- constants_2.IosProjectConstants.XcodeProjExtName, "xcshareddata/xcschemes");
211
- const xcschemeFilePath = path.join(xcschemeDirPath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
212
- constants_2.IosProjectConstants.XcodeSchemeExtName);
213
- if (this.$fs.exists(xcschemeFilePath)) {
214
- this.$logger.trace("Found shared scheme at xcschemeFilePath, renaming to match project name.");
215
- this.$logger.trace("Checkpoint 0");
216
- this.replaceFileContent(xcschemeFilePath, projectData);
217
- this.$logger.trace("Checkpoint 1");
218
- this.replaceFileName(constants_2.IosProjectConstants.XcodeSchemeExtName, xcschemeDirPath, projectData);
219
- this.$logger.trace("Checkpoint 2");
220
- }
221
- else {
222
- this.$logger.trace("Copying xcscheme from template not found at " + xcschemeFilePath);
223
- }
224
- this.replaceFileName(constants_2.IosProjectConstants.XcodeProjExtName, this.getPlatformData(projectData).projectRoot, projectData);
225
- const pbxprojFilePath = this.getPbxProjPath(projectData);
226
- this.replaceFileContent(pbxprojFilePath, projectData);
227
- const internalDirPath = path.join(projectRootFilePath, "..", "internal");
228
- const xcframeworksFilePath = path.join(internalDirPath, "XCFrameworks.zip");
229
- if (this.$fs.exists(xcframeworksFilePath)) {
230
- yield this.$fs.unzip(xcframeworksFilePath, internalDirPath);
231
- this.$fs.deleteFile(xcframeworksFilePath);
232
- }
233
- });
186
+ async interpolateData(projectData) {
187
+ const projectRootFilePath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER);
188
+ if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + "-Info.plist"))) {
189
+ this.replaceFileName("-Info.plist", projectRootFilePath, projectData);
190
+ }
191
+ this.replaceFileName("-Prefix.pch", projectRootFilePath, projectData);
192
+ if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + ".entitlements"))) {
193
+ this.replaceFileName(".entitlements", projectRootFilePath, projectData);
194
+ }
195
+ const xcschemeDirPath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
196
+ constants_2.IosProjectConstants.XcodeProjExtName, "xcshareddata/xcschemes");
197
+ const xcschemeFilePath = path.join(xcschemeDirPath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
198
+ constants_2.IosProjectConstants.XcodeSchemeExtName);
199
+ if (this.$fs.exists(xcschemeFilePath)) {
200
+ this.$logger.trace("Found shared scheme at xcschemeFilePath, renaming to match project name.");
201
+ this.$logger.trace("Checkpoint 0");
202
+ this.replaceFileContent(xcschemeFilePath, projectData);
203
+ this.$logger.trace("Checkpoint 1");
204
+ this.replaceFileName(constants_2.IosProjectConstants.XcodeSchemeExtName, xcschemeDirPath, projectData);
205
+ this.$logger.trace("Checkpoint 2");
206
+ }
207
+ else {
208
+ this.$logger.trace("Copying xcscheme from template not found at " + xcschemeFilePath);
209
+ }
210
+ this.replaceFileName(constants_2.IosProjectConstants.XcodeProjExtName, this.getPlatformData(projectData).projectRoot, projectData);
211
+ const pbxprojFilePath = this.getPbxProjPath(projectData);
212
+ this.replaceFileContent(pbxprojFilePath, projectData);
213
+ const internalDirPath = path.join(projectRootFilePath, "..", "internal");
214
+ const xcframeworksFilePath = path.join(internalDirPath, "XCFrameworks.zip");
215
+ if (this.$fs.exists(xcframeworksFilePath)) {
216
+ await this.$fs.unzip(xcframeworksFilePath, internalDirPath);
217
+ this.$fs.deleteFile(xcframeworksFilePath);
218
+ }
234
219
  }
235
220
  interpolateConfigurationFile(projectData) {
236
221
  return undefined;
237
222
  }
238
- cleanProject(projectRoot, projectData) {
239
- return __awaiter(this, void 0, void 0, function* () {
240
- return null;
241
- });
223
+ async cleanProject(projectRoot, projectData) {
224
+ return null;
242
225
  }
243
226
  afterCreateProject(projectRoot, projectData) {
244
227
  this.$fs.rename(path.join(projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER), path.join(projectRoot, projectData.projectName));
245
228
  }
246
- buildProject(projectRoot, projectData, buildData) {
247
- return __awaiter(this, void 0, void 0, function* () {
248
- const platformData = this.getPlatformData(projectData);
249
- const handler = (data) => {
250
- this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
251
- };
252
- if (buildData.buildForDevice) {
253
- yield this.$iOSSigningService.setupSigningForDevice(projectRoot, projectData, buildData);
254
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForDevice(platformData, projectData, buildData));
255
- }
256
- else if (buildData.buildForAppStore) {
257
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForAppStore(platformData, projectData, buildData));
258
- }
259
- else {
260
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForSimulator(platformData, projectData, buildData));
261
- }
262
- this.validateApplicationIdentifier(projectData);
263
- });
229
+ async buildProject(projectRoot, projectData, buildData) {
230
+ const platformData = this.getPlatformData(projectData);
231
+ const handler = (data) => {
232
+ this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
233
+ };
234
+ if (buildData.buildForDevice) {
235
+ await this.$iOSSigningService.setupSigningForDevice(projectRoot, projectData, buildData);
236
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForDevice(platformData, projectData, buildData));
237
+ }
238
+ else if (buildData.buildForAppStore) {
239
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForAppStore(platformData, projectData, buildData));
240
+ }
241
+ else {
242
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForSimulator(platformData, projectData, buildData));
243
+ }
244
+ this.validateApplicationIdentifier(projectData);
264
245
  }
265
246
  isPlatformPrepared(projectRoot, projectData) {
266
247
  return this.$fs.exists(path.join(projectRoot, projectData.projectName, constants.APP_FOLDER_NAME));
@@ -268,115 +249,130 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
268
249
  cleanDeviceTempFolder(deviceIdentifier) {
269
250
  return Promise.resolve();
270
251
  }
271
- isDynamicFramework(frameworkPath) {
272
- return __awaiter(this, void 0, void 0, function* () {
273
- const isDynamicFrameworkBundle = (bundlePath, frameworkName) => __awaiter(this, void 0, void 0, function* () {
274
- const frameworkBinaryPath = path.join(bundlePath, frameworkName);
275
- const fileResult = (yield this.$childProcess.spawnFromEvent("file", [frameworkBinaryPath], "close")).stdout;
276
- const isDynamicallyLinked = _.includes(fileResult, "dynamically linked");
277
- return isDynamicallyLinked;
278
- });
279
- if (path.extname(frameworkPath) === ".xcframework") {
280
- let isDynamic = true;
281
- const plistJson = this.$plistParser.parseFileSync(path.join(frameworkPath, "Info.plist"));
282
- for (const library of plistJson.AvailableLibraries) {
283
- const singlePlatformFramework = path.join(frameworkPath, library.LibraryIdentifier, library.LibraryPath);
284
- if (this.$fs.exists(singlePlatformFramework)) {
285
- const frameworkName = path.basename(singlePlatformFramework, path.extname(singlePlatformFramework));
286
- isDynamic = yield isDynamicFrameworkBundle(singlePlatformFramework, frameworkName);
287
- break;
288
- }
252
+ async isDynamicFramework(frameworkPath) {
253
+ const isDynamicFrameworkBundle = async (bundlePath, frameworkName) => {
254
+ const frameworkBinaryPath = path.join(bundlePath, frameworkName);
255
+ const fileResult = (await this.$childProcess.spawnFromEvent("file", [frameworkBinaryPath], "close")).stdout;
256
+ const isDynamicallyLinked = _.includes(fileResult, "dynamically linked");
257
+ return isDynamicallyLinked;
258
+ };
259
+ if (path.extname(frameworkPath) === ".xcframework") {
260
+ let isDynamic = true;
261
+ const plistJson = this.$plistParser.parseFileSync(path.join(frameworkPath, "Info.plist"));
262
+ for (const library of plistJson.AvailableLibraries) {
263
+ const singlePlatformFramework = path.join(frameworkPath, library.LibraryIdentifier, library.LibraryPath);
264
+ if (this.$fs.exists(singlePlatformFramework)) {
265
+ const frameworkName = path.basename(singlePlatformFramework, path.extname(singlePlatformFramework));
266
+ isDynamic = await isDynamicFrameworkBundle(singlePlatformFramework, frameworkName);
267
+ break;
289
268
  }
290
- return isDynamic;
291
269
  }
292
- else {
293
- const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
294
- return yield isDynamicFrameworkBundle(frameworkPath, frameworkName);
295
- }
296
- });
270
+ return isDynamic;
271
+ }
272
+ else {
273
+ const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
274
+ return await isDynamicFrameworkBundle(frameworkPath, frameworkName);
275
+ }
297
276
  }
298
- addFramework(frameworkPath, projectData) {
299
- return __awaiter(this, void 0, void 0, function* () {
300
- if (!this.$hostInfo.isWindows) {
301
- this.validateFramework(frameworkPath);
302
- const project = this.createPbxProj(projectData);
303
- const frameworkAddOptions = { customFramework: true };
304
- const dynamic = yield this.isDynamicFramework(frameworkPath);
305
- if (dynamic) {
306
- frameworkAddOptions["embed"] = true;
307
- frameworkAddOptions["sign"] = true;
308
- }
309
- const frameworkRelativePath = "$(SRCROOT)/" +
310
- this.getLibSubpathRelativeToProjectPath(frameworkPath, projectData);
311
- project.addFramework(frameworkRelativePath, frameworkAddOptions);
312
- this.savePbxProj(project, projectData);
313
- }
314
- });
277
+ async addFramework(frameworkPath, projectData) {
278
+ if (this.$hostInfo.isWindows) {
279
+ return;
280
+ }
281
+ this.validateFramework(frameworkPath);
282
+ const project = this.createPbxProj(projectData);
283
+ const frameworkAddOptions = { customFramework: true };
284
+ const dynamic = await this.isDynamicFramework(frameworkPath);
285
+ if (dynamic) {
286
+ frameworkAddOptions["embed"] = true;
287
+ frameworkAddOptions["sign"] = true;
288
+ }
289
+ if (this.$options.hostProjectPath) {
290
+ frameworkAddOptions["embed"] = true;
291
+ frameworkAddOptions["sign"] = false;
292
+ }
293
+ const frameworkRelativePath = this.getLibSubpathRelativeToProjectPath(frameworkPath, projectData);
294
+ project.addFramework(frameworkRelativePath, frameworkAddOptions);
295
+ this.savePbxProj(project, projectData);
315
296
  }
316
- addStaticLibrary(staticLibPath, projectData) {
317
- return __awaiter(this, void 0, void 0, function* () {
318
- const libraryName = path.basename(staticLibPath, ".a");
319
- const headersSubpath = path.join(path.dirname(staticLibPath), "include", libraryName);
320
- const project = this.createPbxProj(projectData);
321
- const relativeStaticLibPath = this.getLibSubpathRelativeToProjectPath(staticLibPath, projectData);
322
- project.addFramework(relativeStaticLibPath);
323
- const relativeHeaderSearchPath = path.join(this.getLibSubpathRelativeToProjectPath(headersSubpath, projectData));
324
- project.addToHeaderSearchPaths({ relativePath: relativeHeaderSearchPath });
325
- this.generateModulemap(headersSubpath, libraryName);
326
- this.savePbxProj(project, projectData);
327
- });
297
+ async addStaticLibrary(staticLibPath, projectData) {
298
+ const libraryName = path.basename(staticLibPath, ".a");
299
+ const headersSubpath = path.join(path.dirname(staticLibPath), "include", libraryName);
300
+ const project = this.createPbxProj(projectData);
301
+ const relativeStaticLibPath = this.getLibSubpathRelativeToProjectPath(staticLibPath, projectData);
302
+ project.addFramework(relativeStaticLibPath);
303
+ const relativeHeaderSearchPath = path.join(this.getLibSubpathRelativeToProjectPath(headersSubpath, projectData));
304
+ project.addToHeaderSearchPaths({ relativePath: relativeHeaderSearchPath });
305
+ this.generateModulemap(headersSubpath, libraryName);
306
+ this.savePbxProj(project, projectData);
328
307
  }
329
- prepareProject(projectData, prepareData) {
330
- return __awaiter(this, void 0, void 0, function* () {
331
- const projectRoot = path.join(projectData.platformsDir, "ios");
332
- const platformData = this.getPlatformData(projectData);
333
- const pluginsData = this.getAllProductionPlugins(projectData);
334
- const pbxProjPath = this.getPbxProjPath(projectData);
335
- this.$iOSExtensionsService.removeExtensions({ pbxProjPath });
336
- yield this.addExtensions(projectData, pluginsData);
337
- const resourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
338
- const provision = prepareData && prepareData.provision;
339
- const teamId = prepareData && prepareData.teamId;
340
- if (provision) {
341
- yield this.$iOSSigningService.setupSigningFromProvision(projectRoot, projectData, provision, prepareData.mobileProvisionData);
342
- }
343
- if (teamId) {
344
- yield this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
345
- }
346
- const project = this.createPbxProj(projectData);
347
- const resources = project.pbxGroupByName("Resources");
348
- if (resources) {
349
- const references = project.pbxFileReferenceSection();
350
- const xcodeProjectImages = _.map(resources.children, (resource) => this.replace(references[resource.value].name));
351
- this.$logger.trace("Images from Xcode project");
352
- this.$logger.trace(xcodeProjectImages);
353
- const appResourcesImages = this.$fs.readDirectory(this.getAppResourcesDestinationDirectoryPath(projectData));
354
- this.$logger.trace("Current images from App_Resources");
355
- this.$logger.trace(appResourcesImages);
356
- const imagesToAdd = _.difference(appResourcesImages, xcodeProjectImages);
357
- this.$logger.trace(`New images to add into xcode project: ${imagesToAdd.join(", ")}`);
358
- _.each(imagesToAdd, (image) => project.addResourceFile(path.relative(this.getPlatformData(projectData).projectRoot, path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image))));
359
- const imagesToRemove = _.difference(xcodeProjectImages, appResourcesImages);
360
- this.$logger.trace(`Images to remove from xcode project: ${imagesToRemove.join(", ")}`);
361
- _.each(imagesToRemove, (image) => project.removeResourceFile(path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image)));
308
+ async prepareProject(projectData, prepareData) {
309
+ const projectRoot = this.$options.hostProjectPath
310
+ ? this.$options.hostProjectPath
311
+ : path.join(projectData.platformsDir, this.$devicePlatformsConstants.iOS.toLowerCase());
312
+ const platformData = this.getPlatformData(projectData);
313
+ const pluginsData = this.getAllProductionPlugins(projectData);
314
+ const pbxProjPath = this.getPbxProjPath(projectData);
315
+ this.$iOSExtensionsService.removeExtensions({ pbxProjPath });
316
+ await this.addExtensions(projectData, pluginsData);
317
+ const resourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
318
+ const provision = prepareData && prepareData.provision;
319
+ const teamId = prepareData && prepareData.teamId;
320
+ if (provision) {
321
+ await this.$iOSSigningService.setupSigningFromProvision(projectRoot, projectData, provision, prepareData.mobileProvisionData);
322
+ }
323
+ if (teamId) {
324
+ await this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
325
+ }
326
+ const project = this.createPbxProj(projectData);
327
+ if (this.$options.hostProjectPath) {
328
+ try {
329
+ project.addPbxGroup([], "NativeScript", "NativeScript", null, {
330
+ isMain: true,
331
+ filesRelativeToProject: true,
332
+ uuid: "NATIVESCRIPTNATIVESCRIPT",
333
+ });
334
+ const buildFolderPath = path.join(this.$options.hostProjectPath, projectData.projectName);
335
+ project.addResourceFile(buildFolderPath, {}, "NATIVESCRIPTNATIVESCRIPT");
336
+ const metadataPath = path.relative(this.$options.hostProjectPath, buildFolderPath);
337
+ project.addToOtherLinkerFlags(JSON.stringify(`-sectcreate __DATA __TNSMetadata "${metadataPath}/metadata-arm64.bin"`));
362
338
  this.savePbxProj(project, projectData);
363
- let resourcesNativeCodePath = path.join(resourcesDirectoryPath, platformData.normalizedPlatformName, constants.NATIVE_SOURCE_FOLDER);
364
- if (!this.$fs.exists(resourcesNativeCodePath)) {
365
- resourcesNativeCodePath = path.join(resourcesDirectoryPath, this.$devicePlatformsConstants.iOS, constants.NATIVE_SOURCE_FOLDER);
366
- }
367
- yield this.prepareNativeSourceCode(constants.TNS_NATIVE_SOURCE_GROUP_NAME, resourcesNativeCodePath, projectData);
368
339
  }
369
- this.$iOSWatchAppService.removeWatchApp({ pbxProjPath });
370
- const addedWatchApp = yield this.$iOSWatchAppService.addWatchAppFromPath({
371
- watchAppFolderPath: path.join(resourcesDirectoryPath, platformData.normalizedPlatformName),
372
- projectData,
373
- platformData,
374
- pbxProjPath,
375
- });
376
- if (addedWatchApp) {
377
- this.$logger.warn("The support for Apple Watch App is currently in Beta. For more information about the current development state and any known issues, please check the relevant GitHub issue: https://github.com/NativeScript/nativescript-cli/issues/4589");
340
+ catch (err) {
341
+ this.$logger.trace("Error adding NativeScript group to host project", err);
378
342
  }
343
+ }
344
+ const resources = project.pbxGroupByName("Resources");
345
+ if (resources && !this.$options.hostProjectPath) {
346
+ const references = project.pbxFileReferenceSection();
347
+ const xcodeProjectImages = _.map(resources.children, (resource) => this.replace(references[resource.value].name));
348
+ this.$logger.trace("Images from Xcode project");
349
+ this.$logger.trace(xcodeProjectImages);
350
+ const appResourcesImages = this.$fs.readDirectory(this.getAppResourcesDestinationDirectoryPath(projectData));
351
+ this.$logger.trace("Current images from App_Resources");
352
+ this.$logger.trace(appResourcesImages);
353
+ const imagesToAdd = _.difference(appResourcesImages, xcodeProjectImages);
354
+ this.$logger.trace(`New images to add into xcode project: ${imagesToAdd.join(", ")}`);
355
+ _.each(imagesToAdd, (image) => project.addResourceFile(path.relative(this.getPlatformData(projectData).projectRoot, path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image))));
356
+ const imagesToRemove = _.difference(xcodeProjectImages, appResourcesImages);
357
+ this.$logger.trace(`Images to remove from xcode project: ${imagesToRemove.join(", ")}`);
358
+ _.each(imagesToRemove, (image) => project.removeResourceFile(path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image)));
359
+ this.savePbxProj(project, projectData);
360
+ let resourcesNativeCodePath = path.join(resourcesDirectoryPath, platformData.normalizedPlatformName, constants.NATIVE_SOURCE_FOLDER);
361
+ if (!this.$fs.exists(resourcesNativeCodePath)) {
362
+ resourcesNativeCodePath = path.join(resourcesDirectoryPath, this.$devicePlatformsConstants.iOS, constants.NATIVE_SOURCE_FOLDER);
363
+ }
364
+ await this.prepareNativeSourceCode(constants.TNS_NATIVE_SOURCE_GROUP_NAME, resourcesNativeCodePath, projectData);
365
+ }
366
+ this.$iOSWatchAppService.removeWatchApp({ pbxProjPath });
367
+ const addedWatchApp = await this.$iOSWatchAppService.addWatchAppFromPath({
368
+ watchAppFolderPath: path.join(resourcesDirectoryPath, platformData.normalizedPlatformName),
369
+ projectData,
370
+ platformData,
371
+ pbxProjPath,
379
372
  });
373
+ if (addedWatchApp) {
374
+ this.$logger.warn("The support for Apple Watch App is currently in Beta. For more information about the current development state and any known issues, please check the relevant GitHub issue: https://github.com/NativeScript/nativescript-cli/issues/4589");
375
+ }
380
376
  }
381
377
  prepareAppResources(projectData) {
382
378
  const platformData = this.getPlatformData(projectData);
@@ -398,48 +394,45 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
398
394
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchapp"));
399
395
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchextension"));
400
396
  }
401
- processConfigurationFilesFromAppResources(projectData, opts) {
402
- return __awaiter(this, void 0, void 0, function* () {
403
- yield this.mergeInfoPlists(projectData, opts);
404
- yield this.$iOSEntitlementsService.merge(projectData);
405
- yield this.mergeProjectXcconfigFiles(projectData);
406
- });
397
+ async processConfigurationFilesFromAppResources(projectData, opts) {
398
+ await this.mergeInfoPlists(projectData, opts);
399
+ await this.$iOSEntitlementsService.merge(projectData);
400
+ await this.mergeProjectXcconfigFiles(projectData);
407
401
  }
408
402
  ensureConfigurationFileInAppResources() {
409
403
  return null;
410
404
  }
411
- mergeInfoPlists(projectData, buildOptions) {
412
- return __awaiter(this, void 0, void 0, function* () {
413
- const projectDir = projectData.projectDir;
414
- const infoPlistPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, this.getPlatformData(projectData).configurationFileName);
415
- this.ensureConfigurationFileInAppResources();
416
- const reporterTraceMessage = "Info.plist:";
417
- const reporter = {
418
- log: (txt) => this.$logger.trace(`${reporterTraceMessage} ${txt}`),
419
- warn: (txt) => this.$logger.warn(`${reporterTraceMessage} ${txt}`),
420
- };
421
- const session = new plist_merge_patch_1.PlistSession(reporter);
422
- const makePatch = (plistPath) => {
423
- if (!this.$fs.exists(plistPath)) {
424
- this.$logger.trace("No plist found at: " + plistPath);
425
- return;
426
- }
427
- this.$logger.trace("Schedule merge plist at: " + plistPath);
428
- session.patch({
429
- name: path.relative(projectDir, plistPath),
430
- read: () => this.$fs.readText(plistPath),
431
- });
432
- };
433
- const allPlugins = this.getAllProductionPlugins(projectData);
434
- for (const plugin of allPlugins) {
435
- const pluginInfoPlistPath = path.join(plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME), this.getPlatformData(projectData).configurationFileName);
436
- makePatch(pluginInfoPlistPath);
405
+ async mergeInfoPlists(projectData, buildOptions) {
406
+ const projectDir = projectData.projectDir;
407
+ const infoPlistPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, this.getPlatformData(projectData).configurationFileName);
408
+ this.ensureConfigurationFileInAppResources();
409
+ const reporterTraceMessage = "Info.plist:";
410
+ const reporter = {
411
+ log: (txt) => this.$logger.trace(`${reporterTraceMessage} ${txt}`),
412
+ warn: (txt) => this.$logger.warn(`${reporterTraceMessage} ${txt}`),
413
+ };
414
+ const session = new plist_merge_patch_1.PlistSession(reporter);
415
+ const makePatch = (plistPath) => {
416
+ if (!this.$fs.exists(plistPath)) {
417
+ this.$logger.trace("No plist found at: " + plistPath);
418
+ return;
437
419
  }
438
- makePatch(infoPlistPath);
439
- if (projectData.projectIdentifiers && projectData.projectIdentifiers.ios) {
440
- session.patch({
441
- name: "CFBundleIdentifier from package.json nativescript.id",
442
- read: () => `<?xml version="1.0" encoding="UTF-8"?>
420
+ this.$logger.trace("Schedule merge plist at: " + plistPath);
421
+ session.patch({
422
+ name: path.relative(projectDir, plistPath),
423
+ read: () => this.$fs.readText(plistPath),
424
+ });
425
+ };
426
+ const allPlugins = this.getAllProductionPlugins(projectData);
427
+ for (const plugin of allPlugins) {
428
+ const pluginInfoPlistPath = path.join(plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME), this.getPlatformData(projectData).configurationFileName);
429
+ makePatch(pluginInfoPlistPath);
430
+ }
431
+ makePatch(infoPlistPath);
432
+ if (projectData.projectIdentifiers && projectData.projectIdentifiers.ios) {
433
+ session.patch({
434
+ name: "CFBundleIdentifier from package.json nativescript.id",
435
+ read: () => `<?xml version="1.0" encoding="UTF-8"?>
443
436
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
444
437
  <plist version="1.0">
445
438
  <dict>
@@ -447,14 +440,14 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
447
440
  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
448
441
  </dict>
449
442
  </plist>`,
450
- });
451
- }
452
- if (!buildOptions.release &&
453
- projectData.projectIdentifiers &&
454
- projectData.projectIdentifiers.ios) {
455
- session.patch({
456
- name: "CFBundleURLTypes from package.json nativescript.id",
457
- read: () => `<?xml version="1.0" encoding="UTF-8"?>
443
+ });
444
+ }
445
+ if (!buildOptions.release &&
446
+ projectData.projectIdentifiers &&
447
+ projectData.projectIdentifiers.ios) {
448
+ session.patch({
449
+ name: "CFBundleURLTypes from package.json nativescript.id",
450
+ read: () => `<?xml version="1.0" encoding="UTF-8"?>
458
451
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
459
452
  <plist version="1.0">
460
453
  <dict>
@@ -471,13 +464,12 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
471
464
  </array>
472
465
  </dict>
473
466
  </plist>`,
474
- });
475
- }
476
- const plistContent = session.build();
477
- this.$logger.trace("Info.plist: Write to: " +
478
- this.getPlatformData(projectData).configurationFilePath);
479
- this.$fs.writeFile(this.getPlatformData(projectData).configurationFilePath, plistContent);
480
- });
467
+ });
468
+ }
469
+ const plistContent = session.build();
470
+ this.$logger.trace("Info.plist: Write to: " +
471
+ this.getPlatformData(projectData).configurationFilePath);
472
+ this.$fs.writeFile(this.getPlatformData(projectData).configurationFilePath, plistContent);
481
473
  }
482
474
  getAllProductionPlugins(projectData) {
483
475
  return (this.$injector.resolve("pluginsService")).getAllProductionPlugins(projectData, this.getPlatformData(projectData).platformNameLowerCase);
@@ -489,10 +481,18 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
489
481
  return name.replace(/\\\"/g, '"');
490
482
  }
491
483
  getLibSubpathRelativeToProjectPath(targetPath, projectData) {
492
- const frameworkPath = path.relative(this.getPlatformData(projectData).projectRoot, targetPath);
484
+ const projectRoot = this.getPlatformData(projectData).projectRoot;
485
+ const frameworkPath = path.relative(projectRoot, targetPath);
493
486
  return frameworkPath;
494
487
  }
495
488
  getPbxProjPath(projectData) {
489
+ if (this.$options.hostProjectPath) {
490
+ let xcodeProjectPath = this.$xcprojService.findXcodeProject(this.$options.hostProjectPath);
491
+ if (!xcodeProjectPath) {
492
+ this.$errors.fail("Xcode project not found at the specified directory");
493
+ }
494
+ return path.join(xcodeProjectPath, "project.pbxproj");
495
+ }
496
496
  return path.join(this.$xcprojService.getXcodeprojPath(projectData, this.getPlatformData(projectData).projectRoot), "project.pbxproj");
497
497
  }
498
498
  createPbxProj(projectData) {
@@ -503,89 +503,81 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
503
503
  savePbxProj(project, projectData, omitEmptyValues) {
504
504
  return this.$fs.writeFile(this.getPbxProjPath(projectData), project.writeSync({ omitEmptyValues }));
505
505
  }
506
- preparePluginNativeCode(pluginData, projectData, opts) {
507
- return __awaiter(this, void 0, void 0, function* () {
508
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
509
- const sourcePath = path.join(pluginPlatformsFolderPath, "src");
510
- yield this.prepareNativeSourceCode(pluginData.name, sourcePath, projectData);
511
- yield this.prepareResources(pluginPlatformsFolderPath, pluginData, projectData);
512
- yield this.prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
513
- yield this.prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
514
- });
515
- }
516
- removePluginNativeCode(pluginData, projectData) {
517
- return __awaiter(this, void 0, void 0, function* () {
518
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
519
- this.removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData);
520
- this.removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
521
- this.removeStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
522
- const projectRoot = this.getPlatformData(projectData).projectRoot;
523
- this.$cocoapodsService.removePodfileFromProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, projectRoot);
524
- });
525
- }
526
- handleNativeDependenciesChange(projectData, opts) {
527
- return __awaiter(this, void 0, void 0, function* () {
528
- const platformData = this.getPlatformData(projectData);
529
- const pluginsData = this.getAllProductionPlugins(projectData);
530
- this.setProductBundleIdentifier(projectData);
531
- yield this.applyPluginsCocoaPods(pluginsData, projectData, platformData);
532
- yield this.$cocoapodsService.applyPodfileFromAppResources(projectData, platformData);
533
- yield this.$cocoapodsService.applyPodfileArchExclusions(projectData, platformData);
534
- yield this.$cocoapodsService.applyPodfileFromExtensions(projectData, platformData);
535
- const projectPodfilePath = this.$cocoapodsService.getProjectPodfilePath(platformData.projectRoot);
536
- if (this.$fs.exists(projectPodfilePath)) {
537
- yield this.$cocoapodsService.executePodInstall(platformData.projectRoot, this.$xcprojService.getXcodeprojPath(projectData, platformData.projectRoot));
538
- yield this.$cocoapodsService.mergePodXcconfigFile(projectData, platformData, opts);
539
- }
540
- yield this.$spmService.applySPMPackages(platformData, projectData);
541
- });
506
+ async preparePluginNativeCode(pluginData, projectData, opts) {
507
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
508
+ const sourcePath = path.join(pluginPlatformsFolderPath, "src");
509
+ await this.prepareNativeSourceCode(pluginData.name, sourcePath, projectData);
510
+ await this.prepareResources(pluginPlatformsFolderPath, pluginData, projectData);
511
+ await this.prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
512
+ await this.prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
513
+ }
514
+ async removePluginNativeCode(pluginData, projectData) {
515
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
516
+ this.removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData);
517
+ this.removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
518
+ this.removeStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
519
+ const projectRoot = this.getPlatformData(projectData).projectRoot;
520
+ this.$cocoapodsService.removePodfileFromProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, projectRoot);
521
+ }
522
+ async handleNativeDependenciesChange(projectData, opts) {
523
+ const platformData = this.getPlatformData(projectData);
524
+ const pluginsData = this.getAllProductionPlugins(projectData);
525
+ this.setProductBundleIdentifier(projectData);
526
+ await this.applyPluginsCocoaPods(pluginsData, projectData, platformData);
527
+ await this.$cocoapodsService.applyPodfileFromAppResources(projectData, platformData);
528
+ await this.$cocoapodsService.applyPodfileArchExclusions(projectData, platformData);
529
+ await this.$cocoapodsService.applyPodfileFromExtensions(projectData, platformData);
530
+ const projectPodfilePath = this.$cocoapodsService.getProjectPodfilePath(platformData.projectRoot);
531
+ if (this.$fs.exists(projectPodfilePath)) {
532
+ await this.$cocoapodsService.executePodInstall(platformData.projectRoot, this.$xcprojService.getXcodeprojPath(projectData, platformData.projectRoot));
533
+ await this.$cocoapodsService.mergePodXcconfigFile(projectData, platformData, opts);
534
+ }
535
+ await this.$spmService.applySPMPackages(platformData, projectData);
542
536
  }
543
537
  beforePrepareAllPlugins(projectData, dependencies) {
544
538
  return Promise.resolve(dependencies);
545
539
  }
546
- checkForChanges(changesInfo, prepareData, projectData) {
547
- return __awaiter(this, void 0, void 0, function* () {
548
- const { provision, teamId } = prepareData;
549
- const hasProvision = provision !== undefined;
550
- const hasTeamId = teamId !== undefined;
551
- if (hasProvision || hasTeamId) {
552
- const pbxprojPath = this.getPbxProjPath(projectData);
553
- if (this.$fs.exists(pbxprojPath)) {
554
- const xcode = this.$pbxprojDomXcode.Xcode.open(pbxprojPath);
555
- const signing = xcode.getSigning(projectData.projectName);
556
- if (hasProvision) {
557
- if (signing && signing.style === "Manual") {
558
- for (const name in signing.configurations) {
559
- const config = signing.configurations[name];
560
- if (config.uuid !== provision && config.name !== provision) {
561
- changesInfo.signingChanged = true;
562
- break;
563
- }
540
+ async checkForChanges(changesInfo, prepareData, projectData) {
541
+ const { provision, teamId } = prepareData;
542
+ const hasProvision = provision !== undefined;
543
+ const hasTeamId = teamId !== undefined;
544
+ if (hasProvision || hasTeamId) {
545
+ const pbxprojPath = this.getPbxProjPath(projectData);
546
+ if (this.$fs.exists(pbxprojPath)) {
547
+ const xcode = this.$pbxprojDomXcode.Xcode.open(pbxprojPath);
548
+ const signing = xcode.getSigning(projectData.projectName);
549
+ if (hasProvision) {
550
+ if (signing && signing.style === "Manual") {
551
+ for (const name in signing.configurations) {
552
+ const config = signing.configurations[name];
553
+ if (config.uuid !== provision && config.name !== provision) {
554
+ changesInfo.signingChanged = true;
555
+ break;
564
556
  }
565
557
  }
566
- else {
567
- changesInfo.signingChanged = true;
568
- }
569
558
  }
570
- if (hasTeamId) {
571
- if (signing && signing.style === "Automatic") {
572
- if (signing.team !== teamId) {
573
- const teamIdsForName = yield this.$iOSProvisionService.getTeamIdsWithName(teamId);
574
- if (!teamIdsForName.some((id) => id === signing.team)) {
575
- changesInfo.signingChanged = true;
576
- }
559
+ else {
560
+ changesInfo.signingChanged = true;
561
+ }
562
+ }
563
+ if (hasTeamId) {
564
+ if (signing && signing.style === "Automatic") {
565
+ if (signing.team !== teamId) {
566
+ const teamIdsForName = await this.$iOSProvisionService.getTeamIdsWithName(teamId);
567
+ if (!teamIdsForName.some((id) => id === signing.team)) {
568
+ changesInfo.signingChanged = true;
577
569
  }
578
570
  }
579
- else {
580
- changesInfo.signingChanged = true;
581
- }
582
571
  }
583
- }
584
- else {
585
- changesInfo.signingChanged = true;
572
+ else {
573
+ changesInfo.signingChanged = true;
574
+ }
586
575
  }
587
576
  }
588
- });
577
+ else {
578
+ changesInfo.signingChanged = true;
579
+ }
580
+ }
589
581
  }
590
582
  getDeploymentTarget(projectData) {
591
583
  const target = this.$xcconfigService.readPropertyValue(this.getBuildXCConfigFilePath(projectData), "IPHONEOS_DEPLOYMENT_TARGET");
@@ -632,54 +624,50 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
632
624
  const newFileName = projectData.projectName + fileNamePart;
633
625
  this.$fs.rename(path.join(fileRootLocation, oldFileName), path.join(fileRootLocation, newFileName));
634
626
  }
635
- prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
636
- return __awaiter(this, void 0, void 0, function* () {
637
- const project = this.createPbxProj(projectData);
638
- const group = this.getRootGroup(groupName, sourceFolderPath);
639
- project.addPbxGroup(group.files, group.name, group.path, null, {
640
- isMain: true,
641
- filesRelativeToProject: true,
642
- });
643
- project.addToHeaderSearchPaths(group.path);
644
- const headerFiles = this.$fs.exists(sourceFolderPath)
645
- ? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
646
- : [];
647
- if (headerFiles.length > 0 &&
648
- !this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
649
- this.$logger.warn(`warning: Directory ${sourceFolderPath} with native iOS source code doesn't contain a modulemap file. Metadata for it will not be generated and it will not be accessible from JavaScript. To learn more see https://docs.nativescript.org/guides/ios-source-code`);
650
- }
651
- this.savePbxProj(project, projectData);
627
+ async prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
628
+ const project = this.createPbxProj(projectData);
629
+ const group = this.getRootGroup(groupName, sourceFolderPath);
630
+ project.addPbxGroup(group.files, group.name, group.path, null, {
631
+ isMain: true,
632
+ filesRelativeToProject: true,
652
633
  });
634
+ project.addToHeaderSearchPaths(group.path);
635
+ const headerFiles = this.$fs.exists(sourceFolderPath)
636
+ ? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
637
+ : [];
638
+ if (headerFiles.length > 0 &&
639
+ !this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
640
+ this.$logger.warn(`warning: Directory ${sourceFolderPath} with native iOS source code doesn't contain a modulemap file. Metadata for it will not be generated and it will not be accessible from JavaScript. To learn more see https://docs.nativescript.org/guides/ios-source-code`);
641
+ }
642
+ this.savePbxProj(project, projectData);
653
643
  }
654
- addExtensions(projectData, pluginsData) {
655
- return __awaiter(this, void 0, void 0, function* () {
656
- const resorcesExtensionsPath = path.join(projectData.getAppResourcesDirectoryPath(), this.getPlatformData(projectData).normalizedPlatformName, constants.NATIVE_EXTENSION_FOLDER);
657
- const platformData = this.getPlatformData(projectData);
658
- const pbxProjPath = this.getPbxProjPath(projectData);
659
- const addedExtensionsFromResources = yield this.$iOSExtensionsService.addExtensionsFromPath({
660
- extensionsFolderPath: resorcesExtensionsPath,
644
+ async addExtensions(projectData, pluginsData) {
645
+ const resorcesExtensionsPath = path.join(projectData.getAppResourcesDirectoryPath(), this.getPlatformData(projectData).normalizedPlatformName, constants.NATIVE_EXTENSION_FOLDER);
646
+ const platformData = this.getPlatformData(projectData);
647
+ const pbxProjPath = this.getPbxProjPath(projectData);
648
+ const addedExtensionsFromResources = await this.$iOSExtensionsService.addExtensionsFromPath({
649
+ extensionsFolderPath: resorcesExtensionsPath,
650
+ projectData,
651
+ platformData,
652
+ pbxProjPath,
653
+ });
654
+ let addedExtensionsFromPlugins = false;
655
+ for (const pluginIndex in pluginsData) {
656
+ const pluginData = pluginsData[pluginIndex];
657
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
658
+ const extensionPath = path.join(pluginPlatformsFolderPath, constants.NATIVE_EXTENSION_FOLDER);
659
+ const addedExtensionFromPlugin = await this.$iOSExtensionsService.addExtensionsFromPath({
660
+ extensionsFolderPath: extensionPath,
661
661
  projectData,
662
662
  platformData,
663
663
  pbxProjPath,
664
664
  });
665
- let addedExtensionsFromPlugins = false;
666
- for (const pluginIndex in pluginsData) {
667
- const pluginData = pluginsData[pluginIndex];
668
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
669
- const extensionPath = path.join(pluginPlatformsFolderPath, constants.NATIVE_EXTENSION_FOLDER);
670
- const addedExtensionFromPlugin = yield this.$iOSExtensionsService.addExtensionsFromPath({
671
- extensionsFolderPath: extensionPath,
672
- projectData,
673
- platformData,
674
- pbxProjPath,
675
- });
676
- addedExtensionsFromPlugins =
677
- addedExtensionsFromPlugins || addedExtensionFromPlugin;
678
- }
679
- if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
680
- this.$logger.warn("The support for iOS App Extensions is currently in Beta. For more information about the current development state and any known issues, please check the relevant GitHub issue: https://github.com/NativeScript/nativescript-cli/issues/4472");
681
- }
682
- });
665
+ addedExtensionsFromPlugins =
666
+ addedExtensionsFromPlugins || addedExtensionFromPlugin;
667
+ }
668
+ if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
669
+ this.$logger.warn("The support for iOS App Extensions is currently in Beta. For more information about the current development state and any known issues, please check the relevant GitHub issue: https://github.com/NativeScript/nativescript-cli/issues/4472");
670
+ }
683
671
  }
684
672
  getRootGroup(name, rootPath) {
685
673
  const filePathsArr = [];
@@ -699,32 +687,26 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
699
687
  }
700
688
  return rootGroup;
701
689
  }
702
- prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
703
- return __awaiter(this, void 0, void 0, function* () {
704
- const project = this.createPbxProj(projectData);
705
- const resourcesPath = path.join(pluginPlatformsFolderPath, "Resources");
706
- if (this.$fs.exists(resourcesPath) && !this.$fs.isEmptyDir(resourcesPath)) {
707
- for (const fileName of this.$fs.readDirectory(resourcesPath)) {
708
- const filePath = path.join(resourcesPath, fileName);
709
- project.addResourceFile(filePath);
710
- }
690
+ async prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
691
+ const project = this.createPbxProj(projectData);
692
+ const resourcesPath = path.join(pluginPlatformsFolderPath, "Resources");
693
+ if (this.$fs.exists(resourcesPath) && !this.$fs.isEmptyDir(resourcesPath)) {
694
+ for (const fileName of this.$fs.readDirectory(resourcesPath)) {
695
+ const filePath = path.join(resourcesPath, fileName);
696
+ project.addResourceFile(filePath);
711
697
  }
712
- this.savePbxProj(project, projectData);
713
- });
698
+ }
699
+ this.savePbxProj(project, projectData);
714
700
  }
715
- prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
716
- return __awaiter(this, void 0, void 0, function* () {
717
- for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, FRAMEWORK_EXTENSIONS)) {
718
- yield this.addFramework(path.join(pluginPlatformsFolderPath, fileName), projectData);
719
- }
720
- });
701
+ async prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
702
+ for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, FRAMEWORK_EXTENSIONS)) {
703
+ await this.addFramework(path.join(pluginPlatformsFolderPath, fileName), projectData);
704
+ }
721
705
  }
722
- prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
723
- return __awaiter(this, void 0, void 0, function* () {
724
- for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, ".a")) {
725
- yield this.addStaticLibrary(path.join(pluginPlatformsFolderPath, fileName), projectData);
726
- }
727
- });
706
+ async prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
707
+ for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, ".a")) {
708
+ await this.addStaticLibrary(path.join(pluginPlatformsFolderPath, fileName), projectData);
709
+ }
728
710
  }
729
711
  removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData) {
730
712
  const project = this.createPbxProj(projectData);
@@ -773,46 +755,44 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
773
755
  const modulemap = `module ${libraryName} { explicit module ${libraryName} { ${headers.join(" ")} } }`;
774
756
  this.$fs.writeFile(path.join(headersFolderPath, "module.modulemap"), modulemap);
775
757
  }
776
- mergeProjectXcconfigFiles(projectData) {
777
- return __awaiter(this, void 0, void 0, function* () {
778
- const platformData = this.getPlatformData(projectData);
779
- const pluginsXcconfigFilePaths = _.values(this.$xcconfigService.getPluginsXcconfigFilePaths(platformData.projectRoot));
780
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
781
- this.$fs.deleteFile(pluginsXcconfigFilePath);
782
- }
783
- const allPlugins = this.getAllProductionPlugins(projectData);
784
- for (const plugin of allPlugins) {
785
- const pluginPlatformsFolderPath = plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
786
- const pluginXcconfigFilePath = path.join(pluginPlatformsFolderPath, constants_2.BUILD_XCCONFIG_FILE_NAME);
787
- if (this.$fs.exists(pluginXcconfigFilePath)) {
788
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
789
- yield this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
790
- }
791
- }
792
- }
793
- const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
794
- if (this.$fs.exists(appResourcesXcconfigPath)) {
758
+ async mergeProjectXcconfigFiles(projectData) {
759
+ const platformData = this.getPlatformData(projectData);
760
+ const pluginsXcconfigFilePaths = _.values(this.$xcconfigService.getPluginsXcconfigFilePaths(platformData.projectRoot));
761
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
762
+ this.$fs.deleteFile(pluginsXcconfigFilePath);
763
+ }
764
+ const allPlugins = this.getAllProductionPlugins(projectData);
765
+ for (const plugin of allPlugins) {
766
+ const pluginPlatformsFolderPath = plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
767
+ const pluginXcconfigFilePath = path.join(pluginPlatformsFolderPath, constants_2.BUILD_XCCONFIG_FILE_NAME);
768
+ if (this.$fs.exists(pluginXcconfigFilePath)) {
795
769
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
796
- yield this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
770
+ await this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
797
771
  }
798
772
  }
773
+ }
774
+ const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
775
+ if (this.$fs.exists(appResourcesXcconfigPath)) {
799
776
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
800
- if (!this.$fs.exists(pluginsXcconfigFilePath)) {
801
- this.$fs.writeFile(pluginsXcconfigFilePath, "");
802
- }
777
+ await this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
803
778
  }
804
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
805
- const entitlementsPropertyValue = this.$xcconfigService.readPropertyValue(pluginsXcconfigFilePath, constants.CODE_SIGN_ENTITLEMENTS);
806
- if (entitlementsPropertyValue === null &&
807
- this.$fs.exists(this.$iOSEntitlementsService.getPlatformsEntitlementsPath(projectData))) {
808
- const tempEntitlementsDir = yield this.$tempService.mkdirSync("entitlements");
809
- const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
810
- const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
811
- this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
812
- yield this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
813
- }
779
+ }
780
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
781
+ if (!this.$fs.exists(pluginsXcconfigFilePath)) {
782
+ this.$fs.writeFile(pluginsXcconfigFilePath, "");
814
783
  }
815
- });
784
+ }
785
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
786
+ const entitlementsPropertyValue = this.$xcconfigService.readPropertyValue(pluginsXcconfigFilePath, constants.CODE_SIGN_ENTITLEMENTS);
787
+ if (entitlementsPropertyValue === null &&
788
+ this.$fs.exists(this.$iOSEntitlementsService.getPlatformsEntitlementsPath(projectData))) {
789
+ const tempEntitlementsDir = await this.$tempService.mkdirSync("entitlements");
790
+ const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
791
+ const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
792
+ this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
793
+ await this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
794
+ }
795
+ }
816
796
  }
817
797
  getBuildXCConfigFilePath(projectData) {
818
798
  const buildXCConfig = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
@@ -831,21 +811,19 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
831
811
  this.$logger.warn(`[WARNING]: The CFBundleIdentifier key inside the 'Info.plist' will be overriden by the 'id' set inside the "${constants_2.CONFIG_FILE_NAME_DISPLAY}".`);
832
812
  }
833
813
  }
834
- applyPluginsCocoaPods(pluginsData, projectData, platformData) {
835
- return __awaiter(this, void 0, void 0, function* () {
836
- for (const pluginIndex in pluginsData) {
837
- const pluginData = pluginsData[pluginIndex];
838
- if (this.$fs.exists(pluginData.pluginPlatformsFolderPath(platformData.normalizedPlatformName))) {
839
- yield this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
840
- }
814
+ async applyPluginsCocoaPods(pluginsData, projectData, platformData) {
815
+ for (const pluginIndex in pluginsData) {
816
+ const pluginData = pluginsData[pluginIndex];
817
+ if (this.$fs.exists(pluginData.pluginPlatformsFolderPath(platformData.normalizedPlatformName))) {
818
+ await this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
841
819
  }
842
- });
820
+ }
843
821
  }
844
822
  }
823
+ exports.IOSProjectService = IOSProjectService;
845
824
  IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER = "__PROJECT_NAME__";
846
825
  IOSProjectService.IOS_PLATFORM_NAME = "ios";
847
826
  __decorate([
848
827
  (0, helpers_2.hook)("buildIOS")
849
828
  ], IOSProjectService.prototype, "buildProject", null);
850
- exports.IOSProjectService = IOSProjectService;
851
829
  yok_1.injector.register("iOSProjectService", IOSProjectService);