This is an automated email from the ASF dual-hosted git repository.
erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git
The following commit(s) were added to refs/heads/master by this push:
new c97845ac feat: add privacy-manifest config support (#1406)
c97845ac is described below
commit c97845acb7e4fe659c0f71103bef44700da37d5c
Author: knaito-asial <81949829+knaito-as...@users.noreply.github.com>
AuthorDate: Wed Mar 13 15:03:13 2024 +0900
feat: add privacy-manifest config support (#1406)
* feat: privacy manifest settings in config.xml
* refac: remove unused code and tidy up
* refac: update class name PlatformConfigParser
* feat: add elementtree in package.json
* dev: change privacy manifest tag name to privacy-manifest from
privacy-manifest-ios
* test: add test codes
* refactor: Modified to match Linter.
* refac: improve PlatformConfigParser
* refac: remove unnecessary blank line
-
Co-authored-by: エリス
---
lib/PlatformConfigParser.js| 32 +
lib/prepare.js | 40 ++--
package-lock.json | 1 +
package.json | 3 +-
.../unit/fixtures/prepare/no-privacy-manifest.xml | 23 +
.../unit/fixtures/prepare/privacy-manifest.xml | 56 ++
tests/spec/unit/prepare.spec.js| 38 +++
7 files changed, 189 insertions(+), 4 deletions(-)
diff --git a/lib/PlatformConfigParser.js b/lib/PlatformConfigParser.js
new file mode 100644
index ..675287c6
--- /dev/null
+++ b/lib/PlatformConfigParser.js
@@ -0,0 +1,32 @@
+/**
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+const ConfigParser = require('cordova-common').ConfigParser;
+
+class PlatformConfigParser extends ConfigParser {
+/**
+ * Returns the privacy manifest node, if available.
+ * Otherwise `null` is returned.
+ */
+getPrivacyManifest () {
+return this.doc.find('./platform[@name="ios"]/privacy-manifest');
+}
+}
+
+module.exports = PlatformConfigParser;
diff --git a/lib/prepare.js b/lib/prepare.js
index 38239e4c..cfaab02c 100644
--- a/lib/prepare.js
+++ b/lib/prepare.js
@@ -17,12 +17,11 @@
under the License.
*/
-'use strict';
-
const fs = require('fs-extra');
const path = require('path');
const unorm = require('unorm');
const plist = require('plist');
+const et = require('elementtree');
const URL = require('url');
const events = require('cordova-common').events;
const xmlHelpers = require('cordova-common').xmlHelpers;
@@ -35,6 +34,7 @@ const FileUpdater = require('cordova-common').FileUpdater;
const projectFile = require('./projectFile');
const Podfile = require('./Podfile').Podfile;
const check_reqs = require('./check_reqs');
+const PlatformConfigParser = require('./PlatformConfigParser');
// launch storyboard and related constants
const IMAGESET_COMPACT_SIZE_CLASS = 'compact';
@@ -43,9 +43,16 @@ const CDV_ANY_SIZE_CLASS = 'any';
module.exports.prepare = function (cordovaProject, options) {
const platformJson = PlatformJson.load(this.locations.root, 'ios');
const munger = new PlatformMunger('ios', this.locations.root,
platformJson, new PluginInfoProvider());
-
this._config = updateConfigFile(cordovaProject.projectConfig, munger,
this.locations);
+const parser = new PlatformConfigParser(cordovaProject.projectConfig.path);
+try {
+const manifest = parser.getPrivacyManifest();
+overwritePrivacyManifest(manifest, this.locations);
+} catch (err) {
+return Promise.reject(new CordovaError(`Could not parse
PrivacyManifest in config.xml: ${err}`));
+}
+
// Update own www dir with project's www assets and plugins' assets and
js-files
return updateWww(cordovaProject, this.locations)
// update project according to config.xml changes.
@@ -87,6 +94,33 @@ module.exports.clean = function (options) {
});
};
+/**
+ * Overwrites the privacy manifest file with the provided manifest or sets the
default manifest.
+ * @param