@akylas/nativescript-cli 8.8.2 → 8.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +55 -68
- package/lib/commands/build.js +57 -86
- package/lib/commands/clean.js +161 -176
- package/lib/commands/command-base.js +14 -27
- package/lib/commands/config.js +51 -70
- 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 +17 -26
- 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 +34 -39
- 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 +106 -127
- 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 +1 -1
- 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 +74 -91
- package/lib/common/mobile/android/android-emulator-services.js +105 -130
- 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 +385 -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/plist-parser.js +3 -3
- 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 +7 -58
- 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 +17 -22
- package/lib/controllers/migrate-controller.js +722 -795
- package/lib/controllers/platform-controller.js +72 -87
- package/lib/controllers/prepare-controller.js +266 -299
- package/lib/controllers/run-controller.js +392 -406
- 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-debugger-port-service.d.ts +1 -1
- package/lib/definitions/livesync.d.ts +1 -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 +45 -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 +161 -211
- 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 +161 -198
- 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 +34 -47
- 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 +230 -256
- package/lib/services/android-project-service.js +163 -199
- 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 +171 -188
- package/lib/services/assets-generation/assets-generation-service.js +98 -115
- 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 +115 -136
- package/lib/services/device/device-install-app-service.js +73 -90
- 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 +161 -180
- package/lib/services/ios/spm-service.js +40 -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 +50 -69
- package/lib/services/ios-debugger-port-service.js +23 -36
- 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 +405 -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 +89 -112
- 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 +49 -64
- 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 +13 -24
- 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 +211 -231
- 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 +56 -54
- package/vendor/aab-tool/bundletool.jar +0 -0
- package/lib/common/resources/platform-tools/android/darwin/NOTICE.txt +0 -3407
- package/lib/common/resources/platform-tools/android/darwin/adb +0 -0
- package/lib/common/resources/platform-tools/android/linux/NOTICE.txt +0 -4451
- package/lib/common/resources/platform-tools/android/linux/adb +0 -0
- package/lib/common/resources/platform-tools/android/win32/AdbWinApi.dll +0 -0
- package/lib/common/resources/platform-tools/android/win32/AdbWinUsbApi.dll +0 -0
- package/lib/common/resources/platform-tools/android/win32/NOTICE.txt +0 -4451
- package/lib/common/resources/platform-tools/android/win32/adb.exe +0 -0
- package/lib/common/resources/platform-tools/android/win32/fastboot.exe +0 -0
|
@@ -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");
|
|
@@ -150,119 +141,107 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
150
141
|
}
|
|
151
142
|
return this._platformData;
|
|
152
143
|
}
|
|
153
|
-
validateOptions(projectId, provision, teamId) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
return true;
|
|
167
|
-
});
|
|
144
|
+
async validateOptions(projectId, provision, teamId) {
|
|
145
|
+
if (provision && teamId) {
|
|
146
|
+
this.$errors.fail("The options --provision and --teamId are mutually exclusive.");
|
|
147
|
+
}
|
|
148
|
+
if (provision === true) {
|
|
149
|
+
await this.$iOSProvisionService.listProvisions(projectId);
|
|
150
|
+
this.$errors.fail("Please provide provisioning profile uuid or name with the --provision option.");
|
|
151
|
+
}
|
|
152
|
+
if (teamId === true) {
|
|
153
|
+
await this.$iOSProvisionService.listTeams();
|
|
154
|
+
this.$errors.fail("Please provide team id or team name with the --teamId options.");
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
168
157
|
}
|
|
169
158
|
getAppResourcesDestinationDirectoryPath(projectData) {
|
|
170
159
|
return path.join(this.getPlatformData(projectData).projectRoot, projectData.projectName, "Resources");
|
|
171
160
|
}
|
|
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
|
-
};
|
|
161
|
+
async validate(projectData, options, notConfiguredEnvOptions) {
|
|
162
|
+
if (!this.$hostInfo.isDarwin) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const checkEnvironmentRequirementsOutput = await this.$platformEnvironmentRequirements.checkEnvironmentRequirements({
|
|
166
|
+
platform: this.getPlatformData(projectData).normalizedPlatformName,
|
|
167
|
+
projectDir: projectData.projectDir,
|
|
168
|
+
options,
|
|
169
|
+
notConfiguredEnvOptions,
|
|
193
170
|
});
|
|
171
|
+
if (checkEnvironmentRequirementsOutput &&
|
|
172
|
+
checkEnvironmentRequirementsOutput.canExecute) {
|
|
173
|
+
const xcodeWarning = await this.$sysInfo.getXcodeWarning();
|
|
174
|
+
if (xcodeWarning) {
|
|
175
|
+
this.$logger.warn(xcodeWarning);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
checkEnvironmentRequirementsOutput,
|
|
180
|
+
};
|
|
194
181
|
}
|
|
195
|
-
createProject(frameworkDir, frameworkVersion, projectData) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
|
|
199
|
-
});
|
|
182
|
+
async createProject(frameworkDir, frameworkVersion, projectData) {
|
|
183
|
+
this.$fs.ensureDirectoryExists(path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER));
|
|
184
|
+
shell.cp("-R", path.join(frameworkDir, "*"), this.getPlatformData(projectData).projectRoot);
|
|
200
185
|
}
|
|
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
|
-
});
|
|
186
|
+
async interpolateData(projectData) {
|
|
187
|
+
const projectRootFilePath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER);
|
|
188
|
+
if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + "-Info.plist"))) {
|
|
189
|
+
this.replaceFileName("-Info.plist", projectRootFilePath, projectData);
|
|
190
|
+
}
|
|
191
|
+
this.replaceFileName("-Prefix.pch", projectRootFilePath, projectData);
|
|
192
|
+
if (this.$fs.exists(path.join(projectRootFilePath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER + ".entitlements"))) {
|
|
193
|
+
this.replaceFileName(".entitlements", projectRootFilePath, projectData);
|
|
194
|
+
}
|
|
195
|
+
const xcschemeDirPath = path.join(this.getPlatformData(projectData).projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
|
|
196
|
+
constants_2.IosProjectConstants.XcodeProjExtName, "xcshareddata/xcschemes");
|
|
197
|
+
const xcschemeFilePath = path.join(xcschemeDirPath, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER +
|
|
198
|
+
constants_2.IosProjectConstants.XcodeSchemeExtName);
|
|
199
|
+
if (this.$fs.exists(xcschemeFilePath)) {
|
|
200
|
+
this.$logger.trace("Found shared scheme at xcschemeFilePath, renaming to match project name.");
|
|
201
|
+
this.$logger.trace("Checkpoint 0");
|
|
202
|
+
this.replaceFileContent(xcschemeFilePath, projectData);
|
|
203
|
+
this.$logger.trace("Checkpoint 1");
|
|
204
|
+
this.replaceFileName(constants_2.IosProjectConstants.XcodeSchemeExtName, xcschemeDirPath, projectData);
|
|
205
|
+
this.$logger.trace("Checkpoint 2");
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
this.$logger.trace("Copying xcscheme from template not found at " + xcschemeFilePath);
|
|
209
|
+
}
|
|
210
|
+
this.replaceFileName(constants_2.IosProjectConstants.XcodeProjExtName, this.getPlatformData(projectData).projectRoot, projectData);
|
|
211
|
+
const pbxprojFilePath = this.getPbxProjPath(projectData);
|
|
212
|
+
this.replaceFileContent(pbxprojFilePath, projectData);
|
|
213
|
+
const internalDirPath = path.join(projectRootFilePath, "..", "internal");
|
|
214
|
+
const xcframeworksFilePath = path.join(internalDirPath, "XCFrameworks.zip");
|
|
215
|
+
if (this.$fs.exists(xcframeworksFilePath)) {
|
|
216
|
+
await this.$fs.unzip(xcframeworksFilePath, internalDirPath);
|
|
217
|
+
this.$fs.deleteFile(xcframeworksFilePath);
|
|
218
|
+
}
|
|
236
219
|
}
|
|
237
220
|
interpolateConfigurationFile(projectData) {
|
|
238
221
|
return undefined;
|
|
239
222
|
}
|
|
240
|
-
cleanProject(projectRoot, projectData) {
|
|
241
|
-
return
|
|
242
|
-
return null;
|
|
243
|
-
});
|
|
223
|
+
async cleanProject(projectRoot, projectData) {
|
|
224
|
+
return null;
|
|
244
225
|
}
|
|
245
226
|
afterCreateProject(projectRoot, projectData) {
|
|
246
227
|
this.$fs.rename(path.join(projectRoot, IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER), path.join(projectRoot, projectData.projectName));
|
|
247
228
|
}
|
|
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
|
-
});
|
|
229
|
+
async buildProject(projectRoot, projectData, buildData) {
|
|
230
|
+
const platformData = this.getPlatformData(projectData);
|
|
231
|
+
const handler = (data) => {
|
|
232
|
+
this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
|
|
233
|
+
};
|
|
234
|
+
if (buildData.buildForDevice) {
|
|
235
|
+
await this.$iOSSigningService.setupSigningForDevice(projectRoot, projectData, buildData);
|
|
236
|
+
await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForDevice(platformData, projectData, buildData));
|
|
237
|
+
}
|
|
238
|
+
else if (buildData.buildForAppStore) {
|
|
239
|
+
await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForAppStore(platformData, projectData, buildData));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
await (0, helpers_1.attachAwaitDetach)(constants.BUILD_OUTPUT_EVENT_NAME, this.$childProcess, handler, this.$xcodebuildService.buildForSimulator(platformData, projectData, buildData));
|
|
243
|
+
}
|
|
244
|
+
this.validateApplicationIdentifier(projectData);
|
|
266
245
|
}
|
|
267
246
|
isPlatformPrepared(projectRoot, projectData) {
|
|
268
247
|
return this.$fs.exists(path.join(projectRoot, projectData.projectName, constants.APP_FOLDER_NAME));
|
|
@@ -270,138 +249,130 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
270
249
|
cleanDeviceTempFolder(deviceIdentifier) {
|
|
271
250
|
return Promise.resolve();
|
|
272
251
|
}
|
|
273
|
-
isDynamicFramework(frameworkPath) {
|
|
274
|
-
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
252
|
+
async isDynamicFramework(frameworkPath) {
|
|
253
|
+
const isDynamicFrameworkBundle = async (bundlePath, frameworkName) => {
|
|
254
|
+
const frameworkBinaryPath = path.join(bundlePath, frameworkName);
|
|
255
|
+
const fileResult = (await this.$childProcess.spawnFromEvent("file", [frameworkBinaryPath], "close")).stdout;
|
|
256
|
+
const isDynamicallyLinked = _.includes(fileResult, "dynamically linked");
|
|
257
|
+
return isDynamicallyLinked;
|
|
258
|
+
};
|
|
259
|
+
if (path.extname(frameworkPath) === ".xcframework") {
|
|
260
|
+
let isDynamic = true;
|
|
261
|
+
const plistJson = this.$plistParser.parseFileSync(path.join(frameworkPath, "Info.plist"));
|
|
262
|
+
for (const library of plistJson.AvailableLibraries) {
|
|
263
|
+
const singlePlatformFramework = path.join(frameworkPath, library.LibraryIdentifier, library.LibraryPath);
|
|
264
|
+
if (this.$fs.exists(singlePlatformFramework)) {
|
|
265
|
+
const frameworkName = path.basename(singlePlatformFramework, path.extname(singlePlatformFramework));
|
|
266
|
+
isDynamic = await isDynamicFrameworkBundle(singlePlatformFramework, frameworkName);
|
|
267
|
+
break;
|
|
291
268
|
}
|
|
292
|
-
return isDynamic;
|
|
293
269
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
270
|
+
return isDynamic;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
const frameworkName = path.basename(frameworkPath, path.extname(frameworkPath));
|
|
274
|
+
return await isDynamicFrameworkBundle(frameworkPath, frameworkName);
|
|
275
|
+
}
|
|
299
276
|
}
|
|
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
|
-
});
|
|
277
|
+
async addFramework(frameworkPath, projectData) {
|
|
278
|
+
if (this.$hostInfo.isWindows) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this.validateFramework(frameworkPath);
|
|
282
|
+
const project = this.createPbxProj(projectData);
|
|
283
|
+
const frameworkAddOptions = { customFramework: true };
|
|
284
|
+
const dynamic = await this.isDynamicFramework(frameworkPath);
|
|
285
|
+
if (dynamic) {
|
|
286
|
+
frameworkAddOptions["embed"] = true;
|
|
287
|
+
frameworkAddOptions["sign"] = true;
|
|
288
|
+
}
|
|
289
|
+
if (this.$options.hostProjectPath) {
|
|
290
|
+
frameworkAddOptions["embed"] = true;
|
|
291
|
+
frameworkAddOptions["sign"] = false;
|
|
292
|
+
}
|
|
293
|
+
const frameworkRelativePath = this.getLibSubpathRelativeToProjectPath(frameworkPath, projectData);
|
|
294
|
+
project.addFramework(frameworkRelativePath, frameworkAddOptions);
|
|
295
|
+
this.savePbxProj(project, projectData);
|
|
321
296
|
}
|
|
322
|
-
addStaticLibrary(staticLibPath, projectData) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
this.savePbxProj(project, projectData);
|
|
333
|
-
});
|
|
297
|
+
async addStaticLibrary(staticLibPath, projectData) {
|
|
298
|
+
const libraryName = path.basename(staticLibPath, ".a");
|
|
299
|
+
const headersSubpath = path.join(path.dirname(staticLibPath), "include", libraryName);
|
|
300
|
+
const project = this.createPbxProj(projectData);
|
|
301
|
+
const relativeStaticLibPath = this.getLibSubpathRelativeToProjectPath(staticLibPath, projectData);
|
|
302
|
+
project.addFramework(relativeStaticLibPath);
|
|
303
|
+
const relativeHeaderSearchPath = path.join(this.getLibSubpathRelativeToProjectPath(headersSubpath, projectData));
|
|
304
|
+
project.addToHeaderSearchPaths({ relativePath: relativeHeaderSearchPath });
|
|
305
|
+
this.generateModulemap(headersSubpath, libraryName);
|
|
306
|
+
this.savePbxProj(project, projectData);
|
|
334
307
|
}
|
|
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)));
|
|
308
|
+
async prepareProject(projectData, prepareData) {
|
|
309
|
+
const projectRoot = this.$options.hostProjectPath
|
|
310
|
+
? this.$options.hostProjectPath
|
|
311
|
+
: path.join(projectData.platformsDir, this.$devicePlatformsConstants.iOS.toLowerCase());
|
|
312
|
+
const platformData = this.getPlatformData(projectData);
|
|
313
|
+
const pluginsData = this.getAllProductionPlugins(projectData);
|
|
314
|
+
const pbxProjPath = this.getPbxProjPath(projectData);
|
|
315
|
+
this.$iOSExtensionsService.removeExtensions({ pbxProjPath });
|
|
316
|
+
await this.addExtensions(projectData, pluginsData);
|
|
317
|
+
const resourcesDirectoryPath = projectData.getAppResourcesDirectoryPath();
|
|
318
|
+
const provision = prepareData && prepareData.provision;
|
|
319
|
+
const teamId = prepareData && prepareData.teamId;
|
|
320
|
+
if (provision) {
|
|
321
|
+
await this.$iOSSigningService.setupSigningFromProvision(projectRoot, projectData, provision, prepareData.mobileProvisionData);
|
|
322
|
+
}
|
|
323
|
+
if (teamId) {
|
|
324
|
+
await this.$iOSSigningService.setupSigningFromTeam(projectRoot, projectData, teamId);
|
|
325
|
+
}
|
|
326
|
+
const project = this.createPbxProj(projectData);
|
|
327
|
+
if (this.$options.hostProjectPath) {
|
|
328
|
+
try {
|
|
329
|
+
project.addPbxGroup([], "NativeScript", "NativeScript", null, {
|
|
330
|
+
isMain: true,
|
|
331
|
+
filesRelativeToProject: true,
|
|
332
|
+
uuid: "NATIVESCRIPTNATIVESCRIPT",
|
|
333
|
+
});
|
|
334
|
+
const buildFolderPath = path.join(this.$options.hostProjectPath, projectData.projectName);
|
|
335
|
+
project.addResourceFile(buildFolderPath, {}, "NATIVESCRIPTNATIVESCRIPT");
|
|
336
|
+
const metadataPath = path.relative(this.$options.hostProjectPath, buildFolderPath);
|
|
337
|
+
project.addToOtherLinkerFlags(JSON.stringify(`-sectcreate __DATA __TNSMetadata "${metadataPath}/metadata-arm64.bin"`));
|
|
387
338
|
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
339
|
}
|
|
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");
|
|
340
|
+
catch (err) {
|
|
341
|
+
this.$logger.trace("Error adding NativeScript group to host project", err);
|
|
403
342
|
}
|
|
343
|
+
}
|
|
344
|
+
const resources = project.pbxGroupByName("Resources");
|
|
345
|
+
if (resources && !this.$options.hostProjectPath) {
|
|
346
|
+
const references = project.pbxFileReferenceSection();
|
|
347
|
+
const xcodeProjectImages = _.map(resources.children, (resource) => this.replace(references[resource.value].name));
|
|
348
|
+
this.$logger.trace("Images from Xcode project");
|
|
349
|
+
this.$logger.trace(xcodeProjectImages);
|
|
350
|
+
const appResourcesImages = this.$fs.readDirectory(this.getAppResourcesDestinationDirectoryPath(projectData));
|
|
351
|
+
this.$logger.trace("Current images from App_Resources");
|
|
352
|
+
this.$logger.trace(appResourcesImages);
|
|
353
|
+
const imagesToAdd = _.difference(appResourcesImages, xcodeProjectImages);
|
|
354
|
+
this.$logger.trace(`New images to add into xcode project: ${imagesToAdd.join(", ")}`);
|
|
355
|
+
_.each(imagesToAdd, (image) => project.addResourceFile(path.relative(this.getPlatformData(projectData).projectRoot, path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image))));
|
|
356
|
+
const imagesToRemove = _.difference(xcodeProjectImages, appResourcesImages);
|
|
357
|
+
this.$logger.trace(`Images to remove from xcode project: ${imagesToRemove.join(", ")}`);
|
|
358
|
+
_.each(imagesToRemove, (image) => project.removeResourceFile(path.join(this.getAppResourcesDestinationDirectoryPath(projectData), image)));
|
|
359
|
+
this.savePbxProj(project, projectData);
|
|
360
|
+
let resourcesNativeCodePath = path.join(resourcesDirectoryPath, platformData.normalizedPlatformName, constants.NATIVE_SOURCE_FOLDER);
|
|
361
|
+
if (!this.$fs.exists(resourcesNativeCodePath)) {
|
|
362
|
+
resourcesNativeCodePath = path.join(resourcesDirectoryPath, this.$devicePlatformsConstants.iOS, constants.NATIVE_SOURCE_FOLDER);
|
|
363
|
+
}
|
|
364
|
+
await this.prepareNativeSourceCode(constants.TNS_NATIVE_SOURCE_GROUP_NAME, resourcesNativeCodePath, projectData);
|
|
365
|
+
}
|
|
366
|
+
this.$iOSWatchAppService.removeWatchApp({ pbxProjPath });
|
|
367
|
+
const addedWatchApp = await this.$iOSWatchAppService.addWatchAppFromPath({
|
|
368
|
+
watchAppFolderPath: path.join(resourcesDirectoryPath, platformData.normalizedPlatformName),
|
|
369
|
+
projectData,
|
|
370
|
+
platformData,
|
|
371
|
+
pbxProjPath,
|
|
404
372
|
});
|
|
373
|
+
if (addedWatchApp) {
|
|
374
|
+
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");
|
|
375
|
+
}
|
|
405
376
|
}
|
|
406
377
|
prepareAppResources(projectData) {
|
|
407
378
|
const platformData = this.getPlatformData(projectData);
|
|
@@ -423,48 +394,45 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
423
394
|
this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchapp"));
|
|
424
395
|
this.$fs.deleteDirectory(path.join(platformsAppResourcesPath, "watchextension"));
|
|
425
396
|
}
|
|
426
|
-
processConfigurationFilesFromAppResources(projectData, opts) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
yield this.mergeProjectXcconfigFiles(projectData);
|
|
431
|
-
});
|
|
397
|
+
async processConfigurationFilesFromAppResources(projectData, opts) {
|
|
398
|
+
await this.mergeInfoPlists(projectData, opts);
|
|
399
|
+
await this.$iOSEntitlementsService.merge(projectData);
|
|
400
|
+
await this.mergeProjectXcconfigFiles(projectData);
|
|
432
401
|
}
|
|
433
402
|
ensureConfigurationFileInAppResources() {
|
|
434
403
|
return null;
|
|
435
404
|
}
|
|
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);
|
|
405
|
+
async mergeInfoPlists(projectData, buildOptions) {
|
|
406
|
+
const projectDir = projectData.projectDir;
|
|
407
|
+
const infoPlistPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, this.getPlatformData(projectData).configurationFileName);
|
|
408
|
+
this.ensureConfigurationFileInAppResources();
|
|
409
|
+
const reporterTraceMessage = "Info.plist:";
|
|
410
|
+
const reporter = {
|
|
411
|
+
log: (txt) => this.$logger.trace(`${reporterTraceMessage} ${txt}`),
|
|
412
|
+
warn: (txt) => this.$logger.warn(`${reporterTraceMessage} ${txt}`),
|
|
413
|
+
};
|
|
414
|
+
const session = new plist_merge_patch_1.PlistSession(reporter);
|
|
415
|
+
const makePatch = (plistPath) => {
|
|
416
|
+
if (!this.$fs.exists(plistPath)) {
|
|
417
|
+
this.$logger.trace("No plist found at: " + plistPath);
|
|
418
|
+
return;
|
|
462
419
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
420
|
+
this.$logger.trace("Schedule merge plist at: " + plistPath);
|
|
421
|
+
session.patch({
|
|
422
|
+
name: path.relative(projectDir, plistPath),
|
|
423
|
+
read: () => this.$fs.readText(plistPath),
|
|
424
|
+
});
|
|
425
|
+
};
|
|
426
|
+
const allPlugins = this.getAllProductionPlugins(projectData);
|
|
427
|
+
for (const plugin of allPlugins) {
|
|
428
|
+
const pluginInfoPlistPath = path.join(plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME), this.getPlatformData(projectData).configurationFileName);
|
|
429
|
+
makePatch(pluginInfoPlistPath);
|
|
430
|
+
}
|
|
431
|
+
makePatch(infoPlistPath);
|
|
432
|
+
if (projectData.projectIdentifiers && projectData.projectIdentifiers.ios) {
|
|
433
|
+
session.patch({
|
|
434
|
+
name: "CFBundleIdentifier from package.json nativescript.id",
|
|
435
|
+
read: () => `<?xml version="1.0" encoding="UTF-8"?>
|
|
468
436
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
469
437
|
<plist version="1.0">
|
|
470
438
|
<dict>
|
|
@@ -472,14 +440,14 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
472
440
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
473
441
|
</dict>
|
|
474
442
|
</plist>`,
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
if (!buildOptions.release &&
|
|
446
|
+
projectData.projectIdentifiers &&
|
|
447
|
+
projectData.projectIdentifiers.ios) {
|
|
448
|
+
session.patch({
|
|
449
|
+
name: "CFBundleURLTypes from package.json nativescript.id",
|
|
450
|
+
read: () => `<?xml version="1.0" encoding="UTF-8"?>
|
|
483
451
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
484
452
|
<plist version="1.0">
|
|
485
453
|
<dict>
|
|
@@ -496,13 +464,12 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
496
464
|
</array>
|
|
497
465
|
</dict>
|
|
498
466
|
</plist>`,
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
});
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
const plistContent = session.build();
|
|
470
|
+
this.$logger.trace("Info.plist: Write to: " +
|
|
471
|
+
this.getPlatformData(projectData).configurationFilePath);
|
|
472
|
+
this.$fs.writeFile(this.getPlatformData(projectData).configurationFilePath, plistContent);
|
|
506
473
|
}
|
|
507
474
|
getAllProductionPlugins(projectData) {
|
|
508
475
|
return (this.$injector.resolve("pluginsService")).getAllProductionPlugins(projectData, this.getPlatformData(projectData).platformNameLowerCase);
|
|
@@ -536,89 +503,81 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
536
503
|
savePbxProj(project, projectData, omitEmptyValues) {
|
|
537
504
|
return this.$fs.writeFile(this.getPbxProjPath(projectData), project.writeSync({ omitEmptyValues }));
|
|
538
505
|
}
|
|
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
|
-
});
|
|
506
|
+
async preparePluginNativeCode(pluginData, projectData, opts) {
|
|
507
|
+
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
|
|
508
|
+
const sourcePath = path.join(pluginPlatformsFolderPath, "src");
|
|
509
|
+
await this.prepareNativeSourceCode(pluginData.name, sourcePath, projectData);
|
|
510
|
+
await this.prepareResources(pluginPlatformsFolderPath, pluginData, projectData);
|
|
511
|
+
await this.prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
|
|
512
|
+
await this.prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
|
|
513
|
+
}
|
|
514
|
+
async removePluginNativeCode(pluginData, projectData) {
|
|
515
|
+
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
|
|
516
|
+
this.removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData);
|
|
517
|
+
this.removeFrameworks(pluginPlatformsFolderPath, pluginData, projectData);
|
|
518
|
+
this.removeStaticLibs(pluginPlatformsFolderPath, pluginData, projectData);
|
|
519
|
+
const projectRoot = this.getPlatformData(projectData).projectRoot;
|
|
520
|
+
this.$cocoapodsService.removePodfileFromProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, projectRoot);
|
|
558
521
|
}
|
|
559
|
-
handleNativeDependenciesChange(projectData, opts) {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
yield this.$spmService.applySPMPackages(platformData, projectData);
|
|
574
|
-
});
|
|
522
|
+
async handleNativeDependenciesChange(projectData, opts) {
|
|
523
|
+
const platformData = this.getPlatformData(projectData);
|
|
524
|
+
const pluginsData = this.getAllProductionPlugins(projectData);
|
|
525
|
+
this.setProductBundleIdentifier(projectData);
|
|
526
|
+
await this.applyPluginsCocoaPods(pluginsData, projectData, platformData);
|
|
527
|
+
await this.$cocoapodsService.applyPodfileFromAppResources(projectData, platformData);
|
|
528
|
+
await this.$cocoapodsService.applyPodfileArchExclusions(projectData, platformData);
|
|
529
|
+
await this.$cocoapodsService.applyPodfileFromExtensions(projectData, platformData);
|
|
530
|
+
const projectPodfilePath = this.$cocoapodsService.getProjectPodfilePath(platformData.projectRoot);
|
|
531
|
+
if (this.$fs.exists(projectPodfilePath)) {
|
|
532
|
+
await this.$cocoapodsService.executePodInstall(platformData.projectRoot, this.$xcprojService.getXcodeprojPath(projectData, platformData.projectRoot));
|
|
533
|
+
await this.$cocoapodsService.mergePodXcconfigFile(projectData, platformData, opts);
|
|
534
|
+
}
|
|
535
|
+
await this.$spmService.applySPMPackages(platformData, projectData);
|
|
575
536
|
}
|
|
576
537
|
beforePrepareAllPlugins(projectData, dependencies) {
|
|
577
538
|
return Promise.resolve(dependencies);
|
|
578
539
|
}
|
|
579
|
-
checkForChanges(changesInfo, prepareData, projectData) {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
if (
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
break;
|
|
596
|
-
}
|
|
540
|
+
async checkForChanges(changesInfo, prepareData, projectData) {
|
|
541
|
+
const { provision, teamId } = prepareData;
|
|
542
|
+
const hasProvision = provision !== undefined;
|
|
543
|
+
const hasTeamId = teamId !== undefined;
|
|
544
|
+
if (hasProvision || hasTeamId) {
|
|
545
|
+
const pbxprojPath = this.getPbxProjPath(projectData);
|
|
546
|
+
if (this.$fs.exists(pbxprojPath)) {
|
|
547
|
+
const xcode = this.$pbxprojDomXcode.Xcode.open(pbxprojPath);
|
|
548
|
+
const signing = xcode.getSigning(projectData.projectName);
|
|
549
|
+
if (hasProvision) {
|
|
550
|
+
if (signing && signing.style === "Manual") {
|
|
551
|
+
for (const name in signing.configurations) {
|
|
552
|
+
const config = signing.configurations[name];
|
|
553
|
+
if (config.uuid !== provision && config.name !== provision) {
|
|
554
|
+
changesInfo.signingChanged = true;
|
|
555
|
+
break;
|
|
597
556
|
}
|
|
598
557
|
}
|
|
599
|
-
else {
|
|
600
|
-
changesInfo.signingChanged = true;
|
|
601
|
-
}
|
|
602
558
|
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
559
|
+
else {
|
|
560
|
+
changesInfo.signingChanged = true;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
if (hasTeamId) {
|
|
564
|
+
if (signing && signing.style === "Automatic") {
|
|
565
|
+
if (signing.team !== teamId) {
|
|
566
|
+
const teamIdsForName = await this.$iOSProvisionService.getTeamIdsWithName(teamId);
|
|
567
|
+
if (!teamIdsForName.some((id) => id === signing.team)) {
|
|
568
|
+
changesInfo.signingChanged = true;
|
|
610
569
|
}
|
|
611
570
|
}
|
|
612
|
-
else {
|
|
613
|
-
changesInfo.signingChanged = true;
|
|
614
|
-
}
|
|
615
571
|
}
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
572
|
+
else {
|
|
573
|
+
changesInfo.signingChanged = true;
|
|
574
|
+
}
|
|
619
575
|
}
|
|
620
576
|
}
|
|
621
|
-
|
|
577
|
+
else {
|
|
578
|
+
changesInfo.signingChanged = true;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
622
581
|
}
|
|
623
582
|
getDeploymentTarget(projectData) {
|
|
624
583
|
const target = this.$xcconfigService.readPropertyValue(this.getBuildXCConfigFilePath(projectData), "IPHONEOS_DEPLOYMENT_TARGET");
|
|
@@ -665,54 +624,50 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
665
624
|
const newFileName = projectData.projectName + fileNamePart;
|
|
666
625
|
this.$fs.rename(path.join(fileRootLocation, oldFileName), path.join(fileRootLocation, newFileName));
|
|
667
626
|
}
|
|
668
|
-
prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
filesRelativeToProject: true,
|
|
675
|
-
});
|
|
676
|
-
project.addToHeaderSearchPaths(group.path);
|
|
677
|
-
const headerFiles = this.$fs.exists(sourceFolderPath)
|
|
678
|
-
? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
|
|
679
|
-
: [];
|
|
680
|
-
if (headerFiles.length > 0 &&
|
|
681
|
-
!this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
|
|
682
|
-
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`);
|
|
683
|
-
}
|
|
684
|
-
this.savePbxProj(project, projectData);
|
|
627
|
+
async prepareNativeSourceCode(groupName, sourceFolderPath, projectData) {
|
|
628
|
+
const project = this.createPbxProj(projectData);
|
|
629
|
+
const group = this.getRootGroup(groupName, sourceFolderPath);
|
|
630
|
+
project.addPbxGroup(group.files, group.name, group.path, null, {
|
|
631
|
+
isMain: true,
|
|
632
|
+
filesRelativeToProject: true,
|
|
685
633
|
});
|
|
634
|
+
project.addToHeaderSearchPaths(group.path);
|
|
635
|
+
const headerFiles = this.$fs.exists(sourceFolderPath)
|
|
636
|
+
? this.$fs.enumerateFilesInDirectorySync(sourceFolderPath, (file, stat) => stat.isDirectory() || path.extname(file) === ".h")
|
|
637
|
+
: [];
|
|
638
|
+
if (headerFiles.length > 0 &&
|
|
639
|
+
!this.$fs.exists(path.join(sourceFolderPath, "module.modulemap"))) {
|
|
640
|
+
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`);
|
|
641
|
+
}
|
|
642
|
+
this.savePbxProj(project, projectData);
|
|
686
643
|
}
|
|
687
|
-
addExtensions(projectData, pluginsData) {
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
644
|
+
async addExtensions(projectData, pluginsData) {
|
|
645
|
+
const resorcesExtensionsPath = path.join(projectData.getAppResourcesDirectoryPath(), this.getPlatformData(projectData).normalizedPlatformName, constants.NATIVE_EXTENSION_FOLDER);
|
|
646
|
+
const platformData = this.getPlatformData(projectData);
|
|
647
|
+
const pbxProjPath = this.getPbxProjPath(projectData);
|
|
648
|
+
const addedExtensionsFromResources = await this.$iOSExtensionsService.addExtensionsFromPath({
|
|
649
|
+
extensionsFolderPath: resorcesExtensionsPath,
|
|
650
|
+
projectData,
|
|
651
|
+
platformData,
|
|
652
|
+
pbxProjPath,
|
|
653
|
+
});
|
|
654
|
+
let addedExtensionsFromPlugins = false;
|
|
655
|
+
for (const pluginIndex in pluginsData) {
|
|
656
|
+
const pluginData = pluginsData[pluginIndex];
|
|
657
|
+
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
|
|
658
|
+
const extensionPath = path.join(pluginPlatformsFolderPath, constants.NATIVE_EXTENSION_FOLDER);
|
|
659
|
+
const addedExtensionFromPlugin = await this.$iOSExtensionsService.addExtensionsFromPath({
|
|
660
|
+
extensionsFolderPath: extensionPath,
|
|
694
661
|
projectData,
|
|
695
662
|
platformData,
|
|
696
663
|
pbxProjPath,
|
|
697
664
|
});
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
extensionsFolderPath: extensionPath,
|
|
705
|
-
projectData,
|
|
706
|
-
platformData,
|
|
707
|
-
pbxProjPath,
|
|
708
|
-
});
|
|
709
|
-
addedExtensionsFromPlugins =
|
|
710
|
-
addedExtensionsFromPlugins || addedExtensionFromPlugin;
|
|
711
|
-
}
|
|
712
|
-
if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
|
|
713
|
-
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");
|
|
714
|
-
}
|
|
715
|
-
});
|
|
665
|
+
addedExtensionsFromPlugins =
|
|
666
|
+
addedExtensionsFromPlugins || addedExtensionFromPlugin;
|
|
667
|
+
}
|
|
668
|
+
if (addedExtensionsFromResources || addedExtensionsFromPlugins) {
|
|
669
|
+
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");
|
|
670
|
+
}
|
|
716
671
|
}
|
|
717
672
|
getRootGroup(name, rootPath) {
|
|
718
673
|
const filePathsArr = [];
|
|
@@ -732,32 +687,26 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
732
687
|
}
|
|
733
688
|
return rootGroup;
|
|
734
689
|
}
|
|
735
|
-
prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
project.addResourceFile(filePath);
|
|
743
|
-
}
|
|
690
|
+
async prepareResources(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
691
|
+
const project = this.createPbxProj(projectData);
|
|
692
|
+
const resourcesPath = path.join(pluginPlatformsFolderPath, "Resources");
|
|
693
|
+
if (this.$fs.exists(resourcesPath) && !this.$fs.isEmptyDir(resourcesPath)) {
|
|
694
|
+
for (const fileName of this.$fs.readDirectory(resourcesPath)) {
|
|
695
|
+
const filePath = path.join(resourcesPath, fileName);
|
|
696
|
+
project.addResourceFile(filePath);
|
|
744
697
|
}
|
|
745
|
-
|
|
746
|
-
|
|
698
|
+
}
|
|
699
|
+
this.savePbxProj(project, projectData);
|
|
747
700
|
}
|
|
748
|
-
prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
}
|
|
753
|
-
});
|
|
701
|
+
async prepareFrameworks(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
702
|
+
for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, FRAMEWORK_EXTENSIONS)) {
|
|
703
|
+
await this.addFramework(path.join(pluginPlatformsFolderPath, fileName), projectData);
|
|
704
|
+
}
|
|
754
705
|
}
|
|
755
|
-
prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
}
|
|
760
|
-
});
|
|
706
|
+
async prepareStaticLibs(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
707
|
+
for (const fileName of this.getAllLibsForPluginWithFileExtension(pluginData, ".a")) {
|
|
708
|
+
await this.addStaticLibrary(path.join(pluginPlatformsFolderPath, fileName), projectData);
|
|
709
|
+
}
|
|
761
710
|
}
|
|
762
711
|
removeNativeSourceCode(pluginPlatformsFolderPath, pluginData, projectData) {
|
|
763
712
|
const project = this.createPbxProj(projectData);
|
|
@@ -806,46 +755,44 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
806
755
|
const modulemap = `module ${libraryName} { explicit module ${libraryName} { ${headers.join(" ")} } }`;
|
|
807
756
|
this.$fs.writeFile(path.join(headersFolderPath, "module.modulemap"), modulemap);
|
|
808
757
|
}
|
|
809
|
-
mergeProjectXcconfigFiles(projectData) {
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
if (this.$fs.exists(pluginXcconfigFilePath)) {
|
|
821
|
-
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
822
|
-
yield this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
|
|
827
|
-
if (this.$fs.exists(appResourcesXcconfigPath)) {
|
|
758
|
+
async mergeProjectXcconfigFiles(projectData) {
|
|
759
|
+
const platformData = this.getPlatformData(projectData);
|
|
760
|
+
const pluginsXcconfigFilePaths = _.values(this.$xcconfigService.getPluginsXcconfigFilePaths(platformData.projectRoot));
|
|
761
|
+
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
762
|
+
this.$fs.deleteFile(pluginsXcconfigFilePath);
|
|
763
|
+
}
|
|
764
|
+
const allPlugins = this.getAllProductionPlugins(projectData);
|
|
765
|
+
for (const plugin of allPlugins) {
|
|
766
|
+
const pluginPlatformsFolderPath = plugin.pluginPlatformsFolderPath(IOSProjectService.IOS_PLATFORM_NAME);
|
|
767
|
+
const pluginXcconfigFilePath = path.join(pluginPlatformsFolderPath, constants_2.BUILD_XCCONFIG_FILE_NAME);
|
|
768
|
+
if (this.$fs.exists(pluginXcconfigFilePath)) {
|
|
828
769
|
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
829
|
-
|
|
770
|
+
await this.$xcconfigService.mergeFiles(pluginXcconfigFilePath, pluginsXcconfigFilePath);
|
|
830
771
|
}
|
|
831
772
|
}
|
|
773
|
+
}
|
|
774
|
+
const appResourcesXcconfigPath = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
|
|
775
|
+
if (this.$fs.exists(appResourcesXcconfigPath)) {
|
|
832
776
|
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
833
|
-
|
|
834
|
-
this.$fs.writeFile(pluginsXcconfigFilePath, "");
|
|
835
|
-
}
|
|
777
|
+
await this.$xcconfigService.mergeFiles(appResourcesXcconfigPath, pluginsXcconfigFilePath);
|
|
836
778
|
}
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
const tempEntitlementsDir = yield this.$tempService.mkdirSync("entitlements");
|
|
842
|
-
const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
|
|
843
|
-
const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
|
|
844
|
-
this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
|
|
845
|
-
yield this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
|
|
846
|
-
}
|
|
779
|
+
}
|
|
780
|
+
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
781
|
+
if (!this.$fs.exists(pluginsXcconfigFilePath)) {
|
|
782
|
+
this.$fs.writeFile(pluginsXcconfigFilePath, "");
|
|
847
783
|
}
|
|
848
|
-
}
|
|
784
|
+
}
|
|
785
|
+
for (const pluginsXcconfigFilePath of pluginsXcconfigFilePaths) {
|
|
786
|
+
const entitlementsPropertyValue = this.$xcconfigService.readPropertyValue(pluginsXcconfigFilePath, constants.CODE_SIGN_ENTITLEMENTS);
|
|
787
|
+
if (entitlementsPropertyValue === null &&
|
|
788
|
+
this.$fs.exists(this.$iOSEntitlementsService.getPlatformsEntitlementsPath(projectData))) {
|
|
789
|
+
const tempEntitlementsDir = await this.$tempService.mkdirSync("entitlements");
|
|
790
|
+
const tempEntitlementsFilePath = path.join(tempEntitlementsDir, "set-entitlements.xcconfig");
|
|
791
|
+
const entitlementsRelativePath = this.$iOSEntitlementsService.getPlatformsEntitlementsRelativePath(projectData);
|
|
792
|
+
this.$fs.writeFile(tempEntitlementsFilePath, `CODE_SIGN_ENTITLEMENTS = ${entitlementsRelativePath}${os_1.EOL}`);
|
|
793
|
+
await this.$xcconfigService.mergeFiles(tempEntitlementsFilePath, pluginsXcconfigFilePath);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
849
796
|
}
|
|
850
797
|
getBuildXCConfigFilePath(projectData) {
|
|
851
798
|
const buildXCConfig = path.join(projectData.appResourcesDirectoryPath, this.getPlatformData(projectData).normalizedPlatformName, constants_2.BUILD_XCCONFIG_FILE_NAME);
|
|
@@ -864,21 +811,19 @@ class IOSProjectService extends projectServiceBaseLib.PlatformProjectServiceBase
|
|
|
864
811
|
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}".`);
|
|
865
812
|
}
|
|
866
813
|
}
|
|
867
|
-
applyPluginsCocoaPods(pluginsData, projectData, platformData) {
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
yield this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
|
|
873
|
-
}
|
|
814
|
+
async applyPluginsCocoaPods(pluginsData, projectData, platformData) {
|
|
815
|
+
for (const pluginIndex in pluginsData) {
|
|
816
|
+
const pluginData = pluginsData[pluginIndex];
|
|
817
|
+
if (this.$fs.exists(pluginData.pluginPlatformsFolderPath(platformData.normalizedPlatformName))) {
|
|
818
|
+
await this.$cocoapodsService.applyPodfileToProject(pluginData.name, this.$cocoapodsService.getPluginPodfilePath(pluginData), projectData, platformData);
|
|
874
819
|
}
|
|
875
|
-
}
|
|
820
|
+
}
|
|
876
821
|
}
|
|
877
822
|
}
|
|
823
|
+
exports.IOSProjectService = IOSProjectService;
|
|
878
824
|
IOSProjectService.IOS_PROJECT_NAME_PLACEHOLDER = "__PROJECT_NAME__";
|
|
879
825
|
IOSProjectService.IOS_PLATFORM_NAME = "ios";
|
|
880
826
|
__decorate([
|
|
881
827
|
(0, helpers_2.hook)("buildIOS")
|
|
882
828
|
], IOSProjectService.prototype, "buildProject", null);
|
|
883
|
-
exports.IOSProjectService = IOSProjectService;
|
|
884
829
|
yok_1.injector.register("iOSProjectService", IOSProjectService);
|