When open betas, outdated/broken packages and misinformation become a nightmare

Many people may know that I am one of the developers working on a theming engine called “Anemone”

On the Anemone team, we have had several goals from the start: to build a scalable platform that can theme iOS devices quickly and efficiently, support theming most components of iOS 7 and higher, to try being as open as we can, and to offer a great user experience for users

Part of this involved having open betas, regular discussions with many themers from the iOS community, and building Anemone into separate dylibs such that the user can control which part of Anemone they want (for example fonts can be disabled by disabling AnemoneFonts.dylib in iCleaner, or icons by disabling AnemoneIcons.dylib)

We have been pushing Anemone nightlies for almost a year so themers and advanced users (although we were mostly targeting themers) who are interested can test the new anemone pre-releases knowing that they are betas and may not always work correctly (we have a stable version on bigboss which is what average users and people who need reliability should be using)

Now before we start delving into details, there are a few points that need to be made: Anemone does not work in the same way as WinterBoard. Anemone is a new theming engine that was written from the ground up. Although some themes may work on both, the theme engines are not 100% compatible with each other and likely will never be given how different they are.

Now for some background: When Anemone was first released, Anemone had shipped with some components based on some themers’ requests to replicate some winterboard functionality (or in other words work as a “compatibility layer”) so enough of the theme works that they, and users can start migrating over. Part of this involved the DEBIAN package. The Debian package includes a “control file” with a field called “Depends” which states which other packages it depends on. For most themes released prior to Anemone, they depended on “winterboard”. This worked great for older themes at the time.

However, as Anemone has made several advancements to improve on theming and make it better for both themers and users, there have been many themes that require Anemone for some, if not all of their functionality. The problem however, was that many of these themes did not specify Anemone

in their packages’ control file as either an optional or required dependency. This meant that if a user just jailbroke their device and goes to install the Anemone theme with no theme engine installed, they get winterboard auto-installed instead of Anemone, which in several cases either results in the theme being non-functional, lacking several functions, or having several functions being broken in weird and strange ways. This inherently means the theme package is broken, and a user not knowing any better would not have a clue as to why it doesn’t work. It also means that when Anemone is cleaned up later to remove the compatibility support layer (which may end up needing to happen to enable adding new features), themes with broken packages would refuse to install and would stop working due to them specifying the incorrect dependency.

To solve this, we first tried notifying several themers about this in February, 2016. However, as of August, 2016, only about 6 themes have been updated correctly. Clearly notifying themers didn’t work – we needed to let users know what was going on. So in an Anemone nightly we added indicators to show themes installed that exhibited this packaging problem (originally red bars and a popup warning, but as of 2.0 we are simply using warning emojis with no popup). This indicator has been implemented to let people know that these themes have a problem and need an update to fix it or the themes may stop working on a future iOS version (if they truly are old themes) and/or Anemone version.

Enter HideMeX, which added a feature in its beta version to remove all warning labels and indicators from the Anemone beta. From a user perspective it may seem like no big deal; however from a support perspective, let’s imagine a scenario where the user has HideMeX and Anemone installed with several of these broken themes installed. It works for some time as Anemone still has legacy support. However, say an update were released for Anemone 7 months later to add several extremely cool features, but in doing so required removing the legacy support. The user updates to the new version and they have no idea why their themes broke – because HideMeX was hiding the warnings Anemone has been trying to show them for 7 months about said themes. This was why we initially added HideMeX beta as a conflict and pushed it to our nightly testing repo.

Our nightly testing repo was intended to be for a group of users who knew what a beta is, and how to provide constructive feedback or report issues with the betas appropriately. However, it turned out too many people, many of whom didn’t even know what “beta” or “nightly” mean were running both Anemone and HideMeX betas (it didn’t conflict if you had Anemone stable and HideMeX beta or Anemone nightly and HideMeX stable) and were complaining as they assumed they could use the nightly versions as if they were stable releases.

On a performance perspective, there is also a reason we would want to deprecate legacy themes and eventually drop them. Many themes in the past have themed home screen icons via “Bundles.” However, said method previously used a low level hook to theme (which caused issues with a semi-untether), icon file names changed every app update (breaking themes) and it also got in the way of previews by requiring more processing to scan for these legacy file names. To alleviate these issues, we encourage new themes to use IconBundles to theme home screen icons as it is not only easier for themers but is also more reliable and efficient. Now for older themes, Anemone doesn’t natively support the legacy bundles for home screen icons due to the issues with caching and previews. We’ve been converting these themes to IconBundles on the first respring as part of Optitheme (see /var/stash/anemonecache/ANEMIBConvert) – however that makes that first respring slower due to the conversion taking place. Hence why we do not want to keep this around forever; unfortunately themes that are truly legacy would break when this is removed, hence why the warning is displayed on these themes.

Moving forward, we have made the nightlies private; too many people were running the beta without realizing they had a beta installed (or knowing how to report issues with the beta appropriately), creating a problem with the situation above. However, we will be accepting requests that have been sent from people who fully understand what a beta is and how issues with betas should be reported.

If anyone has any questions regarding this, please feel free to contact me at https://twitter.com/coolstarorg (just read the whole thing first, pretty please)