Skip to content

Instantly share code, notes, and snippets.

@jmatthiesen
Forked from Delagen/cordova-ios-disable-push.js
Last active August 21, 2017 08:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmatthiesen/34eb71a73de39fd501df to your computer and use it in GitHub Desktop.
Save jmatthiesen/34eb71a73de39fd501df to your computer and use it in GitHub Desktop.
A hook to automate setting the DISABLE_PUSH_NOTIFICATIONS preprocessor definition when building on iOS. This helps prevent warnings from App Store submission about using push notifications, if you don't intend to use them.
"use strict";
/*use in config.xml <hook type="after_platform_add" src="../path/to/cordova-ios-disable-push.js"/>*/
var fs = require("fs");
var path = require("path");
var COMMENT_KEY = /_comment$/;
function nonComments(obj) {
var newObj = {};
Object.keys(obj).forEach(function(key) {
if (!COMMENT_KEY.test(key)) {
newObj[key] = obj[key];
}
});
return newObj;
}
module.exports = function(ctx) {
var GCC_PREPROCESSOR_DEFINITIONS = '"$(inherited) DISABLE_PUSH_NOTIFICATIONS=1"';
var q = ctx.requireCordovaModule("q");
var deferred = q.defer();
var cordovaConfigPath = path.join(ctx.opts.projectRoot, "config.xml");
fs.readFile(cordovaConfigPath, {encoding: "utf-8"}, function(errConfigRead, configContent) {
if (errConfigRead) {
return deferred.reject(errConfigRead);
}
var projectName = /<name[^>]*>([\s\S]*)<\/name>/mi.exec(configContent)[1].trim();
var xcodeProjectName = [projectName, ".xcodeproj"].join("");
var xcodeProjectPath = path.join(ctx.opts.projectRoot, "platforms", "ios", xcodeProjectName, "project.pbxproj");
var xcode = ctx.requireCordovaModule("xcode");
var xcodeProject = xcode.project(xcodeProjectPath);
xcodeProject.parse(function(parseError) {
if (parseError) {
return deferred.reject(parseError);
}
var configurations = nonComments(xcodeProject.pbxXCBuildConfigurationSection());
Object.keys(configurations).forEach(function(config) {
var buildSettings = configurations[config].buildSettings;
buildSettings.GCC_PREPROCESSOR_DEFINITIONS = GCC_PREPROCESSOR_DEFINITIONS;
});
fs.writeFile(xcodeProjectPath, /*eslint-disable no-sync*/xcodeProject.writeSync()/*eslint-enable*/, {encoding: "utf-8"}, function(projectWriteError) {
if (projectWriteError) {
return deferred.reject(projectWriteError);
}
deferred.resolve();
});
});
});
return deferred.promise;
};
@Ssnk
Copy link

Ssnk commented Aug 21, 2017

Thank you 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment