User:Uroboro

641 editsJoined 4 March 2013
Revision as of 03:05, 20 June 2014 by Uroboro (talk | contribs) (How 2 prefs)

Find me on saurik's IRC server, on Twitter, on Reddit, on Github.

Made UnlockEvents and FlipNC.

If you are looking for notifications within a process, give NotificationExplorer a look.

How 2 prefs

As opposed to using NSDictionaries and [NSHomeDirectory() stringByAppendingFormat:@"/Library/Preferences/%s.plist", "com.your.tweak"], here's another alternative to handling preferences on tweaks. Note that I use "com.your.tweak" for both the domain (defaults) and the notification name (PostNotification).

Tweak.xm

@interface NSUserDefaults (Tweak_Category)
- (id)objectForKey:(NSString *)key inDomain:(NSString *)domain;
- (void)setObject:(id)value forKey:(NSString *)key inDomain:(NSString *)domain;
@end

static NSString const *nsDomainString = @"com.your.tweak";
static NSString const *nsKey = @"enabled";
static BOOL enabled;

static void notificationCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSNumber *n = (NSNumber *)[[NSUserDefaults standardUserDefaults] objectForKey:nsKey inDomain:nsDomainString];
enabled = (n)? [n boolValue]:YES;
}

%ctor {
NSNumber *n = (NSNumber *)[[NSUserDefaults standardUserDefaults] objectForKey:nsKey inDomain:nsDomainName];
enabled = (n)? [n boolValue]:YES;

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, notificationCallback, nsDomainName, NULL, CFNotificationSuspensionBehaviorCoalesce);

// Add any personal initializations
}

/*
 * From here onward, write your tweak.
 * To make your tweak actually do stuff when enabled:
if (!enabled) {
     // Do the original algorithm, either by calling:
     // %orig(); //if using logos for methods
     // _functionName(args); //if using MSHook() for functions
} else {
    ...
    // Optionally, do the original algorithm
}
 */

Preference plist

Saved in your tweak's folder as layout/Library/PreferenceLoader/Preferences/com.your.tweak.plist, use any of the following

Reduced style

Provides a switch on the root section of the preferences (like Airplane Mode). Recommended for configuration-less tweaks.

{
    entry = {
        cell = PSSwitchCell;
        label = "Your Tweak";
        defaults = "com.your.tweak";
        default = 1;
        icon = "/Applications/Preferences.app/[email protected]";
        PostNotification = "com.your.tweak";
    };
}

Extended Style

Provides a pane where other cells can appear (like Wi-Fi). Recommended for configuration-friendly tweaks.

{
    title = "Your Tweak";
    entry = {
        cell = PSLinkCell;
        label = "Your Tweak";
        icon = "/Applications/Preferences.app/[email protected]";
    };
    items = (
        {
            cell = PSSwitchCell;
            defaults = "com.your.tweak";
            label = Enabled;
            key = enabled;
            default = 1;
            PostNotification = "com.your.tweak";
        }
        // add more cells (dictionaries) here
    );
}

Other Stuff

Similar Wanted Pages:

Inheritance hierarchy‏‎ MIG Subsystems
ApplicationScripting.framework/Inheritance hierarchy‏‎ ApplicationScripting.framework/MIG subsystem‏
AppSupport.framework/MIG subsystem
AudioToolbox.framework/Inheritance hierarchy ‏AudioToolbox.framework/MIG subsystem
AVFoundation.framework/Inheritance hierarchy‏ AVFoundation.framework/MIG subsystem
BackBoardServices.framework/Inheritance hierarchy‏ BackBoardServices.framework/MIG subsystem‏‎
‏BulletinBoard.framework/Inheritance hierarchy‏ ‏BulletinBoard.framework/MIG subsystem
ChatKit.framework/MIG subsystem‏
CoreTelephony.framework/Inheritance hierarchy‏‎ CoreFoundation.framework/MIG subsystem
CoreTelephony.framework/MIG subsystem
‏Foundation.framework/MIG subsystem
GraphicsServices.framework/Inheritance hierarchy‏‎ GraphicsServices.framework/MIG subsystem
IH boilerplate/Inheritance hierarchy‏‎ IH boilerplate/MIG subsystem‏‎
IOKit.framework/Inheritance hierarchy‏‎ IOKit.framework/MIG subsystem
IOSurface.framework/Inheritance hierarchy ‏IOSurface.framework/MIG subsystem
MapKit.framework/Inheritance hierarchy MapKit.framework/MIG subsystem
‏Message.framework/MIG subsystem
Preferences.app/Inheritance hierarchy‏ ‏Preferences.app/MIG subsystem
Preferences.framework/MIG subsystem
SpringBoardServices.framework/Inheritance hierarchy‏
TelephonyUI.framework/Inheritance hierarchy TelephonyUI.framework/MIG subsystem
WiFiPicker.servicebundle/Inheritance hierarchy ‏WiFiPicker.servicebundle/MIG subsystem‏