├── ThemeManagerDemo ├── ThemeManagerDemo │ ├── Media.xcassets │ │ ├── Contents.json │ │ └── icon.imageset │ │ │ ├── icon@2x.png │ │ │ └── Contents.json │ ├── Sample.bundle │ │ ├── icon@2x.png │ │ └── defaults.plist │ ├── ViewController.h │ ├── defaults.plist │ ├── AppDelegate.h │ ├── main.m │ ├── BaseSample.bundle │ │ └── defaults.plist │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.xib │ ├── ViewController.m │ └── AppDelegate.m ├── Podfile.lock ├── ThemeManagerDemo.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── project.pbxproj ├── ThemeManagerDemo.xcworkspace │ └── contents.xcworkspacedata ├── Podfile ├── ThemeManagerDemoTests │ ├── Info.plist │ └── ThemeManagerDemoTests.m └── Assets │ └── Info.plist ├── .gitignore ├── LICENSE ├── AWLThemeManager ├── AWLThemeManager.h └── AWLThemeManager.m ├── AWLThemeManager.podspec └── README.md /ThemeManagerDemo/ThemeManagerDemo/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Sample.bundle/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appwilldev/AWLThemeManager/HEAD/ThemeManagerDemo/ThemeManagerDemo/Sample.bundle/icon@2x.png -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Media.xcassets/icon.imageset/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appwilldev/AWLThemeManager/HEAD/ThemeManagerDemo/ThemeManagerDemo/Media.xcassets/icon.imageset/icon@2x.png -------------------------------------------------------------------------------- /ThemeManagerDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - UIColor-HexString (1.3.0) 3 | 4 | DEPENDENCIES: 5 | - UIColor-HexString (~> 1.3.0) 6 | 7 | SPEC CHECKSUMS: 8 | UIColor-HexString: fadc2e1389db19147ac99dee92222d3bd8bfec4a 9 | 10 | COCOAPODS: 0.39.0 11 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ThemeManagerDemo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '8.0' 3 | # Uncomment this line if you're using Swift 4 | # use_frameworks! 5 | 6 | target 'ThemeManagerDemo' do 7 | pod 'UIColor-HexString', '~> 1.3.0' 8 | end 9 | 10 | target 'ThemeManagerDemoTests' do 11 | 12 | end 13 | 14 | target 'Assets' do 15 | 16 | end 17 | 18 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/defaults.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AWL_THEME_NAME 6 | AssetsTheme 7 | AWL_BASE_THEME 8 | SampleTheme 9 | 10 | 11 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Sample.bundle/defaults.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AWL_THEME_NAME 6 | SampleTheme 7 | AWL_BASE_THEME 8 | BaseSampleTheme 9 | 10 | 11 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Media.xcassets/icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/BaseSample.bundle/defaults.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AWL_THEME_NAME 6 | BaseSampleTheme 7 | Content_Text_Color 8 | 142,94,231,1 9 | Content_Font 10 | Snell Roundhand,14 11 | View_BG_Color 12 | Content_Text_Color 13 | 14 | 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | Pods/ 27 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.appwill.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ThemeManagerDemo/Assets/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSHumanReadableCopyright 24 | Copyright © 2016年 AppWill. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemoTests/ThemeManagerDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeManagerDemoTests.m 3 | // ThemeManagerDemoTests 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ThemeManagerDemoTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation ThemeManagerDemoTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Appwill Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.appwill.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /AWLThemeManager/AWLThemeManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // AWLThemeManager.h 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface AWLThemeManager : NSObject 13 | 14 | @property (nonatomic, strong) NSString *currentTheme; 15 | 16 | // return themeName 17 | - (NSString*)addTheme:(NSString*)themePath; 18 | - (NSArray*)allThemes; 19 | 20 | //Get color from defaults.plist 21 | - (UIColor*)colorForKey:(NSString*)key; 22 | - (UIColor*)colorForKey:(NSString*)key forTheme:(NSString*)themeName; 23 | 24 | //Get font from defaults.plist 25 | - (UIFont*)fontForKey:(NSString*)key; 26 | - (UIFont *)fontForKey:(NSString *)key forTheme:(NSString*)themeName; 27 | 28 | //Get img name from defaults.plist, and then img from theme bundle. Use key as image name if img name is missed. 29 | - (UIImage*)imageNamed:(NSString*)key; 30 | - (UIImage *)imageNamed:(NSString *)key forTheme:(NSString*)themeName; 31 | 32 | //key in defaults.plist of the current theme 33 | - (id)objectForKey:(NSString*)key; 34 | - (id)objectForKey:(NSString *)key forTheme:(NSString*)themeName; 35 | 36 | //file path in the current theme bundle 37 | - (NSString*)filePathForFileName:(NSString*)fileName; 38 | - (NSString *)filePathForFileName:(NSString *)fileName ofType:(NSString*) type; 39 | - (NSString*)filePathForFileName:(NSString *)fileName forTheme:(NSString*)themeName; 40 | - (NSString*)filePathForFileName:(NSString *)name ofType:(NSString*) type forTheme:(NSString*)themeName; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "AWLThemeManager.h" 11 | 12 | @interface ViewController () 13 | 14 | @end 15 | 16 | @implementation ViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | 21 | NSString *bundlePath1 = [[NSBundle mainBundle] pathForResource:@"BaseSample" ofType:@"bundle"]; 22 | NSString *bundlePath2 = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"bundle"]; 23 | NSString *bundlePath3 = [[NSBundle mainBundle] pathForResource:@"Assets" ofType:@"bundle"]; 24 | AWLThemeManager *mgr = [[AWLThemeManager alloc] init]; 25 | [mgr addTheme:bundlePath1]; 26 | [mgr addTheme:bundlePath2]; 27 | mgr.currentTheme = [mgr addTheme:bundlePath3]; 28 | UIImage *img = [mgr imageNamed:@"icon"]; 29 | UIImageView *imgView = [[UIImageView alloc] initWithImage:img]; 30 | imgView.center = CGPointMake(CGRectGetWidth(self.view.bounds)/2, CGRectGetHeight(self.view.bounds)/2); 31 | [self.view addSubview:imgView]; 32 | 33 | UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; 34 | titleLabel.center = CGPointMake(imgView.center.x, CGRectGetMaxY(imgView.frame) + 30); 35 | titleLabel.textAlignment = NSTextAlignmentCenter; 36 | titleLabel.backgroundColor = [UIColor whiteColor]; 37 | titleLabel.textColor = [mgr colorForKey:@"Content_Text_Color"]; 38 | titleLabel.font = [mgr fontForKey:@"Content_Font"]; 39 | titleLabel.text = @"Hello, world!"; 40 | [self.view addSubview:titleLabel]; 41 | 42 | self.view.backgroundColor = [mgr colorForKey:@"View_BG_Color"]; 43 | } 44 | 45 | - (void)didReceiveMemoryWarning { 46 | [super didReceiveMemoryWarning]; 47 | // Dispose of any resources that can be recreated. 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "AWLThemeManager.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | // Override point for customization after application launch. 21 | 22 | return YES; 23 | } 24 | 25 | - (void)applicationWillResignActive:(UIApplication *)application { 26 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 27 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 28 | } 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | - (void)applicationWillEnterForeground:(UIApplication *)application { 36 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 37 | } 38 | 39 | - (void)applicationDidBecomeActive:(UIApplication *)application { 40 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 41 | } 42 | 43 | - (void)applicationWillTerminate:(UIApplication *)application { 44 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /AWLThemeManager.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint AWLThemeManager.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | 11 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | # 13 | # These will help people to find your library, and whilst it 14 | # can feel like a chore to fill in it's definitely to your advantage. The 15 | # summary should be tweet-length, and the description more in depth. 16 | # 17 | 18 | s.name = "AWLThemeManager" 19 | s.version = "1.0.7" 20 | s.summary = "AWLThemeManager is a lightweight theme manager for iOS." 21 | s.homepage = "https://github.com/appwilldev/AWLThemeManager" 22 | # s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" 23 | 24 | 25 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 26 | # 27 | # Licensing your code is important. See http://choosealicense.com for more info. 28 | # CocoaPods will detect a license file if there is a named LICENSE* 29 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. 30 | # 31 | 32 | s.license = "MIT" 33 | # s.license = { :type => "MIT", :file => "FILE_LICENSE" } 34 | 35 | 36 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 37 | # 38 | # Specify the authors of the library, with email addresses. Email addresses 39 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also 40 | # accepts just a name if you'd rather not provide an email address. 41 | # 42 | # Specify a social_media_url where others can refer to, for example a twitter 43 | # profile URL. 44 | # 45 | 46 | s.author = { "neo.chen" => "cooketjoy@gmail.com" } 47 | # Or just: s.author = "yun.chen" 48 | # s.authors = { "yun.chen" => "cooketjoy@gmail.com" } 49 | # s.social_media_url = "http://twitter.com/yun.chen" 50 | 51 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 52 | # 53 | # If this Pod runs only on iOS or OS X, then specify the platform and 54 | # the deployment target. You can optionally include the target after the platform. 55 | # 56 | 57 | # s.platform = :ios 58 | s.platform = :ios, "6.0" 59 | 60 | # When using multiple platforms 61 | # s.ios.deployment_target = "5.0" 62 | # s.osx.deployment_target = "10.7" 63 | 64 | 65 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 66 | # 67 | # Specify the location from where the source should be retrieved. 68 | # Supports git, hg, bzr, svn and HTTP. 69 | # 70 | 71 | s.source = { :git => "https://github.com/appwilldev/AWLThemeManager.git", :tag => s.version.to_s } 72 | 73 | 74 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 75 | # 76 | # CocoaPods is smart about how it includes source code. For source files 77 | # giving a folder will include any swift, h, m, mm, c & cpp files. 78 | # For header files it will include any header in the folder. 79 | # Not including the public_header_files will make all headers public. 80 | # 81 | 82 | s.source_files = "AWLThemeManager/*.{h,m}" 83 | s.public_header_files = "AWLThemeManager/*.h" 84 | 85 | 86 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 87 | # 88 | # A list of resources included with the Pod. These are copied into the 89 | # target bundle with a build phase script. Anything else will be cleaned. 90 | # You can preserve files from being cleaned, please don't preserve 91 | # non-essential files like tests, examples and documentation. 92 | # 93 | 94 | # s.resource = "icon.png" 95 | # s.resources = "Resources/*.png" 96 | 97 | # s.preserve_paths = "FilesToSave", "MoreFilesToSave" 98 | 99 | 100 | # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 101 | # 102 | # Link your library with frameworks, or libraries. Libraries do not include 103 | # the lib prefix of their name. 104 | # 105 | 106 | # s.framework = "SomeFramework" 107 | # s.frameworks = "SomeFramework", "AnotherFramework" 108 | 109 | # s.library = "iconv" 110 | # s.libraries = "iconv", "xml2" 111 | 112 | 113 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 114 | # 115 | # If your library depends on compiler flags you can set them in the xcconfig hash 116 | # where they will only apply to your library. If you depend on other Podspecs 117 | # you can include multiple dependencies to ensure it works. 118 | 119 | s.requires_arc = true 120 | 121 | # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } 122 | # s.dependency "JSONKit", "~> 1.4" 123 | 124 | s.dependency "UIColor-HexString", "~> 1.3.0" 125 | 126 | end 127 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWLThemeManager 2 | 3 | [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/AWLThemeManager.svg)](https://img.shields.io/cocoapods/v/AWLThemeManager.svg) 4 | 5 | AWLThemeManager is a lightweight theme manager for iOS. 6 | ## Features 7 | 8 | ### What can be customized 9 | 10 | 1. Image; 11 | 2. Font; 12 | 3. Color; 13 | 4. Property-list supported objects 14 | 5. Any file in bundle. 15 | 16 | ### Theme Inheritance 17 | 18 | In actual work, there may be a little difference among themes. In a traditional way, you need to keep the same content in every theme. This is a bad way if you want to change the value, you need find all the places and change it. 19 | From now on, you can feel release if you want to do that because of the inheritance of AWLThemeManager. You just need to modify the root theme then all the themes that inheritant from the root theme will be changed to the new value. 20 | 21 | ## How to use 22 | 23 | ### Import to your poject 24 | 25 | * Use cocoapods 26 | 27 | pod 'AWLThemeManager' 28 | 29 | * Traditional way 30 | Just add the header and source file to your project 31 | * AWLThemeManager.h 32 | * AWLThemeManager.m 33 | 34 | ### Write your own theme package 35 | 36 | **Bundle is preferred as theme package**, though folder can also be used. 37 | 38 | The structure of bundle file is like the follow screenshot: 39 | 40 | ![Bundle](http://ww1.sinaimg.cn/large/73941b03jw1eq2u5jqhm2j204w01k3yg.jpg) 41 | 42 | defaults.plist is necessary. Add other files to the root directory of bundle. 43 | 44 | ### defaults.plist 45 | defaults.plist is used to set the property of themes, include color, font etc. 46 | 47 | ![defaults.plist](http://ww4.sinaimg.cn/large/73941b03jw1eq2u3kp0vpj20d0037t8x.jpg) 48 | 49 | #### Base info 50 | Default key used in defualts.plist: 51 | 52 | * AWL_THEME_NAME 53 | 54 | This key is necessary. it is the name of the theme, used to identify the theme, must be only. 55 | 56 | * AWL_BASE_THEME 57 | 58 | Alternative. If you want to use theme as your base theme, you should add this key. Set the name of base theme to this key. 59 | 60 | #### Define Color 61 | The format of color is : 62 | 63 | ![defaults.plist](http://ww1.sinaimg.cn/large/73941b03jw1eq2u3jquu6j20bc00mjr9.jpg) 64 | 65 | It will return the color use follow method: 66 | 67 | [UIColor colorWithRed:[array[0] doubleValue]/255 68 | green:[array[1] doubleValue]/255 69 | blue:[array[2] doubleValue]/255 70 | alpha:[array[3] doubleValue]]; 71 | 72 | Make sure you set the right value to the color. 73 | 74 | **Support white colorspace format**. Colors can now be specified in white colorspace (e.g. 0.4,1). 75 | 76 | **Support color with pattern image**. Colors can now be specified as a pattern image with the format "@[ImageName],[Optional Alpha]" (e.g. @Foo", "@Foo,0.5"). 77 | 78 | **Support hex format**. Specify colors in hex format as 79 | 80 | #RGB 81 | #ARGB 82 | #RRGGBB 83 | #AARRGGBB 84 | 85 | **Support reference**. If you want to set the same value to different color key, you can set the key of one color to another color, then AWLThemeManager will find the actual value of the color. 86 | 87 | **Modify alpha by reference**. If you reference a color, e.g. “COLOR1” = “255,0,0,1”, “COLOR2” = 88 | “COLOR1” you can now append “:[alpha]” to the reference to modify it’s 89 | alpha, e.g. “COLOR2” = “COLOR1:0.2” will equate to “255,0,0,0.2”. 90 | 91 | #### Define Font 92 | The format of font is : 93 | 94 | ![defaults.plist](http://ww2.sinaimg.cn/large/73941b03jw1eq2u3l0thcj20c500rwed.jpg) 95 | 96 | The first one is name of font, second is size of the font. 97 | It will return the font use follow method: 98 | 99 | [UIFont fontWithName:fontName size:fontSize] 100 | 101 | If you want to use system font, you should ignore the first value, like this: 102 | 103 | ,14 //systemFontOfSize 104 | bold,14 //boldSystemFontOfSize 105 | italic,14 //italicSystemFontOfSize 106 | 107 | **Support reference**. Same with the color. 108 | 109 | ### Define image 110 | There are two way for adding img to theme bundle: 111 | 112 | 1. Put the image file in the bundle; 113 | 2. Add a xcassets file, then put image files in the xcassets. 114 | 115 | For method 2, the bundle needs to be an actual OS X bundle target in the project with 116 | it's SDK set to iOS & a valid info.plist in order for Xcode to compile 117 | the .xcassets file inside it. Please refer to Assets.bundle in demo project. 118 | 119 | 120 | **Support reference**. Same with the color. If image name isn't found in defaults.plist, we use key as image name. 121 | 122 | ### File 123 | Now you can have “foo”->”bar” in the theme and search all bundles for 124 | “foo” of type “dat”, in addition to falling back to the main bundle. If 125 | key “foo” is not found, “foo” is assumed to be the file name. 126 | 127 | #### Other 128 | You can add whatever you want to the defaults.plist. Just use `objectForKey:` to get the value. 129 | 130 | 131 | 132 | ### How to use in your project 133 | 134 | Add the absolute path of bundle to AWLThemeManager object, then set the current theme that you want. 135 | For example: 136 | 137 | ```objc 138 | NSString *bundlePath1 = [[NSBundle mainBundle] pathForResource:@"BaseSample" ofType:@"bundle"]; 139 | NSString *bundlePath2 = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"bundle"]; 140 | AWLThemeManager *mgr = [[AWLThemeManager alloc] init]; 141 | [mgr addTheme:bundlePath1]; 142 | mgr.currentTheme = [mgr addTheme:bundlePath2]; 143 | ``` 144 | 145 | Then you can access the resource use the same AWLThemeManager object as follow. 146 | 147 | ```objc 148 | UIImage *img = [mgr imageNamed:@"icon"]; 149 | titleLabel.textColor = [mgr colorForKey:@"Content_Text_Color"]; 150 | titleLabel.font = [mgr fontForKey:@"Content_Font"]; 151 | ``` 152 | 153 | 154 | 155 | 156 | 157 | 158 | -------------------------------------------------------------------------------- /AWLThemeManager/AWLThemeManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // AWLThemeManager.m 3 | // ThemeManagerDemo 4 | // 5 | // Created by Neeeo on 14-10-16. 6 | // Copyright (c) 2014年 AppWill. All rights reserved. 7 | // 8 | 9 | #import "AWLThemeManager.h" 10 | #import "UIColor+HexString.h" 11 | 12 | @interface AWLThemeManager () 13 | 14 | @property (nonatomic, strong) NSMutableDictionary *themeList; 15 | @property (nonatomic, strong) NSMutableDictionary *themeRelationship; 16 | @property (nonatomic, strong) NSMutableDictionary *themeDefaultsList; 17 | 18 | @end 19 | 20 | @implementation AWLThemeManager 21 | 22 | - (instancetype)init 23 | { 24 | self = [super init]; 25 | if (self) { 26 | _themeList = [NSMutableDictionary dictionary]; 27 | _themeRelationship = [NSMutableDictionary dictionary]; 28 | _themeDefaultsList = [NSMutableDictionary dictionary]; 29 | } 30 | 31 | return self; 32 | } 33 | 34 | - (NSString*)addTheme:(NSString *)themePath 35 | { 36 | if ([self isValidString:themePath] == NO) { 37 | return nil; 38 | } 39 | 40 | if ([[NSFileManager defaultManager] fileExistsAtPath:themePath] == NO) { 41 | return nil; 42 | } 43 | 44 | NSDictionary *defaults = [self defaultsForTheme:themePath]; 45 | if (defaults) { 46 | NSString *themeName = defaults[@"AWL_THEME_NAME"]; 47 | if ([self isValidString:themeName]) { 48 | [self.themeDefaultsList setObject:defaults forKey:themeName]; 49 | [self.themeList setObject:themePath forKey:themeName]; 50 | 51 | NSString *baseTheme = defaults[@"AWL_BASE_THEME"]; 52 | if ([self isValidString:baseTheme]) { 53 | [self.themeRelationship setObject:baseTheme forKey:themeName]; 54 | } 55 | 56 | return themeName; 57 | } 58 | } 59 | 60 | return nil; 61 | } 62 | 63 | - (NSDictionary*)defaultsForTheme:(NSString*)themePath 64 | { 65 | NSString *path = [themePath stringByAppendingPathComponent:@"defaults.plist"]; 66 | if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { 67 | return [NSDictionary dictionaryWithContentsOfFile:path]; 68 | } 69 | 70 | return nil; 71 | } 72 | 73 | - (NSArray *)allThemes 74 | { 75 | return [self.themeList allKeys]; 76 | } 77 | 78 | - (UIColor *)colorForKey:(NSString *)key 79 | { 80 | return [self colorForKey:key forTheme:self.currentTheme]; 81 | } 82 | 83 | - (UIColor *)colorForKey:(NSString *)key forTheme:(NSString *)themeName 84 | { 85 | if ([self isValidString:themeName] == NO || [self isValidString:key] == NO) { 86 | return nil; 87 | } 88 | 89 | NSString *colorValue = [self objectForKey:key forTheme:themeName]; 90 | UIColor *color = [self colorFromString:colorValue]; 91 | if (color == nil && [self isValidString:colorValue]) { 92 | NSArray* referenceColor = [colorValue componentsSeparatedByString:@":"]; 93 | colorValue = referenceColor.firstObject; 94 | color = [self colorForKey:colorValue forTheme:themeName]; 95 | if (referenceColor.count > 1) { 96 | color = [color colorWithAlphaComponent:[referenceColor[1] doubleValue]]; 97 | } 98 | } 99 | 100 | return color; 101 | } 102 | 103 | - (UIColor*)colorFromString:(NSString*)colorValue 104 | { 105 | if ([self isValidString:colorValue]) { 106 | 107 | if ([colorValue hasPrefix: @"@"]) { 108 | NSArray* array = [colorValue componentsSeparatedByString:@","]; 109 | NSString* patternName = [array[0] substringFromIndex:1]; 110 | UIImage* patternImage = [self imageNamed:patternName]; 111 | if (patternImage == nil) { 112 | return nil; 113 | } 114 | UIColor* color = [UIColor colorWithPatternImage: patternImage]; 115 | if (array.count == 2) { 116 | color = [color colorWithAlphaComponent: [array[1] doubleValue]]; 117 | } 118 | return color; 119 | } 120 | else if ([colorValue hasPrefix: @"#"]) { 121 | return [UIColor colorWithHexString: colorValue]; 122 | } 123 | 124 | NSArray* array = [colorValue componentsSeparatedByString:@","]; 125 | if (array && [array count] == 2) { 126 | return [UIColor colorWithWhite:[array[0] doubleValue] 127 | alpha:[array[1] doubleValue]]; 128 | } 129 | else if (array && [array count] == 4) { 130 | return [UIColor colorWithRed:[array[0] doubleValue]/255.0 131 | green:[array[1] doubleValue]/255.0 132 | blue:[array[2] doubleValue]/255.0 133 | alpha:[array[3] doubleValue]]; 134 | } 135 | } 136 | 137 | return nil; 138 | } 139 | 140 | - (UIImage *)imageNamed:(NSString *)key 141 | { 142 | return [self imageNamed:key forTheme:self.currentTheme];; 143 | } 144 | 145 | - (UIImage *)imageNamed:(NSString *)key forTheme:(NSString*)themeName 146 | { 147 | if ([self isValidString:themeName] == NO || [self isValidString:key] == NO) { 148 | return nil; 149 | } 150 | 151 | NSString *imgName = [self objectForKey:key forTheme:themeName]; 152 | 153 | if (imgName == nil) { 154 | imgName = key; 155 | } 156 | 157 | UIImage* img = nil; 158 | NSBundle* bundle = [NSBundle bundleWithPath:self.themeList[themeName]]; 159 | 160 | if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_8_0) { 161 | img = [UIImage imageNamed:imgName inBundle:bundle compatibleWithTraitCollection:nil]; 162 | } 163 | #ifdef AWLThemeManager_XCASSETS_iOS7 164 | else { 165 | //This is included for reference/completeness. It fetches the device specific 166 | //image from the compiled Assets.car embedded in the theme bundle for iOS7 devices. 167 | //However, it is a *PRIVATE API* 168 | //As such, all relevant warnings and caveats apply to it's usage 169 | //IF you want to enable with cocoapods you'll need this: 170 | //https://guides.cocoapods.org/syntax/podfile.html#post_install 171 | static NSString* iOS7PrivateCompatSelector = @"_" @"device" @"Specific" @"ImageNamed:" @"inBundle:"; 172 | SEL deviceImageNamed = NSSelectorFromString(iOS7PrivateCompatSelector); 173 | if ([UIImage respondsToSelector: deviceImageNamed]) { 174 | img = [UIImage performSelector: deviceImageNamed withObject:imgName withObject:bundle]; 175 | } 176 | } 177 | #endif 178 | 179 | if (img == nil) { 180 | NSString *path = self.themeList[themeName]; 181 | path = [self relativePathToMainBundle:path]; 182 | NSString *filePath = [path stringByAppendingPathComponent:imgName]; 183 | img = [UIImage imageNamed:filePath]; 184 | } 185 | 186 | if (img == nil) { 187 | NSString *baseTheme = self.themeRelationship[themeName]; 188 | if ([self isValidString:baseTheme]) { 189 | img = [self imageNamed:imgName forTheme:baseTheme]; 190 | } 191 | else { 192 | img = [UIImage imageNamed:imgName]; 193 | } 194 | } 195 | 196 | return img; 197 | } 198 | 199 | - (NSString*)relativePathToMainBundle:(NSString*)path 200 | { 201 | NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath]; 202 | NSString *appDirectory = [mainBundlePath stringByDeletingLastPathComponent]; 203 | NSString *relativePath = [path stringByReplacingOccurrencesOfString:appDirectory withString:@".."]; 204 | return relativePath; 205 | } 206 | 207 | - (UIFont *)fontForKey:(NSString *)key 208 | { 209 | return [self fontForKey:key forTheme:self.currentTheme]; 210 | } 211 | 212 | - (UIFont *)fontForKey:(NSString *)key forTheme:(NSString*)themeName 213 | { 214 | if ([self isValidString:themeName] == NO || [self isValidString:key] == NO) { 215 | return nil; 216 | } 217 | 218 | NSString *fontValue = [self objectForKey:key forTheme:themeName]; 219 | UIFont *font = [self fontFromString:fontValue]; 220 | if (font == nil && [self isValidString:fontValue]) { 221 | font = [self fontForKey:fontValue forTheme:themeName]; 222 | } 223 | 224 | return font; 225 | } 226 | 227 | - (UIFont*)fontFromString:(NSString*)fontValue 228 | { 229 | UIFont *font = nil; 230 | if ([self isValidString:fontValue]) { 231 | NSArray *array = [fontValue componentsSeparatedByString:@","]; 232 | if (array && array.count == 2) { 233 | NSString *fontName = array[0]; 234 | CGFloat fontSize = [array[1] doubleValue]; 235 | if ([self isValidString:fontName]) { 236 | if ([fontName isEqualToString:@"bold"]) { 237 | font = [UIFont boldSystemFontOfSize:fontSize]; 238 | } 239 | else if ([fontName isEqualToString:@"italic"]) { 240 | font = [UIFont italicSystemFontOfSize:fontSize]; 241 | } 242 | else { 243 | font = [UIFont fontWithName:fontName size:fontSize]; 244 | } 245 | } 246 | else { 247 | font = [UIFont systemFontOfSize:fontSize]; 248 | } 249 | } 250 | } 251 | 252 | return font; 253 | } 254 | 255 | - (id)objectForKey:(NSString *)key 256 | { 257 | return [self objectForKey:key forTheme:self.currentTheme]; 258 | } 259 | 260 | - (id)objectForKey:(NSString *)key forTheme:(NSString*)themeName 261 | { 262 | if ([self isValidString:themeName] == NO || [self isValidString:key] == NO) { 263 | return nil; 264 | } 265 | 266 | NSDictionary *defaults = self.themeDefaultsList[themeName]; 267 | id obj = defaults[key]; 268 | if (obj == nil) { 269 | NSString *baseTheme = self.themeRelationship[themeName]; 270 | obj = [self objectForKey:key forTheme:baseTheme]; 271 | } 272 | 273 | return obj; 274 | } 275 | 276 | //Keep for back compat 277 | - (NSString *)filePathForFileName:(NSString *)fileName 278 | { 279 | return [self filePathForFileName:fileName forTheme:self.currentTheme]; 280 | } 281 | 282 | - (NSString *)filePathForFileName:(NSString *)fileName ofType:(NSString*) type 283 | { 284 | return [self filePathForFileName:fileName ofType:type forTheme:self.currentTheme]; 285 | } 286 | 287 | //Keep for back compat 288 | - (NSString*)filePathForFileName:(NSString *)name forTheme:(NSString*)themeName 289 | { 290 | return [self filePathForFileName:name ofType:nil forTheme:themeName]; 291 | } 292 | 293 | - (NSString*)filePathForFileName:(NSString *)name ofType:(NSString*) type forTheme:(NSString*)themeName 294 | { 295 | if ([self isValidString:themeName] == NO || [self isValidString:name] == NO) { 296 | return nil; 297 | } 298 | 299 | NSString *fileName = [self objectForKey:name forTheme:themeName]; 300 | 301 | if (fileName == nil) { 302 | fileName = name; 303 | } 304 | 305 | NSBundle* themeBundle = [NSBundle bundleWithPath:self.themeList[themeName]]; 306 | NSString* filePath = [themeBundle pathForResource: fileName ofType: type]; 307 | 308 | if (filePath == nil) { 309 | NSFileManager *fileManger = [NSFileManager defaultManager]; 310 | NSString *themePath = self.themeList[themeName]; 311 | NSString *tmpPath = [themePath stringByAppendingPathComponent:name]; 312 | if ([fileManger fileExistsAtPath:tmpPath]) { 313 | filePath = tmpPath; 314 | } 315 | else { 316 | NSString *baseTheme = self.themeRelationship[themeName]; 317 | filePath = [self filePathForFileName:name ofType:type forTheme:baseTheme]; 318 | } 319 | } 320 | 321 | if (filePath == nil) { 322 | NSBundle* bundle = [NSBundle mainBundle]; 323 | filePath = [bundle pathForResource: fileName ofType: type]; 324 | } 325 | 326 | return filePath; 327 | } 328 | 329 | - (BOOL)isValidString:(NSString *)str 330 | { 331 | if (str && [str isKindOfClass:[NSString class]] && [str length] > 0) { 332 | return YES; 333 | } 334 | 335 | return NO; 336 | } 337 | 338 | @end 339 | -------------------------------------------------------------------------------- /ThemeManagerDemo/ThemeManagerDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | archiveVersion 6 | 1 7 | classes 8 | 9 | objectVersion 10 | 46 11 | objects 12 | 13 | 0479A2E21AB0385E00E544E6 14 | 15 | isa 16 | PBXFileReference 17 | lastKnownFileType 18 | wrapper.plug-in 19 | path 20 | Sample.bundle 21 | sourceTree 22 | <group> 23 | 24 | 0479A2E31AB0385E00E544E6 25 | 26 | fileRef 27 | 0479A2E21AB0385E00E544E6 28 | isa 29 | PBXBuildFile 30 | 31 | 0479A2E41AB05A4A00E544E6 32 | 33 | isa 34 | PBXFileReference 35 | lastKnownFileType 36 | wrapper.plug-in 37 | path 38 | BaseSample.bundle 39 | sourceTree 40 | <group> 41 | 42 | 0479A2E51AB05A4A00E544E6 43 | 44 | fileRef 45 | 0479A2E41AB05A4A00E544E6 46 | isa 47 | PBXBuildFile 48 | 49 | 0C6A0A2B0BBC94DB6BF60CBB 50 | 51 | fileRef 52 | D74E25516BA6C301B92A1402 53 | isa 54 | PBXBuildFile 55 | 56 | 24CCB6C0B831BC7D9AE27724 57 | 58 | buildActionMask 59 | 2147483647 60 | files 61 | 62 | inputPaths 63 | 64 | isa 65 | PBXShellScriptBuildPhase 66 | name 67 | Embed Pods Frameworks 68 | outputPaths 69 | 70 | runOnlyForDeploymentPostprocessing 71 | 0 72 | shellPath 73 | /bin/sh 74 | shellScript 75 | "${SRCROOT}/Pods/Target Support Files/Pods-ThemeManagerDemo/Pods-ThemeManagerDemo-frameworks.sh" 76 | 77 | showEnvVarsInLog 78 | 0 79 | 80 | 45B7F622E5CC76B692F99198 81 | 82 | includeInIndex 83 | 1 84 | isa 85 | PBXFileReference 86 | lastKnownFileType 87 | text.xcconfig 88 | name 89 | Pods-ThemeManagerDemo.debug.xcconfig 90 | path 91 | Pods/Target Support Files/Pods-ThemeManagerDemo/Pods-ThemeManagerDemo.debug.xcconfig 92 | sourceTree 93 | <group> 94 | 95 | 5B7A2614D002E69FDF50858F 96 | 97 | children 98 | 99 | 45B7F622E5CC76B692F99198 100 | 6821233702A5B8AB62058C9B 101 | 102 | isa 103 | PBXGroup 104 | name 105 | Pods 106 | sourceTree 107 | <group> 108 | 109 | 6821233702A5B8AB62058C9B 110 | 111 | includeInIndex 112 | 1 113 | isa 114 | PBXFileReference 115 | lastKnownFileType 116 | text.xcconfig 117 | name 118 | Pods-ThemeManagerDemo.release.xcconfig 119 | path 120 | Pods/Target Support Files/Pods-ThemeManagerDemo/Pods-ThemeManagerDemo.release.xcconfig 121 | sourceTree 122 | <group> 123 | 124 | 9EB3368C19F01C2600C82FD3 125 | 126 | children 127 | 128 | 9EB336BE19F01C4900C82FD3 129 | 9EB3369719F01C2600C82FD3 130 | 9EB336B119F01C2600C82FD3 131 | B5410E9E1C853236006203C9 132 | 9EB3369619F01C2600C82FD3 133 | 5B7A2614D002E69FDF50858F 134 | EF6E6805B458CC78A51D876D 135 | 136 | isa 137 | PBXGroup 138 | sourceTree 139 | <group> 140 | 141 | 9EB3368D19F01C2600C82FD3 142 | 143 | attributes 144 | 145 | LastUpgradeCheck 146 | 0600 147 | ORGANIZATIONNAME 148 | AppWill 149 | TargetAttributes 150 | 151 | 9EB3369419F01C2600C82FD3 152 | 153 | CreatedOnToolsVersion 154 | 6.0.1 155 | 156 | 9EB336AD19F01C2600C82FD3 157 | 158 | CreatedOnToolsVersion 159 | 6.0.1 160 | TestTargetID 161 | 9EB3369419F01C2600C82FD3 162 | 163 | B5410E9C1C853236006203C9 164 | 165 | CreatedOnToolsVersion 166 | 7.2 167 | 168 | 169 | 170 | buildConfigurationList 171 | 9EB3369019F01C2600C82FD3 172 | compatibilityVersion 173 | Xcode 3.2 174 | developmentRegion 175 | English 176 | hasScannedForEncodings 177 | 0 178 | isa 179 | PBXProject 180 | knownRegions 181 | 182 | en 183 | Base 184 | 185 | mainGroup 186 | 9EB3368C19F01C2600C82FD3 187 | productRefGroup 188 | 9EB3369619F01C2600C82FD3 189 | projectDirPath 190 | 191 | projectReferences 192 | 193 | projectRoot 194 | 195 | targets 196 | 197 | 9EB3369419F01C2600C82FD3 198 | 9EB336AD19F01C2600C82FD3 199 | B5410E9C1C853236006203C9 200 | 201 | 202 | 9EB3369019F01C2600C82FD3 203 | 204 | buildConfigurations 205 | 206 | 9EB336B619F01C2600C82FD3 207 | 9EB336B719F01C2600C82FD3 208 | 209 | defaultConfigurationIsVisible 210 | 0 211 | defaultConfigurationName 212 | Release 213 | isa 214 | XCConfigurationList 215 | 216 | 9EB3369119F01C2600C82FD3 217 | 218 | buildActionMask 219 | 2147483647 220 | files 221 | 222 | 9EB336A119F01C2600C82FD3 223 | 9EB3369E19F01C2600C82FD3 224 | 9EB336C119F01CAC00C82FD3 225 | 9EB3369B19F01C2600C82FD3 226 | 227 | isa 228 | PBXSourcesBuildPhase 229 | runOnlyForDeploymentPostprocessing 230 | 0 231 | 232 | 9EB3369219F01C2600C82FD3 233 | 234 | buildActionMask 235 | 2147483647 236 | files 237 | 238 | 0C6A0A2B0BBC94DB6BF60CBB 239 | 240 | isa 241 | PBXFrameworksBuildPhase 242 | runOnlyForDeploymentPostprocessing 243 | 0 244 | 245 | 9EB3369319F01C2600C82FD3 246 | 247 | buildActionMask 248 | 2147483647 249 | files 250 | 251 | B5410EAC1C85358F006203C9 252 | 9EB336A419F01C2600C82FD3 253 | 0479A2E51AB05A4A00E544E6 254 | 9EB336A919F01C2600C82FD3 255 | 9EB336A619F01C2600C82FD3 256 | 0479A2E31AB0385E00E544E6 257 | 258 | isa 259 | PBXResourcesBuildPhase 260 | runOnlyForDeploymentPostprocessing 261 | 0 262 | 263 | 9EB3369419F01C2600C82FD3 264 | 265 | buildConfigurationList 266 | 9EB336B819F01C2600C82FD3 267 | buildPhases 268 | 269 | EAA685EF40B6F6BC66269731 270 | 9EB3369119F01C2600C82FD3 271 | 9EB3369219F01C2600C82FD3 272 | 9EB3369319F01C2600C82FD3 273 | 24CCB6C0B831BC7D9AE27724 274 | E56CEA6CE4091A2283607CF8 275 | 276 | buildRules 277 | 278 | dependencies 279 | 280 | B5410EAB1C853581006203C9 281 | 282 | isa 283 | PBXNativeTarget 284 | name 285 | ThemeManagerDemo 286 | productName 287 | ThemeManagerDemo 288 | productReference 289 | 9EB3369519F01C2600C82FD3 290 | productType 291 | com.apple.product-type.application 292 | 293 | 9EB3369519F01C2600C82FD3 294 | 295 | explicitFileType 296 | wrapper.application 297 | includeInIndex 298 | 0 299 | isa 300 | PBXFileReference 301 | path 302 | ThemeManagerDemo.app 303 | sourceTree 304 | BUILT_PRODUCTS_DIR 305 | 306 | 9EB3369619F01C2600C82FD3 307 | 308 | children 309 | 310 | 9EB3369519F01C2600C82FD3 311 | 9EB336AE19F01C2600C82FD3 312 | B5410E9D1C853236006203C9 313 | 314 | isa 315 | PBXGroup 316 | name 317 | Products 318 | sourceTree 319 | <group> 320 | 321 | 9EB3369719F01C2600C82FD3 322 | 323 | children 324 | 325 | B5410EA71C853415006203C9 326 | 0479A2E41AB05A4A00E544E6 327 | 0479A2E21AB0385E00E544E6 328 | 9EB3369C19F01C2600C82FD3 329 | 9EB3369D19F01C2600C82FD3 330 | 9EB3369F19F01C2600C82FD3 331 | 9EB336A019F01C2600C82FD3 332 | 9EB336A219F01C2600C82FD3 333 | 9EB336A519F01C2600C82FD3 334 | 9EB336A719F01C2600C82FD3 335 | 9EB3369819F01C2600C82FD3 336 | 337 | isa 338 | PBXGroup 339 | path 340 | ThemeManagerDemo 341 | sourceTree 342 | <group> 343 | 344 | 9EB3369819F01C2600C82FD3 345 | 346 | children 347 | 348 | 9EB3369919F01C2600C82FD3 349 | 9EB3369A19F01C2600C82FD3 350 | 351 | isa 352 | PBXGroup 353 | name 354 | Supporting Files 355 | sourceTree 356 | <group> 357 | 358 | 9EB3369919F01C2600C82FD3 359 | 360 | isa 361 | PBXFileReference 362 | lastKnownFileType 363 | text.plist.xml 364 | path 365 | Info.plist 366 | sourceTree 367 | <group> 368 | 369 | 9EB3369A19F01C2600C82FD3 370 | 371 | isa 372 | PBXFileReference 373 | lastKnownFileType 374 | sourcecode.c.objc 375 | path 376 | main.m 377 | sourceTree 378 | <group> 379 | 380 | 9EB3369B19F01C2600C82FD3 381 | 382 | fileRef 383 | 9EB3369A19F01C2600C82FD3 384 | isa 385 | PBXBuildFile 386 | 387 | 9EB3369C19F01C2600C82FD3 388 | 389 | isa 390 | PBXFileReference 391 | lastKnownFileType 392 | sourcecode.c.h 393 | path 394 | AppDelegate.h 395 | sourceTree 396 | <group> 397 | 398 | 9EB3369D19F01C2600C82FD3 399 | 400 | isa 401 | PBXFileReference 402 | lastKnownFileType 403 | sourcecode.c.objc 404 | path 405 | AppDelegate.m 406 | sourceTree 407 | <group> 408 | 409 | 9EB3369E19F01C2600C82FD3 410 | 411 | fileRef 412 | 9EB3369D19F01C2600C82FD3 413 | isa 414 | PBXBuildFile 415 | 416 | 9EB3369F19F01C2600C82FD3 417 | 418 | isa 419 | PBXFileReference 420 | lastKnownFileType 421 | sourcecode.c.h 422 | path 423 | ViewController.h 424 | sourceTree 425 | <group> 426 | 427 | 9EB336A019F01C2600C82FD3 428 | 429 | isa 430 | PBXFileReference 431 | lastKnownFileType 432 | sourcecode.c.objc 433 | path 434 | ViewController.m 435 | sourceTree 436 | <group> 437 | 438 | 9EB336A119F01C2600C82FD3 439 | 440 | fileRef 441 | 9EB336A019F01C2600C82FD3 442 | isa 443 | PBXBuildFile 444 | 445 | 9EB336A219F01C2600C82FD3 446 | 447 | children 448 | 449 | 9EB336A319F01C2600C82FD3 450 | 451 | isa 452 | PBXVariantGroup 453 | name 454 | Main.storyboard 455 | sourceTree 456 | <group> 457 | 458 | 9EB336A319F01C2600C82FD3 459 | 460 | isa 461 | PBXFileReference 462 | lastKnownFileType 463 | file.storyboard 464 | name 465 | Base 466 | path 467 | Base.lproj/Main.storyboard 468 | sourceTree 469 | <group> 470 | 471 | 9EB336A419F01C2600C82FD3 472 | 473 | fileRef 474 | 9EB336A219F01C2600C82FD3 475 | isa 476 | PBXBuildFile 477 | 478 | 9EB336A519F01C2600C82FD3 479 | 480 | isa 481 | PBXFileReference 482 | lastKnownFileType 483 | folder.assetcatalog 484 | path 485 | Images.xcassets 486 | sourceTree 487 | <group> 488 | 489 | 9EB336A619F01C2600C82FD3 490 | 491 | fileRef 492 | 9EB336A519F01C2600C82FD3 493 | isa 494 | PBXBuildFile 495 | 496 | 9EB336A719F01C2600C82FD3 497 | 498 | children 499 | 500 | 9EB336A819F01C2600C82FD3 501 | 502 | isa 503 | PBXVariantGroup 504 | name 505 | LaunchScreen.xib 506 | sourceTree 507 | <group> 508 | 509 | 9EB336A819F01C2600C82FD3 510 | 511 | isa 512 | PBXFileReference 513 | lastKnownFileType 514 | file.xib 515 | name 516 | Base 517 | path 518 | Base.lproj/LaunchScreen.xib 519 | sourceTree 520 | <group> 521 | 522 | 9EB336A919F01C2600C82FD3 523 | 524 | fileRef 525 | 9EB336A719F01C2600C82FD3 526 | isa 527 | PBXBuildFile 528 | 529 | 9EB336AA19F01C2600C82FD3 530 | 531 | buildActionMask 532 | 2147483647 533 | files 534 | 535 | 9EB336B519F01C2600C82FD3 536 | 537 | isa 538 | PBXSourcesBuildPhase 539 | runOnlyForDeploymentPostprocessing 540 | 0 541 | 542 | 9EB336AB19F01C2600C82FD3 543 | 544 | buildActionMask 545 | 2147483647 546 | files 547 | 548 | isa 549 | PBXFrameworksBuildPhase 550 | runOnlyForDeploymentPostprocessing 551 | 0 552 | 553 | 9EB336AC19F01C2600C82FD3 554 | 555 | buildActionMask 556 | 2147483647 557 | files 558 | 559 | isa 560 | PBXResourcesBuildPhase 561 | runOnlyForDeploymentPostprocessing 562 | 0 563 | 564 | 9EB336AD19F01C2600C82FD3 565 | 566 | buildConfigurationList 567 | 9EB336BB19F01C2600C82FD3 568 | buildPhases 569 | 570 | 9EB336AA19F01C2600C82FD3 571 | 9EB336AB19F01C2600C82FD3 572 | 9EB336AC19F01C2600C82FD3 573 | 574 | buildRules 575 | 576 | dependencies 577 | 578 | 9EB336B019F01C2600C82FD3 579 | 580 | isa 581 | PBXNativeTarget 582 | name 583 | ThemeManagerDemoTests 584 | productName 585 | ThemeManagerDemoTests 586 | productReference 587 | 9EB336AE19F01C2600C82FD3 588 | productType 589 | com.apple.product-type.bundle.unit-test 590 | 591 | 9EB336AE19F01C2600C82FD3 592 | 593 | explicitFileType 594 | wrapper.cfbundle 595 | includeInIndex 596 | 0 597 | isa 598 | PBXFileReference 599 | path 600 | ThemeManagerDemoTests.xctest 601 | sourceTree 602 | BUILT_PRODUCTS_DIR 603 | 604 | 9EB336AF19F01C2600C82FD3 605 | 606 | containerPortal 607 | 9EB3368D19F01C2600C82FD3 608 | isa 609 | PBXContainerItemProxy 610 | proxyType 611 | 1 612 | remoteGlobalIDString 613 | 9EB3369419F01C2600C82FD3 614 | remoteInfo 615 | ThemeManagerDemo 616 | 617 | 9EB336B019F01C2600C82FD3 618 | 619 | isa 620 | PBXTargetDependency 621 | target 622 | 9EB3369419F01C2600C82FD3 623 | targetProxy 624 | 9EB336AF19F01C2600C82FD3 625 | 626 | 9EB336B119F01C2600C82FD3 627 | 628 | children 629 | 630 | 9EB336B419F01C2600C82FD3 631 | 9EB336B219F01C2600C82FD3 632 | 633 | isa 634 | PBXGroup 635 | path 636 | ThemeManagerDemoTests 637 | sourceTree 638 | <group> 639 | 640 | 9EB336B219F01C2600C82FD3 641 | 642 | children 643 | 644 | 9EB336B319F01C2600C82FD3 645 | 646 | isa 647 | PBXGroup 648 | name 649 | Supporting Files 650 | sourceTree 651 | <group> 652 | 653 | 9EB336B319F01C2600C82FD3 654 | 655 | isa 656 | PBXFileReference 657 | lastKnownFileType 658 | text.plist.xml 659 | path 660 | Info.plist 661 | sourceTree 662 | <group> 663 | 664 | 9EB336B419F01C2600C82FD3 665 | 666 | isa 667 | PBXFileReference 668 | lastKnownFileType 669 | sourcecode.c.objc 670 | path 671 | ThemeManagerDemoTests.m 672 | sourceTree 673 | <group> 674 | 675 | 9EB336B519F01C2600C82FD3 676 | 677 | fileRef 678 | 9EB336B419F01C2600C82FD3 679 | isa 680 | PBXBuildFile 681 | 682 | 9EB336B619F01C2600C82FD3 683 | 684 | buildSettings 685 | 686 | ALWAYS_SEARCH_USER_PATHS 687 | NO 688 | CLANG_CXX_LANGUAGE_STANDARD 689 | gnu++0x 690 | CLANG_CXX_LIBRARY 691 | libc++ 692 | CLANG_ENABLE_MODULES 693 | YES 694 | CLANG_ENABLE_OBJC_ARC 695 | YES 696 | CLANG_WARN_BOOL_CONVERSION 697 | YES 698 | CLANG_WARN_CONSTANT_CONVERSION 699 | YES 700 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 701 | YES_ERROR 702 | CLANG_WARN_EMPTY_BODY 703 | YES 704 | CLANG_WARN_ENUM_CONVERSION 705 | YES 706 | CLANG_WARN_INT_CONVERSION 707 | YES 708 | CLANG_WARN_OBJC_ROOT_CLASS 709 | YES_ERROR 710 | CLANG_WARN_UNREACHABLE_CODE 711 | YES 712 | CLANG_WARN__DUPLICATE_METHOD_MATCH 713 | YES 714 | CODE_SIGN_IDENTITY[sdk=iphoneos*] 715 | iPhone Developer 716 | COPY_PHASE_STRIP 717 | NO 718 | ENABLE_STRICT_OBJC_MSGSEND 719 | YES 720 | GCC_C_LANGUAGE_STANDARD 721 | gnu99 722 | GCC_DYNAMIC_NO_PIC 723 | NO 724 | GCC_OPTIMIZATION_LEVEL 725 | 0 726 | GCC_PREPROCESSOR_DEFINITIONS 727 | 728 | DEBUG=1 729 | $(inherited) 730 | 731 | GCC_SYMBOLS_PRIVATE_EXTERN 732 | NO 733 | GCC_WARN_64_TO_32_BIT_CONVERSION 734 | YES 735 | GCC_WARN_ABOUT_RETURN_TYPE 736 | YES_ERROR 737 | GCC_WARN_UNDECLARED_SELECTOR 738 | YES 739 | GCC_WARN_UNINITIALIZED_AUTOS 740 | YES_AGGRESSIVE 741 | GCC_WARN_UNUSED_FUNCTION 742 | YES 743 | GCC_WARN_UNUSED_VARIABLE 744 | YES 745 | IPHONEOS_DEPLOYMENT_TARGET 746 | 8.0 747 | MTL_ENABLE_DEBUG_INFO 748 | YES 749 | ONLY_ACTIVE_ARCH 750 | YES 751 | SDKROOT 752 | iphoneos 753 | 754 | isa 755 | XCBuildConfiguration 756 | name 757 | Debug 758 | 759 | 9EB336B719F01C2600C82FD3 760 | 761 | buildSettings 762 | 763 | ALWAYS_SEARCH_USER_PATHS 764 | NO 765 | CLANG_CXX_LANGUAGE_STANDARD 766 | gnu++0x 767 | CLANG_CXX_LIBRARY 768 | libc++ 769 | CLANG_ENABLE_MODULES 770 | YES 771 | CLANG_ENABLE_OBJC_ARC 772 | YES 773 | CLANG_WARN_BOOL_CONVERSION 774 | YES 775 | CLANG_WARN_CONSTANT_CONVERSION 776 | YES 777 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 778 | YES_ERROR 779 | CLANG_WARN_EMPTY_BODY 780 | YES 781 | CLANG_WARN_ENUM_CONVERSION 782 | YES 783 | CLANG_WARN_INT_CONVERSION 784 | YES 785 | CLANG_WARN_OBJC_ROOT_CLASS 786 | YES_ERROR 787 | CLANG_WARN_UNREACHABLE_CODE 788 | YES 789 | CLANG_WARN__DUPLICATE_METHOD_MATCH 790 | YES 791 | CODE_SIGN_IDENTITY[sdk=iphoneos*] 792 | iPhone Developer 793 | COPY_PHASE_STRIP 794 | YES 795 | ENABLE_NS_ASSERTIONS 796 | NO 797 | ENABLE_STRICT_OBJC_MSGSEND 798 | YES 799 | GCC_C_LANGUAGE_STANDARD 800 | gnu99 801 | GCC_WARN_64_TO_32_BIT_CONVERSION 802 | YES 803 | GCC_WARN_ABOUT_RETURN_TYPE 804 | YES_ERROR 805 | GCC_WARN_UNDECLARED_SELECTOR 806 | YES 807 | GCC_WARN_UNINITIALIZED_AUTOS 808 | YES_AGGRESSIVE 809 | GCC_WARN_UNUSED_FUNCTION 810 | YES 811 | GCC_WARN_UNUSED_VARIABLE 812 | YES 813 | IPHONEOS_DEPLOYMENT_TARGET 814 | 8.0 815 | MTL_ENABLE_DEBUG_INFO 816 | NO 817 | SDKROOT 818 | iphoneos 819 | VALIDATE_PRODUCT 820 | YES 821 | 822 | isa 823 | XCBuildConfiguration 824 | name 825 | Release 826 | 827 | 9EB336B819F01C2600C82FD3 828 | 829 | buildConfigurations 830 | 831 | 9EB336B919F01C2600C82FD3 832 | 9EB336BA19F01C2600C82FD3 833 | 834 | defaultConfigurationIsVisible 835 | 0 836 | defaultConfigurationName 837 | Release 838 | isa 839 | XCConfigurationList 840 | 841 | 9EB336B919F01C2600C82FD3 842 | 843 | baseConfigurationReference 844 | 45B7F622E5CC76B692F99198 845 | buildSettings 846 | 847 | ASSETCATALOG_COMPILER_APPICON_NAME 848 | AppIcon 849 | INFOPLIST_FILE 850 | ThemeManagerDemo/Info.plist 851 | IPHONEOS_DEPLOYMENT_TARGET 852 | 7.0 853 | LD_RUNPATH_SEARCH_PATHS 854 | $(inherited) @executable_path/Frameworks 855 | PRODUCT_NAME 856 | $(TARGET_NAME) 857 | 858 | isa 859 | XCBuildConfiguration 860 | name 861 | Debug 862 | 863 | 9EB336BA19F01C2600C82FD3 864 | 865 | baseConfigurationReference 866 | 6821233702A5B8AB62058C9B 867 | buildSettings 868 | 869 | ASSETCATALOG_COMPILER_APPICON_NAME 870 | AppIcon 871 | INFOPLIST_FILE 872 | ThemeManagerDemo/Info.plist 873 | IPHONEOS_DEPLOYMENT_TARGET 874 | 7.0 875 | LD_RUNPATH_SEARCH_PATHS 876 | $(inherited) @executable_path/Frameworks 877 | PRODUCT_NAME 878 | $(TARGET_NAME) 879 | 880 | isa 881 | XCBuildConfiguration 882 | name 883 | Release 884 | 885 | 9EB336BB19F01C2600C82FD3 886 | 887 | buildConfigurations 888 | 889 | 9EB336BC19F01C2600C82FD3 890 | 9EB336BD19F01C2600C82FD3 891 | 892 | defaultConfigurationIsVisible 893 | 0 894 | defaultConfigurationName 895 | Release 896 | isa 897 | XCConfigurationList 898 | 899 | 9EB336BC19F01C2600C82FD3 900 | 901 | buildSettings 902 | 903 | BUNDLE_LOADER 904 | $(TEST_HOST) 905 | FRAMEWORK_SEARCH_PATHS 906 | 907 | $(SDKROOT)/Developer/Library/Frameworks 908 | $(inherited) 909 | 910 | GCC_PREPROCESSOR_DEFINITIONS 911 | 912 | DEBUG=1 913 | $(inherited) 914 | 915 | INFOPLIST_FILE 916 | ThemeManagerDemoTests/Info.plist 917 | LD_RUNPATH_SEARCH_PATHS 918 | $(inherited) @executable_path/Frameworks @loader_path/Frameworks 919 | PRODUCT_NAME 920 | $(TARGET_NAME) 921 | TEST_HOST 922 | $(BUILT_PRODUCTS_DIR)/ThemeManagerDemo.app/ThemeManagerDemo 923 | 924 | isa 925 | XCBuildConfiguration 926 | name 927 | Debug 928 | 929 | 9EB336BD19F01C2600C82FD3 930 | 931 | buildSettings 932 | 933 | BUNDLE_LOADER 934 | $(TEST_HOST) 935 | FRAMEWORK_SEARCH_PATHS 936 | 937 | $(SDKROOT)/Developer/Library/Frameworks 938 | $(inherited) 939 | 940 | INFOPLIST_FILE 941 | ThemeManagerDemoTests/Info.plist 942 | LD_RUNPATH_SEARCH_PATHS 943 | $(inherited) @executable_path/Frameworks @loader_path/Frameworks 944 | PRODUCT_NAME 945 | $(TARGET_NAME) 946 | TEST_HOST 947 | $(BUILT_PRODUCTS_DIR)/ThemeManagerDemo.app/ThemeManagerDemo 948 | 949 | isa 950 | XCBuildConfiguration 951 | name 952 | Release 953 | 954 | 9EB336BE19F01C4900C82FD3 955 | 956 | children 957 | 958 | 9EB336BF19F01CAC00C82FD3 959 | 9EB336C019F01CAC00C82FD3 960 | 961 | isa 962 | PBXGroup 963 | name 964 | AWLThemeManager 965 | path 966 | ../AWLThemeManager 967 | sourceTree 968 | <group> 969 | 970 | 9EB336BF19F01CAC00C82FD3 971 | 972 | fileEncoding 973 | 4 974 | isa 975 | PBXFileReference 976 | lastKnownFileType 977 | sourcecode.c.h 978 | path 979 | AWLThemeManager.h 980 | sourceTree 981 | <group> 982 | 983 | 9EB336C019F01CAC00C82FD3 984 | 985 | fileEncoding 986 | 4 987 | isa 988 | PBXFileReference 989 | lastKnownFileType 990 | sourcecode.c.objc 991 | path 992 | AWLThemeManager.m 993 | sourceTree 994 | <group> 995 | 996 | 9EB336C119F01CAC00C82FD3 997 | 998 | fileRef 999 | 9EB336C019F01CAC00C82FD3 1000 | isa 1001 | PBXBuildFile 1002 | 1003 | B5410E991C853236006203C9 1004 | 1005 | buildActionMask 1006 | 2147483647 1007 | files 1008 | 1009 | isa 1010 | PBXSourcesBuildPhase 1011 | runOnlyForDeploymentPostprocessing 1012 | 0 1013 | 1014 | B5410E9A1C853236006203C9 1015 | 1016 | buildActionMask 1017 | 2147483647 1018 | files 1019 | 1020 | isa 1021 | PBXFrameworksBuildPhase 1022 | runOnlyForDeploymentPostprocessing 1023 | 0 1024 | 1025 | B5410E9B1C853236006203C9 1026 | 1027 | buildActionMask 1028 | 2147483647 1029 | files 1030 | 1031 | B5410EA91C853541006203C9 1032 | B5410EA41C853269006203C9 1033 | 1034 | isa 1035 | PBXResourcesBuildPhase 1036 | runOnlyForDeploymentPostprocessing 1037 | 0 1038 | 1039 | B5410E9C1C853236006203C9 1040 | 1041 | buildConfigurationList 1042 | B5410EA21C853236006203C9 1043 | buildPhases 1044 | 1045 | B5410E991C853236006203C9 1046 | B5410E9A1C853236006203C9 1047 | B5410E9B1C853236006203C9 1048 | 1049 | buildRules 1050 | 1051 | dependencies 1052 | 1053 | isa 1054 | PBXNativeTarget 1055 | name 1056 | Assets 1057 | productName 1058 | Assets 1059 | productReference 1060 | B5410E9D1C853236006203C9 1061 | productType 1062 | com.apple.product-type.bundle 1063 | 1064 | B5410E9D1C853236006203C9 1065 | 1066 | explicitFileType 1067 | wrapper.cfbundle 1068 | includeInIndex 1069 | 0 1070 | isa 1071 | PBXFileReference 1072 | path 1073 | Assets.bundle 1074 | sourceTree 1075 | BUILT_PRODUCTS_DIR 1076 | 1077 | B5410E9E1C853236006203C9 1078 | 1079 | children 1080 | 1081 | B5410E9F1C853236006203C9 1082 | 1083 | isa 1084 | PBXGroup 1085 | path 1086 | Assets 1087 | sourceTree 1088 | <group> 1089 | 1090 | B5410E9F1C853236006203C9 1091 | 1092 | isa 1093 | PBXFileReference 1094 | lastKnownFileType 1095 | text.plist.xml 1096 | path 1097 | Info.plist 1098 | sourceTree 1099 | <group> 1100 | 1101 | B5410EA01C853236006203C9 1102 | 1103 | buildSettings 1104 | 1105 | CODE_SIGN_IDENTITY 1106 | - 1107 | COMBINE_HIDPI_IMAGES 1108 | YES 1109 | DEBUG_INFORMATION_FORMAT 1110 | dwarf 1111 | ENABLE_TESTABILITY 1112 | YES 1113 | GCC_NO_COMMON_BLOCKS 1114 | YES 1115 | INFOPLIST_FILE 1116 | Assets/Info.plist 1117 | INSTALL_PATH 1118 | $(LOCAL_LIBRARY_DIR)/Bundles 1119 | MACOSX_DEPLOYMENT_TARGET 1120 | 10.11 1121 | PRODUCT_BUNDLE_IDENTIFIER 1122 | com.appwill.Assets 1123 | PRODUCT_NAME 1124 | $(TARGET_NAME) 1125 | SDKROOT 1126 | iphoneos 1127 | SKIP_INSTALL 1128 | YES 1129 | WRAPPER_EXTENSION 1130 | bundle 1131 | 1132 | isa 1133 | XCBuildConfiguration 1134 | name 1135 | Debug 1136 | 1137 | B5410EA11C853236006203C9 1138 | 1139 | buildSettings 1140 | 1141 | CODE_SIGN_IDENTITY 1142 | - 1143 | COMBINE_HIDPI_IMAGES 1144 | YES 1145 | COPY_PHASE_STRIP 1146 | NO 1147 | DEBUG_INFORMATION_FORMAT 1148 | dwarf-with-dsym 1149 | GCC_NO_COMMON_BLOCKS 1150 | YES 1151 | INFOPLIST_FILE 1152 | Assets/Info.plist 1153 | INSTALL_PATH 1154 | $(LOCAL_LIBRARY_DIR)/Bundles 1155 | MACOSX_DEPLOYMENT_TARGET 1156 | 10.11 1157 | PRODUCT_BUNDLE_IDENTIFIER 1158 | com.appwill.Assets 1159 | PRODUCT_NAME 1160 | $(TARGET_NAME) 1161 | SDKROOT 1162 | iphoneos 1163 | SKIP_INSTALL 1164 | YES 1165 | WRAPPER_EXTENSION 1166 | bundle 1167 | 1168 | isa 1169 | XCBuildConfiguration 1170 | name 1171 | Release 1172 | 1173 | B5410EA21C853236006203C9 1174 | 1175 | buildConfigurations 1176 | 1177 | B5410EA01C853236006203C9 1178 | B5410EA11C853236006203C9 1179 | 1180 | defaultConfigurationIsVisible 1181 | 0 1182 | isa 1183 | XCConfigurationList 1184 | 1185 | B5410EA31C853269006203C9 1186 | 1187 | isa 1188 | PBXFileReference 1189 | lastKnownFileType 1190 | folder.assetcatalog 1191 | path 1192 | Media.xcassets 1193 | sourceTree 1194 | <group> 1195 | 1196 | B5410EA41C853269006203C9 1197 | 1198 | fileRef 1199 | B5410EA31C853269006203C9 1200 | isa 1201 | PBXBuildFile 1202 | 1203 | B5410EA71C853415006203C9 1204 | 1205 | children 1206 | 1207 | B5410EA81C853541006203C9 1208 | B5410EA31C853269006203C9 1209 | 1210 | isa 1211 | PBXGroup 1212 | name 1213 | AssetsBundle 1214 | sourceTree 1215 | <group> 1216 | 1217 | B5410EA81C853541006203C9 1218 | 1219 | fileEncoding 1220 | 4 1221 | isa 1222 | PBXFileReference 1223 | lastKnownFileType 1224 | text.plist.xml 1225 | path 1226 | defaults.plist 1227 | sourceTree 1228 | <group> 1229 | 1230 | B5410EA91C853541006203C9 1231 | 1232 | fileRef 1233 | B5410EA81C853541006203C9 1234 | isa 1235 | PBXBuildFile 1236 | 1237 | B5410EAA1C853581006203C9 1238 | 1239 | containerPortal 1240 | 9EB3368D19F01C2600C82FD3 1241 | isa 1242 | PBXContainerItemProxy 1243 | proxyType 1244 | 1 1245 | remoteGlobalIDString 1246 | B5410E9C1C853236006203C9 1247 | remoteInfo 1248 | Assets 1249 | 1250 | B5410EAB1C853581006203C9 1251 | 1252 | isa 1253 | PBXTargetDependency 1254 | target 1255 | B5410E9C1C853236006203C9 1256 | targetProxy 1257 | B5410EAA1C853581006203C9 1258 | 1259 | B5410EAC1C85358F006203C9 1260 | 1261 | fileRef 1262 | B5410E9D1C853236006203C9 1263 | isa 1264 | PBXBuildFile 1265 | 1266 | D74E25516BA6C301B92A1402 1267 | 1268 | explicitFileType 1269 | archive.ar 1270 | includeInIndex 1271 | 0 1272 | isa 1273 | PBXFileReference 1274 | path 1275 | libPods-ThemeManagerDemo.a 1276 | sourceTree 1277 | BUILT_PRODUCTS_DIR 1278 | 1279 | E56CEA6CE4091A2283607CF8 1280 | 1281 | buildActionMask 1282 | 2147483647 1283 | files 1284 | 1285 | inputPaths 1286 | 1287 | isa 1288 | PBXShellScriptBuildPhase 1289 | name 1290 | Copy Pods Resources 1291 | outputPaths 1292 | 1293 | runOnlyForDeploymentPostprocessing 1294 | 0 1295 | shellPath 1296 | /bin/sh 1297 | shellScript 1298 | "${SRCROOT}/Pods/Target Support Files/Pods-ThemeManagerDemo/Pods-ThemeManagerDemo-resources.sh" 1299 | 1300 | showEnvVarsInLog 1301 | 0 1302 | 1303 | EAA685EF40B6F6BC66269731 1304 | 1305 | buildActionMask 1306 | 2147483647 1307 | files 1308 | 1309 | inputPaths 1310 | 1311 | isa 1312 | PBXShellScriptBuildPhase 1313 | name 1314 | Check Pods Manifest.lock 1315 | outputPaths 1316 | 1317 | runOnlyForDeploymentPostprocessing 1318 | 0 1319 | shellPath 1320 | /bin/sh 1321 | shellScript 1322 | diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null 1323 | if [[ $? != 0 ]] ; then 1324 | cat << EOM 1325 | error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. 1326 | EOM 1327 | exit 1 1328 | fi 1329 | 1330 | showEnvVarsInLog 1331 | 0 1332 | 1333 | EF6E6805B458CC78A51D876D 1334 | 1335 | children 1336 | 1337 | D74E25516BA6C301B92A1402 1338 | 1339 | isa 1340 | PBXGroup 1341 | name 1342 | Frameworks 1343 | sourceTree 1344 | <group> 1345 | 1346 | 1347 | rootObject 1348 | 9EB3368D19F01C2600C82FD3 1349 | 1350 | 1351 | --------------------------------------------------------------------------------