小墨的iOS移动端APP代码

EasyKit.m 5.1KB

    #import "EasyKit.h" #import <objc/runtime.h> @implementation EasyKit + (NSString *)homePath { return NSHomeDirectory(); } + (NSString *)desktopPath { return [NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES) objectAtIndex:0]; } + (NSString *)documentPath { return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; } + (NSString *)libPrePath{ return [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)objectAtIndex:0] stringByAppendingFormat:@"/Preference"]; } + (NSString *)libCachePath{ return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)objectAtIndex:0]; } + (NSString *)tmpPath{ return [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)objectAtIndex:0] stringByAppendingFormat:@"/tmp"]; } + (NSString *)appPath { return [[NSBundle mainBundle] bundlePath]; } + (NSString *)resourcePath { return [[NSBundle mainBundle] resourcePath]; } + (BOOL)touchPath:(NSString *)path { if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:path] ) { return [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:NULL]; } return YES; } + (BOOL)touchFile:(NSString *)file { if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:file] ) { return [[NSFileManager defaultManager] createFileAtPath:file contents:[NSData data] attributes:nil]; } return YES; } + (BOOL)swizzleMethod:(SEL)originalSelector with:(SEL)anotherSelector in:(Class)klass { return [self swizzleMethod:originalSelector in:klass with:anotherSelector in:klass]; } + (BOOL)swizzleMethod:(SEL)originalSelector in:(Class)klass with:(SEL)anotherSelector in:(Class)anotherKlass { Method originalMethod = class_getInstanceMethod(klass, originalSelector); Method anotherMethod = class_getInstanceMethod(anotherKlass, anotherSelector); if(!originalMethod || !anotherMethod) { return NO; } IMP originalMethodImplementation = class_getMethodImplementation(klass, originalSelector); IMP anotherMethodImplementation = class_getMethodImplementation(anotherKlass, anotherSelector); if(class_addMethod(klass, originalSelector, originalMethodImplementation, method_getTypeEncoding(originalMethod))) { originalMethod = class_getInstanceMethod(klass, originalSelector); } if(class_addMethod(anotherKlass, anotherSelector, anotherMethodImplementation, method_getTypeEncoding(anotherMethod))) { anotherMethod = class_getInstanceMethod(anotherKlass, anotherSelector); } method_exchangeImplementations(originalMethod, anotherMethod); return YES; } + (BOOL)swizzleClassMethod:(SEL)originalSelector with:(SEL)anotherSelector in:(Class)klass { return [self swizzleClassMethod:originalSelector in:klass with:anotherSelector in:klass]; } + (BOOL)swizzleClassMethod:(SEL)originalSelector in:(Class)klass with:(SEL)anotherSelector in:(Class)anotherKlass { Method originalMethod = class_getClassMethod(klass, originalSelector); Method anotherMethod = class_getClassMethod(anotherKlass, anotherSelector); if(!originalMethod || !anotherMethod) { return NO; } Class metaClass = objc_getMetaClass(class_getName(klass)); Class anotherMetaClass = objc_getMetaClass(class_getName(anotherKlass)); IMP originalMethodImplementation = class_getMethodImplementation(metaClass, originalSelector); IMP anotherMethodImplementation = class_getMethodImplementation(anotherMetaClass, anotherSelector); if(class_addMethod(metaClass, originalSelector, originalMethodImplementation, method_getTypeEncoding(originalMethod))) { originalMethod = class_getClassMethod(klass, originalSelector); } if(class_addMethod(anotherMetaClass, anotherSelector, anotherMethodImplementation, method_getTypeEncoding(anotherMethod))) { anotherMethod = class_getClassMethod(anotherKlass, anotherSelector); } method_exchangeImplementations(originalMethod, anotherMethod); return YES; } + (void)waitUntil:(BOOL (^)(void))condition { [self waitUntil:condition timeOut:10.0 interval:0.1]; } + (void)waitUntil:(BOOL (^)(void))condition timeOut:(NSTimeInterval)timeOut { [self waitUntil:condition timeOut:timeOut interval:0.1]; } + (void)waitUntil:(BOOL (^)(void))condition timeOut:(NSTimeInterval)timeOut interval:(NSTimeInterval)interval { NSTimeInterval sleptSoFar=0; while(1) { if(condition() || (sleptSoFar >= timeOut)) { return; } [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:interval]]; sleptSoFar += interval; } } + (RACSignal*) rac_didNetworkChanges{ AFNetworkReachabilityManager * manager = [AFNetworkReachabilityManager sharedManager]; [manager startMonitoring]; return RACObserve(manager, networkReachabilityStatus); } @end @implementation $ @end