#import "ITCategory-NSBundle.h" @implementation NSBundle (ITFoundationCategory) + (NSBundle *)bundleForFrameworkWithIdentifier:(NSString *)frameworkIdentifier { NSMutableArray *frameworksPaths = [NSMutableArray array]; NSArray *libraryPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSAllDomainsMask,YES); NSEnumerator *libraryEnumerator = [libraryPaths objectEnumerator]; NSString *libraryPath; [frameworksPaths addObject:[[self mainBundle] privateFrameworksPath]]; [frameworksPaths addObject:[[self mainBundle] sharedFrameworksPath]]; while ((libraryPath = [libraryEnumerator nextObject])) { [frameworksPaths addObject:[libraryPath stringByAppendingPathComponent:@"Frameworks"]]; [frameworksPaths addObject:[libraryPath stringByAppendingPathComponent:@"PrivateFrameworks"]]; } NSEnumerator *frameworksEnumerator = [frameworksPaths objectEnumerator]; NSString *frameworksPath; while ((frameworksPath = [frameworksEnumerator nextObject])) { NSArray *frameworkPaths = [NSBundle pathsForResourcesOfType:@"framework" inDirectory:frameworksPath]; NSEnumerator *frameworkEnumerator = [frameworkPaths objectEnumerator]; NSString *frameworkPath; while ((frameworkPath = [frameworkEnumerator nextObject])) { NSBundle *frameworkBundle = [NSBundle bundleWithPath:frameworkPath]; if (frameworkBundle && [[frameworkBundle bundleIdentifier] isEqualToString:frameworkIdentifier]) { return frameworkBundle; } } } return nil; } @end