diff --git a/NowWidget/MainInterface.storyboard b/NowWidget/MainInterface.storyboard new file mode 100644 index 0000000..ac4718a --- /dev/null +++ b/NowWidget/MainInterface.storyboard @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NowWidget/NowButton.swift b/NowWidget/NowButton.swift new file mode 100644 index 0000000..759c861 --- /dev/null +++ b/NowWidget/NowButton.swift @@ -0,0 +1,147 @@ +// +// NowButton.swift +// NowWidget +// +// Created by Triggi on 24-01-17. +// +// + +import UIKit + +public func drawButton(_ view: UIView, _ position: Int, _ color: UIColor, _ title: String!) -> UIButton! { + let buttonsPerRow = 6.0 + let spacing = 8.0 + + let viewWidth = Double(view.frame.width) + let marginLeft = Double(view.layoutMargins.left) + let marginRight = Double(view.layoutMargins.right) + let marginTop = 15.0 + + let totalSpacing = spacing * (buttonsPerRow - 1) + let containerWidth = viewWidth - marginLeft - marginRight + + let row = floor(Double(position) / buttonsPerRow) + let positionOnRow = Double(position) - (row * buttonsPerRow) + let width = (containerWidth - totalSpacing) / buttonsPerRow + let height = width + let x = marginLeft + (Double(positionOnRow) * width) + (Double(positionOnRow) * spacing) + let y = marginTop + (110 * row) + + let button = UIButton(frame: CGRect(x: x, y: y, width: width, height: height)) + + button.backgroundColor = color + + button.layer.cornerRadius = CGFloat(width / 2) + // button.layer.borderWidth = 1.5 + // button.layer.borderColor = UIColor.whiteColor().CGColor + // button.layer.shadowColor = UIColor.blackColor().CGColor + // button.layer.shadowOffset = CGSizeMake(0, 1) + // button.layer.shadowRadius = 1 + // button.layer.shadowOpacity = 0.5 + // button.layer.shadowPath = UIBezierPath(roundedRect: button.bounds, cornerRadius: CGFloat(width / 2)).CGPath + + button.setImage(UIImage(named: "notification_icon.png")?.maskWithColor(hexStringToUIColor(hex: "#ffffff")), for: UIControl.State()) + button.setTitle(title, for: UIControl.State()) + button.adjustsImageWhenHighlighted = false; + + let iconMargin: CGFloat = 5.0 + let titleSpacing: CGFloat = 5.0 + + var titleEdgeInsets = UIEdgeInsets.init(); + + if #available(iOS 13.0, *) { + let imageSize = button.imageView!.image!.size + let frameSize = button.imageView!.frame + titleEdgeInsets = UIEdgeInsets.init(top: 0.0, left: -(frameSize.width - 2*titleSpacing), bottom: -(imageSize.height - titleSpacing), right: 0.0) + } else { + let imageSize = button.imageView!.image!.size + titleEdgeInsets = UIEdgeInsets.init(top: 0.0, left: -imageSize.width, bottom: -(imageSize.height - titleSpacing), right: 0.0) + } + let imageEdgeInsets = UIEdgeInsets.init(top: iconMargin, left: iconMargin, bottom: iconMargin, right: iconMargin); + + button.imageEdgeInsets = imageEdgeInsets + button.titleEdgeInsets = titleEdgeInsets + + button.titleLabel?.font = UIFont.systemFont(ofSize: 11.0) + button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail + button.titleLabel?.numberOfLines = 2 + button.titleLabel?.textAlignment = NSTextAlignment.center + button.setTitleColor(primaryColor(), for: UIControl.State()) + + button.tag = position; + + return button +} + +extension UIColor { + func darkerColor(_ amount: CGFloat) -> UIColor { + let rgba = UnsafeMutablePointer.allocate(capacity: 4) + + self.getRed(&rgba[0], green: &rgba[1], blue: &rgba[2], alpha: &rgba[3]) + let darkerColor = UIColor(red: amount*rgba[0], green: amount*rgba[1], blue: amount*rgba[2], alpha: rgba[3]) + + rgba.deinitialize(count:4) + rgba.deallocate() + return darkerColor + } +} + +func hexStringToUIColor (hex:String) -> UIColor { + var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() + + if (cString.hasPrefix("#")) { + cString.remove(at: cString.startIndex) + } + + if ((cString.count) != 6) { + return UIColor.gray + } + + var rgbValue:UInt32 = 0 + Scanner(string: cString).scanHexInt32(&rgbValue) + + return UIColor( + red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, + green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, + blue: CGFloat(rgbValue & 0x0000FF) / 255.0, + alpha: CGFloat(1.0) + ) +} + +func primaryColor() -> UIColor { + if #available(iOS 13.0, *) { + return UIColor.label + } else if #available(iOS 10.0, *){ + return UIColor.darkText + } else { + return UIColor.lightText + } +} + +extension UIImage { + func maskWithColor(_ color: UIColor) -> UIImage? { + + let maskImage = self.cgImage + let width = self.size.width + let height = self.size.height + let bounds = CGRect(x: 0, y: 0, width: width, height: height) + + let colorSpace = CGColorSpaceCreateDeviceRGB() + let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) + let bitmapContext = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) //needs rawValue of bitmapInfo + + bitmapContext!.clip(to: bounds, mask: maskImage!) + bitmapContext!.setFillColor(color.cgColor) + bitmapContext!.fill(bounds) + + //is it nil? + if let cImage = bitmapContext!.makeImage() { + let coloredImage = UIImage(cgImage: cImage) + + return coloredImage + + } else { + return nil + } + } +} diff --git a/NowWidget/NowWidget-Info.plist b/NowWidget/NowWidget-Info.plist new file mode 100644 index 0000000..323449e --- /dev/null +++ b/NowWidget/NowWidget-Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + en_US + CFBundleDisplayName + __DISPLAY_NAME__ + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + __APP_IDENTIFIER__.__BUNDLE_SUFFIX__ + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + __BUNDLE_SHORT_VERSION_STRING__ + CFBundleVersion + __BUNDLE_VERSION__ + NSExtension + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.widget-extension + + + diff --git a/NowWidget/NowWidget.entitlements b/NowWidget/NowWidget.entitlements new file mode 100644 index 0000000..8539e7d --- /dev/null +++ b/NowWidget/NowWidget.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.__APP_IDENTIFIER__ + + + diff --git a/NowWidget/NowWidget.xcconfig b/NowWidget/NowWidget.xcconfig new file mode 100644 index 0000000..066d5f7 --- /dev/null +++ b/NowWidget/NowWidget.xcconfig @@ -0,0 +1,5 @@ +#include "../cordova/build-extras.xcconfig" + +IPHONEOS_DEPLOYMENT_TARGET = 9.0 +TARGETED_DEVICE_FAMILY = 1,2 +PRODUCT_BUNDLE_IDENTIFIER = __APP_IDENTIFIER__.__BUNDLE_SUFFIX__ diff --git a/NowWidget/README.md b/NowWidget/README.md new file mode 100644 index 0000000..5d2c33d --- /dev/null +++ b/NowWidget/README.md @@ -0,0 +1,3 @@ +# native-ios-widget-triggi-now +Beware, this are the XCode 8+ files of the iOS widget for olisto Now. +In order to deploy this it needs to be ported to [cordova-plugin-native-data](https://gitlab.com/triggi/cordova-plugin-native-data). diff --git a/NowWidget/TodayViewController.swift b/NowWidget/TodayViewController.swift new file mode 100644 index 0000000..ed14073 --- /dev/null +++ b/NowWidget/TodayViewController.swift @@ -0,0 +1,172 @@ +// +// TodayViewController.swift +// NowWidget +// +// Created by Triggi on 23-01-17. +// +// + +import UIKit +import NotificationCenter + +class TodayViewController: UIViewController, NCWidgetProviding { + + fileprivate var sharedData: SharedData? + fileprivate var drawnButtons: Array = [] + + @IBOutlet weak var spinner: UIActivityIndicatorView! + @IBOutlet weak var appButton: UIButton! + @IBAction func openApp(_ sender: AnyObject) { + print("Should open Olisto...") + extensionContext?.open(URL(string: "triggi://buttons")!, completionHandler: nil) + } + + func loadData() -> Void { + spinner.startAnimating(); + sharedData = loadSharedData() + if sharedData == nil || !sharedData!.isDefined() { + print("Missing data") + setButtonTitle("Not logged in. Open Olisto to continue.") + return + } + + if !sharedData!.hasButtons() { + print("No buttons configured") + setButtonTitle("No buttons configured. Open Olisto to continue.") + return + } + + NSLog("Data initialized. \nServer baseURL: \n\(sharedData!.baseUrl!), \ntoken: \n\(sharedData!.token!),\nuuid: \n\(sharedData!.phoneId!)"); + } + + func setButtonTitle(_ message: String) { + spinner.stopAnimating() + appButton.setTitle(message, for: UIControl.State()) + } + + @objc func buttonAction(_ sender: UIButton!) { + print("Button \(sender.tag) was pressed") + let url = "\(sharedData!.baseUrl!)/channel/triggi-buttons/push/\(sharedData!.buttons[sender.tag].id)" + postCall(url, token: sharedData!.token!, completionHandler: {(statusCode: Int?) -> () in + print("Call executed with status code: \(statusCode!)") + }) + buttonActivated(sender) + } + + func drawOverlay(_ sender: UIButton!) -> CAShapeLayer { + let circlePath = UIBezierPath(arcCenter: sender.imageView!.center, radius: sender.frame.size.width/2, startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true) + let shapeLayer = CAShapeLayer() + shapeLayer.path = circlePath.cgPath + shapeLayer.fillColor = hexStringToUIColor(hex: sharedData!.buttons[sender.tag].color).darkerColor(0.3).cgColor + shapeLayer.opacity = 0.7 + return shapeLayer + } + + func buttonActivated(_ sender: UIButton!) { + let overlay = drawOverlay(sender) + UIView.transition(with: self.view, duration: 0.5, options: .transitionCrossDissolve, animations: { + sender.layer.addSublayer(overlay) + }, completion: { + (value: Bool) in + UIView.transition(with: self.view, duration: 1.0, options: .transitionCrossDissolve, animations: { + overlay.removeFromSuperlayer() + }, completion: nil) + }) + } + + @objc func touchUp(_ sender: UIButton!) { + sender.backgroundColor = hexStringToUIColor(hex: sharedData!.buttons[sender.tag].color) + sender.setImage(UIImage(named: "notification_icon.png")?.maskWithColor(hexStringToUIColor(hex: "#ffffff")), for: UIControl.State()) + } + + @objc func touchDown(_ sender: UIButton!) { + sender.backgroundColor = hexStringToUIColor(hex: sharedData!.buttons[sender.tag].color).darkerColor(0.7) + sender.setImage(UIImage(named: "notification_icon.png")?.maskWithColor(hexStringToUIColor(hex: "#ffffff").darkerColor(0.7)), for: UIControl.State()) + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func drawButtons() { + print(sharedData!.buttons) + + if !sharedData!.hasButtons() { + appButton.isHidden = false + return + } + appButton.isHidden = true + spinner.stopAnimating() + + for button in drawnButtons { + button.removeFromSuperview() + } + drawnButtons = [] + + for (index, element) in sharedData!.buttons.enumerated() { + if (index > 17) { + return + } + print("Item \(index): \(element)") + if let button = drawButton(view, index, hexStringToUIColor(hex: element.color), element.name) { + button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) + button.addTarget(self, action: #selector(touchUp), for: .touchUpInside) + button.addTarget(self, action: #selector(touchUp), for: .touchDragExit) + button.addTarget(self, action: #selector(touchUp), for: .touchUpOutside) + button.addTarget(self, action: #selector(touchUp), for: .touchCancel) + button.addTarget(self, action: #selector(touchDown), for: .touchDown) + drawnButtons.append(button) + view.addSubview(button) + } + } + } + + @available(iOSApplicationExtension 10.0, *) + func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { + + loadData() + + if (sharedData == nil || !sharedData!.isDefined() || activeDisplayMode == NCWidgetDisplayMode.compact) { + self.preferredContentSize = CGSize(width: 0.0, height: 110.0) + } else if (sharedData!.buttons.count <= 12) { + self.preferredContentSize = CGSize(width: 0.0, height: 220.0) + } else { + self.preferredContentSize = CGSize(width: 0.0, height: 330.0) + } + drawButtons() + } + + @available(iOSApplicationExtension 10.0, *) + func setWidgetSize() { + if (sharedData!.buttons.count <= 6) { + self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.compact + } else { + self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded + } + } + + override func viewDidLoad() { + super.viewDidLoad() + + loadData() + if (sharedData != nil && sharedData!.isDefined()) { + if #available(iOSApplicationExtension 10.0, *) { + setWidgetSize() + } + drawButtons() + } + } + + func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) { + // Perform any setup necessary in order to update the view. + loadData() + if (sharedData != nil && sharedData!.isDefined()) { + if #available(iOSApplicationExtension 10.0, *) { + setWidgetSize() + } + drawButtons() + } + completionHandler(NCUpdateResult.newData) + } +} diff --git a/NowWidget/notification_icon.png b/NowWidget/notification_icon.png new file mode 100644 index 0000000..fd7f891 Binary files /dev/null and b/NowWidget/notification_icon.png differ diff --git a/hooks/addTodayWidgetToProject.js b/hooks/addTodayWidgetToProject.js index 486482c..9b1f447 100755 --- a/hooks/addTodayWidgetToProject.js +++ b/hooks/addTodayWidgetToProject.js @@ -3,6 +3,9 @@ var fs = require('fs'); var path = require('path'); var plist = require('plist'); +var xcode = require('xcode'); +var Q = require('q'); +var elementTree = require('elementtree'); function log(logString, type) { var prefix; @@ -16,7 +19,7 @@ function log(logString, type) { '\x1b[40m' + '\x1b[37m' + '\x1b[2m' + - '☝️ [INFO] ' + + '☝️ Widget [INFO] ' + '\x1b[0m\x1b[40m' + '\x1b[33m'; // fgWhite, dim, reset, bgBlack, fgYellow break; @@ -69,8 +72,6 @@ log( ); module.exports = function (context) { - var xcode = context.requireCordovaModule('xcode'); - var Q = context.requireCordovaModule('q'); var deferral = new Q.defer(); if (context.opts.cordova.platforms.indexOf('ios') < 0) { @@ -85,14 +86,15 @@ module.exports = function (context) { // Get the plugin variables from the parameters or the config file var WIDGET_NAME = getCordovaParameter("WIDGET_NAME", contents); var WIDGET_BUNDLE_SUFFIX = getCordovaParameter("WIDGET_BUNDLE_SUFFIX", contents); - var ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = getCordovaParameter("ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", contents); + var ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = getCordovaParameter("WIDGET_ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", contents); + var DEBUG_PROVISIONING_PROFILE = getCordovaParameter("WIDGET_DEBUG_PROVISIONING_PROFILE", contents); + var RELEASE_PROVISIONING_PROFILE = getCordovaParameter("WIDGET_RELEASE_PROVISIONING_PROFILE", contents); if (contents) { contents = contents.substring(contents.indexOf('<')); } // Get the bundle-id from config.xml - var elementTree = context.requireCordovaModule('elementtree'); var etree = elementTree.parse(contents); var bundleId = etree.getroot().get('id'); log('Bundle id of your host app: ' + bundleId, 'info'); @@ -146,11 +148,11 @@ module.exports = function (context) { var placeHolderValues = [ { placeHolder: '__DISPLAY_NAME__', - value: projectPlistJson['CFBundleDisplayName'] + value: projectName }, { placeHolder: '__APP_IDENTIFIER__', - value: projectPlistJson['CFBundleIdentifier'] + value: bundleId }, { placeHolder: '__BUNDLE_SUFFIX__', @@ -166,12 +168,12 @@ module.exports = function (context) { } ]; - fs.readdirSync(widgetFolder).forEach(file => { + function handleFile(file) { if (!/^\..*/.test(file)) { // Ignore junk files like .DS_Store var fileExtension = path.extname(file); switch (fileExtension) { - // Swift and Objective-C source files which need to be compiled + // Swift and Objective-C source files which need to be compiled case '.swift': projectContainsSwiftFiles = true; sourceFiles.push(file); @@ -184,31 +186,31 @@ module.exports = function (context) { } sourceFiles.push(file); break; - // Configuration files + // Configuration files case '.plist': case '.entitlements': case '.xcconfig': - if (fileExtension === '.plist') { - replacePlaceholdersInPlist(path.join(widgetFolder, file), placeHolderValues); - } + replacePlaceholdersInPlist(path.join(widgetFolder, file), placeHolderValues); if (fileExtension === '.xcconfig') { addXcconfig = true; xcconfigFileName = file; } if (fileExtension === '.entitlements') { - replacePlaceholdersInPlist(path.join(widgetFolder, file), placeHolderValues); addEntitlementsFile = true; entitlementsFileName = file; } configFiles.push(file); break; - // Resources like storyboards, images, fonts, etc. + // Resources like storyboards, images, fonts, etc. default: resourceFiles.push(file); break; } } - }); + } + + fs.readdirSync(widgetFolder).forEach(handleFile); + log('Found following files in your widget folder:', 'info'); console.log('Source-files: '); @@ -355,7 +357,7 @@ module.exports = function (context) { var buildSettingsObj = configurations[key].buildSettings; if (typeof buildSettingsObj['PRODUCT_NAME'] !== 'undefined') { var productName = buildSettingsObj['PRODUCT_NAME']; - if (productName.indexOf('Widget') >= 0) { + if (productName.indexOf(widgetName) >= 0) { if (addXcconfig) { configurations[key].baseConfigurationReference = xcconfigReference + ' /* ' + xcconfigFileName + ' */'; @@ -366,7 +368,7 @@ module.exports = function (context) { log('Added entitlements file reference to build settings!', 'info'); } if (projectContainsSwiftFiles) { - buildSettingsObj['SWIFT_VERSION'] = '3.0'; + buildSettingsObj['SWIFT_VERSION'] = '4.2'; buildSettingsObj['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES || 'YES'; log('Added build settings for swift support!', 'info'); } @@ -379,6 +381,18 @@ module.exports = function (context) { '"'; log('Added bridging header reference to build settings!', 'info'); } + if (DEBUG_PROVISIONING_PROFILE && configurations[key].name === 'Debug') { + buildSettingsObj['PROVISIONING_PROFILE'] = DEBUG_PROVISIONING_PROFILE; + buildSettingsObj['CODE_SIGN_STYLE'] = 'Manual'; + buildSettingsObj['CODE_SIGN_IDENTITY'] = '"iPhone Distribution"'; + log('Added signing identity to debug build settings!', 'info'); + } + if (RELEASE_PROVISIONING_PROFILE && configurations[key].name === 'Release') { + buildSettingsObj['PROVISIONING_PROFILE'] = RELEASE_PROVISIONING_PROFILE; + buildSettingsObj['CODE_SIGN_STYLE'] = 'Manual'; + buildSettingsObj['CODE_SIGN_IDENTITY'] = '"iPhone Distribution"'; + log('Added signing identity to release build settings!', 'info'); + } } } } diff --git a/hooks/copyExtensionFolderToIosProjectFolder.js b/hooks/copyExtensionFolderToIosProjectFolder.js index ee05b70..0636efb 100644 --- a/hooks/copyExtensionFolderToIosProjectFolder.js +++ b/hooks/copyExtensionFolderToIosProjectFolder.js @@ -2,6 +2,7 @@ var fs = require('fs'); var path = require('path'); +var Q = require('q'); function log(logString, type) { var prefix; @@ -15,7 +16,7 @@ function log(logString, type) { '\x1b[40m' + '\x1b[37m' + '\x1b[2m' + - '☝️ [INFO] ' + + '☝️ Widget [INFO] ' + '\x1b[0m\x1b[40m' + '\x1b[33m'; // fgWhite, dim, reset, bgBlack, fgYellow break; @@ -47,7 +48,7 @@ log( ); // http://stackoverflow.com/a/26038979/5930772 -var copyFileSync = function(source, target) { +var copyFileSync = function(source, target, prefix) { var targetFile = target; // If target is a directory a new file with the same name will be created @@ -57,7 +58,9 @@ var copyFileSync = function(source, target) { } } - fs.writeFileSync(targetFile, fs.readFileSync(source)); + var dest = prefix ? path.join(path.dirname(targetFile), prefix + '-' + path.basename(targetFile)) : targetFile; + fs.writeFileSync(dest, fs.readFileSync(source)); + }; var copyFolderRecursiveSync = function(source, target) { var files = []; @@ -94,7 +97,6 @@ function getCordovaParameter(variableName, contents) { } module.exports = function(context) { - var Q = context.requireCordovaModule('q'); var deferral = new Q.defer(); var contents = fs.readFileSync( @@ -126,7 +128,10 @@ module.exports = function(context) { // Get the widget name and location from the parameters or the config file var WIDGET_NAME = getCordovaParameter("WIDGET_NAME", contents); var WIDGET_PATH = getCordovaParameter("WIDGET_PATH", contents); + var DEPENDENCIES = getCordovaParameter("WIDGET_DEPENDENCIES", contents); + var widgetName = WIDGET_NAME || projectName + ' Widget'; + var dependencies = DEPENDENCIES ? DEPENDENCIES.split(',') : []; if (WIDGET_PATH) { srcFolder = path.join( @@ -151,9 +156,27 @@ module.exports = function(context) { // Copy widget folder copyFolderRecursiveSync( srcFolder, - path.join(context.opts.projectRoot, 'platforms', 'ios') + iosFolder ); - log('Successfully copied Widget folder!', 'success'); + + log('Successfully copied widget folder!', 'success'); + + + if(DEPENDENCIES) { + dependencies.forEach(file => { + var srcFile = path.join( + iosFolder, + projectName, + file.trim() + ); + + var destFolder = path.join(iosFolder, widgetName); + + copyFileSync(srcFile, destFolder, widgetName); + }); + log('Successfully copied dependency files!', 'success'); + } + console.log('\x1b[0m'); // reset deferral.resolve(); diff --git a/hooks/fixAppEntitlements.js b/hooks/fixAppEntitlements.js index 1a6ff87..5323bc2 100644 --- a/hooks/fixAppEntitlements.js +++ b/hooks/fixAppEntitlements.js @@ -2,7 +2,9 @@ var fs = require('fs'); var path = require('path'); -var plist = require('plist'); +var xcode = require('xcode'); +var Q = require('q'); +var elementTree = require('elementtree'); function log(logString, type) { var prefix; @@ -16,7 +18,7 @@ function log(logString, type) { '\x1b[40m' + '\x1b[37m' + '\x1b[2m' + - '☝️ [INFO] ' + + '☝️ Widget [INFO] ' + '\x1b[0m\x1b[40m' + '\x1b[33m'; // fgWhite, dim, reset, bgBlack, fgYellow break; @@ -57,8 +59,6 @@ log( ); module.exports = function (context) { - var xcode = context.requireCordovaModule('xcode'); - var Q = context.requireCordovaModule('q'); var deferral = new Q.defer(); if (context.opts.cordova.platforms.indexOf('ios') < 0) { @@ -75,7 +75,6 @@ module.exports = function (context) { } // Get the bundle-id from config.xml - var elementTree = context.requireCordovaModule('elementtree'); var etree = elementTree.parse(contents); var bundleId = etree.getroot().get('id'); @@ -84,7 +83,7 @@ module.exports = function (context) { : path.join(context.opts.projectRoot, 'platforms/ios/'); fs.readdir(iosFolder, function (err, data) { - var projectFolder + var projectFolder; var projectName; var run = function () { var placeHolderValues = [ diff --git a/hooks/prerequisites.js b/hooks/prerequisites.js index c9b57d8..0caa0d1 100644 --- a/hooks/prerequisites.js +++ b/hooks/prerequisites.js @@ -1,15 +1,17 @@ -module.exports = function (context) { - var child_process = context.requireCordovaModule('child_process'), - deferral = context.requireCordovaModule('q').defer(); +var Q = require('q'); +var child_process = require('child_process'); -child_process.exec('npm install', {cwd:__dirname}, +module.exports = function () { + var deferral = Q.defer(); + + child_process.exec('npm install', {cwd:__dirname}, function (error) { if (error !== null) { - console.log('exec error: ' + error); - deferral.reject('npm installation failed'); + console.log('exec error: ' + error); + deferral.reject('npm installation failed'); } deferral.resolve(); - }); + }); - return deferral.promise; + return deferral.promise; }; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 339e7c0..0000000 --- a/package-lock.json +++ /dev/null @@ -1,607 +0,0 @@ -{ - "name": "cordova-plugin-today-widget", - "version": "1.0.0", - "lockfileVersion": 1, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", - "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=" - }, - "big-integer": { - "version": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.23.tgz", - "integrity": "sha1-6F1QgiDHTj9DpM5y7tUfPaTblNE=" - }, - "bplist-creator": { - "version": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", - "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=" - }, - "bplist-parser": { - "version": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=" - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true - }, - "ci-info": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", - "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cosmiconfig": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz", - "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true - }, - "date-fns": { - "version": "1.28.5", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.28.5.tgz", - "integrity": "sha1-JXz8RdMi30XvVlhmWWfuhBzXP68=", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true - }, - "file-match": { - "version": "https://registry.npmjs.org/file-match/-/file-match-1.0.2.tgz", - "integrity": "sha1-ycrSZdLIrfOoFHWw30dYWQafrvc=" - }, - "file-system": { - "version": "https://registry.npmjs.org/file-system/-/file-system-2.2.2.tgz", - "integrity": "sha1-fWWDPjojR9zZVqgTxncVPtPt2Yc=" - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true - }, - "husky": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-0.13.4.tgz", - "integrity": "sha1-SHhcUCjeNFKlHEjBLE+UshJKFAc=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true - }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", - "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", - "dev": true - }, - "lint-staged": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-3.6.1.tgz", - "integrity": "sha1-JEI8i3vZnZbhWs0ayMs5KnjlhYI=", - "dev": true - }, - "listr": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", - "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", - "dev": true - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", - "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", - "dev": true, - "dependencies": { - "indent-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.1.0.tgz", - "integrity": "sha1-CP9DNGAziDmbMp5rlTjcejz13n0=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz", - "integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=", - "dev": true - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - }, - "npm-path": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", - "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", - "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true - }, - "path": { - "version": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "pegjs": { - "version": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true - }, - "plist": { - "version": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", - "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=" - }, - "prettier": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.4.4.tgz", - "integrity": "sha512-GuuPazIvjW1DG26yLQgO+nagmRF/h9M4RaCtZWqu/eFW7csdZkQEwPJUeXX10d+LzmCnR9DuIZndqIOn3p2YoA==", - "dev": true - }, - "process": { - "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true - }, - "rxjs": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.1.tgz", - "integrity": "sha1-ti91fyeURdJloYpY+wpw3JDpFiY=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-plist": { - "version": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", - "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "staged-git-files": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", - "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=", - "dev": true - }, - "stream-buffers": { - "version": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" - }, - "stream-to-observable": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", - "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=", - "dev": true - }, - "util": { - "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" - }, - "utils-extend": { - "version": "https://registry.npmjs.org/utils-extend/-/utils-extend-1.0.8.tgz", - "integrity": "sha1-zP17ZFQPjpDuIe7Fd2nQZRyril8=" - }, - "uuid": { - "version": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true - }, - "xcode": { - "version": "git+https://github.com/apache/cordova-node-xcode.git#322f304e1aac853867136d866087da29e04a54b2", - "integrity": "sha1-kEUjuipU+41rs12gbYCUoWNLMY4=" - }, - "xmlbuilder": { - "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" - }, - "xmldom": { - "version": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/package.json b/package.json index c5379e9..06ae972 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cordova-plugin-today-widget", - "version": "1.0.0", + "version": "1.0.1", "description": "Add a toaday widget app extension target to your cordova project.", "repository": { "type": "git", @@ -22,23 +22,12 @@ }, "homepage": "https://github.com/DavidStrausz/cordova-plugin-today-widget", "dependencies": { + "child_process": "^1.0.2", + "elementtree": "^0.1.7", "file-system": "^2.2.2", "path": "^0.12.7", "plist": "^2.1.0", + "q": "^1.5.1", "xcode": "git+https://github.com/apache/cordova-node-xcode.git" - }, - "devDependencies": { - "husky": "^0.13.4", - "lint-staged": "^3.6.0", - "prettier": "^1.4.2" - }, - "scripts": { - "precommit": "lint-staged" - }, - "lint-staged": { - "*.js": [ - "prettier --parser javascript --single-quote --print-width 80 --tab-width 2 --trailing-comma es5 --list-different --write", - "git add" - ] } } diff --git a/plugin.xml b/plugin.xml index a1a115b..225f6da 100644 --- a/plugin.xml +++ b/plugin.xml @@ -14,7 +14,9 @@ - + + + @@ -27,7 +29,26 @@ group.__APP_IDENTIFIER__ - + + + applinks:share.triggi.com + applinks:share-dev.triggi.com + applinks:triggi.onelink.me + applinks:share.olisto.com + applinks:share-dev.olisto.com + applinks:olisto.onelink.me + + + + + applinks:share.triggi.com + applinks:share-dev.triggi.com + applinks:triggi.onelink.me + applinks:share.olisto.com + applinks:share-dev.olisto.com + applinks:olisto.onelink.me + +