- 2 May 2018
- 79
- 71
- 18
- User Role
- Developer
- Repository
- http://samguichelaar.com
- Support Email
- samt[email protected]
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
Fixes
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:
discord.gg
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
- Added APT installation and downloading suppport
- Added ATATPPackageInstallTask for install/upgrade apt tasks
- Added ATDataTaskOperation as a general purpose download operation for use in any NSOperationQueue
- Added Progress view controller for source import
- Added a dependency tree name generator
- Added changelog screen which is shown after updates to let the user know what changed
- Added check for Checkra1n jailbreak to automatically add the dedicated substrate repository
- Added class type to ATTask for simpler class comparison (might not be working without implementation)
- Added class variables for convenience in ATAPTManager
- Added cleanUpArchivesIfNeeded to remove deb files after installation
- Added convenience initializer for new sources (soo00oo much less duplicate code)
- Added downloadPackageWithIdentifier: method to ATRPackages
- Added full support for resolving dependencies using APT
- Added hasTaskOfType:excluding method to ATPipelineManager
- Added iAmGRoot source code to the project, and removed the framework
- Added initial support for LZMA data type recognition
- Added install queuing logic to ATPackageDownloadTask to queue install after last download
- Added jailbreakTool to ATPlatform (unknown, unc0ver, electra, chimera, checkra1n)
- Added kATErrorATPScriptError
- Added logging for all these cases
- Added more complete error handling for decompression of GZ/BZ2
- Added new ATPaletteManager and accompanying ATPalettedViewController
- Added nil checks to the Sileo login
- Added option for StreamingOutput to the verbose view (keeps formatting)
- Added progress view for source import from settings
- Added refreshSources:(NSArray *) method for refreshing only specific sources
- Added removeIconForLocation: to remove old icons if an icon URL has been changed since the icon was downloaded
- Added sandbox management methods
- Added super simple BZ2 and GZ decompression methods
- 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)
- Added support for failed fetch results for Sileo purchases
- 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)
- Added support for setting SourceCell icons without reloading the tableview or Cells
- Added support for source icon fetching/caching in ATPersistentImageCache
- Added url verification to the Sileo login
- Added welcome screen
- Adds initial support for a centralized theme management design
- Block confirm queue button while tasks are running or dependencies are being resolved
- Changed setup order to Welcome->DarkMode->Login->RepoImport
- Changed the respring button to solid blue & changed button labels
- Cleaned up controller navigation for the setup views
- Cleaned up unused code in ATSourceRefresh
- Cleaner error alert for APT
- Connected all the outlets for optimisation
- Default icons are returned immediately, and updated once the remote icon is downloaded
- Disable queue confirm button until all dependencies are resolved
- Disabled interactive dismissal (iOS 13 only) of setup view controllers
- Disabled source refreshing if setup is not complete, setup will always trigger a refresh on completion
- Ensure default sources for jailbreak are installed
- Force full source refresh if the source has zero packages, or encountered an error during the previous refresh
- Icon URLs that are invalid (404) will be cached so we don’t keep trying to fetch non existent icons from servers
- Icon fetching has its own low cost OperationQueue
- Icons are automatically freed from memory if more memory is needed elsewhere
- Icons are reserved in memory for faster read time
- Icons freed from memory will automatically load from disk when needed again
- Icons in the app bundle will receive the same memory/read optimizations as the remote server icons
- Icons will NEVER fetch from the server more than once
- Improve welcome screen showing logic
- Improved APT output form ATAPTManager
- Improved Setup repo import to help reduce lag/freezing while importing sources
- Improved look of the status bar during transitions between main and secondary views
- Improved min / max os version retrieval by removing unnecessary steps
- Installer can now be built for the iOS simulator
- Lowered Pipeline thread priority, a lower priority for the pipeline might help with UI lag during refreshing sources
- Lowered verbose view text size just a touch
- Made the new build cleaning the database and forcing a new full source refresh
- Minor decompression memory optimizations
- Minor optimizations to various ManageViewcontroller methods
- Modified ATSourceRefresh to leverage the new NSURLRequest method
- Moved all jailbreak specific source adding logic to ATRPackageManager
- 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
- Redesigned APT verbose output using a parser
- Reduced max operation count to 10 (from 30) to see if it improves performance while refreshing sources (I'm not sure)
- Refactored ATAPTManager after past days of expanding
- Refactored ATRPackageManager initialization
- Refactored the queue UI to use APT dependency tree
- Removed ATPipeline since its no longer used in the project
- Removed libArchive from the project
- Removed minizip
- Rescans the status file for new/changed packages whenever the app enters foreground
- Rewrote VersionCompare backend using APT source code ported to C from C++
- Rewrote jailbreak detection code and ensure default repos for current jailbreak tool are installed
- Show the post install actions even when APT fails, just incase some packages succeeded
- Source refresh speed is 10-50 times faster than before
- SourceCells are now updated with remote icons without needing to reload the tableview, or the cell itself.
- Switched to native compression lib for handling our decompression needs (its crazy fast)
- Switched version compare method for incompatible packages check
- 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
- The only time a source icon will ever refetch from the server is when the icon cache is manually cleared by the user
- Updated APT configuration file writer
- Updated info text for the RepoImportProgressViewController to warn about the time needed for the process
- Updated verbose output for APT tasks
- 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
- allocations are nearly zero after the initial load of the cache
- fix any and all version compare issues as the implementation is identical to that of APT
- supports the following statuses (installed, half-installed, half-configured, unpacked)
- Removed several dependencies by writing native methods for it
- Reduced freezing on Manage view
Fixes
- Fixed "Unable to parse... release file" error
- Fixed APT sources and packages not being removed when removing sources
- Fixed Duplicate sources being added for jailbreak tool detection
- Fixed Get buttons not refreshing after uninstalling a package
- Fixed Imported sources not always appearing until Installer is relaunched (hopefully)
- Fixed Login keyboard showing swipe alert on iOS 13
- Fixed New Packages By Followed Developer alert showing insane numbers
- Fixed Packages/Release file encoding
- Fixed UINavigationBars with jumpy and inconsistent appearance
- Fixed an issue where APT sandbox would not update if deleted due to new network checks
- Fixed an issue where Packages files would not be uncompressed causing source refresh to hang forever
- Fixed auto dismissal of url scheme task alerts
- Fixed auto dismissal of url scheme task alerts
- Fixed bug with importing repos/packages from url
- Fixed configuration file usage in ATAPTManager
- Fixed confirmation screen letting apt to try to install an incompatible package (due to firmware dependency)
- Fixed constraints mess
- Fixed conversion from NSUInteger(unsigned long) to int (long) to resolve integer precision issues
- Fixed crash after successful login to Chariz
- Fixed crash due to incorrectly flagging decompression as failed
- Fixed crash due to null version string in VersionCompare
- Fixed crash due to view object not being set
- Fixed crash when deleting source in sandbox builds
- 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)
- Fixed crash when user hasn't bought the package but tries to install it
- Fixed downloading an incompatible or removed package
- Fixed iOS 13 keyboard showing swipe alert when showing keyboard first time on app launch
- Fixed installation support in ATAPTManager
- Fixed issue where a package may not be found by the queue due to Case Sensitive searches
- Fixed issue where installer would crash due to Realm incorrect thread when using the new refreshSources: method
- Fixed issue where update badge would remain after updating packages
- Fixed issue with new jailbreak detection causing duplicate sources
- Fixed keyboard showing automatically when showing the source info view (now only shows when adding a new source)
- Fixed long running task usage in ATAPTManager
- Fixed missing StringEncoding class left out
- Fixed naming format issue for repos that use distro's
- Fixed packages not being parsed due to the firmware dependency being in an alternate dependency (|)
- Fixed partially installed packages not being shown in installer
- Fixed path issue with ATPackageDownloadTask resulting in unsaved debs
- Fixed post install actions not being added with APT installs
- Fixed root not being restored on the Source Info view after showing the keyboard
- 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
- Fixed some scrollviews not bouncing
- Fixed status bar background appearing even with the new modal presentation
- Fixed status bar being transparent in secondary views and fixed source vc nav bar in dark modes
- Fixed status bar style change delays
- Fixed status bar weird appearance in the whole app
- Fixed the queue view not being updated when dismissing a new modal screen
- 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
- Fixed updated packages remaining in the changes tab after they've been updated
- Fixed updated packages remaining in the changes tab after updating
- 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:
Discord - A New Way to Chat with Friends & Communities
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.
Last edited: