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