diff --git a/WeChatTweak.framework/Versions/A/Resources/TweakPreferecesController.nib b/WeChatTweak.framework/Versions/A/Resources/TweakPreferecesController.nib index f0d03dc..60fcd19 100644 Binary files a/WeChatTweak.framework/Versions/A/Resources/TweakPreferecesController.nib and b/WeChatTweak.framework/Versions/A/Resources/TweakPreferecesController.nib differ diff --git a/WeChatTweak.framework/Versions/A/WeChatTweak b/WeChatTweak.framework/Versions/A/WeChatTweak index b589eb2..878fc65 100755 Binary files a/WeChatTweak.framework/Versions/A/WeChatTweak and b/WeChatTweak.framework/Versions/A/WeChatTweak differ diff --git a/WeChatTweak.xcodeproj/project.pbxproj b/WeChatTweak.xcodeproj/project.pbxproj index 1ee26a9..48c155c 100644 --- a/WeChatTweak.xcodeproj/project.pbxproj +++ b/WeChatTweak.xcodeproj/project.pbxproj @@ -13,6 +13,8 @@ 7D9049F61F82A41A004E6370 /* fishhook.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9049F41F82A415004E6370 /* fishhook.h */; }; 7D9049F91F82B6FB004E6370 /* NSString+WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D9049F81F82B6FB004E6370 /* NSString+WeChatTweak.m */; }; 7D9049FA1F82B708004E6370 /* NSString+WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9049F71F82B6FB004E6370 /* NSString+WeChatTweak.h */; }; + 7DB8AFBE206211D900E683AE /* WTConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DB8AFBC206211D900E683AE /* WTConfigManager.h */; }; + 7DB8AFBF206211D900E683AE /* WTConfigManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB8AFBD206211D900E683AE /* WTConfigManager.m */; }; 7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF842331F4058AB00D42D79 /* WeChatTweak.m */; }; 7DF842521F4058C600D42D79 /* TweakPreferecesController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8424F1F4058C600D42D79 /* TweakPreferecesController.h */; }; @@ -48,6 +50,8 @@ 7D9049F41F82A415004E6370 /* fishhook.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fishhook.h; sourceTree = ""; }; 7D9049F71F82B6FB004E6370 /* NSString+WeChatTweak.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+WeChatTweak.h"; sourceTree = ""; }; 7D9049F81F82B6FB004E6370 /* NSString+WeChatTweak.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+WeChatTweak.m"; sourceTree = ""; }; + 7DB8AFBC206211D900E683AE /* WTConfigManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WTConfigManager.h; sourceTree = ""; }; + 7DB8AFBD206211D900E683AE /* WTConfigManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WTConfigManager.m; sourceTree = ""; }; 7DF842271F40583F00D42D79 /* WeChatTweak.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeChatTweak.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WeChatTweak.h; sourceTree = ""; }; 7DF8422B1F40583F00D42D79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -88,6 +92,8 @@ children = ( 7D14E5A21F6447DB00D75132 /* AlfredManager.h */, 7D14E5A31F6447DB00D75132 /* AlfredManager.m */, + 7DB8AFBC206211D900E683AE /* WTConfigManager.h */, + 7DB8AFBD206211D900E683AE /* WTConfigManager.m */, ); name = Manager; sourceTree = ""; @@ -191,6 +197,7 @@ 7D9049FA1F82B708004E6370 /* NSString+WeChatTweak.h in Headers */, 7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */, 7DF8425B1F4058DD00D42D79 /* NSBundle+WeChatTweak.h in Headers */, + 7DB8AFBE206211D900E683AE /* WTConfigManager.h in Headers */, 7D9049F61F82A41A004E6370 /* fishhook.h in Headers */, 7D14E5A41F6447DB00D75132 /* AlfredManager.h in Headers */, 7DF842601F40590500D42D79 /* WeChatTweakHeaders.h in Headers */, @@ -295,6 +302,7 @@ 7DF842531F4058C600D42D79 /* TweakPreferecesController.m in Sources */, 7D9049F91F82B6FB004E6370 /* NSString+WeChatTweak.m in Sources */, 7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */, + 7DB8AFBF206211D900E683AE /* WTConfigManager.m in Sources */, 7D9049F51F82A41A004E6370 /* fishhook.c in Sources */, 7DF8425C1F4058DD00D42D79 /* NSBundle+WeChatTweak.m in Sources */, ); diff --git a/WeChatTweak/TweakPreferecesController.m b/WeChatTweak/TweakPreferecesController.m index f052357..9877876 100644 --- a/WeChatTweak/TweakPreferecesController.m +++ b/WeChatTweak/TweakPreferecesController.m @@ -8,11 +8,13 @@ #import "TweakPreferecesController.h" #import "NSBundle+WeChatTweak.h" +#import "WTConfigManager.h" @interface TweakPreferecesController () @property (weak) IBOutlet NSPopUpButton *autoAuthButton; @property (weak) IBOutlet NSPopUpButton *notificationTypeButton; +@property (weak) IBOutlet NSPopUpButton *compressedJSONEnabledButton; @end @@ -28,11 +30,13 @@ } - (void)reloadData { + WTConfigManager *configManager = WTConfigManager.sharedInstance; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; BOOL enabledAutoAuth = [userDefaults boolForKey:WeChatTweakPreferenceAutoAuthKey]; RevokeNotificationType notificationType = [userDefaults integerForKey:WeChatTweakPreferenceRevokeNotificationTypeKey]; [self.autoAuthButton selectItemAtIndex:enabledAutoAuth ? 1 : 0]; [self.notificationTypeButton selectItemAtIndex:notificationType]; + [self.compressedJSONEnabledButton selectItemAtIndex:configManager.compressedJSONEnabled ? 0 : 1]; } #pragma mark - Event method @@ -48,6 +52,11 @@ [[NSUserDefaults standardUserDefaults] setInteger:type forKey:WeChatTweakPreferenceRevokeNotificationTypeKey]; } +- (IBAction)switchCompressedJSONEnabledAction:(NSPopUpButton *)sender { + BOOL enabled = sender.indexOfSelectedItem == 0; + WTConfigManager.sharedInstance.compressedJSONEnabled = enabled; +} + #pragma mark - MASPreferencesViewController - (NSString *)identifier { diff --git a/WeChatTweak/TweakPreferecesController.xib b/WeChatTweak/TweakPreferecesController.xib index 35701ef..126952a 100644 --- a/WeChatTweak/TweakPreferecesController.xib +++ b/WeChatTweak/TweakPreferecesController.xib @@ -1,14 +1,15 @@ - + - + + @@ -16,19 +17,19 @@ - + - - + + - - + + @@ -36,7 +37,7 @@ - + @@ -56,7 +57,7 @@ - + @@ -78,18 +79,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/WeChatTweak/WTConfigManager.h b/WeChatTweak/WTConfigManager.h new file mode 100644 index 0000000..2d21970 --- /dev/null +++ b/WeChatTweak/WTConfigManager.h @@ -0,0 +1,19 @@ +// +// WTConfigManager.h +// WeChatTweak +// +// Created by Sunny Young on 21/03/2018. +// Copyright © 2018 Sunnyyoung. All rights reserved. +// + +#import +#import +#import + +@interface WTConfigManager : NSObject + +@property (nonatomic, assign) BOOL compressedJSONEnabled; + ++ (instancetype)sharedInstance; + +@end diff --git a/WeChatTweak/WTConfigManager.m b/WeChatTweak/WTConfigManager.m new file mode 100644 index 0000000..9529c81 --- /dev/null +++ b/WeChatTweak/WTConfigManager.m @@ -0,0 +1,49 @@ +// +// WTConfigManager.m +// WeChatTweak +// +// Created by Sunny Young on 21/03/2018. +// Copyright © 2018 Sunnyyoung. All rights reserved. +// + +#import "WTConfigManager.h" + +static NSString * const WeChatTweakCompressedJSONEnabledKey = @"WeChatTweakCompressedJSONEnabledKey"; + +@interface WTConfigManager() + +@end + +@implementation WTConfigManager + ++ (instancetype)sharedInstance { + static dispatch_once_t onceToken; + static WTConfigManager *shared; + dispatch_once(&onceToken, ^{ + shared = [[WTConfigManager alloc] init]; + }); + return shared; +} + +- (instancetype)init { + self = [super init]; + if (self) { + NSUserDefaults *userDefaults = NSUserDefaults.standardUserDefaults; + if ([userDefaults objectForKey:WeChatTweakCompressedJSONEnabledKey]) { + _compressedJSONEnabled = [userDefaults boolForKey:WeChatTweakCompressedJSONEnabledKey]; + } else { + _compressedJSONEnabled = YES; + } + } + return self; +} + +#pragma mark - Property method + +- (void)setCompressedJSONEnabled:(BOOL)compressedJSONEnabled { + _compressedJSONEnabled = compressedJSONEnabled; + [NSUserDefaults.standardUserDefaults setBool:compressedJSONEnabled forKey:WeChatTweakCompressedJSONEnabledKey]; + [NSUserDefaults.standardUserDefaults synchronize]; +} + +@end diff --git a/WeChatTweak/WeChatTweak.m b/WeChatTweak/WeChatTweak.m index 071c1ac..04bf215 100755 --- a/WeChatTweak/WeChatTweak.m +++ b/WeChatTweak/WeChatTweak.m @@ -13,6 +13,7 @@ #import "NSString+WeChatTweak.h" #import "TweakPreferecesController.h" #import "AlfredManager.h" +#import "WTConfigManager.h" // Global Function static NSArray *(*original_NSSearchPathForDirectoriesInDomains)(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde); @@ -61,6 +62,7 @@ static void __attribute__((constructor)) tweak(void) { class_addProperty(objc_getClass("WCContactData"), "wt_avatarPath", attrs, 4); class_addMethod(objc_getClass("WCContactData"), @selector(wt_avatarPath), method_getImplementation(class_getInstanceMethod(objc_getClass("WCContactData"), @selector(wt_avatarPath))), "@@:"); class_addMethod(objc_getClass("WCContactData"), @selector(setWt_avatarPath:), method_getImplementation(class_getInstanceMethod(objc_getClass("WCContactData"), @selector(setWt_avatarPath:))), "v@:@"); + class_addMethod(objc_getClass("WCContactData"), @selector(modelPropertyWhitelist), method_getImplementation(class_getClassMethod(objc_getClass("WCContactData"), @selector(modelPropertyWhitelist))), "v@:"); } #pragma mark - No Revoke Message @@ -206,4 +208,15 @@ static void __attribute__((constructor)) tweak(void) { return; } ++ (NSArray *)modelPropertyWhitelist { + if (WTConfigManager.sharedInstance.compressedJSONEnabled) { + return @[@"wt_avatarPath", + @"m_nsRemark", + @"m_nsNickName", + @"m_nsUsrName"]; + } else { + return nil; + } +} + @end