nativescript 8.9.3 → 8.9.4-sap.0
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.
- package/lib/android-tools-info.js +12 -0
- package/lib/base-package-manager.js +7 -0
- package/lib/bootstrap.js +5 -1
- package/lib/bun-package-manager.js +14 -1
- package/lib/color.js +3 -0
- package/lib/commands/add-platform.js +1 -0
- package/lib/commands/apple-login.js +1 -0
- package/lib/commands/appstore-list.js +1 -0
- package/lib/commands/appstore-upload.js +3 -0
- package/lib/commands/build.js +3 -2
- package/lib/commands/clean.js +22 -1
- package/lib/commands/command-base.js +1 -0
- package/lib/commands/config.js +4 -0
- package/lib/commands/create-project.js +6 -0
- package/lib/commands/debug.js +6 -1
- package/lib/commands/deploy.js +3 -2
- package/lib/commands/embedding/embed.js +7 -0
- package/lib/commands/extensibility/install-extension.js +1 -0
- package/lib/commands/extensibility/list-extensions.js +1 -0
- package/lib/commands/extensibility/uninstall-extension.js +1 -0
- package/lib/commands/fonts.js +1 -0
- package/lib/commands/generate-assets.js +1 -0
- package/lib/commands/generate-help.js +1 -0
- package/lib/commands/generate.js +48 -1
- package/lib/commands/info.js +1 -0
- package/lib/commands/install.js +1 -0
- package/lib/commands/list-platforms.js +1 -0
- package/lib/commands/migrate.js +1 -0
- package/lib/commands/native-add.js +5 -0
- package/lib/commands/platform-clean.js +1 -0
- package/lib/commands/plugin/add-plugin.js +1 -0
- package/lib/commands/plugin/build-plugin.js +1 -0
- package/lib/commands/plugin/create-plugin.js +5 -0
- package/lib/commands/plugin/list-plugins.js +1 -0
- package/lib/commands/plugin/remove-plugin.js +2 -0
- package/lib/commands/plugin/update-plugin.js +1 -0
- package/lib/commands/post-install.js +6 -0
- package/lib/commands/prepare.js +4 -3
- package/lib/commands/preview.js +2 -0
- package/lib/commands/remove-platform.js +1 -0
- package/lib/commands/resources/resources-update.js +2 -0
- package/lib/commands/run.js +1 -0
- package/lib/commands/setup.js +1 -0
- package/lib/commands/start.js +1 -0
- package/lib/commands/test-init.js +4 -0
- package/lib/commands/test.js +9 -2
- package/lib/commands/typings.js +2 -1
- package/lib/commands/update-platform.js +5 -0
- package/lib/commands/update.js +2 -0
- package/lib/commands/widget.js +20 -1
- package/lib/common/bootstrap.js +1 -0
- package/lib/common/child-process.js +3 -0
- package/lib/common/codeGeneration/code-entity.js +1 -0
- package/lib/common/codeGeneration/code-printer.js +1 -0
- package/lib/common/command-params.js +1 -0
- package/lib/common/commands/analytics.js +3 -0
- package/lib/common/commands/autocompletion.js +3 -0
- package/lib/common/commands/device/device-log-stream.js +1 -0
- package/lib/common/commands/device/get-file.js +2 -0
- package/lib/common/commands/device/list-applications.js +1 -0
- package/lib/common/commands/device/list-devices.js +3 -0
- package/lib/common/commands/device/list-files.js +2 -0
- package/lib/common/commands/device/put-file.js +2 -0
- package/lib/common/commands/device/run-application.js +1 -0
- package/lib/common/commands/device/stop-application.js +1 -0
- package/lib/common/commands/device/uninstall-application.js +1 -0
- package/lib/common/commands/doctor.js +3 -2
- package/lib/common/commands/generate-messages.js +1 -0
- package/lib/common/commands/help.js +1 -0
- package/lib/common/commands/package-manager-get.js +1 -0
- package/lib/common/commands/package-manager-set.js +1 -0
- package/lib/common/commands/post-install.js +1 -0
- package/lib/common/commands/preuninstall.js +11 -2
- package/lib/common/commands/proxy/proxy-base.js +4 -0
- package/lib/common/commands/proxy/proxy-clear.js +1 -0
- package/lib/common/commands/proxy/proxy-get.js +1 -0
- package/lib/common/commands/proxy/proxy-set.js +1 -0
- package/lib/common/common-lib.js +1 -0
- package/lib/common/constants.js +11 -0
- package/lib/common/decorators.js +48 -0
- package/lib/common/dispatchers.js +10 -1
- package/lib/common/errors.js +13 -3
- package/lib/common/file-system.js +13 -2
- package/lib/common/header.js +3 -0
- package/lib/common/helpers.js +89 -3
- package/lib/common/host-info.js +4 -0
- package/lib/common/http-client.js +20 -0
- package/lib/common/logger/appenders/cli-appender.js +4 -0
- package/lib/common/logger/appenders/emit-appender.js +4 -0
- package/lib/common/logger/layouts/cli-layout.js +1 -0
- package/lib/common/logger/logger.js +5 -0
- package/lib/common/messages/messages.js +6 -0
- package/lib/common/mobile/android/android-application-manager.js +20 -1
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -0
- package/lib/common/mobile/android/android-debug-bridge.js +6 -0
- package/lib/common/mobile/android/android-device-file-system.js +4 -0
- package/lib/common/mobile/android/android-device-hash-service.js +3 -0
- package/lib/common/mobile/android/android-device.js +8 -0
- package/lib/common/mobile/android/android-emulator-services.js +3 -2
- package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
- package/lib/common/mobile/android/android-log-filter.js +4 -0
- package/lib/common/mobile/android/android-virtual-device-service.js +26 -0
- package/lib/common/mobile/android/device-android-debug-bridge.js +1 -0
- package/lib/common/mobile/android/genymotion/genymotion-service.js +6 -1
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +11 -0
- package/lib/common/mobile/android/logcat-helper.js +13 -0
- package/lib/common/mobile/application-manager-base.js +6 -0
- package/lib/common/mobile/device-emitter.js +4 -0
- package/lib/common/mobile/device-log-emitter.js +1 -0
- package/lib/common/mobile/device-log-provider-base.js +1 -0
- package/lib/common/mobile/device-log-provider.js +23 -0
- package/lib/common/mobile/device-platforms-constants.js +1 -0
- package/lib/common/mobile/emulator-helper.js +4 -0
- package/lib/common/mobile/ios/device/ios-application-manager.js +3 -0
- package/lib/common/mobile/ios/device/ios-device-file-system.js +1 -0
- package/lib/common/mobile/ios/device/ios-device-operations.js +4 -0
- package/lib/common/mobile/ios/device/ios-device.js +4 -0
- package/lib/common/mobile/ios/ios-device-base.js +1 -0
- package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
- package/lib/common/mobile/ios/ios-log-filter.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +4 -0
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +6 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +5 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +1 -0
- package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
- package/lib/common/mobile/log-filter.js +2 -0
- package/lib/common/mobile/logging-levels.js +1 -0
- package/lib/common/mobile/mobile-core/android-device-discovery.js +2 -0
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-core/android-process-service.js +32 -0
- package/lib/common/mobile/mobile-core/device-discovery.js +1 -0
- package/lib/common/mobile/mobile-core/devices-service.js +69 -0
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +2 -0
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-helper.js +1 -0
- package/lib/common/mobile/wp8/wp8-emulator-services.js +1 -0
- package/lib/common/opener.js +1 -0
- package/lib/common/os-info.js +1 -0
- package/lib/common/plist-parser.js +1 -0
- package/lib/common/project-helper.js +1 -0
- package/lib/common/prompter.js +9 -1
- package/lib/common/queue.js +1 -0
- package/lib/common/resource-loader.js +1 -0
- package/lib/common/services/auto-completion-service.js +13 -1
- package/lib/common/services/cancellation.js +2 -1
- package/lib/common/services/commands-service.js +17 -6
- package/lib/common/services/help-service.js +11 -3
- package/lib/common/services/hooks-service.js +13 -0
- package/lib/common/services/ios-notification-service.js +1 -0
- package/lib/common/services/json-file-settings-service.js +6 -0
- package/lib/common/services/lock-service.js +6 -0
- package/lib/common/services/message-contract-generator.js +1 -0
- package/lib/common/services/messages-service.js +1 -0
- package/lib/common/services/micro-templating-service.js +6 -0
- package/lib/common/services/net-service.js +3 -0
- package/lib/common/services/project-files-manager.js +5 -0
- package/lib/common/services/project-files-provider-base.js +1 -0
- package/lib/common/services/proxy-service.js +1 -0
- package/lib/common/services/qr.js +1 -0
- package/lib/common/services/settings-service.js +1 -0
- package/lib/common/services/xcode-select-service.js +1 -0
- package/lib/common/utils.js +1 -0
- package/lib/common/validators/project-name-validator.js +1 -0
- package/lib/common/validators/validation-result.js +1 -0
- package/lib/common/verify-node-version.js +8 -1
- package/lib/common/yok.js +32 -11
- package/lib/config.js +22 -1
- package/lib/constants-provider.js +1 -0
- package/lib/constants.js +53 -0
- package/lib/controllers/build-controller.js +4 -3
- package/lib/controllers/debug-controller.js +8 -3
- package/lib/controllers/deploy-controller.js +1 -0
- package/lib/controllers/migrate-controller.js +90 -4
- package/lib/controllers/platform-controller.js +9 -1
- package/lib/controllers/prepare-controller.js +17 -4
- package/lib/controllers/run-controller.js +17 -1
- package/lib/controllers/update-controller-base.js +1 -0
- package/lib/controllers/update-controller.js +11 -0
- package/lib/data/build-data.js +1 -0
- package/lib/data/controller-data-base.js +1 -0
- package/lib/data/debug-data.js +1 -0
- package/lib/data/platform-data.js +1 -0
- package/lib/data/prepare-data.js +1 -0
- package/lib/data/run-data.js +1 -0
- package/lib/detached-processes/cleanup-js-subprocess.js +8 -2
- package/lib/detached-processes/cleanup-process.js +18 -14
- package/lib/detached-processes/file-log-service.js +2 -1
- package/lib/device-path-provider.js +1 -0
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +7 -0
- package/lib/device-sockets/ios/notification.js +3 -0
- package/lib/device-sockets/ios/socket-request-executor.js +3 -0
- package/lib/helpers/android-bundle-validator-helper.js +2 -1
- package/lib/helpers/deploy-command-helper.js +1 -0
- package/lib/helpers/key-command-helper.js +4 -2
- package/lib/helpers/livesync-command-helper.js +4 -1
- package/lib/helpers/network-connectivity-validator.js +1 -0
- package/lib/helpers/options-track-helper.js +3 -2
- package/lib/helpers/package-path-helper.js +1 -0
- package/lib/helpers/platform-command-helper.js +7 -2
- package/lib/helpers/version-validator-helper.js +1 -0
- package/lib/key-commands/bootstrap.js +3 -2
- package/lib/key-commands/index.js +5 -4
- package/lib/nativescript-cli-lib-bootstrap.js +4 -0
- package/lib/nativescript-cli-lib.js +1 -0
- package/lib/nativescript-cli.js +10 -1
- package/lib/node/pbxproj-dom-xcode.js +1 -0
- package/lib/node/xcode.js +1 -0
- package/lib/node-package-manager.js +11 -1
- package/lib/options.js +144 -119
- package/lib/package-installation-manager.js +8 -1
- package/lib/package-manager.js +2 -0
- package/lib/platform-command-param.js +1 -0
- package/lib/pnpm-package-manager.js +4 -1
- package/lib/project-data.js +12 -0
- package/lib/providers/project-files-provider.js +1 -0
- package/lib/resolvers/livesync-service-resolver.js +1 -0
- package/lib/services/analytics/analytics-broker-process.js +10 -6
- package/lib/services/analytics/analytics-broker.js +2 -1
- package/lib/services/analytics/analytics-service.js +29 -25
- package/lib/services/analytics/google-analytics-provider.js +13 -12
- package/lib/services/analytics-settings-service.js +5 -0
- package/lib/services/android/android-bundle-tool-service.js +1 -0
- package/lib/services/android/gradle-build-args-service.js +3 -0
- package/lib/services/android/gradle-build-service.js +1 -0
- package/lib/services/android/gradle-command-service.js +1 -0
- package/lib/services/android-device-debug-service.js +6 -0
- package/lib/services/android-plugin-build-service.js +31 -2
- package/lib/services/android-project-service.js +71 -4
- package/lib/services/android-resources-migration-service.js +7 -0
- package/lib/services/apple-portal/apple-portal-application-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-session-service.js +6 -4
- package/lib/services/apple-portal/srp/srp-wrapper.js +4 -1
- package/lib/services/assets-generation/assets-generation-service.js +10 -5
- package/lib/services/build-artifacts-service.js +2 -1
- package/lib/services/build-data-service.js +1 -0
- package/lib/services/build-info-file-service.js +1 -0
- package/lib/services/cleanup-service.js +13 -9
- package/lib/services/cocoapods-platform-manager.js +9 -0
- package/lib/services/cocoapods-service.js +21 -1
- package/lib/services/debug-data-service.js +1 -0
- package/lib/services/debug-service-base.js +7 -0
- package/lib/services/device/device-install-app-service.js +2 -1
- package/lib/services/doctor-service.js +21 -6
- package/lib/services/extensibility-service.js +8 -0
- package/lib/services/files-hash-service.js +1 -0
- package/lib/services/hmr-status-service.js +2 -0
- package/lib/services/info-service.js +1 -0
- package/lib/services/initialize-service.js +5 -1
- package/lib/services/ios/export-options-plist-service.js +4 -0
- package/lib/services/ios/ios-signing-service.js +4 -0
- package/lib/services/ios/spm-service.js +11 -0
- package/lib/services/ios/xcodebuild-args-service.js +9 -0
- package/lib/services/ios/xcodebuild-command-service.js +1 -0
- package/lib/services/ios/xcodebuild-service.js +2 -1
- package/lib/services/ios-debugger-port-service.js +1 -0
- package/lib/services/ios-device-debug-service.js +1 -0
- package/lib/services/ios-entitlements-service.js +1 -0
- package/lib/services/ios-extensions-service.js +1 -0
- package/lib/services/ios-log-filter.js +20 -0
- package/lib/services/ios-native-target-service.js +6 -4
- package/lib/services/ios-project-service.js +91 -1
- package/lib/services/ios-provision-service.js +3 -0
- package/lib/services/ios-watch-app-service.js +1 -0
- package/lib/services/ip-service.js +2 -0
- package/lib/services/itmstransporter-service.js +1 -0
- package/lib/services/karma-execution.js +2 -0
- package/lib/services/livesync/android-device-livesync-service-base.js +1 -0
- package/lib/services/livesync/android-device-livesync-service.js +2 -0
- package/lib/services/livesync/android-device-livesync-sockets-service.js +3 -0
- package/lib/services/livesync/android-livesync-service.js +1 -0
- package/lib/services/livesync/android-livesync-tool.js +4 -0
- package/lib/services/livesync/device-livesync-service-base.js +2 -0
- package/lib/services/livesync/ios-device-livesync-service.js +7 -0
- package/lib/services/livesync/ios-livesync-service.js +2 -0
- package/lib/services/livesync/livesync-socket.js +1 -0
- package/lib/services/livesync/platform-livesync-service-base.js +5 -0
- package/lib/services/livesync-process-data-service.js +1 -0
- package/lib/services/log-parser-service.js +1 -0
- package/lib/services/log-source-map-service.js +15 -0
- package/lib/services/marking-mode-service.js +8 -5
- package/lib/services/metadata-filtering-service.js +1 -0
- package/lib/services/npm-config-service.js +4 -0
- package/lib/services/pacote-service.js +7 -0
- package/lib/services/performance-service.js +3 -1
- package/lib/services/platform/add-platform-service.js +49 -2
- package/lib/services/platform/platform-validation-service.js +1 -0
- package/lib/services/platform/prepare-native-platform-service.js +5 -2
- package/lib/services/platform-environment-requirements.js +8 -3
- package/lib/services/platform-project-service-base.js +1 -0
- package/lib/services/platforms-data-service.js +1 -0
- package/lib/services/plugins-service.js +20 -2
- package/lib/services/prepare-data-service.js +1 -0
- package/lib/services/project-backup-service.js +4 -0
- package/lib/services/project-changes-service.js +14 -3
- package/lib/services/project-cleanup-service.js +2 -0
- package/lib/services/project-config-service.js +21 -2
- package/lib/services/project-data-service.js +36 -7
- package/lib/services/project-name-service.js +1 -0
- package/lib/services/project-service.js +10 -0
- package/lib/services/project-templates-service.js +3 -2
- package/lib/services/qr-code-terminal-service.js +1 -0
- package/lib/services/require-service.js +1 -0
- package/lib/services/start-service.js +1 -0
- package/lib/services/temp-service.js +1 -0
- package/lib/services/terminal-spinner-service.js +2 -0
- package/lib/services/test-execution-service.js +9 -2
- package/lib/services/test-initialization-service.js +4 -0
- package/lib/services/timeline-profiler-service.js +1 -0
- package/lib/services/user-settings-service.js +1 -0
- package/lib/services/versions-service.js +6 -4
- package/lib/services/watch-ignore-list-service.js +1 -0
- package/lib/services/webpack/webpack-compiler-service.js +40 -0
- package/lib/services/xcconfig-service.js +2 -0
- package/lib/services/xcproj-service.js +1 -0
- package/lib/shared-event-bus.js +6 -0
- package/lib/sys-info.js +2 -1
- package/lib/tools/config-manipulation/config-transformer.js +12 -0
- package/lib/tools/node-modules/node-modules-builder.js +1 -0
- package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
- package/lib/yarn-package-manager.js +1 -0
- package/lib/yarn2-package-manager.js +3 -0
- package/package.json +8 -6
- package/vendor/gradle-plugin/build.gradle +3 -3
|
@@ -18,7 +18,40 @@ const constants_1 = require("../common/constants");
|
|
|
18
18
|
const helpers_1 = require("../common/helpers");
|
|
19
19
|
const decorators_1 = require(".././common/decorators");
|
|
20
20
|
const yok_1 = require("../common/yok");
|
|
21
|
-
|
|
21
|
+
//
|
|
22
|
+
// we sort the native dependencies topologically to make sure they are processed in the right order
|
|
23
|
+
// native dependenciess need to be sorted so the deepst dependencies are built before it's parents
|
|
24
|
+
//
|
|
25
|
+
// for example, given this dep structure (assuming these are all native dependencies that need to be built)
|
|
26
|
+
// (note: we list all dependencies at the root level, so the leaf nodes are essentially references to the root nodes)
|
|
27
|
+
//
|
|
28
|
+
// |- dep1
|
|
29
|
+
// |- dep2
|
|
30
|
+
// |- |- dep3
|
|
31
|
+
// |- |- dep4
|
|
32
|
+
// |- |- |- dep5
|
|
33
|
+
// |- dep3
|
|
34
|
+
// |- dep4
|
|
35
|
+
// |- |- dep5
|
|
36
|
+
// |- dep5
|
|
37
|
+
//
|
|
38
|
+
// It is sorted:
|
|
39
|
+
//
|
|
40
|
+
// |- dep1
|
|
41
|
+
// |- dep3
|
|
42
|
+
// |- dep5
|
|
43
|
+
// |- dep4 # depends on dep5, so dep5 must be built first, ie above ^
|
|
44
|
+
// |- |- dep5
|
|
45
|
+
// |- dep2 # depends on dep3, dep4 (and dep5 through dep4) so all of them must be built first before dep2 is built
|
|
46
|
+
// |- |- dep3
|
|
47
|
+
// |- |- dep4
|
|
48
|
+
// |- |- |- dep5
|
|
49
|
+
//
|
|
50
|
+
// for more details see: https://wikiless.org/wiki/Topological_sorting?lang=en
|
|
51
|
+
//
|
|
52
|
+
function topologicalSortNativeDependencies(dependencies, start = [], depth = 0, total = 0 // do not pass in, we calculate it in the initial run!
|
|
53
|
+
) {
|
|
54
|
+
// we set the total on the initial call - and never increment it, as it's used for esacaping the recursion
|
|
22
55
|
if (total === 0) {
|
|
23
56
|
total = dependencies.length;
|
|
24
57
|
}
|
|
@@ -32,6 +65,8 @@ function topologicalSortNativeDependencies(dependencies, start = [], depth = 0,
|
|
|
32
65
|
return sortedDeps;
|
|
33
66
|
}, start);
|
|
34
67
|
const remainingDeps = dependencies.filter((nativeDep) => !sortedDeps.includes(nativeDep));
|
|
68
|
+
// recurse if we still have remaining deps
|
|
69
|
+
// the second condition here prevents infinite recursion
|
|
35
70
|
if (remainingDeps.length && sortedDeps.length < total) {
|
|
36
71
|
return topologicalSortNativeDependencies(remainingDeps, sortedDeps, depth + 1, total);
|
|
37
72
|
}
|
|
@@ -85,7 +120,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
85
120
|
constants.APK_DIR,
|
|
86
121
|
];
|
|
87
122
|
const packageName = this.getProjectNameFromId(projectData);
|
|
88
|
-
const runtimePackage = this.$projectDataService.getRuntimePackage(projectData.projectDir, "android");
|
|
123
|
+
const runtimePackage = this.$projectDataService.getRuntimePackage(projectData.projectDir, "android" /* constants.PlatformTypes.android */);
|
|
89
124
|
this._platformData = {
|
|
90
125
|
frameworkPackageName: runtimePackage.name,
|
|
91
126
|
normalizedPlatformName: "Android",
|
|
@@ -126,7 +161,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
126
161
|
configurationFileName: constants.MANIFEST_FILE_NAME,
|
|
127
162
|
configurationFilePath: path.join(...configurationsDirectoryArr),
|
|
128
163
|
relativeToFrameworkConfigurationFilePath: path.join(constants.SRC_DIR, constants.MAIN_DIR, constants.MANIFEST_FILE_NAME),
|
|
129
|
-
fastLivesyncFileExtensions: [".jpg", ".gif", ".png", ".bmp", ".webp"],
|
|
164
|
+
fastLivesyncFileExtensions: [".jpg", ".gif", ".png", ".bmp", ".webp"], // http://developer.android.com/guide/appendix/media-formats.html
|
|
130
165
|
};
|
|
131
166
|
}
|
|
132
167
|
return this._platformData;
|
|
@@ -176,6 +211,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
176
211
|
const targetSdkVersion = androidToolsInfo && androidToolsInfo.targetSdkVersion;
|
|
177
212
|
this.$logger.trace(`Using Android SDK '${targetSdkVersion}'.`);
|
|
178
213
|
this.copy(this.getPlatformData(projectData).projectRoot, frameworkDir, "*", "-R");
|
|
214
|
+
// TODO: Check if we actually need this and if it should be targetSdk or compileSdk
|
|
179
215
|
this.cleanResValues(targetSdkVersion, projectData);
|
|
180
216
|
}
|
|
181
217
|
getResDestinationDir(projectData) {
|
|
@@ -207,6 +243,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
207
243
|
_.map(directoriesToClean, (dir) => this.$fs.deleteDirectory(dir));
|
|
208
244
|
}
|
|
209
245
|
async interpolateData(projectData) {
|
|
246
|
+
// Interpolate the apilevel and package
|
|
210
247
|
this.interpolateConfigurationFile(projectData);
|
|
211
248
|
const appResourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
|
|
212
249
|
let stringsFilePath;
|
|
@@ -222,8 +259,10 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
222
259
|
const gradleSettingsFilePath = path.join(this.getPlatformData(projectData).projectRoot, "settings.gradle");
|
|
223
260
|
shell.sed("-i", /__PROJECT_NAME__/, this.getProjectNameFromId(projectData), gradleSettingsFilePath);
|
|
224
261
|
try {
|
|
262
|
+
// will replace applicationId in app/App_Resources/Android/app.gradle if it has not been edited by the user
|
|
225
263
|
const appGradleContent = this.$fs.readText(projectData.appGradlePath);
|
|
226
264
|
if (appGradleContent.indexOf(constants.PACKAGE_PLACEHOLDER_NAME) !== -1) {
|
|
265
|
+
//TODO: For compatibility with old templates. Once all templates are updated should delete.
|
|
227
266
|
shell.sed("-i", new RegExp(constants.PACKAGE_PLACEHOLDER_NAME), projectData.projectIdentifiers.android, projectData.appGradlePath);
|
|
228
267
|
}
|
|
229
268
|
}
|
|
@@ -274,6 +313,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
274
313
|
return [".jar", ".dat"];
|
|
275
314
|
}
|
|
276
315
|
async prepareProject() {
|
|
316
|
+
// Intentionally left empty.
|
|
277
317
|
}
|
|
278
318
|
ensureConfigurationFileInAppResources(projectData) {
|
|
279
319
|
const appResourcesDirectoryPath = projectData.appResourcesDirectoryPath;
|
|
@@ -290,6 +330,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
290
330
|
this.$logger.warn("No manifest found in " + originalAndroidManifestFilePath);
|
|
291
331
|
return;
|
|
292
332
|
}
|
|
333
|
+
// Overwrite the AndroidManifest from runtime.
|
|
293
334
|
if (!appResourcesDirStructureHasMigrated) {
|
|
294
335
|
this.$fs.copyFile(originalAndroidManifestFilePath, this.getPlatformData(projectData).configurationFilePath);
|
|
295
336
|
}
|
|
@@ -306,6 +347,8 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
306
347
|
}
|
|
307
348
|
else {
|
|
308
349
|
this.$fs.copyFile(path.join(projectAppResourcesPath, platformData.normalizedPlatformName, "*"), platformsAppResourcesPath);
|
|
350
|
+
// https://github.com/NativeScript/android-runtime/issues/899
|
|
351
|
+
// App_Resources/Android/libs is reserved to user's aars and jars, but they should not be copied as resources
|
|
309
352
|
this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "libs"));
|
|
310
353
|
}
|
|
311
354
|
const androidToolsInfo = this.$androidToolsInfo.getToolsInfo({
|
|
@@ -315,6 +358,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
315
358
|
this.cleanResValues(compileSdkVersion, projectData);
|
|
316
359
|
}
|
|
317
360
|
async preparePluginNativeCode(pluginData, projectData) {
|
|
361
|
+
// build Android plugins which contain AndroidManifest.xml and/or resources
|
|
318
362
|
const pluginPlatformsFolderPath = this.getPluginPlatformsFolderPath(pluginData, AndroidProjectService.ANDROID_PLATFORM_NAME);
|
|
319
363
|
if (this.$fs.exists(pluginPlatformsFolderPath)) {
|
|
320
364
|
const options = {
|
|
@@ -336,6 +380,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
336
380
|
return;
|
|
337
381
|
}
|
|
338
382
|
async removePluginNativeCode(pluginData, projectData) {
|
|
383
|
+
// not implemented
|
|
339
384
|
}
|
|
340
385
|
async beforePrepareAllPlugins(projectData, dependencies) {
|
|
341
386
|
if (dependencies) {
|
|
@@ -349,6 +394,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
349
394
|
filterUniqueDependencies(dependencies) {
|
|
350
395
|
const depsDictionary = dependencies.reduce((dict, dep) => {
|
|
351
396
|
const collision = dict[dep.name];
|
|
397
|
+
// in case there are multiple dependencies to the same module, the one declared in the package.json takes precedence
|
|
352
398
|
if (!collision || collision.depth > dep.depth) {
|
|
353
399
|
dict[dep.name] = dep;
|
|
354
400
|
}
|
|
@@ -367,6 +413,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
367
413
|
name,
|
|
368
414
|
directory: path.relative(platformDir, directory),
|
|
369
415
|
dependencies: dependencies.filter((dep) => {
|
|
416
|
+
// filter out transient dependencies that don't have native dependencies
|
|
370
417
|
return (nativeDependencyData.findIndex((nativeDep) => nativeDep.name === dep) !== -1);
|
|
371
418
|
}),
|
|
372
419
|
};
|
|
@@ -374,6 +421,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
374
421
|
nativeDependencies = topologicalSortNativeDependencies(nativeDependencies);
|
|
375
422
|
const jsonContent = JSON.stringify(nativeDependencies, null, 4);
|
|
376
423
|
this.$fs.writeFile(dependenciesJsonPath, jsonContent);
|
|
424
|
+
// we sort all the dependencies to respect the topological sorting of the native dependencies
|
|
377
425
|
return dependencies.sort(function (a, b) {
|
|
378
426
|
return (nativeDependencies.findIndex((n) => n.name === a.name) -
|
|
379
427
|
nativeDependencies.findIndex((n) => n.name === b.name));
|
|
@@ -405,6 +453,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
405
453
|
await adb.executeShellCommand(["rm", "-rf", deviceRootPath]);
|
|
406
454
|
}
|
|
407
455
|
async checkForChanges() {
|
|
456
|
+
// Nothing android specific to check yet.
|
|
408
457
|
}
|
|
409
458
|
getDeploymentTarget(projectData) {
|
|
410
459
|
return;
|
|
@@ -414,9 +463,12 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
414
463
|
shell.cp(cpArg, paths, projectRoot);
|
|
415
464
|
}
|
|
416
465
|
validatePackageName(packageName) {
|
|
466
|
+
//Make the package conform to Java package types
|
|
467
|
+
//Enforce underscore limitation
|
|
417
468
|
if (!/^[a-zA-Z]+(\.[a-zA-Z0-9][a-zA-Z0-9_]*)+$/.test(packageName)) {
|
|
418
469
|
this.$errors.fail(`Package name must look like: com.company.Name. Got: ${packageName}`);
|
|
419
470
|
}
|
|
471
|
+
//Class is a reserved word
|
|
420
472
|
if (/\b[Cc]lass\b/.test(packageName)) {
|
|
421
473
|
this.$errors.fail("class is a reserved word");
|
|
422
474
|
}
|
|
@@ -425,6 +477,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
425
477
|
if (projectName === "") {
|
|
426
478
|
this.$errors.fail("Project name cannot be empty");
|
|
427
479
|
}
|
|
480
|
+
//Classes in Java don't begin with numbers
|
|
428
481
|
if (/^[0-9]/.test(projectName)) {
|
|
429
482
|
this.$errors.fail("Project name must not begin with a number");
|
|
430
483
|
}
|
|
@@ -445,6 +498,19 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
445
498
|
];
|
|
446
499
|
return path.join(this.getPlatformData(projectData).projectRoot, ...resourcePath);
|
|
447
500
|
}
|
|
501
|
+
/**
|
|
502
|
+
* The purpose of this method is to delete the previously prepared user resources.
|
|
503
|
+
* The content of the `<platforms>/android/.../res` directory is based on user's resources and gradle project template from android-runtime.
|
|
504
|
+
* During preparation of the `<path to user's App_Resources>/Android` we want to clean all the users files from previous preparation,
|
|
505
|
+
* but keep the ones that were introduced during `platform add` of the android-runtime.
|
|
506
|
+
* Currently the Gradle project template contains resources only in values and values-v21 directories.
|
|
507
|
+
* So the current logic of the method is cleaning al resources from `<platforms>/android/.../res` that are not in `values.*` directories
|
|
508
|
+
* and that exist in the `<path to user's App_Resources>/Android/.../res` directory
|
|
509
|
+
* This means that if user has a resource file in values-v29 for example, builds the project and then deletes this resource,
|
|
510
|
+
* it will be kept in platforms directory. Reference issue: `https://github.com/NativeScript/nativescript-cli/issues/5083`
|
|
511
|
+
* Same is valid for files in `drawable-<resolution>` directories - in case in user's resources there's drawable-hdpi directory,
|
|
512
|
+
* which is deleted after the first build of app, it will remain in platforms directory.
|
|
513
|
+
*/
|
|
448
514
|
cleanUpPreparedResources(projectData) {
|
|
449
515
|
let resourcesDirPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName);
|
|
450
516
|
if (this.$androidResourcesMigrationService.hasMigrated(projectData.appResourcesDirectoryPath)) {
|
|
@@ -469,7 +535,7 @@ class AndroidProjectService extends projectServiceBaseLib.PlatformProjectService
|
|
|
469
535
|
const hasUseKotlinPropertyInAppData = `hasUseKotlinPropertyInApp${analyticsDelimiter}${buildStatistics.kotlinUsage.hasUseKotlinPropertyInApp}`;
|
|
470
536
|
const hasKotlinRuntimeClassesData = `hasKotlinRuntimeClasses${analyticsDelimiter}${buildStatistics.kotlinUsage.hasKotlinRuntimeClasses}`;
|
|
471
537
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
472
|
-
action: "Using Kotlin"
|
|
538
|
+
action: "Using Kotlin" /* constants.TrackActionNames.UsingKotlin */,
|
|
473
539
|
additionalData: `${hasUseKotlinPropertyInAppData}${analyticsDelimiter}${hasKotlinRuntimeClassesData}`,
|
|
474
540
|
});
|
|
475
541
|
}
|
|
@@ -502,3 +568,4 @@ __decorate([
|
|
|
502
568
|
(0, helpers_1.hook)("buildAndroid")
|
|
503
569
|
], AndroidProjectService.prototype, "buildProject", null);
|
|
504
570
|
yok_1.injector.register("androidProjectService", AndroidProjectService);
|
|
571
|
+
//# sourceMappingURL=android-project-service.js.map
|
|
@@ -46,6 +46,7 @@ class AndroidResourcesMigrationService {
|
|
|
46
46
|
const appResourcesMainSourceSetResourcesDestination = path.join(appMainSourceSet, constants.RESOURCES_DIR);
|
|
47
47
|
this.$fs.ensureDirectoryExists(appResourcesDestination);
|
|
48
48
|
this.$fs.ensureDirectoryExists(appMainSourceSet);
|
|
49
|
+
// create /java, /res and /assets in the App_Resources/Android/src/main directory
|
|
49
50
|
this.$fs.ensureDirectoryExists(appResourcesMainSourceSetResourcesDestination);
|
|
50
51
|
this.$fs.ensureDirectoryExists(path.join(appMainSourceSet, "java"));
|
|
51
52
|
this.$fs.ensureDirectoryExists(path.join(appMainSourceSet, constants.ASSETS_DIR));
|
|
@@ -59,20 +60,25 @@ class AndroidResourcesMigrationService {
|
|
|
59
60
|
const resourceFiles = getFiles(appResourcesFiles);
|
|
60
61
|
resourceDirectories.forEach((dir) => {
|
|
61
62
|
if (path.basename(dir) !== "libs") {
|
|
63
|
+
// don't copy /App_Resources/Android/libs into the src/main/res/libs directory
|
|
62
64
|
this.$fs.copyFile(dir, appResourcesMainSourceSetResourcesDestination);
|
|
63
65
|
}
|
|
64
66
|
else {
|
|
67
|
+
// copy App_Resources/Android/libs to App_ResourcesNew/Android/libs
|
|
65
68
|
this.$fs.copyFile(dir, path.join(appResourcesDestination));
|
|
66
69
|
}
|
|
67
70
|
});
|
|
68
71
|
resourceFiles.forEach((file) => {
|
|
69
72
|
const fileName = path.basename(file);
|
|
70
73
|
if (fileName !== constants.MANIFEST_FILE_NAME) {
|
|
74
|
+
// don't copy AndroidManifest into /App_Resources/Android as it needs to be inside src/main/
|
|
71
75
|
this.$fs.copyFile(file, path.join(appResourcesDestination, fileName));
|
|
72
76
|
}
|
|
73
77
|
});
|
|
74
78
|
this.$fs.copyFile(path.join(originalAppResources, constants.MANIFEST_FILE_NAME), path.join(appMainSourceSet, constants.MANIFEST_FILE_NAME));
|
|
79
|
+
// rename the legacy app_resources to ANDROID_DIR_OLD
|
|
75
80
|
this.$fs.rename(originalAppResources, appResourcesBackup);
|
|
81
|
+
// move the new, updated app_resources to App_Resources/Android, as the de facto resources
|
|
76
82
|
this.$fs.rename(appResourcesDestination, originalAppResources);
|
|
77
83
|
}
|
|
78
84
|
recover(originalAppResources, appResourcesDestination, appResourcesBackup) {
|
|
@@ -89,3 +95,4 @@ AndroidResourcesMigrationService.ANDROID_DIR = "Android";
|
|
|
89
95
|
AndroidResourcesMigrationService.ANDROID_DIR_TEMP = "Android-Updated";
|
|
90
96
|
AndroidResourcesMigrationService.ANDROID_DIR_OLD = "Android-Pre-v4";
|
|
91
97
|
yok_1.injector.register("androidResourcesMigrationService", AndroidResourcesMigrationService);
|
|
98
|
+
//# sourceMappingURL=android-resources-migration-service.js.map
|
|
@@ -63,3 +63,4 @@ class ApplePortalApplicationService {
|
|
|
63
63
|
}
|
|
64
64
|
exports.ApplePortalApplicationService = ApplePortalApplicationService;
|
|
65
65
|
yok_1.injector.register("applePortalApplicationService", ApplePortalApplicationService);
|
|
66
|
+
//# sourceMappingURL=apple-portal-application-service.js.map
|
|
@@ -201,10 +201,10 @@ For more details how to set up your environment, please execute "ns publish ios
|
|
|
201
201
|
const data = JSON.parse(authResponse.body);
|
|
202
202
|
const isSMS = data.trustedPhoneNumbers &&
|
|
203
203
|
data.trustedPhoneNumbers.length === 1 &&
|
|
204
|
-
data.noTrustedDevices;
|
|
204
|
+
data.noTrustedDevices; // 1 device and no trusted devices means sms was automatically sent.
|
|
205
205
|
const multiSMS = data.trustedPhoneNumbers &&
|
|
206
206
|
data.trustedPhoneNumbers.length !== 1 &&
|
|
207
|
-
data.noTrustedDevices;
|
|
207
|
+
data.noTrustedDevices; // Not handling more than 1 sms device and no trusted devices.
|
|
208
208
|
let token;
|
|
209
209
|
if (data.trustedPhoneNumbers &&
|
|
210
210
|
data.trustedPhoneNumbers.length &&
|
|
@@ -218,6 +218,7 @@ For more details how to set up your environment, please execute "ns publish ios
|
|
|
218
218
|
};
|
|
219
219
|
let url = `https://idmsa.apple.com/appleauth/auth/verify/trusteddevice/securitycode`;
|
|
220
220
|
if (isSMS) {
|
|
221
|
+
// No trusted devices means it must be sms.
|
|
221
222
|
body.mode = "sms";
|
|
222
223
|
body.phoneNumber = {
|
|
223
224
|
id: data.trustedPhoneNumbers[0].id,
|
|
@@ -280,8 +281,9 @@ function checkBits(bits, digest) {
|
|
|
280
281
|
return result;
|
|
281
282
|
}
|
|
282
283
|
function checkBit(position, buffer) {
|
|
283
|
-
const bitOffset = position & 7;
|
|
284
|
-
const byteIndex = position >> 3;
|
|
284
|
+
const bitOffset = position & 7; // in byte
|
|
285
|
+
const byteIndex = position >> 3; // in buffer
|
|
285
286
|
const bit = (buffer[byteIndex] >> bitOffset) & 1;
|
|
286
287
|
return bit === 0;
|
|
287
288
|
}
|
|
289
|
+
//# sourceMappingURL=apple-portal-session-service.js.map
|
|
@@ -28,7 +28,9 @@ class GSASRPAuthenticator {
|
|
|
28
28
|
async getInit() {
|
|
29
29
|
if (this.srpClient)
|
|
30
30
|
throw new Error("Already initialized");
|
|
31
|
-
this.srpClient = await srp.newClient(stringToU8Array(this.username),
|
|
31
|
+
this.srpClient = await srp.newClient(stringToU8Array(this.username),
|
|
32
|
+
// provide fake passsword because we need to get data from server
|
|
33
|
+
new Uint8Array());
|
|
32
34
|
let a = Buffer.from(js_srp_1.util.bytesFromBigint(this.srpClient.A)).toString("base64");
|
|
33
35
|
return {
|
|
34
36
|
a,
|
|
@@ -59,3 +61,4 @@ class GSASRPAuthenticator {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
exports.GSASRPAuthenticator = GSASRPAuthenticator;
|
|
64
|
+
//# sourceMappingURL=srp-wrapper.js.map
|
|
@@ -82,7 +82,7 @@ class AssetsGenerationService {
|
|
|
82
82
|
}
|
|
83
83
|
continue;
|
|
84
84
|
}
|
|
85
|
-
const operation = assetItem.resizeOperation || "resize"
|
|
85
|
+
const operation = assetItem.resizeOperation || "resize" /* Operations.Resize */;
|
|
86
86
|
let tempScale = null;
|
|
87
87
|
if (assetItem.scale) {
|
|
88
88
|
if (_.isNumber(assetItem.scale)) {
|
|
@@ -107,27 +107,31 @@ class AssetsGenerationService {
|
|
|
107
107
|
}
|
|
108
108
|
let image;
|
|
109
109
|
switch (operation) {
|
|
110
|
-
case "overlayWith"
|
|
110
|
+
case "overlayWith" /* Operations.OverlayWith */:
|
|
111
111
|
const overlayImageScale = assetItem.overlayImageScale ||
|
|
112
112
|
constants_1.AssetConstants.defaultOverlayImageScale;
|
|
113
113
|
const imageResize = Math.round(Math.min(width, height) * overlayImageScale);
|
|
114
114
|
image = await this.resize(generationData.imagePath, imageResize, imageResize);
|
|
115
115
|
image = this.generateImage(background, width, height, image);
|
|
116
116
|
break;
|
|
117
|
-
case "blank"
|
|
117
|
+
case "blank" /* Operations.Blank */:
|
|
118
118
|
image = this.generateImage(background, width, height);
|
|
119
119
|
break;
|
|
120
|
-
case "resize"
|
|
120
|
+
case "resize" /* Operations.Resize */:
|
|
121
121
|
image = await this.resize(generationData.imagePath, width, height);
|
|
122
122
|
break;
|
|
123
|
-
case "outerScale"
|
|
123
|
+
case "outerScale" /* Operations.OuterScale */:
|
|
124
|
+
// Resize image without applying scale
|
|
124
125
|
image = await this.resize(generationData.imagePath, assetItem.width, assetItem.height);
|
|
126
|
+
// The scale will apply to the underlying layer of the generated image
|
|
125
127
|
image = this.generateImage("#00000000", width, height, image);
|
|
126
128
|
break;
|
|
127
129
|
default:
|
|
128
130
|
throw new Error(`Invalid image generation operation: ${operation}`);
|
|
129
131
|
}
|
|
132
|
+
// This code disables the alpha chanel, as some images for the Apple App Store must not have transparency.
|
|
130
133
|
if (assetItem.rgba === false) {
|
|
134
|
+
// Add an underlying white layer
|
|
131
135
|
image = this.generateImage("#FFFFFF", image.width, image.height, image);
|
|
132
136
|
}
|
|
133
137
|
if (this.isAssetFilePath(outputPath)) {
|
|
@@ -181,3 +185,4 @@ __decorate([
|
|
|
181
185
|
(0, decorators_1.exported)("assetsGenerationService")
|
|
182
186
|
], AssetsGenerationService.prototype, "generateSplashScreens", null);
|
|
183
187
|
yok_1.injector.register("assetsGenerationService", AssetsGenerationService);
|
|
188
|
+
//# sourceMappingURL=assets-generation-service.js.map
|
|
@@ -64,7 +64,7 @@ class BuildArtifactsService {
|
|
|
64
64
|
if (packages.length > 1) {
|
|
65
65
|
this.$logger.warn(`More than one ${packageExtName} found in ${buildOutputPath} directory. Using the last one produced from build.`);
|
|
66
66
|
}
|
|
67
|
-
packages = _.sortBy(packages, (pkg) => pkg.time).reverse();
|
|
67
|
+
packages = _.sortBy(packages, (pkg) => pkg.time).reverse(); // We need to reverse because sortBy always sorts in ascending order
|
|
68
68
|
return packages[0];
|
|
69
69
|
}
|
|
70
70
|
getApplicationPackagesCore(candidates, validPackageNames) {
|
|
@@ -85,3 +85,4 @@ class BuildArtifactsService {
|
|
|
85
85
|
}
|
|
86
86
|
exports.BuildArtifactsService = BuildArtifactsService;
|
|
87
87
|
yok_1.injector.register("buildArtifactsService", BuildArtifactsService);
|
|
88
|
+
//# sourceMappingURL=build-artifacts-service.js.map
|
|
@@ -20,56 +20,56 @@ class CleanupService {
|
|
|
20
20
|
async addCleanupCommand(commandInfo) {
|
|
21
21
|
const cleanupProcess = await this.getCleanupProcess();
|
|
22
22
|
cleanupProcess.send({
|
|
23
|
-
messageType: "AddCleanCommand"
|
|
23
|
+
messageType: "AddCleanCommand" /* CleanupProcessMessage.AddCleanCommand */,
|
|
24
24
|
commandInfo,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
async removeCleanupCommand(commandInfo) {
|
|
28
28
|
const cleanupProcess = await this.getCleanupProcess();
|
|
29
29
|
cleanupProcess.send({
|
|
30
|
-
messageType: "RemoveCleanCommand"
|
|
30
|
+
messageType: "RemoveCleanCommand" /* CleanupProcessMessage.RemoveCleanCommand */,
|
|
31
31
|
commandInfo,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
async addRequest(requestInfo) {
|
|
35
35
|
const cleanupProcess = await this.getCleanupProcess();
|
|
36
36
|
cleanupProcess.send({
|
|
37
|
-
messageType: "AddRequest"
|
|
37
|
+
messageType: "AddRequest" /* CleanupProcessMessage.AddRequest */,
|
|
38
38
|
requestInfo,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
async removeRequest(requestInfo) {
|
|
42
42
|
const cleanupProcess = await this.getCleanupProcess();
|
|
43
43
|
cleanupProcess.send({
|
|
44
|
-
messageType: "RemoveRequest"
|
|
44
|
+
messageType: "RemoveRequest" /* CleanupProcessMessage.RemoveRequest */,
|
|
45
45
|
requestInfo,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
async addCleanupDeleteAction(filePath) {
|
|
49
49
|
const cleanupProcess = await this.getCleanupProcess();
|
|
50
50
|
cleanupProcess.send({
|
|
51
|
-
messageType: "AddDeleteFileAction"
|
|
51
|
+
messageType: "AddDeleteFileAction" /* CleanupProcessMessage.AddDeleteFileAction */,
|
|
52
52
|
filePath,
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
async removeCleanupDeleteAction(filePath) {
|
|
56
56
|
const cleanupProcess = await this.getCleanupProcess();
|
|
57
57
|
cleanupProcess.send({
|
|
58
|
-
messageType: "RemoveDeleteFileAction"
|
|
58
|
+
messageType: "RemoveDeleteFileAction" /* CleanupProcessMessage.RemoveDeleteFileAction */,
|
|
59
59
|
filePath,
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
async addCleanupJS(jsCommand) {
|
|
63
63
|
const cleanupProcess = await this.getCleanupProcess();
|
|
64
64
|
cleanupProcess.send({
|
|
65
|
-
messageType: "AddJSFileToRequire"
|
|
65
|
+
messageType: "AddJSFileToRequire" /* CleanupProcessMessage.AddJSFileToRequire */,
|
|
66
66
|
jsCommand,
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
async removeCleanupJS(jsCommand) {
|
|
70
70
|
const cleanupProcess = await this.getCleanupProcess();
|
|
71
71
|
cleanupProcess.send({
|
|
72
|
-
messageType: "RemoveJSFileToRequire"
|
|
72
|
+
messageType: "RemoveJSFileToRequire" /* CleanupProcessMessage.RemoveJSFileToRequire */,
|
|
73
73
|
jsCommand,
|
|
74
74
|
});
|
|
75
75
|
}
|
|
@@ -92,6 +92,8 @@ class CleanupService {
|
|
|
92
92
|
setShouldDispose(shouldDispose) {
|
|
93
93
|
this.shouldDispose = shouldDispose;
|
|
94
94
|
}
|
|
95
|
+
// TODO: Consider extracting this method to a separate service
|
|
96
|
+
// as it has the same logic as the one used in analytics-service
|
|
95
97
|
getCleanupProcess() {
|
|
96
98
|
return new Promise((resolve, reject) => {
|
|
97
99
|
const cleanupProcessArgs = this.getCleanupProcessArgs();
|
|
@@ -110,11 +112,12 @@ class CleanupService {
|
|
|
110
112
|
clearTimeout(timeoutId);
|
|
111
113
|
if (!isSettled) {
|
|
112
114
|
isSettled = true;
|
|
115
|
+
// In case we throw error here, CLI will break its execution.
|
|
113
116
|
reject(err);
|
|
114
117
|
}
|
|
115
118
|
});
|
|
116
119
|
cleanupProcess.on("message", (data) => {
|
|
117
|
-
if (data === "ProcessReadyToReceive") {
|
|
120
|
+
if (data === "ProcessReadyToReceive" /* DetachedProcessMessages.ProcessReadyToReceive */) {
|
|
118
121
|
clearTimeout(timeoutId);
|
|
119
122
|
if (!isSettled) {
|
|
120
123
|
isSettled = true;
|
|
@@ -163,3 +166,4 @@ __decorate([
|
|
|
163
166
|
(0, decorators_1.cache)()
|
|
164
167
|
], CleanupService.prototype, "getCleanupProcess", null);
|
|
165
168
|
yok_1.injector.register("cleanupService", CleanupService);
|
|
169
|
+
//# sourceMappingURL=cleanup-service.js.map
|
|
@@ -82,6 +82,7 @@ class CocoaPodsPlatformManager {
|
|
|
82
82
|
_.each(allPodfiles, (podfileContent) => {
|
|
83
83
|
const platformMatch = platformRowRegExp.exec(podfileContent);
|
|
84
84
|
const podfilePathMatch = podfilePathRegExp.exec(podfileContent) || [];
|
|
85
|
+
// platform without version -> select it with highest priority
|
|
85
86
|
if (platformMatch && platformMatch[0] && !platformMatch[2]) {
|
|
86
87
|
selectedPlatformData = {
|
|
87
88
|
version: null,
|
|
@@ -90,6 +91,7 @@ class CocoaPodsPlatformManager {
|
|
|
90
91
|
};
|
|
91
92
|
return false;
|
|
92
93
|
}
|
|
94
|
+
// platform with version
|
|
93
95
|
if (platformMatch && platformMatch[0] && platformMatch[2]) {
|
|
94
96
|
if (!selectedPlatformData ||
|
|
95
97
|
semver.gt(semver.coerce(platformMatch[2]), semver.coerce(selectedPlatformData.version))) {
|
|
@@ -104,6 +106,12 @@ class CocoaPodsPlatformManager {
|
|
|
104
106
|
return selectedPlatformData;
|
|
105
107
|
}
|
|
106
108
|
shouldReplacePlatformSection(projectData, oldPodfilePlatformData, currentPodfilePlatformData) {
|
|
109
|
+
// The selected platform should be replaced in the following cases:
|
|
110
|
+
// 1. When the pod file is from App_Resources and the selected platform is not from App_Resources
|
|
111
|
+
// 2. When the pod file is from App_Resources, the selected platform is also from App_Resources
|
|
112
|
+
// and the pod's version is greater than the selected one
|
|
113
|
+
// 3. When the pod file doesn't have platform's version -> `platform :ios`
|
|
114
|
+
// 4. When the pod file has a version greater than the selected platform's version
|
|
107
115
|
const appResourcesPodfilePath = path.join(projectData.getAppResourcesDirectoryPath(), "iOS", constants_1.PODFILE_NAME);
|
|
108
116
|
const isFromAppResources = oldPodfilePlatformData.path !== appResourcesPodfilePath &&
|
|
109
117
|
currentPodfilePlatformData.path === appResourcesPodfilePath;
|
|
@@ -135,3 +143,4 @@ class CocoaPodsPlatformManager {
|
|
|
135
143
|
}
|
|
136
144
|
exports.CocoaPodsPlatformManager = CocoaPodsPlatformManager;
|
|
137
145
|
yok_1.injector.register("cocoaPodsPlatformManager", CocoaPodsPlatformManager);
|
|
146
|
+
//# sourceMappingURL=cocoapods-platform-manager.js.map
|
|
@@ -34,6 +34,12 @@ class CocoaPodsService {
|
|
|
34
34
|
let podTool = this.$config.USE_POD_SANDBOX ? "sandbox-pod" : "pod";
|
|
35
35
|
const args = ["install"];
|
|
36
36
|
if (process.platform === "darwin" && process.arch === "arm64") {
|
|
37
|
+
// check if pod is installed as an x86_64 binary or a native arm64 one
|
|
38
|
+
// we run the following:
|
|
39
|
+
// arch -x86_64 pod --version
|
|
40
|
+
// if it's an arm64 binary, we'll get something like this as a result:
|
|
41
|
+
// arch: posix_spawnp: pod: Bad CPU type in executable
|
|
42
|
+
// in which case, we should run it natively.
|
|
37
43
|
const res = await this.$childProcess
|
|
38
44
|
.exec("arch -x86_64 pod --version", null, {
|
|
39
45
|
showStderr: true,
|
|
@@ -47,8 +53,11 @@ class CocoaPodsService {
|
|
|
47
53
|
podTool = "arch";
|
|
48
54
|
}
|
|
49
55
|
}
|
|
56
|
+
// cocoapods print a lot of non-error information on stderr. Pipe the `stderr` to `stdout`, so we won't polute CLI's stderr output.
|
|
50
57
|
const podInstallResult = await this.$childProcess.spawnFromEvent(podTool, args, "close", { cwd: projectRoot, stdio: ["pipe", process.stdout, process.stdout] }, { throwError: false });
|
|
51
58
|
if (podInstallResult.exitCode !== 0) {
|
|
59
|
+
// https://github.com/CocoaPods/CocoaPods/blob/92aaf0f1120d32f3487960b485fb69fcaf61486c/lib/cocoapods/resolver.rb#L498
|
|
60
|
+
// TODO add article
|
|
52
61
|
const versionResolutionHint = podInstallResult.exitCode === 31
|
|
53
62
|
? `For more information on resolving CocoaPod issues in NativeScript read.`
|
|
54
63
|
: "";
|
|
@@ -80,6 +89,7 @@ ${versionResolutionHint}`);
|
|
|
80
89
|
}
|
|
81
90
|
async applyPodfileArchExclusions(projectData, platformData) {
|
|
82
91
|
const xcodeVersionData = await this.$xcodeSelectService.getXcodeVersion();
|
|
92
|
+
// only apply EXCLUDED_ARCHS workaround on XCode 12
|
|
83
93
|
if (+xcodeVersionData.major !== 12) {
|
|
84
94
|
return;
|
|
85
95
|
}
|
|
@@ -98,6 +108,7 @@ end`.trim();
|
|
|
98
108
|
this.$fs.writeFile(exclusionsPodfile, exclusions);
|
|
99
109
|
}
|
|
100
110
|
await this.applyPodfileToProject("NativeScript-CLI-Architecture-Exclusions", exclusionsPodfile, projectData, platformData);
|
|
111
|
+
// clean up
|
|
101
112
|
this.$fs.deleteFile(exclusionsPodfile);
|
|
102
113
|
}
|
|
103
114
|
async applyPodfileFromExtensions(projectData, platformData) {
|
|
@@ -120,6 +131,7 @@ end`.trim();
|
|
|
120
131
|
podfilePath: path.join(extensionFolderPath, name, constants.PODFILE_NAME),
|
|
121
132
|
}));
|
|
122
133
|
extensionsPodfile.forEach(({ targetName, podfilePath }) => {
|
|
134
|
+
// Remove the data between #Begin Podfile and #EndPodfile
|
|
123
135
|
const regExpToRemove = new RegExp(`${this.getExtensionPodfileHeader(podfilePath, targetName)}[\\s\\S]*?${this.getExtensionPodfileEnd()}`, "mg");
|
|
124
136
|
projectPodFileContent = projectPodFileContent.replace(regExpToRemove, "");
|
|
125
137
|
if (this.$fs.exists(podfilePath)) {
|
|
@@ -146,6 +158,7 @@ end`.trim();
|
|
|
146
158
|
? this.$fs.readText(pathToProjectPodfile).trim()
|
|
147
159
|
: "";
|
|
148
160
|
if (projectPodfileContent.indexOf(podfileContent) === -1) {
|
|
161
|
+
// Remove old occurences of the plugin from the project's Podfile.
|
|
149
162
|
this.removePodfileFromProject(moduleName, podfilePath, projectData, nativeProjectPath);
|
|
150
163
|
let finalPodfileContent = this.$fs.exists(pathToProjectPodfile)
|
|
151
164
|
? this.getPodfileContentWithoutTarget(projectData, this.$fs.readText(pathToProjectPodfile))
|
|
@@ -163,6 +176,7 @@ end`.trim();
|
|
|
163
176
|
removePodfileFromProject(moduleName, podfilePath, projectData, projectRoot) {
|
|
164
177
|
if (this.$fs.exists(this.getProjectPodfilePath(projectRoot))) {
|
|
165
178
|
let projectPodFileContent = this.$fs.readText(this.getProjectPodfilePath(projectRoot));
|
|
179
|
+
// Remove the data between #Begin Podfile and #EndPodfile
|
|
166
180
|
const regExpToRemove = new RegExp(`${this.getPluginPodfileHeader(podfilePath)}[\\s\\S]*?${this.getPluginPodfileEnd()}`, "mg");
|
|
167
181
|
projectPodFileContent = projectPodFileContent.replace(regExpToRemove, "");
|
|
168
182
|
projectPodFileContent = this.removePostInstallHook(moduleName, projectPodFileContent);
|
|
@@ -183,7 +197,7 @@ end`.trim();
|
|
|
183
197
|
}
|
|
184
198
|
}
|
|
185
199
|
getPluginPodfilePath(pluginData) {
|
|
186
|
-
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath("ios");
|
|
200
|
+
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath("ios" /* PlatformTypes.ios */);
|
|
187
201
|
const pluginPodFilePath = path.join(pluginPlatformsFolderPath, constants_1.PODFILE_NAME);
|
|
188
202
|
return pluginPodFilePath;
|
|
189
203
|
}
|
|
@@ -219,6 +233,7 @@ end`.trim();
|
|
|
219
233
|
if (_.startsWith(projectPodfileContent, podFileHeader)) {
|
|
220
234
|
projectPodfileContent = projectPodfileContent.substr(podFileHeader.length);
|
|
221
235
|
const podFileFooter = this.getPodfileFooter();
|
|
236
|
+
// Only remove the final end in case the file starts with the podFileHeader
|
|
222
237
|
if (_.endsWith(projectPodfileContent, podFileFooter)) {
|
|
223
238
|
projectPodfileContent = projectPodfileContent.substr(0, projectPodfileContent.length - podFileFooter.length);
|
|
224
239
|
}
|
|
@@ -239,6 +254,8 @@ end`.trim();
|
|
|
239
254
|
return projectPodFileContent;
|
|
240
255
|
}
|
|
241
256
|
getHookBasicFuncNameForPlugin(hookName, pluginName) {
|
|
257
|
+
// nativescript-hook and nativescript_hook should have different names, so replace all _ with ___ first and then replace all special symbols with _
|
|
258
|
+
// This will lead to a clash in case plugins are called nativescript-hook and nativescript___hook
|
|
242
259
|
const replacedPluginName = pluginName
|
|
243
260
|
.replace(/_/g, "___")
|
|
244
261
|
.replace(/[^A-Za-z0-9_]/g, "_");
|
|
@@ -252,6 +269,7 @@ end`.trim();
|
|
|
252
269
|
const newFunctionName = `${this.getHookBasicFuncNameForPlugin(hookName, pluginName)}_${newFunctions.length}`;
|
|
253
270
|
let newDefinition = `def ${newFunctionName}`;
|
|
254
271
|
const rubyFunction = { functionName: newFunctionName };
|
|
272
|
+
// firstGroup is the block parameter, secondGroup is the block parameter name.
|
|
255
273
|
if (firstGroup && secondGroup) {
|
|
256
274
|
newDefinition = `${newDefinition} (${secondGroup})`;
|
|
257
275
|
rubyFunction.functionParameters = secondGroup;
|
|
@@ -262,6 +280,7 @@ end`.trim();
|
|
|
262
280
|
return { replacedContent, newFunctions };
|
|
263
281
|
}
|
|
264
282
|
getPluginPodfileHeader(pluginPodFilePath) {
|
|
283
|
+
// escape special + from the podfile path (pnpm)
|
|
265
284
|
pluginPodFilePath = pluginPodFilePath.replace(/\+/g, "\\+");
|
|
266
285
|
return `# Begin Podfile - ${pluginPodFilePath}`;
|
|
267
286
|
}
|
|
@@ -331,3 +350,4 @@ exports.CocoaPodsService = CocoaPodsService;
|
|
|
331
350
|
CocoaPodsService.PODFILE_POST_INSTALL_SECTION_NAME = "post_install";
|
|
332
351
|
CocoaPodsService.INSTALLER_BLOCK_PARAMETER_NAME = "installer";
|
|
333
352
|
yok_1.injector.register("cocoapodsService", CocoaPodsService);
|
|
353
|
+
//# sourceMappingURL=cocoapods-service.js.map
|