修改超时
This commit is contained in:
parent
7df8da9213
commit
354bfd5cb9
@ -14,7 +14,7 @@ TWEAK_NAME = OhNo
|
|||||||
|
|
||||||
|
|
||||||
OhNo_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security
|
OhNo_FRAMEWORKS = CoreLocation CFNetwork CoreTelephony Security
|
||||||
OhNo_FILES = Tweak.x XSLog.m
|
OhNo_FILES = Tweak.x XSLog.m XHookSettingsManager.m
|
||||||
OhNo_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
OhNo_CFLAGS = -Wno-error -Wno-module-import-in-extern-c -fobjc-arc
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
#import <Metal/Metal.h>
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
@interface CustomMTLDevice : NSObject <MTLDevice>
|
|
||||||
@property (nonatomic, strong) id<MTLDevice> originalDevice;
|
|
||||||
@property (nonatomic, strong) NSString *customName;
|
|
||||||
- (instancetype)initWithOriginalDevice:(id<MTLDevice>)device customName:(NSString *)name;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation CustomMTLDevice
|
|
||||||
|
|
||||||
- (instancetype)initWithOriginalDevice:(id<MTLDevice>)device customName:(NSString *)name {
|
|
||||||
if (self = [super init]) {
|
|
||||||
_originalDevice = device;
|
|
||||||
_customName = name;
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)name {
|
|
||||||
return self.customName ?: [self.originalDevice name];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)forwardingTargetForSelector:(SEL)aSelector {
|
|
||||||
return self.originalDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
File diff suppressed because it is too large
Load Diff
70
ios-change-info/XHookSettingsManager.h
Normal file
70
ios-change-info/XHookSettingsManager.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
//
|
||||||
|
// XHookSettingsManager.h
|
||||||
|
// 配置管理器 - 头文件
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface XHookSettingsManager : NSObject
|
||||||
|
|
||||||
|
@property (nonatomic, assign, readonly) BOOL isLoaded;
|
||||||
|
|
||||||
|
// 单例
|
||||||
|
+ (instancetype)sharedManager;
|
||||||
|
|
||||||
|
// 加载配置
|
||||||
|
- (BOOL)loadSettingsFromPath:(NSString *)path;
|
||||||
|
- (void)cleanup;
|
||||||
|
|
||||||
|
// 设备信息
|
||||||
|
@property (nonatomic, strong, readonly) NSUUID *idfa;
|
||||||
|
@property (nonatomic, strong, readonly) NSUUID *idfv;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *deviceName;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *osVersion;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *productStr;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *hwModel;
|
||||||
|
@property (nonatomic, assign, readonly) NSUInteger trackingStatus;
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long physicalMemory;
|
||||||
|
@property (nonatomic, assign, readonly) NSUInteger cpuCore;
|
||||||
|
@property (nonatomic, assign, readonly) double systemUptimeOffset;
|
||||||
|
@property (nonatomic, assign, readonly) NSInteger kernBootTimeOffset;
|
||||||
|
|
||||||
|
// 电池信息
|
||||||
|
@property (nonatomic, assign, readonly) UIDeviceBatteryState batteryState;
|
||||||
|
@property (nonatomic, assign, readonly) float batteryLevel;
|
||||||
|
|
||||||
|
// 屏幕信息
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat screenBrightness;
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat screenScale;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *screenBounds;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *safeAreaInsets;
|
||||||
|
|
||||||
|
// 磁盘信息
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long diskSize;
|
||||||
|
@property (nonatomic, assign, readonly) unsigned long long diskFreeSize;
|
||||||
|
|
||||||
|
// 音频
|
||||||
|
@property (nonatomic, assign, readonly) float outputVolume;
|
||||||
|
|
||||||
|
// 网络信息
|
||||||
|
@property (nonatomic, copy, readonly) NSString *userAgent;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *networkInterfacesInfo;
|
||||||
|
@property (nonatomic, strong, readonly) NSDictionary *simInfo;
|
||||||
|
|
||||||
|
// 本地化
|
||||||
|
@property (nonatomic, copy, readonly) NSString *locale;
|
||||||
|
@property (nonatomic, copy, readonly) NSString *timeZone;
|
||||||
|
|
||||||
|
// 应用列表
|
||||||
|
@property (nonatomic, strong, readonly) NSArray *apps;
|
||||||
|
|
||||||
|
- (BOOL)shouldHookApp:(NSString *)bundleIdentifier;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
// 便捷宏
|
||||||
|
#define XHookSettings [XHookSettingsManager sharedManager]
|
||||||
|
|
||||||
232
ios-change-info/XHookSettingsManager.m
Normal file
232
ios-change-info/XHookSettingsManager.m
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
//
|
||||||
|
// XHookSettingsManager.m
|
||||||
|
// 配置管理器 - 实现
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "XHookSettingsManager.h"
|
||||||
|
|
||||||
|
@implementation XHookSettingsManager
|
||||||
|
|
||||||
|
+ (instancetype)sharedManager {
|
||||||
|
static XHookSettingsManager *manager = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
manager = [[XHookSettingsManager alloc] init];
|
||||||
|
});
|
||||||
|
return manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
[self resetToDefaults];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)resetToDefaults {
|
||||||
|
_isLoaded = NO;
|
||||||
|
|
||||||
|
// 设备信息默认值
|
||||||
|
_idfa = nil;
|
||||||
|
_idfv = nil;
|
||||||
|
_deviceName = nil;
|
||||||
|
_osVersion = nil;
|
||||||
|
_productStr = @"iPhone14,2";
|
||||||
|
_hwModel = nil;
|
||||||
|
_trackingStatus = 3; // 默认已授权
|
||||||
|
|
||||||
|
// 系统信息默认值
|
||||||
|
_physicalMemory = 0;
|
||||||
|
_cpuCore = 0;
|
||||||
|
_systemUptimeOffset = -1.0;
|
||||||
|
_kernBootTimeOffset = 0;
|
||||||
|
|
||||||
|
// 电池信息默认值
|
||||||
|
_batteryState = UIDeviceBatteryStateUnknown;
|
||||||
|
_batteryLevel = -1.0f;
|
||||||
|
|
||||||
|
// 屏幕信息默认值
|
||||||
|
_screenBrightness = -1.0;
|
||||||
|
_screenScale = -1.0;
|
||||||
|
_screenBounds = nil;
|
||||||
|
_safeAreaInsets = nil;
|
||||||
|
|
||||||
|
// 磁盘信息默认值
|
||||||
|
_diskSize = 0;
|
||||||
|
_diskFreeSize = 0;
|
||||||
|
|
||||||
|
// 音频默认值
|
||||||
|
_outputVolume = -1.0f;
|
||||||
|
|
||||||
|
// 网络信息默认值
|
||||||
|
_userAgent = nil;
|
||||||
|
_networkInterfacesInfo = nil;
|
||||||
|
_simInfo = nil;
|
||||||
|
|
||||||
|
// 本地化默认值
|
||||||
|
_locale = nil;
|
||||||
|
_timeZone = nil;
|
||||||
|
|
||||||
|
// 应用列表默认值
|
||||||
|
_apps = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 解析辅助方法
|
||||||
|
|
||||||
|
- (NSString *)parseString:(id)value defaultValue:(NSString *)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)parseInteger:(id)value defaultValue:(NSInteger)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value integerValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value integerValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (float)parseFloat:(id)value defaultValue:(float)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value floatValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value floatValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (double)parseDouble:(id)value defaultValue:(double)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value doubleValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value doubleValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (unsigned long long)parseULL:(id)value defaultValue:(unsigned long long)defaultValue {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [value longLongValue];
|
||||||
|
} else if ([value isKindOfClass:[NSNumber class]]) {
|
||||||
|
return [value unsignedLongLongValue];
|
||||||
|
}
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUUID *)parseUUID:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSString class]]) {
|
||||||
|
return [[NSUUID alloc] initWithUUIDString:value];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)parseDictionary:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSDictionary class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)parseArray:(id)value {
|
||||||
|
if ([value isKindOfClass:[NSArray class]]) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 加载配置
|
||||||
|
|
||||||
|
- (BOOL)loadSettingsFromPath:(NSString *)path {
|
||||||
|
@try {
|
||||||
|
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||||
|
if (![fileManager fileExistsAtPath:path]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSData *jsonData = [NSData dataWithContentsOfFile:path];
|
||||||
|
if (!jsonData) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
NSDictionary *settings = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
|
||||||
|
if (error || !settings || ![settings isKindOfClass:[NSDictionary class]]) {
|
||||||
|
NSLog(@"XHookSettingsManager: Error parsing JSON: %@", error);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析并初始化所有属性
|
||||||
|
[self parseSettings:settings];
|
||||||
|
|
||||||
|
_isLoaded = YES;
|
||||||
|
return YES;
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
NSLog(@"XHookSettingsManager: Exception loading settings: %@", exception);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)parseSettings:(NSDictionary *)settings {
|
||||||
|
// 设备信息
|
||||||
|
_idfa = [self parseUUID:settings[@"idfa"]];
|
||||||
|
_idfv = [self parseUUID:settings[@"idfv"]];
|
||||||
|
_deviceName = [self parseString:settings[@"deviceName"] defaultValue:nil];
|
||||||
|
_osVersion = [self parseString:settings[@"osVersion"] defaultValue:nil];
|
||||||
|
_productStr = [self parseString:settings[@"productStr"] defaultValue:@"iPhone14,2"];
|
||||||
|
_hwModel = [self parseString:settings[@"hwModel"] defaultValue:nil];
|
||||||
|
_trackingStatus = [self parseInteger:settings[@"trackingStatus"] defaultValue:3];
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
_physicalMemory = [self parseULL:settings[@"physicalMemory"] defaultValue:0];
|
||||||
|
_cpuCore = [self parseInteger:settings[@"cpuCore"] defaultValue:0];
|
||||||
|
_systemUptimeOffset = [self parseDouble:settings[@"systemUptime"] defaultValue:-1.0];
|
||||||
|
_kernBootTimeOffset = [self parseInteger:settings[@"kernBootTime"] defaultValue:0];
|
||||||
|
|
||||||
|
// 电池信息
|
||||||
|
NSInteger batteryStateVal = [self parseInteger:settings[@"batteryState"] defaultValue:-1];
|
||||||
|
_batteryState = (batteryStateVal >= 0) ? (UIDeviceBatteryState)batteryStateVal : UIDeviceBatteryStateUnknown;
|
||||||
|
_batteryLevel = [self parseFloat:settings[@"batteryLevel"] defaultValue:-1.0f];
|
||||||
|
|
||||||
|
// 屏幕信息
|
||||||
|
_screenBrightness = [self parseDouble:settings[@"screenBrightness"] defaultValue:-1.0];
|
||||||
|
_screenScale = [self parseDouble:settings[@"screenScale"] defaultValue:-1.0];
|
||||||
|
_screenBounds = [self parseDictionary:settings[@"screenBounds"]];
|
||||||
|
_safeAreaInsets = [self parseDictionary:settings[@"safeAreaInsets"]];
|
||||||
|
|
||||||
|
// 磁盘信息
|
||||||
|
_diskSize = [self parseULL:settings[@"diskSize"] defaultValue:0];
|
||||||
|
_diskFreeSize = [self parseULL:settings[@"diskFreeSize"] defaultValue:0];
|
||||||
|
|
||||||
|
// 音频
|
||||||
|
_outputVolume = [self parseFloat:settings[@"outputVolume"] defaultValue:-1.0f];
|
||||||
|
|
||||||
|
// 网络信息
|
||||||
|
_userAgent = [self parseString:settings[@"userAgent"] defaultValue:nil];
|
||||||
|
_networkInterfacesInfo = [self parseDictionary:settings[@"networkInterfacesInfo"]];
|
||||||
|
_simInfo = [self parseDictionary:settings[@"simInfo"]];
|
||||||
|
|
||||||
|
// 本地化
|
||||||
|
_locale = [self parseString:settings[@"locale"] defaultValue:nil];
|
||||||
|
_timeZone = [self parseString:settings[@"timeZone"] defaultValue:nil];
|
||||||
|
|
||||||
|
// 应用列表
|
||||||
|
_apps = [self parseArray:settings[@"apps"]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cleanup {
|
||||||
|
[self resetToDefaults];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 应用检查
|
||||||
|
|
||||||
|
- (BOOL)shouldHookApp:(NSString *)bundleIdentifier {
|
||||||
|
if (!bundleIdentifier || !_apps) return NO;
|
||||||
|
return [_apps containsObject:bundleIdentifier];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user