CoreLib is a collection of reusable Objective-C source code to make various aspects of developing Mac and iOS applications easier, faster & safer.
CoreLib is designed so you can just use the parts you want/need and are not forced to adopt all of it.
Just #import CoreLib.h in your .pch (or in files that use it). Additional Classes in the Mac/ and iOS/ folders can be included as needed.
CoreLib has these components:
categories on base Cocoa like NSArray, NSData, NSObject, NSString, etc for new functionality or syntactic sugar (AppKit+CoreCode, Foundation+CoreCode)
for iOS) subclasses for UIActionSheet, UIAlertView, etc to provide a more convenient block based interface or new view controllers (iOS/JM*)
for Mac) convenience classes for e-mail sending, getting host information, managing login items, showing styled font lists, etc (Mac/JM*)
for Mac) subclasses for WebView, NSButton, NSTextView as well as custom view controllers to do many common tasks easier e.g. just configure properties in IB without any code (Mac/JM*)
CoreLib provided much important stuff earlier than Apple, which is still useful on older Xcode versions where this is not supported (API availability warnings, statically typed collections, properties for getters/setters, object subscripting)
CoreLib up to version 1.8 requires Xcode 6 and deploys back to Mac OS X 10.6 / iOS 6
CoreLib version 1.9 requires Xcode 7 and deploys back to Mac OS X 10.6 / iOS 7
CoreLib version 1.10 and above requires Xcode 8 and deploys back to Mac OS X 10.6 / iOS 8
CoreLib version 1.14 and above requires Xcode 9 and deploys back to Mac OS X 10.10 / iOS 8 CoreLib version 1.21 and above requires Xcode 10 and deploys back to Mac OS X 10.10 / iOS 8
in your PCH file if you have one, or at top of your source or header files you have to include the CoreLib master header:
#import <Cocoa/Cocoa.h> // you had that before #import "CoreLib.h"
in your applicationDidFinishLaunching: method:
cc = [CoreLib new]; // dont forget this
some examples how CoreLib makes developing apps more fun.
example user defaults convenience:
// setting defaults // old way [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"MyPref"]; // new way @"MyPref".defaultInt = 1; // using defaults // old way [[NSUserDefaults standardUserDefaults] objectForKey:@"MyPref"] // new way @"MyPref".defaultObj
example string convenience:
// splitting string into lines // old way [@"abc\ndef\nbla" componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] // new way @"abc\ndef\nbla".lines // trimming whitespace // old way [someString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] // new way string.trimmedOfWhitespace;
example downloading files:
// old way NSURL *url = [NSURL URLWithString:@"http://myhost/myfile"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSData *file = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL]; // new way NSData *file = @"http://myhost/myfile".download;
there are about 2000 lines of convenience categories including some functional extensions for NSArray.
Defines & Configuration
some features of CoreLib require linking additional frameworks and are therefore only available if you include these framework and set some preprocessor value:
#define USE_SECURITY 1 // if you (want to) link Security.framework #define USE_SYSTEMCONFIGURATION 1 // if you (want to) link SystemConfiguration.framework #define USE_IOKIT 1 // if yo (want to) link IOKit.framework #define USE_DISKARBITRATION 1 // if you (want to) link DiskArbitration.framework #define USE_APPLEMAIL 1 // if you want to send mail through Mail.app with the ScriptingBridge (needs temporary exception if sandboxed) #define USE_MAILCORE 1 // if you link MailCore.framework #define USE_SNAPPY 1 // if you link Snappy.framework
additionally some parts of CoreLib require setting the SANDBOX #define to indicate whether your app is sandboxed
you can also use this if you want to include JMApplicationDelegate but not JMRatingWindow #define SKIP_RATINGWINDOW 1
also you can define VENDOR_HOMEPAGE and FEEDBACK_EMAIL for the built-in feedback mechanism (openURL)
some parts of CoreLib do more checking if DEBUG is defined
CoreLib saves the last 10 messages logged with cc_log() to the user defaults unless you define DONTLOGTOUSERDEFAULTS
CoreLib has changed its return values of the alert*() functions away from deprecated NSAlertDefaultReturn/NSOKButton values and undefines those to make sure you update. define IMADESURENOTTOCOMPAREALERTRETURNVALUESAGAINSTOLDRETURNVALUES to make sure you can still use the old return values for old appkit functions
defining FORCE_LOG forces output to the system log even for release builds