nativescript 8.9.0-alpha.3 → 8.9.0-dev.1

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