Implemented moot delegate methods and changed NSToolbar item implementation use slightly to get rid of console warnings regarding deprecations and other stuff.
Extracted bulk of migration logic out of TPCResourceManager into its own class named TPCSandboxMigration.
Some logic of the migration remained in a private category of TPCResourceManager as it makes sense given the methods are related to resources / file access.
The entire migration system has been modified to be completely modular. Everything relies on the unified `installation` argument to perform migration on any number of containers.
The container for Standard Release was renamed to conform to Apple's standards. No more warnings. The migrator includes an entry for migrating beta users which will be removed before this goes into stable.
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.
With switch to Sparkle 2, some things had to change in the codebase.
For the sake of simplicity, the feed URL and update interval has been relocated to the Info.plist. Sparkle now supports a beta channel in one feed so that will be used instead of setting the feed URL on each launch. Not setting this manually each launch does mean that beta updates do not receive a shortened update check interval. But that is not a big deal. Beta updates are far apart these days.
Sparkle 2 does not have a singleton either. I wasn't sure if I wanted to create my own or bind it to the master controller. I ended up doing the latter as it is not something that will need to be accessed with great frequency. Only by the Preferences dialog and the menu controller.
I was unsure about leaving it in the public header because why do plugins need access to it? In the end I placed it there because they could have always just accessed the singleton if they wanted to abuse it. Not having to import private header when we need to access it internally cuts down on cost.
All member list logic inside IRCChannel has been abstracted away into IRCChannelMemberList.
IRCChannelMemberListController, which is an array controller, is now bound to the list in the main window to act as the data source.
The controller is weakly linked in IRCChannelMemberList when the channel is selected. This allows IRCChannelMemberList to maintain the UI in addition to its internal list.
The content of the controller shares 1:1 mutable array to IRCChannelMemberList's internal list. This simplifies modifications to the UI as we know with certainty that the index of the member in the internal list will be that of the member in the UI.
The methods declared by IRCChannel still exists, as a proxy, to an instance of IRCChannelMemberList strong referenced by the -memberInfo property of the channel.
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.
• 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 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()