Gives dictionaries greater context of which operation is in progress
As part of this, during copies, defaults are not stripped. Copy objects whole. Only strip defaults when we want to save to disk or cloud.
The user is now notified each launch of migration until they acknowledge the alert by clicking Continue.
When migrating files, extensions are no longer copied. Copying them would place them in quarantine which we don't want. Instead symbolic links are created. To prevent old files from dangling if symbolic link is deleted, old extensions are pruned each launch.
Removed files are no longer moved to Trash.
This is a work in progress to move Standard Release and Debug build schemes to sandboxed environment.
To accomplish this, the group identifier has changed to com.codeux.apps.textual-common so that it does not clash with the bundle identifier of the app. Because of this change, all contents from the previous group container has to be migrated. TPCResourceManager has been extended to accomplish this.
TPCResourceManager will automatically copy files to the new group container then prompt the user asking if they want to delete the old. File migration is tuned so that failure to copy one file does not stop the entire operation.
It will also migrate preference keys.
TPCResourceManager will also be setup to migrate Mac App Store installations at a later date using nearly the same logic patterns. That is not implemented yet.
All classes that have an immutable parent with a mutating child is now backed by either XRPortablePropertyObject or XRPortablePropertyDict. These base classes, which are declared by Cocoa Extensions, abstract away A LOT of logic involved for initialization, copying, and mutating properties.
A lot of this logic was loosely copy and pasted between classes. Now it is accessible and highly configurable in one location.
As part of this change, all classes that inherit from these base classes now return references on -copy if the underlying object is immutable already. There are some classes that do a little state mutation internally, even if outwardly they are immutable. Risk has been assessed and having the state information mutated and shared between what are supposed to be copied instances will do no harm.
- NSObject helpers for sync/async calls using GCD were deprecated as it just makes things slower
- NSObjectIsEmpty() was deprecated because it was lazy and made things slower
I probably should eventually convert the colors saved in registered defaults to NSKeyedArchiver. That is not critical change to make at this time. I'm sure I will not come to regret these words. 🤪
• Themes now support varieties. A theme can now contain multiple, separate designs with their own CSS, JavaScript, templates, and settings. The theme engine has been rewritten from the ground up to leverage this new system to automatically change the theme when the appearance of the app changes (dark or light). The new system was designed in such a way that it can permit unlimited varieties within one theme, but that is for a later time. The user cannot select which they want at this time aside from changing the app or system appearance.
• The new system is 100% backwards compatible.
• The new system is designed to allow inheritance between the theme and its varieties. A CSS, JavaScript, template, or setting file placed within the root of the theme will be loaded first with each variety's copy of these files loaded second.
• Varieties work by placing a named folder within a "Varieties" subfolder of the theme. Within each named folder can be any files needed for that variety. A variety does not require a file that is already inherited from the root of the theme. But, for example,
if a design.css file does not exist in the root of the theme, then the variety is required to have one, else it wont be usable.
• Each theme is now contained within a self managed TPCTheme object. This object is manages the loading of the theme from disk, monitoring of all files within it for changes, and choosing the best variety (if there are multiple) when the appearance changes.
• The baseLayout.mustache template of the default templates has been modified to allow for multiple CSS and JavaScript files.
• The Simplified and Tomorrow themes have been modified to use varieties for their dark and light appearances.
This commit is the base of the changes to be made to the theme system. It is incomplete as there are still some TODOs to resolve. Those have been labeled in the source code.
Notable changes:
Notable changes (incomplete):
• Changed all projects minimum target to OS X 10.12
• All xib files and custom view source files have been modified to use auto layout, NSGridView, NSStackView, and other modern features wherever possible. Hacks such as specifying heights, offsets, etc. for multiple appearances spanning multiple operating systems are no longer needed because auto layout and related systems are solid back to our target.
• In response to system-wide changes made in macOS Big Sur the width of the Preferences window has been expanded to a minimum 670.
• Deprecated Cocoa APIs have been replaced with their modern equivalents.
• The System Profiler plugin has been modified to simplify the process of requesting model information from Apple. The previous class (TPISystemProfilerModelIDRequestController), now named TPISystemProfilerModelRequest, at one time used XML parser to retrieve value of a single element. This made maintainability difficult. It now uses a simple regular expression.
• Optional extensions (Blowfish Encryption, Caffeine, and Wiki Style Link Parser) had their versions bumped and repackaged into installer. Their xib files were modified to accommodate the new width of Preferences.
• The Blowfish Encryption extension has been updated to libressl 3.1.4.
• All code related to the never completed "Buddy List" dialog has been stripped. There is no interest in continuing development of it.