They will be set to NSUserDefaults standard container which will the app itself so that related frameworks can access it that don't use TPCPreferencesUserDefaults
- Removed all deprecated Textual code. It is likely there are no plugins that were using this. The minimum plugin version will be bumped up just incase to force all plugins to be recompiled to load.
- Removed a bunch of macros and initialization check logic that was previously in place to protect against plugin developers trying to abuse the codebase. We need to stop caring about that because it just adds unnecessary overhead.
- Many initializers were cleaned up. -init is now expressly marked as unavailable and throws a proper exception where appropriate.
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
GCC preprocessor configuration flag was a bit cumbersome to work with. A pre-build script now abstracts known feature flag configuration definitions into macros that appear in a public header file.
All Mojave appearances have been renamed to "CommonModern" and Mojave and Big Sur inherits from this as the changes that will be made for Big Sur will be minimal.
For enums, place case at end instead of in middle. For example: IRCClientConnectNormalMode turns into IRCClientConnectModeNormal
For constant strings, when appropriate, use an extensible string enum. Either one of those from Foundation (NSNotificationName, NSErrorDomain) or typedef our own.
• Added TLOLocalization.swift which is a Swift implementation of the localization system. TXTLS() and its sister functions are bridged to this implementation.
• The TLOLanguagePreferences class no longer exists. This class was used only as a convenience to TXTLS() and its sister functions. I don't know of any and/or why a plugin may access these, so they were not deprecated.
• The TLOLanguagePreferences files have been renamed to TLOLocalization as the latter better suites its purpose.
• In cases where we know for sure that nullability warning is ignorable, cast to non-null.
• Added TXLocalizationNotNeeded() which inlines a string to represent it as localized even though it's not in reality.
• Nullability is now specified for some methods that can in fact return nil but were previously not annotated as such.
In theory user needs Xcode 10 at minimum already, which is limited to High Sierra or later. That's because we have Swift 4.2 specific code which will not compile on Xcode 9 or earlier.
For Xcode 9 support, see stable branch (master).
Many resources have been added to Textual with little thought for long term maintenance. This commit is an overdue overhaul of the entire project. The goals of this overhaul was to introduce as much consistency as possible to the project.
Some notable changes:
• Code signing identity file has moved to "Configurations/Build"
• All build configuration files, including entitlements, moved to "Configurations"
• Source code for the app has moved to "Sources/App"
• Shared source code has moved to "Sources/Shared"
• Source code for extensions have moved to "Sources/Plugins"
• The project file for the app has moved along with its source code. It's recommended to use the Textual.xcworkspace workspace file.
• Build scripts are no longer packaged within the project files.
• Folders are now used throughout most projects instead of groups.
• Removed a lot of redundant framework linking.
• The preference panel sample plugin has been modified to use standard Cocoa facilities instead of those that are project specific. e.g. NSUserDefaults and NSLog() instead of TPCPreferencesUserDefaults and LogToConsole()