Installer 5 release candidate has been released for beta testing

Sammy Guichelaar

Administrator
Staff member
Administrator
Developer
2 May 2018
51
19
8
The Netherlands
apptapp.me
Github
https://github.com/sammyguichelaar
User Role
Developer
Repository
http://samguichelaar.com
Support Email
[email protected]
Banner1.png

We are extremely proud to announce Installer 5 release candidate 1.
As of today, Installer uses a special implementation of APT. This means that dependency, conflicts, versioning, provides, replaces are all handled by APT, and thus should run without any unforeseen errors. Because of this, Installations, removals and very soon downgrades should run without any issues whatsoever (other than the issues you'd also have on other package managers)


Why did we initially launch without APT?

Installer's main goal was always to have a package manager specifically built for iOS & using native code. From the very first version of Installer, released in 2007, to the early beta of Installer 5, released in August this year. The build you have been using until today did not use APT at all. All package management calculations were done by native ObjC code we wrote ourselves. While it worked great for most cases, there was the odd case were it would simply fail, especially with nested dependencies or conflicts.
While trying to fix these bugs, we decided that it was inefficient and the bugs were not solved quick enough. To add to that, we had to prepare a release for Checkra1n. We decided to look at the feasibility of implementing APT.

We always tried to avoid using APT, as has several downsides, especially with speed. As most of you know, Installer is ridiculously fast, in fact, it is the fastest package manager that has ever been for iOS. (See below) However speed is worthless if the installation method is not always reliable.
We eventually decided upon implementing a sandboxed APT environment. As a result of this method, we were able to retain our own methods for downloading the packages & indexing them in the database, and use APT only for the areas where it excels.


What does this mean for Installer?

Installer is now very stable in terms of package management, which, you know, is kinda nice for a package manager :)
Installer should still be just as fast as before. Installation may be a fraction slower however it is stable.
We as a team can now work on other things, such as improving performance even further, implementing new features (3 of which will be groundbreaking), and working on our other projects which had been placed on the back-burner until now.


Does this mean the APT-less version of Installer is dead?

No. Well at least, not for now. We will evaluate this build over a long period, and merge all changes to the master branch in the APT-less branch. We will likely fix the installation (mostly nested conflicts & dependency) issues for the APT-less version. There could still be a situation where the APT-less version is better suited or even required, especially for future jailbreaks for devices not covered by the Checkm8 bootrom exploit.


We hope you are just as excited as we are about this change!
You can download the new version of Installer at our discord if you apply for the beta tester role.


APT is by far the biggest change in Installer, but there are a lot of other changes too, 150+ notable changes to be exact (and a lot of smaller ones which aren't specifically mentioned).


New & Improved

  1. Added APT installation and downloading suppport
  2. Added ATATPPackageInstallTask for install/upgrade apt tasks
  3. Added ATDataTaskOperation as a general purpose download operation for use in any NSOperationQueue
  4. Added Progress view controller for source import
  5. Added a dependency tree name generator
  6. Added changelog screen which is shown after updates to let the user know what changed
  7. Added check for Checkra1n jailbreak to automatically add the dedicated substrate repository
  8. Added class type to ATTask for simpler class comparison (might not be working without implementation)
  9. Added class variables for convenience in ATAPTManager
  10. Added cleanUpArchivesIfNeeded to remove deb files after installation
  11. Added convenience initializer for new sources (soo00oo much less duplicate code)
  12. Added downloadPackageWithIdentifier: method to ATRPackages
  13. Added full support for resolving dependencies using APT
  14. Added hasTaskOfType:excluding method to ATPipelineManager
  15. Added iAmGRoot source code to the project, and removed the framework
  16. Added initial support for LZMA data type recognition
  17. Added install queuing logic to ATPackageDownloadTask to queue install after last download
  18. Added jailbreakTool to ATPlatform (unknown, unc0ver, electra, chimera, checkra1n)
  19. Added kATErrorATPScriptError
  20. Added logging for all these cases
  21. Added more complete error handling for decompression of GZ/BZ2
  22. Added new ATPaletteManager and accompanying ATPalettedViewController
  23. Added nil checks to the Sileo login
  24. Added option for StreamingOutput to the verbose view (keeps formatting)
  25. Added progress view for source import from settings
  26. Added refreshSources:(NSArray *) method for refreshing only specific sources
  27. Added removeIconForLocation: to remove old icons if an icon URL has been changed since the icon was downloaded
  28. Added sandbox management methods
  29. Added super simple BZ2 and GZ decompression methods
  30. Added support for dismissing the RepoImportProgressViewController from a custom presenting view (set controllerToDismiss property before presenting the controller, leaving the property nil will dismiss the appropriate controller for the setup process completion)
  31. Added support for failed fetch results for Sileo purchases
  32. Added support for refreshing a specific list of sources using the RepoImportProgressViewController (set sourcesToRefresh property before presenting the controller, leaving the property nil will refresh all sources)
  33. Added support for setting SourceCell icons without reloading the tableview or Cells
  34. Added support for source icon fetching/caching in ATPersistentImageCache
  35. Added url verification to the Sileo login
  36. Added welcome screen
  37. Adds initial support for a centralized theme management design
  38. Block confirm queue button while tasks are running or dependencies are being resolved
  39. Changed setup order to Welcome->DarkMode->Login->RepoImport
  40. Changed the respring button to solid blue & changed button labels
  41. Cleaned up controller navigation for the setup views
  42. Cleaned up unused code in ATSourceRefresh
  43. Cleaner error alert for APT
  44. Connected all the outlets for optimisation
  45. Default icons are returned immediately, and updated once the remote icon is downloaded
  46. Disable queue confirm button until all dependencies are resolved
  47. Disabled interactive dismissal (iOS 13 only) of setup view controllers
  48. Disabled source refreshing if setup is not complete, setup will always trigger a refresh on completion
  49. Ensure default sources for jailbreak are installed
  50. Force full source refresh if the source has zero packages, or encountered an error during the previous refresh
  51. Icon URLs that are invalid (404) will be cached so we don’t keep trying to fetch non existent icons from servers
  52. Icon fetching has its own low cost OperationQueue
  53. Icons are automatically freed from memory if more memory is needed elsewhere
  54. Icons are reserved in memory for faster read time
  55. Icons freed from memory will automatically load from disk when needed again
  56. Icons in the app bundle will receive the same memory/read optimizations as the remote server icons
  57. Icons will NEVER fetch from the server more than once
  58. Improve welcome screen showing logic
  59. Improved APT output form ATAPTManager
  60. Improved Setup repo import to help reduce lag/freezing while importing sources
  61. Improved look of the status bar during transitions between main and secondary views
  62. Improved min / max os version retrieval by removing unnecessary steps
  63. Installer can now be built for the iOS simulator
  64. Lowered Pipeline thread priority, a lower priority for the pipeline might help with UI lag during refreshing sources
  65. Lowered verbose view text size just a touch
  66. Made the new build cleaning the database and forcing a new full source refresh
  67. Minor decompression memory optimizations
  68. Minor optimizations to various ManageViewcontroller methods
  69. Modified ATSourceRefresh to leverage the new NSURLRequest method
  70. Moved all jailbreak specific source adding logic to ATRPackageManager
  71. No more firmware check during status file check, fixed a dependency parsing issue that caused packages to not be indexed if a firmware dependency isn't respected in the first OR dep array index
  72. Redesigned APT verbose output using a parser
  73. Reduced max operation count to 10 (from 30) to see if it improves performance while refreshing sources (I'm not sure)
  74. Refactored ATAPTManager after past days of expanding
  75. Refactored ATRPackageManager initialization
  76. Refactored the queue UI to use APT dependency tree
  77. Removed ATPipeline since its no longer used in the project
  78. Removed libArchive from the project
  79. Removed minizip
  80. Rescans the status file for new/changed packages whenever the app enters foreground
  81. Rewrote VersionCompare backend using APT source code ported to C from C++
  82. Rewrote jailbreak detection code and ensure default repos for current jailbreak tool are installed
  83. Show the post install actions even when APT fails, just incase some packages succeeded
  84. Source refresh speed is 10-50 times faster than before
  85. SourceCells are now updated with remote icons without needing to reload the tableview, or the cell itself.
  86. Switched to native compression lib for handling our decompression needs (its crazy fast)
  87. Switched version compare method for incompatible packages check
  88. Tasks will now be allowed up to 10 minutes to complete after closing the app (unless it is quit from the app switcher) this will allow for refreshing sources, or even installing packages if the user switches apps while a task is running
  89. The only time a source icon will ever refetch from the server is when the icon cache is manually cleared by the user
  90. Updated APT configuration file writer
  91. Updated info text for the RepoImportProgressViewController to warn about the time needed for the process
  92. Updated verbose output for APT tasks
  93. View hierarchy in the Interface builder should always have the (TableView / ScrollView / CollectionView) as the first object in the list so that the navbars properly detect the delegate scrollview for collapsing behaviour
  94. allocations are nearly zero after the initial load of the cache
  95. fix any and all version compare issues as the implementation is identical to that of APT
  96. supports the following statuses (installed, half-installed, half-configured, unpacked)
  97. Removed several dependencies by writing native methods for it
  98. Reduced freezing on Manage view

Fixes

  1. Fixed "Unable to parse... release file" error
  2. Fixed APT sources and packages not being removed when removing sources
  3. Fixed Duplicate sources being added for jailbreak tool detection
  4. Fixed Get buttons not refreshing after uninstalling a package
  5. Fixed Imported sources not always appearing until Installer is relaunched (hopefully)
  6. Fixed Login keyboard showing swipe alert on iOS 13
  7. Fixed New Packages By Followed Developer alert showing insane numbers
  8. Fixed Packages/Release file encoding
  9. Fixed UINavigationBars with jumpy and inconsistent appearance
  10. Fixed an issue where APT sandbox would not update if deleted due to new network checks
  11. Fixed an issue where Packages files would not be uncompressed causing source refresh to hang forever
  12. Fixed auto dismissal of url scheme task alerts
  13. Fixed auto dismissal of url scheme task alerts
  14. Fixed bug with importing repos/packages from url
  15. Fixed configuration file usage in ATAPTManager
  16. Fixed confirmation screen letting apt to try to install an incompatible package (due to firmware dependency)
  17. Fixed constraints mess
  18. Fixed conversion from NSUInteger(unsigned long) to int (long) to resolve integer precision issues
  19. Fixed crash after successful login to Chariz
  20. Fixed crash due to incorrectly flagging decompression as failed
  21. Fixed crash due to null version string in VersionCompare
  22. Fixed crash due to view object not being set
  23. Fixed crash when deleting source in sandbox builds
  24. Fixed crash when downloading paid packages (The crash was due to using a property that was not assigned thus causing a crash adding its value to a dict)
  25. Fixed crash when user hasn't bought the package but tries to install it
  26. Fixed downloading an incompatible or removed package
  27. Fixed iOS 13 keyboard showing swipe alert when showing keyboard first time on app launch
  28. Fixed installation support in ATAPTManager
  29. Fixed issue where a package may not be found by the queue due to Case Sensitive searches
  30. Fixed issue where installer would crash due to Realm incorrect thread when using the new refreshSources: method
  31. Fixed issue where update badge would remain after updating packages
  32. Fixed issue with new jailbreak detection causing duplicate sources
  33. Fixed keyboard showing automatically when showing the source info view (now only shows when adding a new source)
  34. Fixed long running task usage in ATAPTManager
  35. Fixed missing StringEncoding class left out
  36. Fixed naming format issue for repos that use distro's
  37. Fixed packages not being parsed due to the firmware dependency being in an alternate dependency (|)
  38. Fixed partially installed packages not being shown in installer
  39. Fixed path issue with ATPackageDownloadTask resulting in unsaved debs
  40. Fixed post install actions not being added with APT installs
  41. Fixed root not being restored on the Source Info view after showing the keyboard
  42. Fixed some repositories not being able to be refreshed due to bug in logic which made Installer thing the downloaded file was the release file
  43. Fixed some scrollviews not bouncing
  44. Fixed status bar background appearing even with the new modal presentation
  45. Fixed status bar being transparent in secondary views and fixed source vc nav bar in dark modes
  46. Fixed status bar style change delays
  47. Fixed status bar weird appearance in the whole app
  48. Fixed the queue view not being updated when dismissing a new modal screen
  49. Fixed top anchor for all scrolling views to superview.top (not safe-area.top) for collapsable navbars to work properly as per the User Interface Guidelines
  50. Fixed updated packages remaining in the changes tab after they've been updated
  51. Fixed updated packages remaining in the changes tab after updating
  52. Fixed wrong version string took for the min / max os version

Join the discord to test the beta
If you want to test Installer 5 RC1 before its released publicly, join our discord & apply for the beta-tester role:
 
Last edited:
  • Like
Reactions: badboy210290

Sammy Guichelaar

Administrator
Staff member
Administrator
Developer
2 May 2018
51
19
8
The Netherlands
apptapp.me
Github
https://github.com/sammyguichelaar
User Role
Developer
Repository
http://samguichelaar.com
Support Email
[email protected]
Update on RC1
Yesterday our beta testers on discord (see post above) started testing RC1.
The results were overwhelmingly positive, with most users reporting vastly improved stability & performance.

During testing, our users discovered 3 bugs which we intend to fix before release.

Bugs to be fixed before release
  1. [Cause known] [Currently working on the fix] Crash during initial setup.
  2. [Cause known] [Currently working on the fix] Rare crash when queueing packages.
  3. [Cause not known] One user reported an Issue where Installer could not find the packages it was tasked to Install, possibly due to a logic error where some repositories are not parsed correctly.
Causes of the bugs
The cause of issue #1 & #2 is known and should be fixed relatively quick. The third issue is a bit harder to fully narrow down seeing how it's very rare. We will be testing with the user in question and hope to solve the issue within a few hours.

Help us test
If you want to help us test before we release the build to the public, feel free to join our discord (link in the main post) and apply for the beta tester role.
Please note, only apply for the beta tester role if:
- You have Cr4shed installed
- You know how to share crash logs
- You know how to report bugs
 
Last edited: