npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cordova-plugin-today-widget

v1.0.1

Published

Add a toaday widget app extension target to your cordova project.

Downloads

6

Readme

Cordova Plugin for adding a Today Widget to an existing iOS Project dynamically

This plugin extends your existing xcode project by parsing and modifying the project.pbxproj file using cordova-node-xcode. The today extension will be added to the XCode-Project everytime a cordova platform add ios is done.

Usage

1. First of all you have to create a Today Widget yourself using XCode (Editor > Add target > Today Extension)

  • Fill in the fields, making note of the following:
  • Remember the name of the widget
  • Remember the last part of the bundle identifier (the suffix)
  • Enable the App Groups entitlement (Targets > Select your widget > Capabilities) and name your group: group.<Bundle-ID of your host app> (you can use the group to share NSUserDefaults between the Widget and the main App). Note that you have to add this to your provisioning profile
  • Implement your widget using TodayViewController.swift and MainInterface.storyboard (you can add additional source-files too).
  • When done implementing copy the <Widget name> folder from </platforms/ios> to anywhere tracked by your repository.
  • If your MainInterface.storyboard is listed in a sub-older named Base.lproj, pull it out of the folder and delete the folder. (there is no handling of variant-groups for different languages)
  • If you want to use an objective-c bridging header you can add it to the folder, just make sure it is named Header.h (Bridging-Header.h works too but the file won't be listed in XCode because the cordova bridging header has the same name and node-xcode thinks's it's the same file because it's checking the name and not the UUID)
  • If you need to add custom build settings you can use a xcconfig file, the script will add it to the project
  • Every file that is not a .swift, .h, .m, .plist, .entitlements, .xcconfig or .storyboard file will be added as a resource file to the project (images, fonts, etc.)

2. Install the plugin

  • cordova plugin add https://github.com/DavidStrausz/cordova-plugin-today-widget.git --save
  • This will not modify anything yet because the hooks only run after_platform_add
  • You can add variables to your config.xml in order to change some of the settings:

| Variable | Default | Description | |-|-|-| |WIDGET_PATH| /www | Path to the folder that contains your widget folder relative to the project root | |WIDGET_NAME| Widget | Name of your widget | |WIDGET_BUNDLE_SUFFIX| widget | The last part of the widget bundle id | |ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES| YES | You might have to turn this off (change to NO) if you use other swift based plugins (such as cordova-plugin-geofence) |

This can be done either manually in the config.xml after installing the plugin, or be done through the CLI.

Example:

In the config.xml

<plugin name="cordova-plugin-today-widget" spec="https://github.com/Triggi/cordova-plugin-today-widget.git">
  <variable name="WIDGET_NAME" value="NowWidget" />
  <variable name="ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES" value="NO" />
</plugin>

Directly through CLI:

cordova plugin add cordova-plugin-today-widget --variable WIDGET_NAME="NowWidget" --variable ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES="NO"

3. Parametrization

Especially for automated builds, parametrization is an important part. The following parameters are available:

| Variable | Example | Description | |-|-|-| |_DISPLAY_NAME_| AppName | Name of the original app | |_APP_IDENTIFIER_| com.company.app | Bundle ID of the main app | |_BUNDLE_SUFFIX_| widget | Bundle ID suffix for the widget | |_BUNDLE_SHORT_VERSION_STRING_| 1.0.0 | The version of the main app in form MAJOR.MINOR.PATCH | |_BUNDLE_VERSION_| 1234 | The build number of the main app

These parameters are available in available in any .plist or .entitlements files.

Examples for usage:

To keep the app and widget in sync use the following settings

Widget-Info.plist:

  • Bundle display name: _DISPLAY_NAME_
  • Bundle identifier: __APP_IDENTIFIER__.__BUNDLE_SUFFIX__
  • Bundle version string, short: _BUNDLE_SHORT_VERSION_STRING_
  • Bundle version: _BUNDLE_VERSION_

Widget.entitlements:

  • App Groups -> Item 0: group._APP_IDENTIFIER_

Infos

  • I only tested the plugin with cordova 7.0.1 and cordova-ios 4.4.0 up to now, but it should work with other versions too.
  • I used XCode 8.3.2 to create the widget alongside with the plugin.
  • You have to add the app group entitlement to your host app too and you have to recreate your provisioning profiles with the app-group entitlement added if you want to use shared user defaults.
  • Don't forget to copy the widgets folder from platforms/ios to your source folder every time you modify it, otherwise your changes will be lost after you remove the platform.

Acknowledgements

Thanks to Remy Kabel who parametrized the build and made it possible for it to be fully automated.
Thanks to Hernan Zhou whos plugin was a great inspiration.