supposed to work: iOS 2.0 through 14ish

If you have any issues with these builds, hold volume up while booting (if using an untethered jailbreak) or while running the jailbreak tool (if using a tethered jailbreak) to disable and then downgrade to a previous working version of Substrate.

Cydia Substrate 0.9.7113 fixes support for iOS 14.5 in a way that probably wasn't sufficiently tested (but which I'd expect to work identically on every version of iOS); it seems like someone at Apple is just having fun griefing us, without actually making much of a difference :/.

Cydia Substrate 0.9.7112 was a change only for AppleTV and added a safemode for PineBoard (which I guess has something to do with a basketball game last month in Longview, TX? at least going by the Google search results for "spring vs pine"... I dunno).

Cydia Substrate 0.9.7111 fixes an issue I introduced in 0.9.7109, while fixing the zombie process problem, which accidentally un-fixed the "process already dead" issue I addressed with 0.9.7108 :/, as 0.9.7110 is a hybrid of the old/new models. This was a ridiculously difficult issue to track down, as many people were testing 0.9.7106, and then sometimes reporting 0.9.7107 failed (which I think was an incorrect test: those are literally the same binary).

Cydia Substrate 0.9.7110 fixes an issue on iOS versions before iOS 10 that I introduced in 0.9.7108 :(. While my new injection system feels really correct, it turns out it relies on some new mach task behavior that arguably isn't very stable anyway (and is why I had to add the two other workarounds). I've figured out how to fix my less-mathematically solid set of checks to handle the thread case. Thanks goes out to Saagar Jha for telling me what changed.

Notably, this build is thereby a lot more like 0.9.7107 in behavior, particularly around the one place in the code where something can end up doing a live-lockable spin loop (which is the sort of thing that could cause "the phone is getting hot and it is using a lot of battery", which a handful of people are still reporting on 0.9.7109); to the extent to which people have had problems with 0.9.7108 and 0.9.7109, I will thereby hope that 0.9.7110 helps.

While working on this update, I also determined Substrate wasn't working correctly on boot of an untethered exploit while testing on iOS 9. While the current distribution channel for Substrate (via Sam) doesn't go to anyone using versions of iOS older than 10 or 11 or so (which should both work), this was annoying, and maybe applies to other untethered exploits, so I figured out a fix for that issue that seems stable? I'm definitely interested in issues.

Cydia Substrate 0.9.7109 fixes a bug introduced in the new injection logic that caused a spin loop if the new process had been killed on exec by the kernel due to a codesign violation and then became a zombie that the spawning process did not reap. This is actually "great" (despite being a bug in something I was very sure would work ;P) because I was able to reason out the cause of bug in the new "more mathematically correct" injector from just the symptom.

Cydia Substrate 0.9.7108 improves stability with early process injection; it is being released due to a bug report about a nonce override tool that was getting killed (by me) as soon as it started due to an issue detecting whether it was safe to complete the injection. This new implementation is finally to the point where it feels like it is a "100% solution" (like, I feel like I can now prove, more mathematically, that it must have the correct behavior).

Cydia Substrate 0.9.7107 fixes another bug introduced in 0.9.7105 (which was in some sense a pretty major update, at least "apparently, in retrospect") that caused extensions that hooked frameworks with embedded executable files, such as com.apple.SpringBoardFramework, to sometimes get loaded into unexpected processes; if the extension then is relying on the filter to prevent this (which it shouldn't, FWIW) they could wedge things (and this did happen).

Cydia Substrate 0.9.7106 reverts something I did in 0.9.7105 (unloading Substrate's loader) that wasn't necessary to accomplish my goals for that version (but seemed like a good thing to do to help memory usage) because, while I proved to myself that the loader couldn't do any actual "hooks", it does override signals in SpringBoard (and so unloading it breaks that old "safe mode" mechanism I never managed to get people to stop thinking was a good idea).

NOTE: I get absolutely nothing from people using Substrate (and this was true even before Apple finally managed to edge Cydia out as a viable store). I started working on updates to Substrate recently for iOS 14 (pushing 0.9.7102 a couple days after the first iOS 14 beta). In the process, I offered to just discontinue Substrate, as I heard that Substitute might be preferred by some people now, and I find the duplication of efforts a bit silly; however, I was told (by someone working on Substitute) that Substrate still had a place, and I determined most of what was wrong on iOS 14 was actually a bug in Apple's Objective-C runtime anyway, and so I figured "ok, I'll at least continue through iOS 14". (The update cycle on all of my projects is that I try to work on each of them, furiously, about once a year for a week or two, and then leave them in some stable place so I can do other projects furiously for the rest of the year; users like to judge me for this, but it is the reason I am able to dive deeply into so many projects, and I suggest they try it ;P).

In the process, I was shocked to learn--by way of people commenting on posts about my updates (the only posts I force myself to read, and which I agree I should also be avoiding ;P, but I take at least some responsibility to read if people say "this update was worse"... I dunno... it was probably a mistake)--that there were some pretty wide-spread bugs that I was not being told much about (and which I would myself not notice, as, as I mentioned in the 0.9.7104 changelog, I don't use jailbreaks anymore other than to do some very minimal tasks, due to a combination of wanting some space from a demanding userbase and having moral issues--largely surrounding harrassment and bullying, including sexism and outright cruelty--with supporting the work of some of the key developers in the current community... this is also why I don't participate in or often even read community forums, as many of the people are just too amoral for my sanity: "I actively praise anyone who gives me good software as if they are good people, and I actively hate on those who fail").

I say this, as some people have decided that I'm clearly only releasing updates to Substrate due to some kind of "competition". This fits neither the timing (which was very clearly coordinated with iOS 14) nor the incentives (as again: I get absolutely nothing from people using Substrate). It also doesn't fit my personality: I find the idea that developers in this community prefer to rebuild and "compete" rather than work together more than a bit abhorrent, and it is the reason why so many core projects (including this one) end up closed source: almost none of the open source projects ever get help :( they are instead forked by a hostile developer into an incompatible closed-source "alternative" that is billed as having a "better UI" or claims of "better battery life" and the community as a whole suffers due to the new regime; like, ask yourself why Substitute (sometimes considered a "competitor" to Substrate, though there is actually a lot of knowledge transfer... I'd say we work together, really) is now closed source?

Regardless, while I do have some moral issues with specific developers right now (which has nothing to do with the hostility mentioned in the previous paragraph, and is incredibly widespread... people, I think, like to simplify issues down to one person, but I don't even feel good using checkra1n and only "use" unc0ver :/ if I go into the extent of the problem, everyone will claim I am into "drama" and should stick to writing software... while I disagree with that attitude, I am spending my mental cycles fighting in local politics these days), I honestly don't care what hooking framework you use on your phones... as long as it is paired with a package manager (and I hear there are many these days) compatible with the federated repository ecosystem (as opposed to using some proprietary repository format, as was the case with Installer 2 or the original Rock Your Phone) and doesn't come with DRM (which was a goal of iMods, and is the reason why I was upset about Substitute). In fact, over the years, I've even found myself testing that Substrate is actively compatible with the likes of Rock Extensions and Mobile Enhancer ;P. Seriously: go uninstall Substrate... all it means to me is one less user I'm responsible for.

Cydia Substrate 0.9.7105 uses slightly less memory (which is good) by also avoiding some key side effects with respect to library bundles (which is even better) but also attempts to prevent processes with memory limits from crashing due to Substrate extensions (as some processes fundamentally will have only just enough memory to run normally); it also fixes an issue on iOS 14 where Substrate failed to allow tvOS binaries to run on iOS (and vice versa).

Cydia Substrate 0.9.7104 works around what I beleive to be a bug in the Apple mach notification APIs that prevented Substrate from "restarting" cleanly after its hook cache daemon had been killed due to (for a notable example) memory pressure. This hopefully fixes the main stability issue in Substrate (which I honestly didn't know was a problem until yesterday: my primary device is "jailbroken" with unc0ver, but I only use it for SSH filesystem access).

Cydia Substrate 0.9.7103 "solves"(-ish?) a bug where Substrate's usage of ASL would cause GSSCreds to abort (a bug which has been here for a while due to a miscommunication on the cause of the bug with the people from checkra1n); note that extensions can still cause this bug when using Substrate, but my current belief (*crosses fingers*) is that that is conceptually a bug in those extensions and not something Substrate should attempt to mess with itself.

Cydia Substrate 0.9.7102 better supports extensions that make a large number of "unique" hooks on jailbreaks with working kernel patches (which hopefully didn't break support for random jailbreaks). I also made a small change to how I hook into setuid processes to better support iOS 13+ and, when combined with a recent/future (not sure) update to the kernel patches in checkra1n, avoids accidentally allowing "uncontrolled" injection into setuid processes.

Cydia Substrate 0.9.7101 fixes some subtle race condition that sbingner says "only affects iPhone X global phones"; well, that... or it makes something much worse? It seems to work, though?

Cydia Substrate 0.9.7100 (currently only available via sbingner's repositories while I get my life and servers and everything, really, re-organized) is designed to support iOS 13, with the final version fixing a serious resource leak that would eventually cause Substrate to lock up and break.

For previous/beta versions of 0.9.7100: ~b6 fixed cynject on iOS 12/13; ~b4/5 were to help sbingner fix some packaging conflict caused by pwn20wnd; ~b3 allowed tvOS to load non-tvOS binaries; ~b2 I think mostly was about fixing tvOS support? 0.9.7100, in general, was attempting to support iOS 13.

I'll figure out what to do about old changelogs at some point (omg so much has changed since 0.9.7013).

Cydia Substrate 0.9.7011 and 0.9.7012 attempt to prevent Substrate from wedging while restarting amfid; 0.9.7012 also fixes an issue which wedged when running on older chipsets; and 0.9.7013 fixes an issue where some applications (such as PayPal) would crash when hooked by Substrate. (And 0.9.7020 adds MSHookMemory.)

Cydia Substrate 0.9.7010 (also available only via beta repository) resolved a race condition with amfid that would cause a device lockup under low-memory conditions reported by users on the unc0ver issue tracker. Note: I (kind of?) recommend rebooting after install of these newer updates, but I'm not sure that matters.

(Also: this new version makes changes for all devices on iOS 11, but has only been tested on unc0ver 2.1.0: I imagine it works on other versions of unc0ver, but I have no clue about anything else, particularly things that are not unc0ver. I also verified on an iOS 5.1.1 device that I didn't break 32-bit support, as I also fixed a corner case and improved something else unimportant that would affect all devices on all versions of iOS; seems to work fine.)

Cydia Substrate 0.9.7000 (available only via beta repository) has essentially been rewritten, from scratch, four times over. It was originally designed for use with an iOS 11 jailbreak that was to be released as part of Extender, but now it instead fully supports unc0ver by pwn20wnd and sbingner.

This version of Substrate has a centralized "hook cache" that solves the vnode exhaustion issue that has low key plagued Substrate since iOS 9. This new version can (and does) hook absolutely every process on the entire system (which was always the goal... some users might disagree).

While prior releases of Substrate were "supposed to work" on older versions of iOS, this build of Substrate has actually been tested on a stack of jailbroken devices running all of iOS versions 3.0, 4.3.1, 5.1.1, 6.1.3, 7.1.2, 8.0, 9.0.2, 10.1.1 (mach_portal), 11.1.2 (Extender), and 11.3.1 (unc0ver).

(I honestly don't know if anyone will bother to install this and am slightly confused as to what the goal of this release is, but a lot of people seem to be expecting it and I feel "on the hook" for a release... so let's see what happens with it?)

Cydia Substrate 0.9.6301 fixes a regression on iOS 6 (and maybe other versions) where it stopped injecting, as reported by rweichler :(.

Cydia Substrate 0.9.6300 enables Cycript to work in the way one would truly expect on iOS 9.3.

Cydia Substrate 0.9.6200, on iOS 9.2+, "mitigates" :/ an issue of storage on the root filesystem when using a "semi-untethered jailbreak" (so far my favorite term for jailbreaks via an app vector) by stashing the installation target of extensions. It also fixes a bug in function hooking on all versions (though it should rarely come up) and has some minor modifications for recent versions of iOS (which should not cause problems on older versions, but if that happens I want to know as all versions are still supported by this package). The "volume up to disable" feature has also been modified to work correctly after the device has booted, which means you can now disable Substrate on iOS 9.2+ by holding volume up while using the jailbreak app from Pangu.

Cydia Substrate 0.9.6000 has made massive internal changes to be compatible with the latest jailbreak for iOS 9 from Pangu.

0.9.6010 fixes the 32-bit armv7 slice, which was keeping extensions from loading into Cydia. (Note that, additionally, all 32-bit binaries, in particular extensions, must be recompiled using -Wl,-segalign,4000 for iOS 9 due to a change made by Apple. Extensions that have not been recompiled might "get lucky" and work, but they will usually either fail or even crash.)

0.9.6011 fixes an issue in 0.9.6xxx where it no longer worked on iOS versions before 5.0.

0.9.6100 blocks extensions on iOS 9 that are guaranteed to crash some key processes (such as Cydia), will inject into too many processes (due to a mismatched filter), or which will lead to subtle bugs (by invalidating the codesign of the target process). This new version also fixes some issues developers were seeing attempting to hook functions in particularly well-sandboxed processes, and adds support for the latest version of Cycript (which now runs Substrate as an injection vector).

0.9.6101 fixes an issue where Cycript could not inject into a 32-bit process. (This bug might have affected Substrate in some more general way? I am not yet sure about this.)

0.9.6110 fixes an issue where extension that are corrupt (often on purpose by the developer for obfuscation purposes :/) cause Substrate's attempt to detect whether the extension will cause the process to crash to actually just cause Substrate to crash :/. (In addition to all of the usual numerous improvements I make every time I cut a new release.)

Substrate version 0.9.5010 adds MSHookInterface, a new entry-level feature for developers; read more in Substrate's example walkthrough.

As of version 0.9.3997, you can now disable Substrate entirely by holding down Volume Up as the device boots.

This feature allows you to bypass horribly broken extensions (ones that prevent the device from starting up at all) that you may have installed so you can open Cydia and uninstall them.

To support devices that do not have a Volume Up button (the first-generation iPod touch), you can alternatively hold down the "Clicker" (not Volume Up) button on your headset or earphones.

(A special thanks goes to @oLunatiko for help implementing this feature!)

Mobile Safe Mode is a feature designed to protect you from faulty extensions (it is pretty awesome).

Support framework used by iPhone projects such as WinterBoard, Activator, and Five Icon Dock.

The general idea is that there are a number of reasons one might want to hook functionality into an existing application. In order to do this there are a few dangerous or complex steps. By centralizing the code for these we can hope to get them right.

As an example, Cydia Substrate provides a simple platform (one integrated with Cydia) for deploying code that gets inserted into graphical applications. When things fail, it is able to provide error handling and fallback support (think of a "Safe Mode").