Repository: cordova-lib Updated Branches: refs/heads/master 623233d09 -> b76a266bb
[CB-6472] Adding content to -Info.plist - Unexpected behaviour Merge instead of replace when the destination and source nodes are both of type dictionary. Adds underscore.js as a dependency. GitHub: close #115 Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/b76a266b Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/b76a266b Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/b76a266b Branch: refs/heads/master Commit: b76a266bbf9eeb91d32c1037838a04817d871412 Parents: 623233d Author: Gorkem Ercan <[email protected]> Authored: Mon Oct 27 13:35:09 2014 -0400 Committer: Mark Koudritsky <[email protected]> Committed: Fri Nov 21 21:44:31 2014 -0500 ---------------------------------------------------------------------- .../spec-plugman/plugins/PlistPlugin/plugin.xml | 47 ++++++++++++++++++++ .../spec-plugman/util/config-changes.spec.js | 10 +++++ cordova-lib/src/plugman/util/plist-helpers.js | 17 ++++--- 3 files changed, 68 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/b76a266b/cordova-lib/spec-plugman/plugins/PlistPlugin/plugin.xml ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-plugman/plugins/PlistPlugin/plugin.xml b/cordova-lib/spec-plugman/plugins/PlistPlugin/plugin.xml new file mode 100644 index 0000000..064f72e --- /dev/null +++ b/cordova-lib/spec-plugman/plugins/PlistPlugin/plugin.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Copyright 2013 Anis Kadri + + Licensed 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. + +--> + +<plugin xmlns="http://cordova.apache.org/ns/plugins/1.0" + xmlns:android="http://schemas.android.com/apk/res/android" + id="org.apache.plist" + version="3.0.0"> + + <name>PList updates</name> + + <!-- ios --> + <platform name="ios"> + <config-file target="*-Info.plist" parent="CFBundleIcons"> + <dict> + <key>UINewsstandIcon</key> + <dict> + <key>CFBundleIconFiles</key> + <array> + <string>Newsstand-Cover-Icon.png</string> + <string>[email protected]</string> + </array> + <key>UINewsstandBindingType</key> + <string>UINewsstandBindingTypeMagazine</string> + <key>UINewsstandBindingEdge</key> + <string>UINewsstandBindingEdgeLeft</string> + </dict> + </dict> + </config-file> + </platform> +</plugin> http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/b76a266b/cordova-lib/spec-plugman/util/config-changes.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-plugman/util/config-changes.spec.js b/cordova-lib/spec-plugman/util/config-changes.spec.js index d745c18..8409c3c 100644 --- a/cordova-lib/spec-plugman/util/config-changes.spec.js +++ b/cordova-lib/spec-plugman/util/config-changes.spec.js @@ -38,6 +38,7 @@ var configChanges = require('../../src/plugman/util/config-changes'), shareddepsplugin = path.join(__dirname, '..', 'plugins', 'shared-deps-multi-child'), configplugin = path.join(__dirname, '..', 'plugins', 'ConfigTestPlugin'), varplugin = path.join(__dirname, '..', 'plugins', 'VariablePlugin'), + plistplugin = path.join(__dirname, '..', 'plugins', 'PlistPlugin'), android_two_project = path.join(__dirname, '..', 'projects', 'android_two', '*'), android_two_no_perms_project = path.join(__dirname, '..', 'projects', 'android_two_no_perms', '*'), ios_plist_project = path.join(__dirname, '..', 'projects', 'ios-plist', '*'), @@ -323,6 +324,15 @@ describe('config-changes module', function() { expect(fs.readFileSync(path.join(temp, 'SampleApp', 'SampleApp-Info.plist'), 'utf-8')).toMatch(/<key>APluginNode<\/key>\n <string><\/string>/m); }); }); + describe('plist merge dictionaries', function() { + it('should write empty string nodes with no whitespace', function() { + shell.cp('-rf', ios_config_xml, temp); + shell.cp('-rf', plistplugin, plugins_dir); + configChanges.add_installed_plugin_to_prepare_queue(plugins_dir, 'PlistPlugin', 'ios', {}); + configChanges.process(plugins_dir, temp, 'ios'); + expect(fs.readFileSync(path.join(temp, 'SampleApp', 'SampleApp-Info.plist'), 'utf-8')).toMatch(/<key>UINewsstandIcon<\/key>[\s\S]*<key>CFBundlePrimaryIcon<\/key>/); + }); + }); describe('of pbxproject framework files', function() { var xcode_add, xcode_rm; beforeEach(function() { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/b76a266b/cordova-lib/src/plugman/util/plist-helpers.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/plugman/util/plist-helpers.js b/cordova-lib/src/plugman/util/plist-helpers.js index 37492db..fcd173c 100644 --- a/cordova-lib/src/plugman/util/plist-helpers.js +++ b/cordova-lib/src/plugman/util/plist-helpers.js @@ -22,7 +22,7 @@ */ // contains PLIST utility functions - +var __ = require('underscore'); var plist = require('plist'); // adds node to doc at selector @@ -33,16 +33,21 @@ function graftPLIST(doc, xml, selector) { var node = doc[selector]; if (node && Array.isArray(node) && Array.isArray(obj)){ node.concat(obj); - for(var i =0;i<node.length; i++){ - for(var j=i+1; j<node.length; ++j) { - if(node[i] === node[j]) + for (var i =0;i<node.length; i++){ + for (var j=i+1; j<node.length; ++j) { + if (node[i] === node[j]) node.splice(j--,1); } } doc[selector] = node; - } - else + } else { + //plist uses objects for <dict>. If we have two dicts we merge them instead of + // overriding the old one. See CB-6472 + if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)){//arrays checked above + __.extend(obj,node); + } doc[selector] = obj; + } return true; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
