Looking back to look forwards

Matt Clarke
13 min readFeb 4, 2021

--

10 years is a long time. A lot can happen. A lot has happened.

During the summer of 2011, I typed two words into Google:

“Jailbreak iOS”

I didn’t expect the journey that eventually took me on…

Photo by Annie Spratt on Unsplash

Fast-forward to now, and I’ve been involved in the iOS jailbreak community for a full decade. I’ve seen it grow over the years, and go through its fair share of problems!

Without the community, its very likely I would not be who I am now. It led me into a career of software engineering, to connect with friends around the world (everywhere between west coast USA and New Zealand), and shaped my way of thinking about pretty much everything.

Its time now to move into a different era. More on that in a bit.

I’ve made a few things over the years, yet am still blown away with the support and feedback they’ve received! Having emails arrive in my inbox saying I’ve inspired others down this path through my work never fails to make me smile. Seeing screenshots of the setups people have made with Xen HTML is humbling. Heck, getting over a million unique downloads on InfoStats 1 was mind-blowing for 19-year-old me!

Ain’t that something!

Before I go any further, here’s the device I started this journey on: my practically ancient iPod Touch.

Sorry about all the scratches, little guy

I made this thing cry.

It’s been opened up and had its hardware prodded at multiple times. I installed a ridiculous amount of tweaks on it. I managed to almost brick it once or twice. The home button doesn’t work any more.

But through it, I learnt the underpinnings of iOS: the filesystem, what a kernel is, how to write code. Its got history.

What always gets me thinking is why I even bought it; I just wanted to store some sweet Foo Fighters tracks on it. I guess you could say Dave Grohl set me on this journey?

So, what have you built?

Glad you asked.

StrifePrefs (2013)

The first thing I ever made was an addition to an already released UI overhaul, named Strife. It completely redid the Homescreen in the style of Windows Phone 7. Though, it lacked a way to set preferences easily.

So, I came along and built that. A small number of people ended up liking it and using it. Just like that, I was hooked!

InfoStats (2013)

… and that quickly led me onto the next project. I’d put a couple of comments out on ModMyi.com (sadly not what it used to be) that I was looking for something to build, and I got a private message back.

The goal was simple: a way of bridging some system level data into widgets written in JavaScript/HTML. Namely, RAM usage and battery levels.

I didn’t quite realise how popular this would actually be. Even today there are widgets from this era that still run, making use of this tiny little thing. Of course, its all done via backwards compatibility now, but the original idea still stands firm.

SuspendResume (2013)

Sometime during 2013, I got myself an iPhone 4. This was super cool and all, so I figured I’d build something specifically for it. Hardware wise, they’re clearly different to an iPod Touch — cellular access, proximity sensor…

Proximity sensor.

I had the idea to build something that locked your phone when you put it in your pocket, or waved your hand over the screen.

Man, it sucked.

I wrote most of the codebase in the back of a minibus heading around Hull, UK. Barely tested it, and somehow got lucky that the first few builds actually worked. Then, I tried being smart using threads.

Bad idea for a novice.

I’m still not sure how, but on one build I managed to get the display locked into a state where the backlight was exponentially getting brighter and brighter. The screen became a pure white light. I had to hard reset the phone to prevent hardware damage at the rate it was going.

I never touched the project again.

Convergance (2013–2015)

This was my “big break”.

I distinctly remember scrolling through Twitter, and reading a designer complaining about the lack of utility in the iOS 6 Lockscreen. This got me interested; could I build something better?

The time I sunk into this project was insane. I would come home from school at 3:30pm, and would still be coding at 2am. Sleeping just wasn’t an option. I had to build it. I would fall asleep at school because I was too exhausted from the previous night. Even fell asleep whilst writing code. (That happened more times than I care to admit!)

Worth it, though.

Pretty good for promotional art!

It gave me a sense of freedom knowing that I could envisage an idea, and actually make it real.

Not only that, Convergance helped pay my way through the first half of university.

The misspelled name was always a bit of a funny thing to comment about, and the best part? It wasn’t intentional! I drew the name from a short instrumental track by 30 Seconds to Mars:

Tune and a half. Credit: Convergence by 30 Seconds to Mars

I had my first experience with software piracy with Convergance, on the side of protecting my work. It was a cat and mouse game for the project’s lifetime, with me building mitigations to cracks as they appeared, iteratively getting more complex.

To everyone who supported me for this one, thank you. It became the catalyst for everything else that came next.

One fun thing to mention is a quote from an iDownloadBlog podcast not long after it released to the public. I had built a promotional website for it, and went all-in on it. Jeff Benjamin said of it, paraphrased:

It sounds like this tweak can cure baldness!

Want to know why? Well… read what I wrote: https://web.archive.org/web/20140502033520/http://incendo.ws/projects/Convergance/

Let’s not go back there again. Next project!

iOS Blocks (2014–2015)

Oh boy…. this one ended up in development hell.

For those who don’t know it, iOS Blocks was a design concept published by Jay Machalani in 2014. He absolutely nailed it, to the point where Apple seems to have copied his design for the Homescreen widgets in iOS 14.

Credit: Jay Machalani

I set about building this project after talking with Jay directly, emboldened by the success of Convergance.

Architecture wise, I decided to split it up into three distinct components:

  1. A tweak that managed icon layouts, and loading widgets
  2. Separate widget bundles installed on the filesystem, so that the tweak can be extended by other developers
  3. A settings panel

I was able to quickly build a viable proof-of-concept:

Left to right: (1) first attempt at icon layouts — (2) first “block” ever — (3) testing messages widget

The project grew, with the addition of another developer @gabrielefilipp5 and designer @aesign_. Together, we built the first few widgets and were able to produce a couple of alpha versions. Our work was even picked up by iDownloadBlog in 2015.

We managed to build something pretty cool

Unfortunately, I couldn’t put enough time into the project to bring it to a usable state. I open-sourced it, and other developers picked up the project at one time or another to continue the work.

Whilst its a shame this never saw the light of day as intended, it was one hell of a learning experience.

InfoStats 2 (2015–2016)

In 2015, @junesiphone reached out to me with an interesting idea. At the time, a project existed named Cydget, which allowed developers to make JavaScript/HTML widgets that could also call into system frameworks via Cycript. This was restricted to the Lockscreen only, and had its share of frustrations.

The goal was pretty simple: allow the power of Cycript to become available in other widget-related tweaks, like iWidgets.

It took some serious work to achieve this, relying heavily on the open-source components of Cydget. And achieve it I did.

But, I didn’t stop here. I realised that whilst it was useful for widget developers to access frameworks beyond the constraints of JavaScript, they were not easy to use without knowledge of Objective-C. Thus, InfoStats 2 was born — an API that did most of the hard work for widget developers, so that they didn’t have to.

By this point, I was fortunate to have a small but dedicated alpha testing team. All members were also interested in running and making widgets, and encouraged me to push InfoStats 2 to its limits. When building the API for GPS location data, I would literally walk around my local neighbourhood at 3am, phone in hand, carefully watching a widget update its position as I moved!

InfoStats 2 became a staple for many widget developers. Its time came to an end when Cycript couldn’t be injected into webviews any longer in iOS 10, but it had a fantastic run.

Xen Lockscreen (2015-2018)

Xen Lockscreen (originally just Xen) was the successor to Convergance. My plan was to totally redo the project from the ground up, learning from all my mistakes.

I designed the tweak around the idea of “pages” you could swipe between on the Lockscreen. One page could be your calendar, another for widgets, or a quick-access launcher for applications. This came from a huge number of feature requests for re-arranging the layout of Convergance.

It also featured something fairly new for the time; grouped notifications. I first built this into Convergance, where you’d be presented with a grid of icons, which collapsed the full list of notifications nicely.

But I don’t stop there with the features. I built “Raise to Wake’ into it before Apple included something similar in iOS, inspired by the “Glance” feature created by Nokia. You could lift the device, and be presented with a minimal overview of pending notifications and the current time. Tapping the screen then let you continue using it like normal.

All possible pages in one layout. Left to right: (1) Toggles — (2) Calendar — (3) Weather (with animated background) — (4) Main page — (5) Widgets — (6) Launchpad

In 2016, I was looking beyond Xen Lockscreen. I wanted to build a suite of tweaks under the Xen brand-name. Ultimately, I didn’t have the time to go down this route, but this is why both Xen Lockscreen and Xen HTML share a similar name.

As part of Xen Lockscreen, I also spent time drastically improving my DRM protection scheme. With it being a paid tweak, I wanted to lengthen the time before cracked versions started appearing. I researched heavily into this, leading to techniques like determining user trustworthiness based upon environmental factors. Some day I’ll publish this work.

Sadly, this tweak never got out of beta. Eventually, I shut it down when entering my final year of university, due to the sheer volume of work I needed to do for my degree. You can still download it though on supported iOS versions.

Extender: Reloaded (2017–2018)

By 2016, the possibility of untethered jailbreaks had come to (almost) an end. New jailbreaks were now app-based, meaning you had to run an app on your device to apply the jailbreak after each reboot.

This meant that the app needed to be installed on your device. To allow this, @saurik first built Cydia Impactor; a desktop application to sideload iOS apps. A year later in 2017, he released Cydia Extender, which allowed for “re-signing” apps without Impactor on your device through clever usage of VPNs.

Extender had some pretty major drawbacks. You had to manually start it every 7 days, and you also had to input your Apple ID credentials every single time. So. Much. Effort.

Another developer created a tweak for Extender that automated this. They were infamous for cracking DRM on paid tweaks, which included Convergance. Not cool.

I did not (and still do not) trust this developer.

So, I built my own open-source alternative, which became Extender: Reloaded.

The UI of Extender: Reloaded

Saurik’s Extender was used as a base. I modified it so that it would run in the background, and then reused the signing code already present. Automatic Apple ID credential input was handled in a pretty hacky way — the popup Extender would display asking for credentials was automated. You’d see it for a second, then POOF! Signing was happening.

The end result was that you could install my tweak, set it up, and forget about it!

Over time though, I didn’t like having to rely on Extender. I had a suspicion that eventually it would no longer be functional, and the battery usage from it running in the background was pretty substantial.

This lead me onto…

ReProvision (2018–2020)

ReProvision was everything I wanted Extender: Reloaded to be. I moved all background logic into a daemon, so that battery usage would be minimal. The app signing system was built from scratch, so it could be easily updated if anything broke over time. I also reached out to @aesign_ again, who created a unique design for the app.

ReProvision in all its glory

The initial reception was so-so.

I had to deal with people asking what was the point of the project, when Extender still worked fine.

Yet, I persevered. I ported it to iOS 9, which had never seen a release of Extender. Working with @nitoTV, we were able to port it to the Apple TV. All whilst studying for my final university exams.

Over time, ReProvision became widely recognised as the utility for keeping jailbreaks signed without ever having to touch a computer. It worked like magic. I even had the honour of it being named “Best Tweak of 2019”!

ReProvision outside Apple’s gates

At the end of 2019, disaster struck.

Whilst on a short holiday in Geneva, ReProvision was broken by server-side changes at Apple. The API used to authenticate a user no longer worked as part of signing applications. I experienced immense pressure from the community to find a fix quickly, and found myself working late nights in a hotel room for the entire trip. (I genuinely believe this had a part to play in my then-partner and I splitting up.)

Working alongside @rileytestut and @kabiroberai, we found a way around this authentication problem for not only ReProvision, but also for AltStore and SuperCharge.

The damage was done, though.

I had lost all motivation and drive to continue the project.

The stress of keeping up with changes made by Apple to prevent sideloading was unbearable. Feeling forced to work on the project for free, using my spare time, was untenable. It undoubtedly impacted my personal relationships.

By February 2020, I stopped supporting the project.

In the year since then, I have received countless requests to restart the project, including offers of money. My position is not going to change; it isn’t about the $$$. Its a question of slaving away on something I truly have no desire to continue.

Xen HTML (2015–2021)

The last hurrah.

I’ve left talking about this to the end for a reason; its my most ambitious, and the last one still active.

Convergance had this small extra feature that I didn’t advertise too much: you could run widgets built with JavaScript in it.

As I was building Xen Lockscreen, my testing team asked me to split this feature out into its own tweak. That was an excellent call.

In 2015, there were three tweaks you’d use to add widgets to your device: LockHTML for Lockscreen widgets, SBHTML for the Homescreen, and iWidgets (also on the Homescreen).

My aim was to unite all three in one tweak, and provide a decent amount of configuration to adjust stock UI components to match any setup.

I started with the Lockscreen. The first release of Xen HTML was pretty barebones; you could set a single widget overlaying the wallpaper, or one that moved when swiping around. It was a start.

Settings UI for the first few beta releases (iPad)

Update after update, I added new features, and vastly improved the user experience.

On August 25, 2019, I submitted version 1.0 to Packix, after over two years of pre-release betas. Then, I breathed a sigh of relief.

As of today, Xen HTML supports over a third of all major iOS versions ever released.

The sheer amount of setups I’ve seen using Xen HTML is staggering! There’s no way I can pick out a small few to show in this post. What I can do though is point towards /r/iOSThemes, where some of the best post their work.

I know of at least a couple of people who’ve gone into a career in web development thanks to making widgets. Knowing that this project has directly improved the lives of others is deeply moving, and is part of why its still being developed.

Of all my projects, I am the most proud of Xen HTML. But a special mention must go to the testing team that stands beside me on this project. Without you guys, none of this would be possible. Thank you.

What’s next?

So, here’s the thing…

This past year has brought with it a number of struggles and challenging life changes. And, its gotten me thinking.

I don’t find doing things in the jailbreak world fun any more.

If there’s something I’ve learnt from 2020, its that life is far too short to keeping putting time into something you don’t enjoy. Anything could happen tomorrow. Time is precious.

This doesn’t mean I’m about to disappear into the ether, though.

But, it does mean I’m winding down and “closing up shop” for my last remaining iOS project, Xen HTML. There’s a few more updates left for that, including built-in compatibility with XenInfo and InfoStats 2. However, an update for iOS 15 won’t be happening.

Some readers might have noticed I’ve been trying new things recently; a hardware project that I live-tweeted, or perhaps the small website I threw together.

My focus is very much to shift this hobby of making things back to being that: a hobby. Not everything has to be released, and nothing needs to be super serious. Just someone on a laptop trying to make the world a bit brighter.

Watch this space, folks. I hope you come along for the ride.

Photo by me

Roads? Where we’re going, we don’t need roads!

--

--