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
+
+