nativescript 8.9.0-dev.2 → 8.9.0-dev.4

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 (345) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/docs/man_pages/project/configuration/widget-ios.md +24 -0
  3. package/docs/man_pages/project/configuration/widget.md +24 -0
  4. package/docs/man_pages/start.md +1 -1
  5. package/lib/android-tools-info.js +11 -22
  6. package/lib/base-package-manager.js +53 -70
  7. package/lib/bun-package-manager.js +75 -98
  8. package/lib/color.js +4 -4
  9. package/lib/commands/add-platform.js +14 -30
  10. package/lib/commands/apple-login.js +18 -29
  11. package/lib/commands/appstore-list.js +34 -45
  12. package/lib/commands/appstore-upload.js +54 -67
  13. package/lib/commands/build.js +55 -87
  14. package/lib/commands/clean.js +169 -184
  15. package/lib/commands/command-base.js +14 -27
  16. package/lib/commands/config.js +49 -68
  17. package/lib/commands/create-project.js +215 -234
  18. package/lib/commands/debug.js +66 -88
  19. package/lib/commands/deploy.js +28 -44
  20. package/lib/commands/embedding/embed.js +37 -56
  21. package/lib/commands/extensibility/install-extension.js +5 -16
  22. package/lib/commands/extensibility/list-extensions.js +13 -24
  23. package/lib/commands/extensibility/uninstall-extension.js +4 -15
  24. package/lib/commands/fonts.js +30 -41
  25. package/lib/commands/generate-assets.js +13 -28
  26. package/lib/commands/generate-help.js +2 -13
  27. package/lib/commands/generate.js +49 -60
  28. package/lib/commands/info.js +2 -13
  29. package/lib/commands/install.js +34 -49
  30. package/lib/commands/list-platforms.js +14 -25
  31. package/lib/commands/migrate.js +15 -26
  32. package/lib/commands/native-add.js +23 -46
  33. package/lib/commands/platform-clean.js +19 -32
  34. package/lib/commands/plugin/add-plugin.js +12 -25
  35. package/lib/commands/plugin/build-plugin.js +31 -44
  36. package/lib/commands/plugin/create-plugin.js +114 -137
  37. package/lib/commands/plugin/list-plugins.js +22 -33
  38. package/lib/commands/plugin/remove-plugin.js +21 -34
  39. package/lib/commands/plugin/update-plugin.js +20 -33
  40. package/lib/commands/post-install.js +25 -38
  41. package/lib/commands/prepare.js +19 -35
  42. package/lib/commands/preview.js +50 -63
  43. package/lib/commands/remove-platform.js +7 -18
  44. package/lib/commands/resources/resources-update.js +14 -27
  45. package/lib/commands/run.js +55 -76
  46. package/lib/commands/start.js +6 -19
  47. package/lib/commands/test-init.js +126 -137
  48. package/lib/commands/test.js +72 -95
  49. package/lib/commands/typings.js +126 -142
  50. package/lib/commands/update-platform.js +26 -39
  51. package/lib/commands/update.js +31 -44
  52. package/lib/commands/widget.js +408 -357
  53. package/lib/common/child-process.js +53 -72
  54. package/lib/common/codeGeneration/code-entity.js +1 -1
  55. package/lib/common/codeGeneration/code-printer.js +1 -1
  56. package/lib/common/command-params.js +7 -18
  57. package/lib/common/commands/analytics.js +29 -42
  58. package/lib/common/commands/autocompletion.js +41 -58
  59. package/lib/common/commands/device/device-log-stream.js +12 -23
  60. package/lib/common/commands/device/get-file.js +23 -34
  61. package/lib/common/commands/device/list-applications.js +12 -23
  62. package/lib/common/commands/device/list-devices.js +72 -87
  63. package/lib/common/commands/device/list-files.js +24 -35
  64. package/lib/common/commands/device/put-file.js +23 -34
  65. package/lib/common/commands/device/run-application.js +12 -25
  66. package/lib/common/commands/device/stop-application.js +11 -22
  67. package/lib/common/commands/device/uninstall-application.js +6 -17
  68. package/lib/common/commands/generate-messages.js +17 -28
  69. package/lib/common/commands/help.js +20 -33
  70. package/lib/common/commands/package-manager-get.js +6 -17
  71. package/lib/common/commands/package-manager-set.js +9 -20
  72. package/lib/common/commands/post-install.js +2 -13
  73. package/lib/common/commands/preuninstall.js +27 -42
  74. package/lib/common/commands/proxy/proxy-base.js +11 -22
  75. package/lib/common/commands/proxy/proxy-clear.js +4 -15
  76. package/lib/common/commands/proxy/proxy-get.js +3 -14
  77. package/lib/common/commands/proxy/proxy-set.js +87 -100
  78. package/lib/common/constants.js +11 -11
  79. package/lib/common/decorators.js +10 -22
  80. package/lib/common/dispatchers.js +84 -101
  81. package/lib/common/errors.js +92 -107
  82. package/lib/common/file-system.js +110 -132
  83. package/lib/common/header.js +1 -2
  84. package/lib/common/helpers.js +149 -178
  85. package/lib/common/host-info.js +40 -53
  86. package/lib/common/http-client.js +104 -119
  87. package/lib/common/logger/appenders/cli-appender.js +1 -2
  88. package/lib/common/logger/appenders/emit-appender.js +1 -2
  89. package/lib/common/logger/layouts/cli-layout.js +1 -2
  90. package/lib/common/logger/logger.js +4 -4
  91. package/lib/common/mobile/android/android-application-manager.js +138 -159
  92. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
  93. package/lib/common/mobile/android/android-debug-bridge.js +92 -117
  94. package/lib/common/mobile/android/android-device-file-system.js +101 -134
  95. package/lib/common/mobile/android/android-device-hash-service.js +52 -77
  96. package/lib/common/mobile/android/android-device.js +73 -90
  97. package/lib/common/mobile/android/android-emulator-services.js +105 -130
  98. package/lib/common/mobile/android/android-log-filter.js +1 -1
  99. package/lib/common/mobile/android/android-virtual-device-service.js +78 -99
  100. package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
  101. package/lib/common/mobile/android/genymotion/genymotion-service.js +94 -121
  102. package/lib/common/mobile/android/genymotion/virtualbox-service.js +74 -91
  103. package/lib/common/mobile/android/logcat-helper.js +114 -133
  104. package/lib/common/mobile/application-manager-base.js +89 -112
  105. package/lib/common/mobile/device-log-provider-base.js +7 -18
  106. package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
  107. package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
  108. package/lib/common/mobile/ios/device/ios-device-operations.js +106 -143
  109. package/lib/common/mobile/ios/device/ios-device.js +20 -36
  110. package/lib/common/mobile/ios/ios-device-base.js +58 -81
  111. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +66 -95
  112. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
  113. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +61 -90
  114. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +31 -47
  115. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
  116. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
  117. package/lib/common/mobile/mobile-core/android-device-discovery.js +44 -63
  118. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +23 -34
  119. package/lib/common/mobile/mobile-core/android-process-service.js +174 -213
  120. package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
  121. package/lib/common/mobile/mobile-core/devices-service.js +400 -450
  122. package/lib/common/mobile/mobile-core/ios-device-discovery.js +25 -36
  123. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +49 -64
  124. package/lib/common/mobile/mobile-helper.js +15 -26
  125. package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
  126. package/lib/common/opener.js +2 -2
  127. package/lib/common/prompter.js +91 -106
  128. package/lib/common/queue.js +9 -20
  129. package/lib/common/services/auto-completion-service.js +40 -53
  130. package/lib/common/services/cancellation.js +17 -28
  131. package/lib/common/services/commands-service.js +156 -179
  132. package/lib/common/services/help-service.js +130 -155
  133. package/lib/common/services/hooks-service.js +99 -114
  134. package/lib/common/services/ios-notification-service.js +21 -34
  135. package/lib/common/services/json-file-settings-service.js +56 -75
  136. package/lib/common/services/lock-service.js +35 -52
  137. package/lib/common/services/message-contract-generator.js +35 -46
  138. package/lib/common/services/micro-templating-service.js +6 -17
  139. package/lib/common/services/net-service.js +92 -109
  140. package/lib/common/services/project-files-manager.js +10 -23
  141. package/lib/common/services/proxy-service.js +13 -24
  142. package/lib/common/services/qr.js +13 -24
  143. package/lib/common/services/settings-service.js +1 -1
  144. package/lib/common/services/xcode-select-service.js +20 -35
  145. package/lib/common/utils.js +2 -2
  146. package/lib/common/validators/project-name-validator.js +1 -1
  147. package/lib/common/validators/validation-result.js +1 -1
  148. package/lib/common/verify-node-version.js +2 -3
  149. package/lib/common/yok.js +25 -38
  150. package/lib/config.js +41 -56
  151. package/lib/constants.js +24 -24
  152. package/lib/controllers/build-controller.js +82 -99
  153. package/lib/controllers/debug-controller.js +111 -132
  154. package/lib/controllers/deploy-controller.js +15 -23
  155. package/lib/controllers/migrate-controller.js +780 -853
  156. package/lib/controllers/platform-controller.js +74 -89
  157. package/lib/controllers/prepare-controller.js +241 -270
  158. package/lib/controllers/run-controller.js +411 -425
  159. package/lib/controllers/update-controller-base.js +16 -29
  160. package/lib/controllers/update-controller.js +101 -126
  161. package/lib/data/prepare-data.js +4 -1
  162. package/lib/definitions/project.d.ts +24 -24
  163. package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
  164. package/lib/detached-processes/cleanup-process.js +16 -25
  165. package/lib/device-path-provider.js +23 -34
  166. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +155 -170
  167. package/lib/device-sockets/ios/notification.js +1 -1
  168. package/lib/device-sockets/ios/socket-request-executor.js +26 -41
  169. package/lib/helpers/android-bundle-validator-helper.js +1 -1
  170. package/lib/helpers/deploy-command-helper.js +44 -49
  171. package/lib/helpers/key-command-helper.js +4 -13
  172. package/lib/helpers/livesync-command-helper.js +138 -153
  173. package/lib/helpers/network-connectivity-validator.js +6 -17
  174. package/lib/helpers/options-track-helper.js +6 -17
  175. package/lib/helpers/platform-command-helper.js +103 -124
  176. package/lib/key-commands/index.js +150 -200
  177. package/lib/nativescript-cli.js +5 -14
  178. package/lib/node-package-manager.js +90 -113
  179. package/lib/options.js +4 -13
  180. package/lib/package-installation-manager.js +132 -167
  181. package/lib/package-manager.js +64 -87
  182. package/lib/platform-command-param.js +4 -15
  183. package/lib/pnpm-package-manager.js +60 -79
  184. package/lib/project-data.js +1 -1
  185. package/lib/providers/project-files-provider.js +1 -1
  186. package/lib/services/analytics/analytics-broker-process.js +13 -22
  187. package/lib/services/analytics/analytics-broker.js +17 -30
  188. package/lib/services/analytics/analytics-service.js +165 -201
  189. package/lib/services/analytics/google-analytics-provider.js +41 -56
  190. package/lib/services/analytics-settings-service.js +15 -32
  191. package/lib/services/android/android-bundle-tool-service.js +43 -60
  192. package/lib/services/android/gradle-build-args-service.js +10 -21
  193. package/lib/services/android/gradle-build-service.js +22 -35
  194. package/lib/services/android/gradle-command-service.js +22 -35
  195. package/lib/services/android-device-debug-service.js +92 -119
  196. package/lib/services/android-plugin-build-service.js +219 -245
  197. package/lib/services/android-project-service.js +134 -179
  198. package/lib/services/android-resources-migration-service.js +57 -70
  199. package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
  200. package/lib/services/apple-portal/apple-portal-session-service.js +196 -215
  201. package/lib/services/apple-portal/srp/srp-wrapper.js +45 -60
  202. package/lib/services/assets-generation/assets-generation-service.js +114 -128
  203. package/lib/services/build-artifacts-service.js +9 -20
  204. package/lib/services/build-info-file-service.js +20 -35
  205. package/lib/services/cleanup-service.js +47 -76
  206. package/lib/services/cocoapods-service.js +124 -145
  207. package/lib/services/device/device-install-app-service.js +54 -71
  208. package/lib/services/doctor-service.js +106 -125
  209. package/lib/services/extensibility-service.js +87 -106
  210. package/lib/services/files-hash-service.js +26 -43
  211. package/lib/services/hmr-status-service.js +1 -1
  212. package/lib/services/initialize-service.js +38 -51
  213. package/lib/services/ios/export-options-plist-service.js +41 -54
  214. package/lib/services/ios/ios-signing-service.js +171 -190
  215. package/lib/services/ios/spm-service.js +52 -65
  216. package/lib/services/ios/xcodebuild-args-service.js +77 -94
  217. package/lib/services/ios/xcodebuild-command-service.js +14 -25
  218. package/lib/services/ios/xcodebuild-service.js +52 -71
  219. package/lib/services/ios-debugger-port-service.js +24 -37
  220. package/lib/services/ios-device-debug-service.js +75 -102
  221. package/lib/services/ios-entitlements-service.js +31 -42
  222. package/lib/services/ios-extensions-service.js +18 -29
  223. package/lib/services/ios-project-service.js +530 -591
  224. package/lib/services/ios-provision-service.js +110 -131
  225. package/lib/services/ios-watch-app-service.js +21 -32
  226. package/lib/services/ip-service.js +39 -54
  227. package/lib/services/itmstransporter-service.js +129 -152
  228. package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
  229. package/lib/services/livesync/android-device-livesync-service.js +121 -150
  230. package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -154
  231. package/lib/services/livesync/android-livesync-service.js +14 -35
  232. package/lib/services/livesync/android-livesync-tool.js +90 -113
  233. package/lib/services/livesync/device-livesync-service-base.js +16 -29
  234. package/lib/services/livesync/ios-device-livesync-service.js +120 -149
  235. package/lib/services/livesync/ios-livesync-service.js +43 -59
  236. package/lib/services/livesync/platform-livesync-service-base.js +98 -123
  237. package/lib/services/log-parser-service.js +1 -1
  238. package/lib/services/log-source-map-service.js +31 -42
  239. package/lib/services/marking-mode-service.js +17 -30
  240. package/lib/services/npm-config-service.js +1 -1
  241. package/lib/services/pacote-service.js +54 -69
  242. package/lib/services/performance-service.js +1 -1
  243. package/lib/services/platform/add-platform-service.js +57 -78
  244. package/lib/services/platform/platform-validation-service.js +22 -33
  245. package/lib/services/platform/prepare-native-platform-service.js +51 -64
  246. package/lib/services/platform-environment-requirements.js +27 -38
  247. package/lib/services/plugins-service.js +126 -151
  248. package/lib/services/project-backup-service.js +1 -1
  249. package/lib/services/project-changes-service.js +126 -143
  250. package/lib/services/project-cleanup-service.js +65 -78
  251. package/lib/services/project-config-service.js +78 -88
  252. package/lib/services/project-data-service.js +112 -129
  253. package/lib/services/project-name-service.js +28 -43
  254. package/lib/services/project-service.js +90 -109
  255. package/lib/services/project-templates-service.js +52 -67
  256. package/lib/services/start-service.js +41 -59
  257. package/lib/services/temp-service.js +8 -21
  258. package/lib/services/terminal-spinner-service.js +15 -26
  259. package/lib/services/test-execution-service.js +64 -77
  260. package/lib/services/test-initialization-service.js +2 -2
  261. package/lib/services/timeline-profiler-service.js +1 -1
  262. package/lib/services/versions-service.js +120 -139
  263. package/lib/services/webpack/webpack-compiler-service.js +228 -251
  264. package/lib/services/xcconfig-service.js +8 -19
  265. package/lib/sys-info.js +45 -62
  266. package/lib/tools/node-modules/node-modules-builder.js +16 -27
  267. package/lib/yarn-package-manager.js +59 -78
  268. package/lib/yarn2-package-manager.js +62 -81
  269. package/package.json +67 -82
  270. package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
  271. package/node_modules/@npmcli/move-file/README.md +0 -69
  272. package/node_modules/@npmcli/move-file/lib/index.js +0 -185
  273. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
  274. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
  275. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
  276. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
  277. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
  278. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
  279. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
  280. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
  281. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
  282. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
  283. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
  284. package/node_modules/@npmcli/move-file/package.json +0 -47
  285. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  286. package/node_modules/balanced-match/LICENSE.md +0 -21
  287. package/node_modules/balanced-match/README.md +0 -97
  288. package/node_modules/balanced-match/index.js +0 -62
  289. package/node_modules/balanced-match/package.json +0 -48
  290. package/node_modules/concat-map/.travis.yml +0 -4
  291. package/node_modules/concat-map/LICENSE +0 -18
  292. package/node_modules/concat-map/README.markdown +0 -62
  293. package/node_modules/concat-map/example/map.js +0 -6
  294. package/node_modules/concat-map/index.js +0 -13
  295. package/node_modules/concat-map/package.json +0 -43
  296. package/node_modules/concat-map/test/map.js +0 -39
  297. package/node_modules/fs.realpath/LICENSE +0 -43
  298. package/node_modules/fs.realpath/README.md +0 -33
  299. package/node_modules/fs.realpath/index.js +0 -66
  300. package/node_modules/fs.realpath/old.js +0 -303
  301. package/node_modules/fs.realpath/package.json +0 -26
  302. package/node_modules/inflight/LICENSE +0 -15
  303. package/node_modules/inflight/README.md +0 -37
  304. package/node_modules/inflight/inflight.js +0 -54
  305. package/node_modules/inflight/package.json +0 -29
  306. package/node_modules/inherits/LICENSE +0 -16
  307. package/node_modules/inherits/README.md +0 -42
  308. package/node_modules/inherits/inherits.js +0 -9
  309. package/node_modules/inherits/inherits_browser.js +0 -27
  310. package/node_modules/inherits/package.json +0 -29
  311. package/node_modules/once/LICENSE +0 -15
  312. package/node_modules/once/README.md +0 -79
  313. package/node_modules/once/once.js +0 -42
  314. package/node_modules/once/package.json +0 -33
  315. package/node_modules/path-is-absolute/index.js +0 -20
  316. package/node_modules/path-is-absolute/license +0 -21
  317. package/node_modules/path-is-absolute/package.json +0 -43
  318. package/node_modules/path-is-absolute/readme.md +0 -59
  319. package/node_modules/rimraf/LICENSE +0 -15
  320. package/node_modules/rimraf/README.md +0 -101
  321. package/node_modules/rimraf/bin.js +0 -68
  322. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
  323. package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
  324. package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
  325. package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
  326. package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
  327. package/node_modules/rimraf/node_modules/glob/README.md +0 -378
  328. package/node_modules/rimraf/node_modules/glob/common.js +0 -238
  329. package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
  330. package/node_modules/rimraf/node_modules/glob/package.json +0 -55
  331. package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
  332. package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
  333. package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
  334. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
  335. package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
  336. package/node_modules/rimraf/package.json +0 -32
  337. package/node_modules/rimraf/rimraf.js +0 -360
  338. package/node_modules/stringify-package/LICENSE +0 -13
  339. package/node_modules/stringify-package/README.md +0 -55
  340. package/node_modules/stringify-package/index.js +0 -18
  341. package/node_modules/stringify-package/package.json +0 -38
  342. package/node_modules/wrappy/LICENSE +0 -15
  343. package/node_modules/wrappy/README.md +0 -36
  344. package/node_modules/wrappy/package.json +0 -29
  345. package/node_modules/wrappy/wrappy.js +0 -33
@@ -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");
@@ -152,122 +143,110 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
152
143
  }
153
144
  return this._platformData;
154
145
  }
155
- validateOptions(projectId, provision, teamId) {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- if (provision && teamId) {
158
- this.$errors.fail("The options --provision and --teamId are mutually exclusive.");
159
- }
160
- if (provision === true) {
161
- yield this.$iOSProvisionService.listProvisions(projectId);
162
- this.$errors.fail("Please provide provisioning profile uuid or name with the --provision option.");
163
- }
164
- if (teamId === true) {
165
- yield this.$iOSProvisionService.listTeams();
166
- this.$errors.fail("Please provide team id or team name with the --teamId options.");
167
- }
168
- return true;
169
- });
146
+ async validateOptions(projectId, provision, teamId) {
147
+ if (provision && teamId) {
148
+ this.$errors.fail("The options --provision and --teamId are mutually exclusive.");
149
+ }
150
+ if (provision === true) {
151
+ await this.$iOSProvisionService.listProvisions(projectId);
152
+ this.$errors.fail("Please provide provisioning profile uuid or name with the --provision option.");
153
+ }
154
+ if (teamId === true) {
155
+ await this.$iOSProvisionService.listTeams();
156
+ this.$errors.fail("Please provide team id or team name with the --teamId options.");
157
+ }
158
+ return true;
170
159
  }
171
160
  getAppResourcesDestinationDirectoryPath(projectData) {
172
161
  return path.join(this.getPlatformData(projectData).projectRoot, projectData.projectName, "Resources");
173
162
  }
174
- validate(projectData, options, notConfiguredEnvOptions) {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- if (!this.$hostInfo.isDarwin) {
177
- return;
178
- }
179
- const checkEnvironmentRequirementsOutput = yield this.$platformEnvironmentRequirements.checkEnvironmentRequirements({
180
- platform: this.getPlatformData(projectData).normalizedPlatformName,
181
- projectDir: projectData.projectDir,
182
- options,
183
- notConfiguredEnvOptions,
184
- });
185
- if (checkEnvironmentRequirementsOutput &&
186
- checkEnvironmentRequirementsOutput.canExecute) {
187
- const xcodeWarning = yield this.$sysInfo.getXcodeWarning();
188
- if (xcodeWarning) {
189
- this.$logger.warn(xcodeWarning);
190
- }
191
- }
192
- return {
193
- checkEnvironmentRequirementsOutput,
194
- };
163
+ async validate(projectData, options, notConfiguredEnvOptions) {
164
+ if (!this.$hostInfo.isDarwin) {
165
+ return;
166
+ }
167
+ const checkEnvironmentRequirementsOutput = await this.$platformEnvironmentRequirements.checkEnvironmentRequirements({
168
+ platform: this.getPlatformData(projectData).normalizedPlatformName,
169
+ projectDir: projectData.projectDir,
170
+ options,
171
+ notConfiguredEnvOptions,
195
172
  });
173
+ if (checkEnvironmentRequirementsOutput &&
174
+ checkEnvironmentRequirementsOutput.canExecute) {
175
+ const xcodeWarning = await this.$sysInfo.getXcodeWarning();
176
+ if (xcodeWarning) {
177
+ this.$logger.warn(xcodeWarning);
178
+ }
179
+ }
180
+ return {
181
+ checkEnvironmentRequirementsOutput,
182
+ };
196
183
  }
197
- createProject(frameworkDir, frameworkVersion, projectData) {
198
- return __awaiter(this, void 0, void 0, function* () {
199
- this.$fs.ensureDirectoryExists(path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER));
200
- shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
201
- });
184
+ async createProject(frameworkDir, frameworkVersion, projectData) {
185
+ this.$fs.ensureDirectoryExists(path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER));
186
+ shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
202
187
  }
203
188
  //TODO: plamen5kov: revisit this method, might have unnecessary/obsolete logic
204
- interpolateData(projectData) {
205
- return __awaiter(this, void 0, void 0, function* () {
206
- const projectRootFilePath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER);
207
- // Starting with NativeScript for iOS 1.6.0, the project Info.plist file resides not in the platform project,
208
- // but in the hello-world app template as a platform specific resource.
209
- if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + "-Info.plist"))) {
210
- this.replaceFileName("-Info.plist", projectRootFilePath, projectData);
211
- }
212
- this.replaceFileName("-Prefix.pch", projectRootFilePath, projectData);
213
- if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + ".entitlements"))) {
214
- this.replaceFileName(".entitlements", projectRootFilePath, projectData);
215
- }
216
- const xcschemeDirPath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
217
- constants_2.IosProjectConstants.XcodeProjExtName, "xcshareddata/xcschemes");
218
- const xcschemeFilePath = path.join(xcschemeDirPath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
219
- constants_2.IosProjectConstants.XcodeSchemeExtName);
220
- if (this.$fs.exists(xcschemeFilePath)) {
221
- this.$logger.trace("Found shared scheme at xcschemeFilePath, renaming to match project name.");
222
- this.$logger.trace("Checkpoint 0");
223
- this.replaceFileContent(xcschemeFilePath, projectData);
224
- this.$logger.trace("Checkpoint 1");
225
- this.replaceFileName(constants_2.IosProjectConstants.XcodeSchemeExtName, xcschemeDirPath, projectData);
226
- this.$logger.trace("Checkpoint 2");
227
- }
228
- else {
229
- this.$logger.trace("Copying xcscheme from template not found at " + xcschemeFilePath);
230
- }
231
- this.replaceFileName(constants_2.IosProjectConstants.XcodeProjExtName, this.getPlatformData(projectData).projectRoot, projectData);
232
- const pbxprojFilePath = this.getPbxProjPath(projectData);
233
- this.replaceFileContent(pbxprojFilePath, projectData);
234
- const internalDirPath = path.join(projectRootFilePath, "..", "internal");
235
- const xcframeworksFilePath = path.join(internalDirPath, "XCFrameworks.zip");
236
- if (this.$fs.exists(xcframeworksFilePath)) {
237
- yield this.$fs.unzip(xcframeworksFilePath, internalDirPath);
238
- this.$fs.deleteFile(xcframeworksFilePath);
239
- }
240
- });
189
+ async interpolateData(projectData) {
190
+ const projectRootFilePath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER);
191
+ // Starting with NativeScript for iOS 1.6.0, the project Info.plist file resides not in the platform project,
192
+ // but in the hello-world app template as a platform specific resource.
193
+ if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + "-Info.plist"))) {
194
+ this.replaceFileName("-Info.plist", projectRootFilePath, projectData);
195
+ }
196
+ this.replaceFileName("-Prefix.pch", projectRootFilePath, projectData);
197
+ if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + ".entitlements"))) {
198
+ this.replaceFileName(".entitlements", projectRootFilePath, projectData);
199
+ }
200
+ const xcschemeDirPath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
201
+ constants_2.IosProjectConstants.XcodeProjExtName, "xcshareddata/xcschemes");
202
+ const xcschemeFilePath = path.join(xcschemeDirPath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
203
+ constants_2.IosProjectConstants.XcodeSchemeExtName);
204
+ if (this.$fs.exists(xcschemeFilePath)) {
205
+ this.$logger.trace("Found shared scheme at xcschemeFilePath, renaming to match project name.");
206
+ this.$logger.trace("Checkpoint 0");
207
+ this.replaceFileContent(xcschemeFilePath, projectData);
208
+ this.$logger.trace("Checkpoint 1");
209
+ this.replaceFileName(constants_2.IosProjectConstants.XcodeSchemeExtName, xcschemeDirPath, projectData);
210
+ this.$logger.trace("Checkpoint 2");
211
+ }
212
+ else {
213
+ this.$logger.trace("Copying xcscheme from template not found at " + xcschemeFilePath);
214
+ }
215
+ this.replaceFileName(constants_2.IosProjectConstants.XcodeProjExtName, this.getPlatformData(projectData).projectRoot, projectData);
216
+ const pbxprojFilePath = this.getPbxProjPath(projectData);
217
+ this.replaceFileContent(pbxprojFilePath, projectData);
218
+ const internalDirPath = path.join(projectRootFilePath, "..", "internal");
219
+ const xcframeworksFilePath = path.join(internalDirPath, "XCFrameworks.zip");
220
+ if (this.$fs.exists(xcframeworksFilePath)) {
221
+ await this.$fs.unzip(xcframeworksFilePath, internalDirPath);
222
+ this.$fs.deleteFile(xcframeworksFilePath);
223
+ }
241
224
  }
242
225
  interpolateConfigurationFile(projectData) {
243
226
  return undefined;
244
227
  }
245
- cleanProject(projectRoot, projectData) {
246
- return __awaiter(this, void 0, void 0, function* () {
247
- return null;
248
- });
228
+ async cleanProject(projectRoot, projectData) {
229
+ return null;
249
230
  }
250
231
  afterCreateProject(projectRoot, projectData) {
251
232
  this.$fs.rename(path.join(projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER), path.join(projectRoot, projectData.projectName));
252
233
  }
253
- buildProject(projectRoot, projectData, buildData) {
254
- return __awaiter(this, void 0, void 0, function* () {
255
- const platformData = this.getPlatformData(projectData);
256
- const handler = (data) => {
257
- this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
258
- };
259
- if (buildData.buildForDevice) {
260
- yield this.$iOSSigningService.setupSigningForDevice(projectRoot, projectData, buildData);
261
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForDevice(platformData, projectData, buildData));
262
- }
263
- else if (buildData.buildForAppStore) {
264
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForAppStore(platformData, projectData, buildData));
265
- }
266
- else {
267
- yield (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForSimulator(platformData, projectData, buildData));
268
- }
269
- this.validateApplicationIdentifier(projectData);
270
- });
234
+ async buildProject(projectRoot, projectData, buildData) {
235
+ const platformData = this.getPlatformData(projectData);
236
+ const handler = (data) => {
237
+ this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
238
+ };
239
+ if (buildData.buildForDevice) {
240
+ await this.$iOSSigningService.setupSigningForDevice(projectRoot, projectData, buildData);
241
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForDevice(platformData, projectData, buildData));
242
+ }
243
+ else if (buildData.buildForAppStore) {
244
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForAppStore(platformData, projectData, buildData));
245
+ }
246
+ else {
247
+ await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForSimulator(platformData, projectData, buildData));
248
+ }
249
+ this.validateApplicationIdentifier(projectData);
271
250
  }
272
251
  isPlatformPrepared(projectRoot, projectData) {
273
252
  return this.$fs.exists(path.join(projectRoot, projectData.projectName, constants.APP_FOLDER_NAME));
@@ -275,210 +254,200 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
275
254
  cleanDeviceTempFolder(deviceIdentifier) {
276
255
  return Promise.resolve();
277
256
  }
278
- isDynamicFramework(frameworkPath) {
279
- return __awaiter(this, void 0, void 0, function* () {
280
- const isDynamicFrameworkBundle = (bundlePath, frameworkName) => __awaiter(this, void 0, void 0, function* () {
281
- const frameworkBinaryPath = path.join(bundlePath, frameworkName);
282
- const fileResult = (yield this.$childProcess.spawnFromEvent("file", [frameworkBinaryPath], "close")).stdout;
283
- const isDynamicallyLinked = _.includes(fileResult, "dynamically linked");
284
- return isDynamicallyLinked;
285
- });
286
- if (path.extname(frameworkPath) === ".xcframework") {
287
- let isDynamic = true;
288
- const plistJson = this.$plistParser.parseFileSync(path.join(frameworkPath, "Info.plist"));
289
- for (const library of plistJson.AvailableLibraries) {
290
- const singlePlatformFramework = path.join(frameworkPath, library.LibraryIdentifier, library.LibraryPath);
291
- if (this.$fs.exists(singlePlatformFramework)) {
292
- const frameworkName = path.basename(singlePlatformFramework, path.extname(singlePlatformFramework));
293
- isDynamic = yield isDynamicFrameworkBundle(singlePlatformFramework, frameworkName);
294
- break;
295
- }
257
+ async isDynamicFramework(frameworkPath) {
258
+ const isDynamicFrameworkBundle = async (bundlePath, frameworkName) => {
259
+ const frameworkBinaryPath = path.join(bundlePath, frameworkName);
260
+ const fileResult = (await this.$childProcess.spawnFromEvent("file", [frameworkBinaryPath], "close")).stdout;
261
+ const isDynamicallyLinked = _.includes(fileResult, "dynamically linked");
262
+ return isDynamicallyLinked;
263
+ };
264
+ if (path.extname(frameworkPath) === ".xcframework") {
265
+ let isDynamic = true;
266
+ const plistJson = this.$plistParser.parseFileSync(path.join(frameworkPath, "Info.plist"));
267
+ for (const library of plistJson.AvailableLibraries) {
268
+ const singlePlatformFramework = path.join(frameworkPath, library.LibraryIdentifier, library.LibraryPath);
269
+ if (this.$fs.exists(singlePlatformFramework)) {
270
+ const frameworkName = path.basename(singlePlatformFramework, path.extname(singlePlatformFramework));
271
+ isDynamic = await isDynamicFrameworkBundle(singlePlatformFramework, frameworkName);
272
+ break;
296
273
  }
297
- return isDynamic;
298
274
  }
299
- else {
300
- const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
301
- return yield isDynamicFrameworkBundle(frameworkPath, frameworkName);
302
- }
303
- });
275
+ return isDynamic;
276
+ }
277
+ else {
278
+ const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
279
+ return await isDynamicFrameworkBundle(frameworkPath, frameworkName);
280
+ }
304
281
  }
305
- addFramework(frameworkPath, projectData) {
306
- return __awaiter(this, void 0, void 0, function* () {
307
- if (this.$hostInfo.isWindows) {
308
- return;
309
- }
310
- this.validateFramework(frameworkPath);
311
- const project = this.createPbxProj(projectData);
312
- const frameworkAddOptions = { customFramework: true };
313
- const dynamic = yield this.isDynamicFramework(frameworkPath);
314
- if (dynamic) {
315
- frameworkAddOptions["embed"] = true;
316
- frameworkAddOptions["sign"] = true;
317
- }
318
- if (this.$options.hostProjectPath) {
319
- // always mark xcframeworks for embedding
320
- frameworkAddOptions["embed"] = true;
321
- frameworkAddOptions["sign"] = false;
322
- }
323
- // Note: we used to prepend "$(SRCROOT)/" to the framework path, but seems like it's not needed anymore
324
- // "$(SRCROOT)/" +
325
- const frameworkRelativePath = this.getLibSubpathRelativeToProjectPath(frameworkPath, projectData);
326
- project.addFramework(frameworkRelativePath, frameworkAddOptions);
327
- // filePathsArray, buildPhaseType, comment, target, optionsOrFolderType, subfolderPath
328
- // project.addBuildPhase(
329
- // [],
330
- // "PBXShellScriptBuildPhase",
331
- // "Debug SRCROOT",
332
- // undefined,
333
- // {
334
- // shellPath: "/bin/sh",
335
- // shellScript: `echo "SRCROOT: $SRCROOT"`,
336
- // }
337
- // );
338
- this.savePbxProj(project, projectData);
339
- });
282
+ async addFramework(frameworkPath, projectData) {
283
+ if (this.$hostInfo.isWindows) {
284
+ return;
285
+ }
286
+ this.validateFramework(frameworkPath);
287
+ const project = this.createPbxProj(projectData);
288
+ const frameworkAddOptions = { customFramework: true };
289
+ const dynamic = await this.isDynamicFramework(frameworkPath);
290
+ if (dynamic) {
291
+ frameworkAddOptions["embed"] = true;
292
+ frameworkAddOptions["sign"] = true;
293
+ }
294
+ if (this.$options.hostProjectPath) {
295
+ // always mark xcframeworks for embedding
296
+ frameworkAddOptions["embed"] = true;
297
+ frameworkAddOptions["sign"] = false;
298
+ }
299
+ // Note: we used to prepend "$(SRCROOT)/" to the framework path, but seems like it's not needed anymore
300
+ // "$(SRCROOT)/" +
301
+ const frameworkRelativePath = this.getLibSubpathRelativeToProjectPath(frameworkPath, projectData);
302
+ project.addFramework(frameworkRelativePath, frameworkAddOptions);
303
+ // filePathsArray, buildPhaseType, comment, target, optionsOrFolderType, subfolderPath
304
+ // project.addBuildPhase(
305
+ // [],
306
+ // "PBXShellScriptBuildPhase",
307
+ // "Debug SRCROOT",
308
+ // undefined,
309
+ // {
310
+ // shellPath: "/bin/sh",
311
+ // shellScript: `echo "SRCROOT: $SRCROOT"`,
312
+ // }
313
+ // );
314
+ this.savePbxProj(project, projectData);
340
315
  }
341
- addStaticLibrary(staticLibPath, projectData) {
342
- return __awaiter(this, void 0, void 0, function* () {
343
- // Copy files to lib folder.
344
- const libraryName = path.basename(staticLibPath, ".a");
345
- const headersSubpath = path.join(path.dirname(staticLibPath), "include", libraryName);
346
- // Add static library to project file and setup header search paths
347
- const project = this.createPbxProj(projectData);
348
- const relativeStaticLibPath = this.getLibSubpathRelativeToProjectPath(staticLibPath, projectData);
349
- project.addFramework(relativeStaticLibPath);
350
- const relativeHeaderSearchPath = path.join(this.getLibSubpathRelativeToProjectPath(headersSubpath, projectData));
351
- project.addToHeaderSearchPaths({ relativePath: relativeHeaderSearchPath });
352
- this.generateModulemap(headersSubpath, libraryName);
353
- this.savePbxProj(project, projectData);
354
- });
316
+ async addStaticLibrary(staticLibPath, projectData) {
317
+ // Copy files to lib folder.
318
+ const libraryName = path.basename(staticLibPath, ".a");
319
+ const headersSubpath = path.join(path.dirname(staticLibPath), "include", libraryName);
320
+ // Add static library to project file and setup header search paths
321
+ const project = this.createPbxProj(projectData);
322
+ const relativeStaticLibPath = this.getLibSubpathRelativeToProjectPath(staticLibPath, projectData);
323
+ project.addFramework(relativeStaticLibPath);
324
+ const relativeHeaderSearchPath = path.join(this.getLibSubpathRelativeToProjectPath(headersSubpath, projectData));
325
+ project.addToHeaderSearchPaths({ relativePath: relativeHeaderSearchPath });
326
+ this.generateModulemap(headersSubpath, libraryName);
327
+ this.savePbxProj(project, projectData);
355
328
  }
356
- prepareProject(projectData, prepareData) {
357
- return __awaiter(this, void 0, void 0, function* () {
358
- const projectRoot = this.$options.hostProjectPath
359
- ? this.$options.hostProjectPath
360
- : path.join(projectData.platformsDir, this.$devicePlatformsConstants.iOS.toLowerCase());
361
- const platformData = this.getPlatformData(projectData);
362
- const pluginsData = this.getAllProductionPlugins(projectData);
363
- const pbxProjPath = this.getPbxProjPath(projectData);
364
- this.$iOSExtensionsService.removeExtensions({ pbxProjPath });
365
- yield this.addExtensions(projectData, pluginsData);
366
- const resourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
367
- const provision = prepareData && prepareData.provision;
368
- const teamId = prepareData && prepareData.teamId;
369
- if (provision) {
370
- yield this.$iOSSigningService.setupSigningFromProvision(projectRoot, projectData, provision, prepareData.mobileProvisionData);
371
- }
372
- if (teamId) {
373
- yield this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
329
+ async prepareProject(projectData, prepareData) {
330
+ const projectRoot = this.$options.hostProjectPath
331
+ ? this.$options.hostProjectPath
332
+ : path.join(projectData.platformsDir, this.$devicePlatformsConstants.iOS.toLowerCase());
333
+ const platformData = this.getPlatformData(projectData);
334
+ const pluginsData = this.getAllProductionPlugins(projectData);
335
+ const pbxProjPath = this.getPbxProjPath(projectData);
336
+ this.$iOSExtensionsService.removeExtensions({ pbxProjPath });
337
+ await this.addExtensions(projectData, pluginsData);
338
+ const resourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
339
+ const provision = prepareData && prepareData.provision;
340
+ const teamId = prepareData && prepareData.teamId;
341
+ if (provision) {
342
+ await this.$iOSSigningService.setupSigningFromProvision(projectRoot, projectData, provision, prepareData.mobileProvisionData);
343
+ }
344
+ if (teamId) {
345
+ await this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
346
+ }
347
+ const project = this.createPbxProj(projectData);
348
+ if (this.$options.hostProjectPath) {
349
+ try {
350
+ project.addPbxGroup([], "NativeScript", "NativeScript", null, {
351
+ isMain: true,
352
+ filesRelativeToProject: true,
353
+ uuid: "NATIVESCRIPTNATIVESCRIPT",
354
+ });
355
+ /**
356
+ * 1. Add platforms/ios/{projectname}/app build to the host app
357
+ */
358
+ // Note: allow customization of this targetFolderName
359
+ // const targetFolderName = "app";
360
+ const buildFolderPath = path.join(this.$options.hostProjectPath, projectData.projectName);
361
+ project.addResourceFile(buildFolderPath, {}, "NATIVESCRIPTNATIVESCRIPT");
362
+ // filePathsArray, buildPhaseType, comment, target, optionsOrFolderType, subfolderPath
363
+ // project.addBuildPhase(
364
+ // [],
365
+ // "PBXShellScriptBuildPhase",
366
+ // "Copy Metadata (DEBUG)",
367
+ // undefined,
368
+ // {
369
+ // shellPath: "/bin/sh",
370
+ // shellScript: `cp ./platforms/ios/build/Debug-iphonesimulator/metadata-arm64.bin $CONFIGURATION_BUILD_DIR`,
371
+ // outputPaths: [
372
+ // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-arm64.bin"),
373
+ // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-arm64e.bin"),
374
+ // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-i386.bin"),
375
+ // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-x86_64.bin"),
376
+ // ],
377
+ // }
378
+ // );
379
+ const metadataPath = path.relative(this.$options.hostProjectPath, buildFolderPath);
380
+ project.addToOtherLinkerFlags(JSON.stringify(`-sectcreate __DATA __TNSMetadata "${metadataPath}/metadata-arm64.bin"`));
381
+ // // no shorthand way to get UUID of build phase that i can tell
382
+ // // methods return the phase as an object but ommitted the actual key (uuid we need)
383
+ // // this does it same way nativescript-dev-xcode does but gets the uuid we need
384
+ // const resourcesBuildPhaseKeys = Object.keys(
385
+ // project.hash.project.objects["PBXResourcesBuildPhase"]
386
+ // );
387
+ // // console.log('resourcesBuildPhaseKeys:', resourcesBuildPhaseKeys);
388
+ // const buildPhaseUUID = resourcesBuildPhaseKeys[0];
389
+ // const comment = `${targetFolderName} in Resources`;
390
+ // project.hash.project.objects["PBXResourcesBuildPhase"][
391
+ // buildPhaseUUID
392
+ // ].files.forEach((f: any) => {
393
+ // console.log(f);
394
+ // });
395
+ // if (
396
+ // !project.hash.project.objects["PBXResourcesBuildPhase"][
397
+ // buildPhaseUUID
398
+ // ].files.find((f: any) => f.comment === comment)
399
+ // ) {
400
+ // project.addResourceFile(buildFolderPath, {}, buildPhaseUUID);
401
+ // }
402
+ /**
403
+ * 2. Ensure metadata is copied as a file
404
+ * The apps metadata-{arch}.bin should be added as a file reference.
405
+ */
406
+ // TODO
407
+ this.savePbxProj(project, projectData);
374
408
  }
375
- const project = this.createPbxProj(projectData);
376
- if (this.$options.hostProjectPath) {
377
- try {
378
- project.addPbxGroup([], "NativeScript", "NativeScript", null, {
379
- isMain: true,
380
- filesRelativeToProject: true,
381
- uuid: "NATIVESCRIPTNATIVESCRIPT",
382
- });
383
- /**
384
- * 1. Add platforms/ios/{projectname}/app build to the host app
385
- */
386
- // Note: allow customization of this targetFolderName
387
- // const targetFolderName = "app";
388
- const buildFolderPath = path.join(this.$options.hostProjectPath, projectData.projectName
389
- // targetFolderName
390
- );
391
- project.addResourceFile(buildFolderPath, {}, "NATIVESCRIPTNATIVESCRIPT");
392
- // filePathsArray, buildPhaseType, comment, target, optionsOrFolderType, subfolderPath
393
- // project.addBuildPhase(
394
- // [],
395
- // "PBXShellScriptBuildPhase",
396
- // "Copy Metadata (DEBUG)",
397
- // undefined,
398
- // {
399
- // shellPath: "/bin/sh",
400
- // shellScript: `cp ./platforms/ios/build/Debug-iphonesimulator/metadata-arm64.bin $CONFIGURATION_BUILD_DIR`,
401
- // outputPaths: [
402
- // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-arm64.bin"),
403
- // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-arm64e.bin"),
404
- // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-i386.bin"),
405
- // // JSON.stringify("$(CONFIGURATION_BUILD_DIR)/metadata-x86_64.bin"),
406
- // ],
407
- // }
408
- // );
409
- const metadataPath = path.relative(this.$options.hostProjectPath, buildFolderPath);
410
- project.addToOtherLinkerFlags(JSON.stringify(`-sectcreate __DATA __TNSMetadata "${metadataPath}/metadata-arm64.bin"`));
411
- // // no shorthand way to get UUID of build phase that i can tell
412
- // // methods return the phase as an object but ommitted the actual key (uuid we need)
413
- // // this does it same way nativescript-dev-xcode does but gets the uuid we need
414
- // const resourcesBuildPhaseKeys = Object.keys(
415
- // project.hash.project.objects["PBXResourcesBuildPhase"]
416
- // );
417
- // // console.log('resourcesBuildPhaseKeys:', resourcesBuildPhaseKeys);
418
- // const buildPhaseUUID = resourcesBuildPhaseKeys[0];
419
- // const comment = `${targetFolderName} in Resources`;
420
- // project.hash.project.objects["PBXResourcesBuildPhase"][
421
- // buildPhaseUUID
422
- // ].files.forEach((f: any) => {
423
- // console.log(f);
424
- // });
425
- // if (
426
- // !project.hash.project.objects["PBXResourcesBuildPhase"][
427
- // buildPhaseUUID
428
- // ].files.find((f: any) => f.comment === comment)
429
- // ) {
430
- // project.addResourceFile(buildFolderPath, {}, buildPhaseUUID);
431
- // }
432
- /**
433
- * 2. Ensure metadata is copied as a file
434
- * The apps metadata-{arch}.bin should be added as a file reference.
435
- */
436
- // TODO
437
- this.savePbxProj(project, projectData);
438
- }
439
- catch (err) {
440
- this.$logger.trace("Error adding NativeScript group to host project", err);
441
- }
409
+ catch (err) {
410
+ this.$logger.trace("Error adding NativeScript group to host project", err);
442
411
  }
443
- const resources = project.pbxGroupByName("Resources");
444
- if (resources && !this.$options.hostProjectPath) {
445
- const references = project.pbxFileReferenceSection();
446
- const xcodeProjectImages = _.map(resources.children, (resource) => this.replace(references[resource.value].name));
447
- this.$logger.trace("Images from Xcode project");
448
- this.$logger.trace(xcodeProjectImages);
449
- const appResourcesImages = this.$fs.readDirectory(this.getAppResourcesDestinationDirectoryPath(projectData));
450
- this.$logger.trace("Current images from App_Resources");
451
- this.$logger.trace(appResourcesImages);
452
- const imagesToAdd = _.difference(appResourcesImages, xcodeProjectImages);
453
- this.$logger.trace(`New images to add into xcode project: ${imagesToAdd.join(", ")}`);
454
- _.each(imagesToAdd, (image) => project.addResourceFile(path.relative(this.getPlatformData(projectData).projectRoot, path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image))));
455
- const imagesToRemove = _.difference(xcodeProjectImages, appResourcesImages);
456
- this.$logger.trace(`Images to remove from xcode project: ${imagesToRemove.join(", ")}`);
457
- _.each(imagesToRemove, (image) => project.removeResourceFile(path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image)));
458
- this.savePbxProj(project, projectData);
459
- let resourcesNativeCodePath = path.join(resourcesDirectoryPath, platformData.normalizedPlatformName, constants.NATIVE_SOURCE_FOLDER);
460
- if (!this.$fs.exists(resourcesNativeCodePath)) {
461
- resourcesNativeCodePath = path.join(resourcesDirectoryPath, this.$devicePlatformsConstants.iOS, constants.NATIVE_SOURCE_FOLDER);
462
- }
463
- yield this.prepareNativeSourceCode(constants.TNS_NATIVE_SOURCE_GROUP_NAME, resourcesNativeCodePath, projectData);
464
- const nativeSource = this.$projectConfigService.getValue(`${this._platformData.platformNameLowerCase}.NativeSource`, []);
465
- if (nativeSource === null || nativeSource === void 0 ? void 0 : nativeSource.length) {
466
- for (const source of nativeSource) {
467
- yield this.prepareNativeSourceCode(source.name, source.path, projectData);
468
- }
412
+ }
413
+ const resources = project.pbxGroupByName("Resources");
414
+ if (resources && !this.$options.hostProjectPath) {
415
+ const references = project.pbxFileReferenceSection();
416
+ const xcodeProjectImages = _.map(resources.children, (resource) => this.replace(references[resource.value].name));
417
+ this.$logger.trace("Images from Xcode project");
418
+ this.$logger.trace(xcodeProjectImages);
419
+ const appResourcesImages = this.$fs.readDirectory(this.getAppResourcesDestinationDirectoryPath(projectData));
420
+ this.$logger.trace("Current images from App_Resources");
421
+ this.$logger.trace(appResourcesImages);
422
+ const imagesToAdd = _.difference(appResourcesImages, xcodeProjectImages);
423
+ this.$logger.trace(`New images to add into xcode project: ${imagesToAdd.join(", ")}`);
424
+ _.each(imagesToAdd, (image) => project.addResourceFile(path.relative(this.getPlatformData(projectData).projectRoot, path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image))));
425
+ const imagesToRemove = _.difference(xcodeProjectImages, appResourcesImages);
426
+ this.$logger.trace(`Images to remove from xcode project: ${imagesToRemove.join(", ")}`);
427
+ _.each(imagesToRemove, (image) => project.removeResourceFile(path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image)));
428
+ this.savePbxProj(project, projectData);
429
+ let resourcesNativeCodePath = path.join(resourcesDirectoryPath, platformData.normalizedPlatformName, constants.NATIVE_SOURCE_FOLDER);
430
+ if (!this.$fs.exists(resourcesNativeCodePath)) {
431
+ resourcesNativeCodePath = path.join(resourcesDirectoryPath, this.$devicePlatformsConstants.iOS, constants.NATIVE_SOURCE_FOLDER);
432
+ }
433
+ await this.prepareNativeSourceCode(constants.TNS_NATIVE_SOURCE_GROUP_NAME, resourcesNativeCodePath, projectData);
434
+ const nativeSource = this.$projectConfigService.getValue(`${this._platformData.platformNameLowerCase}.NativeSource`, []);
435
+ if (nativeSource === null || nativeSource === void 0 ? void 0 : nativeSource.length) {
436
+ for (const source of nativeSource) {
437
+ await this.prepareNativeSourceCode(source.name, source.path, projectData);
469
438
  }
470
439
  }
471
- this.$iOSWatchAppService.removeWatchApp({ pbxProjPath });
472
- const addedWatchApp = yield this.$iOSWatchAppService.addWatchAppFromPath({
473
- watchAppFolderPath: path.join(resourcesDirectoryPath, platformData.normalizedPlatformName),
474
- projectData,
475
- platformData,
476
- pbxProjPath,
477
- });
478
- if (addedWatchApp) {
479
- 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");
480
- }
440
+ }
441
+ this.$iOSWatchAppService.removeWatchApp({ pbxProjPath });
442
+ const addedWatchApp = await this.$iOSWatchAppService.addWatchAppFromPath({
443
+ watchAppFolderPath: path.join(resourcesDirectoryPath, platformData.normalizedPlatformName),
444
+ projectData,
445
+ platformData,
446
+ pbxProjPath,
481
447
  });
448
+ if (addedWatchApp) {
449
+ 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");
450
+ }
482
451
  }
483
452
  prepareAppResources(projectData) {
484
453
  const platformData = this.getPlatformData(projectData);
@@ -502,48 +471,45 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
502
471
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchapp"));
503
472
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchextension"));
504
473
  }
505
- processConfigurationFilesFromAppResources(projectData, opts) {
506
- return __awaiter(this, void 0, void 0, function* () {
507
- yield this.mergeInfoPlists(projectData, opts);
508
- yield this.$iOSEntitlementsService.merge(projectData);
509
- yield this.mergeProjectXcconfigFiles(projectData);
510
- });
474
+ async processConfigurationFilesFromAppResources(projectData, opts) {
475
+ await this.mergeInfoPlists(projectData, opts);
476
+ await this.$iOSEntitlementsService.merge(projectData);
477
+ await this.mergeProjectXcconfigFiles(projectData);
511
478
  }
512
479
  ensureConfigurationFileInAppResources() {
513
480
  return null;
514
481
  }
515
- mergeInfoPlists(projectData, buildOptions) {
516
- return __awaiter(this, void 0, void 0, function* () {
517
- const projectDir = projectData.projectDir;
518
- const infoPlistPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, this.getPlatformData(projectData).configurationFileName);
519
- this.ensureConfigurationFileInAppResources();
520
- const reporterTraceMessage = "Info.plist:";
521
- const reporter = {
522
- log: (txt) => this.$logger.trace(`${reporterTraceMessage} ${txt}`),
523
- warn: (txt) => this.$logger.warn(`${reporterTraceMessage} ${txt}`),
524
- };
525
- const session = new plist_merge_patch_1.PlistSession(reporter);
526
- const makePatch = (plistPath) => {
527
- if (!this.$fs.exists(plistPath)) {
528
- this.$logger.trace("No plist found at: " + plistPath);
529
- return;
530
- }
531
- this.$logger.trace("Schedule merge plist at: " + plistPath);
532
- session.patch({
533
- name: path.relative(projectDir, plistPath),
534
- read: () => this.$fs.readText(plistPath),
535
- });
536
- };
537
- const allPlugins = this.getAllProductionPlugins(projectData);
538
- for (const plugin of allPlugins) {
539
- const pluginInfoPlistPath = path.join(plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME), this.getPlatformData(projectData).configurationFileName);
540
- makePatch(pluginInfoPlistPath);
482
+ async mergeInfoPlists(projectData, buildOptions) {
483
+ const projectDir = projectData.projectDir;
484
+ const infoPlistPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, this.getPlatformData(projectData).configurationFileName);
485
+ this.ensureConfigurationFileInAppResources();
486
+ const reporterTraceMessage = "Info.plist:";
487
+ const reporter = {
488
+ log: (txt) => this.$logger.trace(`${reporterTraceMessage} ${txt}`),
489
+ warn: (txt) => this.$logger.warn(`${reporterTraceMessage} ${txt}`),
490
+ };
491
+ const session = new plist_merge_patch_1.PlistSession(reporter);
492
+ const makePatch = (plistPath) => {
493
+ if (!this.$fs.exists(plistPath)) {
494
+ this.$logger.trace("No plist found at: " + plistPath);
495
+ return;
541
496
  }
542
- makePatch(infoPlistPath);
543
- if (projectData.projectIdentifiers && projectData.projectIdentifiers.ios) {
544
- session.patch({
545
- name: "CFBundleIdentifier from package.json nativescript.id",
546
- read: () => `<?xml version="1.0" encoding="UTF-8"?>
497
+ this.$logger.trace("Schedule merge plist at: " + plistPath);
498
+ session.patch({
499
+ name: path.relative(projectDir, plistPath),
500
+ read: () => this.$fs.readText(plistPath),
501
+ });
502
+ };
503
+ const allPlugins = this.getAllProductionPlugins(projectData);
504
+ for (const plugin of allPlugins) {
505
+ const pluginInfoPlistPath = path.join(plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME), this.getPlatformData(projectData).configurationFileName);
506
+ makePatch(pluginInfoPlistPath);
507
+ }
508
+ makePatch(infoPlistPath);
509
+ if (projectData.projectIdentifiers && projectData.projectIdentifiers.ios) {
510
+ session.patch({
511
+ name: "CFBundleIdentifier from package.json nativescript.id",
512
+ read: () => `<?xml version="1.0" encoding="UTF-8"?>
547
513
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
548
514
  <plist version="1.0">
549
515
  <dict>
@@ -551,14 +517,14 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
551
517
  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
552
518
  </dict>
553
519
  </plist>`,
554
- });
555
- }
556
- if (!buildOptions.release &&
557
- projectData.projectIdentifiers &&
558
- projectData.projectIdentifiers.ios) {
559
- session.patch({
560
- name: "CFBundleURLTypes from package.json nativescript.id",
561
- read: () => `<?xml version="1.0" encoding="UTF-8"?>
520
+ });
521
+ }
522
+ if (!buildOptions.release &&
523
+ projectData.projectIdentifiers &&
524
+ projectData.projectIdentifiers.ios) {
525
+ session.patch({
526
+ name: "CFBundleURLTypes from package.json nativescript.id",
527
+ read: () => `<?xml version="1.0" encoding="UTF-8"?>
562
528
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
563
529
  <plist version="1.0">
564
530
  <dict>
@@ -575,13 +541,12 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
575
541
  </array>
576
542
  </dict>
577
543
  </plist>`,
578
- });
579
- }
580
- const plistContent = session.build();
581
- this.$logger.trace("Info.plist: Write to: " +
582
- this.getPlatformData(projectData).configurationFilePath);
583
- this.$fs.writeFile(this.getPlatformData(projectData).configurationFilePath, plistContent);
584
- });
544
+ });
545
+ }
546
+ const plistContent = session.build();
547
+ this.$logger.trace("Info.plist: Write to: " +
548
+ this.getPlatformData(projectData).configurationFilePath);
549
+ this.$fs.writeFile(this.getPlatformData(projectData).configurationFilePath, plistContent);
585
550
  }
586
551
  getAllProductionPlugins(projectData) {
587
552
  return (this.$injector.resolve("pluginsService")).getAllProductionPlugins(projectData, this.getPlatformData(projectData).platformNameLowerCase);
@@ -621,112 +586,104 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
621
586
  savePbxProj(project, projectData, omitEmptyValues) {
622
587
  return this.$fs.writeFile(this.getPbxProjPath(projectData), project.writeSync({ omitEmptyValues }));
623
588
  }
624
- preparePluginNativeCode(pluginData, projectData, opts) {
625
- return __awaiter(this, void 0, void 0, function* () {
626
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
627
- const sourcePath = path.join(pluginPlatformsFolderPath, "src");
628
- yield this.prepareNativeSourceCode(pluginData.name, sourcePath, projectData);
629
- yield this.prepareResources(pluginPlatformsFolderPath, pluginData, projectData);
630
- yield this.prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
631
- yield this.prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
632
- });
633
- }
634
- removePluginNativeCode(pluginData, projectData) {
635
- return __awaiter(this, void 0, void 0, function* () {
636
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
637
- this.removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData);
638
- this.removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
639
- this.removeStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
640
- const projectRoot = this.getPlatformData(projectData).projectRoot;
641
- this.$cocoapodsService.removePodfileFromProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, projectRoot);
642
- });
589
+ async preparePluginNativeCode(pluginData, projectData, opts) {
590
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
591
+ const sourcePath = path.join(pluginPlatformsFolderPath, "src");
592
+ await this.prepareNativeSourceCode(pluginData.name, sourcePath, projectData);
593
+ await this.prepareResources(pluginPlatformsFolderPath, pluginData, projectData);
594
+ await this.prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
595
+ await this.prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
596
+ }
597
+ async removePluginNativeCode(pluginData, projectData) {
598
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
599
+ this.removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData);
600
+ this.removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
601
+ this.removeStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
602
+ const projectRoot = this.getPlatformData(projectData).projectRoot;
603
+ this.$cocoapodsService.removePodfileFromProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, projectRoot);
643
604
  }
644
- handleNativeDependenciesChange(projectData, opts) {
645
- return __awaiter(this, void 0, void 0, function* () {
646
- const platformData = this.getPlatformData(projectData);
647
- const pluginsData = this.getAllProductionPlugins(projectData);
648
- this.setProductBundleIdentifier(projectData);
649
- yield this.applyPluginsCocoaPods(pluginsData, projectData, platformData);
650
- yield this.$cocoapodsService.applyPodfileFromAppResources(projectData, platformData);
651
- yield this.$cocoapodsService.applyPodfileArchExclusions(projectData, platformData);
652
- yield this.$cocoapodsService.applyPodfileFromExtensions(projectData, platformData);
653
- const projectPodfilePath = this.$cocoapodsService.getProjectPodfilePath(platformData.projectRoot);
654
- if (this.$fs.exists(projectPodfilePath)) {
655
- yield this.$cocoapodsService.executePodInstall(platformData.projectRoot, this.$xcprojService.getXcodeprojPath(projectData, platformData.projectRoot));
656
- // The `pod install` command adds a new target to the .pbxproject. This target adds additional build phases to Xcode project.
657
- // Some of these phases relies on env variables (like PODS_PODFILE_DIR_PATH or PODS_ROOT).
658
- // These variables are produced from merge of pod's xcconfig file and project's xcconfig file.
659
- // So the correct order is `pod install` to be executed before merging pod's xcconfig file.
660
- yield this.$cocoapodsService.mergePodXcconfigFile(projectData, platformData, opts);
661
- }
662
- const pluginSpmPackages = [];
663
- for (const plugin of pluginsData) {
664
- if (plugin.fullPath) {
665
- const pluginConfigPath = path.join(plugin.fullPath, constants.CONFIG_FILE_NAME_TS);
666
- if (this.$fs.exists(pluginConfigPath)) {
667
- const config = this.$projectConfigService.readConfig(plugin.fullPath);
668
- const packages = _.get(config, `${platformData.platformNameLowerCase}.SPMPackages`, []);
669
- if (packages.length) {
670
- pluginSpmPackages.push(...packages);
671
- }
605
+ async handleNativeDependenciesChange(projectData, opts) {
606
+ const platformData = this.getPlatformData(projectData);
607
+ const pluginsData = this.getAllProductionPlugins(projectData);
608
+ this.setProductBundleIdentifier(projectData);
609
+ await this.applyPluginsCocoaPods(pluginsData, projectData, platformData);
610
+ await this.$cocoapodsService.applyPodfileFromAppResources(projectData, platformData);
611
+ await this.$cocoapodsService.applyPodfileArchExclusions(projectData, platformData);
612
+ await this.$cocoapodsService.applyPodfileFromExtensions(projectData, platformData);
613
+ const projectPodfilePath = this.$cocoapodsService.getProjectPodfilePath(platformData.projectRoot);
614
+ if (this.$fs.exists(projectPodfilePath)) {
615
+ await this.$cocoapodsService.executePodInstall(platformData.projectRoot, this.$xcprojService.getXcodeprojPath(projectData, platformData.projectRoot));
616
+ // The `pod install` command adds a new target to the .pbxproject. This target adds additional build phases to Xcode project.
617
+ // Some of these phases relies on env variables (like PODS_PODFILE_DIR_PATH or PODS_ROOT).
618
+ // These variables are produced from merge of pod's xcconfig file and project's xcconfig file.
619
+ // So the correct order is `pod install` to be executed before merging pod's xcconfig file.
620
+ await this.$cocoapodsService.mergePodXcconfigFile(projectData, platformData, opts);
621
+ }
622
+ const pluginSpmPackages = [];
623
+ for (const plugin of pluginsData) {
624
+ if (plugin.fullPath) {
625
+ const pluginConfigPath = path.join(plugin.fullPath, constants.CONFIG_FILE_NAME_TS);
626
+ if (this.$fs.exists(pluginConfigPath)) {
627
+ const config = this.$projectConfigService.readConfig(plugin.fullPath);
628
+ const packages = _.get(config, `${platformData.platformNameLowerCase}.SPMPackages`, []);
629
+ if (packages.length) {
630
+ pluginSpmPackages.push(...packages);
672
631
  }
673
632
  }
674
633
  }
675
- yield this.$spmService.applySPMPackages(platformData, projectData, pluginSpmPackages);
676
- });
634
+ }
635
+ await this.$spmService.applySPMPackages(platformData, projectData, pluginSpmPackages);
677
636
  }
678
637
  beforePrepareAllPlugins(projectData, dependencies) {
679
638
  return Promise.resolve(dependencies);
680
639
  }
681
- checkForChanges(changesInfo, prepareData, projectData) {
682
- return __awaiter(this, void 0, void 0, function* () {
683
- const { provision, teamId } = prepareData;
684
- const hasProvision = provision !== undefined;
685
- const hasTeamId = teamId !== undefined;
686
- if (hasProvision || hasTeamId) {
687
- // Check if the native project's signing is set to the provided provision...
688
- const pbxprojPath = this.getPbxProjPath(projectData);
689
- if (this.$fs.exists(pbxprojPath)) {
690
- const xcode = this.$pbxprojDomXcode.Xcode.open(pbxprojPath);
691
- const signing = xcode.getSigning(projectData.projectName);
692
- if (hasProvision) {
693
- if (signing && signing.style === "Manual") {
694
- for (const name in signing.configurations) {
695
- const config = signing.configurations[name];
696
- if (config.uuid !== provision && config.name !== provision) {
697
- changesInfo.signingChanged = true;
698
- break;
699
- }
640
+ async checkForChanges(changesInfo, prepareData, projectData) {
641
+ const { provision, teamId } = prepareData;
642
+ const hasProvision = provision !== undefined;
643
+ const hasTeamId = teamId !== undefined;
644
+ if (hasProvision || hasTeamId) {
645
+ // Check if the native project's signing is set to the provided provision...
646
+ const pbxprojPath = this.getPbxProjPath(projectData);
647
+ if (this.$fs.exists(pbxprojPath)) {
648
+ const xcode = this.$pbxprojDomXcode.Xcode.open(pbxprojPath);
649
+ const signing = xcode.getSigning(projectData.projectName);
650
+ if (hasProvision) {
651
+ if (signing && signing.style === "Manual") {
652
+ for (const name in signing.configurations) {
653
+ const config = signing.configurations[name];
654
+ if (config.uuid !== provision && config.name !== provision) {
655
+ changesInfo.signingChanged = true;
656
+ break;
700
657
  }
701
658
  }
702
- else {
703
- // Specifying provisioning profile requires "Manual" signing style.
704
- // If the current signing style was not "Manual" it was probably "Automatic" or,
705
- // it was not uniform for the debug and release build configurations.
706
- changesInfo.signingChanged = true;
707
- }
708
659
  }
709
- if (hasTeamId) {
710
- if (signing && signing.style === "Automatic") {
711
- if (signing.team !== teamId) {
712
- const teamIdsForName = yield this.$iOSProvisionService.getTeamIdsWithName(teamId);
713
- if (!teamIdsForName.some((id) => id === signing.team)) {
714
- changesInfo.signingChanged = true;
715
- }
660
+ else {
661
+ // Specifying provisioning profile requires "Manual" signing style.
662
+ // If the current signing style was not "Manual" it was probably "Automatic" or,
663
+ // it was not uniform for the debug and release build configurations.
664
+ changesInfo.signingChanged = true;
665
+ }
666
+ }
667
+ if (hasTeamId) {
668
+ if (signing && signing.style === "Automatic") {
669
+ if (signing.team !== teamId) {
670
+ const teamIdsForName = await this.$iOSProvisionService.getTeamIdsWithName(teamId);
671
+ if (!teamIdsForName.some((id) => id === signing.team)) {
672
+ changesInfo.signingChanged = true;
716
673
  }
717
674
  }
718
- else {
719
- // Specifying team id or name requires "Automatic" signing style.
720
- // If the current signing style was not "Automatic" it was probably "Manual".
721
- changesInfo.signingChanged = true;
722
- }
723
675
  }
724
- }
725
- else {
726
- changesInfo.signingChanged = true;
676
+ else {
677
+ // Specifying team id or name requires "Automatic" signing style.
678
+ // If the current signing style was not "Automatic" it was probably "Manual".
679
+ changesInfo.signingChanged = true;
680
+ }
727
681
  }
728
682
  }
729
- });
683
+ else {
684
+ changesInfo.signingChanged = true;
685
+ }
686
+ }
730
687
  }
731
688
  getDeploymentTarget(projectData) {
732
689
  const target = this.$xcconfigService.readPropertyValue(this.getBuildXCConfigFilePath(projectData), "IPHONEOS_DEPLOYMENT_TARGET");
@@ -770,120 +727,106 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
770
727
  const newFileName = projectData.projectName + fileNamePart;
771
728
  this.$fs.rename(path.join(fileRootLocation, oldFileName), path.join(fileRootLocation, newFileName));
772
729
  }
773
- prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
774
- return __awaiter(this, void 0, void 0, function* () {
775
- const project = this.createPbxProj(projectData);
776
- const group = yield this.getRootGroup(groupName, sourceFolderPath);
777
- project.addPbxGroup(group.files, group.name, group.path, null, {
778
- isMain: true,
779
- filesRelativeToProject: true,
780
- });
781
- project.addToHeaderSearchPaths(group.path);
782
- const headerFiles = this.$fs.exists(sourceFolderPath)
783
- ? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
784
- : [];
785
- if (headerFiles.length > 0 &&
786
- !this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
787
- 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`);
788
- }
789
- this.savePbxProj(project, projectData);
730
+ async prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
731
+ const project = this.createPbxProj(projectData);
732
+ const group = await this.getRootGroup(groupName, sourceFolderPath);
733
+ project.addPbxGroup(group.files, group.name, group.path, null, {
734
+ isMain: true,
735
+ filesRelativeToProject: true,
790
736
  });
737
+ project.addToHeaderSearchPaths(group.path);
738
+ const headerFiles = this.$fs.exists(sourceFolderPath)
739
+ ? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
740
+ : [];
741
+ if (headerFiles.length > 0 &&
742
+ !this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
743
+ 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`);
744
+ }
745
+ this.savePbxProj(project, projectData);
791
746
  }
792
- addExtensions(projectData, pluginsData) {
793
- return __awaiter(this, void 0, void 0, function* () {
794
- const resorcesExtensionsPath = path.join(projectData.getAppResourcesDirectoryPath(), this.getPlatformData(projectData).normalizedPlatformName, constants.NATIVE_EXTENSION_FOLDER);
795
- const platformData = this.getPlatformData(projectData);
796
- const pbxProjPath = this.getPbxProjPath(projectData);
797
- const addedExtensionsFromResources = yield this.$iOSExtensionsService.addExtensionsFromPath({
798
- extensionsFolderPath: resorcesExtensionsPath,
747
+ async addExtensions(projectData, pluginsData) {
748
+ const resorcesExtensionsPath = path.join(projectData.getAppResourcesDirectoryPath(), this.getPlatformData(projectData).normalizedPlatformName, constants.NATIVE_EXTENSION_FOLDER);
749
+ const platformData = this.getPlatformData(projectData);
750
+ const pbxProjPath = this.getPbxProjPath(projectData);
751
+ const addedExtensionsFromResources = await this.$iOSExtensionsService.addExtensionsFromPath({
752
+ extensionsFolderPath: resorcesExtensionsPath,
753
+ projectData,
754
+ platformData,
755
+ pbxProjPath,
756
+ });
757
+ let addedExtensionsFromPlugins = false;
758
+ for (const pluginIndex in pluginsData) {
759
+ const pluginData = pluginsData[pluginIndex];
760
+ const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
761
+ const extensionPath = path.join(pluginPlatformsFolderPath, constants.NATIVE_EXTENSION_FOLDER);
762
+ const addedExtensionFromPlugin = await this.$iOSExtensionsService.addExtensionsFromPath({
763
+ extensionsFolderPath: extensionPath,
799
764
  projectData,
800
765
  platformData,
801
766
  pbxProjPath,
802
767
  });
803
- let addedExtensionsFromPlugins = false;
804
- for (const pluginIndex in pluginsData) {
805
- const pluginData = pluginsData[pluginIndex];
806
- const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
807
- const extensionPath = path.join(pluginPlatformsFolderPath, constants.NATIVE_EXTENSION_FOLDER);
808
- const addedExtensionFromPlugin = yield this.$iOSExtensionsService.addExtensionsFromPath({
809
- extensionsFolderPath: extensionPath,
810
- projectData,
811
- platformData,
812
- pbxProjPath,
813
- });
814
- addedExtensionsFromPlugins =
815
- addedExtensionsFromPlugins || addedExtensionFromPlugin;
816
- }
817
- if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
818
- this.$logger.warn("Let us know if there are other Extension features you'd like! https://github.com/NativeScript/NativeScript/issues");
819
- }
820
- });
768
+ addedExtensionsFromPlugins =
769
+ addedExtensionsFromPlugins || addedExtensionFromPlugin;
770
+ }
771
+ if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
772
+ this.$logger.warn("Let us know if there are other Extension features you'd like! https://github.com/NativeScript/NativeScript/issues");
773
+ }
821
774
  }
822
- getRootGroup(name, rootPath) {
823
- return __awaiter(this, void 0, void 0, function* () {
824
- const filePathsArr = [];
825
- const rootGroup = {
826
- name: name,
827
- files: filePathsArr,
828
- path: rootPath,
829
- };
830
- if (fastGlob.isDynamicPattern(rootPath)) {
831
- const projectRoot = this.$projectDataService.getProjectData().projectDir;
832
- const filePaths = yield fastGlob(rootPath);
833
- for (const filePath of filePaths) {
834
- const sourceFilePath = path.normalize(path.join(projectRoot, filePath));
835
- filePathsArr.push(sourceFilePath);
836
- }
775
+ async getRootGroup(name, rootPath) {
776
+ const filePathsArr = [];
777
+ const rootGroup = {
778
+ name: name,
779
+ files: filePathsArr,
780
+ path: rootPath,
781
+ };
782
+ if (fastGlob.isDynamicPattern(rootPath)) {
783
+ const projectRoot = this.$projectDataService.getProjectData().projectDir;
784
+ const filePaths = await fastGlob(rootPath);
785
+ for (const filePath of filePaths) {
786
+ const sourceFilePath = path.normalize(path.join(projectRoot, filePath));
787
+ filePathsArr.push(sourceFilePath);
837
788
  }
838
- else {
839
- if (this.$fs.exists(rootPath)) {
840
- const stats = this.$fs.getFsStats(rootPath);
841
- if (stats.isDirectory() && !this.$fs.isEmptyDir(rootPath)) {
842
- this.$fs.readDirectory(rootPath).forEach((fileName) => {
843
- const filePath = path.join(rootGroup.path, fileName);
844
- filePathsArr.push(filePath);
845
- });
846
- }
789
+ }
790
+ else {
791
+ if (this.$fs.exists(rootPath)) {
792
+ const stats = this.$fs.getFsStats(rootPath);
793
+ if (stats.isDirectory() && !this.$fs.isEmptyDir(rootPath)) {
794
+ this.$fs.readDirectory(rootPath).forEach((fileName) => {
795
+ const filePath = path.join(rootGroup.path, fileName);
796
+ filePathsArr.push(filePath);
797
+ });
847
798
  }
848
799
  }
849
- return rootGroup;
850
- });
800
+ }
801
+ return rootGroup;
851
802
  }
852
- prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
853
- return __awaiter(this, void 0, void 0, function* () {
854
- const project = this.createPbxProj(projectData);
855
- const resourcesPath = path.join(pluginPlatformsFolderPath, "Resources");
856
- if (this.$fs.exists(resourcesPath) && !this.$fs.isEmptyDir(resourcesPath)) {
857
- for (const fileName of this.$fs.readDirectory(resourcesPath)) {
858
- const filePath = path.join(resourcesPath, fileName);
859
- project.addResourceFile(filePath);
860
- }
803
+ async prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
804
+ const project = this.createPbxProj(projectData);
805
+ const resourcesPath = path.join(pluginPlatformsFolderPath, "Resources");
806
+ if (this.$fs.exists(resourcesPath) && !this.$fs.isEmptyDir(resourcesPath)) {
807
+ for (const fileName of this.$fs.readDirectory(resourcesPath)) {
808
+ const filePath = path.join(resourcesPath, fileName);
809
+ project.addResourceFile(filePath);
861
810
  }
862
- this.savePbxProj(project, projectData);
863
- });
811
+ }
812
+ this.savePbxProj(project, projectData);
864
813
  }
865
- prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
866
- return __awaiter(this, void 0, void 0, function* () {
867
- for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, FRAMEWORK_EXTENSIONS)) {
868
- yield this.addFramework(path.join(pluginPlatformsFolderPath, fileName), projectData);
869
- }
870
- });
814
+ async prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
815
+ for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, FRAMEWORK_EXTENSIONS)) {
816
+ await this.addFramework(path.join(pluginPlatformsFolderPath, fileName), projectData);
817
+ }
871
818
  }
872
- prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
873
- return __awaiter(this, void 0, void 0, function* () {
874
- for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, ".a")) {
875
- yield this.addStaticLibrary(path.join(pluginPlatformsFolderPath, fileName), projectData);
876
- }
877
- });
819
+ async prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
820
+ for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, ".a")) {
821
+ await this.addStaticLibrary(path.join(pluginPlatformsFolderPath, fileName), projectData);
822
+ }
878
823
  }
879
- removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData) {
880
- return __awaiter(this, void 0, void 0, function* () {
881
- const project = this.createPbxProj(projectData);
882
- const group = yield this.getRootGroup(pluginData.name, pluginPlatformsFolderPath);
883
- project.removePbxGroup(group.name, group.path);
884
- project.removeFromHeaderSearchPaths(group.path);
885
- this.savePbxProj(project, projectData);
886
- });
824
+ async removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData) {
825
+ const project = this.createPbxProj(projectData);
826
+ const group = await this.getRootGroup(pluginData.name, pluginPlatformsFolderPath);
827
+ project.removePbxGroup(group.name, group.path);
828
+ project.removeFromHeaderSearchPaths(group.path);
829
+ this.savePbxProj(project, projectData);
887
830
  }
888
831
  removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
889
832
  const project = this.createPbxProj(projectData);
@@ -925,50 +868,48 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
925
868
  const modulemap = `module ${libraryName} { explicit module ${libraryName} { ${headers.join(" ")} } }`;
926
869
  this.$fs.writeFile(path.join(headersFolderPath, "module.modulemap"), modulemap);
927
870
  }
928
- mergeProjectXcconfigFiles(projectData) {
929
- return __awaiter(this, void 0, void 0, function* () {
930
- const platformData = this.getPlatformData(projectData);
931
- const pluginsXcconfigFilePaths = _.values(this.$xcconfigService.getPluginsXcconfigFilePaths(platformData.projectRoot));
932
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
933
- this.$fs.deleteFile(pluginsXcconfigFilePath);
934
- }
935
- const allPlugins = this.getAllProductionPlugins(projectData);
936
- for (const plugin of allPlugins) {
937
- const pluginPlatformsFolderPath = plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
938
- const pluginXcconfigFilePath = path.join(pluginPlatformsFolderPath, constants_2.BUILD_XCCONFIG_FILE_NAME);
939
- if (this.$fs.exists(pluginXcconfigFilePath)) {
940
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
941
- yield this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
942
- }
943
- }
944
- }
945
- const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
946
- if (this.$fs.exists(appResourcesXcconfigPath)) {
871
+ async mergeProjectXcconfigFiles(projectData) {
872
+ const platformData = this.getPlatformData(projectData);
873
+ const pluginsXcconfigFilePaths = _.values(this.$xcconfigService.getPluginsXcconfigFilePaths(platformData.projectRoot));
874
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
875
+ this.$fs.deleteFile(pluginsXcconfigFilePath);
876
+ }
877
+ const allPlugins = this.getAllProductionPlugins(projectData);
878
+ for (const plugin of allPlugins) {
879
+ const pluginPlatformsFolderPath = plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
880
+ const pluginXcconfigFilePath = path.join(pluginPlatformsFolderPath, constants_2.BUILD_XCCONFIG_FILE_NAME);
881
+ if (this.$fs.exists(pluginXcconfigFilePath)) {
947
882
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
948
- yield this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
883
+ await this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
949
884
  }
950
885
  }
886
+ }
887
+ const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
888
+ if (this.$fs.exists(appResourcesXcconfigPath)) {
951
889
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
952
- if (!this.$fs.exists(pluginsXcconfigFilePath)) {
953
- // We need the pluginsXcconfig file to exist in platforms dir as it is required in the native template:
954
- // https://github.com/NativeScript/ios-runtime/blob/9c2b7b5f70b9bee8452b7a24aa6b646214c7d2be/build/project-template/__PROJECT_NAME__/build-debug.xcconfig#L3
955
- // From Xcode 10 in case the file is missing, this include fails and the build itself fails (was a warning in previous Xcode versions).
956
- this.$fs.writeFile(pluginsXcconfigFilePath, "");
957
- }
890
+ await this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
958
891
  }
959
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
960
- // Set Entitlements Property to point to default file if not set explicitly by the user.
961
- const entitlementsPropertyValue = this.$xcconfigService.readPropertyValue(pluginsXcconfigFilePath, constants.CODE_SIGN_ENTITLEMENTS);
962
- if (entitlementsPropertyValue === null &&
963
- this.$fs.exists(this.$iOSEntitlementsService.getPlatformsEntitlementsPath(projectData))) {
964
- const tempEntitlementsDir = yield this.$tempService.mkdirSync("entitlements");
965
- const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
966
- const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
967
- this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
968
- yield this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
969
- }
892
+ }
893
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
894
+ if (!this.$fs.exists(pluginsXcconfigFilePath)) {
895
+ // We need the pluginsXcconfig file to exist in platforms dir as it is required in the native template:
896
+ // https://github.com/NativeScript/ios-runtime/blob/9c2b7b5f70b9bee8452b7a24aa6b646214c7d2be/build/project-template/__PROJECT_NAME__/build-debug.xcconfig#L3
897
+ // From Xcode 10 in case the file is missing, this include fails and the build itself fails (was a warning in previous Xcode versions).
898
+ this.$fs.writeFile(pluginsXcconfigFilePath, "");
970
899
  }
971
- });
900
+ }
901
+ for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
902
+ // Set Entitlements Property to point to default file if not set explicitly by the user.
903
+ const entitlementsPropertyValue = this.$xcconfigService.readPropertyValue(pluginsXcconfigFilePath, constants.CODE_SIGN_ENTITLEMENTS);
904
+ if (entitlementsPropertyValue === null &&
905
+ this.$fs.exists(this.$iOSEntitlementsService.getPlatformsEntitlementsPath(projectData))) {
906
+ const tempEntitlementsDir = await this.$tempService.mkdirSync("entitlements");
907
+ const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
908
+ const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
909
+ this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
910
+ await this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
911
+ }
912
+ }
972
913
  }
973
914
  getBuildXCConfigFilePath(projectData) {
974
915
  const buildXCConfig = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
@@ -987,22 +928,20 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
987
928
  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}".`);
988
929
  }
989
930
  }
990
- applyPluginsCocoaPods(pluginsData, projectData, platformData) {
991
- return __awaiter(this, void 0, void 0, function* () {
992
- for (const pluginIndex in pluginsData) {
993
- const pluginData = pluginsData[pluginIndex];
994
- if (this.$fs.exists(pluginData.pluginPlatformsFolderPath(platformData.normalizedPlatformName))) {
995
- yield this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
996
- }
931
+ async applyPluginsCocoaPods(pluginsData, projectData, platformData) {
932
+ for (const pluginIndex in pluginsData) {
933
+ const pluginData = pluginsData[pluginIndex];
934
+ if (this.$fs.exists(pluginData.pluginPlatformsFolderPath(platformData.normalizedPlatformName))) {
935
+ await this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
997
936
  }
998
- });
937
+ }
999
938
  }
1000
939
  }
940
+ exports.IOSProjectService = IOSProjectService;
1001
941
  IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER = "__PROJECT_NAME__";
1002
942
  IOSProjectService.IOS_PLATFORM_NAME = "ios";
1003
943
  __decorate([
1004
944
  (0, helpers_2.hook)("buildIOS")
1005
945
  ], IOSProjectService.prototype, "buildProject", null);
1006
- exports.IOSProjectService = IOSProjectService;
1007
946
  yok_1.injector.register("iOSProjectService", IOSProjectService);
1008
947
  //# sourceMappingURL=ios-project-service.js.map