DCOAboutWindow is a replacement for the standard About dialog.
It adds the option to open acknowledgments and visit the website by clicking a button.
You can point to and maintain a custom Acknowledgments.rtf
file, or you can use a script like Acknowledge to generate it for you.
Via cocoapods
Add the following line to your Podfile:
pod 'DCOAboutWindow'
Then run pod install
and you're set.
Via Carthage
Add the following to your Cartfile:
github "DangerCove/DCOAboutWindow"
github "DangerCove/DCOTransparentScroller"
Then run carthage update
and you're set.
Clone this repo and add files from DCOAboutWindow
to your project.
The project relies on DCOTransparentScroller, so include that too.
I've made a sample project that accompanies this tiny guide.
Import DCOAboutWindowController
:
#import <DCOAboutWindow/DCOAboutWindowController.h>
Instantiate DCOAboutWindow
:
// Note: make sure self.aboutWindowController is retained
self.aboutWindowController = [[DCOAboutWindowController alloc] init];
Create an IBAction to display the window:
- (IBAction)showAboutWindow:(id)sender {
[self.aboutWindowController showWindow:nil];
}
Hook it up to the 'About [app name]' menu item or a button.
You can change values by setting properties on DCOAboutWindowController
:
/**
* The application name.
* Default: CFBundleName
*/
@property (copy) NSString *appName;
/**
* The application version.
* Default: "Version %@ (Build %@)", CFBundleVersion, CFBundleShortVersionString
*/
@property (copy) NSString *appVersion;
/**
* The copyright line.
* Default: NSHumanReadableCopyright
*/
@property (copy) NSString *appCopyright;
/**
* The credits.
* Default: [[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"rtf"];
*/
@property (copy) NSAttributedString *appCredits;
/**
* The URL pointing to the app's website.
* Default: none
*/
@property (strong) NSURL *appWebsiteURL;
/**
* The path to the file that contains the acknowledgments.
* Default: [[NSBundle mainBundle] pathForResource:@"Acknowledgments" ofType:@"rtf"];
*/
@property (nonatomic, copy) NSString *acknowledgmentsPath;
/**
* If set to YES acknowledgments are shown in a text view, inside the window. Otherwise an external editor is launched.
* Default: NO;
*/
@property (assign) BOOL useTextViewForAcknowledgments;
You can pre-process the NSAttributedString
containing the app credits using a delegate. This is great for making the about window play nice with Mojave's Dark Mode. Here's how it works:
// Conform to the DCOStringPreprocessingProtocol
@interface DCDAppDelegate() <DCOStringPreprocessingProtocol>
self.aboutWindowController = [[DCOAboutWindowController alloc] init];
// Set the delegate
self.aboutWindowController.delegate = self;
#pragma mark - DCOStringPreprocessingProtocol
- (NSAttributedString *)preprocessAppCredits:(NSAttributedString *)appCredits {
NSMutableAttributedString *mutableCredits = [appCredits mutableCopy];
NSDictionary *attributes = @{ NSForegroundColorAttributeName : [NSColor textColor] };
[mutableCredits addAttributes:attributes range:NSMakeRange(0, mutableCredits.length)];
return [mutableCredits copy];
}
// Optionally pre-process the acknowledgments as well
- (NSAttributedString *)preprocessAppAcknowledgments:(NSAttributedString *)appAcknowledgments {
NSMutableAttributedString *mutableAcknowledgments = [appAcknowledgments mutableCopy];
NSDictionary *attributes = @{ NSForegroundColorAttributeName : [NSColor textColor] };
[mutableAcknowledgments addAttributes:attributes range:NSMakeRange(0, mutableCredits.length)];
return [mutableAcknowledgments copy];
}
Thanks to @balthisar for adding this.
Add the following lines to your Localizable.string to change these values, or localize them.
/* Version %@ (Build %@), displayed in the about window */
"Version %@ (Build %@)" = "v%@ (%@)";
/* Caption on the 'Visit the %@ Website' button in the about window */
"Visit the %@ Website" = "Visit %@'s Website";
/* Caption of the 'Acknowledgments' button in the about window */
"Acknowledgments" = "Acknowledgments";
/* Caption of the 'Credits' button in the about window when acknowledgments are shown when useTextViewForAcknowledgments is YES. */
"Credits" = "Credits";
Be creative. DCOAboutWindow should be a flexible, easy to use way to make the About Window for your app look pretty. Make sure your changes don't break existing functionality without good reason.
To create a pull request:
- Fork the repo;
- Create a new branch (
git checkout -b your-feature
); - Add your code;
- Commit all your changes to your branch;
- Push it (
git push origin your-feature
); - Submit a pull request via the GitHub web interface.
Let me know if you made far going modifications by including your project in this section. Add yourself to the list and send me a pull request.
- Your project on GitHub - A short description.
Related apps, tools and scripts that extend DCOAboutWindow's functionality.
- Acknowledge - Generates a single
Acknowledgments.rtf
from CocoaPods and custom markdown files.
- Fix typo in preprocessor delegate method name.
- Implement alternative for deprecation.
- Make version string selectable.
- Support for Carthage added by @hankinsoft.
- Support for Dark Mode added by @balthisar.
- Optionally display acknowledgments inside the window, instead of through an external editor.
Set useTextViewForAcknowledgments
to YES
to enable this feature.
- Improve Auto Layout constrains. The image view now remains the same width, while the text fields can become wider.
- Improved localization support
- Improved auto-layout constraints to handle resizing better
You can toggle (off by default) resizing by setting the NSWindow
's styleMask
. Check out the example project to see how this works.
- Switched to using 'Acknowledgments' instead of 'Acknowledg_e_ments' to be more consistent and prevent incompatibility with Acknowledge. NOTE: Make sure you change the filename of your acknowledgments and any setters/getters.
- Initial release.
New BSD License, see LICENSE
for details.