Leapdragon 2016 - Aron Hsiao Was Here

Working iWidgets on iOS 9.x.x? It can be done.  §

So as a part of my rediscovery of Daedalus and Ulysses I’ve decided to move back to iOS. That sounds good, except for the fact that the one thing (a simple thing, really, but never underestimate simple things) that I am really attached to on Android is my control over the launcher—time, date, and weather widgets, plus the ability to organize icons to provide a visual cue for which screen I’m on and to help locate the screen I’m looking for.

So I desperately wanted to find a way to reproduce this on the iOS springboard (which I frankly hate) to make the switch more palatable.

I installed iOS 9.3.3 and used the recent Pangu jailbreak. So far, so good. And the Cydia Anchor app provided the ability to position springboard icons in the way that I saw fit. But despite my research beforehand, in practice I found that despite installing iWidgets, no time-day-and-weather widgets I could get my hands on actually worked properly. Apparently they used to work in an assortment of previous iOS versions, but despite installing and uninstalling lots of hacks, I couldn’t get them to work in iOS 9.3.3.

So finally I dug in and got my hands dirty, and this is the result:

 

So what was the problem? The problems are multiple:

  • The Yahoo Weather API, which (as far as I can tell) all of the previous generation of widgets relied on, has been closed, and significant updates are required to use alternatives. Such updates are not yet forthcoming.
  • GPS access is not automatic, but apparently requires the installation of a tweak that is no longer available under the name that most older tutorial posts refer to.
  • Not too many things on Cydia have yet been updated for iOS 9.x.x, and Cydia is of course a terrible mess anyway.

After a lot of chasing wild gooses around, here’s the process that I put together:

— § —

Caveat: All of the terminal stuff I did as root (using “su” command). I don’t even know if that’s necessary. But whatever, I was after quick and dirty and working, not fancy and clean and perfect. N.B. the default Apple root password is “alpine” for those that don’t know.

1. Install these via Cydia:

  • cycript — it’s a dependency for webcycript (not available on Cydia, you’ll have to install manually—more on this in a moment)
  • terminal — probably doesn’t matter which one; you’ll need the command line
  • iFile — says it’s not compatible with iOS 9.x.x but it installs and works, albeit with periodic crashes
  • wget — use it to fetch files from the web directly down to your iOS filesystem
  • unzip — use it to unzip any ZIPs that you download
  • WidgetWeather3 — new infrastructure for driving GPS (don’t even know if necessary, but I’m not messing with what’s working now)
  • iWidgets — for obvious reasons

2. Now, head over to this URL for the first “hard” step—getting the unofficial (i.e. actually works with 9.3.3) webcycript link. The instructions say to use Safari to download the file and iFile to install it. I couldn’t figure out a way to get Safari to download to the local filesystem (presumably this is another tweak that I’m unaware of). And it’s hosted on Dropbox so there’s no easy download URL. So I did this:

  • (desktop:) Download webcrypt.deb file to my desktop.
  • (desktop:) Get the file hosted somewhere with a URL. I used FTP to put it temporarily on my own domain.
  • (ipad:) Fire up terminal, su root, and then:
    wget http://url-and-path.tld/webcrypt.deb
  • (ipad:) Still in terminal:
    dpkg -i webcrypt.deb

3. That got me the latest webcycript with a version hack to enable 9.3.3 successfully installed. With that installed, I could head back to Cydia and download:

  • InfoStats 2 — new infrastructure for getting various kinds of information from your iDevice

Big note—don’t update webcrypt in Cydia, you want the modified version still installed until some future update of the package on Cydia.

4. Now all the infrastructure is in place. It’s time for some iWidgets. But which ones? The ones on Cydia all use old (and non-functional on 9.3.3 and in the post-Yahoo-weather era) resources. Turns out that for some reason (I don’t know the ins and outs about the iOS jailbreak/mod scene) all of the widgets at this URL appear to use the new stuff and to work properly.

That should be great, except that annoyingly they’re all distributed as ZIP files, rather than as packages. Okay, so for each one that you like, you need to:

  • Copy the URL
  • Go to terminal on iOS
  • Use wget to download the ZIP
  • Use unzip to extract the ZIP (they all have relative path information, thank god)
  • Move the extracted folder into Library/iWidgets
  • Remove the ZIP file so as not to clutter up your filesystem

Once you’ve placed the subfolders in Library/iWidgets, they all do appear when you try to add widgets to springboard (by long-pressing on an empty springboard area). Combine with anchor to “make empty space” for widgets, and you’re good to go.

Well, almost.

The new generation of widgets at the URL above are all also sized for phone devices, and are by default sort of tiny on iPad devices. Not to mention that many of them seem to be “in progress” with huge bounding boxes and lots of code that doesn’t do anything yet. Apparently their authors are all building big, complicated widgets that do all kinds of reporting on battery status and so on, and while they’ve implemented some of the HTML and code up to and including time and weather, the rest is yet to come—but they’re already bounded for the full monty, meaning they take up half your springboard screen with half-completed stuff or empty space. Ugh, ugh, ugh.

Happily (well, sort of), you have the HTML in the folder for each widget you’ve unzipped. Now you dust off your CSS and coding skills and iterate with revisions, commenting out js code that isn’t doing anything much, HTML code that is displaying empty or half-completed block-levels, and rearranging CSS to your appearance preferences. And so on.

This is where iFile comes in—you can browse to the widget folder, locate the relevant script, HTML, or CSS file(s), and begin to hack around with the widgets (editing and saving in place) to enlarge their size or change their appearance. Great!

Only—another caveat—someone, somewhere is caching the CSS. So after you place a widget once, none of your future changes appear, even if you edit the CSS file. This makes it hard to iterate with your revisions. My solution?

After each new CSS save, I went back to terminal and just did an “mv widget-folder-1 widget-folder-2” (basically—I renamed the widget folder each time I made a change). The list of widgets is updated automatically, and you can try out the widget again (under the new name) in a way that will reflect your most recent changes.

The end result is what you see above.

Kludge city. But this is at least one way that it can be done, and that’s what I was going for. N.B. that if you’re not totally clear on things I said above, you should probably avoid this process entirely. A genuine comfort with the Linux/*nix command line, HTML/CSS, and with kludge work in general, is pretty much a must.

But it can be done by someone that isn’t intimately familiar with the off-the-path iOS community, if you have basic dev skills and a couple hours on your hands.