nativescript 8.9.0-dev.1 → 8.9.0-dev.2

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 (404) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/lib/.d.ts +1 -0
  3. package/lib/android-tools-info.js +32 -9
  4. package/lib/base-package-manager.js +71 -47
  5. package/lib/bootstrap.js +6 -1
  6. package/lib/bun-package-manager.js +104 -65
  7. package/lib/color.js +5 -2
  8. package/lib/commands/add-platform.js +31 -14
  9. package/lib/commands/apple-login.js +30 -18
  10. package/lib/commands/appstore-list.js +46 -34
  11. package/lib/commands/appstore-upload.js +68 -52
  12. package/lib/commands/build.js +90 -57
  13. package/lib/commands/clean.js +197 -161
  14. package/lib/commands/command-base.js +28 -14
  15. package/lib/commands/config.js +71 -48
  16. package/lib/commands/create-project.js +235 -210
  17. package/lib/commands/debug.js +93 -66
  18. package/lib/commands/deploy.js +47 -30
  19. package/lib/commands/embedding/embed.js +59 -33
  20. package/lib/commands/extensibility/install-extension.js +17 -5
  21. package/lib/commands/extensibility/list-extensions.js +25 -13
  22. package/lib/commands/extensibility/uninstall-extension.js +16 -4
  23. package/lib/commands/fonts.js +42 -30
  24. package/lib/commands/generate-assets.js +29 -13
  25. package/lib/commands/generate-help.js +14 -2
  26. package/lib/commands/generate.js +70 -12
  27. package/lib/commands/info.js +14 -2
  28. package/lib/commands/install.js +50 -34
  29. package/lib/commands/list-platforms.js +26 -14
  30. package/lib/commands/migrate.js +27 -15
  31. package/lib/commands/native-add.js +51 -23
  32. package/lib/commands/platform-clean.js +33 -19
  33. package/lib/commands/plugin/add-plugin.js +26 -12
  34. package/lib/commands/plugin/build-plugin.js +45 -31
  35. package/lib/commands/plugin/create-plugin.js +138 -110
  36. package/lib/commands/plugin/list-plugins.js +34 -22
  37. package/lib/commands/plugin/remove-plugin.js +35 -20
  38. package/lib/commands/plugin/update-plugin.js +34 -20
  39. package/lib/commands/post-install.js +39 -20
  40. package/lib/commands/prepare.js +39 -22
  41. package/lib/commands/preview.js +64 -49
  42. package/lib/commands/remove-platform.js +19 -7
  43. package/lib/commands/resources/resources-update.js +28 -13
  44. package/lib/commands/run.js +77 -55
  45. package/lib/commands/setup.js +1 -0
  46. package/lib/commands/start.js +20 -6
  47. package/lib/commands/test-init.js +138 -123
  48. package/lib/commands/test.js +97 -67
  49. package/lib/commands/typings.js +143 -126
  50. package/lib/commands/update-platform.js +40 -22
  51. package/lib/commands/update.js +45 -30
  52. package/lib/commands/widget.js +767 -0
  53. package/lib/common/bootstrap.js +1 -0
  54. package/lib/common/child-process.js +75 -53
  55. package/lib/common/codeGeneration/code-entity.js +2 -1
  56. package/lib/common/codeGeneration/code-printer.js +2 -1
  57. package/lib/common/command-params.js +19 -7
  58. package/lib/common/commands/analytics.js +43 -27
  59. package/lib/common/commands/autocompletion.js +59 -39
  60. package/lib/common/commands/device/device-log-stream.js +24 -12
  61. package/lib/common/commands/device/get-file.js +35 -22
  62. package/lib/common/commands/device/list-applications.js +24 -12
  63. package/lib/common/commands/device/list-devices.js +90 -72
  64. package/lib/common/commands/device/list-files.js +36 -23
  65. package/lib/common/commands/device/put-file.js +35 -22
  66. package/lib/common/commands/device/run-application.js +26 -12
  67. package/lib/common/commands/device/stop-application.js +23 -11
  68. package/lib/common/commands/device/uninstall-application.js +18 -6
  69. package/lib/common/commands/doctor.js +3 -2
  70. package/lib/common/commands/generate-messages.js +29 -17
  71. package/lib/common/commands/help.js +34 -20
  72. package/lib/common/commands/package-manager-get.js +18 -6
  73. package/lib/common/commands/package-manager-set.js +21 -9
  74. package/lib/common/commands/post-install.js +14 -2
  75. package/lib/common/commands/preuninstall.js +48 -24
  76. package/lib/common/commands/proxy/proxy-base.js +23 -8
  77. package/lib/common/commands/proxy/proxy-clear.js +16 -4
  78. package/lib/common/commands/proxy/proxy-get.js +15 -3
  79. package/lib/common/commands/proxy/proxy-set.js +101 -87
  80. package/lib/common/common-lib.js +1 -0
  81. package/lib/common/constants.js +22 -11
  82. package/lib/common/decorators.js +70 -10
  83. package/lib/common/dispatchers.js +106 -80
  84. package/lib/common/errors.js +116 -91
  85. package/lib/common/file-system.js +141 -108
  86. package/lib/common/header.js +5 -1
  87. package/lib/common/helpers.js +267 -152
  88. package/lib/common/host-info.js +54 -37
  89. package/lib/common/http-client.js +128 -93
  90. package/lib/common/logger/appenders/cli-appender.js +6 -1
  91. package/lib/common/logger/appenders/emit-appender.js +6 -1
  92. package/lib/common/logger/layouts/cli-layout.js +3 -1
  93. package/lib/common/logger/logger.js +9 -4
  94. package/lib/common/messages/messages.js +6 -0
  95. package/lib/common/mobile/android/android-application-manager.js +162 -122
  96. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +2 -1
  97. package/lib/common/mobile/android/android-debug-bridge.js +118 -87
  98. package/lib/common/mobile/android/android-device-file-system.js +135 -98
  99. package/lib/common/mobile/android/android-device-hash-service.js +78 -50
  100. package/lib/common/mobile/android/android-device.js +93 -68
  101. package/lib/common/mobile/android/android-emulator-services.js +131 -105
  102. package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
  103. package/lib/common/mobile/android/android-log-filter.js +5 -1
  104. package/lib/common/mobile/android/android-virtual-device-service.js +123 -76
  105. package/lib/common/mobile/android/device-android-debug-bridge.js +30 -13
  106. package/lib/common/mobile/android/genymotion/genymotion-service.js +123 -91
  107. package/lib/common/mobile/android/genymotion/virtualbox-service.js +92 -64
  108. package/lib/common/mobile/android/logcat-helper.js +140 -108
  109. package/lib/common/mobile/application-manager-base.js +113 -84
  110. package/lib/common/mobile/device-emitter.js +4 -0
  111. package/lib/common/mobile/device-log-emitter.js +1 -0
  112. package/lib/common/mobile/device-log-provider-base.js +19 -7
  113. package/lib/common/mobile/device-log-provider.js +23 -0
  114. package/lib/common/mobile/device-platforms-constants.js +1 -0
  115. package/lib/common/mobile/emulator-helper.js +3 -0
  116. package/lib/common/mobile/ios/device/ios-application-manager.js +111 -79
  117. package/lib/common/mobile/ios/device/ios-device-file-system.js +106 -78
  118. package/lib/common/mobile/ios/device/ios-device-operations.js +146 -105
  119. package/lib/common/mobile/ios/device/ios-device.js +40 -20
  120. package/lib/common/mobile/ios/ios-device-base.js +82 -58
  121. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
  122. package/lib/common/mobile/ios/ios-log-filter.js +1 -0
  123. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +96 -63
  124. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +2 -1
  125. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +95 -60
  126. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +48 -27
  127. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +63 -37
  128. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +36 -24
  129. package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
  130. package/lib/common/mobile/log-filter.js +2 -0
  131. package/lib/common/mobile/logging-levels.js +1 -0
  132. package/lib/common/mobile/mobile-core/android-device-discovery.js +64 -43
  133. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +35 -21
  134. package/lib/common/mobile/mobile-core/android-process-service.js +214 -143
  135. package/lib/common/mobile/mobile-core/device-discovery.js +14 -2
  136. package/lib/common/mobile/mobile-core/devices-service.js +505 -386
  137. package/lib/common/mobile/mobile-core/ios-device-discovery.js +37 -24
  138. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +65 -47
  139. package/lib/common/mobile/mobile-helper.js +27 -15
  140. package/lib/common/mobile/wp8/wp8-emulator-services.js +53 -25
  141. package/lib/common/opener.js +3 -2
  142. package/lib/common/os-info.js +1 -0
  143. package/lib/common/plist-parser.js +1 -0
  144. package/lib/common/project-helper.js +1 -0
  145. package/lib/common/prompter.js +114 -91
  146. package/lib/common/queue.js +21 -9
  147. package/lib/common/resource-loader.js +1 -0
  148. package/lib/common/services/auto-completion-service.js +65 -40
  149. package/lib/common/services/cancellation.js +29 -17
  150. package/lib/common/services/commands-service.js +180 -146
  151. package/lib/common/services/help-service.js +166 -133
  152. package/lib/common/services/hooks-service.js +121 -93
  153. package/lib/common/services/ios-notification-service.js +35 -21
  154. package/lib/common/services/json-file-settings-service.js +77 -52
  155. package/lib/common/services/lock-service.js +58 -35
  156. package/lib/common/services/message-contract-generator.js +47 -35
  157. package/lib/common/services/messages-service.js +1 -0
  158. package/lib/common/services/micro-templating-service.js +21 -4
  159. package/lib/common/services/net-service.js +110 -90
  160. package/lib/common/services/project-files-manager.js +28 -10
  161. package/lib/common/services/project-files-provider-base.js +1 -0
  162. package/lib/common/services/proxy-service.js +25 -13
  163. package/lib/common/services/qr.js +25 -13
  164. package/lib/common/services/settings-service.js +2 -1
  165. package/lib/common/services/xcode-select-service.js +36 -20
  166. package/lib/common/utils.js +3 -2
  167. package/lib/common/validators/project-name-validator.js +2 -1
  168. package/lib/common/validators/validation-result.js +2 -1
  169. package/lib/common/verify-node-version.js +11 -3
  170. package/lib/common/yok.js +69 -35
  171. package/lib/config.js +72 -36
  172. package/lib/constants-provider.js +1 -0
  173. package/lib/constants.js +78 -25
  174. package/lib/controllers/build-controller.js +100 -82
  175. package/lib/controllers/debug-controller.js +133 -107
  176. package/lib/controllers/deploy-controller.js +24 -15
  177. package/lib/controllers/migrate-controller.js +884 -723
  178. package/lib/controllers/platform-controller.js +94 -71
  179. package/lib/controllers/prepare-controller.js +274 -232
  180. package/lib/controllers/run-controller.js +427 -397
  181. package/lib/controllers/update-controller-base.js +30 -16
  182. package/lib/controllers/update-controller.js +130 -94
  183. package/lib/data/build-data.js +1 -0
  184. package/lib/data/controller-data-base.js +1 -0
  185. package/lib/data/debug-data.js +1 -0
  186. package/lib/data/platform-data.js +1 -0
  187. package/lib/data/prepare-data.js +2 -4
  188. package/lib/data/run-data.js +1 -0
  189. package/lib/definitions/project.d.ts +26 -0
  190. package/lib/detached-processes/cleanup-js-subprocess.js +20 -5
  191. package/lib/detached-processes/cleanup-process.js +43 -30
  192. package/lib/detached-processes/file-log-service.js +2 -1
  193. package/lib/device-path-provider.js +35 -23
  194. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +171 -149
  195. package/lib/device-sockets/ios/notification.js +4 -1
  196. package/lib/device-sockets/ios/socket-request-executor.js +42 -24
  197. package/lib/helpers/android-bundle-validator-helper.js +3 -2
  198. package/lib/helpers/deploy-command-helper.js +50 -44
  199. package/lib/helpers/key-command-helper.js +17 -6
  200. package/lib/helpers/livesync-command-helper.js +155 -137
  201. package/lib/helpers/network-connectivity-validator.js +18 -6
  202. package/lib/helpers/options-track-helper.js +19 -7
  203. package/lib/helpers/package-path-helper.js +1 -0
  204. package/lib/helpers/platform-command-helper.js +127 -101
  205. package/lib/helpers/version-validator-helper.js +1 -0
  206. package/lib/key-commands/bootstrap.js +3 -2
  207. package/lib/key-commands/index.js +205 -154
  208. package/lib/nativescript-cli-lib-bootstrap.js +4 -0
  209. package/lib/nativescript-cli-lib.js +1 -0
  210. package/lib/nativescript-cli.js +24 -6
  211. package/lib/node/pbxproj-dom-xcode.js +1 -0
  212. package/lib/node/xcode.js +1 -0
  213. package/lib/node-package-manager.js +114 -81
  214. package/lib/options.js +156 -122
  215. package/lib/package-installation-manager.js +172 -130
  216. package/lib/package-manager.js +88 -63
  217. package/lib/platform-command-param.js +16 -4
  218. package/lib/pnpm-package-manager.js +81 -59
  219. package/lib/project-data.js +13 -1
  220. package/lib/providers/project-files-provider.js +2 -1
  221. package/lib/resolvers/livesync-service-resolver.js +1 -0
  222. package/lib/services/analytics/analytics-broker-process.js +32 -19
  223. package/lib/services/analytics/analytics-broker.js +31 -17
  224. package/lib/services/analytics/analytics-service.js +210 -170
  225. package/lib/services/analytics/google-analytics-provider.js +59 -43
  226. package/lib/services/analytics-settings-service.js +37 -15
  227. package/lib/services/android/android-bundle-tool-service.js +61 -43
  228. package/lib/services/android/gradle-build-args-service.js +23 -9
  229. package/lib/services/android/gradle-build-service.js +36 -22
  230. package/lib/services/android/gradle-command-service.js +36 -22
  231. package/lib/services/android-device-debug-service.js +123 -90
  232. package/lib/services/android-plugin-build-service.js +260 -205
  233. package/lib/services/android-project-service.js +241 -129
  234. package/lib/services/android-resources-migration-service.js +71 -51
  235. package/lib/services/apple-portal/apple-portal-application-service.js +64 -46
  236. package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
  237. package/lib/services/apple-portal/apple-portal-session-service.js +218 -197
  238. package/lib/services/apple-portal/srp/srp-wrapper.js +61 -43
  239. package/lib/services/assets-generation/assets-generation-service.js +128 -103
  240. package/lib/services/build-artifacts-service.js +22 -10
  241. package/lib/services/build-data-service.js +1 -0
  242. package/lib/services/build-info-file-service.js +36 -20
  243. package/lib/services/cleanup-service.js +81 -48
  244. package/lib/services/cocoapods-platform-manager.js +9 -0
  245. package/lib/services/cocoapods-service.js +153 -112
  246. package/lib/services/debug-data-service.js +1 -0
  247. package/lib/services/debug-service-base.js +7 -0
  248. package/lib/services/device/device-install-app-service.js +72 -54
  249. package/lib/services/doctor-service.js +135 -101
  250. package/lib/services/extensibility-service.js +108 -81
  251. package/lib/services/files-hash-service.js +44 -26
  252. package/lib/services/hmr-status-service.js +3 -1
  253. package/lib/services/info-service.js +1 -0
  254. package/lib/services/initialize-service.js +54 -37
  255. package/lib/services/ios/export-options-plist-service.js +55 -38
  256. package/lib/services/ios/ios-signing-service.js +191 -168
  257. package/lib/services/ios/spm-service.js +70 -46
  258. package/lib/services/ios/xcodebuild-args-service.js +103 -77
  259. package/lib/services/ios/xcodebuild-command-service.js +26 -14
  260. package/lib/services/ios/xcodebuild-service.js +72 -52
  261. package/lib/services/ios-debugger-port-service.js +38 -24
  262. package/lib/services/ios-device-debug-service.js +103 -75
  263. package/lib/services/ios-entitlements-service.js +43 -31
  264. package/lib/services/ios-extensions-service.js +30 -18
  265. package/lib/services/ios-log-filter.js +20 -0
  266. package/lib/services/ios-native-target-service.js +6 -4
  267. package/lib/services/ios-project-service.js +605 -437
  268. package/lib/services/ios-provision-service.js +132 -108
  269. package/lib/services/ios-watch-app-service.js +33 -21
  270. package/lib/services/ip-service.js +55 -38
  271. package/lib/services/itmstransporter-service.js +153 -129
  272. package/lib/services/karma-execution.js +2 -0
  273. package/lib/services/livesync/android-device-livesync-service-base.js +49 -31
  274. package/lib/services/livesync/android-device-livesync-service.js +151 -120
  275. package/lib/services/livesync/android-device-livesync-sockets-service.js +155 -121
  276. package/lib/services/livesync/android-livesync-service.js +36 -14
  277. package/lib/services/livesync/android-livesync-tool.js +117 -90
  278. package/lib/services/livesync/device-livesync-service-base.js +30 -15
  279. package/lib/services/livesync/ios-device-livesync-service.js +150 -114
  280. package/lib/services/livesync/ios-livesync-service.js +60 -42
  281. package/lib/services/livesync/livesync-socket.js +1 -0
  282. package/lib/services/livesync/platform-livesync-service-base.js +124 -94
  283. package/lib/services/livesync-process-data-service.js +1 -0
  284. package/lib/services/log-parser-service.js +2 -1
  285. package/lib/services/log-source-map-service.js +56 -30
  286. package/lib/services/marking-mode-service.js +33 -17
  287. package/lib/services/metadata-filtering-service.js +1 -0
  288. package/lib/services/npm-config-service.js +5 -1
  289. package/lib/services/pacote-service.js +71 -49
  290. package/lib/services/performance-service.js +4 -2
  291. package/lib/services/platform/add-platform-service.js +119 -51
  292. package/lib/services/platform/platform-validation-service.js +34 -22
  293. package/lib/services/platform/prepare-native-platform-service.js +65 -49
  294. package/lib/services/platform-environment-requirements.js +43 -27
  295. package/lib/services/platform-project-service-base.js +1 -0
  296. package/lib/services/platforms-data-service.js +1 -0
  297. package/lib/services/plugins-service.js +168 -125
  298. package/lib/services/prepare-data-service.js +1 -0
  299. package/lib/services/project-backup-service.js +5 -1
  300. package/lib/services/project-changes-service.js +152 -124
  301. package/lib/services/project-cleanup-service.js +79 -64
  302. package/lib/services/project-config-service.js +111 -73
  303. package/lib/services/project-data-service.js +154 -108
  304. package/lib/services/project-name-service.js +44 -28
  305. package/lib/services/project-service.js +113 -84
  306. package/lib/services/project-templates-service.js +68 -52
  307. package/lib/services/qr-code-terminal-service.js +1 -0
  308. package/lib/services/require-service.js +1 -0
  309. package/lib/services/start-service.js +60 -41
  310. package/lib/services/temp-service.js +22 -8
  311. package/lib/services/terminal-spinner-service.js +28 -15
  312. package/lib/services/test-execution-service.js +79 -59
  313. package/lib/services/test-initialization-service.js +6 -2
  314. package/lib/services/timeline-profiler-service.js +2 -1
  315. package/lib/services/user-settings-service.js +1 -0
  316. package/lib/services/versions-service.js +140 -119
  317. package/lib/services/watch-ignore-list-service.js +1 -0
  318. package/lib/services/webpack/webpack-compiler-service.js +279 -215
  319. package/lib/services/xcconfig-service.js +21 -8
  320. package/lib/services/xcproj-service.js +1 -0
  321. package/lib/shared-event-bus.js +6 -0
  322. package/lib/sys-info.js +63 -45
  323. package/lib/tools/config-manipulation/config-transformer.js +21 -0
  324. package/lib/tools/node-modules/node-modules-builder.js +28 -16
  325. package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
  326. package/lib/yarn-package-manager.js +79 -59
  327. package/lib/yarn2-package-manager.js +82 -60
  328. package/node_modules/@npmcli/move-file/LICENSE.md +22 -0
  329. package/node_modules/@npmcli/move-file/README.md +69 -0
  330. package/node_modules/@npmcli/move-file/lib/index.js +185 -0
  331. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +21 -0
  332. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +68 -0
  333. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +31 -0
  334. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +29 -0
  335. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
  336. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
  337. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +23 -0
  338. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +29 -0
  339. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +10 -0
  340. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +44 -0
  341. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +266 -0
  342. package/node_modules/@npmcli/move-file/package.json +47 -0
  343. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  344. package/node_modules/balanced-match/LICENSE.md +21 -0
  345. package/node_modules/balanced-match/README.md +97 -0
  346. package/node_modules/balanced-match/index.js +62 -0
  347. package/node_modules/balanced-match/package.json +48 -0
  348. package/node_modules/concat-map/.travis.yml +4 -0
  349. package/node_modules/concat-map/LICENSE +18 -0
  350. package/node_modules/concat-map/README.markdown +62 -0
  351. package/node_modules/concat-map/example/map.js +6 -0
  352. package/node_modules/concat-map/index.js +13 -0
  353. package/node_modules/concat-map/package.json +43 -0
  354. package/node_modules/concat-map/test/map.js +39 -0
  355. package/node_modules/fs.realpath/LICENSE +43 -0
  356. package/node_modules/fs.realpath/README.md +33 -0
  357. package/node_modules/fs.realpath/index.js +66 -0
  358. package/node_modules/fs.realpath/old.js +303 -0
  359. package/node_modules/fs.realpath/package.json +26 -0
  360. package/node_modules/inflight/LICENSE +15 -0
  361. package/node_modules/inflight/README.md +37 -0
  362. package/node_modules/inflight/inflight.js +54 -0
  363. package/node_modules/inflight/package.json +29 -0
  364. package/node_modules/inherits/LICENSE +16 -0
  365. package/node_modules/inherits/README.md +42 -0
  366. package/node_modules/inherits/inherits.js +9 -0
  367. package/node_modules/inherits/inherits_browser.js +27 -0
  368. package/node_modules/inherits/package.json +29 -0
  369. package/node_modules/once/LICENSE +15 -0
  370. package/node_modules/once/README.md +79 -0
  371. package/node_modules/once/once.js +42 -0
  372. package/node_modules/once/package.json +33 -0
  373. package/node_modules/path-is-absolute/index.js +20 -0
  374. package/node_modules/path-is-absolute/license +21 -0
  375. package/node_modules/path-is-absolute/package.json +43 -0
  376. package/node_modules/path-is-absolute/readme.md +59 -0
  377. package/node_modules/rimraf/LICENSE +15 -0
  378. package/node_modules/rimraf/README.md +101 -0
  379. package/node_modules/rimraf/bin.js +68 -0
  380. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +21 -0
  381. package/node_modules/rimraf/node_modules/brace-expansion/README.md +129 -0
  382. package/node_modules/rimraf/node_modules/brace-expansion/index.js +201 -0
  383. package/node_modules/rimraf/node_modules/brace-expansion/package.json +47 -0
  384. package/node_modules/rimraf/node_modules/glob/LICENSE +21 -0
  385. package/node_modules/rimraf/node_modules/glob/README.md +378 -0
  386. package/node_modules/rimraf/node_modules/glob/common.js +238 -0
  387. package/node_modules/rimraf/node_modules/glob/glob.js +790 -0
  388. package/node_modules/rimraf/node_modules/glob/package.json +55 -0
  389. package/node_modules/rimraf/node_modules/glob/sync.js +486 -0
  390. package/node_modules/rimraf/node_modules/minimatch/LICENSE +15 -0
  391. package/node_modules/rimraf/node_modules/minimatch/README.md +230 -0
  392. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +947 -0
  393. package/node_modules/rimraf/node_modules/minimatch/package.json +33 -0
  394. package/node_modules/rimraf/package.json +32 -0
  395. package/node_modules/rimraf/rimraf.js +360 -0
  396. package/node_modules/stringify-package/LICENSE +13 -0
  397. package/node_modules/stringify-package/README.md +55 -0
  398. package/node_modules/stringify-package/index.js +18 -0
  399. package/node_modules/stringify-package/package.json +38 -0
  400. package/node_modules/wrappy/LICENSE +15 -0
  401. package/node_modules/wrappy/README.md +36 -0
  402. package/node_modules/wrappy/package.json +29 -0
  403. package/node_modules/wrappy/wrappy.js +33 -0
  404. package/package.json +79 -64
@@ -5,6 +5,15 @@ 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
+ };
8
17
  Object.defineProperty(exports, "__esModule", { value: true });
9
18
  exports.IOSProjectService = exports.VisionSimulatorPlatformSdkName = exports.VisionDevicePlatformSdkName = exports.SimulatorPlatformSdkName = exports.DevicePlatformSdkName = void 0;
10
19
  const path = require("path");
@@ -18,6 +27,7 @@ const projectServiceBaseLib = require("./platform-project-service-base");
18
27
  const plist_merge_patch_1 = require("plist-merge-patch");
19
28
  const os_1 = require("os");
20
29
  const plist = require("plist");
30
+ const fastGlob = require("fast-glob");
21
31
  const constants_2 = require("../constants");
22
32
  const helpers_2 = require("../common/helpers");
23
33
  const yok_1 = require("../common/yok");
@@ -137,112 +147,127 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
137
147
  ".ico",
138
148
  ".cur",
139
149
  ".xbm",
140
- ],
150
+ ], // https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/
141
151
  };
142
152
  }
143
153
  return this._platformData;
144
154
  }
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;
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
+ });
158
170
  }
159
171
  getAppResourcesDestinationDirectoryPath(projectData) {
160
172
  return path.join(this.getPlatformData(projectData).projectRoot, projectData.projectName, "Resources");
161
173
  }
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,
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
+ };
195
+ });
196
+ }
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);
171
201
  });
172
- if (checkEnvironmentRequirementsOutput &&
173
- checkEnvironmentRequirementsOutput.canExecute) {
174
- const xcodeWarning = await this.$sysInfo.getXcodeWarning();
175
- if (xcodeWarning) {
176
- this.$logger.warn(xcodeWarning);
202
+ }
203
+ //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);
177
211
  }
178
- }
179
- return {
180
- checkEnvironmentRequirementsOutput,
181
- };
182
- }
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);
186
- }
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
- }
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
+ });
220
241
  }
221
242
  interpolateConfigurationFile(projectData) {
222
243
  return undefined;
223
244
  }
224
- async cleanProject(projectRoot, projectData) {
225
- return null;
245
+ cleanProject(projectRoot, projectData) {
246
+ return __awaiter(this, void 0, void 0, function* () {
247
+ return null;
248
+ });
226
249
  }
227
250
  afterCreateProject(projectRoot, projectData) {
228
251
  this.$fs.rename(path.join(projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER), path.join(projectRoot, projectData.projectName));
229
252
  }
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);
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
+ });
246
271
  }
247
272
  isPlatformPrepared(projectRoot, projectData) {
248
273
  return this.$fs.exists(path.join(projectRoot, projectData.projectName, constants.APP_FOLDER_NAME));
@@ -250,130 +275,210 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
250
275
  cleanDeviceTempFolder(deviceIdentifier) {
251
276
  return Promise.resolve();
252
277
  }
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;
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
+ }
269
296
  }
297
+ return isDynamic;
270
298
  }
271
- return isDynamic;
272
- }
273
- else {
274
- const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
275
- return await isDynamicFrameworkBundle(frameworkPath, frameworkName);
276
- }
299
+ else {
300
+ const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
301
+ return yield isDynamicFrameworkBundle(frameworkPath, frameworkName);
302
+ }
303
+ });
277
304
  }
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);
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
+ });
297
340
  }
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);
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
+ });
308
355
  }
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"`));
339
- this.savePbxProj(project, projectData);
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);
340
371
  }
341
- catch (err) {
342
- this.$logger.trace("Error adding NativeScript group to host project", err);
372
+ if (teamId) {
373
+ yield this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
343
374
  }
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);
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
+ }
442
+ }
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
+ }
469
+ }
470
+ }
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");
364
480
  }
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,
373
481
  });
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
- }
377
482
  }
378
483
  prepareAppResources(projectData) {
379
484
  const platformData = this.getPlatformData(projectData);
@@ -382,10 +487,12 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
382
487
  this.$fs.deleteDirectory(platformsAppResourcesPath);
383
488
  this.$fs.ensureDirectoryExists(platformsAppResourcesPath);
384
489
  const platformAppResourcesPath = path.join(projectAppResourcesPath, platformData.normalizedPlatformName);
490
+ // this allows App_Resources/visionOS
385
491
  if (this.$fs.exists(platformAppResourcesPath)) {
386
492
  this.$fs.copyFile(path.join(platformAppResourcesPath, "*"), platformsAppResourcesPath);
387
493
  }
388
494
  else {
495
+ // otherwise falls back to App_Resources/iOS
389
496
  this.$fs.copyFile(path.join(projectAppResourcesPath, this.$devicePlatformsConstants.iOS, "*"), platformsAppResourcesPath);
390
497
  }
391
498
  this.$fs.deleteFile(path.join(platformsAppResourcesPath, platformData.configurationFileName));
@@ -395,45 +502,48 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
395
502
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchapp"));
396
503
  this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchextension"));
397
504
  }
398
- async processConfigurationFilesFromAppResources(projectData, opts) {
399
- await this.mergeInfoPlists(projectData, opts);
400
- await this.$iOSEntitlementsService.merge(projectData);
401
- await this.mergeProjectXcconfigFiles(projectData);
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
+ });
402
511
  }
403
512
  ensureConfigurationFileInAppResources() {
404
513
  return null;
405
514
  }
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;
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);
420
541
  }
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"?>
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"?>
437
547
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
438
548
  <plist version="1.0">
439
549
  <dict>
@@ -441,14 +551,14 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
441
551
  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
442
552
  </dict>
443
553
  </plist>`,
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"?>
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"?>
452
562
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
453
563
  <plist version="1.0">
454
564
  <dict>
@@ -465,12 +575,13 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
465
575
  </array>
466
576
  </dict>
467
577
  </plist>`,
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);
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
+ });
474
585
  }
475
586
  getAllProductionPlugins(projectData) {
476
587
  return (this.$injector.resolve("pluginsService")).getAllProductionPlugins(projectData, this.getPlatformData(projectData).platformNameLowerCase);
@@ -484,6 +595,12 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
484
595
  getLibSubpathRelativeToProjectPath(targetPath, projectData) {
485
596
  const projectRoot = this.getPlatformData(projectData).projectRoot;
486
597
  const frameworkPath = path.relative(projectRoot, targetPath);
598
+ // console.log({
599
+ // targetPath,
600
+ // projectRoot,
601
+ // frameworkPath,
602
+ // resolved: path.resolve(projectRoot, frameworkPath),
603
+ // });
487
604
  return frameworkPath;
488
605
  }
489
606
  getPbxProjPath(projectData) {
@@ -504,94 +621,112 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
504
621
  savePbxProj(project, projectData, omitEmptyValues) {
505
622
  return this.$fs.writeFile(this.getPbxProjPath(projectData), project.writeSync({ omitEmptyValues }));
506
623
  }
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);
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
+ });
522
633
  }
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);
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
+ });
643
+ }
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
+ }
545
672
  }
546
673
  }
547
674
  }
548
- }
549
- await this.$spmService.applySPMPackages(platformData, projectData, pluginSpmPackages);
675
+ yield this.$spmService.applySPMPackages(platformData, projectData, pluginSpmPackages);
676
+ });
550
677
  }
551
678
  beforePrepareAllPlugins(projectData, dependencies) {
552
679
  return Promise.resolve(dependencies);
553
680
  }
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;
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
+ }
570
700
  }
571
701
  }
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
+ }
572
708
  }
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;
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
+ }
583
716
  }
584
717
  }
585
- }
586
- else {
587
- changesInfo.signingChanged = true;
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
+ }
588
723
  }
589
724
  }
725
+ else {
726
+ changesInfo.signingChanged = true;
727
+ }
590
728
  }
591
- else {
592
- changesInfo.signingChanged = true;
593
- }
594
- }
729
+ });
595
730
  }
596
731
  getDeploymentTarget(projectData) {
597
732
  const target = this.$xcconfigService.readPropertyValue(this.getBuildXCConfigFilePath(projectData), "IPHONEOS_DEPLOYMENT_TARGET");
@@ -635,96 +770,120 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
635
770
  const newFileName = projectData.projectName + fileNamePart;
636
771
  this.$fs.rename(path.join(fileRootLocation, oldFileName), path.join(fileRootLocation, newFileName));
637
772
  }
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,
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);
644
790
  });
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);
654
791
  }
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,
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,
672
799
  projectData,
673
800
  platformData,
674
801
  pbxProjPath,
675
802
  });
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
- }
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
+ });
682
821
  }
683
822
  getRootGroup(name, rootPath) {
684
- const filePathsArr = [];
685
- const rootGroup = {
686
- name: name,
687
- files: filePathsArr,
688
- path: rootPath,
689
- };
690
- if (this.$fs.exists(rootPath)) {
691
- const stats = this.$fs.getFsStats(rootPath);
692
- if (stats.isDirectory() && !this.$fs.isEmptyDir(rootPath)) {
693
- this.$fs.readDirectory(rootPath).forEach((fileName) => {
694
- const filePath = path.join(rootGroup.path, fileName);
695
- filePathsArr.push(filePath);
696
- });
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
+ }
697
837
  }
698
- }
699
- return rootGroup;
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
+ }
847
+ }
848
+ }
849
+ return rootGroup;
850
+ });
700
851
  }
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);
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
+ }
708
861
  }
709
- }
710
- this.savePbxProj(project, projectData);
862
+ this.savePbxProj(project, projectData);
863
+ });
711
864
  }
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
- }
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
+ });
716
871
  }
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
- }
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
+ });
721
878
  }
722
879
  removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData) {
723
- const project = this.createPbxProj(projectData);
724
- const group = this.getRootGroup(pluginData.name, pluginPlatformsFolderPath);
725
- project.removePbxGroup(group.name, group.path);
726
- project.removeFromHeaderSearchPaths(group.path);
727
- this.savePbxProj(project, 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
+ });
728
887
  }
729
888
  removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
730
889
  const project = this.createPbxProj(projectData);
@@ -766,44 +925,50 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
766
925
  const modulemap = `module ${libraryName} { explicit module ${libraryName} { ${headers.join(" ")} } }`;
767
926
  this.$fs.writeFile(path.join(headersFolderPath, "module.modulemap"), modulemap);
768
927
  }
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)) {
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)) {
780
947
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
781
- await this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
948
+ yield this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
782
949
  }
783
950
  }
784
- }
785
- const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
786
- if (this.$fs.exists(appResourcesXcconfigPath)) {
787
951
  for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
788
- await this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
789
- }
790
- }
791
- for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
792
- if (!this.$fs.exists(pluginsXcconfigFilePath)) {
793
- this.$fs.writeFile(pluginsXcconfigFilePath, "");
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
+ }
794
958
  }
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);
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
+ }
805
970
  }
806
- }
971
+ });
807
972
  }
808
973
  getBuildXCConfigFilePath(projectData) {
809
974
  const buildXCConfig = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
@@ -822,19 +987,22 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
822
987
  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}".`);
823
988
  }
824
989
  }
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);
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
+ }
830
997
  }
831
- }
998
+ });
832
999
  }
833
1000
  }
834
- exports.IOSProjectService = IOSProjectService;
835
1001
  IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER = "__PROJECT_NAME__";
836
1002
  IOSProjectService.IOS_PLATFORM_NAME = "ios";
837
1003
  __decorate([
838
1004
  (0, helpers_2.hook)("buildIOS")
839
1005
  ], IOSProjectService.prototype, "buildProject", null);
1006
+ exports.IOSProjectService = IOSProjectService;
840
1007
  yok_1.injector.register("iOSProjectService", IOSProjectService);
1008
+ //# sourceMappingURL=ios-project-service.js.map