diff --git a/APIDiffs/api-diffs-3.4.7.md b/APIDiffs/api-diffs-3.4.7.md new file mode 100644 index 0000000..21bd166 --- /dev/null +++ b/APIDiffs/api-diffs-3.4.7.md @@ -0,0 +1,6 @@ +# PLPlayerKit 3.4.6 to 3.4.7 API Differences + +## General Headers + +None + diff --git a/Example/new/NiuPlayer.xcodeproj/project.pbxproj b/Example/new/NiuPlayer.xcodeproj/project.pbxproj index fb298d9..07648b5 100644 --- a/Example/new/NiuPlayer.xcodeproj/project.pbxproj +++ b/Example/new/NiuPlayer.xcodeproj/project.pbxproj @@ -298,10 +298,9 @@ 76E1E7452049224800D02790 /* Sources */, 76E1E7462049224800D02790 /* Frameworks */, 76E1E7472049224800D02790 /* Resources */, + E1270DD46BFDEF94C43E2879 /* [CP] Embed Pods Frameworks */, 5F1392422F014A78D7D7D138 /* [CP] Copy Pods Resources */, 76E1E799204923AB00D02790 /* Copy Files */, - 87C27106053AD8212AE45676 /* Upload Bugsnag dSYM */, - 348CD92A50A3034998219D78 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -391,24 +390,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 348CD92A50A3034998219D78 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-frameworks.sh", - "${PODS_ROOT}/../../../Pod/Library/PLPlayerKit.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PLPlayerKit.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 5F1392422F014A78D7D7D138 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -416,12 +397,22 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.bundle", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success.png", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@2x.png", + "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@3x.png", "${PODS_ROOT}/WeiboSDK/libWeiboSDK/WeiboSDK.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/JGProgressHUD.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_error.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_error@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_error@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_success.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_success@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/jg_hud_success@3x.png", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WeiboSDK.bundle", ); runOnlyForDeploymentPostprocessing = 0; @@ -429,19 +420,22 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 87C27106053AD8212AE45676 /* Upload Bugsnag dSYM */ = { + E1270DD46BFDEF94C43E2879 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-frameworks.sh", + "${PODS_ROOT}/../../../Pod/Library/PLPlayerKit.framework", ); - name = "Upload Bugsnag dSYM"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PLPlayerKit.framework", ); runOnlyForDeploymentPostprocessing = 0; - shellPath = "/usr/bin/env ruby"; - shellScript = "fork do\n Process.setsid\n STDIN.reopen(\"/dev/null\")\n STDOUT.reopen(\"/dev/null\", \"a\")\n STDERR.reopen(\"/dev/null\", \"a\")\n\n require 'shellwords'\n\n Dir[\"#{ENV[\"DWARF_DSYM_FOLDER_PATH\"]}/*/Contents/Resources/DWARF/*\"].each do |dsym|\n system(\"curl -F dsym=@#{Shellwords.escape(dsym)} -F projectRoot=#{Shellwords.escape(ENV[\"PROJECT_DIR\"])} https://upload.bugsnag.com/\")\n end\nend\n"; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -601,8 +595,9 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = GDFHW66V92; - ENABLE_BITCODE = YES; + ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = NiuPlayer/NiuPlayer.pch; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -615,10 +610,11 @@ "\"${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner\"", "\"${PODS_ROOT}/Headers/Public/Masonry\"", "\"${PODS_ROOT}/Headers/Public/WeiboSDK\"", + "\"$(SRCROOT)/../PLPlayerKit/PLPlayerKit/Public\"", ); INFOPLIST_FILE = NiuPlayer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 3.4.6; + MARKETING_VERSION = 3.4.7; PRODUCT_BUNDLE_IDENTIFIER = com.qbox.niuplayer; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -631,8 +627,9 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = GDFHW66V92; - ENABLE_BITCODE = YES; + ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = NiuPlayer/NiuPlayer.pch; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -645,10 +642,11 @@ "\"${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner\"", "\"${PODS_ROOT}/Headers/Public/Masonry\"", "\"${PODS_ROOT}/Headers/Public/WeiboSDK\"", + "\"$(SRCROOT)/../PLPlayerKit/PLPlayerKit/Public\"", ); INFOPLIST_FILE = NiuPlayer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 3.4.6; + MARKETING_VERSION = 3.4.7; PRODUCT_BUNDLE_IDENTIFIER = com.qbox.niuplayer; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/Example/new/NiuPlayer/AppDelegate.m b/Example/new/NiuPlayer/AppDelegate.m index 9319967..e0331f4 100644 --- a/Example/new/NiuPlayer/AppDelegate.m +++ b/Example/new/NiuPlayer/AppDelegate.m @@ -45,23 +45,32 @@ - (void)applicationWillResignActive:(UIApplication *)application { if(rootVC.selectedViewController){ switch (index) { case 0:{ - PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; - [shortVC onUIApplication:NO]; - } + if ([rootVC.selectedViewController isKindOfClass:[PLShortVideoViewController class]]) { + PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; + [shortVC onUIApplication:NO]; + } break; + } case 1:{ UINavigationController *navVC = rootVC.selectedViewController; - PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; - [longVideoVC onUIApplication:NO]; + if ([navVC.topViewController isKindOfClass:[PLLongVideoViewController class]]) { + PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; + [longVideoVC onUIApplication:NO]; + } + } break; case 2:{ UINavigationController *navVC = rootVC.selectedViewController; PLLiveViewController *liveVideoVC = (PLLiveViewController *)navVC.topViewController; - if (liveVideoVC.presentedViewController) { - PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; - playerVC.player.enableRender = NO; + + if ([liveVideoVC.presentedViewController isKindOfClass:[PLPlayViewController class]]) { + if (liveVideoVC.presentedViewController) { + PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; + playerVC.player.enableRender = NO; + } } + } break; @@ -91,23 +100,32 @@ - (void)applicationDidBecomeActive:(UIApplication *)application { if(rootVC.selectedViewController){ switch (index) { case 0:{ - PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; - [shortVC onUIApplication:YES]; - } + if ([rootVC.selectedViewController isKindOfClass:[PLShortVideoViewController class]]) { + PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; + [shortVC onUIApplication:NO]; + } break; + } case 1:{ UINavigationController *navVC = rootVC.selectedViewController; - PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; - [longVideoVC onUIApplication:YES]; + if ([navVC.topViewController isKindOfClass:[PLLongVideoViewController class]]) { + PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; + [longVideoVC onUIApplication:NO]; + } + } break; case 2:{ UINavigationController *navVC = rootVC.selectedViewController; PLLiveViewController *liveVideoVC = (PLLiveViewController *)navVC.topViewController; - if (liveVideoVC.presentedViewController) { - PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; - playerVC.player.enableRender = YES; + + if ([liveVideoVC.presentedViewController isKindOfClass:[PLPlayViewController class]]) { + if (liveVideoVC.presentedViewController) { + PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; + playerVC.player.enableRender = NO; + } } + } break; diff --git a/Example/new/NiuPlayer/Common/PLHttpSession.m b/Example/new/NiuPlayer/Common/PLHttpSession.m index 773726b..aeab153 100644 --- a/Example/new/NiuPlayer/Common/PLHttpSession.m +++ b/Example/new/NiuPlayer/Common/PLHttpSession.m @@ -8,12 +8,12 @@ #import "PLHttpSession.h" -#define REQUEST_HOST @"https://api-demo.qnsdk.com" -#define PLAY_HOST @"https://demo-videos.qnsdk.com" +#define REQUEST_HOST @"http://api-demo.qnsdk.com" +#define PLAY_HOST @"http://demo-videos.qnsdk.com" @implementation PLHttpSession -// @"https://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=shortvideo" +// @"http://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=shortvideo" + (void)requestShortMediaList:(void (^)(NSArray *, NSError *))completeBlock { NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"v1/kodo/bucket/demo-videos?prefix=shortvideo"]; @@ -32,7 +32,7 @@ + (void)requestShortMediaList:(void (^)(NSArray *, NSError *))completeBlock { }]; } -// @"https://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=movies" +// @"http://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=movies" + (void)requestLongMediaList:(void (^)(NSArray *, NSError *))completeBlock { NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"v1/kodo/bucket/demo-videos?prefix=movies"]; diff --git a/Example/new/NiuPlayer/Common/PLPlayViewController.m b/Example/new/NiuPlayer/Common/PLPlayViewController.m index 51fafb0..560e028 100644 --- a/Example/new/NiuPlayer/Common/PLPlayViewController.m +++ b/Example/new/NiuPlayer/Common/PLPlayViewController.m @@ -291,7 +291,7 @@ - (void)player:(nonnull PLPlayer *)player firstRender:(PLPlayerFirstRenderType)f } } -- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData { +- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData ts:(int64_t)ts { } diff --git a/Example/new/NiuPlayer/Common/PLPlayerView.m b/Example/new/NiuPlayer/Common/PLPlayerView.m index f936061..929d973 100644 --- a/Example/new/NiuPlayer/Common/PLPlayerView.m +++ b/Example/new/NiuPlayer/Common/PLPlayerView.m @@ -73,7 +73,7 @@ -(void)dealloc { - (void)configureVideo:(BOOL)enableRender { self.player.enableRender = enableRender; - + // 避免在未更新画面渲染的情况下,动态翻转移动画布 2020-02-13 hera if (!enableRender) { [self removeFullStreenNotify]; @@ -1025,7 +1025,7 @@ - (void)player:(nonnull PLPlayer *)player firstRender:(PLPlayerFirstRenderType)f self.durationLabel.text = [NSString stringWithFormat:@"%d:%02d:%02d", hour, min, sec]; } -- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData { +- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData ts:(int64_t)ts { } diff --git a/Example/new/NiuPlayer/Info.plist b/Example/new/NiuPlayer/Info.plist index 2d61a83..eb32d61 100644 --- a/Example/new/NiuPlayer/Info.plist +++ b/Example/new/NiuPlayer/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS NSAppTransportSecurity diff --git a/Example/new/NiuPlayer/NiuPlayer/AppDelegate.h b/Example/new/NiuPlayer/NiuPlayer/AppDelegate.h deleted file mode 100644 index d86d209..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/AppDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppDelegate.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end - diff --git a/Example/new/NiuPlayer/NiuPlayer/AppDelegate.m b/Example/new/NiuPlayer/NiuPlayer/AppDelegate.m deleted file mode 100644 index 9319967..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/AppDelegate.m +++ /dev/null @@ -1,127 +0,0 @@ -// -// AppDelegate.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "AppDelegate.h" -#import "PLRootTabBarViewController.h" -#import "PLShortVideoViewController.h" -#import "PLLongVideoViewController.h" -#import "PLLiveViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Override point for customization after application launch. - - [Bugsnag startBugsnagWithApiKey:@"8c6df88d969a01d91ca4dde583be6fa1"]; - - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; - [[AVAudioSession sharedInstance] setActive:YES error:nil]; - - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - self.window.rootViewController = [[PLRootTabBarViewController alloc] init]; - self.window.backgroundColor = [UIColor whiteColor]; - [self.window makeKeyAndVisible]; - self.window.tintColor = [UIColor blackColor]; - - return YES; -} - - -- (void)applicationWillResignActive:(UIApplication *)application { - // 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. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - PLRootTabBarViewController *rootVC = (PLRootTabBarViewController*)self.window.rootViewController; - NSInteger index = rootVC.selectedIndex; - if(rootVC.selectedViewController){ - switch (index) { - case 0:{ - PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; - [shortVC onUIApplication:NO]; - } - break; - case 1:{ - UINavigationController *navVC = rootVC.selectedViewController; - PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; - [longVideoVC onUIApplication:NO]; - } - break; - case 2:{ - UINavigationController *navVC = rootVC.selectedViewController; - PLLiveViewController *liveVideoVC = (PLLiveViewController *)navVC.topViewController; - if (liveVideoVC.presentedViewController) { - PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; - playerVC.player.enableRender = NO; - } - } - break; - - default: - break; - } - } - NSLog(@"------ applicationWillResignActive ------"); -} - - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // 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. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. -} - - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // 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. - PLRootTabBarViewController *rootVC = (PLRootTabBarViewController*)self.window.rootViewController; - NSInteger index = rootVC.selectedIndex; - if(rootVC.selectedViewController){ - switch (index) { - case 0:{ - PLShortVideoViewController *shortVC = (PLShortVideoViewController *)rootVC.selectedViewController; - [shortVC onUIApplication:YES]; - } - break; - case 1:{ - UINavigationController *navVC = rootVC.selectedViewController; - PLLongVideoViewController *longVideoVC = (PLLongVideoViewController *)navVC.topViewController; - [longVideoVC onUIApplication:YES]; - } - break; - case 2:{ - UINavigationController *navVC = rootVC.selectedViewController; - PLLiveViewController *liveVideoVC = (PLLiveViewController *)navVC.topViewController; - if (liveVideoVC.presentedViewController) { - PLPlayViewController *playerVC = (PLPlayViewController *)liveVideoVC.presentedViewController; - playerVC.player.enableRender = YES; - } - } - break; - - default: - break; - } - } - NSLog(@"------ applicationDidBecomeActive ------"); -} - - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index f29fe8f..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x-1.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x-1.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x-1.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.jpg", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.jpg b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.jpg deleted file mode 100644 index a799bac..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.jpg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index b1e7f3a..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png deleted file mode 100644 index 785a30d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 785a30d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index ef71d7c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 823ce6c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png deleted file mode 100644 index 6a5d450..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index 6a5d450..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index c6311a6..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 785a30d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png deleted file mode 100644 index 3d273c7..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 3d273c7..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index d9ccd66..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index d9ccd66..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 7f0c181..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index d09738d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index ccc1608..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 9fcc19d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/Contents.json deleted file mode 100644 index 3bad3d0..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "back.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "back@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "back@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back.png deleted file mode 100644 index 0bc4e1e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@2x.png deleted file mode 100644 index 3390127..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@3x.png deleted file mode 100644 index 52959fc..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/back.imageset/back@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/Contents.json deleted file mode 100644 index e091809..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "failure.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "failure@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "failure@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure.png deleted file mode 100644 index 9bfa015..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@2x.png deleted file mode 100644 index bfbfbe4..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@3x.png deleted file mode 100644 index 093d7b1..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/failure.imageset/failure@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/Contents.json deleted file mode 100644 index 8a21040..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "full-screen.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "full-screen@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "full-screen@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen.png deleted file mode 100644 index 1471116..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@2x.png deleted file mode 100644 index 4f3d2e9..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@3x.png deleted file mode 100644 index 0dc540f..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/full-screen.imageset/full-screen@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/Contents.json deleted file mode 100644 index 7a7e5ea..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hks_logo.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/hks_logo.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/hks_logo.png deleted file mode 100644 index 26a762b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/hks_logo.imageset/hks_logo.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/Contents.json deleted file mode 100644 index bfbb098..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "mask-2.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mask-2@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "mask-2@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2.png deleted file mode 100644 index 39c73e2..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@2x.png deleted file mode 100644 index e8d72ff..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@3x.png deleted file mode 100644 index a6cfedd..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/mask-2@3x.png and /dev/null differ diff --git "a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@2x.png" "b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@2x.png" deleted file mode 100644 index 2b863fa..0000000 Binary files "a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@2x.png" and /dev/null differ diff --git "a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@3x.png" "b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@3x.png" deleted file mode 100644 index 3624a30..0000000 Binary files "a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-2.imageset/\346\234\252\345\221\275\345\220\215\346\226\207\344\273\266\345\244\271/mask-3@3x.png" and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/Contents.json deleted file mode 100644 index 0ba0177..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mask-3@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "mask-3@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@2x.png deleted file mode 100644 index 2b863fa..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@3x.png deleted file mode 100644 index 3624a30..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask-3.imageset/mask-3@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/Contents.json deleted file mode 100644 index f392699..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "mask.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mask@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "mask@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask.png deleted file mode 100644 index ab47aff..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@2x.png deleted file mode 100644 index 258b894..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@3x.png deleted file mode 100644 index 1b6f2ea..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/mask.imageset/mask@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/Contents.json deleted file mode 100644 index db7ffa0..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "play.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "play@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "play@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play.png deleted file mode 100644 index 2f4e238..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@2x.png deleted file mode 100644 index 51a307e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@3x.png deleted file mode 100644 index 2132ab1..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/play.imageset/play@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/Contents.json deleted file mode 100644 index da4a164..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/Contents.json deleted file mode 100644 index 7b7f2de..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "background_play.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "background_play@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "background_play@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play.png deleted file mode 100644 index 12a37dc..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@2x.png deleted file mode 100644 index 68abf63..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@3x.png deleted file mode 100644 index 63af0f4..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/background_play.imageset/background_play@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/Contents.json deleted file mode 100644 index ce0bef5..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "close.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "close@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "close@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close.png deleted file mode 100644 index 7fe87d1..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@2x.png deleted file mode 100644 index 5b6661a..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@3x.png deleted file mode 100644 index 2645ebb..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/close.imageset/close@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/Contents.json deleted file mode 100644 index 434dbf9..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "file.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "file@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "file@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file.png deleted file mode 100644 index 4e8f68c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@2x.png deleted file mode 100644 index 7b7782f..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@3x.png deleted file mode 100644 index 3f4038b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/file.imageset/file@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/Contents.json deleted file mode 100644 index c30d2ba..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "go.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "go@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "go@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go.png deleted file mode 100644 index de0dbc1..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@2x.png deleted file mode 100644 index 19b01af..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@3x.png deleted file mode 100644 index fca4df4..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/go.imageset/go@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/Contents.json deleted file mode 100644 index f075004..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "mirror_swtich.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "mirror_swtich@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "mirror_swtich@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich.png deleted file mode 100644 index 36302b4..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@2x.png deleted file mode 100644 index c07dd5d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@3x.png deleted file mode 100644 index 1b12c15..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/mirror_swtich.imageset/mirror_swtich@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/Contents.json deleted file mode 100644 index 2ef3643..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "more.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "more@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "more@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more.png deleted file mode 100644 index 5374c9e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@2x.png deleted file mode 100644 index 14896a5..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@3x.png deleted file mode 100644 index 242809e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/more.imageset/more@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/Contents.json deleted file mode 100644 index d6165a9..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "player_back.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "player_back@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "player_back@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back.png deleted file mode 100644 index 9a4d1a5..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@2x.png deleted file mode 100644 index e74ba31..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@3x.png deleted file mode 100644 index 5d0cf1c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_back.imageset/player_back@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/Contents.json deleted file mode 100644 index 95ac4af..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "player_close.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "player_close@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "player_close@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close.png deleted file mode 100644 index 610fe6e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@2x.png deleted file mode 100644 index 834eb7d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@3x.png deleted file mode 100644 index 9fa919f..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_close.imageset/player_close@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/Contents.json deleted file mode 100644 index db7ffa0..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "play.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "play@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "play@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play.png deleted file mode 100644 index e9ba1da..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@2x.png deleted file mode 100644 index 6318007..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@3x.png deleted file mode 100644 index 1848b86..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_play.imageset/play@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/Contents.json deleted file mode 100644 index ce19ca1..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "player-stop.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "player-stop@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "player-stop@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop.png deleted file mode 100644 index 339f528..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@2x.png deleted file mode 100644 index 4193c47..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@3x.png deleted file mode 100644 index f59ee10..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/player_stop.imageset/player-stop@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/Contents.json deleted file mode 100644 index e580427..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "rotate.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "rotate@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "rotate@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate.png deleted file mode 100644 index 9ec628b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@2x.png deleted file mode 100644 index e8cb31e..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@3x.png deleted file mode 100644 index fc83e12..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/rotate.imageset/rotate@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/Contents.json deleted file mode 100644 index f774532..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "save.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "save@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "save@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save.png deleted file mode 100644 index d03dd4b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@2x.png deleted file mode 100644 index 2385969..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@3x.png deleted file mode 100644 index 868e077..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/save.imageset/save@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/Contents.json deleted file mode 100644 index dd83d11..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "screen-cut.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "screen-cut@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "screen-cut@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut.png deleted file mode 100644 index 80fcceb..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@2x.png deleted file mode 100644 index 6a085ec..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@3x.png deleted file mode 100644 index 0026d06..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/screen-cut.imageset/screen-cut@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/Contents.json deleted file mode 100644 index e9d2eb9..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "slider_thumb@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "slider_thumb@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@2x.png deleted file mode 100644 index 472a72b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@3x.png deleted file mode 100644 index c07a31c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/slider_thumb.imageset/slider_thumb@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/Contents.json deleted file mode 100644 index 21a930e..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "video.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "video@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "video@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video.png deleted file mode 100644 index 25d2ae5..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@2x.png deleted file mode 100644 index 1d980d4..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@3x.png deleted file mode 100644 index 27f0795..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/player/video.imageset/video@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/Contents.json deleted file mode 100644 index 96c14ee..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "qiniu@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/qiniu@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/qiniu@2x.png deleted file mode 100644 index a4b9126..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qiniu.imageset/qiniu@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/Contents.json deleted file mode 100644 index 05f74e4..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "qn_niu.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/qn_niu.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/qn_niu.png deleted file mode 100644 index 2a499bd..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/qn_niu.imageset/qn_niu.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/Contents.json deleted file mode 100644 index 798ba85..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "scan.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "scan@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "scan@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan.png deleted file mode 100644 index 3fe9342..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@2x.png deleted file mode 100644 index 61ef8d3..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@3x.png deleted file mode 100644 index f0aa717..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/scan.imageset/scan@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/Contents.json deleted file mode 100644 index ca835ec..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "stop.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "stop@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "stop@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop.png deleted file mode 100644 index 17734bf..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@2x.png deleted file mode 100644 index 292e980..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@3x.png deleted file mode 100644 index 4729374..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/stop.imageset/stop@3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/Contents.json b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/Contents.json deleted file mode 100644 index 03689fe..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "url .png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "url @2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "url @3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url .png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url .png deleted file mode 100644 index 79ae8d0..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url .png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @2x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @2x.png deleted file mode 100644 index daf5c7b..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @2x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @3x.png b/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @3x.png deleted file mode 100644 index d2df8dd..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/Assets.xcassets/url.imageset/url @3x.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/Base.lproj/LaunchScreen.storyboard b/Example/new/NiuPlayer/NiuPlayer/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index e96f802..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.h b/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.h deleted file mode 100644 index 42a02c3..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSDate+Covert.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/14. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface NSDate (Covert) - -+ (NSString *)yyyyMMddStringWithSecond:(NSTimeInterval)time; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.m b/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.m deleted file mode 100644 index 4eccfe7..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSDate+Covert.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSDate+Covert.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/14. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "NSDate+Covert.h" - -@implementation NSDate (Covert) - -+ (NSString *)yyyyMMddStringWithSecond:(NSTimeInterval)time { - - NSDate *date = [NSDate dateWithTimeIntervalSince1970:time]; - NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; - [dateFormat setDateFormat:@"yyyy-MM-dd"]; - - return [dateFormat stringFromDate:date]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.h b/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.h deleted file mode 100644 index 71cc199..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSObject+Auth.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/19. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface NSObject (Auth) - -+ (void)haveAlbumAccess:(void(^)(BOOL isAuth))completeBlock; - -+ (void)haveCameraAccess:(void(^)(BOOL isAuth))completeBlock; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.m b/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.m deleted file mode 100644 index 57d6f5e..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSObject+Auth.m +++ /dev/null @@ -1,93 +0,0 @@ -// -// NSObject+Auth.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/19. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "NSObject+Auth.h" -#import -#import - -@implementation NSObject (Auth) - - -+ (void)haveAlbumAccess:(void (^)(BOOL))completeBlock{ - - PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus]; - if (PHAuthorizationStatusAuthorized == authStatus){ - if (completeBlock) { - completeBlock(YES); - } - } else if(PHAuthorizationStatusRestricted == authStatus || PHAuthorizationStatusDenied == authStatus){ - - if (completeBlock) { - completeBlock(NO); - } - - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"照片访问限被禁止了,请前往手机 “设置-牛播放器” 打开 “照片” 开关" preferredStyle:(UIAlertControllerStyleAlert)]; - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertAction *goAction = [UIAlertAction actionWithTitle:@"立即前往" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { - NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; - [[UIApplication sharedApplication] openURL:url]; - }]; - [alert addAction:cancelAction]; - [alert addAction:goAction]; - UIViewController *viewController = [UIApplication sharedApplication].delegate.window.rootViewController; - while (viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - [viewController presentViewController:alert animated:YES completion:nil]; - } else if (PHAuthorizationStatusNotDetermined == authStatus) { - [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { - dispatch_main_async_safe(^{ - if (completeBlock) { - completeBlock(PHAuthorizationStatusAuthorized == status); - } - }); - }]; - } -} - - - -+ (void)haveCameraAccess:(void (^)(BOOL))completeBlock { - - AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; - if (AVAuthorizationStatusAuthorized == authStatus){ - if (completeBlock) { - completeBlock(YES); - } - } else if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){ - - if (completeBlock) { - completeBlock(NO); - } - - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"相机访问权限被禁止了,请前往手机 “设置-牛播放器” 打开 “相机” 开关" preferredStyle:(UIAlertControllerStyleAlert)]; - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertAction *goAction = [UIAlertAction actionWithTitle:@"立即前往" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { - NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; - [[UIApplication sharedApplication] openURL:url]; - }]; - [alert addAction:cancelAction]; - [alert addAction:goAction]; - UIViewController *viewController = [UIApplication sharedApplication].delegate.window.rootViewController; - while (viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - [viewController presentViewController:alert animated:YES completion:nil]; - } else if (authStatus == AVAuthorizationStatusNotDetermined) { - [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { - dispatch_main_async_safe(^{ - completeBlock(granted); - }); - }]; - } -} -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.h b/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.h deleted file mode 100644 index 2128d6d..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSString+URLCheck.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface NSString (URLCheck) - -- (BOOL)isURL; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.m b/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.m deleted file mode 100644 index e6c4ddb..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/NSString+URLCheck.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// NSString+URLCheck.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "NSString+URLCheck.h" - -@implementation NSString (URLCheck) - -- (BOOL)isURL { - NSString *regex =@"[a-zA-z]+://[^\\s]*"; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; - return [predicate evaluateWithObject:self]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.h b/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.h deleted file mode 100644 index 4c1eddd..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// UIButton+Animate.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/5. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface UIButton (Animate) - -- (void)show; - -- (void)hide; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.m b/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.m deleted file mode 100644 index dec0f65..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/UIButton+Animate.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// UIButton+Animate.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/5. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "UIButton+Animate.h" - -@implementation UIButton (Animate) - -- (void)show { - - if (!self.hidden) return; - - self.hidden = NO; - - CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; - scaleAnimation.fromValue = [NSNumber numberWithFloat:2.0]; - scaleAnimation.toValue = [NSNumber numberWithFloat:1.0]; - scaleAnimation.duration = .3; - - CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; - opacityAnimation.fromValue = [NSNumber numberWithFloat:.5]; - opacityAnimation.toValue = [NSNumber numberWithFloat:1]; - opacityAnimation.duration = .3; - - [self.layer addAnimation:scaleAnimation forKey:@"scale"]; - [self.layer addAnimation:opacityAnimation forKey:@"opacity"]; -} - -- (void)hide { - self.hidden = YES; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.h b/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.h deleted file mode 100644 index 3db4da5..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// UIView+Alert.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import -#import -#import - -@interface UIView (Alert) -< -JGProgressHUDDelegate -> - -//! 撑满view加载{} -- (void)showFullLoading; -- (void)hideFullLoading; -- (void)showFullLoadingWithTip:(NSString *)tip; - -//!错误信息view{} -- (void)showErrorWithTip:(NSString *)tip tipImage:(NSString *)imageName buttonTitle:(NSString *)title retryAction:(void (^)(void))block; -//!刷新重试view{} -- (void)showRetryWithTip:(NSString *)tip retryAction:(void (^)(void))block; -- (void)hideErroMsgView; - -//! 加载{图片} -- (void)showImageLoadingWithTip:(NSString *)tip image:(NSString *)imageName; - -//! 加载{默认加载} -- (void)showNormalLoadingWithTip:(NSString *)tip; - -//! 加载{默认加载:努力加载中} -- (void)showLoadingHUD; - -//! 可取消加载{文字+默认加载} -- (void)showNormalLongLoadingWithTip:(NSString *)tip cancelTip:(NSString *)cancelTip; - -//! 进度加载 -- (void)showProgressLoadingWithTip:(NSString *)tip; - -//! 加载成功(+文字) -- (void)showSuccessTip:(NSString *)tip; - -//! 加载失败(+文字) -- (void)showFailTip:(NSString *)tip; - -//! 隐藏加载 -- (void)hiddenLoading; - -- (void)hideLoadingHUD; - -#pragma mark--Warming - -//! 警告(标题+副标题+默认图片) -- (void)showWarningTip:(NSString *)title message:(NSString *)message; - -//! 警告(文字+默认图片) -- (void)showWarningTip:(NSString *)tip; - -//! 提示(只文字) -- (void)showTip:(NSString *)tip; - -//! 提示(只文字+位置) -- (void)showTip:(NSString *)tip position:(JGProgressHUDPosition)position; - -//! 提示(文字+图片) -- (void)showImageTip:(NSString *)tip image:(NSString *)imageName; - -//! 提示(文字+副标题+图片) -- (void)showImageTip:(NSString *)tip message:(NSString *)message image:(NSString *)imageName; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.m b/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.m deleted file mode 100644 index 7eaa7ee..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Category/UIView+Alert.m +++ /dev/null @@ -1,363 +0,0 @@ -// -// UIView+Alert.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "UIView+Alert.h" - -@implementation UIView (Alert) - -#define loadingTag 999999 -#define fullLoadingTag 888888 -#define errorViewTag 666666 -#define tipTag 47298749 - - -- (JGProgressHUD *)prototypeHUD -{ - JGProgressHUD *oldHUD = (JGProgressHUD *)[self viewWithTag:tipTag]; - if (oldHUD) { - [oldHUD dismissAnimated:NO]; - } - JGProgressHUD *HUD = [[JGProgressHUD alloc] initWithStyle:JGProgressHUDStyleDark]; - HUD.interactionType = JGProgressHUDInteractionTypeBlockAllTouches; - JGProgressHUDFadeZoomAnimation *an = [JGProgressHUDFadeZoomAnimation animation]; - HUD.animation = an; - HUD.delegate = self; - HUD.square = NO; - HUD.tag=tipTag; - return HUD; -} - -- (JGProgressHUD *)loadingHUD -{ - JGProgressHUD *oldHUD = (JGProgressHUD *)[self viewWithTag:loadingTag]; - if (oldHUD) { - [oldHUD dismissAnimated:NO]; - } - JGProgressHUD *HUD=[self prototypeHUD]; - HUD.square = NO; - HUD.tag = loadingTag; - return HUD; -} - -#pragma mark--Loading - -//! 加载{图片} -- (void)showImageLoadingWithTip:(NSString *)tip image:(NSString *)imageName -{ - JGProgressHUD *HUD = [self loadingHUD]; - HUD.textLabel.text = tip; - HUD.textLabel.font = [UIFont systemFontOfSize:14]; - [HUD showInView:self]; -} - -//! 加载{默认加载} -- (void)showNormalLoadingWithTip:(NSString *)tip -{ - [self showImageLoadingWithTip:tip image:nil]; -} - -- (void)showLoadingHUD -{ - [self showNormalLoadingWithTip:@""]; -} - -//! 可取消加载{文字+默认加载} -- (void)showNormalLongLoadingWithTip:(NSString *)tip cancelTip:(NSString *)cancelTip -{ - JGProgressHUD *HUD = [self loadingHUD]; - HUD.textLabel.text = tip; - HUD.textLabel.font = [UIFont systemFontOfSize:14]; - - __block BOOL confirmationAsked = NO; - - HUD.tapOnHUDViewBlock = ^(JGProgressHUD *h) { - if (confirmationAsked) { - [h dismiss]; - } else { - h.indicatorView = [[JGProgressHUDErrorIndicatorView alloc] init]; - h.textLabel.text = cancelTip; - confirmationAsked = YES; - - CABasicAnimation *an = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"]; - an.fromValue = @(0.0f); - an.toValue = @(0.5f); - - an.repeatCount = HUGE_VALF; - an.autoreverses = YES; - - an.duration = 0.75f; - - h.HUDView.layer.shadowColor = [UIColor redColor].CGColor; - h.HUDView.layer.shadowOffset = CGSizeZero; - h.HUDView.layer.shadowOpacity = 0.0f; - h.HUDView.layer.shadowRadius = 8.0f; - - [h.HUDView.layer addAnimation:an forKey:@"glow"]; - - __weak __typeof(h) wH = h; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (wH && confirmationAsked) { - confirmationAsked = NO; - __strong __typeof(wH) sH = wH; - - sH.indicatorView = [[JGProgressHUDIndeterminateIndicatorView alloc] initWithHUDStyle:sH.style]; - sH.textLabel.text = tip; - [h.HUDView.layer removeAnimationForKey:@"glow"]; - } - }); - } - }; - - HUD.tapOutsideBlock = ^(JGProgressHUD *h) { - if (confirmationAsked) { - confirmationAsked = NO; - h.indicatorView = [[JGProgressHUDIndeterminateIndicatorView alloc] initWithHUDStyle:h.style]; - h.textLabel.text = tip; - [h.HUDView.layer removeAnimationForKey:@"glow"]; - } - }; - [HUD showInView:self]; -} - -//! 进度加载 -- (void)showProgressLoadingWithTip:(NSString *)tip -{ -} - -//! 加载成功(+文字) -- (void)showSuccessTip:(NSString *)tip -{ - JGProgressHUD *hud = [self loadingHUD]; - hud.textLabel.text = tip; - hud.textLabel.font = [UIFont systemFontOfSize:14]; - hud.detailTextLabel.text = nil; - hud.layoutChangeAnimationDuration = 0.2; - hud.indicatorView = [[JGProgressHUDSuccessIndicatorView alloc] init]; - [hud showInView:self]; - [hud dismissAfterDelay:2.0]; -} - -//! 加载失败(+文字) -- (void)showFailTip:(NSString *)tip -{ - JGProgressHUD *hud = [self loadingHUD]; - hud.textLabel.text = tip; - hud.textLabel.font = [UIFont systemFontOfSize:14]; - hud.detailTextLabel.text = nil; - hud.layoutChangeAnimationDuration = 0.2; - hud.indicatorView = [[JGProgressHUDErrorIndicatorView alloc] init]; - [hud showInView:self]; - [hud dismissAfterDelay:2.0]; -} - -//! 隐藏加载 -- (void)hiddenLoading -{ - JGProgressHUD *hud = (JGProgressHUD *)[self viewWithTag:loadingTag]; - [hud dismiss]; -} - -- (void)hideLoadingHUD -{ - [self hiddenLoading]; -} - -#pragma mark--Alert - -//! 警告(标题+副标题+默认图片) -- (void)showWarningTip:(NSString *)title message:(NSString *)message -{ - [self showImageTip:title message:message image:@"failure"]; -} - -//! 警告(文字+默认图片) -- (void)showWarningTip:(NSString *)tip -{ - [self showWarningTip:tip message:nil]; -} - -//! 提示(只文字) -- (void)showTip:(NSString *)tip -{ - [self showTip:tip position:JGProgressHUDPositionCenter]; -} - -//! 提示(只文字+位置) -- (void)showTip:(NSString *)tip position:(JGProgressHUDPosition)position -{ - JGProgressHUD *HUD = [self prototypeHUD]; - HUD.position = position; - HUD.indicatorView = nil; - HUD.textLabel.text = tip; - HUD.textLabel.font = [UIFont systemFontOfSize:14]; - [HUD showInView:self]; - [HUD dismissAfterDelay:2.0]; -} - -//! 提示(文字+图片) -- (void)showImageTip:(NSString *)tip image:(NSString *)imageName -{ - [self showImageTip:tip message:nil image:imageName]; -} - -//! 提示(文字+副标题+图片) -- (void)showImageTip:(NSString *)tip message:(NSString *)message image:(NSString *)imageName -{ - UIImageView *imageView= [[UIImageView alloc] init]; - imageView.image = [UIImage imageNamed:imageName]; - imageView.contentMode = UIViewContentModeScaleAspectFit; - imageView.backgroundColor = [UIColor redColor]; - JGProgressHUD *HUD = [self prototypeHUD]; - HUD.indicatorView = [[JGProgressHUDIndicatorView alloc] initWithContentView:imageView]; - HUD.textLabel.text = tip; - HUD.textLabel.font = [UIFont systemFontOfSize:14]; - HUD.detailTextLabel.text = message; - [HUD showInView:self]; - [HUD dismissAfterDelay:2.0]; -} - -- (void)showFullLoading -{ [self showFullLoadingWithTip:@""]; -} - --(void)showFullLoadingWithTip:(NSString *)tip{ - UIView *loadingView = [self viewWithTag:fullLoadingTag]; - if (loadingView) { -// [loadingView removeFromSuperview]; -// loadingView = nil; - return; - } - loadingView = [[UIView alloc] initWithFrame:self.bounds]; - loadingView.tag = fullLoadingTag; - [self addSubview:loadingView]; - [loadingView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self); - }]; - - MMMaterialDesignSpinner *spinner = [[MMMaterialDesignSpinner alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; - spinner.center = loadingView.center; - spinner.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; - spinner.tintColor = [UIColor colorWithRed:.2 green:.2 blue:.8 alpha:1];// [YIMStyleManager blackColor:0.4]; - [loadingView addSubview:spinner]; - [self bringSubviewToFront:loadingView]; - [spinner startAnimating]; - - if (tip.length) { - - UILabel * loadingLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 80, 150, 20)]; - loadingLabel.text=tip; - loadingLabel.textColor= [UIColor colorWithRed:.2 green:.2 blue:.8 alpha:1];//[YIMStyleManager blackColor:0.4]; - loadingLabel.textAlignment=NSTextAlignmentCenter; - loadingLabel.font=[UIFont systemFontOfSize:12]; - loadingLabel.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; - [loadingView addSubview:loadingLabel]; - [loadingLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.mas_equalTo(spinner.mas_bottom).mas_offset(40); - make.leading.trailing.mas_equalTo(loadingView); - make.height.mas_equalTo(@20); - }]; - } -} - -- (void)hideFullLoading -{ - __block UIView *loadingView = [self viewWithTag:fullLoadingTag]; - if (loadingView) { - [UIView transitionWithView:self duration:0.3f options:UIViewAnimationOptionTransitionCrossDissolve animations:^(void) { - [loadingView removeFromSuperview]; - } completion:^(BOOL finished) { - loadingView = nil; - }]; - } -} - -- (void)showRetryWithTip:(NSString *)tip retryAction:(void (^)(void))block -{ - [self showErrorWithTip:tip tipImage:@"bg_error" buttonTitle:NSLocalizedString(@"刷新", "刷新") retryAction:block]; -} - -- (void)showErrorWithTip:(NSString *)tip tipImage:(NSString *)imageName buttonTitle:(NSString *)title retryAction:(void (^)(void))block -{ - [self hideErroMsgView]; - - UIView *errorView = [UIView new]; - errorView.backgroundColor = [UIColor whiteColor]; - errorView.tag = errorViewTag; - [self addSubview:errorView]; - [errorView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self); - }]; - - UILabel *tipLabel = [UILabel new]; - tipLabel.text = tip; - tipLabel.numberOfLines = 0; - tipLabel.textAlignment = NSTextAlignmentCenter; - tipLabel.font = [UIFont systemFontOfSize:15]; - tipLabel.textColor = [self subTitleColor]; - [errorView addSubview:tipLabel]; - [tipLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.mas_equalTo(errorView); - make.left.mas_equalTo(errorView).mas_offset(10); - make.right.mas_equalTo(errorView).mas_offset(-10); - make.height.mas_equalTo(30); - }]; - - UIImage *image = [UIImage imageNamed:imageName]; - UIImageView *tipImageView = [UIImageView new]; - tipImageView.image = image; - [errorView addSubview:tipImageView]; - [tipImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.mas_equalTo(tipLabel.mas_top).mas_equalTo(-30); - make.centerX.mas_equalTo(errorView); - make.width.mas_equalTo(image.size.width); - make.height.mas_equalTo(image.size.height); - }]; - - UIButton *retryBtn = [UIButton new]; - [retryBtn setTitle:title forState:UIControlStateNormal]; - [retryBtn setTitleColor:[self subTitleColor] forState:UIControlStateNormal]; - retryBtn.titleLabel.font = [UIFont systemFontOfSize:15]; - retryBtn.layer.borderColor = [self subTitleColor].CGColor; - retryBtn.layer.borderWidth = 1.; - retryBtn.layer.cornerRadius = 15.; - [errorView addSubview:retryBtn]; - [retryBtn mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.mas_equalTo(tipLabel.mas_bottom).mas_offset(8); - make.centerX.mas_equalTo(tipLabel); - make.size.mas_equalTo(CGSizeMake(120, 30)); - }]; - - [self bringSubviewToFront:errorView]; -} - -- (void)hideErroMsgView -{ - UIView *errorView = [self viewWithTag:errorViewTag]; - if (errorView) { - [errorView removeFromSuperview]; - errorView = nil; - } -} - -- (UIColor *)mainColor -{ - return [UIColor colorWithRed:0.160 green:0.736 blue:0.727 alpha:1.000]; -} - -- (UIColor *)titleColor -{ - return [UIColor colorWithRed:60./255. green:60./255. blue:60./255. alpha:1.]; -} - -- (UIColor *)subTitleColor -{ - return [UIColor colorWithRed:101./255. green:101./255. blue:101./255. alpha:1.]; -} - - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/MacroDefine.h b/Example/new/NiuPlayer/NiuPlayer/Common/MacroDefine.h deleted file mode 100644 index 08d3de5..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/MacroDefine.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MacroDefine.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#ifndef MacroDefine_h -#define MacroDefine_h - - -#ifndef ARRAY_SIZE - #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) -#endif - -#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO) - -#ifndef dispatch_queue_async_safe -#define dispatch_queue_async_safe(queue, block)\ -if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(queue)) == 0) {\ -block();\ -} else {\ -dispatch_async(queue, block);\ -} -#endif - -#ifndef dispatch_main_async_safe -#define dispatch_main_async_safe(block) dispatch_queue_async_safe(dispatch_get_main_queue(), block) -#endif - -#ifdef DEBUG - #define NSLog NSLog -#else - #define NSLog(...); -#endif - - -#endif /* MacroDefine_h */ diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.h deleted file mode 100644 index e369fec..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// PLAlertUserAgreeView.h -// NiuPlayer -// -// Created by 冯文秀 on 2018/4/8. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLAlertUserAgreeView : UIView -@property (nonatomic, strong) UIView *mainView; -@property (nonatomic, strong) UILabel *agreementLabel; -@property (nonatomic, strong) UIButton *agreementButton; -@property (nonatomic, strong) UIButton *refuseButton; -@property (nonatomic, strong) UIButton *agreeButton; -@property (nonatomic, readonly, assign) BOOL isShow; - - -- (id)initWithFrame:(CGRect)frame superView:(UIView *)superView; -- (void)showAlertAgreeView; - -- (void)hideAlertAgreeView; -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.m deleted file mode 100644 index 468e568..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLAlertUserAgreeView.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// PLAlertUserAgreeView.m -// NiuPlayer -// -// Created by 冯文秀 on 2018/4/8. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLAlertUserAgreeView.h" -@interface PLAlertUserAgreeView () -@property (nonatomic, strong) UIView *superView; -@property (nonatomic, readwrite, assign) BOOL isShow; - -@end -@implementation PLAlertUserAgreeView - -- (id)initWithFrame:(CGRect)frame superView:(UIView *)superView{ - self = [super initWithFrame:frame]; - if (self) { - self.frame = CGRectMake(0, 0, CGRectGetWidth(superView.frame), CGRectGetHeight(superView.frame)); - self.superView = superView; - self.isShow = NO; - - self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4]; - - self.mainView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 280, 180)]; - self.mainView.backgroundColor = [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:0.9]; - self.mainView.center = self.center; - self.mainView.layer.cornerRadius = 10; - [self addSubview:_mainView]; - - - UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(30, 10, 220, 30)]; - titleLabel.text = @"遵守用户协议"; - titleLabel.textColor = [UIColor blackColor]; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16]; - [_mainView addSubview:titleLabel]; - - self.agreementLabel = [[UILabel alloc]initWithFrame:CGRectMake(30, 40, 220, 40)]; - self.agreementLabel.text = @"是否同意遵守该用户协议?";; - self.agreementLabel.textColor = [UIColor blackColor]; - self.agreementLabel.textAlignment = NSTextAlignmentCenter; - self.agreementLabel.font = [UIFont systemFontOfSize:14]; - [_mainView addSubview:self.agreementLabel]; - - self.agreementButton = [[UIButton alloc] initWithFrame:CGRectMake(30, 80, 220, 30)]; - self.agreementButton.titleLabel.font = [UIFont systemFontOfSize:14]; - self.agreementButton.titleLabel.textAlignment = NSTextAlignmentCenter; - [self.agreementButton setTitle:@"牛播放器用户协议" forState:UIControlStateNormal]; - [self.agreementButton setTitleColor:[UIColor colorWithRed:45/255.0 green:152/255.0 blue:212/255.0 alpha:1] forState:UIControlStateNormal]; - [_mainView addSubview:_agreementButton]; - - self.refuseButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 120, 140, 60)]; - self.refuseButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16]; - self.refuseButton.titleLabel.textAlignment = NSTextAlignmentCenter; - [self.refuseButton setTitle:@"拒绝" forState:UIControlStateNormal]; - [self.refuseButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; - [_mainView addSubview:_refuseButton]; - - self.agreeButton = [[UIButton alloc] initWithFrame:CGRectMake(140, 120, 140, 60)]; - self.agreeButton.titleLabel.font = [UIFont systemFontOfSize:16]; - self.agreeButton.titleLabel.textAlignment = NSTextAlignmentCenter; - [self.agreeButton setTitle:@"同意" forState:UIControlStateNormal]; - [self.agreeButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; - [_mainView addSubview:_agreeButton]; - - UIView *horizontalLineView = [[UIView alloc]initWithFrame:CGRectMake(0, 119.5, 280, 0.5)]; - horizontalLineView.backgroundColor = [UIColor grayColor]; - [_mainView addSubview:horizontalLineView]; - - UIView *verticaLineView = [[UIView alloc]initWithFrame:CGRectMake(140, 120, 0.5, 60)]; - verticaLineView.backgroundColor = [UIColor grayColor]; - [_mainView addSubview:verticaLineView]; - } - return self; -} - -- (void)showAlertAgreeView { - dispatch_async(dispatch_get_main_queue(), ^{ - self.isShow = YES; - [self.superView insertSubview:self aboveSubview:self.superView.subviews.lastObject]; - }); -} - -- (void)hideAlertAgreeView { - dispatch_async(dispatch_get_main_queue(), ^{ - self.isShow = NO; - [self removeFromSuperview]; - }); -} - - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect { - // Drawing code -} -*/ - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.h deleted file mode 100644 index 5d2c40e..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// PLHttpSession.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLHttpSession : NSObject - -+ (void)requestShortMediaList:(void (^)(NSArray *list, NSError *error))completeBlock; - -+ (void)requestLongMediaList:(void (^)(NSArray *list, NSError *error))completeBlock; - -+ (void)requestLiveMediaList:(void (^)(NSArray *list, NSError *error))completeBlock; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.m deleted file mode 100644 index aeab153..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLHttpSession.m +++ /dev/null @@ -1,138 +0,0 @@ -// -// PLHttpSession.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLHttpSession.h" - -#define REQUEST_HOST @"http://api-demo.qnsdk.com" -#define PLAY_HOST @"http://demo-videos.qnsdk.com" - -@implementation PLHttpSession - -// @"http://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=shortvideo" -+ (void)requestShortMediaList:(void (^)(NSArray *, NSError *))completeBlock { - - NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"v1/kodo/bucket/demo-videos?prefix=shortvideo"]; - - NSURL *url = [NSURL URLWithString:urlString]; - [PLHttpSession reuqestURL:url complete:^(NSData *data, NSError *error) { - - NSArray *array = nil; - if (data) { - NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; - array = [PLHttpSession mediaWithDic:dic]; - } - dispatch_main_async_safe(^{ - completeBlock(array, error); - }) - }]; -} - -// @"http://api-demo.qnsdk.com/v1/kodo/bucket/demo-videos?prefix=movies" -+ (void)requestLongMediaList:(void (^)(NSArray *, NSError *))completeBlock { - - NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"v1/kodo/bucket/demo-videos?prefix=movies"]; - NSURL* url = [NSURL URLWithString:urlString]; - [PLHttpSession reuqestURL:url complete:^(NSData *data, NSError *error) { - - NSArray *array = nil; - if (data) { - NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; - array = [PLHttpSession mediaWithDic:dic]; - } - dispatch_main_async_safe(^{ - completeBlock(array, error); - }) - }]; -} - -+ (void)requestLiveMediaList:(void (^)(NSArray *, NSError *))completeBlock { - - NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"/v1/live/streams/live"]; -// NSString *urlString = [REQUEST_HOST stringByAppendingPathComponent:@"/v1/streams/live"]; - NSURL* url = [NSURL URLWithString:urlString]; - - [PLHttpSession reuqestURL:url complete:^(NSData *data, NSError *error) { - - NSArray *array = nil; - if (data) { - NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; - array = [PLHttpSession mediaWithDic:dic]; - } - dispatch_main_async_safe(^{ - completeBlock(array, error); - }) - }]; -} - -+ (NSArray *)mediaWithDic:(NSDictionary *)dic { - - NSMutableArray *mediaArray = [[NSMutableArray alloc] init]; - - static NSString *headerImage[] = { - @"0.jpg", - @"1.jpg", - @"2.jpeg", - @"3.jpg", - @"4.jpg", - @"5.jpeg", - }; - - do { - if (![dic isKindOfClass:[NSDictionary class]]) break; - - NSArray *itemArray = [dic objectForKey:@"Items"]; - if (![itemArray isKindOfClass:[NSArray class]]) break; - - for (NSDictionary *dic in itemArray) { - if (![dic isKindOfClass:[NSDictionary class]]) { - continue; - } - PLMediaInfo *media= [[PLMediaInfo alloc] init]; - - NSString *key = [dic objectForKey:@"key"]; - NSArray *tempArray = [key componentsSeparatedByString:@"/"]; - NSString *videoName = [tempArray lastObject]; - NSString *name = [[videoName componentsSeparatedByString:@"."] firstObject]; - - media.mediaHash = [dic objectForKey:@"hash"]; - media.videoURL = [NSString stringWithFormat:@"%@/%@", PLAY_HOST, key]; - media.thumbURL = [NSString stringWithFormat:@"%@/snapshoot/%@.jpg", PLAY_HOST, name]; - media.fileSize = [[dic objectForKey:@"fsize"] longLongValue]; - media.mimeType = [dic objectForKey:@"mimeType"]; - media.type = [[dic objectForKey:@"type"] integerValue]; - media.endUser = [dic objectForKey:@"endUser"]; - media.putTime = [[dic objectForKey:@"putTime"] longLongValue]; - - media.videoURL = [media.videoURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - media.thumbURL = [media.thumbURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - - media.headerImg = @"qiniu"; - media.name = @"七牛云 简单·可信赖"; - - media.detailDesc = [NSDate yyyyMMddStringWithSecond:media.putTime / 10000000]; - - [mediaArray addObject:media]; - } - } while (0); - - return mediaArray; -} - -+ (void)reuqestURL:(NSURL *)url complete:(void(^)(NSData *data, NSError *error))completeBlock { - - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; - request.HTTPMethod = @"GET"; - request.timeoutInterval = 10; - - NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { - completeBlock(data, error); - }]; - [task resume]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.h deleted file mode 100644 index 99adea4..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// PLMediaInfo.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLMediaInfo : NSObject - -@property (nonatomic, strong) NSString *mimeType; - -@property (nonatomic, assign) long long putTime; - -@property (nonatomic, assign) NSInteger type; - -@property (nonatomic, assign) long long fileSize; - -@property (nonatomic, strong) NSString *mediaHash; - -@property (nonatomic, strong) NSString *headerImg; - -@property (nonatomic, strong) NSString *thumbURL; - -@property (nonatomic, strong) NSString *videoURL; - -@property (nonatomic, strong) NSString *endUser; - -@property (nonatomic, strong) NSString *detailDesc; - -@property (nonatomic, strong) NSString *name; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.m deleted file mode 100644 index a1dc88a..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLMediaInfo.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// PLMediaInfo.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLMediaInfo.h" - -@implementation PLMediaInfo - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.h deleted file mode 100644 index 50acb8b..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// PLPlayViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLBaseViewController.h" - -@interface PLPlayViewController : PLBaseViewController -< -PLPlayerDelegate -> - -@property (nonatomic, strong) PLPlayer *player; -@property (nonatomic, strong) UIButton *playButton; -@property (nonatomic, strong) UIImageView *thumbImageView; - -@property (nonatomic, strong) UIButton *closeButton; - -@property (nonatomic, strong) NSURL *url; -@property (nonatomic, strong) UIImage *thumbImage; -@property (nonatomic, strong) NSURL *thumbImageURL; - -//是否启用手指滑动调节音量和亮度, default YES -@property (nonatomic, assign) BOOL enableGesture; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.m deleted file mode 100644 index 560e028..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayViewController.m +++ /dev/null @@ -1,308 +0,0 @@ -// -// PLPlayViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLPlayViewController.h" - -@interface PLPlayViewController () - -@property (nonatomic, strong) UIVisualEffectView *effectView; - -@property (nonatomic, assign) BOOL isDisapper; - -@property (nonatomic, strong) UIPanGestureRecognizer *panGesture; - -@end - -@implementation PLPlayViewController - -- (void)viewDidLoad { - - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; - - _closeButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [_closeButton setTintColor:[UIColor whiteColor]]; - [_closeButton setImage:[UIImage imageNamed:@"close"] forState:(UIControlStateNormal)]; - [_closeButton addTarget:self action:@selector(clickCloseButton) forControlEvents:(UIControlEventTouchUpInside)]; - [_closeButton setBackgroundColor:[UIColor colorWithWhite:0 alpha:.5]]; - _closeButton.layer.cornerRadius = 22; - - self.thumbImageView = [[UIImageView alloc] init]; - self.thumbImageView.image = [UIImage imageNamed:@"qn_niu"]; - self.thumbImageView.clipsToBounds = YES; - self.thumbImageView.contentMode = UIViewContentModeScaleAspectFill; - if (self.thumbImageURL) { - [self.thumbImageView sd_setImageWithURL:self.thumbImageURL placeholderImage:self.thumbImageView.image]; - } - if (self.thumbImage) { - self.thumbImageView.image = self.thumbImage; - } - - [self.view addSubview:self.thumbImageView]; - [self.thumbImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.view); - }]; - - self.playButton = [[UIButton alloc] init]; - self.playButton.hidden = YES; - [self.playButton addTarget:self action:@selector(clickPlayButton:) forControlEvents:(UIControlEventTouchUpInside)]; - [self.playButton setImage:[UIImage imageNamed:@"play"] forState:(UIControlStateNormal)]; - [self.view addSubview:self.playButton]; - [self.playButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.size.equalTo(CGSizeMake(60, 60)); - make.center.equalTo(self.view); - }]; - - [self.view addSubview:_closeButton]; - - [_closeButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.bottom.right.equalTo(self.view).offset(-10); - make.size.equalTo(CGSizeMake(44, 44)); - }]; - - UIVisualEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; - self.effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; - [self.thumbImageView addSubview:_effectView]; - [self.effectView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.thumbImageView); - }]; - - UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapAction:)]; - [self.view addGestureRecognizer:singleTap ]; - - [self setupPlayer]; - - self.enableGesture = YES; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)setThumbImage:(UIImage *)thumbImage { - _thumbImage = thumbImage; - self.thumbImageView.image = thumbImage; -} - -- (void)setThumbImageURL:(NSURL *)thumbImageURL { - _thumbImageURL = thumbImageURL; - [self.thumbImageView sd_setImageWithURL:thumbImageURL placeholderImage:self.thumbImageView.image]; -} - -- (void)setUrl:(NSURL *)url { - if ([_url.absoluteString isEqualToString:url.absoluteString]) return; - _url = url; - - if (self.player) { - [self stop]; - [self setupPlayer]; - [self.player play]; - } -} - -- (void) setupPlayer { - - NSLog(@"播放地址: %@", _url.absoluteString); - - PLPlayerOption *option = [PLPlayerOption defaultOption]; - PLPlayFormat format = kPLPLAY_FORMAT_UnKnown; - NSString *urlString = _url.absoluteString.lowercaseString; - if ([urlString hasSuffix:@"mp4"]) { - format = kPLPLAY_FORMAT_MP4; - } else if ([urlString hasPrefix:@"rtmp:"]) { - format = kPLPLAY_FORMAT_FLV; - } else if ([urlString hasSuffix:@".mp3"]) { - format = kPLPLAY_FORMAT_MP3; - } else if ([urlString hasSuffix:@".m3u8"]) { - format = kPLPLAY_FORMAT_M3U8; - } - [option setOptionValue:@(format) forKey:PLPlayerOptionKeyVideoPreferFormat]; - [option setOptionValue:@(kPLLogNone) forKey:PLPlayerOptionKeyLogLevel]; - - self.player = [PLPlayer playerWithURL:_url option:option]; - [self.view insertSubview:self.player.playerView atIndex:0]; - [self.player.playerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.view); - }]; - self.player.delegateQueue = dispatch_get_main_queue(); - self.player.playerView.contentMode = UIViewContentModeScaleAspectFit; - self.player.delegate = self; - self.player.loopPlay = YES; -} - -- (void)clickCloseButton { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -- (void)viewDidDisappear:(BOOL)animated { - self.isDisapper = YES; - [self stop]; - [super viewDidDisappear:animated]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - self.isDisapper = NO; - if (![self.player isPlaying]) { - [self.player play]; - } -} - -- (void)singleTapAction:(UIGestureRecognizer *)gesture { - if ([self.player isPlaying]) { - [self.player pause]; - } else { - [self.player resume]; - } -} - -- (void)clickPlayButton:(UIButton *)button { - [self.player resume]; -} - -- (void)stop { - [self.player stop]; - [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; -} - -- (void)showWaiting { - [self.playButton hide]; - [self.view showFullLoading]; - [self.view bringSubviewToFront:self.closeButton]; -} - -- (void)hideWaiting { - [self.view hideFullLoading]; - if (PLPlayerStatusPlaying != self.player.status) { - [self.playButton show]; - } -} - -- (void)setEnableGesture:(BOOL)enableGesture { - if (_enableGesture == enableGesture) return; - _enableGesture = enableGesture; - - if (nil == self.panGesture) { - self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)]; - } - if (enableGesture) { - if (![[self.view gestureRecognizers] containsObject:self.panGesture]) { - [self.view addGestureRecognizer:self.panGesture]; - } - } else { - [self.view removeGestureRecognizer:self.panGesture]; - } -} - -- (void)panGesture:(UIPanGestureRecognizer *)panGesture { - - if (UIGestureRecognizerStateChanged == panGesture.state) { - CGPoint location = [panGesture locationInView:panGesture.view]; - CGPoint translation = [panGesture translationInView:panGesture.view]; - [panGesture setTranslation:CGPointZero inView:panGesture.view]; - -#define FULL_VALUE 200.0f - CGFloat percent = translation.y / FULL_VALUE; - if (location.x > self.view.bounds.size.width / 2) {// 调节音量 - - CGFloat volume = [self.player getVolume]; - volume -= percent; - if (volume < 0.01) { - volume = 0.01; - } else if (volume > 3) { - volume = 3; - } - [self.player setVolume:volume]; - } else {// 调节亮度f - CGFloat currentBrightness = [[UIScreen mainScreen] brightness]; - currentBrightness -= percent; - if (currentBrightness < 0.1) { - currentBrightness = 0.1; - } else if (currentBrightness > 1) { - currentBrightness = 1; - } - [[UIScreen mainScreen] setBrightness:currentBrightness]; - } - } -} - -#pragma mark - PLPlayerDelegate - -- (void)playerWillBeginBackgroundTask:(PLPlayer *)player { -} - -- (void)playerWillEndBackgroundTask:(PLPlayer *)player { -} - -- (void)player:(PLPlayer *)player statusDidChange:(PLPlayerStatus)state -{ - if (self.isDisapper) { - [self stop]; - [self hideWaiting]; - return; - } - - if (state == PLPlayerStatusPlaying || - state == PLPlayerStatusPaused || - state == PLPlayerStatusStopped || - state == PLPlayerStatusError || - state == PLPlayerStatusUnknow || - state == PLPlayerStatusCompleted) { - [self hideWaiting]; - } else if (state == PLPlayerStatusPreparing || - state == PLPlayerStatusReady || - state == PLPlayerStatusCaching) { - [self showWaiting]; - } else if (state == PLPlayerStateAutoReconnecting) { - [self showWaiting]; - } -} - -- (void)player:(PLPlayer *)player stoppedWithError:(NSError *)error -{ - [self hideWaiting]; - NSString *info = error.userInfo[@"NSLocalizedDescription"]; - [self.view showTip:info]; -} - -- (void)player:(nonnull PLPlayer *)player willRenderFrame:(nullable CVPixelBufferRef)frame pts:(int64_t)pts sarNumerator:(int)sarNumerator sarDenominator:(int)sarDenominator { - dispatch_main_async_safe(^{ - if (![UIApplication sharedApplication].isIdleTimerDisabled) { - [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; - } - }); - -} - -- (AudioBufferList *)player:(PLPlayer *)player willAudioRenderBuffer:(AudioBufferList *)audioBufferList asbd:(AudioStreamBasicDescription)audioStreamDescription pts:(int64_t)pts sampleFormat:(PLPlayerAVSampleFormat)sampleFormat{ - return audioBufferList; -} - -- (void)player:(nonnull PLPlayer *)player firstRender:(PLPlayerFirstRenderType)firstRenderType { - if (PLPlayerFirstRenderTypeVideo == firstRenderType) { - self.thumbImageView.hidden = YES; - } -} - -- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData ts:(int64_t)ts { - -} - -- (void)player:(PLPlayer *)player codecError:(NSError *)error { - - NSString *info = error.userInfo[@"NSLocalizedDescription"]; - [self.view showTip:info]; - - [self hideWaiting]; -} - -- (void)player:(PLPlayer *)player loadedTimeRange:(CMTimeRange)timeRange {} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.h deleted file mode 100644 index 697fa47..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// PLPlayerView.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@class PLPlayerView; -@protocol PLPlayerViewDelegate - -- (void)playerViewEnterFullScreen:(PLPlayerView *)playerView; - -- (void)playerViewExitFullScreen:(PLPlayerView *)playerView; - -- (void)playerViewWillPlay:(PLPlayerView *)playerView; - -@end - -@interface PLPlayerView : UIView - -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong) PLMediaInfo *media; - -- (void)play; - -- (void)stop; - -- (void)pause; - -- (void)resume; - -- (void)configureVideo:(BOOL)enableRender; -@end - - -typedef enum : NSUInteger { - PLPlayerRatioDefault, - PLPlayerRatioFullScreen, - PLPlayerRatio16x9, - PLPlayerRatio4x3, -} PLPlayerRatio; - - -@class PLControlView; -@protocol PLControlViewDelegate - -- (void)controlViewClose:(PLControlView *)controlView; - -- (void)controlView:(PLControlView *)controlView speedChange:(CGFloat)speed; - -- (void)controlView:(PLControlView *)controlView ratioChange:(PLPlayerRatio)ratio; - -- (void)controlView:(PLControlView *)controlView backgroundPlayChange:(BOOL)isBackgroundPlay; - -- (void)controlViewMirror:(PLControlView *)controlView; - -- (void)controlViewRotate:(PLControlView *)controlView; - -- (BOOL)controlViewCache:(PLControlView *)controlView; - -@end - -@interface PLControlView : UIView - -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong) UIScrollView *scrollView; -@property (nonatomic, strong) UISegmentedControl *speedControl; -@property (nonatomic, strong) UISegmentedControl *ratioControl; -@property (nonatomic, strong) UILabel *speedValueLabel; -@property (nonatomic, strong) UILabel *speedTitleLabel; - -@property (nonatomic, strong) UIButton *playBackgroundButton; -@property (nonatomic, strong) UIButton *mirrorButton; -@property (nonatomic, strong) UIButton *rotateButton; -@property (nonatomic, strong) UIButton *cacheButton; - -- (void)resetStatus; -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.m deleted file mode 100644 index 929d973..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLPlayerView.m +++ /dev/null @@ -1,1289 +0,0 @@ -// -// PLPlayerView.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLPlayerView.h" -#import -@class PLControlView; - -@interface PLPlayerView () -< -PLPlayerDelegate, -PLControlViewDelegate, -UIGestureRecognizerDelegate -> - -@property (nonatomic, strong) UIView *topBarView; -@property (nonatomic, strong) UILabel *titleLabel; -@property (nonatomic, strong) UIButton *moreButton; -@property (nonatomic, strong) UIButton *exitfullScreenButton; - -@property (nonatomic, strong) UIView *bottomBarView; -@property (nonatomic, strong) UISlider *slider; -@property (nonatomic, strong) UILabel *playTimeLabel; -@property (nonatomic, strong) UILabel *durationLabel; -@property (nonatomic, strong) UIProgressView *bufferingView; -@property (nonatomic, strong) UIButton *enterFullScreenButton; - -// 在bottomBarView上面的播放暂停按钮,全屏的时候,显示 -@property (nonatomic, strong) UIButton *playButton; -@property (nonatomic, strong) UIButton *pauseButton; - -@property (nonatomic, strong) UIImageView *thumbImageView; -@property (nonatomic, assign) UIDeviceOrientation deviceOrientation; - -@property (nonatomic, strong) PLPlayer *player; -@property (nonatomic, strong) PLPlayerOption *playerOption; -@property (nonatomic, assign) BOOL isNeedSetupPlayer; - -@property (nonatomic, strong) NSTimer *playTimer; - -// 在屏幕中间的播放和暂停按钮,全屏的时候,隐藏 -@property (nonatomic, strong) UIButton *centerPlayButton; -@property (nonatomic, strong) UIButton *centerPauseButton; - -@property (nonatomic, strong) UIButton *snapshotButton; - -@property (nonatomic, strong) UIPanGestureRecognizer *panGesture; -@property (nonatomic, strong) UITapGestureRecognizer *tapGesture; - -@property (nonatomic, strong) PLControlView *controlView; - -// 很多时候调用stop之后,播放器可能还会返回请他状态,导致逻辑混乱,记录一下,只要调用了播放器的 stop 方法,就将 isStop 置为 YES 做标记 -@property (nonatomic, assign) BOOL isStop; - -// 当底部的 bottomBarView 因隐藏的时候,提供两个 progrssview 在最底部,随时能看到播放进度和缓冲进度 -@property (nonatomic, strong) UIProgressView *bottomPlayProgreeeView; -@property (nonatomic, strong) UIProgressView *bottomBufferingProgressView; - -// 适配iPhone X -@property (nonatomic, assign) CGFloat edgeSpace; - -@end - -@implementation PLPlayerView - --(void)dealloc { - [self unsetupPlayer]; -} - -- (void)configureVideo:(BOOL)enableRender { - self.player.enableRender = enableRender; - - // 避免在未更新画面渲染的情况下,动态翻转移动画布 2020-02-13 hera - if (!enableRender) { - [self removeFullStreenNotify]; - } else{ - [self addFullStreenNotify]; - } -} - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor blackColor]; - if (CGRectEqualToRect([UIScreen mainScreen].bounds, CGRectMake(0, 0, 375, 812))) { - // iPhone X - self.edgeSpace = 20; - } else { - self.edgeSpace = 5; - } - - [self initTopBar]; - [self initBottomBar]; - [self initOtherUI]; - [self doStableConstraint]; - - self.bottomBarView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:.2]; - self.topBarView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:.2]; - - self.deviceOrientation = UIDeviceOrientationUnknown; - [self transformWithOrientation:UIDeviceOrientationPortrait]; - - self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)]; - [self addGestureRecognizer:self.tapGesture]; - - self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)]; - self.panGesture.delegate = self; - - } - return self; -} - -- (BOOL)isFullScreen { - return UIDeviceOrientationPortrait != self.deviceOrientation; -} - -- (void)initTopBar { - self.topBarView = [[UIView alloc] init]; - - self.titleLabel = [[UILabel alloc] init]; - self.titleLabel.font = [UIFont systemFontOfSize:18]; - self.titleLabel.textColor = [UIColor whiteColor]; - - self.exitfullScreenButton = [[UIButton alloc] init]; - [self.exitfullScreenButton setImage:[UIImage imageNamed:@"player_back"] forState:(UIControlStateNormal)]; - [self.exitfullScreenButton addTarget:self action:@selector(clickExitFullScreenButton) forControlEvents:(UIControlEventTouchUpInside)]; - - self.moreButton = [[UIButton alloc] init]; - [self.moreButton setImage:[UIImage imageNamed:@"more"] forState:(UIControlStateNormal)]; - [self.moreButton addTarget:self action:@selector(clickMoreButton) forControlEvents:(UIControlEventTouchUpInside)]; - - [self.topBarView addSubview:self.titleLabel]; - [self.topBarView addSubview:self.exitfullScreenButton]; - [self.topBarView addSubview:self.moreButton]; - - [self addSubview:self.topBarView]; -} - -- (void)initBottomBar { - - self.bottomBarView = [[UIView alloc] init]; - - self.playTimeLabel = [[UILabel alloc] init]; - self.playTimeLabel.font = [UIFont systemFontOfSize:12]; - if (@available(iOS 9, *)) { - self.playTimeLabel.font= [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)]; - } - self.playTimeLabel.textColor = [UIColor whiteColor]; - self.playTimeLabel.text = @"0:00:00"; - [self.playTimeLabel sizeToFit]; - - self.durationLabel = [[UILabel alloc] init]; - self.durationLabel.font = [UIFont systemFontOfSize:12]; - if (@available(iOS 9.0, *)) { - self.durationLabel.font= [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)]; - } - self.durationLabel.textColor = [UIColor whiteColor]; - self.durationLabel.text = @"0:00:00"; - [self.durationLabel sizeToFit]; - - self.slider = [[UISlider alloc] init]; - self.slider.continuous = NO; - [self.slider setThumbImage:[UIImage imageNamed:@"slider_thumb"] forState:(UIControlStateNormal)]; - self.slider.maximumTrackTintColor = [UIColor clearColor]; - self.slider.minimumTrackTintColor = [UIColor colorWithRed:.2 green:.2 blue:.8 alpha:1]; - [self.slider addTarget:self action:@selector(sliderValueChange) forControlEvents:(UIControlEventValueChanged)]; - - self.bufferingView = [[UIProgressView alloc] init]; - self.bufferingView.progressTintColor = [UIColor colorWithWhite:1 alpha:1]; - self.bufferingView.trackTintColor = [UIColor colorWithWhite:1 alpha:.33]; - - self.enterFullScreenButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [self.enterFullScreenButton setTintColor:[UIColor whiteColor]]; - [self.enterFullScreenButton setImage:[UIImage imageNamed:@"full-screen"] forState:(UIControlStateNormal)]; - [self.enterFullScreenButton addTarget:self action:@selector(clickEnterFullScreenButton) forControlEvents:(UIControlEventTouchUpInside)]; - - self.playButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [self.playButton setTintColor:[UIColor whiteColor]]; - [self.playButton setImage:[UIImage imageNamed:@"player_play"] forState:(UIControlStateNormal)]; - [self.playButton addTarget:self action:@selector(clickPlayButton) forControlEvents:(UIControlEventTouchUpInside)]; - - self.pauseButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [self.pauseButton setTintColor:[UIColor whiteColor]]; - [self.pauseButton setImage:[UIImage imageNamed:@"player_stop"] forState:(UIControlStateNormal)]; - [self.pauseButton addTarget:self action:@selector(clickPauseButton) forControlEvents:(UIControlEventTouchUpInside)]; - - [self addSubview:self.bottomBarView]; - [self.bottomBarView addSubview:self.playButton]; - [self.bottomBarView addSubview:self.pauseButton]; - [self.bottomBarView addSubview:self.playTimeLabel]; - [self.bottomBarView addSubview:self.durationLabel]; - [self.bottomBarView addSubview:self.bufferingView]; - [self.bottomBarView addSubview:self.slider]; - [self.bottomBarView addSubview:self.enterFullScreenButton]; -} - -- (void)initOtherUI { - - self.thumbImageView = [[UIImageView alloc] init]; - self.thumbImageView.contentMode =UIViewContentModeScaleAspectFill; - self.clipsToBounds = YES; - - self.controlView = [[PLControlView alloc] initWithFrame:self.bounds]; - self.controlView.hidden = YES; - self.controlView.delegate = self; - - self.centerPlayButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [self.centerPlayButton setTintColor:[UIColor whiteColor]]; - [self.centerPlayButton setImage:[UIImage imageNamed:@"player_play"] forState:(UIControlStateNormal)]; - [self.centerPlayButton addTarget:self action:@selector(clickPlayButton) forControlEvents:(UIControlEventTouchUpInside)]; - - self.centerPauseButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [self.centerPauseButton setTintColor:[UIColor whiteColor]]; - [self.centerPauseButton setImage:[UIImage imageNamed:@"player_stop"] forState:(UIControlStateNormal)]; - [self.centerPauseButton addTarget:self action:@selector(clickPauseButton) forControlEvents:(UIControlEventTouchUpInside)]; - - self.snapshotButton = [[UIButton alloc] init]; - [self.snapshotButton addTarget:self action:@selector(clickSnapshotButton) forControlEvents:(UIControlEventTouchUpInside)]; - [self.snapshotButton setImage:[UIImage imageNamed:@"screen-cut"] forState:(UIControlStateNormal)]; - - self.bottomPlayProgreeeView = [[UIProgressView alloc] init]; - self.bottomPlayProgreeeView.progressTintColor = [UIColor colorWithRed:.2 green:.2 blue:.8 alpha:1]; - self.bottomPlayProgreeeView.trackTintColor = [UIColor clearColor]; - - self.bottomBufferingProgressView = [[UIProgressView alloc] init]; - self.bottomBufferingProgressView.progressTintColor = [UIColor colorWithWhite:1 alpha:1]; - self.bottomBufferingProgressView.trackTintColor = [UIColor colorWithWhite:1 alpha:.33]; - - [self insertSubview:self.thumbImageView atIndex:0]; - [self addSubview:self.snapshotButton]; - [self addSubview:self.centerPauseButton]; - [self addSubview:self.centerPlayButton]; - [self addSubview:self.controlView]; - [self addSubview:self.bottomBufferingProgressView]; - [self addSubview:self.bottomPlayProgreeeView]; - - self.pauseButton.hidden = YES; - self.centerPauseButton.hidden = YES; -} - -// 这些控件的 Constraints 不会随着全屏和非全屏而需要做改变的 -- (void)doStableConstraint { - - [self.topBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self); - make.bottom.equalTo(self.mas_top); - make.height.equalTo(44); - }]; - - [self.exitfullScreenButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(self.topBarView); - make.left.equalTo(self.topBarView).offset(self.edgeSpace); - make.width.equalTo(self.exitfullScreenButton.mas_height); - }]; - - [self.moreButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(self.topBarView); - make.right.equalTo(self.topBarView).offset(-self.edgeSpace); - make.width.equalTo(self.moreButton.mas_height); - }]; - - [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.exitfullScreenButton.mas_right); - make.right.equalTo(self.moreButton.mas_left); - make.centerY.equalTo(self.topBarView); - }]; - - [self.bottomBarView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self); - make.top.equalTo(self.mas_bottom); - make.height.equalTo(44); - }]; - - [self.slider mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(self.bottomBarView); - make.left.equalTo(self.playTimeLabel.mas_right).offset(5); - make.right.equalTo(self.durationLabel.mas_left).offset(-5); - }]; - - [self.durationLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.equalTo(self.enterFullScreenButton.mas_left); - make.centerY.equalTo(self.bottomBarView); - make.size.equalTo(self.durationLabel.bounds.size); - }]; - - [self.pauseButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.playButton); - }]; - - [self.centerPlayButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self); - make.size.equalTo(CGSizeMake(64, 64)); - }]; - - [self.centerPauseButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.centerPlayButton); - }]; - - [self.bufferingView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self.slider); - make.centerY.equalTo(self.slider).offset(.5); - }]; - - [self.playTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.playButton.mas_right); - make.width.equalTo(self.playTimeLabel.bounds.size.width); - make.centerY.equalTo(self.bottomBarView); - }]; - - [self.thumbImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self); - }]; - - [self.snapshotButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(self); - make.right.equalTo(self).offset(-self.edgeSpace); - make.size.equalTo(CGSizeMake(60, 60)); - }]; - - [self.bottomBufferingProgressView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.bottom.equalTo(self); - make.height.equalTo(3); - }]; - - [self.bottomPlayProgreeeView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.bottomBufferingProgressView); - }]; - - [self.controlView mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.top.bottom.equalTo(self); - make.left.equalTo(self).offset(290); - }]; - self.controlView.hidden = YES; -} - -- (void)addTimer { - [self removeTimer]; - self.playTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES]; -} - -- (void)removeTimer { - if (self.playTimer) { - [self.playTimer invalidate]; - self.playTimer = nil; - } -} - -- (void)timerAction { - self.slider.value = CMTimeGetSeconds(self.player.currentTime); - if (CMTimeGetSeconds(self.player.totalDuration)) { - int duration = self.slider.value + .5; - int hour = duration / 3600; - int min = (duration % 3600) / 60; - int sec = duration % 60; - self.playTimeLabel.text = [NSString stringWithFormat:@"%d:%02d:%02d", hour, min, sec]; - self.bottomPlayProgreeeView.progress = self.slider.value / CMTimeGetSeconds(self.player.totalDuration); - } -} - -- (void)panGesture:(UIPanGestureRecognizer *)panGesture { - - if (UIGestureRecognizerStateChanged == panGesture.state) { - CGPoint location = [panGesture locationInView:panGesture.view]; - CGPoint translation = [panGesture translationInView:panGesture.view]; - [panGesture setTranslation:CGPointZero inView:panGesture.view]; - -#define FULL_VALUE 200.0f - CGFloat percent = translation.y / FULL_VALUE; - if (location.x > self.bounds.size.width / 2) {// 调节音量 - - CGFloat volume = [self.player getVolume]; - volume -= percent; - if (volume < 0.01) { - volume = 0.01; - } else if (volume > 3) { - volume = 3; - } - [self.player setVolume:volume]; - } else {// 调节亮度f - CGFloat currentBrightness = [[UIScreen mainScreen] brightness]; - currentBrightness -= percent; - if (currentBrightness < 0.1) { - currentBrightness = 0.1; - } else if (currentBrightness > 1) { - currentBrightness = 1; - } - [[UIScreen mainScreen] setBrightness:currentBrightness]; - } - } -} - -- (void)singleTap:(UIGestureRecognizer *)gesture { - - // 如果还木有初始化,直接初始化播放 - if (self.isNeedSetupPlayer || PLPlayerStatusStopped == self.player.status) { - [self play]; - return; - } - - if (PLPlayerStatusPaused == self.player.status) { - [self resume]; - return; - } - - if (PLPlayerStatusPlaying == self.player.status) { - if (self.bottomBarView.frame.origin.y >= self.bounds.size.height) { - [self showBar]; - } else { - [self hideBar]; - } - } -} - -- (void)hideBar { - - if (PLPlayerStatusPlaying != self.player.status) return; - - [self hideTopBar]; - [self hideBottomBar]; - self.centerPauseButton.hidden = YES; - [self doConstraintAnimation]; - -} - -- (void)showBar { - - [self showBottomBar]; - self.centerPauseButton.hidden = NO; - if ([self isFullScreen]) { - [self showTopBar]; - } - [self doConstraintAnimation]; - - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideBar) object:nil]; - [self performSelector:@selector(hideBar) withObject:nil afterDelay:3]; -} - -- (void)showControlView { - - [self hideBar]; - [self hideTopBar]; - self.centerPauseButton.hidden = YES; - self.centerPlayButton.hidden = YES; - - self.controlView.hidden = NO; - [self.controlView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self); - }]; - - [self doConstraintAnimation]; -} - -- (void)hideControlView { - - [self.controlView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.width.top.bottom.equalTo(self); - make.left.equalTo(self).offset(290); - }]; - - [self setNeedsUpdateConstraints]; - [self updateConstraintsIfNeeded]; - - [UIView animateWithDuration:.3 animations:^{ - [self layoutIfNeeded]; - } completion:^(BOOL finished) { - self.controlView.hidden = YES; - }]; -} - -- (void)clickExitFullScreenButton { - [self transformWithOrientation:UIDeviceOrientationPortrait]; -} - -- (void)clickEnterFullScreenButton { - if (UIDeviceOrientationLandscapeRight == [[UIDevice currentDevice]orientation]) { - [self transformWithOrientation:UIDeviceOrientationLandscapeRight]; - } else { - [self transformWithOrientation:UIDeviceOrientationLandscapeLeft]; - } -} - -- (void)clickMoreButton { - [self removeGestureRecognizer:self.tapGesture]; - [self removeGestureRecognizer:self.panGesture]; - [self showControlView]; -} - -- (void)clickSnapshotButton { - - __weak typeof(self) wself = self; - - [NSObject haveAlbumAccess:^(BOOL isAuth) { - if (!isAuth) return; - - [wself.player getScreenShotWithCompletionHandler:^(UIImage * _Nullable image) { - if (image) { - [wself showTip:@"拍照成功"]; - UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); - } - }]; - }]; -} - -- (void)sliderValueChange { - [self.player seekTo:CMTimeMake(self.slider.value * 1000, 1000)]; -} - -- (void)doConstraintAnimation { - [self setNeedsUpdateConstraints]; - [self updateConstraintsIfNeeded]; - - [UIView animateWithDuration:.3 animations:^{ - [self layoutIfNeeded]; - }]; -} - -- (void)hideTopBar { - [self.topBarView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self); - make.bottom.equalTo(self.mas_top); - make.height.equalTo(44); - }]; -} - -- (void)hideBottomBar { - [self.bottomBarView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self); - make.top.equalTo(self.mas_bottom); - make.height.equalTo(44); - }]; - - self.snapshotButton.hidden = YES; - - if (PLPlayerStatusPlaying == self.player.status || - PLPlayerStatusPaused == self.player.status || - PLPlayerStatusCaching == self.player.status) { - [self showBottomProgressView]; - } -} - -- (void)showTopBar { - [self.topBarView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.left.top.right.equalTo(self); - make.height.equalTo(44); - }]; - self.snapshotButton.hidden = NO; -} - -- (void)showBottomBar { - [self.bottomBarView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.left.bottom.right.equalTo(self); - make.height.equalTo(44); - }]; - - [self hideBottomProgressView]; -} - -- (void)showBottomProgressView { -// self.bottomBufferingProgressView.hidden = NO; -// self.bottomPlayProgreeeView.hidden = NO; -} - -- (void)hideBottomProgressView { - self.bottomBufferingProgressView.hidden = YES; - self.bottomPlayProgreeeView.hidden = YES; -} - -- (void)transformWithOrientation:(UIDeviceOrientation)or { - - if (or == self.deviceOrientation) return; - if (!(UIDeviceOrientationPortrait == or || UIDeviceOrientationLandscapeLeft == or || UIDeviceOrientationLandscapeRight == or)) return; - - BOOL isFirst = UIDeviceOrientationUnknown == self.deviceOrientation; - - if (or == UIDeviceOrientationPortrait) { - - [self removeGestureRecognizer:self.panGesture]; - self.snapshotButton.hidden = YES; - - [self.playButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(self.bottomBarView); - make.left.equalTo(self.bottomBarView).offset(5); - make.width.equalTo(0); - }]; - - [self.enterFullScreenButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.right.top.bottom.equalTo(self.bottomBarView); - make.width.equalTo(self.enterFullScreenButton.mas_height); - }]; - - [self.centerPlayButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self); - make.size.equalTo(CGSizeMake(64, 64)); - }]; - - if (!isFirst) { - [self hideTopBar]; - [self hideControlView]; - [self doConstraintAnimation]; - [self.delegate playerViewExitFullScreen:self]; - if (![self.gestureRecognizers containsObject:self.tapGesture]) { - [self addGestureRecognizer:self.tapGesture]; - } - } - [UIView animateWithDuration:.3 animations:^{ - self.transform = CGAffineTransformMakeRotation(0); - }]; - - } else { - - if (![[self gestureRecognizers] containsObject:self.panGesture]) { - [self addGestureRecognizer:self.panGesture]; - } - - CGFloat duration = .5; - if (!UIDeviceOrientationIsLandscape(self.deviceOrientation)) { - duration = .3; - - [self.playButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(self.bottomBarView); - make.left.equalTo(self.bottomBarView).offset(self.edgeSpace); - make.width.equalTo(self.playButton.mas_height); - }]; - - [self.enterFullScreenButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(self.bottomBarView); - make.right.equalTo(self.bottomBarView).offset(-self.edgeSpace); - make.width.equalTo(0); - }]; - - [self.centerPlayButton mas_remakeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self); - make.size.equalTo(CGSizeMake(0, 0)); - }]; - - [self doConstraintAnimation]; - } - - [UIView animateWithDuration:duration animations:^{ - self.transform = UIDeviceOrientationLandscapeLeft == or ? CGAffineTransformMakeRotation(M_PI/2) : CGAffineTransformMakeRotation(3*M_PI/2); - }]; - - if (UIDeviceOrientationUnknown != self.deviceOrientation) { - [self.delegate playerViewEnterFullScreen:self]; - } - } - - self.deviceOrientation = or; -} - --(void)addFullStreenNotify{ - - [self removeFullStreenNotify]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(recvDeviceOrientationChangeNotify:) name:UIDeviceOrientationDidChangeNotification object:nil]; -} - --(void)removeFullStreenNotify{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; -} - --(void)recvDeviceOrientationChangeNotify:(NSNotification*)info{ - UIDeviceOrientation or = [[UIDevice currentDevice]orientation]; - [self transformWithOrientation:or]; -} - -- (void)clickPauseButton { - [self pause]; -} - -- (void)clickPlayButton { - if (PLPlayerStatusPaused == self.player.status) { - [self resume]; - } else { - [self play]; - } -} - -- (void)setupPlayer { - [self unsetupPlayer]; - - NSLog(@"播放地址: %@", _media.videoURL); - self.thumbImageView.hidden = NO; - [self.thumbImageView sd_setImageWithURL:[NSURL URLWithString:_media.thumbURL]]; - - self.playerOption = [PLPlayerOption defaultOption]; - PLPlayFormat format = kPLPLAY_FORMAT_UnKnown; - NSString *urlString = _media.videoURL.lowercaseString; - if ([urlString hasSuffix:@"mp4"]) { - format = kPLPLAY_FORMAT_MP4; - } else if ([urlString hasPrefix:@"rtmp:"]) { - format = kPLPLAY_FORMAT_FLV; - } else if ([urlString hasSuffix:@".mp3"]) { - format = kPLPLAY_FORMAT_MP3; - } else if ([urlString hasSuffix:@".m3u8"]) { - format = kPLPLAY_FORMAT_M3U8; - } - [self.playerOption setOptionValue:@(format) forKey:PLPlayerOptionKeyVideoPreferFormat]; - [self.playerOption setOptionValue:@(kPLLogNone) forKey:PLPlayerOptionKeyLogLevel]; - - NSDate *date = [NSDate date]; - self.player = [PLPlayer playerWithURL:[NSURL URLWithString:_media.videoURL] option:self.playerOption]; - - NSLog(@"playerWithURL 耗时: %f s",[[NSDate date] timeIntervalSinceDate:date]); - - self.player.delegateQueue = dispatch_get_main_queue(); - self.player.playerView.contentMode = UIViewContentModeScaleAspectFit; - self.player.delegate = self; - self.player.loopPlay = YES; - - [self insertSubview:self.player.playerView atIndex:0]; - self.player.playerView.frame = self.bounds; - [self.player.playerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self); - }]; -} - -- (void)unsetupPlayer { - [self stop]; - - if (self.player.playerView.superview) { - [self.player.playerView removeFromSuperview]; - } - [self removeTimer]; -} - -- (void)setMedia:(PLMediaInfo *)media { - _media = media; - self.titleLabel.text = media.detailDesc; - self.isNeedSetupPlayer = YES; - [self.thumbImageView sd_setImageWithURL:[NSURL URLWithString:_media.thumbURL]]; -} - -- (void)play { - - if (self.isNeedSetupPlayer) { - [self setupPlayer]; - self.isNeedSetupPlayer = NO; - } - self.isStop = NO; - - [self.delegate playerViewWillPlay:self]; - [self addFullStreenNotify]; - [self addTimer]; - [self resetButton:YES]; - - if (!(PLPlayerStatusReady == self.player.status || - PLPlayerStatusOpen == self.player.status || - PLPlayerStatusCaching == self.player.status || - PLPlayerStatusPlaying == self.player.status || - PLPlayerStatusPreparing == self.player.status) - ) { - NSDate *date = [NSDate date]; - [self.player play]; - NSLog(@"play 耗时: %f s",[[NSDate date] timeIntervalSinceDate:date]); - } -} - -- (void)pause { - [self.player pause]; - [self resetButton:NO]; -} - -- (void)resume { - - [self.delegate playerViewWillPlay:self]; - [self.player resume]; - [self resetButton:YES]; -} - -- (void)stop { - - NSDate *date = nil; - if ([self.player isPlaying]) { - date = [NSDate date]; - } - [self.player stop]; - if (date) { - NSLog(@"stop 耗时: %f s",[[NSDate date] timeIntervalSinceDate:date]); - } - - - [self removeFullStreenNotify]; - [self resetUI]; - [self.controlView resetStatus]; - self.isStop = YES; - [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; -} - -- (void)resetUI { - - self.bufferingView.progress = 0; - self.slider.value = 0; - self.playTimeLabel.text = @"0:00:00"; - self.durationLabel.text = @"0:00:00"; - self.thumbImageView.hidden = NO; - - [self resetButton:NO]; - [self hideFullLoading]; - - [self hideTopBar]; - [self hideBottomBar]; - [self hideBottomProgressView]; - [self doConstraintAnimation]; - -} - -- (void)resetButton:(BOOL)isPlaying { - - self.playButton.hidden = isPlaying; - self.pauseButton.hidden = !isPlaying; - - if (isPlaying) { - self.centerPauseButton.hidden = NO; - self.centerPlayButton.hidden = YES; - } else { - self.centerPauseButton.hidden = YES; - [self.centerPlayButton show]; - } -} - -// 避免 pan 手势将 slider 手势给屏蔽掉 -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { - if (gestureRecognizer == self.panGesture) { - CGPoint point = [gestureRecognizer locationInView:self]; - return !CGRectContainsPoint(self.bottomBarView.frame, point); - } - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - if (gestureRecognizer == self.panGesture) { - CGPoint point = [touch locationInView:self]; - return !CGRectContainsPoint(self.bottomBarView.frame, point); - } - return YES; -} - -// PLControlViewDelegate -- (void)controlViewClose:(PLControlView *)controlView { - - [self hideControlView]; - - if (![[self gestureRecognizers] containsObject:self.panGesture]) { - [self addGestureRecognizer:self.panGesture]; - } - if (![[self gestureRecognizers] containsObject:self.tapGesture]) { - [self addGestureRecognizer:self.tapGesture]; - } -} - -- (void)controlView:(PLControlView *)controlView speedChange:(CGFloat)speed { - [self.player setPlaySpeed:speed]; -} - -- (void)controlView:(PLControlView *)controlView ratioChange:(PLPlayerRatio)ratio { - CGRect rc = CGRectMake(0, 0, self.player.width, self.player.height); - if (PLPlayerRatioDefault == ratio) { - [self.player setVideoClipFrame:CGRectZero]; - } else if (PLPlayerRatioFullScreen == ratio) { - [self.player setVideoClipFrame:rc]; - } else if (PLPlayerRatio16x9 == ratio) { - CGFloat width = 0; - CGFloat height = 0; - if (rc.size.width / rc.size.height > 16.0 / 9.0) { - height = rc.size.height; - width = rc.size.height * 16.0 / 9.0; - rc.origin.x = (rc.size.width - width ) / 2; - } else { - width = rc.size.width; - height = rc.size.width * 9.0 / 16.0; - rc.origin.y = (rc.size.height - height ) / 2; - } - rc.size.width = width; - rc.size.height = height; - [self.player setVideoClipFrame:rc]; - } else if (PLPlayerRatio4x3 == ratio) { - CGFloat width = 0; - CGFloat height = 0; - if (rc.size.width / rc.size.height > 4.0 / 3.0) { - height = rc.size.height; - width = rc.size.height * 4.0 / 3.0; - rc.origin.x = (rc.size.width - width ) / 2; - } else { - width = rc.size.width; - height = rc.size.width * 3.0 / 4.0; - rc.origin.y = (rc.size.height - height ) / 2; - } - rc.size.width = width; - rc.size.height = height; - [self.player setVideoClipFrame:rc]; - } -} - -- (void)controlView:(PLControlView *)controlView backgroundPlayChange:(BOOL)isBackgroundPlay { - [self.player setBackgroundPlayEnable:isBackgroundPlay]; -} - -- (void)controlViewMirror:(PLControlView *)controlView { - if (PLPlayerFlipHorizonal != self.player.rotationMode) { - self.player.rotationMode = PLPlayerFlipHorizonal; - } else { - self.player.rotationMode = PLPlayerNoRotation; - } -} - -- (void)controlViewRotate:(PLControlView *)controlView { - - PLPlayerRotationsMode mode = self.player.rotationMode; - mode ++; - if (mode > PLPlayerRotate180) { - mode = PLPlayerNoRotation; - } - self.player.rotationMode = mode; -} - -- (BOOL)controlViewCache:(PLControlView *)controlView { - if ([self.playerOption optionValueForKey:PLPlayerOptionKeyVideoCacheFolderPath]) { - [_playerOption setOptionValue:nil forKey:PLPlayerOptionKeyVideoCacheFolderPath]; - [_playerOption setOptionValue:nil forKey:PLPlayerOptionKeyVideoCacheExtensionName]; - return NO; - } else { - NSString* docPathDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; - docPathDir = [docPathDir stringByAppendingString:@"/PLCache/"]; - [_playerOption setOptionValue:docPathDir forKey:PLPlayerOptionKeyVideoCacheFolderPath]; - [_playerOption setOptionValue:@"mp4" forKey:PLPlayerOptionKeyVideoCacheExtensionName]; - return YES; - } -} - - -#pragma mark - PLPlayerDelegate - -- (void)playerWillBeginBackgroundTask:(PLPlayer *)player { -} - -- (void)playerWillEndBackgroundTask:(PLPlayer *)player { -} - -- (void)player:(PLPlayer *)player statusDidChange:(PLPlayerStatus)state -{ - if (self.isStop) { - static NSString * statesString[] = { - @"PLPlayerStatusUnknow" - @"PLPlayerStatusPreparing", - @"PLPlayerStatusReady", - @"PLPlayerStatusOpen", - @"PLPlayerStatusCaching", - @"PLPlayerStatusPlaying", - @"PLPlayerStatusPaused", - @"PLPlayerStatusStopped", - @"PLPlayerStatusError", - @"PLPlayerStateAutoReconnecting", - @"PLPlayerStatusCompleted" - }; -// NSLog(@"stop statusDidChange self,= %p state = %@", self, statesString[state]); - [self stop]; - return; - } - - if (state == PLPlayerStatusPlaying || - state == PLPlayerStatusPaused || - state == PLPlayerStatusStopped || - state == PLPlayerStatusError || - state == PLPlayerStatusUnknow || - state == PLPlayerStatusCompleted) { - [self hideFullLoading]; - } else if (state == PLPlayerStatusPreparing || - state == PLPlayerStatusReady || - state == PLPlayerStatusCaching) { - [self showFullLoading]; - self.centerPauseButton.hidden = YES; - } else if (state == PLPlayerStateAutoReconnecting) { - [self showFullLoading]; - self.centerPauseButton.hidden = YES; - // alert 重新 - [self showTip:@"重新连接..."]; - } - - //开始播放之后,如果 bar 是显示的,则 3 秒之后自动隐藏 - if (PLPlayerStatusPlaying == state) { - if (self.bottomBarView.frame.origin.y >= self.bounds.size.height) { - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideBar) object:nil]; - [self performSelector:@selector(hideBar) withObject:nil afterDelay:3]; - } - } -} - -- (void)player:(PLPlayer *)player stoppedWithError:(NSError *)error -{ - NSString *info = error.userInfo[@"NSLocalizedDescription"]; - [self showTip:info]; - - [self stop]; -} - -- (void)player:(nonnull PLPlayer *)player willRenderFrame:(nullable CVPixelBufferRef)frame pts:(int64_t)pts sarNumerator:(int)sarNumerator sarDenominator:(int)sarDenominator { - dispatch_main_async_safe(^{ - if (![UIApplication sharedApplication].isIdleTimerDisabled) { - [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; - } - }); -} - -- (AudioBufferList *)player:(PLPlayer *)player willAudioRenderBuffer:(AudioBufferList *)audioBufferList asbd:(AudioStreamBasicDescription)audioStreamDescription pts:(int64_t)pts sampleFormat:(PLPlayerAVSampleFormat)sampleFormat{ - return audioBufferList; -} - -- (void)player:(nonnull PLPlayer *)player firstRender:(PLPlayerFirstRenderType)firstRenderType { - if (PLPlayerFirstRenderTypeVideo == firstRenderType) { - self.thumbImageView.hidden = YES; - } - self.slider.maximumValue = CMTimeGetSeconds(self.player.totalDuration); - self.slider.minimumValue = 0; - - CGFloat fduration = CMTimeGetSeconds(self.player.totalDuration); - int duration = fduration + .5; - int hour = duration / 3600; - int min = (duration % 3600) / 60; - int sec = duration % 60; - self.durationLabel.text = [NSString stringWithFormat:@"%d:%02d:%02d", hour, min, sec]; -} - -- (void)player:(nonnull PLPlayer *)player SEIData:(nullable NSData *)SEIData ts:(int64_t)ts { - -} - -- (void)player:(PLPlayer *)player codecError:(NSError *)error { - NSString *info = error.userInfo[@"NSLocalizedDescription"]; - [self showTip:info]; - - [self stop]; -} - -- (void)player:(PLPlayer *)player loadedTimeRange:(CMTime)timeRange { - - float startSeconds = 0; - float durationSeconds = CMTimeGetSeconds(timeRange); - CGFloat totalDuration = CMTimeGetSeconds(self.player.totalDuration); - self.bufferingView.progress = (durationSeconds - startSeconds) / totalDuration; - self.bottomBufferingProgressView.progress = self.bufferingView.progress; -} - -@end - - - -@implementation PLControlView - -static NSString * speedString[] = {@"0.5", @"0.75", @"1.0", @"1.25", @"1.5"}; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)]; - bgView.backgroundColor = [UIColor colorWithWhite:0 alpha:.5]; - [self addSubview:bgView]; - - [bgView mas_makeConstraints:^(MASConstraintMaker *make) { - make.right.bottom.top.equalTo(self); - make.width.equalTo(290); - }]; - - UIButton *dismissButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [dismissButton addTarget:self action:@selector(clickCloseButton) forControlEvents:(UIControlEventTouchUpInside)]; - [self addSubview:dismissButton]; - [dismissButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.top.bottom.equalTo(self); - make.right.equalTo(bgView.mas_left); - }]; - - - self.scrollView = [[UIScrollView alloc] init]; - UIView *contentView = [[UIView alloc] init]; - - UIView *barView = [[UIView alloc] init]; - [barView setBackgroundColor:[UIColor colorWithWhite:0 alpha:.5]]; - - UILabel *title = [[UILabel alloc] init]; - title.textAlignment = NSTextAlignmentCenter; - title.font = [UIFont systemFontOfSize:18]; - title.textColor = [UIColor whiteColor]; - title.text = @"播放设置"; - - UIButton *closeButton = [UIButton buttonWithType:(UIButtonTypeSystem)]; - [closeButton setTintColor:[UIColor whiteColor]]; - [closeButton setImage:[UIImage imageNamed:@"player_close"] forState:(UIControlStateNormal)]; - [closeButton addTarget:self action:@selector(clickCloseButton) forControlEvents:(UIControlEventTouchUpInside)]; - - [bgView addSubview:barView]; - [bgView addSubview:self.scrollView]; - [barView addSubview:title]; - [barView addSubview:closeButton]; - [self.scrollView addSubview:contentView]; - - [barView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.equalTo(bgView); - make.height.equalTo(50); - }]; - - [title mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(barView); - }]; - - if (CGRectEqualToRect([UIScreen mainScreen].bounds, CGRectMake(0, 0, 375, 812))) { - // iPhone X - [closeButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(barView); - make.right.equalTo(barView).offset(-20); - make.width.equalTo(closeButton.mas_height); - }]; - } else { - [closeButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.bottom.equalTo(barView); - make.right.equalTo(barView).offset(-5); - make.width.equalTo(closeButton.mas_height); - }]; - } - - [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.bottom.right.equalTo(bgView); - make.top.equalTo(barView.mas_bottom); - }]; - - [contentView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.scrollView); - make.width.equalTo(bgView); - }]; - - self.speedTitleLabel = [[UILabel alloc] init]; - self.speedTitleLabel.font = [UIFont systemFontOfSize:12]; - self.speedTitleLabel.textColor = [UIColor colorWithWhite:.8 alpha:1]; - self.speedTitleLabel.text = @"播放速度:"; - [self.speedTitleLabel sizeToFit]; - - self.speedValueLabel = [[UILabel alloc] init]; - self.speedValueLabel.font = [UIFont systemFontOfSize:12]; - self.speedValueLabel.textColor = [UIColor colorWithRed:.33 green:.66 blue:1 alpha:1]; - self.speedValueLabel.text = @"1.0"; - - NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithWhite:1 alpha:.5], NSForegroundColorAttributeName, [UIFont systemFontOfSize:12],NSFontAttributeName,nil]; - NSDictionary *dicS = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:.33 green:.66 blue:1 alpha:1],NSForegroundColorAttributeName, [UIFont systemFontOfSize:12],NSFontAttributeName ,nil]; - - self.speedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:speedString count:ARRAY_SIZE(speedString)]]; - [self.speedControl addTarget:self action:@selector(speedControlChange:) forControlEvents:(UIControlEventValueChanged)]; - [self.speedControl setTitleTextAttributes:dicS forState:UIControlStateSelected]; - [self.speedControl setTitleTextAttributes:dic forState:UIControlStateNormal]; - self.speedControl.tintColor = [UIColor clearColor]; - - self.ratioControl = [[UISegmentedControl alloc] initWithItems:@[@"默认", @"全屏", @"16:9", @"4:3"]]; - [self.ratioControl addTarget:self action:@selector(ratioControlChange:) forControlEvents:(UIControlEventValueChanged)]; - [self.ratioControl setTitleTextAttributes:dicS forState:UIControlStateSelected]; - [self.ratioControl setTitleTextAttributes:dic forState:UIControlStateNormal]; - self.ratioControl.tintColor = [UIColor clearColor]; - - UIButton *button[4]; - NSString *buttonTitles[4] = {@"后台播放", @"镜像反转", @"旋转", @"本地缓存"}; - NSString *buttonImages[4] = {@"background_play", @"mirror_swtich", @"rotate", @"save"}; - for (int i = 0; i < 4; i ++) { - button[i] = [[UIButton alloc] init]; - [button[i] setImage:[UIImage imageNamed:buttonImages[i]] forState:(UIControlStateNormal)]; - [button[i] setTitle:buttonTitles[i] forState:(UIControlStateNormal)]; - button[i].titleLabel.font = [UIFont systemFontOfSize:14]; - } - - self.playBackgroundButton = button[0]; - self.mirrorButton = button[1]; - self.rotateButton = button[2]; - self.cacheButton = button[3]; - - [self.playBackgroundButton addTarget:self action:@selector(clickPlayBackgroundButton) forControlEvents:(UIControlEventTouchUpInside)]; - [self.mirrorButton addTarget:self action:@selector(clickMirrorButton) forControlEvents:(UIControlEventTouchUpInside)]; - [self.rotateButton addTarget:self action:@selector(clickRotateButton) forControlEvents:(UIControlEventTouchUpInside)]; - [self.cacheButton addTarget:self action:@selector(clickCacheButton) forControlEvents:(UIControlEventTouchUpInside)]; - - [contentView addSubview:_speedTitleLabel]; - [contentView addSubview:_speedValueLabel]; - [contentView addSubview:_speedControl]; - [contentView addSubview:_ratioControl]; - [contentView addSubview:_playBackgroundButton]; - [contentView addSubview:_mirrorButton]; - [contentView addSubview:_rotateButton]; - [contentView addSubview:_cacheButton]; - - // 这几句对齐的代码太 low 了,Demo中用用 - [_playBackgroundButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; - [_mirrorButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; - [_cacheButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; - [_rotateButton setTitleEdgeInsets:UIEdgeInsetsMake(0, -5, 0, 0)]; - [_rotateButton setImageEdgeInsets:UIEdgeInsetsMake(0, -30, 0, 0)]; - - [_cacheButton setTitle:@"缓存已开" forState:(UIControlStateSelected)]; - - [self.speedTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.left.equalTo(contentView).offset(20); - make.width.equalTo(self.speedTitleLabel.bounds.size.width); - }]; - - [self.speedValueLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.speedTitleLabel.mas_right).offset(5); - make.centerY.equalTo(self.speedTitleLabel); - }]; - - [_speedControl mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.speedTitleLabel); - make.right.equalTo(contentView).offset(-20); - make.top.equalTo(self.speedTitleLabel.mas_bottom).offset(10); - make.height.equalTo(44); - }]; - - [_ratioControl mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.left.right.equalTo(_speedControl); - make.top.equalTo(_speedControl.mas_bottom).offset(20); - }]; - - [_playBackgroundButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(_speedControl); - make.right.equalTo(contentView.mas_centerX); - make.top.equalTo(_ratioControl.mas_bottom).offset(20); - make.height.equalTo(50); - }]; - - [_mirrorButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(_playBackgroundButton.mas_right); - make.size.centerY.equalTo(_playBackgroundButton); - }]; - - [_rotateButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.height.equalTo(_playBackgroundButton); - make.top.equalTo(_playBackgroundButton.mas_bottom).offset(20); - }]; - - [_cacheButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(_mirrorButton); - make.height.equalTo(_mirrorButton); - make.centerY.equalTo(_rotateButton); - make.bottom.equalTo(contentView).offset(-20); - }]; - - [self resetStatus]; - } - return self; -} - -- (void)resetStatus { - self.speedControl.selectedSegmentIndex = 2; - self.ratioControl.selectedSegmentIndex = 0; - self.playBackgroundButton.selected = NO; - self.cacheButton.selected = NO; - self.speedValueLabel.text = speedString[self.speedControl.selectedSegmentIndex]; -} - -- (void)speedControlChange:(UISegmentedControl *)control { - self.speedValueLabel.text = speedString[control.selectedSegmentIndex]; - [self.delegate controlView:self speedChange:[speedString[control.selectedSegmentIndex] floatValue]]; -} - -- (void)ratioControlChange:(UISegmentedControl *)control { - [self.delegate controlView:self ratioChange:control.selectedSegmentIndex]; -} - -- (void)clickPlayBackgroundButton { - self.playBackgroundButton.selected = !self.playBackgroundButton.isSelected; - [self.delegate controlView:self backgroundPlayChange:self.playBackgroundButton.isSelected]; -} - -- (void)clickMirrorButton { - [self.delegate controlViewMirror:self]; -} - -- (void)clickRotateButton { - [self.delegate controlViewRotate:self]; -} - -- (void)clickCacheButton { - self.cacheButton.selected = [self.delegate controlViewCache:self]; -} - -- (void)clickCloseButton { - [self.delegate controlViewClose:self]; -} - -@end - - diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.h b/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.h deleted file mode 100644 index 7a020c5..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// PLQRCodeViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLBaseViewController.h" - -@class PLQRCodeViewController; -@protocol PLCodeViewControllerDelegate - -- (void)codeViewController:(PLQRCodeViewController *)codeController scanResult:(NSString *)result; - -@end - -@interface PLQRCodeViewController : PLBaseViewController - -@property (nonatomic, weak) id delegate; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.m b/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.m deleted file mode 100644 index 4fab568..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Common/PLQRCodeViewController.m +++ /dev/null @@ -1,277 +0,0 @@ -// -// PLQRCodeViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLQRCodeViewController.h" - -@interface PLQRCodeViewController () -< -AVCaptureMetadataOutputObjectsDelegate, -UIImagePickerControllerDelegate, -UINavigationControllerDelegate, -CAAnimationDelegate -> - -@property (strong, nonatomic) AVCaptureDevice *device; -@property (strong, nonatomic) AVCaptureDeviceInput *input; -@property (strong, nonatomic) AVCaptureMetadataOutput *output; -@property (strong, nonatomic) AVCaptureSession *session; -@property (strong, nonatomic) AVCaptureVideoPreviewLayer *previewLayer; - -@property (assign, nonatomic) CGRect scanFrame; - -@property (nonatomic, strong) UIView *lineView; - -@end - -@implementation PLQRCodeViewController - -- (void)dealloc { - [self stop]; -} - - -- (void)viewDidLoad { - - [super viewDidLoad]; - self.title = @"二维码扫描"; - - [NSObject haveCameraAccess:^(BOOL isAuth) { - if (!isAuth) return; - - UIBarButtonItem *albumItem = [[UIBarButtonItem alloc] initWithTitle:@"相册" style:(UIBarButtonItemStylePlain) target:self action:@selector(clickAlbumItem)]; - self.navigationItem.rightBarButtonItem = albumItem; - - CGFloat scanWidth = 220; - self.scanFrame = CGRectMake((self.view.bounds.size.width - scanWidth) / 2, (self.view.bounds.size.height - scanWidth) / 2, scanWidth, scanWidth); - self.lineView = [[UIView alloc] init]; - self.lineView.frame = CGRectMake(self.scanFrame.origin.x + 10, self.scanFrame.origin.y, self.scanFrame.size.width - 10 *2, 2); - self.lineView.backgroundColor = [UIColor colorWithRed:.2 green:.8 blue:.2 alpha:1]; - [self.view addSubview:self.lineView]; - self.lineView.hidden = YES; - - UILabel *alertLabel = [[UILabel alloc] init]; - alertLabel.font = [UIFont systemFontOfSize:12]; - alertLabel.text = @"将二维码放入框内,即可自动扫描"; - alertLabel.textColor = [UIColor whiteColor]; - alertLabel.textAlignment = NSTextAlignmentCenter; - - [self.view addSubview:alertLabel]; - [alertLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerX.equalTo(self.view); - make.top.equalTo(self.scanFrame.origin.y + self.scanFrame.size.height + 5); - }]; - - [self setCropRect:self.scanFrame]; - - [self setupSession]; - [self start]; - }]; -} - -- (void)setCropRect:(CGRect)cropRect{ - - CAShapeLayer *cropLayer = [[CAShapeLayer alloc] init]; - CGMutablePathRef path = CGPathCreateMutable(); - CGPathAddRect(path, nil, cropRect); - CGPathAddRect(path, nil, self.view.bounds); - - [cropLayer setFillRule:kCAFillRuleEvenOdd]; - [cropLayer setPath:path]; - [cropLayer setFillColor:[UIColor blackColor].CGColor]; - [cropLayer setOpacity:0.5]; - - [self.view.layer addSublayer:cropLayer]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (BOOL)hidesBottomBarWhenPushed { - return YES; -} - --(void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [self start]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(start) object:nil]; - [self stop]; -} - -- (void)start { - if (self.session && ![self.session isRunning]) { - [self.session startRunning]; - [self animateLine]; - } -} - -- (void)stop { - [self.session stopRunning]; - [self.lineView.layer removeAllAnimations]; - self.lineView.hidden = YES; -} - -- (void)animateLine { - - if (![self.session isRunning]) return; - - self.lineView.hidden = NO; - [self.lineView.layer removeAllAnimations]; - - CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; - CGPoint fromPoint = CGPointMake(self.scanFrame.origin.x + self.scanFrame.size.width / 2, self.scanFrame.origin.y); - CGPoint toPoint = CGPointMake(self.scanFrame.origin.x + self.scanFrame.size.width / 2, self.scanFrame.origin.y + self.scanFrame.size.height); - animation.fromValue = [NSValue valueWithCGPoint:fromPoint]; - animation.toValue = [NSValue valueWithCGPoint:toPoint]; - animation.duration = 2; - animation.beginTime = 0; - animation.delegate = self; - - [self.lineView.layer addAnimation:animation forKey:@"down"]; -} - -- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { - if (flag) { - [self animateLine]; - } -} - -- (void)setupSession -{ - BOOL result = NO; - - do { - NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; - for (AVCaptureDevice *device in devices) { - if (AVCaptureDevicePositionBack == [device position]) { - self.device = device; - break; - } - } - - if (!self.device) break; - - self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; - - self.output = [[AVCaptureMetadataOutput alloc]init]; - [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; - - [self.output setRectOfInterest:CGRectMake(self.scanFrame.origin.y / self.view.bounds.size.height, self.scanFrame.origin.x / self.view.bounds.size.width, self.scanFrame.size.height / self.view.bounds.size.height, self.scanFrame.size.width / self.view.bounds.size.width)]; - - self.session = [[AVCaptureSession alloc]init]; - [self.session setSessionPreset:AVCaptureSessionPresetHigh]; - if ([self.session canAddInput:self.input]) { - [self.session addInput:self.input]; - } else { - break; - } - - if ([self.session canAddOutput:self.output]) { - [self.session addOutput:self.output]; - } else { - break; - } - [self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; - - self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session]; - self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; - self.previewLayer.frame = self.view.bounds; - [self.view.layer insertSublayer:self.previewLayer atIndex:0]; - - result = YES; - } while (0); - - if (!result) { - [self.view showTip:@"打开摄像头失败"]; - } -} - -- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { - if ([metadataObjects count] >0) { - //停止扫描 - [self stop]; - - AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects firstObject]; - NSString * stringValue = metadataObject.stringValue; - NSLog(@"识别二维码结果: %@", stringValue); - if ([stringValue isURL]) { - [self.navigationController popViewControllerAnimated:YES]; - [self.delegate codeViewController:self scanResult:stringValue]; - } else { - [self.view showTip:@"扫描失败,重新扫描"]; - [self performSelector:@selector(start) withObject:nil afterDelay:2]; - } - } -} - - -- (void)clickAlbumItem { - - [NSObject haveAlbumAccess:^(BOOL isAuth) { - if (!isAuth) return; - - UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; - imagePicker.editing = NO; - imagePicker.delegate = self; - - [self presentViewController:imagePicker animated:YES completion:nil]; - }]; -} - - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - - [self dismissViewControllerAnimated:YES completion:nil]; - - UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; - NSString * stringValue = [self stringFromImageQRCode:image]; - if (0 == stringValue.length) { - [self.view showTip:@"没有识别到任何信息"]; - return; - } - if ([stringValue isURL]) { - [self.navigationController popViewControllerAnimated:YES]; - [self.delegate codeViewController:self scanResult:stringValue]; - } else { - [self.view showTip:[NSString stringWithFormat:@"识别结果:%@", stringValue]]; - } -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -- (NSString *)stringFromImageQRCode:(UIImage *)image { - - if (!image) return nil; - - CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode - context:[CIContext contextWithOptions:nil] - options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}]; - CIImage *ciImage = [image CIImage]; - if (!ciImage) { - ciImage = [CIImage imageWithCGImage:image.CGImage]; - } - NSArray * resultArray = [detector featuresInImage:ciImage]; - if (resultArray.count) { - CIFeature *feature = resultArray[0]; - CIQRCodeFeature *qrFeature = (CIQRCodeFeature *)feature; - NSString *result = qrFeature.messageString; - NSLog(@"识别照片结果: %@", result); - return result; - } - return nil; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/Info.plist b/Example/new/NiuPlayer/NiuPlayer/Info.plist deleted file mode 100644 index ec684d9..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/Info.plist +++ /dev/null @@ -1,62 +0,0 @@ - - - - - CFBundleDevelopmentRegion - zh_CN - CFBundleDisplayName - 牛播放器 - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 3 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSCameraUsageDescription - 使用相机扫描二维码获取视频播放地址 - NSMicrophoneUsageDescription - 访问麦克风 - NSPhotoLibraryAddUsageDescription - 保存播放器的截图 - NSPhotoLibraryUsageDescription - 保存截图和识别保存在相册中含有二维码的图片 - UIBackgroundModes - - audio - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.h b/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.h deleted file mode 100644 index 72cb61f..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// PLLiveTableViewCell.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLLiveTableViewCell : UITableViewCell - -@property (nonatomic, strong) PLMediaInfo *media; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.m b/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.m deleted file mode 100644 index 355661b..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveTableViewCell.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// PLLiveTableViewCell.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/9. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLLiveTableViewCell.h" - -@interface PLLiveTableViewCell () - -@property (nonatomic, strong) UIImageView *headerImageView; - -@property (nonatomic, strong) UILabel *nameLabel; -@property (nonatomic, strong) UILabel *detailDescLabel; - -@property (nonatomic, strong) UIImageView *thumbImageView; -@end - - -@implementation PLLiveTableViewCell - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - - self.headerImageView = [[UIImageView alloc] init]; - self.headerImageView.layer.cornerRadius = 20; - self.headerImageView.contentMode = UIViewContentModeScaleAspectFill; - self.headerImageView.clipsToBounds = YES; - - self.nameLabel = [[UILabel alloc] init]; - self.nameLabel.textColor = [UIColor colorWithWhite:.66 alpha:1]; - self.nameLabel.font = [UIFont systemFontOfSize:12]; - self.nameLabel.numberOfLines = 0; - self.nameLabel.text = self.media.endUser; - - self.detailDescLabel = [[UILabel alloc] init]; - self.detailDescLabel.textColor = [UIColor blackColor]; - self.detailDescLabel.font = [UIFont systemFontOfSize:12]; - self.detailDescLabel.numberOfLines = 0; - self.detailDescLabel.text = self.media.endUser; - - self.thumbImageView = [[UIImageView alloc] init]; - self.thumbImageView.contentMode = UIViewContentModeScaleAspectFill; - self.thumbImageView.clipsToBounds = YES; - - UIView *superView = self.contentView; - - [superView addSubview:self.headerImageView]; - [superView addSubview:self.nameLabel]; - [superView addSubview:self.thumbImageView]; - [superView addSubview:self.detailDescLabel]; - - [self.thumbImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.equalTo(superView); - make.height.equalTo(self.thumbImageView.mas_width).multipliedBy(1); - }]; - - [self.headerImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(self.thumbImageView.mas_bottom).offset(5); - make.left.equalTo(superView).offset(10); - make.bottom.equalTo(superView).offset(-10); - make.size.equalTo(CGSizeMake(40, 40)); - }]; - - [self.detailDescLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.headerImageView.mas_right).offset(10); - make.bottom.equalTo(self.headerImageView.mas_centerY); - make.right.equalTo(superView).offset(-10); - }]; - - [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self.detailDescLabel); - make.top.equalTo(self.headerImageView.mas_centerY).offset(2); - }]; - - - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setMedia:(PLMediaInfo *)media { - _media = media; - - self.headerImageView.image = [UIImage imageNamed:media.headerImg]; - self.detailDescLabel.text = media.detailDesc; - self.nameLabel.text = media.name; - [self.thumbImageView sd_setImageWithURL:[NSURL URLWithString:media.thumbURL]]; -} -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.h b/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.h deleted file mode 100644 index 625b077..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PLLiveViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLBaseViewController.h" - -@interface PLLiveViewController : PLBaseViewController - -- (void)onUIApplication:(BOOL)active; -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.m b/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.m deleted file mode 100644 index 3af48f3..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LiveVideo/PLLiveViewController.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// PLLiveViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLLiveViewController.h" -#import "PLLiveTableViewCell.h" - -@interface PLLiveViewController () -< -UITableViewDelegate, -UITableViewDataSource, -PLCodeViewControllerDelegate -> - -@property (nonatomic, strong) UITableView *tableView; - -@property (nonatomic, strong) NSArray *mediaArray; - -@property (nonatomic, strong) UILabel *alertLabel; - -@end - -@implementation PLLiveViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.title = @"直播"; - - self.mediaArray = [[NSMutableArray alloc] init]; - - self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:(UITableViewStyleGrouped)]; - self.tableView.delegate = self; - self.tableView.dataSource = self; - self.tableView.separatorColor = [UIColor clearColor]; - self.tableView.backgroundColor = [UIColor clearColor]; - - [self.view addSubview:self.tableView]; - - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.view); - }]; - - UIBarButtonItem *scanItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"scan"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)] style:(UIBarButtonItemStylePlain) target:self action:@selector(clickScanItem)]; - self.navigationItem.leftBarButtonItem = scanItem; - - UIBarButtonItem *urlItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"url"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)] style:(UIBarButtonItemStylePlain) target:self action:@selector(clickURLItem)]; - self.navigationItem.rightBarButtonItem = urlItem; - - [self reloadPlayList]; - - self.reloadButton.hidden = YES; - self.alertLabel = [[UILabel alloc] init]; - self.alertLabel.font = [UIFont systemFontOfSize:12]; - self.alertLabel.textColor = [UIColor grayColor]; - self.alertLabel.textAlignment = NSTextAlignmentCenter; - self.alertLabel.numberOfLines = 0; - self.alertLabel.text = @"暂无直播列表,您可以点击左上角的按钮扫描二维码观看直播、或者点击右上角手动输入直播地址播放"; - [self.view addSubview:self.alertLabel]; - [self.alertLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - make.width.equalTo(self.view).offset(-50); - }]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - - -- (void)clickScanItem { - PLQRCodeViewController *scanController = [[PLQRCodeViewController alloc] init]; - scanController.delegate = self; - [self.navigationController pushViewController:scanController animated:YES]; -} - -- (void)clickURLItem { - - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"输入URL播放" message:nil preferredStyle:(UIAlertControllerStyleAlert)]; - [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { - textField.placeholder = @"输入URL"; - }]; - - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { - NSString *urlString = [alert.textFields firstObject].text; - if ([urlString isURL]) { - PLPlayViewController *playController = [[PLPlayViewController alloc] init]; - playController.url = [NSURL URLWithString:urlString]; - [self presentViewController:playController animated:YES completion:nil]; - } else { - if (urlString.length) { - [self.view showTip:[NSString stringWithFormat:@"%@ 不是一个合法的 URL", urlString]]; - } - } - }]; - - [alert addAction:cancelAction]; - [alert addAction:sureAction]; - [self presentViewController:alert animated:YES completion:nil]; -} - -- (void)clickReloadButton { - [self hideReloadButton]; - [self reloadPlayList]; -} - -- (void)reloadPlayList { - - __weak typeof(self) wself = self; - - [self.view showLoadingHUD]; - [PLHttpSession requestLiveMediaList:^(NSArray *list, NSError *error) { - [wself.view hideLoadingHUD]; - wself.mediaArray = list; - [wself.tableView reloadData]; - - if (0 == wself.mediaArray.count && error) { - [wself.view showTip:[NSString stringWithFormat:@"%@", error.description]]; - } - }]; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - if (self.mediaArray.count) { - self.alertLabel.hidden = YES; - return 1; - } else { - self.alertLabel.hidden = NO; - return 0; - } -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.mediaArray.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *cellID = @"longCell"; - - PLLiveTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; - if (!cell) { - cell = [[PLLiveTableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellID]; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - cell.backgroundColor = [UIColor whiteColor]; - } - if (indexPath.row < self.mediaArray.count) { - cell.media = [self.mediaArray objectAtIndex:indexPath.row]; - } - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { - return 44; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return UITableViewAutomaticDimension; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - return .1; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - return .1; -} - -- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - return nil; -} - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - return nil; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - PLMediaInfo *media = [self.mediaArray objectAtIndex:indexPath.row]; - PLPlayViewController *playController = [[PLPlayViewController alloc] init]; - playController.url = [NSURL URLWithString:media.videoURL]; - playController.thumbImageURL = [NSURL URLWithString:media.thumbURL]; - [self presentViewController:playController animated:YES completion:nil]; -} - -- (void)codeViewController:(PLQRCodeViewController *)codeController scanResult:(NSString *)result { - if (!result) return; - - PLPlayViewController *playController = [[PLPlayViewController alloc] init]; - playController.url = [NSURL URLWithString:result]; - [self presentViewController:playController animated:YES completion:nil]; - -} - - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.h b/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.h deleted file mode 100644 index b89e1cd..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// PLLongMediaTableViewCell.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - - -@class PLLongMediaTableViewCell; -@protocol PLLongMediaTableViewCellDelegate - -- (void)tableViewWillPlay:(PLLongMediaTableViewCell *)cell; - -- (void)tableViewCellEnterFullScreen:(PLLongMediaTableViewCell *)cell; - -- (void)tableViewCellExitFullScreen:(PLLongMediaTableViewCell *)cell; - -@end - -@interface PLLongMediaTableViewCell : UITableViewCell - -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong) PLMediaInfo *media; - -- (void)play; - -- (void)stop; - -- (void)configureVideo:(BOOL)enableRender; - - -+ (CGFloat)headerViewHeight; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.m b/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.m deleted file mode 100644 index 6ee8b51..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongMediaTableViewCell.m +++ /dev/null @@ -1,189 +0,0 @@ -// -// PLLongMediaTableViewCell.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLLongMediaTableViewCell.h" -#import "PLPlayerView.h" - - -@interface PLLongMediaTableViewCell () -< -PLPlayerViewDelegate -> - -@property (nonatomic, strong) UIImageView *headerImageView; -@property (nonatomic, strong) UILabel *nameLabel; -@property (nonatomic, strong) UILabel *detailDescLabel; - -@property (nonatomic, assign) BOOL isNeedReset; -@property (nonatomic, strong) PLPlayerView *playerView; - -@property (nonatomic, strong) UIView *playerBgView; - -@end - -@implementation PLLongMediaTableViewCell - -+ (CGFloat)headerViewHeight { - return 60; -} - -- (void)dealloc { - [self stop]; -} - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - - self.isNeedReset = YES; - - self.headerImageView = [[UIImageView alloc] init]; - self.headerImageView.layer.cornerRadius = 20; - self.headerImageView.contentMode = UIViewContentModeScaleAspectFill; - self.headerImageView.clipsToBounds = YES; - - self.nameLabel = [[UILabel alloc] init]; - self.nameLabel.textColor = [UIColor colorWithWhite:.66 alpha:1]; - self.nameLabel.font = [UIFont systemFontOfSize:12]; - self.nameLabel.numberOfLines = 0; - self.nameLabel.text = self.media.endUser; - - self.detailDescLabel = [[UILabel alloc] init]; - self.detailDescLabel.textColor = [UIColor blackColor]; - self.detailDescLabel.font = [UIFont systemFontOfSize:12]; - self.detailDescLabel.numberOfLines = 0; - self.detailDescLabel.text = self.media.endUser; - - self.playerBgView = [[UIView alloc] init]; - - self.playerView = [[PLPlayerView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200)]; - self.playerView.delegate = self; - - UIView *superView = self.contentView; - - [superView addSubview:self.headerImageView]; - [superView addSubview:self.nameLabel]; - [superView addSubview:self.playerBgView]; - [superView addSubview:self.detailDescLabel]; - [self.playerBgView addSubview:self.playerView]; - - - NSInteger height = [UIScreen mainScreen].bounds.size.width * (9.0 / 16.0 ); - [self.playerBgView mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.top.equalTo(superView); -// make.height.equalTo(self.playerBgView.mas_width).multipliedBy(9.0/16.0); - make.height.equalTo(height); - }]; - - [self.headerImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(self.playerBgView.mas_bottom).offset(5); - make.left.equalTo(superView).offset(10); - make.bottom.equalTo(superView).offset(-10); - make.size.equalTo(CGSizeMake(40, 40)); - }]; - - [self.detailDescLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.equalTo(self.headerImageView.mas_right).offset(10); - make.bottom.equalTo(self.headerImageView.mas_centerY); - make.right.equalTo(superView).offset(-10); - }]; - - [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { - make.left.right.equalTo(self.detailDescLabel); - make.top.equalTo(self.headerImageView.mas_centerY).offset(2); - }]; - - [self.playerView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.playerBgView); - }]; - } - return self; -} - -- (void)awakeFromNib { - [super awakeFromNib]; - // Initialization code -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -- (void)setMedia:(PLMediaInfo *)media { - _media = media; - - self.headerImageView.image = [UIImage imageNamed:media.headerImg]; - self.detailDescLabel.text = media.detailDesc; - self.nameLabel.text = media.name; - self.playerView.media = media; -} - -- (void)prepareForReuse { - [self stop]; - [super prepareForReuse]; -} - -- (void)play { - [self.playerView play]; -} - -- (void)stop { - [self.playerView stop]; -} - -- (void)configureVideo:(BOOL)enableRender { - [self.playerView configureVideo:enableRender]; -} - -- (void)playerViewEnterFullScreen:(PLPlayerView *)playerView { - - UIView *superView = [UIApplication sharedApplication].delegate.window.rootViewController.view; - [self.playerView removeFromSuperview]; - [superView addSubview:self.playerView]; - [self.playerView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.width.equalTo(superView.mas_height); - make.height.equalTo(superView.mas_width); - make.center.equalTo(superView); - }]; - - [superView setNeedsUpdateConstraints]; - [superView updateConstraintsIfNeeded]; - - [UIView animateWithDuration:.3 animations:^{ - [superView layoutIfNeeded]; - }]; - - [self.delegate tableViewCellEnterFullScreen:self]; -} - -- (void)playerViewExitFullScreen:(PLPlayerView *)playerView { - - [self.playerView removeFromSuperview]; - [self.playerBgView addSubview:self.playerView]; - - [self.playerView mas_remakeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.playerBgView); - }]; - - [self setNeedsUpdateConstraints]; - [self updateConstraintsIfNeeded]; - - [UIView animateWithDuration:.3 animations:^{ - [self layoutIfNeeded]; - }]; - - [self.delegate tableViewCellExitFullScreen:self]; -} - -- (void)playerViewWillPlay:(PLPlayerView *)playerView { - [self.delegate tableViewWillPlay:self]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.h b/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.h deleted file mode 100644 index 8704862..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// PLLongVideoViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLBaseViewController.h" - -@interface PLLongVideoViewController : PLBaseViewController - -- (void)onUIApplication:(BOOL)active; -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.m b/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.m deleted file mode 100644 index 350b262..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/LongVideo/PLLongVideoViewController.m +++ /dev/null @@ -1,278 +0,0 @@ -// -// PLLongVideoViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLLongVideoViewController.h" -#import "PLLongMediaTableViewCell.h" - -@interface PLLongVideoViewController () -< -UITableViewDelegate, -UITableViewDataSource, -PLLongMediaTableViewCellDelegate, -PLCodeViewControllerDelegate -> - -@property (nonatomic, strong) UITableView *tableView; - -@property (nonatomic, strong) NSArray *mediaArray; - -@property (nonatomic, weak) PLLongMediaTableViewCell *playingCell; - -@property (nonatomic, assign) BOOL isFullScreen; - -@end - -@implementation PLLongVideoViewController - -- (void)onUIApplication:(BOOL)active { - if (self.playingCell) { - [self.playingCell configureVideo:active]; - } -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.title = @"长视频"; - - self.mediaArray = [[NSMutableArray alloc] init]; - - self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:(UITableViewStyleGrouped)]; - self.tableView.delegate = self; - self.tableView.dataSource = self; - self.tableView.separatorColor = [UIColor clearColor]; - self.tableView.backgroundColor = [UIColor clearColor]; - - [self.view addSubview:self.tableView]; - - [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.equalTo(self.view); - }]; - - UIBarButtonItem *scanItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"scan"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)] style:(UIBarButtonItemStylePlain) target:self action:@selector(clickScanItem)]; - self.navigationItem.leftBarButtonItem = scanItem; - - UIBarButtonItem *urlItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"url"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)] style:(UIBarButtonItemStylePlain) target:self action:@selector(clickURLItem)]; - self.navigationItem.rightBarButtonItem = urlItem; - - [self reloadPlayList]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [self stop]; -} - -- (BOOL)prefersStatusBarHidden { - return self.isFullScreen; -} - -- (void)clickScanItem { - PLQRCodeViewController *scanController = [[PLQRCodeViewController alloc] init]; - scanController.delegate = self; - [self.navigationController pushViewController:scanController animated:YES]; -} - -- (void)clickURLItem { - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"输入URL播放" message:nil preferredStyle:(UIAlertControllerStyleAlert)]; - [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { - textField.placeholder = @"输入URL"; - }]; - - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { - NSString *urlString = [alert.textFields firstObject].text; - if ([urlString isURL]) { - PLPlayViewController *playController = [[PLPlayViewController alloc] init]; - playController.url = [NSURL URLWithString:urlString]; - [self presentViewController:playController animated:YES completion:nil]; - } else { - if (urlString.length) { - [self.view showTip:[NSString stringWithFormat:@"%@ 不是一个合法的 URL", urlString]]; - } - } - }]; - [alert addAction:cancelAction]; - [alert addAction:sureAction]; - [self presentViewController:alert animated:YES completion:nil]; -} - -- (void)clickReloadButton { - [self hideReloadButton]; - [self reloadPlayList]; -} - -- (void)reloadPlayList { - - [self.view showLoadingHUD]; - __weak typeof(self) wself = self; - [PLHttpSession requestLongMediaList:^(NSArray *list, NSError *error) { - [wself.view hideLoadingHUD]; - - wself.mediaArray = list; - - [wself.tableView reloadData]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [wself playTopCell]; - }); - - if (0 == wself.mediaArray.count && error) { - [wself.view showTip:[NSString stringWithFormat:@"%@", error.description]]; - } - }]; -} - -- (void)stop { - - NSArray *array = [self.tableView visibleCells]; - - for (PLLongMediaTableViewCell *cell in array) { - [cell stop]; - } -} - -// 根据cell的位置,决定播放哪个cell -- (void)playTopCell { - - if (self.playingCell) return; - - NSArray *array = [self.tableView visibleCells]; - - PLLongMediaTableViewCell *playCell = nil; - CGFloat minOriginY = self.view.bounds.size.height; - CGFloat navigationBarHeight = 20 + self.navigationController.navigationBar.bounds.size.height; - for (PLLongMediaTableViewCell *cell in array) { - CGRect rc = [self.tableView convertRect:cell.frame toView:self.view]; - rc.size.height -= [PLLongMediaTableViewCell headerViewHeight]; - if (rc.origin.y > navigationBarHeight && rc.origin.y + rc.size.height < self.view.bounds.size.height) { - if (rc.origin.y < minOriginY) { - minOriginY = rc.origin.y; - playCell = cell; - } - break; - } - } - - self.playingCell = playCell; - [playCell play]; -} - -- (void)tableViewWillPlay:(PLLongMediaTableViewCell *)cell { - if (cell == self.playingCell) return; - - NSArray *array = [self.tableView visibleCells]; - for (PLLongMediaTableViewCell *tempCell in array) { - if (cell != tempCell) { - [tempCell stop]; - } - } - self.playingCell = cell; -} - -- (void)tableViewCellEnterFullScreen:(PLLongMediaTableViewCell *)cell { - self.isFullScreen = YES; - [self setNeedsStatusBarAppearanceUpdate]; -} - -- (void)tableViewCellExitFullScreen:(PLLongMediaTableViewCell *)cell { - self.isFullScreen = NO; - [self setNeedsStatusBarAppearanceUpdate]; -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - - if (decelerate) return; - if (nil == self.playingCell) { - [self playTopCell]; - } -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - if (nil == self.playingCell) { - [self playTopCell]; - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - if (self.mediaArray.count) { - [self hideReloadButton]; - return 1; - } else { - [self showReloadButton]; - return 0; - } -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.mediaArray.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *cellID = @"longCell"; - - PLLongMediaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; - if (!cell) { - cell = [[PLLongMediaTableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellID]; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - cell.delegate = self; - cell.backgroundColor = [UIColor whiteColor]; - } - if (indexPath.row < self.mediaArray.count) { - cell.media = [self.mediaArray objectAtIndex:indexPath.row]; - } - return cell; -} - -- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { - if (cell == self.playingCell) { - [self.playingCell stop]; - self.playingCell = nil; - } -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { - return 44; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - return UITableViewAutomaticDimension; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - return .1; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - return .1; -} - -- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - return nil; -} - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - return nil; -} - -- (void)codeViewController:(PLQRCodeViewController *)codeController scanResult:(NSString *)result { - if (!result) return; - - PLPlayViewController *playController = [[PLPlayViewController alloc] init]; - playController.url = [NSURL URLWithString:result]; - [self presentViewController:playController animated:YES completion:nil]; - -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/NiuPlayer.pch b/Example/new/NiuPlayer/NiuPlayer/NiuPlayer.pch deleted file mode 100644 index 70c173f..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/NiuPlayer.pch +++ /dev/null @@ -1,42 +0,0 @@ -// -// NiuPlayer.pch -// NiuPlayer -// -// Created by hxiongan on 2018/3/2. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#ifndef NiuPlayer_pch -#define NiuPlayer_pch - -// Include any system framework and library headers here that should be included in all compilation units. -// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. - -#define MAS_SHORTHAND_GLOBALS - -//third -#import -#import -#import -#import - -// category -#import "UIView+Alert.h" -#import "UIButton+Animate.h" -#import "NSString+URLCheck.h" -#import "NSDate+Covert.h" -#import "NSObject+Auth.h" - -// common -#import "MacroDefine.h" -#import "PLHttpSession.h" -#import "PLMediaInfo.h" - -#import -#import "PLQRCodeViewController.h" -#import "PLPlayViewController.h" - -#define PLPLAYER_URL_DOMAIN @"https://api-demo.qnsdk.com" -#define PLPLAYER_ENTERPRISE_BUNDLEID @"com.qbox.niuplayer" - -#endif /* NiuPlayer_pch */ diff --git a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.h b/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.h deleted file mode 100644 index cc53e88..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// PLAgreementViewController.h -// NiuPlayer -// -// Created by 冯文秀 on 2018/4/8. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLAgreementViewController : UIViewController -@property (weak, nonatomic) IBOutlet UIButton *finshButton; -@property (weak, nonatomic) IBOutlet UIWebView *userDelegateDataWeb; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.m b/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.m deleted file mode 100644 index 4bd3927..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// PLAgreementViewController.m -// NiuPlayer -// -// Created by 冯文秀 on 2018/4/8. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLAgreementViewController.h" - -@interface PLAgreementViewController () - -@end - -@implementation PLAgreementViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. - self.title = @"用户协议"; - NSString * filePath = [[NSBundle mainBundle] pathForResource:@"user_agreement" ofType:@"html"]; - NSURL * url = [NSURL fileURLWithPath:filePath]; - NSURLRequest * urlRequest = [NSURLRequest requestWithURL:url]; - [self.userDelegateDataWeb loadRequest:urlRequest]; -} -- (IBAction)finshAction:(id)sender { - [self dismissViewControllerAnimated:YES completion:^{ - }]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.xib b/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.xib deleted file mode 100644 index b651810..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLAgreementViewController.xib +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.h b/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.h deleted file mode 100644 index 3bf1d9d..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// PLBaseViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLBaseViewController : UIViewController - -@property (nonatomic, readonly, strong) UIButton *reloadButton; - -- (void)showReloadButton; - -- (void)hideReloadButton; - -- (void)clickReloadButton; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.m b/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.m deleted file mode 100644 index 3dc5fae..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLBaseViewController.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// PLBaseViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLBaseViewController.h" - -@interface PLBaseViewController () -{ - UIButton *_reloadButton; -} - -@end - -@implementation PLBaseViewController - -- (void)dealloc { - printf("\n [dealloc] %s, %p\n\n", [NSStringFromClass(self.class) UTF8String], self); -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor whiteColor]; - - _reloadButton = [[UIButton alloc] init]; - [self.reloadButton setTitle:@"重新加载" forState:(UIControlStateNormal)]; - [self.view addSubview:self.reloadButton]; - self.reloadButton.layer.cornerRadius = 4; - self.reloadButton.layer.borderWidth = 1; - self.reloadButton.layer.borderColor = [UIColor colorWithWhite:.6 alpha:1].CGColor; - [self.reloadButton setTitleColor:[UIColor colorWithWhite:.6 alpha:1] forState:(UIControlStateNormal)]; - [self.reloadButton setTitleColor:[UIColor colorWithWhite:.3 alpha:1] forState:(UIControlStateHighlighted)]; - self.reloadButton.titleLabel.font = [UIFont systemFontOfSize:14]; - [self.reloadButton addTarget:self action:@selector(clickReloadButton) forControlEvents:(UIControlEventTouchUpInside)]; - - [self.reloadButton sizeToFit]; - - [self.reloadButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.center.equalTo(self.view); - make.size.equalTo(CGSizeMake(120, 30)); - }]; - - self.reloadButton.hidden = YES; - - // Do any additional setup after loading the view. -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)showReloadButton { - [self.view bringSubviewToFront:self.reloadButton]; - self.reloadButton.hidden = NO; -} - -- (void)hideReloadButton { - self.reloadButton.hidden = YES; -} - -- (void)clickReloadButton { - -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.h b/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.h deleted file mode 100644 index 076a304..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PLNavigationViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLNavigationViewController : UINavigationController - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.m b/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.m deleted file mode 100644 index e563624..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLNavigationViewController.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// PLNavigationViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/7. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLNavigationViewController.h" - -@interface PLNavigationViewController () - -@end - -@implementation PLNavigationViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (UIViewController *)childViewControllerForStatusBarHidden { - return self.topViewController; -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.h b/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.h deleted file mode 100644 index dd9ee3d..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PLRootTabBarViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import - -@interface PLRootTabBarViewController : UITabBarController - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.m b/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.m deleted file mode 100644 index 3b41a6b..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/PLRootTabBarViewController.m +++ /dev/null @@ -1,223 +0,0 @@ -// -// PLRootTabBarViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLRootTabBarViewController.h" -#import "PLShortVideoViewController.h" -#import "PLLongVideoViewController.h" -#import "PLNavigationViewController.h" -#import "PLLiveViewController.h" - -#import "PLAgreementViewController.h" -#import "PLAlertUserAgreeView.h" - -@interface PLRootTabBarViewController () -< -UITabBarControllerDelegate -> -{ - CGRect _itemTitleFrames[5]; -} - -@property (nonatomic, strong) UIView *indexLine; -@property (nonatomic, strong) PLAlertUserAgreeView *alertUserAgreeView; - -@end - -@implementation PLRootTabBarViewController - -- (void)viewWillAppear:(BOOL)animated { - if (![[NSUserDefaults standardUserDefaults]boolForKey:@"PLNiuPlayerEnabled"]) { - [self showNiuPlayerUserAgreement]; - [_alertUserAgreeView showAlertAgreeView]; - } -} - -- (void)viewDidDisappear:(BOOL)animated { - [_alertUserAgreeView hideAlertAgreeView]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - - PLShortVideoViewController *shortController = [[PLShortVideoViewController alloc] initWithTransitionStyle:(UIPageViewControllerTransitionStyleScroll) navigationOrientation:(UIPageViewControllerNavigationOrientationVertical) options:@{UIPageViewControllerOptionInterPageSpacingKey:@(0)}]; - UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"短视频" image:nil tag:1]; - shortController.tabBarItem = item; - - PLLongVideoViewController *longController = [[PLLongVideoViewController alloc] init]; - UINavigationController *longNavigationController = [[PLNavigationViewController alloc] initWithRootViewController:longController]; - item = [[UITabBarItem alloc] initWithTitle:@"长视频" image:nil tag:2]; - longNavigationController.tabBarItem = item; - [longNavigationController.navigationBar setShadowImage:[[UIImage alloc] init]]; - - PLLiveViewController *liveController = [[PLLiveViewController alloc] init]; - UINavigationController *liveNavigationController = [[PLNavigationViewController alloc] initWithRootViewController:liveController]; - item = [[UITabBarItem alloc] initWithTitle:@"直播" image:nil tag:3]; - liveNavigationController.tabBarItem = item; - [liveNavigationController.navigationBar setShadowImage:[[UIImage alloc] init]]; - - self.viewControllers = @[shortController, longNavigationController, liveNavigationController]; - - [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:16], NSFontAttributeName, [UIColor whiteColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal]; - [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:16], NSFontAttributeName, [UIColor whiteColor], NSForegroundColorAttributeName, nil] forState:UIControlStateSelected]; - - [[UITabBarItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, -12)]; - - UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipeHandle:)]; - leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; -// [self.view addGestureRecognizer:leftSwipe]; - - UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)]; - rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; -// [self.view addGestureRecognizer:rightSwipe]; - - UIImage * image = [UIImage imageNamed:@"mask-3"]; - [self.tabBar setBackgroundImage:image]; - [self.tabBar setShadowImage:[[UIImage alloc] init]]; - - self.indexLine = [[UIView alloc] init]; - self.indexLine.layer.cornerRadius = 1.5; - self.indexLine.backgroundColor = [UIColor whiteColor]; - [self.tabBar addSubview:self.indexLine]; - - self.delegate = self; - -} - - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - --(void)debugLogSubView:(UIView*)view{ - - NSLog(@"superView = %@,name = %@, frame = %@, tag = %ld", NSStringFromClass([view.superview class]), NSStringFromClass([view class]), NSStringFromCGRect(view.frame), (long)view.tag); - if (view.subviews.count > 0) { - for (UIView* subView in view.subviews) { - [self debugLogSubView:subView]; - } - } -} - -- (void)setIndexLineWithIndex:(NSInteger)index { - - // 计算每个 Item 的 title 的 frame, 为了保证准确性,每次都计算一次 - NSMutableArray *labelArray = [[NSMutableArray alloc] init]; - for (UIView *subView in self.tabBar.subviews) { - if ([NSStringFromClass(subView.class) isEqualToString:@"UITabBarButton"]) { - for (UIView * subsubView in subView.subviews) { - if ([NSStringFromClass(subsubView.class) isEqualToString:@"UITabBarButtonLabel"]) { - [labelArray addObject:subsubView]; - } - } - } - } - - for (int i = 0; i < labelArray.count && i < ARRAY_SIZE(_itemTitleFrames); i ++) { - CGRect rc = [labelArray[i] convertRect:labelArray[i].bounds toView:self.tabBar]; - _itemTitleFrames[i] = rc; - } - bubbleSort(_itemTitleFrames, labelArray.count); - - CGRect rc = _itemTitleFrames[index]; - rc.origin.y = rc.origin.y + rc.size.height + 5; - rc.size.height = 3; - [UIView animateWithDuration:.3 animations:^{ - self.indexLine.frame = rc; - }]; -} - -- (void)viewDidLayoutSubviews { - - [super viewDidLayoutSubviews]; - - if (self.tabBar.bounds.size.height > 49) { - [self.tabBar setBackgroundImage:[UIImage imageNamed:@"mask-2"]]; - } - [self setIndexLineWithIndex:self.selectedIndex]; -} - -- (BOOL)shouldAutorotate { - return YES; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - return UIInterfaceOrientationMaskPortrait; -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - return UIInterfaceOrientationPortrait; -} - -- (void)leftSwipeHandle:(UISwipeGestureRecognizer *)swipe { - if (self.selectedIndex < self.viewControllers.count - 1) { - self.selectedIndex ++; - } - NSLog(@"leftSwipeHandle++"); -} - -- (void)rightSwipeHandle:(UISwipeGestureRecognizer *)swipe { - if (self.selectedIndex > 0) { - self.selectedIndex --; - } - NSLog(@"rightSwipeHandle--"); -} - -- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { - if (![[NSUserDefaults standardUserDefaults]boolForKey:@"PLNiuPlayerEnabled"]) { - if (!_alertUserAgreeView.isShow) { - [self.alertUserAgreeView showAlertAgreeView]; - } - return NO; - } else{ - NSInteger index = [self.viewControllers indexOfObject:viewController]; - [self setIndexLineWithIndex:index]; - return YES; - } -} - - -void bubbleSort(CGRect *rcArray, NSInteger n){ - for(int i = 0 ; i < n-1; i ++) { - for(int j = 0; j < n - i - 1; j ++) { - if(rcArray[j].origin.x > rcArray[j + 1].origin.x) { - CGRect tmp = rcArray[j]; - rcArray[j] = rcArray[j + 1]; - rcArray[j+1] = tmp; - } - } - } -} - -- (void)showNiuPlayerUserAgreement { - self.alertUserAgreeView = [[PLAlertUserAgreeView alloc]initWithFrame:self.view.frame superView:self.view]; - [_alertUserAgreeView.agreementButton addTarget:self action:@selector(jumpUserAgreement:) forControlEvents:UIControlEventTouchUpInside]; - [_alertUserAgreeView.refuseButton addTarget:self action:@selector(refuseAgreement:) forControlEvents:UIControlEventTouchUpInside]; - [_alertUserAgreeView.agreeButton addTarget:self action:@selector(agreeUserAgreement:) forControlEvents:UIControlEventTouchUpInside]; -} - -- (void)jumpUserAgreement:(UIButton *)jump { - PLAgreementViewController *agreementViewController = [[PLAgreementViewController alloc] init]; - [self presentViewController:agreementViewController animated:YES completion:nil]; -} - -- (void)refuseAgreement:(UIButton *)refuse { - [_alertUserAgreeView hideAlertAgreeView]; - [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PLNiuPlayerEnabled"]; -} - -- (void)agreeUserAgreement:(UIButton *)agree { - [_alertUserAgreeView hideAlertAgreeView]; - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PLNiuPlayerEnabled"]; - self.selectedIndex = 0; - PLShortVideoViewController *shortVideoViewController = (PLShortVideoViewController *)[self.viewControllers objectAtIndex:0]; - [shortVideoViewController reloadController]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.h b/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.h deleted file mode 100644 index f548fc9..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PLShortPlayerViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLPlayViewController.h" - -@interface PLShortPlayerViewController : PLPlayViewController -< -PLPlayerDelegate -> - -@property (nonatomic, strong) PLMediaInfo *media; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.m b/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.m deleted file mode 100644 index ad674d1..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortPlayerViewController.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// PLShortPlayerViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLShortPlayerViewController.h" - -@interface PLShortPlayerViewController () - - -@property (nonatomic, strong) UIImageView *navbarView; -@property (nonatomic, strong) UIImageView *headerImageView; -@property (nonatomic, strong) UILabel *descLabel; -@property (nonatomic, strong) UILabel *nameLabel; - -@end - -@implementation PLShortPlayerViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.closeButton removeFromSuperview]; - - [self.thumbImageView sd_setImageWithURL:[NSURL URLWithString:self.media.thumbURL]]; - - self.enableGesture = NO; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -- (void)setMedia:(PLMediaInfo *)media { - _media = media; - self.url = [NSURL URLWithString:media.videoURL]; - self.thumbImageURL = [NSURL URLWithString:media.thumbURL]; -} - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.h b/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.h deleted file mode 100644 index 59a61f4..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// PLShortVideoViewController.h -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import -@interface PLShortVideoViewController : UIPageViewController -< -UIPageViewControllerDelegate, -UIPageViewControllerDataSource -> - -- (void)reloadController; -- (void)onUIApplication:(BOOL)active; - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.m b/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.m deleted file mode 100644 index 16ae8d1..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/ShortVideo/PLShortVideoViewController.m +++ /dev/null @@ -1,146 +0,0 @@ -// -// PLShortVideoViewController.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/1. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import "PLShortVideoViewController.h" -#import "PLShortPlayerViewController.h" -#import "UIAlertView+BlocksKit.h" - -#import "PLAgreementViewController.h" -#import "PLAlertUserAgreeView.h" - -@interface PLShortVideoViewController () - -@property (nonatomic, strong) NSArray *mediaArray; -@property (nonatomic, assign) NSInteger index; -@property (nonatomic, strong) PLBaseViewController *emptyController; -@property (nonatomic, strong) PLShortPlayerViewController *shortPlayerVC; -@end - -@implementation PLShortVideoViewController - -- (void)onUIApplication:(BOOL)active { - if (self.shortPlayerVC) { - self.shortPlayerVC.player.enableRender = active; - } -} - -- (void)viewDidLoad { - - [super viewDidLoad]; - - self.mediaArray = [[NSMutableArray alloc] init]; - - for (UIView *subView in self.view.subviews ) { - if ([subView isKindOfClass:[UIScrollView class]]) { - UIScrollView* scrollView = (UIScrollView*)subView; - scrollView.delaysContentTouches = NO; - } - } - self.delegate = self; - self.dataSource = self; - - self.emptyController = [[PLBaseViewController alloc] init]; - - [self getPlayList]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; -} - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -- (void)clickReloadButton { - [self.emptyController hideReloadButton]; - [self getPlayList]; -} - -- (void)getPlayList { - __weak typeof(self) wself = self; - [self.view showLoadingHUD]; - [PLHttpSession requestShortMediaList:^(NSArray *list, NSError *error) { - [wself.view hideLoadingHUD]; - - self.mediaArray = list; - - if ([[NSUserDefaults standardUserDefaults]boolForKey:@"PLNiuPlayerEnabled"]) { - [wself reloadController]; - } - - if (0 == wself.mediaArray.count && error) { - [wself.view showTip:[NSString stringWithFormat:@"%@", error.description]]; - } - }]; -} - -- (void)reloadController { - - if (self.mediaArray.count) { - PLShortPlayerViewController* playerController = [[PLShortPlayerViewController alloc] init]; - if (self.index < self.mediaArray.count) { - playerController.media = [self.mediaArray objectAtIndex:self.index]; - } else { - playerController.media = [self.mediaArray firstObject]; - self.index = 0; - } - - self.shortPlayerVC = playerController; - [self setViewControllers:@[playerController] direction:(UIPageViewControllerNavigationDirectionForward) animated:NO completion:^(BOOL finished) { - }]; - } else { - __weak typeof(self) wself = self; - [self setViewControllers:@[self.emptyController] direction:(UIPageViewControllerNavigationDirectionForward) animated:NO completion:^(BOOL finished) { - [wself.emptyController.reloadButton addTarget:wself action:@selector(clickReloadButton) forControlEvents:(UIControlEventTouchUpInside)]; - wself.emptyController.reloadButton.hidden = NO; - }]; - } -} - -- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{ - - if (![viewController isKindOfClass:[PLShortPlayerViewController class]]) return nil; - - NSInteger index = [self.mediaArray indexOfObject:[(PLShortPlayerViewController*)viewController media]]; - if (NSNotFound == index) return nil; - - index --; - if (index < 0) return nil; - - PLShortPlayerViewController* playerController = [[PLShortPlayerViewController alloc] init]; - playerController.media = [self.mediaArray objectAtIndex:index]; - self.index = index; - - return playerController; -} - -- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{ - - if (![viewController isKindOfClass:[PLShortPlayerViewController class]]) return nil; - - NSInteger index = [self.mediaArray indexOfObject:[(PLShortPlayerViewController*)viewController media]]; - if (NSNotFound == index) return nil; - - index ++; - - if (self.mediaArray.count > index) { - PLShortPlayerViewController* playerController = [[PLShortPlayerViewController alloc] init]; - playerController.media = [self.mediaArray objectAtIndex:index]; - self.index = index; - return playerController; - } - return nil; -} - -- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ - -} - - -@end diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/0.jpg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/0.jpg deleted file mode 100644 index 01a3ae9..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/0.jpg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/1.jpg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/1.jpg deleted file mode 100644 index a6b6517..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/1.jpg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/2.jpeg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/2.jpeg deleted file mode 100644 index 82174fe..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/2.jpeg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/3.jpg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/3.jpg deleted file mode 100644 index c6f6ad6..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/3.jpg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/4.jpg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/4.jpg deleted file mode 100644 index 5ec5dff..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/4.jpg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/5.jpeg b/Example/new/NiuPlayer/NiuPlayer/defaultHeader/5.jpeg deleted file mode 100644 index 62d4e0c..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/defaultHeader/5.jpeg and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/hks.png b/Example/new/NiuPlayer/NiuPlayer/hks.png deleted file mode 100644 index da2dc65..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/hks.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/launchImage.png b/Example/new/NiuPlayer/NiuPlayer/launchImage.png deleted file mode 100644 index 352e99d..0000000 Binary files a/Example/new/NiuPlayer/NiuPlayer/launchImage.png and /dev/null differ diff --git a/Example/new/NiuPlayer/NiuPlayer/main.m b/Example/new/NiuPlayer/NiuPlayer/main.m deleted file mode 100644 index e948011..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/main.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// main.m -// NiuPlayer -// -// Created by hxiongan on 2018/3/2. -// Copyright © 2018年 hxiongan. All rights reserved. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/Example/new/NiuPlayer/NiuPlayer/user_agreement.html b/Example/new/NiuPlayer/NiuPlayer/user_agreement.html deleted file mode 100644 index 1dee33d..0000000 --- a/Example/new/NiuPlayer/NiuPlayer/user_agreement.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -用户声明 - - -

- 用户协议 -

-

- 尊敬的用户,请您仔细阅读以下条款,如果您对本协议的条款存在异议,您可以选择不使用牛播放器。使用则表示您同意本协议下的全部条款。 -

-

- 遵守法律及法律效力 -

-

- 会员同意遵守《中华人民共和国保密法》、《计算机信息系统国际联网保密管理规定》、《中华人民共和国计算机信息系统安全保护条例》、《计算机信息网络国际联网安全保护管理办法》、《中华人民共和国计算机信息网络国际联网管理暂行规定》及其实施办法等相关法律法规的任何及所有的规定,并对会员以任何方式使用服务的任何行为及其结果承担全部责任。 -

-

- 用户说明 -

-

- 用户不得利用本服务制作、上载、复制、发布、传播如下法律、法规和政策禁止的内容: -

-
    -
  1. -

    - 反对宪法所确定的基本原则的; -

    -
  2. -
  3. -

    - 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; -

    -
  4. -
  5. -

    - 损害国家荣誉和利益的; -

    -
  6. -
  7. -

    - 煽动民族仇恨、民族歧视,破坏民族团结的; -

    -
  8. -
  9. -

    - 破坏国家宗教政策,宣扬邪教和封建迷信的; -

    -
  10. -
  11. -

    - 散布谣言,扰乱社会秩序,破坏社会稳定的; -

    -
  12. -
  13. -

    - 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; -

    -
  14. -
  15. -

    - 侮辱或者诽谤他人,侵害他人合法权益的; -

    -
  16. -
  17. -

    - 不遵守法律法规底线、社会主义制度底线、国家利益底线、公民合法权益底线、社会公共秩序底线、道德风尚底线和信息真实性底线的“七条底线”要求的; -

    -
  18. -
  19. -

    - 含有法律、行政法规禁止的其他内容的信息。 -

    -
  20. -
-

- 如果用户出现以上情况一种或几种,将承担关闭全部权限,禁止使用的后果。 -

- -

- 内容版权声明 -

-

-用户所有上传内容均需为原创内容,不得上传任何侵犯其他视频作者版权的内容,七牛播放器产品运营方将承担内容审核和过滤,由版权侵犯引发的纠纷与 App Store 无关。 -

- - - - diff --git a/Example/new/Podfile b/Example/new/Podfile index 7fcd197..6e2afaf 100644 --- a/Example/new/Podfile +++ b/Example/new/Podfile @@ -7,6 +7,7 @@ target 'NiuPlayer' do # Pods for NiuPlayer pod "PLPlayerKit", :path => "../../" + pod 'HappyDNS', '>= 0.3.10' pod 'Fabric', '>= 1.6.7' pod 'Crashlytics', '>= 3.7.2' pod 'BlocksKit', '>= 2.2.5' diff --git a/Example/new/Podfile.lock b/Example/new/Podfile.lock index 1e62050..b9869e3 100644 --- a/Example/new/Podfile.lock +++ b/Example/new/Podfile.lock @@ -14,19 +14,20 @@ PODS: - BlocksKit/UIKit (2.2.5): - BlocksKit/Core - BlocksKit/DynamicDelegate - - Bugsnag (5.17.3) - - Crashlytics (3.12.0): - - Fabric (~> 1.9.0) - - Fabric (1.9.0) - - JGProgressHUD (2.0.3) - - Masonry (1.1.0) + - Bugsnag (5.15.4) + - Crashlytics (3.7.2): + - Fabric (~> 1.6.3) + - Fabric (1.6.7) + - HappyDNS (0.3.10) + - JGProgressHUD (2.0) + - Masonry (1.0.1) - MMMaterialDesignSpinner (0.2.5) - - PLPlayerKit (3.4.6): - - PLPlayerKit/iphoneos (= 3.4.6) - - PLPlayerKit/iphoneos (3.4.6) - - SDWebImage (4.4.5): - - SDWebImage/Core (= 4.4.5) - - SDWebImage/Core (4.4.5) + - PLPlayerKit (3.4.7): + - PLPlayerKit/iphoneos (= 3.4.7) + - PLPlayerKit/iphoneos (3.4.7) + - SDWebImage (4.3.2): + - SDWebImage/Core (= 4.3.2) + - SDWebImage/Core (4.3.2) - WeiboSDK (3.1.3) DEPENDENCIES: @@ -34,6 +35,7 @@ DEPENDENCIES: - Bugsnag - Crashlytics (>= 3.7.2) - Fabric (>= 1.6.7) + - HappyDNS (>= 0.3.10) - JGProgressHUD - Masonry - Masonry (>= 1.0.1) @@ -43,11 +45,12 @@ DEPENDENCIES: - WeiboSDK (>= 3.1.3) SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + trunk: - BlocksKit - Bugsnag - Crashlytics - Fabric + - HappyDNS - JGProgressHUD - Masonry - MMMaterialDesignSpinner @@ -60,16 +63,17 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: BlocksKit: 7f422b971407001178d181a43b99014ea2591fe6 - Bugsnag: a56a5204ebd35e44e56c1f703824705b1d4b5b97 - Crashlytics: a33af323773f73904037dc2e684cd2f0d29f4fe2 - Fabric: 09ef2d9b99b104702bede1acaf469fb8f20a9146 - JGProgressHUD: 12b20a8f4ffe05258f8635c1ab92816e451f904d - Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 + Bugsnag: df1d395695ddf795aa35c23ef4eaef4a04ddcffd + Crashlytics: 2580a9a091e265da4a7a89d2c442aa1c0ea4712c + Fabric: 30e7baf1bb775e776e2e5975a630c173022d7611 + HappyDNS: 06a9fed2796663fd87626dbf02552933265bf059 + JGProgressHUD: c402c0f41fc291ca7e33bba2f999118d9682dd9c + Masonry: a1a931a0d08870ed8ae415a2ea5ea68ebcac77df MMMaterialDesignSpinner: a548042720c2e5f04212048483085d7942ac3e81 - PLPlayerKit: 25795e0605b6ba1c19afb2e913e36ad6bca3bc98 - SDWebImage: ecc03494e973b93b80213649d32175f8d2d17d4d + PLPlayerKit: a4c6da506dc4ae368ae71a95b49e2256f33c0de7 + SDWebImage: 29bd3c0bc1f01e5eb59720847c64ad4c4ca1af5d WeiboSDK: acb067053668102cf07d01aa7604350162c2e466 -PODFILE CHECKSUM: b8e4d3011adae7250551d6868e265422bdfbe1c0 +PODFILE CHECKSUM: 125580bee4fbaff98cc481a161fc9d6987859318 COCOAPODS: 1.10.1 diff --git a/Example/new/Pods/Bugsnag/README.md b/Example/new/Pods/Bugsnag/README.md index df8e8e4..6ebdfef 100644 --- a/Example/new/Pods/Bugsnag/README.md +++ b/Example/new/Pods/Bugsnag/README.md @@ -1,7 +1,7 @@ # Bugsnag exception reporter for iOS and macOS [![iOS Documentation](https://img.shields.io/badge/ios_documentation-latest-blue.svg)](http://docs.bugsnag.com/platforms/ios/) -[![macOS Documentation](https://img.shields.io/badge/macos_documentation-latest-blue.svg)](http://docs.bugsnag.com/platforms/macos/) -[![Build status](https://travis-ci.com/bugsnag/bugsnag-cocoa.svg?branch=master)](https://travis-ci.com/bugsnag/bugsnag-cocoa) +[![macOS Documentation](https://img.shields.io/badge/macos_documentation-latest-blue.svg)](http://docs.bugsnag.com/platforms/osx/) +[![Build status](https://travis-ci.org/bugsnag/bugsnag-cocoa.svg?branch=master)](https://travis-ci.org/bugsnag/bugsnag-cocoa) The Bugsnag crash reporter for Cocoa library automatically detects crashes and fatal signals in your iOS 8.0+, macOS 10.8+ and tvOS applications, collecting diagnostic information and immediately notifying your development team, helping you to understand and resolve issues as fast as possible. Learn more about [iOS crash reporting with Bugsnag](https://www.bugsnag.com/platforms/ios-crash-reporting/). diff --git a/Example/new/Pods/Bugsnag/Source/BSG_KSCrashReportWriter.h b/Example/new/Pods/Bugsnag/Source/BSG_KSCrashReportWriter.h index 908a145..dcc2256 100644 --- a/Example/new/Pods/Bugsnag/Source/BSG_KSCrashReportWriter.h +++ b/Example/new/Pods/Bugsnag/Source/BSG_KSCrashReportWriter.h @@ -215,9 +215,6 @@ typedef struct BSG_KSCrashReportWriter { typedef void (*BSG_KSReportWriteCallback)( const BSG_KSCrashReportWriter *writer); -typedef void (*BSGReportCallback)( - const BSG_KSCrashReportWriter *writer, int type); - #ifdef __cplusplus } #endif diff --git a/Example/new/Pods/Bugsnag/Source/Bugsnag.m b/Example/new/Pods/Bugsnag/Source/Bugsnag.m index f28394c..22692ea 100644 --- a/Example/new/Pods/Bugsnag/Source/Bugsnag.m +++ b/Example/new/Pods/Bugsnag/Source/Bugsnag.m @@ -51,13 +51,9 @@ + (void)startBugsnagWithApiKey:(NSString *)apiKey { + (void)startBugsnagWithConfiguration:(BugsnagConfiguration *)configuration { @synchronized(self) { - if ([configuration hasValidApiKey]) { - bsg_g_bugsnag_notifier = - [[BugsnagNotifier alloc] initWithConfiguration:configuration]; - [bsg_g_bugsnag_notifier start]; - } else { - bsg_log_err(@"Bugsnag not initialized - a valid API key must be supplied."); - } + bsg_g_bugsnag_notifier = + [[BugsnagNotifier alloc] initWithConfiguration:configuration]; + [bsg_g_bugsnag_notifier start]; } } @@ -77,87 +73,75 @@ + (BugsnagNotifier *)notifier { } + (void)notify:(NSException *)exception { - if ([self bugsnagStarted]) { - [self.notifier notifyException:exception - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - }]; - } + [self.notifier notifyException:exception + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + }]; } + (void)notify:(NSException *)exception block:(BugsnagNotifyBlock)block { - if ([self bugsnagStarted]) { - [[self notifier] notifyException:exception - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - - if (block) { - block(report); - } - }]; - } + [[self notifier] notifyException:exception + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + + if (block) { + block(report); + } + }]; } + (void)notifyError:(NSError *)error { - if ([self bugsnagStarted]) { - [self.notifier notifyError:error - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - }]; - } + [self.notifier notifyError:error + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + }]; } + (void)notifyError:(NSError *)error block:(BugsnagNotifyBlock)block { - if ([self bugsnagStarted]) { - [[self notifier] notifyError:error - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - - if (block) { - block(report); - } - }]; - } + [[self notifier] notifyError:error + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + + if (block) { + block(report); + } + }]; } + (void)notify:(NSException *)exception withData:(NSDictionary *)metaData { - if ([self bugsnagStarted]) { - [[self notifier] - notifyException:exception - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - report.metaData = [metaData - BSG_mergedInto:[self.notifier.configuration - .metaData toDictionary]]; - }]; - } + + [[self notifier] + notifyException:exception + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + report.metaData = [metaData + BSG_mergedInto:[self.notifier.configuration + .metaData toDictionary]]; + }]; } + (void)notify:(NSException *)exception withData:(NSDictionary *)metaData atSeverity:(NSString *)severity { - if ([self bugsnagStarted]) { - [[self notifier] - notifyException:exception - atSeverity:BSGParseSeverity(severity) - block:^(BugsnagCrashReport *_Nonnull report) { - report.depth += 2; - report.metaData = [metaData - BSG_mergedInto:[self.notifier.configuration - .metaData toDictionary]]; - report.severity = BSGParseSeverity(severity); - }]; - } + + [[self notifier] + notifyException:exception + atSeverity:BSGParseSeverity(severity) + block:^(BugsnagCrashReport *_Nonnull report) { + report.depth += 2; + report.metaData = [metaData + BSG_mergedInto:[self.notifier.configuration + .metaData toDictionary]]; + report.severity = BSGParseSeverity(severity); + }]; } + (void)internalClientNotify:(NSException *_Nonnull)exception withData:(NSDictionary *_Nullable)metaData block:(BugsnagNotifyBlock _Nullable)block { - if ([self bugsnagStarted]) { - [self.notifier internalClientNotify:exception - withData:metaData - block:block]; - } + [self.notifier internalClientNotify:exception + withData:metaData + block:block]; } + (void)addAttribute:(NSString *)attributeName @@ -177,7 +161,7 @@ + (void)clearTabWithName:(NSString *)tabName { } + (BOOL)bugsnagStarted { - if (!self.notifier.started) { + if (self.notifier == nil) { bsg_log_err(@"Ensure you have started Bugsnag with startWithApiKey: " @"before calling any other Bugsnag functions."); @@ -187,43 +171,31 @@ + (BOOL)bugsnagStarted { } + (void)leaveBreadcrumbWithMessage:(NSString *)message { - if ([self bugsnagStarted]) { - [self leaveBreadcrumbWithBlock:^(BugsnagBreadcrumb *_Nonnull crumbs) { - crumbs.metadata = @{BSGKeyMessage: message}; - }]; - } + [self leaveBreadcrumbWithBlock:^(BugsnagBreadcrumb *_Nonnull crumbs) { + crumbs.metadata = @{BSGKeyMessage : message}; + }]; } + (void)leaveBreadcrumbWithBlock: (void (^_Nonnull)(BugsnagBreadcrumb *_Nonnull))block { - if ([self bugsnagStarted]) { - [self.notifier addBreadcrumbWithBlock:block]; - } + [self.notifier addBreadcrumbWithBlock:block]; } + (void)leaveBreadcrumbForNotificationName: (NSString *_Nonnull)notificationName { - if ([self bugsnagStarted]) { - [self.notifier crumbleNotification:notificationName]; - } + [self.notifier crumbleNotification:notificationName]; } + (void)setBreadcrumbCapacity:(NSUInteger)capacity { - if ([self bugsnagStarted]) { - self.notifier.configuration.breadcrumbs.capacity = capacity; - } + self.notifier.configuration.breadcrumbs.capacity = capacity; } + (void)clearBreadcrumbs { - if ([self bugsnagStarted]) { - [self.notifier clearBreadcrumbs]; - } + [self.notifier clearBreadcrumbs]; } + (void)startSession { - if ([self bugsnagStarted]) { - [self.notifier startSession]; - } + [self.notifier startSession]; } + (NSDateFormatter *)payloadDateFormatter { @@ -237,31 +209,23 @@ + (NSDateFormatter *)payloadDateFormatter { } + (void)setSuspendThreadsForUserReported:(BOOL)suspendThreadsForUserReported { - if ([self bugsnagStarted]) { - [[BSG_KSCrash sharedInstance] - setSuspendThreadsForUserReported:suspendThreadsForUserReported]; - } + [[BSG_KSCrash sharedInstance] + setSuspendThreadsForUserReported:suspendThreadsForUserReported]; } + (void)setReportWhenDebuggerIsAttached:(BOOL)reportWhenDebuggerIsAttached { - if ([self bugsnagStarted]) { - [[BSG_KSCrash sharedInstance] - setReportWhenDebuggerIsAttached:reportWhenDebuggerIsAttached]; - } + [[BSG_KSCrash sharedInstance] + setReportWhenDebuggerIsAttached:reportWhenDebuggerIsAttached]; } + (void)setThreadTracingEnabled:(BOOL)threadTracingEnabled { - if ([self bugsnagStarted]) { - [[BSG_KSCrash sharedInstance] setThreadTracingEnabled:threadTracingEnabled]; - } + [[BSG_KSCrash sharedInstance] setThreadTracingEnabled:threadTracingEnabled]; } + (void)setWriteBinaryImagesForUserReported: (BOOL)writeBinaryImagesForUserReported { - if ([self bugsnagStarted]) { - [[BSG_KSCrash sharedInstance] - setWriteBinaryImagesForUserReported:writeBinaryImagesForUserReported]; - } + [[BSG_KSCrash sharedInstance] + setWriteBinaryImagesForUserReported:writeBinaryImagesForUserReported]; } @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagApiClient.m b/Example/new/Pods/Bugsnag/Source/BugsnagApiClient.m index 8550286..b337ed5 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagApiClient.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagApiClient.m @@ -59,7 +59,7 @@ - (void)sendData:(id)data NSError *error = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload - options:0 + options:NSJSONWritingPrettyPrinted error:&error]; if (jsonData == nil) { @@ -135,10 +135,6 @@ - (NSMutableURLRequest *)prepareRequest:(NSURL *)url return request; } -- (void)dealloc { - [self.sendQueue cancelAllOperations]; -} - @end @implementation BSGDelayOperation diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.h b/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.h index 935040c..095281c 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.h @@ -42,10 +42,7 @@ typedef void (^BugsnagNotifyBlock)(BugsnagCrashReport *_Nonnull report); /** - * A handler for modifying data before sending it to Bugsnag. - * - * beforeSendBlocks will be invoked on a dedicated - * background queue, which will be different from the queue where the block was originally added. + * A handler for modifying data before sending it to Bugsnag * * @param rawEventData The raw event data written at crash time. This * includes data added in onCrashHandler. @@ -73,6 +70,10 @@ typedef NSDictionary *_Nullable (^BugsnagBeforeNotifyHook)( * The API key of a Bugsnag project */ @property(readwrite, retain, nullable) NSString *apiKey; +/** + * The URL used to notify Bugsnag + */ +@property(readwrite, retain, nullable) NSURL *notifyURL; /** * The release stage of the application, such as production, development, beta * et cetera @@ -99,7 +100,7 @@ typedef NSDictionary *_Nullable (^BugsnagBeforeNotifyHook)( /** * The current user */ -@property(retain, nullable) BugsnagUser *currentUser; +@property(nullable) BugsnagUser *currentUser; /** * Additional information about the state of the app or environment at the @@ -131,54 +132,21 @@ BugsnagBreadcrumbs *breadcrumbs; */ @property void (*_Nullable onCrashHandler) (const BSG_KSCrashReportWriter *_Nonnull writer); - /** * YES if uncaught exceptions should be reported automatically */ @property BOOL autoNotify; /** - * Determines whether app sessions should be tracked automatically. By default this value is true. - * If this value is updated after +[Bugsnag start] is called, only subsequent automatic sessions - * will be captured. + * Determines whether app sessions should be tracked automatically. By default this value is false. */ @property BOOL shouldAutoCaptureSessions; /** - * Retrieves the endpoint used to notify Bugsnag of errors - * - * NOTE: If you want to set this value, you should do so via setEndpointsForNotify:sessions: instead. - * - * @see setEndpointsForNotify:sessions: - */ -@property(readonly, retain, nullable) NSURL *notifyURL; - -/** - * Retrieves the endpoint used to send tracked sessions to Bugsnag - * - * NOTE: If you want to set this value, you should do so via setEndpointsForNotify:sessions: instead. - * - * @see setEndpointsForNotify:sessions: - */ -@property(readonly, retain, nullable) NSURL *sessionURL; - -/** - * Set the endpoints to send data to. By default we'll send error reports to - * https://notify.bugsnag.com, and sessions to https://sessions.bugsnag.com, but you can - * override this if you are using Bugsnag Enterprise to point to your own Bugsnag endpoint. - * - * Please note that it is recommended that you set both endpoints. If the notify endpoint is - * missing, an assertion will be thrown. If the session endpoint is missing, a warning will be - * logged and sessions will not be sent automatically. - * - * @param notify the notify endpoint - * @param sessions the sessions endpoint - * - * @throws an assertion if the notify endpoint is not a valid URL + * Set the endpoint to which tracked sessions reports are sent. This defaults to https://sessions.bugsnag.com, + * but should be overridden if you are using Bugsnag On-premise, to point to your own Bugsnag endpoint. */ - -- (void)setEndpointsForNotify:(NSString *_Nonnull)notify - sessions:(NSString *_Nonnull)sessions NS_SWIFT_NAME(setEndpoints(notify:sessions:)); +@property(readwrite, retain, nullable) NSURL *sessionURL; /** * Set user metadata @@ -222,9 +190,7 @@ BugsnagBreadcrumbs *breadcrumbs; - (NSDictionary *_Nonnull)errorApiHeaders; - (NSDictionary *_Nonnull)sessionApiHeaders; -@property(retain, nullable) NSString *codeBundleId; -@property(retain, nullable) NSString *notifierType; - -- (BOOL)hasValidApiKey; +@property(nullable) NSString *codeBundleId; +@property(nullable) NSString *notifierType; @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.m b/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.m index e56f908..1e78ac7 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagConfiguration.m @@ -31,7 +31,6 @@ #import "BSG_RFC3339DateTool.h" #import "BugsnagUser.h" #import "BugsnagSessionTracker.h" -#import "BugsnagLogger.h" static NSString *const kHeaderApiPayloadVersion = @"Bugsnag-Payload-Version"; static NSString *const kHeaderApiKey = @"Bugsnag-Api-Key"; @@ -65,8 +64,6 @@ - (id)init { _notifyReleaseStages = nil; _breadcrumbs = [BugsnagBreadcrumbs new]; _automaticallyCollectBreadcrumbs = YES; - _shouldAutoCaptureSessions = YES; - if ([NSURLSession class]) { _session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration @@ -89,7 +86,7 @@ - (BOOL)shouldSendReports { - (void)setUser:(NSString *)userId withName:(NSString *)userName andEmail:(NSString *)userEmail { - + self.currentUser = [[BugsnagUser alloc] initWithUserId:userId name:userName emailAddress:userEmail]; [self.metaData addAttribute:BSGKeyId withValue:userId toTabWithName:BSGKeyUser]; @@ -202,19 +199,20 @@ - (void)setAppVersion:(NSString *)newVersion { } } -@synthesize apiKey = _apiKey; +@synthesize shouldAutoCaptureSessions = _shouldAutoCaptureSessions; -- (NSString *)apiKey { - return _apiKey; +- (BOOL)shouldAutoCaptureSessions { + return _shouldAutoCaptureSessions; } -- (void)setApiKey:(NSString *)apiKey { - if ([apiKey length] > 0) { - [self willChangeValueForKey:NSStringFromSelector(@selector(apiKey))]; - _apiKey = apiKey; - [self didChangeValueForKey:NSStringFromSelector(@selector(apiKey))]; - } else { - bsg_log_err(@"Attempted to override non-null API key with nil - ignoring."); +- (void)setShouldAutoCaptureSessions:(BOOL)shouldAutoCaptureSessions { + @synchronized (self) { + _shouldAutoCaptureSessions = shouldAutoCaptureSessions; + + if (shouldAutoCaptureSessions) { // track any existing sessions + BugsnagSessionTracker *sessionTracker = [Bugsnag notifier].sessionTracker; + [sessionTracker onAutoCaptureEnabled]; + } } } @@ -233,25 +231,4 @@ - (NSDictionary *)sessionApiHeaders { kHeaderApiSentAt: [BSG_RFC3339DateTool stringFromDate:[NSDate new]] }; } - -- (void)setEndpointsForNotify:(NSString *_Nonnull)notify sessions:(NSString *_Nonnull)sessions { - _notifyURL = [NSURL URLWithString:notify]; - _sessionURL = [NSURL URLWithString:sessions]; - - NSAssert([self isValidUrl:_notifyURL], @"Invalid URL supplied for notify endpoint"); - - if (![self isValidUrl:_sessionURL]) { - _sessionURL = nil; - } -} - -- (BOOL)isValidUrl:(NSURL *)url { - return url != nil && url.scheme != nil && url.host != nil; -} - - -- (BOOL)hasValidApiKey { - return [_apiKey length] > 0; -} - @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagCrashReport.m b/Example/new/Pods/Bugsnag/Source/BugsnagCrashReport.m index 00eb367..42e313a 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagCrashReport.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagCrashReport.m @@ -235,6 +235,10 @@ - (instancetype)initWithKSReport:(NSDictionary *)report { } _binaryImages = report[@"binary_images"]; _breadcrumbs = BSGParseBreadcrumbs(report); + _severity = BSGParseSeverity( + [report valueForKeyPath:@"user.state.crash.severity"]); + _depth = [[report valueForKeyPath:@"user.state.crash.depth"] + unsignedIntegerValue]; _dsymUUID = [report valueForKeyPath:@"system.app_uuid"]; _deviceAppHash = [report valueForKeyPath:@"system.device_app_hash"]; _metaData = @@ -242,8 +246,8 @@ - (instancetype)initWithKSReport:(NSDictionary *)report { _context = BSGParseContext(report, _metaData); _deviceState = BSGParseDeviceState(report); _device = BSGParseDevice(report); - _app = BSGParseApp(report); - _appState = BSGParseAppState(report[BSGKeySystem], [report valueForKeyPath:@"user.config.appVersion"]); + _app = BSGParseApp(report[BSGKeySystem]); + _appState = BSGParseAppState(report[BSGKeySystem]); _groupingHash = BSGParseGroupingHash(report, _metaData); _overrides = [report valueForKeyPath:@"user.overrides"]; _customException = BSGParseCustomException(report, [_errorClass copy], @@ -255,10 +259,6 @@ - (instancetype)initWithKSReport:(NSDictionary *)report { if (recordedState) { _handledState = [[BugsnagHandledState alloc] initWithDictionary:recordedState]; - - // only makes sense to use serialised value for handled exceptions - _depth = [[report valueForKeyPath:@"user.state.crash.depth"] - unsignedIntegerValue]; } else { // the event was unhandled. BOOL isSignal = [BSGKeySignal isEqualToString:_errorType]; SeverityReasonType severityReason = @@ -267,7 +267,6 @@ - (instancetype)initWithKSReport:(NSDictionary *)report { handledStateWithSeverityReason:severityReason severity:BSGSeverityError attrValue:_errorClass]; - _depth = 0; } _severity = _handledState.currentSeverity; @@ -484,10 +483,7 @@ - (NSDictionary *)toJson { NSMutableDictionary *appObj = [NSMutableDictionary new]; [appObj addEntriesFromDictionary:self.app]; - - for (NSString *key in self.appState) { - BSGDictInsertIfNotNil(appObj, self.appState[key], key); - } + [appObj addEntriesFromDictionary:self.appState]; if (self.dsymUUID) { BSGDictInsertIfNotNil(appObj, @[self.dsymUUID], @"dsymUUIDs"); @@ -553,13 +549,12 @@ - (NSDictionary *)generateSessionDict { // Build all stacktraces for threads and the error - (NSArray *)serializeThreadsWithException:(NSMutableDictionary *)exception { NSMutableArray *bugsnagThreads = [NSMutableArray array]; - - for (NSDictionary *thread in self.threads) { + for (NSDictionary *thread in [self threads]) { NSArray *backtrace = thread[@"backtrace"][@"contents"]; BOOL stackOverflow = [thread[@"stack"][@"overflow"] boolValue]; - BOOL isReportingThread = [thread[@"crashed"] boolValue]; + BOOL isCrashedThread = [thread[@"crashed"] boolValue]; - if (isReportingThread) { + if (isCrashedThread) { NSUInteger seen = 0; NSMutableArray *stacktrace = [NSMutableArray array]; @@ -580,38 +575,29 @@ - (NSArray *)serializeThreadsWithException:(NSMutableDictionary *)exception { BSGFormatFrame(mutableFrame, [self binaryImages])); } } - BSGDictSetSafeObject(exception, stacktrace, BSGKeyStacktrace); - } - [self serialiseThread:bugsnagThreads thread:thread backtrace:backtrace reportingThread:isReportingThread]; - } - return bugsnagThreads; -} -- (void)serialiseThread:(NSMutableArray *)bugsnagThreads - thread:(NSDictionary *)thread - backtrace:(NSArray *)backtrace - reportingThread:(BOOL)isReportingThread { - NSMutableArray *threadStack = [NSMutableArray array]; + BSGDictSetSafeObject(exception, stacktrace, BSGKeyStacktrace); + } else { + NSMutableArray *threadStack = [NSMutableArray array]; - for (NSDictionary *frame in backtrace) { + for (NSDictionary *frame in backtrace) { BSGArrayInsertIfNotNil( threadStack, BSGFormatFrame(frame, [self binaryImages])); } - NSMutableDictionary *threadDict = [NSMutableDictionary dictionary]; - BSGDictSetSafeObject(threadDict, thread[@"index"], BSGKeyId); - BSGDictSetSafeObject(threadDict, threadStack, BSGKeyStacktrace); - BSGDictSetSafeObject(threadDict, DEFAULT_EXCEPTION_TYPE, BSGKeyType); + NSMutableDictionary *threadDict = [NSMutableDictionary dictionary]; + BSGDictSetSafeObject(threadDict, thread[@"index"], BSGKeyId); + BSGDictSetSafeObject(threadDict, threadStack, BSGKeyStacktrace); + BSGDictSetSafeObject(threadDict, DEFAULT_EXCEPTION_TYPE, BSGKeyType); + // only if this is enabled in BSG_KSCrash. + if (thread[BSGKeyName]) { + BSGDictSetSafeObject(threadDict, thread[BSGKeyName], BSGKeyName); + } - // only if this is enabled in BSG_KSCrash. - if (thread[BSGKeyName]) { - BSGDictSetSafeObject(threadDict, thread[BSGKeyName], BSGKeyName); - } - if (isReportingThread) { - BSGDictSetSafeObject(threadDict, @YES, @"errorReportingThread"); + BSGArrayAddSafeObject(bugsnagThreads, threadDict); + } } - - BSGArrayAddSafeObject(bugsnagThreads, threadDict); + return bugsnagThreads; } - (NSString *_Nullable)enhancedErrorMessageForThread:(NSDictionary *_Nullable)thread { @@ -640,16 +626,9 @@ + (instancetype)errorDataFromThreads:(NSArray *)threads { } NSString *contentValue = data[@"value"]; -#pragma clang diagnostic push -#pragma ide diagnostic ignored "OCDFAInspection" - if (contentValue == nil || ![contentValue isKindOfClass:[NSString class]]) { - continue; - } -#pragma clang diagnostic pop - if ([self isReservedWord:contentValue]) { reservedWord = contentValue; - } else if ([[contentValue componentsSeparatedByString:@"/"] count] <= 2) { + } else if (!([[contentValue componentsSeparatedByString:@"/"] count] > 2)) { // must be a string that isn't a reserved word and isn't a filepath [interestingValues addObject:contentValue]; } diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.h b/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.h index 0913fb0..c553888 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.h @@ -16,15 +16,9 @@ - (void)install:(BugsnagConfiguration *)config apiClient:(BugsnagErrorReportApiClient *)apiClient - onCrash:(BSGReportCallback)onCrash; + onCrash:(BSG_KSReportWriteCallback)onCrash; - (void)reportUserException:(NSString *)reportName - reason:(NSString *)reportMessage - handledState:(NSDictionary *)handledState - appState:(NSDictionary *)appState - callbackOverrides:(NSDictionary *)overrides - metadata:(NSDictionary *)metadata - config:(NSDictionary *)config - discardDepth:(int)depth; + reason:(NSString *)reportMessage; @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.m b/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.m index 3a64a17..e7abbc9 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagCrashSentry.m @@ -19,7 +19,7 @@ @implementation BugsnagCrashSentry - (void)install:(BugsnagConfiguration *)config apiClient:(BugsnagErrorReportApiClient *)apiClient - onCrash:(BSGReportCallback)onCrash { + onCrash:(BSG_KSReportWriteCallback)onCrash { BugsnagSink *sink = [[BugsnagSink alloc] initWithApiClient:apiClient]; [BSG_KSCrash sharedInstance].sink = sink; @@ -42,22 +42,13 @@ - (void)install:(BugsnagConfiguration *)config } - (void)reportUserException:(NSString *)reportName - reason:(NSString *)reportMessage - handledState:(NSDictionary *)handledState - appState:(NSDictionary *)appState - callbackOverrides:(NSDictionary *)overrides - metadata:(NSDictionary *)metadata - config:(NSDictionary *)config - discardDepth:(int)depth { + reason:(NSString *)reportMessage { [[BSG_KSCrash sharedInstance] reportUserException:reportName reason:reportMessage - handledState:handledState - appState:appState - callbackOverrides:overrides - metadata:metadata - config:config - discardDepth:depth + language:NULL + lineOfCode:@"" + stackTrace:@[] terminateProgram:NO]; } diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.h b/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.h index 48a1051..d0d96c4 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.h @@ -67,7 +67,8 @@ - (NSMutableDictionary *)readFile:(NSString *)path error:(NSError *__autoreleasing *)error; -+ (NSString *)findReportStorePath:(NSString *)customDirectory; ++ (NSString *)findReportStorePath:(NSString *)customDirectory + bundleName:(NSString *)bundleName; - (NSString *)fileIdFromFilename:(NSString *)filename; @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.m b/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.m index 5fadd7a..475397f 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagFileStore.m @@ -180,9 +180,9 @@ - (void)deleteFileWithId:(NSString *)fileId { } } -+ (NSString *)findReportStorePath:(NSString *)customDirectory { ++ (NSString *)findReportStorePath:(NSString *)customDirectory + bundleName:(NSString *)bundleName { - NSString *bundleName = [[NSBundle mainBundle] infoDictionary][@"CFBundleName"]; NSArray *directories = NSSearchPathForDirectoriesInDomains( NSCachesDirectory, NSUserDomainMask, YES); if ([directories count] == 0) { diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.h b/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.h index 0a22dc6..879c7e7 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.h @@ -10,5 +10,5 @@ NSDictionary *_Nonnull BSGParseDevice(NSDictionary *_Nonnull report); NSDictionary *_Nonnull BSGParseApp(NSDictionary *_Nonnull report); -NSDictionary *_Nonnull BSGParseAppState(NSDictionary *_Nonnull report, NSString *_Nullable preferredVersion); +NSDictionary *_Nonnull BSGParseAppState(NSDictionary *_Nonnull report); NSDictionary *_Nonnull BSGParseDeviceState(NSDictionary *_Nonnull report); diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.m b/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.m index aa04065..839019e 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagKSCrashSysInfoParser.m @@ -16,16 +16,15 @@ #define PLATFORM_WORD_SIZE sizeof(void*)*8 NSDictionary *BSGParseDevice(NSDictionary *report) { - NSMutableDictionary *device = [NSMutableDictionary new]; - NSDictionary *state = [report valueForKeyPath:@"user.state.deviceState"]; - [device addEntriesFromDictionary:state]; - + NSMutableDictionary *device = + [[report valueForKeyPath:@"user.state.deviceState"] mutableCopy]; + [device addEntriesFromDictionary:BSGParseDeviceState(report[@"system"])]; BSGDictSetSafeObject(device, [[NSLocale currentLocale] localeIdentifier], @"locale"); - BSGDictSetSafeObject(device, [report valueForKeyPath:@"system.time_zone"], @"timezone"); + BSGDictSetSafeObject(device, report[@"time_zone"], @"timezone"); BSGDictSetSafeObject(device, [report valueForKeyPath:@"system.memory.usable"], @"totalMemory"); @@ -33,7 +32,6 @@ [report valueForKeyPath:@"system.memory.free"], @"freeMemory"); - BSGDictSetSafeObject(device, [report valueForKeyPath:@"report.timestamp"], @"time"); NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *searchPaths = NSSearchPathForDirectoriesInDomains( @@ -62,11 +60,9 @@ } NSDictionary *BSGParseApp(NSDictionary *report) { - NSDictionary *system = report[BSGKeySystem]; - NSMutableDictionary *appState = [NSMutableDictionary dictionary]; - NSDictionary *stats = system[@"application_stats"]; + NSDictionary *stats = report[@"application_stats"]; NSInteger activeTimeSinceLaunch = [stats[@"active_time_since_launch"] doubleValue] * 1000.0; @@ -76,25 +72,23 @@ BSGDictSetSafeObject(appState, @(activeTimeSinceLaunch), @"durationInForeground"); - BSGDictSetSafeObject(appState, system[BSGKeyExecutableName], BSGKeyName); + BSGDictSetSafeObject(appState, report[BSGKeyExecutableName], BSGKeyName); BSGDictSetSafeObject(appState, @(activeTimeSinceLaunch + backgroundTimeSinceLaunch), @"duration"); BSGDictSetSafeObject(appState, stats[@"application_in_foreground"], @"inForeground"); - BSGDictSetSafeObject(appState, system[@"CFBundleIdentifier"], BSGKeyId); + BSGDictSetSafeObject(appState, report[@"CFBundleIdentifier"], BSGKeyId); return appState; } -NSDictionary *BSGParseAppState(NSDictionary *report, NSString *preferredVersion) { +NSDictionary *BSGParseAppState(NSDictionary *report) { NSMutableDictionary *app = [NSMutableDictionary dictionary]; - NSString *version = preferredVersion ?: report[@"CFBundleShortVersionString"]; - BSGDictSetSafeObject(app, report[@"CFBundleVersion"], @"bundleVersion"); BSGDictSetSafeObject(app, [Bugsnag configuration].releaseStage, BSGKeyReleaseStage); - BSGDictSetSafeObject(app, version, BSGKeyVersion); + BSGDictSetSafeObject(app, report[@"CFBundleShortVersionString"], BSGKeyVersion); BSGDictSetSafeObject(app, [Bugsnag configuration].codeBundleId, @"codeBundleId"); @@ -120,7 +114,6 @@ BSGDictSetSafeObject(deviceState, report[@"machine"], @"model"); BSGDictSetSafeObject(deviceState, report[@"system_name"], @"osName"); BSGDictSetSafeObject(deviceState, report[@"system_version"], @"osVersion"); - BSGDictSetSafeObject(deviceState, report[@"os_version"], @"osBuild"); BSGDictSetSafeObject(deviceState, @(PLATFORM_WORD_SIZE), @"wordSize"); BSGDictSetSafeObject(deviceState, @"Apple", @"manufacturer"); BSGDictSetSafeObject(deviceState, report[@"jailbroken"], @"jailbroken"); diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.h b/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.h index a4a9b61..cdf9a5d 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.h @@ -40,7 +40,6 @@ @property(nonatomic, readwrite, retain) NSLock *_Nonnull metaDataLock; @property(nonatomic) BSGConnectivity *_Nonnull networkReachable; -@property(readonly) BOOL started; - (instancetype _Nonnull)initWithConfiguration: (BugsnagConfiguration *_Nonnull)configuration; diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.m b/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.m index 36bfca0..c44a2ed 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagNotifier.m @@ -32,8 +32,8 @@ #import "BugsnagLogger.h" #import "BugsnagKeys.h" #import "BugsnagSessionTracker.h" +#import "BugsnagSessionTrackingApiClient.h" #import "BSG_RFC3339DateTool.h" -#import "BSG_KSCrashType.h" #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE #import @@ -41,7 +41,7 @@ #import #endif -NSString *const NOTIFIER_VERSION = @"5.17.3"; +NSString *const NOTIFIER_VERSION = @"5.15.4"; NSString *const NOTIFIER_URL = @"https://github.com/bugsnag/bugsnag-cocoa"; NSString *const BSTabCrash = @"crash"; NSString *const BSAttributeDepth = @"depth"; @@ -81,27 +81,40 @@ * * @param writer report writer which will receive updated metadata */ -void BSSerializeDataCrashHandler(const BSG_KSCrashReportWriter *writer, int type) { - BOOL isCrash = BSG_KSCrashTypeUserReported != type; +void BSSerializeDataCrashHandler(const BSG_KSCrashReportWriter *writer) { + if (bsg_g_bugsnag_data.configJSON) { + writer->addJSONElement(writer, "config", bsg_g_bugsnag_data.configJSON); + } + if (bsg_g_bugsnag_data.metaDataJSON) { + writer->addJSONElement(writer, "metaData", + bsg_g_bugsnag_data.metaDataJSON); + } + if (hasRecordedSessions) { // a session is available // persist session info writer->addStringElement(writer, "id", (const char *) sessionId); writer->addStringElement(writer, "startedAt", (const char *) sessionStartDate); writer->addUIntegerElement(writer, "handledCount", handledCount); - writer->addUIntegerElement(writer, "unhandledCount", isCrash ? 1 : 0); - } - if (isCrash) { - if (bsg_g_bugsnag_data.configJSON) { - writer->addJSONElement(writer, "config", bsg_g_bugsnag_data.configJSON); - } - if (bsg_g_bugsnag_data.stateJSON) { - writer->addJSONElement(writer, "state", bsg_g_bugsnag_data.stateJSON); - } - if (bsg_g_bugsnag_data.metaDataJSON) { - writer->addJSONElement(writer, "metaData", bsg_g_bugsnag_data.metaDataJSON); + + if (!bsg_g_bugsnag_data.handledState) { + writer->addUIntegerElement(writer, "unhandledCount", 1); + } else { + writer->addUIntegerElement(writer, "unhandledCount", 0); } } + if (bsg_g_bugsnag_data.handledState) { + writer->addJSONElement(writer, "handledState", + bsg_g_bugsnag_data.handledState); + } + + if (bsg_g_bugsnag_data.stateJSON) { + writer->addJSONElement(writer, "state", bsg_g_bugsnag_data.stateJSON); + } + if (bsg_g_bugsnag_data.userOverridesJSON) { + writer->addJSONElement(writer, "overrides", + bsg_g_bugsnag_data.userOverridesJSON); + } if (bsg_g_bugsnag_data.onCrash) { bsg_g_bugsnag_data.onCrash(writer); } @@ -149,36 +162,12 @@ void BSSerializeJSONDictionary(NSDictionary *dictionary, char **destination) { } } -/** - Save info about the current session to crash data. Ensures that session - data is written to unhandled error reports. - - @param session The current session - */ -void BSGWriteSessionCrashData(BugsnagSession *session) { - if (session == nil) { - return; - } - // copy session id - const char *newSessionId = [session.sessionId UTF8String]; - size_t idSize = strlen(newSessionId); - strncpy((char *)sessionId, newSessionId, idSize); - sessionId[idSize - 1] = NULL; - - const char *newSessionDate = [[BSG_RFC3339DateTool stringFromDate:session.startedAt] UTF8String]; - size_t dateSize = strlen(newSessionDate); - strncpy((char *)sessionStartDate, newSessionDate, dateSize); - sessionStartDate[dateSize - 1] = NULL; - - // record info for C JSON serialiser - handledCount = session.handledCount; - hasRecordedSessions = true; -} - @interface BugsnagNotifier () @property(nonatomic) BugsnagCrashSentry *crashSentry; @property(nonatomic) BugsnagErrorReportApiClient *errorReportApiClient; +@property(nonatomic) BugsnagSessionTrackingApiClient *sessionTrackingApiClient; @property(nonatomic) BugsnagSessionTracker *sessionTracker; +@property(nonatomic) NSTimer *sessionTimer; @end @implementation BugsnagNotifier @@ -202,21 +191,42 @@ - (id)initWithConfiguration:(BugsnagConfiguration *)initConfiguration { self.crashSentry = [BugsnagCrashSentry new]; self.errorReportApiClient = [[BugsnagErrorReportApiClient alloc] initWithConfig:configuration queueName:@"Error API queue"]; - bsg_g_bugsnag_data.onCrash = (void (*)(const BSG_KSCrashReportWriter *))self.configuration.onCrashHandler; - - static dispatch_once_t once_t; - dispatch_once(&once_t, ^{ - [self initializeNotificationNameMap]; - }); + self.sessionTrackingApiClient = [[BugsnagSessionTrackingApiClient alloc] initWithConfig:configuration + queueName:@"Session API queue"]; self.sessionTracker = [[BugsnagSessionTracker alloc] initWithConfig:initConfiguration - postRecordCallback:^(BugsnagSession *session) { - BSGWriteSessionCrashData(session); - }]; + apiClient:self.sessionTrackingApiClient + callback:^(BugsnagSession *session) { + + // copy session id + const char *newSessionId = [session.sessionId UTF8String]; + size_t idSize = strlen(newSessionId); + strncpy((char *)sessionId, newSessionId, idSize); + sessionId[idSize - 1] = NULL; + + const char *newSessionDate = [[BSG_RFC3339DateTool stringFromDate:session.startedAt] UTF8String]; + size_t dateSize = strlen(newSessionDate); + strncpy((char *)sessionStartDate, newSessionDate, dateSize); + sessionStartDate[dateSize - 1] = NULL; + + // record info for C JSON serialiser + handledCount = session.handledCount; + hasRecordedSessions = true; + }]; + + + [self.sessionTracker startNewSession:[NSDate date] withUser:nil autoCaptured:YES]; [self metaDataChanged:self.configuration.metaData]; [self metaDataChanged:self.configuration.config]; [self metaDataChanged:self.state]; + bsg_g_bugsnag_data.onCrash = (void (*)( + const BSG_KSCrashReportWriter *))self.configuration.onCrashHandler; + + static dispatch_once_t once_t; + dispatch_once(&once_t, ^{ + [self initializeNotificationNameMap]; + }); } return self; } @@ -292,15 +302,15 @@ - (void)start { [self.crashSentry install:self.configuration apiClient:self.errorReportApiClient onCrash:&BSSerializeDataCrashHandler]; + [self setupConnectivityListener]; [self updateAutomaticBreadcrumbDetectionSettings]; - + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [self watchLifecycleEvents:center]; #if TARGET_OS_TV [self.details setValue:@"tvOS Bugsnag Notifier" forKey:BSGKeyName]; - [self addTerminationObserver:UIApplicationWillTerminateNotification]; #elif TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE [self.details setValue:@"iOS Bugsnag Notifier" forKey:BSGKeyName]; @@ -330,8 +340,6 @@ - (void)start { [self batteryChanged:nil]; [self orientationChanged:nil]; - [self addTerminationObserver:UIApplicationWillTerminateNotification]; - #elif TARGET_OS_MAC [self.details setValue:@"OSX Bugsnag Notifier" forKey:BSGKeyName]; @@ -344,42 +352,16 @@ - (void)start { selector:@selector(willEnterBackground:) name:NSApplicationDidResignActiveNotification object:nil]; - - [self addTerminationObserver:NSApplicationWillTerminateNotification]; #endif - _started = YES; - [self.sessionTracker startNewSessionIfAutoCaptureEnabled]; - // notification not received in time on initial startup, so trigger manually [self willEnterForeground:self]; } -- (void)addTerminationObserver:(NSString *)name { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(unsubscribeFromNotifications:) - name:name - object:nil]; -} - -/** - * Removes observers and listeners to prevent allocations when the app is terminated - */ -- (void)unsubscribeFromNotifications:(id)sender { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self.networkReachable stopWatchingConnectivity]; - -#if TARGET_OS_TV || TARGET_OS_MAC -#elif TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE - [UIDevice currentDevice].batteryMonitoringEnabled = NO; - [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; -#endif -} - - (void)watchLifecycleEvents:(NSNotificationCenter *)center { NSString *foregroundName; NSString *backgroundName; - + #if TARGET_OS_TV || TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE foregroundName = UIApplicationWillEnterForegroundNotification; backgroundName = UIApplicationWillEnterForegroundNotification; @@ -387,7 +369,7 @@ - (void)watchLifecycleEvents:(NSNotificationCenter *)center { foregroundName = NSApplicationWillBecomeActiveNotification; backgroundName = NSApplicationDidFinishLaunchingNotification; #endif - + [center addObserver:self selector:@selector(willEnterForeground:) name:foregroundName @@ -400,15 +382,34 @@ - (void)watchLifecycleEvents:(NSNotificationCenter *)center { } - (void)willEnterForeground:(id)sender { - [self.sessionTracker handleAppForegroundEvent]; + [self.sessionTracker startNewSession:[NSDate date] + withUser:self.configuration.currentUser + autoCaptured:YES]; + + NSTimeInterval sessionTickSeconds = 60; + + if (!self.sessionTimer) { + _sessionTimer = [NSTimer scheduledTimerWithTimeInterval:sessionTickSeconds + target:self + selector:@selector(sessionTick:) + userInfo:nil + repeats:YES]; + [self sessionTick:self]; + } } - (void)willEnterBackground:(id)sender { - [self.sessionTracker handleAppBackgroundEvent]; + [self.sessionTracker suspendCurrentSession:[NSDate date]]; + + if (self.sessionTimer) { + [self.sessionTimer invalidate]; + self.sessionTimer = nil; + } + } -- (void)startSession { - [self.sessionTracker startNewSession]; +- (void)sessionTick:(id)sender { + [self.sessionTracker send]; } - (void)flushPendingReports { @@ -427,6 +428,11 @@ - (void)setupConnectivityListener { [self.networkReachable startWatchingConnectivity]; } +- (void)startSession { + [self.sessionTracker startNewSession:[NSDate date] + withUser:self.configuration.currentUser + autoCaptured:NO]; +} - (void)notifyError:(NSError *)error block:(void (^)(BugsnagCrashReport *))block { @@ -511,7 +517,8 @@ - (void)notify:(NSString *)exceptionName message:(NSString *)message handledState:(BugsnagHandledState *_Nonnull)handledState block:(void (^)(BugsnagCrashReport *))block { - [self.sessionTracker handleHandledErrorEvent]; + + [self.sessionTracker incrementHandledError]; BugsnagCrashReport *report = [[BugsnagCrashReport alloc] initWithErrorName:exceptionName @@ -523,6 +530,19 @@ - (void)notify:(NSString *)exceptionName if (block) { block(report); } + + [self.metaDataLock lock]; + BSSerializeJSONDictionary([report.handledState toJson], + &bsg_g_bugsnag_data.handledState); + BSSerializeJSONDictionary(report.metaData, + &bsg_g_bugsnag_data.metaDataJSON); + BSSerializeJSONDictionary(report.overrides, + &bsg_g_bugsnag_data.userOverridesJSON); + + [self.state addAttribute:BSGKeySeverity + withValue:BSGFormatSeverity(report.severity) + toTabWithName:BSTabCrash]; + // We discard 5 stack frames (including this one) by default, // and sum that with the number specified by report.depth: // @@ -533,21 +553,23 @@ - (void)notify:(NSString *)exceptionName // 3 -[BugsnagCrashSentry reportUserException:reason:] // 4 -[BugsnagNotifier notify:message:block:] - int depth = (int)(BSGNotifierStackFrameCount + report.depth); + NSNumber *depth = @(BSGNotifierStackFrameCount + report.depth); + [self.state addAttribute:BSAttributeDepth + withValue:depth + toTabWithName:BSTabCrash]; NSString *reportName = report.errorClass ?: NSStringFromClass([NSException class]); NSString *reportMessage = report.errorMessage ?: @""; - [self.crashSentry reportUserException:reportName - reason:reportMessage - handledState:[handledState toJson] - appState:[self.state toDictionary] - callbackOverrides:report.overrides - metadata:[report.metaData copy] - config:[self.configuration.config toDictionary] - discardDepth:depth]; + [self.crashSentry reportUserException:reportName reason:reportMessage]; + bsg_g_bugsnag_data.userOverridesJSON = NULL; + bsg_g_bugsnag_data.handledState = NULL; + // Restore metaData to pre-crash state. + [self.metaDataLock unlock]; + [self metaDataChanged:self.configuration.metaData]; + [[self state] clearTab:BSTabCrash]; [self addBreadcrumbWithBlock:^(BugsnagBreadcrumb *_Nonnull crumb) { crumb.type = BSGBreadcrumbTypeError; crumb.name = reportName; diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.h b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.h index 0ead0ff..510a8b6 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.h @@ -17,50 +17,25 @@ typedef void (^SessionTrackerCallback)(BugsnagSession *newSession); @interface BugsnagSessionTracker : NSObject -/** - Create a new session tracker - - @param config The Bugsnag configuration to use - @param callback A callback invoked each time a new session is started - @return A new session tracker - */ - (instancetype)initWithConfig:(BugsnagConfiguration *)config - postRecordCallback:(void(^)(BugsnagSession *))callback; + apiClient:(BugsnagSessionTrackingApiClient *)apiClient + callback:(void(^)(BugsnagSession *))callback; -/** - Record and send a new session - */ -- (void)startNewSession; - -/** - Record a new auto-captured session if neededed. Auto-captured sessions are only - recorded and sent if -[BugsnagConfiguration shouldAutoCaptureSessions] is YES - */ -- (void)startNewSessionIfAutoCaptureEnabled; +- (void)startNewSession:(NSDate *)date + withUser:(BugsnagUser *)user + autoCaptured:(BOOL)autoCaptured; -/** - Handle the app foregrounding event. If more than 30s has elapsed since being - sent to the background, records a new session if session auto-capture is - enabled. - Must be called from the main thread. - */ -- (void)handleAppForegroundEvent; +- (void)suspendCurrentSession:(NSDate *)date; +- (void)incrementHandledError; +- (void)send; +- (void)onAutoCaptureEnabled; -/** - Handle the app backgrounding event. Tracks time between foreground and - background to determine when to automatically record a session. - Must be called from the main thread. - */ -- (void)handleAppBackgroundEvent; +@property (readonly) BugsnagSession *currentSession; +@property (readonly) BOOL isInForeground; /** - Handle some variation of Bugsnag.notify() being called. - Increases the number of handled errors recorded for the current session, if - a session exists. + * Called when a session is altered */ -- (void)handleHandledErrorEvent; - - -@property (nonatomic, strong, readonly) BugsnagSession *currentSession; +@property SessionTrackerCallback callback; @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.m b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.m index 55fb94e..bf5a4f2 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTracker.m @@ -11,37 +11,27 @@ #import "BSG_KSLogger.h" #import "BugsnagSessionTrackingPayload.h" #import "BugsnagSessionTrackingApiClient.h" -#import "BugsnagLogger.h" - -/** - Number of seconds in background required to make a new session - */ -NSTimeInterval const BSGNewSessionBackgroundDuration = 60; @interface BugsnagSessionTracker () -@property (weak, nonatomic) BugsnagConfiguration *config; -@property (strong, nonatomic) BugsnagSessionFileStore *sessionStore; -@property (strong, nonatomic) BugsnagSessionTrackingApiClient *apiClient; -@property (strong, nonatomic) NSDate *backgroundStartTime; - -@property (strong, readwrite) BugsnagSession *currentSession; - -/** - * Called when a session is altered - */ -@property (nonatomic, strong, readonly) SessionTrackerCallback callback; +@property BugsnagConfiguration *config; +@property BugsnagSessionFileStore *sessionStore; +@property BugsnagSessionTrackingApiClient *apiClient; +@property BOOL trackedFirstSession; @end @implementation BugsnagSessionTracker - (instancetype)initWithConfig:(BugsnagConfiguration *)config - postRecordCallback:(void(^)(BugsnagSession *))callback { + apiClient:(BugsnagSessionTrackingApiClient *)apiClient + callback:(void(^)(BugsnagSession *))callback { if (self = [super init]) { _config = config; - _apiClient = [[BugsnagSessionTrackingApiClient alloc] initWithConfig:config queueName:@"Session API queue"]; + _apiClient = apiClient; _callback = callback; - NSString *storePath = [BugsnagFileStore findReportStorePath:@"Sessions"]; + NSString *bundleName = [[NSBundle mainBundle] infoDictionary][@"CFBundleName"]; + NSString *storePath = [BugsnagFileStore findReportStorePath:@"Sessions" + bundleName:bundleName]; if (!storePath) { BSG_KSLOG_ERROR(@"Failed to initialize session store."); } @@ -50,55 +40,44 @@ - (instancetype)initWithConfig:(BugsnagConfiguration *)config return self; } -#pragma mark - Creating and sending a new session +- (void)startNewSession:(NSDate *)date + withUser:(BugsnagUser *)user + autoCaptured:(BOOL)autoCaptured { -- (void)startNewSession { - [self startNewSessionWithAutoCaptureValue:NO]; -} + _currentSession = [[BugsnagSession alloc] initWithId:[[NSUUID UUID] UUIDString] + startDate:date + user:user + autoCaptured:autoCaptured]; -- (void)startNewSessionIfAutoCaptureEnabled { - if (self.config.shouldAutoCaptureSessions && [self.config shouldSendReports]) { - [self startNewSessionWithAutoCaptureValue:YES]; + if ((self.config.shouldAutoCaptureSessions || !autoCaptured) && [self.config shouldSendReports]) { + [self trackSession]; } + _isInForeground = YES; } -- (void)startNewSessionWithAutoCaptureValue:(BOOL)isAutoCaptured { - if (self.config.sessionURL == nil) { - bsg_log_err(@"The session tracking endpoint has not been set. Session tracking is disabled"); - return; - } - self.currentSession = [[BugsnagSession alloc] initWithId:[[NSUUID UUID] UUIDString] - startDate:[NSDate date] - user:self.config.currentUser - autoCaptured:isAutoCaptured]; - +- (void)trackSession { [self.sessionStore write:self.currentSession]; - + self.trackedFirstSession = YES; + if (self.callback) { self.callback(self.currentSession); } - [self.apiClient deliverSessionsInStore:self.sessionStore]; -} - -#pragma mark - Handling events - -- (void)handleAppBackgroundEvent { - self.backgroundStartTime = [NSDate date]; } -- (void)handleAppForegroundEvent { - if (self.backgroundStartTime - && [[NSDate date] timeIntervalSinceDate:self.backgroundStartTime] >= BSGNewSessionBackgroundDuration) { - [self startNewSessionIfAutoCaptureEnabled]; +- (void)onAutoCaptureEnabled { + if (!self.trackedFirstSession) { + if (self.currentSession == nil) { // unlikely case, will be initialised later + return; + } + [self trackSession]; } - self.backgroundStartTime = nil; } -- (void)handleHandledErrorEvent { - if (self.currentSession == nil) { - return; - } +- (void)suspendCurrentSession:(NSDate *)date { + _isInForeground = NO; +} +- (void)incrementHandledError { @synchronized (self.currentSession) { self.currentSession.handledCount++; if (self.callback && (self.config.shouldAutoCaptureSessions || !self.currentSession.autoCaptured)) { @@ -107,4 +86,35 @@ - (void)handleHandledErrorEvent { } } +- (void)send { + @synchronized (self.sessionStore) { + NSMutableArray *sessions = [NSMutableArray new]; + NSArray *fileIds = [self.sessionStore fileIds]; + + for (NSDictionary *dict in [self.sessionStore allFiles]) { + [sessions addObject:[[BugsnagSession alloc] initWithDictionary:dict]]; + } + BugsnagSessionTrackingPayload *payload = [[BugsnagSessionTrackingPayload alloc] initWithSessions:sessions]; + + if (payload.sessions.count > 0) { + [self.apiClient sendData:payload + withPayload:[payload toJson] + toURL:self.config.sessionURL + headers:self.config.sessionApiHeaders + onCompletion:^(id data, BOOL success, NSError *error) { + + if (success && error == nil) { + NSLog(@"Sent sessions to Bugsnag"); + + for (NSString *fileId in fileIds) { + [self.sessionStore deleteFileWithId:fileId]; + } + } else { + NSLog(@"Failed to send sessions to Bugsnag: %@", error); + } + }]; + } + } +} + @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.h b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.h index 837b792..7c92563 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.h +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.h @@ -6,16 +6,12 @@ #import #import "BugsnagApiClient.h" -@class BugsnagSessionFileStore; +@class BugsnagConfiguration; +@class BugsnagSessionTrackingPayload; +@class BugsnagSession; +@class BugsnagSession; @interface BugsnagSessionTrackingApiClient : BugsnagApiClient - -/** - Asynchronously delivers sessions written to the store - - @param store The store containing the sessions to deliver - */ -- (void)deliverSessionsInStore:(BugsnagSessionFileStore *)store; @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.m b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.m index b140ecb..bd27f0a 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingApiClient.m @@ -6,11 +6,10 @@ #import "BugsnagSessionTrackingApiClient.h" #import "BugsnagConfiguration.h" #import "BugsnagSessionTrackingPayload.h" -#import "BugsnagSessionFileStore.h" #import "BugsnagLogger.h" +#import "Bugsnag.h" +#import "BugsnagKeys.h" #import "BugsnagSession.h" -#import "BSG_RFC3339DateTool.h" - @implementation BugsnagSessionTrackingApiClient @@ -18,52 +17,4 @@ - (NSOperation *)deliveryOperation { return [NSOperation new]; } -- (void)deliverSessionsInStore:(BugsnagSessionFileStore *)store { - NSString *apiKey = [self.config.apiKey copy]; - NSURL *sessionURL = [self.config.sessionURL copy]; - - [self.sendQueue addOperationWithBlock:^{ - if (!apiKey) { - bsg_log_err(@"No API key set. Refusing to send sessions."); - return; - } - - NSArray *fileIds = [store fileIds]; - - if (fileIds.count <= 0) { - return; - } - - NSMutableArray *sessions = [NSMutableArray new]; - - for (NSDictionary *dict in [store allFiles]) { - [sessions addObject:[[BugsnagSession alloc] initWithDictionary:dict]]; - } - BugsnagSessionTrackingPayload *payload = [[BugsnagSessionTrackingPayload alloc] initWithSessions:sessions]; - NSUInteger sessionCount = payload.sessions.count; - if (sessionCount > 0) { - NSDictionary *HTTPHeaders = @{ - @"Bugsnag-Payload-Version": @"1.0", - @"Bugsnag-API-Key": apiKey, - @"Bugsnag-Sent-At": [BSG_RFC3339DateTool stringFromDate:[NSDate new]] - }; - [self sendData:payload - withPayload:[payload toJson] - toURL:sessionURL - headers:HTTPHeaders - onCompletion:^(id data, BOOL success, NSError *error) { - if (success && error == nil) { - bsg_log_info(@"Sent %lu sessions to Bugsnag", (unsigned long) sessionCount); - - for (NSString *fileId in fileIds) { - [store deleteFileWithId:fileId]; - } - } else { - bsg_log_warn(@"Failed to send sessions to Bugsnag: %@", error); - } - }]; - } - }]; -} - @end diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingPayload.m b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingPayload.m index da6da6f..0abefa7 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingPayload.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSessionTrackingPayload.m @@ -40,7 +40,7 @@ - (NSDictionary *)toJson { BSGDictSetSafeObject(dict, [Bugsnag notifier].details, BSGKeyNotifier); NSDictionary *systemInfo = [BSG_KSSystemInfo systemInfo]; - BSGDictSetSafeObject(dict, BSGParseAppState(systemInfo, [Bugsnag configuration].appVersion), @"app"); + BSGDictSetSafeObject(dict, BSGParseAppState(systemInfo), @"app"); BSGDictSetSafeObject(dict, BSGParseDeviceState(systemInfo), @"device"); return [NSDictionary dictionaryWithDictionary:dict]; } diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagSink.m b/Example/new/Pods/Bugsnag/Source/BugsnagSink.m index 0fc2517..19dbb43 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagSink.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagSink.m @@ -29,7 +29,6 @@ #import "BugsnagCollections.h" #import "BugsnagNotifier.h" #import "BugsnagKeys.h" -#import "BSG_KSSystemInfo.h" // This is private in Bugsnag, but really we want package private so define // it here. @@ -60,40 +59,9 @@ - (void)filterReports:(NSArray *)reports onCompletion:(BSG_KSCrashReportFilterCompletion)onCompletion { NSMutableArray *bugsnagReports = [NSMutableArray new]; BugsnagConfiguration *configuration = [Bugsnag configuration]; - for (NSDictionary *report in reports) { - BugsnagCrashReport *bugsnagReport = [[BugsnagCrashReport alloc] initWithKSReport:report]; - BOOL incompleteReport = (![@"standard" isEqualToString:[report valueForKeyPath:@"report.type"]] || - [[report objectForKey:@"incomplete"] boolValue]); - - if (incompleteReport) { // append app/device data as this is unlikely to change between sessions - NSDictionary *sysInfo = [BSG_KSSystemInfo systemInfo]; - - // reset any existing data as it will be corrupted/nil - bugsnagReport.appState = @{}; - bugsnagReport.deviceState = @{}; - - - NSMutableDictionary *appDict = [NSMutableDictionary new]; - BSGDictInsertIfNotNil(appDict, sysInfo[@BSG_KSSystemField_BundleVersion], @"bundleVersion"); - BSGDictInsertIfNotNil(appDict, sysInfo[@BSG_KSSystemField_BundleID], @"id"); - BSGDictInsertIfNotNil(appDict, configuration.releaseStage, @"releaseStage"); - BSGDictInsertIfNotNil(appDict, sysInfo[@BSG_KSSystemField_SystemName], @"type"); - BSGDictInsertIfNotNil(appDict, sysInfo[@BSG_KSSystemField_BundleShortVersion], @"version"); - - NSMutableDictionary *deviceDict = [NSMutableDictionary new]; - BSGDictInsertIfNotNil(deviceDict, sysInfo[@BSG_KSSystemField_Jailbroken], @"jailbroken"); - BSGDictInsertIfNotNil(deviceDict, [[NSLocale currentLocale] localeIdentifier], @"locale"); - BSGDictInsertIfNotNil(deviceDict, sysInfo[@"Apple"], @"manufacturer"); - BSGDictInsertIfNotNil(deviceDict, sysInfo[@BSG_KSSystemField_Machine], @"model"); - BSGDictInsertIfNotNil(deviceDict, sysInfo[@BSG_KSSystemField_Model], @"modelNumber"); - BSGDictInsertIfNotNil(deviceDict, sysInfo[@BSG_KSSystemField_SystemName], @"osName"); - BSGDictInsertIfNotNil(deviceDict, sysInfo[@BSG_KSSystemField_SystemVersion], @"osVersion"); - - bugsnagReport.app = appDict; - bugsnagReport.device = deviceDict; - } - + BugsnagCrashReport *bugsnagReport = + [[BugsnagCrashReport alloc] initWithKSReport:report]; if (![bugsnagReport shouldBeSent]) continue; BOOL shouldSend = YES; diff --git a/Example/new/Pods/Bugsnag/Source/BugsnagUser.m b/Example/new/Pods/Bugsnag/Source/BugsnagUser.m index 5e6c14e..957424c 100644 --- a/Example/new/Pods/Bugsnag/Source/BugsnagUser.m +++ b/Example/new/Pods/Bugsnag/Source/BugsnagUser.m @@ -14,7 +14,7 @@ @implementation BugsnagUser - (instancetype)initWithDictionary:(NSDictionary *)dict { if (self = [super init]) { _userId = dict[@"id"]; - _emailAddress = dict[@"email"]; + _emailAddress = dict[@"emailAddress"]; _name = dict[@"name"]; } return self; @@ -34,12 +34,12 @@ + (instancetype)userWithUserId:(NSString *)userId name:(NSString *)name emailAdd return [[self alloc] initWithUserId:userId name:name emailAddress:emailAddress]; } + - (NSDictionary *)toJson { NSMutableDictionary *dict = [NSMutableDictionary new]; BSGDictInsertIfNotNil(dict, self.userId, @"id"); - BSGDictInsertIfNotNil(dict, self.emailAddress, @"email"); + BSGDictInsertIfNotNil(dict, self.emailAddress, @"emailAddress"); BSGDictInsertIfNotNil(dict, self.name, @"name"); return [NSDictionary dictionaryWithDictionary:dict]; } - @end diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h index 91fefa0..3b558f3 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h @@ -26,7 +26,6 @@ #import -#import "BSG_KSSystemCapabilities.h" #import "BSG_KSCrashReportFilterCompletion.h" #import "BSG_KSCrashReportWriter.h" #import "BSG_KSCrashType.h" @@ -172,25 +171,24 @@ typedef enum { * application will terminate with an abort(). * * @param name The exception name (for namespacing exception types). - * @param reason A description of why the exception occurred - * @param handledState The severity, reason, and handled-ness of the report - * @param appState breadcrumbs and other app environmental info - * @param overrides Report fields overridden by callbacks, collated in the - * final report - * @param metadata additional information to attach to the report - * @param config delivery options - * @param depth The number of frames to discard from the top of the stacktrace + * + * @param reason A description of why the exception occurred. + * + * @param language A unique language identifier. + * + * @param lineOfCode A copy of the offending line of code (nil = ignore). + * + * @param stackTrace An array of frames (dictionaries or strings) representing + * the call stack leading to the exception (nil = ignore). + * * @param terminateProgram If true, do not return from this function call. * Terminate the program instead. */ - (void)reportUserException:(NSString *)name reason:(NSString *)reason - handledState:(NSDictionary *)handledState - appState:(NSDictionary *)appState - callbackOverrides:(NSDictionary *)overrides - metadata:(NSDictionary *)metadata - config:(NSDictionary *)config - discardDepth:(int)depth + language:(NSString *)language + lineOfCode:(NSString *)lineOfCode + stackTrace:(NSArray *)stackTrace terminateProgram:(BOOL)terminateProgram; /** If YES, user reported exceptions will suspend all threads during report diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m index deb835d..993c6bf 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m @@ -73,7 +73,7 @@ @interface BSG_KSCrash () @property(nonatomic, readwrite, retain) NSString *logFilePath; @property(nonatomic, readwrite, retain) BSG_KSCrashReportStore *crashReportStore; -@property(nonatomic, readwrite, assign) BSGReportCallback onCrash; +@property(nonatomic, readwrite, assign) BSG_KSReportWriteCallback onCrash; @property(nonatomic, readwrite, assign) bool printTraceToStdout; @property(nonatomic, readwrite, assign) int maxStoredReports; @@ -141,7 +141,8 @@ - (id)initWithReportFilesDirectory:(NSString *)reportFilesDirectory { if ((self = [super init])) { self.bundleName = [[NSBundle mainBundle] infoDictionary][@"CFBundleName"]; - NSString *storePath = [BugsnagFileStore findReportStorePath:reportFilesDirectory]; + NSString *storePath = [BugsnagFileStore findReportStorePath:reportFilesDirectory + bundleName:self.bundleName]; if (!storePath) { BSG_KSLOG_ERROR( @@ -202,7 +203,7 @@ - (void)setPrintTraceToStdout:(bool)printTraceToStdout { bsg_kscrash_setPrintTraceToStdout(printTraceToStdout); } -- (void)setOnCrash:(BSGReportCallback)onCrash { +- (void)setOnCrash:(BSG_KSReportWriteCallback)onCrash { _onCrash = onCrash; bsg_kscrash_setCrashNotifyCallback(onCrash); } @@ -347,23 +348,30 @@ - (void)deleteAllReports { - (void)reportUserException:(NSString *)name reason:(NSString *)reason - handledState:(NSDictionary *)handledState - appState:(NSDictionary *)appState - callbackOverrides:(NSDictionary *)overrides - metadata:(NSDictionary *)metadata - config:(NSDictionary *)config - discardDepth:(int)depth + language:(NSString *)language + lineOfCode:(NSString *)lineOfCode + stackTrace:(NSArray *)stackTrace terminateProgram:(BOOL)terminateProgram { const char *cName = [name cStringUsingEncoding:NSUTF8StringEncoding]; const char *cReason = [reason cStringUsingEncoding:NSUTF8StringEncoding]; - bsg_kscrash_reportUserException(cName, cReason, - [self encodeAsJSONString:handledState], - [self encodeAsJSONString:overrides], - [self encodeAsJSONString:metadata], - [self encodeAsJSONString:appState], - [self encodeAsJSONString:config], - depth, - terminateProgram); + const char *cLanguage = + [language cStringUsingEncoding:NSUTF8StringEncoding]; + const char *cLineOfCode = + [lineOfCode cStringUsingEncoding:NSUTF8StringEncoding]; + NSError *error = nil; + NSData *jsonData = + [BSG_KSJSONCodec encode:stackTrace options:0 error:&error]; + if (jsonData == nil || error != nil) { + BSG_KSLOG_ERROR(@"Error encoding stack trace to JSON: %@", error); + // Don't return, since we can still record other useful information. + } + NSString *jsonString = + [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + const char *cStackTrace = + [jsonString cStringUsingEncoding:NSUTF8StringEncoding]; + + bsg_kscrash_reportUserException(cName, cReason, cLanguage, cLineOfCode, + cStackTrace, terminateProgram); // If bsg_kscrash_reportUserException() returns, we did not terminate. // Set up IDs and paths for the next crash. @@ -467,19 +475,6 @@ - (NSMutableData *)nullTerminated:(NSData *)data { return mutable; } -- (const char *)encodeAsJSONString:(id)object { - NSError *error = nil; - NSData *jsonData = [BSG_KSJSONCodec encode:object options:0 error:&error]; - if (jsonData == nil || error != nil) { - BSG_KSLOG_ERROR(@"Error encoding object to JSON: %@", error); - // we can still record other useful information from the report - return NULL; - } - NSString *jsonString = - [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - return [jsonString cStringUsingEncoding:NSUTF8StringEncoding]; -} - // ============================================================================ #pragma mark - Callbacks - // ============================================================================ diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h index 8269237..9e3018f 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h @@ -112,7 +112,7 @@ typedef enum { * Note: If you use an installation, it will automatically set this property. * Do not modify it in such a case. */ -@property(nonatomic, readwrite, assign) BSGReportCallback onCrash; +@property(nonatomic, readwrite, assign) BSG_KSReportWriteCallback onCrash; /** Path where the log of BSG_KSCrash's activities will be written. * If nil, log entries will be printed to the console. diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c index 1ebc3a9..98563bf 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c @@ -236,22 +236,18 @@ void bsg_kscrash_setDoNotIntrospectClasses(const char **doNotIntrospectClasses, } void bsg_kscrash_setCrashNotifyCallback( - const BSGReportCallback onCrashNotify) { + const BSG_KSReportWriteCallback onCrashNotify) { BSG_KSLOG_TRACE("Set onCrashNotify to %p", onCrashNotify); crashContext()->config.onCrashNotify = onCrashNotify; } void bsg_kscrash_reportUserException(const char *name, const char *reason, - const char *handledState, - const char *overrides, - const char *metadata, - const char *appState, - const char *config, - int discardDepth, + const char *language, + const char *lineOfCode, + const char *stackTrace, bool terminateProgram) { - bsg_kscrashsentry_reportUserException(name, reason, handledState, overrides, - metadata, appState, config, discardDepth, - terminateProgram); + bsg_kscrashsentry_reportUserException(name, reason, language, lineOfCode, + stackTrace, terminateProgram); } void bsg_kscrash_setSuspendThreadsForUserReported( diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h index 9df9245..9c165b2 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h @@ -166,7 +166,7 @@ void bsg_kscrash_setDoNotIntrospectClasses(const char **doNotIntrospectClasses, * Default: NULL */ void bsg_kscrash_setCrashNotifyCallback( - const BSGReportCallback onCrashNotify); + const BSG_KSReportWriteCallback onCrashNotify); /** Report a custom, user defined exception. * This can be useful when dealing with scripting languages. @@ -175,24 +175,24 @@ void bsg_kscrash_setCrashNotifyCallback( * application will terminate with an abort(). * * @param name The exception name (for namespacing exception types). + * * @param reason A description of why the exception occurred. - * @param handledState The severity, reason, and handled-ness of the report - * @param appState breadcrumbs and other app environmental info - * @param overrides Report fields overridden by callbacks, collated in the - * final report - * @param metadata additional information to attach to the report - * @param discardDepth The number of frames to discard from the top of the - * stacktrace + * + * @param language A unique language identifier. + * + * @param lineOfCode A copy of the offending line of code (NULL = ignore). + * + * @param stackTrace JSON encoded array containing stack trace information (one + * frame per array entry). The frame structure can be anything you want, + * including bare strings. + * * @param terminateProgram If true, do not return from this function call. * Terminate the program instead. */ void bsg_kscrash_reportUserException(const char *name, const char *reason, - const char *handledState, - const char *overrides, - const char *metadata, - const char *appState, - const char *config, - int discardDepth, + const char *language, + const char *lineOfCode, + const char *stackTrace, bool terminateProgram); /** If YES, user reported exceptions will suspend all threads during report diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h index c42ddb9..000ceab 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h @@ -88,7 +88,7 @@ typedef struct { /** Callback allowing the application the opportunity to add extra data to * the report file. Application MUST NOT call async-unsafe methods! */ - BSGReportCallback onCrashNotify; + BSG_KSReportWriteCallback onCrashNotify; } BSG_KSCrash_Configuration; /** Contextual data used by the crash report writer. diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c index b416b4e..6c9da5c 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c @@ -40,7 +40,6 @@ //#define BSG_kSLogger_LocalLevel TRACE #include "BSG_KSLogger.h" -#include "BSG_KSCrashContext.h" #ifdef __arm64__ #include @@ -983,12 +982,6 @@ bool bsg_kscrw_i_isValidPointer(const uintptr_t address) { return true; } -/** - * Strip higher order bits from addresses which aren't related to the actual - * location. - */ -#define BSG_ValidPointerMask 0x0000000fffffffff - /** Write the contents of a memory location only if it contains notable data. * Also writes meta information about the data. * @@ -996,17 +989,13 @@ bool bsg_kscrw_i_isValidPointer(const uintptr_t address) { * * @param key The object key, if needed. * - * @param rawAddress The memory address. + * @param address The memory address. */ void bsg_kscrw_i_writeMemoryContentsIfNotable( const BSG_KSCrashReportWriter *const writer, const char *const key, - const uintptr_t rawAddress) { - uintptr_t address = rawAddress; + const uintptr_t address) { if (!bsg_kscrw_i_isValidPointer(address)) { - address &= BSG_ValidPointerMask; - if (!bsg_kscrw_i_isValidPointer(address)) { - return; - } + return; } const void *object = (const void *)address; @@ -1789,6 +1778,20 @@ void bsg_kscrw_i_writeError(const BSG_KSCrashReportWriter *const writer, { writer->addStringElement(writer, BSG_KSCrashField_Name, crash->userException.name); + if (crash->userException.language != NULL) { + writer->addStringElement(writer, BSG_KSCrashField_Language, + crash->userException.language); + } + if (crash->userException.lineOfCode != NULL) { + writer->addStringElement(writer, + BSG_KSCrashField_LineOfCode, + crash->userException.lineOfCode); + } + if (crash->userException.customStackTrace != NULL) { + writer->addJSONElement( + writer, BSG_KSCrashField_Backtrace, + crash->userException.customStackTrace); + } } writer->endContainer(writer); break; @@ -1960,8 +1963,7 @@ void bsg_kscrw_i_updateStackOverflowStatus( void bsg_kscrw_i_callUserCrashHandler(BSG_KSCrash_Context *const crashContext, BSG_KSCrashReportWriter *writer) { - BSG_KSCrashType type = crashContext->crash.crashType; - crashContext->config.onCrashNotify(writer, type); + crashContext->config.onCrashNotify(writer); } // ============================================================================ @@ -2089,32 +2091,7 @@ void bsg_kscrashreport_writeStandardReport( writer->endContainer(writer); if (crashContext->config.onCrashNotify != NULL) { - // Write handled exception report info writer->beginObject(writer, BSG_KSCrashField_UserAtCrash); - if (crashContext->crash.crashType == BSG_KSCrashTypeUserReported) { - if (crashContext->crash.userException.overrides != NULL) { - writer->addJSONElement(writer, BSG_KSCrashField_Overrides, - crashContext->crash.userException.overrides); - } - if (crashContext->crash.userException.handledState != NULL) { - writer->addJSONElement(writer, BSG_KSCrashField_HandledState, - crashContext->crash.userException.handledState); - } - if (crashContext->crash.userException.metadata != NULL) { - writer->addJSONElement(writer, BSG_KSCrashField_Metadata, - crashContext->crash.userException.metadata); - } - if (crashContext->crash.userException.state != NULL) { - writer->addJSONElement(writer, BSG_KSCrashField_State, - crashContext->crash.userException.state); - } - if (crashContext->crash.userException.config != NULL) { - writer->addJSONElement(writer, BSG_KSCrashField_Config, - crashContext->crash.userException.config); - } - writer->addIntegerElement(writer, BSG_KSCrashField_DiscardDepth, - crashContext->crash.userException.discardDepth); - } { bsg_kscrw_i_callUserCrashHandler(crashContext, writer); } writer->endContainer(writer); } diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h index b585902..77389f0 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h @@ -129,12 +129,6 @@ #define BSG_KSCrashField_Signal "signal" #define BSG_KSCrashField_Subcode "subcode" #define BSG_KSCrashField_UserReported "user_reported" -#define BSG_KSCrashField_Overrides "overrides" -#define BSG_KSCrashField_HandledState "handledState" -#define BSG_KSCrashField_Metadata "metaData" -#define BSG_KSCrashField_State "state" -#define BSG_KSCrashField_Config "config" -#define BSG_KSCrashField_DiscardDepth "depth" #pragma mark - Process State - diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c index a2cc2d9..810005c 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c @@ -24,14 +24,12 @@ // THE SOFTWARE. // -#include "BSG_KSSystemCapabilities.h" #include "BSG_KSCrashSentry.h" #include "BSG_KSCrashSentry_Private.h" #include "BSG_KSCrashSentry_CPPException.h" #include "BSG_KSCrashSentry_Deadlock.h" #include "BSG_KSCrashSentry_NSException.h" -#include "BSG_KSCrashSentry_MachException.h" #include "BSG_KSCrashSentry_Signal.h" #include "BSG_KSCrashSentry_User.h" #include "BSG_KSLogger.h" diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h index 1e8e733..0d619f0 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h @@ -138,13 +138,14 @@ typedef struct BSG_KSCrash_SentryContext { /** The exception name. */ const char *name; - /** Handled exception report info: */ - const char *overrides; // info set in callbacks - const char *handledState; - const char *metadata; - const char *state; // breadcrumbs, other shared app state - const char *config; // config options which affect report delivery - int discardDepth; // number of frames from the top to remove + /** The language the exception occured in. */ + const char *language; + + /** The line of code where the exception occurred. Can be NULL. */ + const char *lineOfCode; + + /** The user-supplied JSON encoded stack trace. */ + const char *customStackTrace; } userException; } BSG_KSCrash_SentryContext; diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm index f7de5f0..508478b 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm @@ -44,15 +44,6 @@ #define likely_if(x) if (__builtin_expect(x, 1)) #define unlikely_if(x) if (__builtin_expect(x, 0)) -#ifdef __cplusplus -extern "C" { -#endif -// Internal NSException recorder -void bsg_recordException(NSException *exception); -#ifdef __cplusplus -} -#endif - // ============================================================================ #pragma mark - Globals - // ============================================================================ @@ -123,11 +114,9 @@ static void CPPExceptionTerminate(void) { try { throw; } catch (NSException *exception) { - BSG_KSLOG_DEBUG(@"Detected NSException. Recording details " - @"and letting the current " + BSG_KSLOG_DEBUG(@"Detected NSException. Letting the current " @"NSException handler deal with it."); isNSException = true; - bsg_recordException(exception); } catch (std::exception &exc) { strncpy(descriptionBuff, exc.what(), sizeof(descriptionBuff)); } @@ -187,9 +176,7 @@ static void CPPExceptionTerminate(void) { bsg_kscrashsentry_resumeThreads(); } - if (bsg_g_originalTerminateHandler != NULL) { - bsg_g_originalTerminateHandler(); - } + bsg_g_originalTerminateHandler(); } // ============================================================================ diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c index 146ee01..e19ff49 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c @@ -25,17 +25,13 @@ // #include "BSG_KSCrashSentry_MachException.h" -#include "BSG_KSSystemCapabilities.h" //#define BSG_KSLogger_LocalLevel TRACE #include "BSG_KSLogger.h" #if BSG_KSCRASH_HAS_MACH -#include "BSG_KSMach.h" -#include "BSG_KSCrashSentry_Private.h" #include -#include // ============================================================================ #pragma mark - Constants - @@ -148,13 +144,13 @@ static BSG_KSCrash_SentryContext *bsg_g_context; * * @param machineContext The machine context to fill out. */ -bool bsg_ksmachexc_i_fetchMachineState( +bool ksmachexc_i_fetchMachineState( const thread_t thread, BSG_STRUCT_MCONTEXT_L *const machineContext) { - if (!bsg_ksmachthreadState(thread, machineContext)) { + if (!ksmach_threadState(thread, machineContext)) { return false; } - if (!bsg_ksmachexceptionState(thread, machineContext)) { + if (!ksmach_exceptionState(thread, machineContext)) { return false; } @@ -165,7 +161,7 @@ bool bsg_ksmachexc_i_fetchMachineState( */ void bsg_ksmachexc_i_restoreExceptionPorts(void) { BSG_KSLOG_DEBUG("Restoring original exception ports."); - if (bsg_g_previousExceptionPorts.count == 0) { + if (g_previousExceptionPorts.count == 0) { BSG_KSLOG_DEBUG("Original exception ports were already restored."); return; } @@ -207,7 +203,7 @@ void *ksmachexc_i_handleExceptions(void *const userData) { pthread_setname_np(threadName); if (threadName == kThreadSecondary) { BSG_KSLOG_DEBUG("This is the secondary thread. Suspending."); - thread_suspend(bsg_ksmachthread_self()); + thread_suspend(bsg_ksmach_thread_self()); } for (;;) { @@ -239,18 +235,18 @@ void *ksmachexc_i_handleExceptions(void *const userData) { // Switch to the secondary thread if necessary, or uninstall the handler // to avoid a death loop. - if (bsg_ksmachthread_self() == bsg_g_primaryMachThread) { + if (bsg_ksmach_thread_self() == bsg_g_primaryMachThread) { BSG_KSLOG_DEBUG("This is the primary exception thread. Activating " "secondary thread."); - if (thread_resume(bsg_g_secondaryMachThread) != KERN_SUCCESS) { + if (thread_resume(g_secondaryMachThread) != KERN_SUCCESS) { BSG_KSLOG_DEBUG("Could not activate secondary thread. " "Restoring original exception ports."); - bsg_ksmachexc_i_restoreExceptionPorts(); + ksmachexc_i_restoreExceptionPorts(); } } else { BSG_KSLOG_DEBUG("This is the secondary exception thread. Restoring " "original exception ports."); - bsg_ksmachexc_i_restoreExceptionPorts(); + ksmachexc_i_restoreExceptionPorts(); } if (wasHandlingCrash) { @@ -330,7 +326,7 @@ bool bsg_kscrashsentry_installMachHandler( } bsg_g_installed = 1; - if (bsg_ksmachisBeingTraced()) { + if (bsg_ksmach_isBeingTraced()) { // Different debuggers hook into different exception types. // For example, GDB uses EXC_BAD_ACCESS for single stepping, // and LLDB uses EXC_SOFTWARE to stop a debug session. @@ -345,7 +341,7 @@ bool bsg_kscrashsentry_installMachHandler( BSG_KSLOG_DEBUG("Backing up original exception ports."); kr = task_get_exception_ports( thisTask, mask, bsg_g_previousExceptionPorts.masks, - &bsg_g_previousExceptionPorts.count, bsg_g_previousExceptionPorts.ports, + &g_previousExceptionPorts.count, bsg_g_previousExceptionPorts.ports, bsg_g_previousExceptionPorts.behaviors, bsg_g_previousExceptionPorts.flavors); if (kr != KERN_SUCCESS) { @@ -353,10 +349,10 @@ bool bsg_kscrashsentry_installMachHandler( goto failed; } - if (bsg_g_exceptionPort == MACH_PORT_NULL) { + if (g_exceptionPort == MACH_PORT_NULL) { BSG_KSLOG_DEBUG("Allocating new port with receive rights."); kr = mach_port_allocate(thisTask, MACH_PORT_RIGHT_RECEIVE, - &bsg_g_exceptionPort); + &g_exceptionPort); if (kr != KERN_SUCCESS) { BSG_KSLOG_ERROR("mach_port_allocate: %s", mach_error_string(kr)); goto failed; @@ -385,26 +381,26 @@ bool bsg_kscrashsentry_installMachHandler( pthread_attr_init(&attr); attributes_created = true; pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - error = pthread_create(&bsg_g_secondaryPThread, &attr, + error = pthread_create(&g_secondaryPThread, &attr, &ksmachexc_i_handleExceptions, kThreadSecondary); if (error != 0) { BSG_KSLOG_ERROR("pthread_create_suspended_np: %s", strerror(error)); goto failed; } - bsg_g_secondaryMachThread = pthread_mach_thread_np(bsg_g_secondaryPThread); - context->reservedThreads[BSG_KSCrashReservedThreadTypeMachSecondary] = + bsg_g_secondaryMachThread = pthread_mach_thread_np(g_secondaryPThread); + context->reservedThreads[KSCrashReservedThreadTypeMachSecondary] = bsg_g_secondaryMachThread; BSG_KSLOG_DEBUG("Creating primary exception thread."); - error = pthread_create(&bsg_g_primaryPThread, &attr, + error = pthread_create(&g_primaryPThread, &attr, &ksmachexc_i_handleExceptions, kThreadPrimary); if (error != 0) { BSG_KSLOG_ERROR("pthread_create: %s", strerror(error)); goto failed; } pthread_attr_destroy(&attr); - bsg_g_primaryMachThread = pthread_mach_thread_np(bsg_g_primaryPThread); - context->reservedThreads[BSG_KSCrashReservedThreadTypeMachPrimary] = + bsg_g_primaryMachThread = pthread_mach_thread_np(g_primaryPThread); + context->reservedThreads[KSCrashReservedThreadTypeMachPrimary] = bsg_g_primaryMachThread; BSG_KSLOG_DEBUG("Mach exception handler installed."); @@ -430,26 +426,26 @@ void bsg_kscrashsentry_uninstallMachHandler(void) { // NOTE: Do not deallocate the exception port. If a secondary crash occurs // it will hang the process. - bsg_ksmachexc_i_restoreExceptionPorts(); + ksmachexc_i_restoreExceptionPorts(); thread_t thread_self = bsg_ksmachthread_self(); - if (bsg_g_primaryPThread != 0 && bsg_g_primaryMachThread != thread_self) { + if (g_primaryPThread != 0 && bsg_g_primaryMachThread != thread_self) { BSG_KSLOG_DEBUG("Cancelling primary exception thread."); if (bsg_g_context->handlingCrash) { - thread_terminate(bsg_g_primaryMachThread); + thread_terminate(g_primaryMachThread); } else { - pthread_cancel(bsg_g_primaryPThread); + pthread_cancel(g_primaryPThread); } bsg_g_primaryMachThread = 0; bsg_g_primaryPThread = 0; } - if (bsg_g_secondaryPThread != 0 && bsg_g_secondaryMachThread != thread_self) { + if (g_secondaryPThread != 0 && bsg_g_secondaryMachThread != thread_self) { BSG_KSLOG_DEBUG("Cancelling secondary exception thread."); if (bsg_g_context->handlingCrash) { - thread_terminate(bsg_g_secondaryMachThread); + thread_terminate(g_secondaryMachThread); } else { - pthread_cancel(bsg_g_secondaryPThread); + pthread_cancel(g_secondaryPThread); } bsg_g_secondaryMachThread = 0; bsg_g_secondaryPThread = 0; diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m index b72084e..346bfb3 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m @@ -47,21 +47,11 @@ /** Context to fill with crash information. */ static BSG_KSCrash_SentryContext *bsg_g_context; -static NSException *bsg_lastHandledException = NULL; - // ============================================================================ #pragma mark - Callbacks - // ============================================================================ - // Avoiding static methods due to linker issue. -/** - Capture exception details and write a new report. If the exception was - recorded before, no new report will be generated. - - @param exception The exception to process - */ -void bsg_recordException(NSException *exception); /** Our custom excepetion handler. * Fetch the stack trace from the exception and write a report. @@ -84,30 +74,6 @@ void bsg_ksnsexc_i_handleException(NSException *exception) { bsg_kscrashsentry_uninstall(BSG_KSCrashTypeAll); } - bsg_recordException(exception); - - BSG_KSLOG_DEBUG( - @"Crash handling complete. Restoring original handlers."); - bsg_kscrashsentry_uninstall(BSG_KSCrashTypeAll); - - if (bsg_g_previousUncaughtExceptionHandler != NULL) { - BSG_KSLOG_DEBUG(@"Calling original exception handler."); - bsg_g_previousUncaughtExceptionHandler(exception); - } - } -} - -void bsg_recordException(NSException *exception) { - if (bsg_g_installed) { - BOOL previouslyHandled = exception == bsg_lastHandledException; - if (previouslyHandled) { - BSG_KSLOG_DEBUG(@"Handled exception previously, " - @"exiting exception recorder."); - return; - } - bsg_lastHandledException = exception; - BSG_KSLOG_DEBUG(@"Writing exception info into a new report"); - BSG_KSLOG_DEBUG(@"Suspending all threads."); bsg_kscrashsentry_suspendThreads(); @@ -129,6 +95,15 @@ void bsg_recordException(NSException *exception) { BSG_KSLOG_DEBUG(@"Calling main crash handler."); bsg_g_context->onCrash(); + + BSG_KSLOG_DEBUG( + @"Crash handling complete. Restoring original handlers."); + bsg_kscrashsentry_uninstall(BSG_KSCrashTypeAll); + + if (bsg_g_previousUncaughtExceptionHandler != NULL) { + BSG_KSLOG_DEBUG(@"Calling original exception handler."); + bsg_g_previousUncaughtExceptionHandler(exception); + } } } diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c index fddd699..ef9e17d 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c @@ -48,12 +48,9 @@ void bsg_kscrashsentry_uninstallUserExceptionHandler(void) { } void bsg_kscrashsentry_reportUserException(const char *name, const char *reason, - const char *handledState, - const char *overrides, - const char *metadata, - const char *appState, - const char *config, - int discardDepth, + const char *language, + const char *lineOfCode, + const char *stackTrace, bool terminateProgram) { if (bsg_g_context == NULL) { BSG_KSLOG_WARN("User-reported exception sentry is not installed. " @@ -84,12 +81,9 @@ void bsg_kscrashsentry_reportUserException(const char *name, const char *reason, bsg_g_context->stackTrace = callstack; bsg_g_context->stackTraceLength = callstackCount; bsg_g_context->userException.name = name; - bsg_g_context->userException.handledState = handledState; - bsg_g_context->userException.overrides = overrides; - bsg_g_context->userException.config = config; - bsg_g_context->userException.discardDepth = discardDepth; - bsg_g_context->userException.metadata = metadata; - bsg_g_context->userException.state = appState; + bsg_g_context->userException.language = language; + bsg_g_context->userException.lineOfCode = lineOfCode; + bsg_g_context->userException.customStackTrace = stackTrace; BSG_KSLOG_DEBUG("Calling main crash handler."); bsg_g_context->onCrash(); diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h index 103f338..3e53830 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h @@ -55,25 +55,22 @@ void bsg_kscrashsentry_uninstallUserExceptionHandler(void); * * @param reason A description of why the exception occurred. * - * @param handledState The severity, reason, and handled-ness of the report - * @param appState breadcrumbs and other app environmental info - * @param overrides Report fields overridden by callbacks, collated in the - * final report - * @param metadata additional information to attach to the report - * @param discardDepth The number of frames to discard from the top of the - * stacktrace + * @param language A unique language identifier. + * + * @param lineOfCode A copy of the offending line of code (NULL = ignore). + * + * @param stackTrace JSON encoded array containing stack trace information (one + * frame per array entry). The frame structure can be anything you want, + * including bare strings. * * @param terminateProgram If true, do not return from this function call. * Terminate the program instead. */ - void bsg_kscrashsentry_reportUserException(const char *name, const char *reason, - const char *handledState, - const char *overrides, - const char *metadata, - const char *appState, - const char *config, - int discardDepth, - bool terminateProgram); +void bsg_kscrashsentry_reportUserException(const char *name, const char *reason, + const char *language, + const char *lineOfCode, + const char *stackTrace, + bool terminateProgram); #ifdef __cplusplus } diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c index dae15bf..df490bf 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c @@ -29,13 +29,6 @@ #include "BSG_KSDynamicLinker.h" #include "BSG_KSMach.h" -/** - * Mask to strip pointer authentication codes from pointers on Arm64e - * devices. Example usage, assuming the usage is guarded for __arm64__: - * uintptr_t ptr_address = ptr & BSG_PACStrippingMaskArm64e; - */ -#define BSG_PACStrippingMaskArm64e 0x0000000fffffffff - /** Remove any pointer tagging from an instruction address * On armv7 the least significant bit of the pointer distinguishes * between thumb mode (2-byte instructions) and normal mode (4-byte @@ -177,13 +170,7 @@ int bsg_ksbt_backtraceThreadState( } for (; i < maxEntries; i++) { -#if defined(__arm64__) - // Strip program auth code from address prior to storing address. - // Intended for Arm64e but is a no-op on other Arm64 archs. - backtraceBuffer[i] = frame.return_address & BSG_PACStrippingMaskArm64e; -#else backtraceBuffer[i] = frame.return_address; -#endif if (backtraceBuffer[i] == 0 || frame.previous == 0 || bsg_ksmachcopyMem(frame.previous, &frame, sizeof(frame)) != KERN_SUCCESS) { diff --git a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c index 7f79499..cbbccb9 100644 --- a/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c +++ b/Example/new/Pods/Bugsnag/Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c @@ -37,9 +37,7 @@ uint32_t bsg_ksdlimageNamed(const char *const imageName, bool exactMatch) { for (uint32_t iImg = 0; iImg < imageCount; iImg++) { const char *name = _dyld_get_image_name(iImg); - if (name == NULL) { - continue; // name is null if the index is out of range per dyld(3) - } else if (exactMatch) { + if (exactMatch) { if (strcmp(name, imageName) == 0) { return iImg; } @@ -79,9 +77,6 @@ const uint8_t *bsg_ksdlimageUUID(const char *const imageName, bool exactMatch) { } uintptr_t bsg_ksdlfirstCmdAfterHeader(const struct mach_header *const header) { - if (header == NULL) { - return 0; - } switch (header->magic) { case MH_MAGIC: case MH_CIGAM: @@ -136,9 +131,6 @@ uint32_t bsg_ksdlimageIndexContainingAddress(const uintptr_t address) { uintptr_t bsg_ksdlsegmentBaseOfImageIndex(const uint32_t idx) { const struct mach_header *header = _dyld_get_image_header(idx); - if (header == NULL) { - return 0; - } // Look for a segment command and return the file image address. uintptr_t cmdPtr = bsg_ksdlfirstCmdAfterHeader(header); @@ -177,9 +169,6 @@ bool bsg_ksdldladdr(const uintptr_t address, Dl_info *const info) { return false; } const struct mach_header *header = _dyld_get_image_header(idx); - if (header == NULL) { - return false; - } const uintptr_t imageVMAddrSlide = (uintptr_t)_dyld_get_image_vmaddr_slide(idx); const uintptr_t addressWithSlide = address - imageVMAddrSlide; diff --git a/Example/new/Pods/Crashlytics/README.md b/Example/new/Pods/Crashlytics/README.md index 2715a06..db7883d 100644 --- a/Example/new/Pods/Crashlytics/README.md +++ b/Example/new/Pods/Crashlytics/README.md @@ -1,6 +1,6 @@ ![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) -Part of [Google Fabric](https://get.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). +Part of [Twitter Fabric](https://www.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). ## Setup @@ -33,7 +33,8 @@ Part of [Google Fabric](https://get.fabric.io), [Crashlytics](http://try.crashly ## Resources -* [Documentation](https://docs.fabric.io/apple/crashlytics/overview.html) -* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) +* [Documentation](https://docs.fabric.io/ios/crashlytics/index.html) +* [Forums](https://twittercommunity.com/c/fabric/crashlytics) * [Website](http://try.crashlytics.com/) * Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) +* Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics index e5a85e3..3079d38 100755 Binary files a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics and b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics differ diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h index 8deacbe..710eb50 100644 --- a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h +++ b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h @@ -72,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN * * @param itemPriceOrNil The purchased item's price. * @param currencyOrNil The ISO4217 currency code. Example: USD - * @param purchaseSucceededOrNil Was the purchase successful or unsuccessful + * @param purchaseSucceededOrNil Was the purchase succesful or unsuccesful * @param itemNameOrNil The human-readable form of the item's name. Example: * @param itemTypeOrNil The type, or genre of the item. Example: Song * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU @@ -100,7 +100,7 @@ NS_ASSUME_NONNULL_BEGIN * * @param levelNameOrNil The name of the level completed, E.G. "1" or "Training" * @param scoreOrNil The score the user completed the level with. - * @param levelCompletedSuccesfullyOrNil A boolean representing whether or not the level was completed successfully. + * @param levelCompletedSuccesfullyOrNil A boolean representing whether or not the level was completed succesfully. * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. */ + (void)logLevelEnd:(nullable NSString *)levelNameOrNil @@ -189,7 +189,7 @@ NS_ASSUME_NONNULL_BEGIN * * @param eventName The human-readable name for the event. * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. Attribute keys - * must be NSString and values must be NSNumber or NSString. + * must be NSString and and values must be NSNumber or NSString. * @discussion How we treat NSNumbers: * We will provide information about the distribution of values over time. * diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h index a8ff3b0..6e3a515 100644 --- a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h +++ b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h @@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy, readonly) NSDictionary *customKeys; @property (nonatomic, copy, readonly) NSString *bundleVersion; @property (nonatomic, copy, readonly) NSString *bundleShortVersionString; -@property (nonatomic, readonly, nullable) NSDate *crashedOnDate; +@property (nonatomic, copy, readonly) NSDate *crashedOnDate; @property (nonatomic, copy, readonly) NSString *OSVersion; @property (nonatomic, copy, readonly) NSString *OSBuildVersion; @@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN /** * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can * use this class to get information about the event, and can also set some values after the - * event has occurred. + * event has occured. **/ @interface CLSReport : NSObject diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h index 7104ca8..34288f1 100644 --- a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h +++ b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h @@ -179,7 +179,7 @@ NS_ASSUME_NONNULL_BEGIN * Crashlytics. * * @param name The name of the custom exception - * @param reason The reason this exception occurred + * @param reason The reason this exception occured * @param frameArray An array of CLSStackFrame objects */ - (void)recordCustomExceptionName:(NSString *)name reason:(nullable NSString *)reason frameArray:(CLS_GENERIC_NSARRAY(CLSStackFrame *) *)frameArray; @@ -224,45 +224,23 @@ NS_ASSUME_NONNULL_BEGIN /** * * Called when a Crashlytics instance has determined that the last execution of the - * application resulted in a saved report. This is called synchronously on Crashlytics + * application ended in a crash. This is called synchronously on Crashlytics * initialization. Your delegate must invoke the completionHandler, but does not need to do so * synchronously, or even on the main thread. Invoking completionHandler with NO will cause the * detected report to be deleted and not submitted to Crashlytics. This is useful for * implementing permission prompts, or other more-complex forms of logic around submitting crashes. * - * Instead of using this method, you should try to make use of -crashlyticsDidDetectReportForLastExecution: - * if you can. - * * @warning Failure to invoke the completionHandler will prevent submissions from being reported. Watch out. * * @warning Just implementing this delegate method will disable all forms of synchronous report submission. This can * impact the reliability of reporting crashes very early in application launch. * - * @param report The CLSReport object representing the last detected report + * @param report The CLSReport object representing the last detected crash * @param completionHandler The completion handler to call when your logic has completed. * */ - (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler; -/** - * - * Called when a Crashlytics instance has determined that the last execution of the - * application resulted in a saved report. This method differs from - * -crashlyticsDidDetectReportForLastExecution:completionHandler: in three important ways: - * - * - it is not called synchronously during initialization - * - it does not give you the ability to prevent the report from being submitted - * - the report object itself is immutable - * - * Thanks to these limitations, making use of this method does not impact reporting - * reliabilty in any way. - * - * @param report The read-only CLSReport object representing the last detected report - * - */ - -- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report; - /** * If your app is running on an OS that supports it (OS X 10.9+, iOS 7.0+), Crashlytics will submit * most reports using out-of-process background networking operations. This results in a significant diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist index ab886b6..aa0f04f 100644 Binary files a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist and b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist differ diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/submit b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/submit index 3fda5cf..1432b06 100755 Binary files a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/submit and b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/submit differ diff --git a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM index 6586420..31b45b6 100755 Binary files a/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM and b/Example/new/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM differ diff --git a/Example/new/Pods/Crashlytics/submit b/Example/new/Pods/Crashlytics/submit index 3fda5cf..1432b06 100755 Binary files a/Example/new/Pods/Crashlytics/submit and b/Example/new/Pods/Crashlytics/submit differ diff --git a/Example/new/Pods/Fabric/README.md b/Example/new/Pods/Fabric/README.md index 9eca610..14852f7 100644 --- a/Example/new/Pods/Fabric/README.md +++ b/Example/new/Pods/Fabric/README.md @@ -4,15 +4,15 @@ ## Overview -[Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. +[Fabric](https://www.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Twitter and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. -For a full list of SDK provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). +For a full list of SDK provided through Fabric visit https://fabric.io/kits ## Setup The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. -1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. +1. Visit https://fabric.io/sign_up to create your Fabric account and to download Fabric.app 1. Open Fabric.app, login and select an SDK to install. @@ -30,13 +30,14 @@ The Fabric Pod is a dependency for all Fabric SDKs and is included when installi ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) -1. Initialize the SDK by inserting code outlined in Fabric.app. +1. Initialize the SDK by inserting code outlined in the Fabric.app. 1. Run your app to finish the installation. ## Resources * [Documentation](https://docs.fabric.io/) -* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) -* [Website](https://get.fabric.io) +* [Forums](https://twittercommunity.com/c/fabric) +* [Website](https://www.fabric.io) * Follow us on Twitter: [@fabric](https://twitter.com/fabric) +* Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) diff --git a/Example/new/Pods/Fabric/iOS/Fabric.framework/Fabric b/Example/new/Pods/Fabric/iOS/Fabric.framework/Fabric index ffaceb6..85b2922 100755 Binary files a/Example/new/Pods/Fabric/iOS/Fabric.framework/Fabric and b/Example/new/Pods/Fabric/iOS/Fabric.framework/Fabric differ diff --git a/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h b/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h index 3a9355a..e35f9ce 100644 --- a/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h +++ b/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h @@ -21,11 +21,22 @@ #define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) -#if !__has_feature(nullability) - #define nonnull - #define nullable - #define _Nullable - #define _Nonnull +#if __has_feature(nullability) + #define fab_nullable nullable + #define fab_nonnull nonnull + #define fab_null_unspecified null_unspecified + #define fab_null_resettable null_resettable + #define __fab_nullable __nullable + #define __fab_nonnull __nonnull + #define __fab_null_unspecified __null_unspecified +#else + #define fab_nullable + #define fab_nonnull + #define fab_null_unspecified + #define fab_null_resettable + #define __fab_nullable + #define __fab_nonnull + #define __fab_null_unspecified #endif #ifndef NS_ASSUME_NONNULL_BEGIN @@ -40,11 +51,9 @@ /** * The following macros are defined here to provide * backwards compatability. If you are still using - * them you should migrate to the native nullability - * macros. + * them you should migrate to the new versions that + * are defined above. */ -#define fab_nullable nullable -#define fab_nonnull nonnull #define FAB_NONNULL __fab_nonnull #define FAB_NULLABLE __fab_nullable #define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN diff --git a/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h b/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h index ecbdb53..23955fd 100644 --- a/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h +++ b/Example/new/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h @@ -71,11 +71,6 @@ NS_ASSUME_NONNULL_BEGIN */ - (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); -/** - * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. - */ -+ (instancetype)new FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); - @end NS_ASSUME_NONNULL_END diff --git a/Example/new/Pods/Fabric/iOS/Fabric.framework/Info.plist b/Example/new/Pods/Fabric/iOS/Fabric.framework/Info.plist index 2b862ba..298e1dd 100644 Binary files a/Example/new/Pods/Fabric/iOS/Fabric.framework/Info.plist and b/Example/new/Pods/Fabric/iOS/Fabric.framework/Info.plist differ diff --git a/Example/new/Pods/Fabric/iOS/Fabric.framework/uploadDSYM b/Example/new/Pods/Fabric/iOS/Fabric.framework/uploadDSYM index 57114f5..5c5acb0 100755 Binary files a/Example/new/Pods/Fabric/iOS/Fabric.framework/uploadDSYM and b/Example/new/Pods/Fabric/iOS/Fabric.framework/uploadDSYM differ diff --git a/Example/new/Pods/Fabric/upload-symbols b/Example/new/Pods/Fabric/upload-symbols index a9f011b..3340f0f 100755 Binary files a/Example/new/Pods/Fabric/upload-symbols and b/Example/new/Pods/Fabric/upload-symbols differ diff --git a/Example/new/Pods/Fabric/uploadDSYM b/Example/new/Pods/Fabric/uploadDSYM index 57114f5..010d87a 100755 Binary files a/Example/new/Pods/Fabric/uploadDSYM and b/Example/new/Pods/Fabric/uploadDSYM differ diff --git a/Example/new/Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h b/Example/new/Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h deleted file mode 120000 index a54c96f..0000000 --- a/Example/new/Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h \ No newline at end of file diff --git a/Example/new/Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h b/Example/new/Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h deleted file mode 120000 index a54c96f..0000000 --- a/Example/new/Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h \ No newline at end of file diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h index 6403898..145f164 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h @@ -44,7 +44,6 @@ typedef NS_ENUM(NSUInteger, JGProgressHUDStyle) { JGProgressHUDStyleDark }; -#if TARGET_OS_IOS /** Interaction types. */ @@ -56,7 +55,6 @@ typedef NS_ENUM(NSUInteger, JGProgressHUDInteractionType) { /** Block no touches. */ JGProgressHUDInteractionTypeBlockNoTouches }; -#endif /** Parallax Modes. diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.h index 4a75298..5fddbe4 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.h @@ -97,29 +97,20 @@ */ @property (nonatomic, strong, nonnull) JGProgressHUDAnimation *animation; -#if TARGET_OS_IOS /** Interaction type of the HUD. Determines whether touches should be let through to the views behind the HUD. @sa JGProgressHUDInteractionType. @b Default: JGProgressHUDInteractionTypeBlockAllTouches. */ @property (nonatomic, assign) JGProgressHUDInteractionType interactionType; -#endif /** - Parallax mode for the HUD. This setting determines whether the HUD should have a parallax (@c UIDeviceMotion) effect. This effect is controlled by device motion on iOS and remote touchpad panning gestures on tvOS. + Parallax mode for the HUD. This setting determines whether the HUD should have a parallax (@c UIDeviceMotion) effect. @sa JGProgressHUDParallaxMode. @b Default: JGProgressHUDParallaxModeDevice. */ @property (nonatomic, assign) JGProgressHUDParallaxMode parallaxMode; -#if TARGET_OS_TV -/** - When this property is set to @c YES the HUD will try to become focused, which prevents interactions with the @c targetView. If set to @c NO the HUD will not become focused and interactions with @c targetView remain possible. Default: @c YES. - */ -@property (nonatomic, assign) BOOL wantsFocus; -#endif - /** If the HUD should always have the same width and height. @b Default: NO. diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.m index 006393b..3125086 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUD.m @@ -63,7 +63,7 @@ @implementation JGProgressHUD #pragma mark - Keyboard -static CGRect keyboardFrame = (CGRect){{0.0, 0.0}, {0.0, 0.0}}; +static CGRect keyboardFrame = (CGRect){{0.0f, 0.0f}, {0.0f, 0.0f}}; #if TARGET_OS_IOS + (void)keyboardFrameWillChange:(NSNotification *)notification { @@ -140,13 +140,13 @@ - (instancetype)initWithStyle:(JGProgressHUDStyle)style { _shadowView = [[UIView alloc] init]; _shadowView.backgroundColor = [UIColor blackColor]; _shadowView.userInteractionEnabled = NO; - _shadowView.layer.shadowOpacity = 1.0; + _shadowView.layer.shadowOpacity = 1.0f; _shadowView.alpha = 0.0; _shadowMaskLayer = [CAShapeLayer layer]; _shadowMaskLayer.fillRule = kCAFillRuleEvenOdd; _shadowMaskLayer.fillColor = [UIColor blackColor].CGColor; - _shadowMaskLayer.opacity = 1.0; + _shadowMaskLayer.opacity = 1.0f; _shadowView.layer.mask = _shadowMaskLayer; @@ -165,8 +165,6 @@ - (instancetype)initWithStyle:(JGProgressHUDStyle)style { #if TARGET_OS_IOS [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]]; -#elif TARGET_OS_TV - _wantsFocus = YES; #endif } @@ -189,7 +187,7 @@ - (void)setHUDViewFrameCenterWithSize:(CGSize)size insetViewFrame:(CGRect)viewFr break; case JGProgressHUDPositionTopCenter: - frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0; + frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0f; frame.origin.y = CGRectGetMinY(viewFrame); break; @@ -200,17 +198,17 @@ - (void)setHUDViewFrameCenterWithSize:(CGSize)size insetViewFrame:(CGRect)viewFr case JGProgressHUDPositionCenterLeft: frame.origin.x = CGRectGetMinX(viewFrame); - frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0; + frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0f; break; case JGProgressHUDPositionCenter: - frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0; - frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0; + frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0f; + frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0f; break; case JGProgressHUDPositionCenterRight: frame.origin.x = CGRectGetMaxX(viewFrame) - frame.size.width; - frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0; + frame.origin.y = CGRectGetMidY(viewFrame) - size.height/2.0f; break; case JGProgressHUDPositionBottomLeft: @@ -219,7 +217,7 @@ - (void)setHUDViewFrameCenterWithSize:(CGSize)size insetViewFrame:(CGRect)viewFr break; case JGProgressHUDPositionBottomCenter: - frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0; + frame.origin.x = CGRectGetMidX(viewFrame) - size.width/2.0f; frame.origin.y = CGRectGetMaxY(viewFrame) - frame.size.height; break; @@ -291,7 +289,7 @@ - (void)layoutHUD { return; } - if (_targetView == nil) { + if (self.superview == nil) { return; } @@ -344,7 +342,7 @@ - (void)layoutHUD { size.width = uniSize; size.height = uniSize; - CGFloat heightDelta = (uniSize-height)/2.0; + CGFloat heightDelta = (uniSize-height)/2.0f; labelFrame.origin.y += heightDelta; detailFrame.origin.y += heightDelta; @@ -355,16 +353,16 @@ - (void)layoutHUD { size.height = height; } - CGPoint center = CGPointMake(size.width/2.0, size.height/2.0); + CGPoint center = CGPointMake(size.width/2.0f, size.height/2.0f); - indicatorFrame.origin.x = center.x - indicatorFrame.size.width/2.0; - labelFrame.origin.x = center.x - labelFrame.size.width/2.0; - detailFrame.origin.x = center.x - detailFrame.size.width/2.0; + indicatorFrame.origin.x = center.x - indicatorFrame.size.width/2.0f; + labelFrame.origin.x = center.x - labelFrame.size.width/2.0f; + detailFrame.origin.x = center.x - detailFrame.size.width/2.0f; [UIView performWithoutAnimation:^{ self.indicatorView.frame = indicatorFrame; - self->_textLabel.frame = JGProgressHUD_CGRectIntegral(labelFrame); - self->_detailTextLabel.frame = JGProgressHUD_CGRectIntegral(detailFrame); + _textLabel.frame = JGProgressHUD_CGRectIntegral(labelFrame); + _detailTextLabel.frame = JGProgressHUD_CGRectIntegral(detailFrame); }]; [self setHUDViewFrameCenterWithSize:size insetViewFrame:insetFrame]; @@ -401,12 +399,6 @@ - (void)applyCornerRadius { #pragma mark - Showing - (void)cleanUpAfterPresentation { -#if TARGET_OS_TV - if (self.wantsFocus) { - [self.targetView setNeedsFocusUpdate]; - } -#endif - self.hidden = NO; _transitioning = NO; @@ -474,8 +466,7 @@ - (void)showInView:(UIView *)view animated:(BOOL)animated { [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:_targetView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0].active = YES; [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:_targetView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0].active = YES; [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:_targetView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0].active = YES; - - [self setNeedsLayout]; + [self layoutIfNeeded]; _transitioning = YES; @@ -624,7 +615,7 @@ - (void)updateMotionOnHUDView { else { UIInterpolatingMotionEffect *x = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; - CGFloat maxMovement = 20.0; + CGFloat maxMovement = 20.0f; x.minimumRelativeValue = @(-maxMovement); x.maximumRelativeValue = @(maxMovement); @@ -690,7 +681,7 @@ - (UIVisualEffectView *)vibrancyView { UIVibrancyEffect *vibrancyEffect = (self.vibrancyEnabled ? [UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)self.blurView.effect] : nil); _vibrancyView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect]; - + [self.blurView.contentView addSubview:_vibrancyView]; } @@ -768,20 +759,6 @@ - (JGProgressHUDAnimation *)animation { #pragma mark - Setters -#if TARGET_OS_TV -- (void)setWantsFocus:(BOOL)wantsFocus { - if (self.wantsFocus == wantsFocus) { - return; - } - - _wantsFocus = wantsFocus; - - self.userInteractionEnabled = self.wantsFocus; - - [self.targetView setNeedsFocusUpdate]; -} -#endif - - (void)setCornerRadius:(CGFloat)cornerRadius { if (fequal(self.cornerRadius, cornerRadius)) { return; @@ -882,8 +859,8 @@ - (void)setIndicatorView:(JGProgressHUDIndicatorView *)indicatorView { } [UIView performWithoutAnimation:^{ - [self->_indicatorView removeFromSuperview]; - self->_indicatorView = indicatorView; + [_indicatorView removeFromSuperview]; + _indicatorView = indicatorView; if (self.indicatorView != nil) { [self.indicatorView setUpForHUDStyle:self.style vibrancyEnabled:self.vibrancyEnabled]; @@ -934,14 +911,13 @@ - (void)setProgress:(float)progress animated:(BOOL)animated { #pragma mark - Overrides -#if TARGET_OS_IOS - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (self.interactionType == JGProgressHUDInteractionTypeBlockNoTouches) { return nil; } else { UIView *view = [super hitTest:point withEvent:event]; - + if (self.interactionType == JGProgressHUDInteractionTypeBlockAllTouches) { return view; } @@ -952,19 +928,6 @@ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return nil; } } -#elif TARGET_OS_TV -- (NSArray> *)preferredFocusEnvironments { - return @[self]; -} - -- (UIView *)preferredFocusedView { - return nil; -} - -- (BOOL)canBecomeFocused { - return self.wantsFocus; -} -#endif - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == _textLabel || object == _detailTextLabel) { diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h index 81966cd..5761b76 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h @@ -8,9 +8,6 @@ #import "JGProgressHUDImageIndicatorView.h" -/** - An image indicator showing a cross, representing a failed operation. - */ @interface JGProgressHUDErrorIndicatorView : JGProgressHUDImageIndicatorView /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m index 9dd7e3f..5f9188e 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m @@ -12,16 +12,12 @@ @implementation JGProgressHUDErrorIndicatorView - (instancetype)initWithContentView:(UIView *__unused)contentView { - NSBundle *currentBundle = [NSBundle bundleForClass:[self class]]; - NSURL *resourceBundleURL = [currentBundle URLForResource:@"JGProgressHUD" withExtension:@"bundle"]; - NSBundle *resourceBundle = currentBundle; - if (resourceBundleURL) { - resourceBundle = [NSBundle bundleWithURL:resourceBundleURL] ?: currentBundle; - } - + NSBundle *resourceBundle = [NSBundle bundleForClass:[self class]]; + NSString *imgPath = [resourceBundle pathForResource:@"jg_hud_error" ofType:@"png"]; + self = [super initWithImage:[[UIImage imageWithContentsOfFile:imgPath] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; - + return self; } @@ -35,7 +31,7 @@ - (void)updateAccessibility { - (void)setUpForHUDStyle:(JGProgressHUDStyle)style vibrancyEnabled:(BOOL)vibrancyEnabled { [super setUpForHUDStyle:style vibrancyEnabled:vibrancyEnabled]; - + if (style == JGProgressHUDStyleDark) { self.contentView.tintColor = [UIColor whiteColor]; } diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h index 42fe23c..1f05b37 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h @@ -8,9 +8,6 @@ #import "JGProgressHUDAnimation.h" -/** - A simple fade animation that fades the HUD from alpha @c 0.0 to alpha @c 1.0. - */ @interface JGProgressHUDFadeAnimation : JGProgressHUDAnimation /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h index 55fe398..8560177 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h @@ -8,9 +8,6 @@ #import "JGProgressHUDAnimation.h" -/** - An animation that fades in the HUD and expands the HUD from scale @c (0, 0) to a customizable scale, and finally to scale @c (1, 1), creating a bouncing effect. - */ @interface JGProgressHUDFadeZoomAnimation : JGProgressHUDAnimation /** @@ -30,7 +27,7 @@ /** The scale to apply to the HUD when expanding. - @b Default: (1.1, 1.1). + @b Default: (1.1f, 1.1f). */ @property (nonatomic, assign) CGSize expandScale; diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m index f95af60..d30ced2 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m @@ -18,7 +18,7 @@ - (instancetype)init { if (self) { self.shrinkAnimationDuaration = 0.2; self.expandAnimationDuaration = 0.1; - self.expandScale = CGSizeMake(1.1, 1.1); + self.expandScale = CGSizeMake(1.1f, 1.1f); } return self; } @@ -28,15 +28,15 @@ - (instancetype)init { - (void)show { [super show]; - self.progressHUD.alpha = 0.0; - self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1, 0.1); + self.progressHUD.alpha = 0.0f; + self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1f, 0.1f); NSTimeInterval totalDuration = self.expandAnimationDuaration+self.shrinkAnimationDuaration; self.progressHUD.hidden = NO; [UIView animateWithDuration:totalDuration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut) animations:^{ - self.progressHUD.alpha = 1.0; + self.progressHUD.alpha = 1.0f; } completion:nil]; [UIView animateWithDuration:self.shrinkAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) animations:^{ @@ -58,14 +58,14 @@ - (void)hide { NSTimeInterval totalDuration = self.expandAnimationDuaration+self.shrinkAnimationDuaration; [UIView animateWithDuration:totalDuration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut) animations:^{ - self.progressHUD.alpha = 0.0; + self.progressHUD.alpha = 0.0f; } completion:nil]; [UIView animateWithDuration:self.expandAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState) animations:^{ self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(self.expandScale.width, self.expandScale.height); } completion:^(BOOL __unused _finished) { [UIView animateWithDuration:self.shrinkAnimationDuaration delay:0.0 options:(UIViewAnimationOptions)(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionBeginFromCurrentState) animations:^{ - self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1, 0.1); + self.progressHUD.HUDView.transform = CGAffineTransformMakeScale(0.1f, 0.1f); } completion:^(BOOL __unused __finished) { self.progressHUD.HUDView.transform = CGAffineTransformIdentity; diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h index 967ced5..79ccfca 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h @@ -9,9 +9,6 @@ #import "JGProgressHUD-Defines.h" #import "JGProgressHUDIndicatorView.h" -/** - An indeterminate progress indicator showing a @c UIActivityIndicatorView. - */ @interface JGProgressHUDIndeterminateIndicatorView : JGProgressHUDIndicatorView /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m index 1a69631..f09a82a 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m @@ -34,7 +34,7 @@ - (instancetype)init { } - (instancetype)initWithContentView:(UIView *)contentView { - self = [super initWithFrame:(contentView ? contentView.frame : CGRectMake(0.0, 0.0, 50.0, 50.0))]; + self = [super initWithFrame:(contentView ? contentView.frame : CGRectMake(0.0f, 0.0f, 50.0f, 50.0f))]; if (self) { self.opaque = NO; self.backgroundColor = [UIColor clearColor]; diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h index bda9e1b..bb11191 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h @@ -9,9 +9,6 @@ #import "JGProgressHUD-Defines.h" #import "JGProgressHUDIndicatorView.h" -/** - A pie shaped determinate progress indicator. - */ @interface JGProgressHUDPieIndicatorView : JGProgressHUDIndicatorView /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m index 15a65d2..3f1d3e9 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m @@ -44,11 +44,11 @@ - (void)drawInContext:(CGContextRef)ctx { CGRect rect = self.bounds; - CGPoint center = CGPointMake(rect.origin.x + (CGFloat)floor(rect.size.width/2.0), rect.origin.y + (CGFloat)floor(rect.size.height/2.0)); - CGFloat lineWidth = 2.0; - CGFloat radius = (CGFloat)floor(MIN(rect.size.width, rect.size.height)/2.0)-lineWidth; + CGPoint center = CGPointMake(rect.origin.x + (CGFloat)floor(rect.size.height/2.0f), rect.origin.y + (CGFloat)floor(rect.size.height/2.0f)); + CGFloat lineWidth = 2.0f; + CGFloat radius = (CGFloat)floor(MIN(rect.size.width, rect.size.height)/2.0f)-lineWidth; - UIBezierPath *borderPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0.0 endAngle:2.0*(CGFloat)M_PI clockwise:NO]; + UIBezierPath *borderPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0.0f endAngle:2.0f*(CGFloat)M_PI clockwise:NO]; [borderPath setLineWidth:lineWidth]; @@ -67,10 +67,10 @@ - (void)drawInContext:(CGContextRef)ctx { [processPath setLineWidth:radius]; - CGFloat startAngle = -((CGFloat)M_PI/2.0); - CGFloat endAngle = startAngle + 2.0 * (CGFloat)M_PI * self.progress; + CGFloat startAngle = -((CGFloat)M_PI/2.0f); + CGFloat endAngle = startAngle + 2.0f * (CGFloat)M_PI * self.progress; - [processPath addArcWithCenter:center radius:radius/2.0 startAngle:startAngle endAngle:endAngle clockwise:YES]; + [processPath addArcWithCenter:center radius:radius/2.0f startAngle:startAngle endAngle:endAngle clockwise:YES]; [processPath stroke]; } diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h index f348fc3..1c0c186 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h @@ -9,9 +9,6 @@ #import "JGProgressHUD-Defines.h" #import "JGProgressHUDIndicatorView.h" -/** - A ring shaped determinate progress indicator. - */ @interface JGProgressHUDRingIndicatorView : JGProgressHUDIndicatorView /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m index d19d3e8..9a42b26 100755 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m @@ -48,14 +48,14 @@ - (void)drawInContext:(CGContextRef)ctx { CGRect rect = self.bounds; - CGPoint center = CGPointMake(rect.origin.x + (CGFloat)floor(rect.size.width/2.0), rect.origin.y + (CGFloat)floor(rect.size.height/2.0)); + CGPoint center = CGPointMake(rect.origin.x + (CGFloat)floor(rect.size.height/2.0f), rect.origin.y + (CGFloat)floor(rect.size.height/2.0f)); CGFloat lineWidth = self.ringWidth; - CGFloat radius = (CGFloat)floor(MIN(rect.size.width, rect.size.height)/2.0) - lineWidth; + CGFloat radius = (CGFloat)floor(MIN(rect.size.width, rect.size.height)/2.0f) - lineWidth; //Background [self.ringBackgroundColor setStroke]; - UIBezierPath *borderPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0.0 endAngle:2.0*(CGFloat)M_PI clockwise:NO]; + UIBezierPath *borderPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:0.0f endAngle:2.0f*(CGFloat)M_PI clockwise:NO]; [borderPath setLineWidth:lineWidth]; [borderPath stroke]; @@ -63,14 +63,14 @@ - (void)drawInContext:(CGContextRef)ctx { //Progress [self.ringColor setStroke]; - if (self.progress > 0.0) { + if (self.progress > 0.0f) { UIBezierPath *processPath = [UIBezierPath bezierPath]; [processPath setLineWidth:lineWidth]; [processPath setLineCapStyle:(self.roundProgressLine ? kCGLineCapRound : kCGLineCapSquare)]; - CGFloat startAngle = -((CGFloat)M_PI / 2.0); - CGFloat endAngle = startAngle + 2.0 * (CGFloat)M_PI * self.progress; + CGFloat startAngle = -((CGFloat)M_PI / 2.0f); + CGFloat endAngle = startAngle + 2.0f * (CGFloat)M_PI * self.progress; [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; @@ -94,7 +94,7 @@ - (instancetype)init { self.layer.contentsScale = [UIScreen mainScreen].scale; [self.layer setNeedsDisplay]; - self.ringWidth = 3.0; + self.ringWidth = 3.0f; self.ringColor = [UIColor clearColor]; self.ringBackgroundColor = [UIColor clearColor]; } diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h index 105b1fa..b02184e 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h @@ -8,9 +8,6 @@ #import -/** - A wrapper representing properties of a shadow. - */ @interface JGProgressHUDShadow : NSObject - (instancetype __nonnull)initWithColor:(UIColor *__nonnull)color offset:(CGSize)offset radius:(CGFloat)radius opacity:(float)opacity; diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h index 94ac851..0be79a6 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h @@ -8,9 +8,6 @@ #import "JGProgressHUDImageIndicatorView.h" -/** - An image indicator showing a checkmark, representing a failed operation. - */ @interface JGProgressHUDSuccessIndicatorView : JGProgressHUDImageIndicatorView /** diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m index 98bd161..74ed2cb 100644 --- a/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m +++ b/Example/new/Pods/JGProgressHUD/JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m @@ -12,16 +12,12 @@ @implementation JGProgressHUDSuccessIndicatorView - (instancetype)initWithContentView:(UIView *__unused)contentView { - NSBundle *currentBundle = [NSBundle bundleForClass:[self class]]; - NSURL *resourceBundleURL = [currentBundle URLForResource:@"JGProgressHUD" withExtension:@"bundle"]; - NSBundle *resourceBundle = currentBundle; - if (resourceBundleURL) { - resourceBundle = [NSBundle bundleWithURL:resourceBundleURL] ?: currentBundle; - } - + NSBundle *resourceBundle = [NSBundle bundleForClass:[self class]]; + NSString *imgPath = [resourceBundle pathForResource:@"jg_hud_success" ofType:@"png"]; + self = [super initWithImage:[[UIImage imageWithContentsOfFile:imgPath] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]]; - + return self; } @@ -35,7 +31,7 @@ - (void)updateAccessibility { - (void)setUpForHUDStyle:(JGProgressHUDStyle)style vibrancyEnabled:(BOOL)vibrancyEnabled { [super setUpForHUDStyle:style vibrancyEnabled:vibrancyEnabled]; - + if (style == JGProgressHUDStyleDark) { self.contentView.tintColor = [UIColor whiteColor]; } diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png index bbcea6b..ddada69 100644 Binary files a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png and b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png differ diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png index a113cb2..b9ec03b 100644 Binary files a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png and b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png differ diff --git a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png index 95fd913..253fc6c 100644 Binary files a/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png and b/Example/new/Pods/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png differ diff --git a/Example/new/Pods/JGProgressHUD/LICENSE.txt b/Example/new/Pods/JGProgressHUD/LICENSE.txt index 58ec3fa..b32413b 100644 --- a/Example/new/Pods/JGProgressHUD/LICENSE.txt +++ b/Example/new/Pods/JGProgressHUD/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2018 Jonas Gessner +Copyright (c) 2014-2017 Jonas Gessner Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Example/new/Pods/JGProgressHUD/README.md b/Example/new/Pods/JGProgressHUD/README.md index 262d8e4..f4bacd7 100644 --- a/Example/new/Pods/JGProgressHUD/README.md +++ b/Example/new/Pods/JGProgressHUD/README.md @@ -154,21 +154,21 @@ See the Examples project for an example implementation of Requirements ------------ -- Base SDK of iOS/tvOS 11.0 or higher. -- Deployment target of iOS 8.0, tvOS 9.0 or higher. +- Base SDK of iOS/tvOS 11 or higher. +- Deployment target of iOS/tvOS 8.0 or higher. JGProgressHUD can also be used by projects written in Swift. See Installation for details. Documentation ---------------- -Detailed documentation can be found on here.

-Each class and method is well documented, making it easy to quickly get a good overview. To start, see JGProgressHUD.h. +Detailed documentation can be found on CocoaDocs.

+Each method is well documented, making it easy to quickly get a great overview of JGProgressHUD. To start, see JGProgressHUD.h. License --------- MIT License.
-© 2014-2018, Jonas Gessner. +© 2014-2017, Jonas Gessner. Credits ---------- -Created and maintained by Jonas Gessner, © 2014-2018.
+Created and maintained by Jonas Gessner, © 2014-2017.
diff --git a/Example/new/Pods/Local Podspecs/PLPlayerKit.podspec.json b/Example/new/Pods/Local Podspecs/PLPlayerKit.podspec.json index b936c36..8aebc2f 100644 --- a/Example/new/Pods/Local Podspecs/PLPlayerKit.podspec.json +++ b/Example/new/Pods/Local Podspecs/PLPlayerKit.podspec.json @@ -1,6 +1,6 @@ { "name": "PLPlayerKit", - "version": "3.4.6", + "version": "3.4.7", "summary": "Pili iOS video player SDK, RTMP, HLS video streaming supported.", "homepage": "https://github.com/pili-engineering/PLPlayerKit", "license": "Apache License, Version 2.0", @@ -8,7 +8,7 @@ "pili": "pili-coresdk@qiniu.com" }, "source": { - "http": "https://sdk-release.qnsdk.com/PLPlayerKit-iphoneos-v3.4.6.zip" + "http": "https://sdk-release.qnsdk.com/PLPlayerKit-iphoneos-v3.4.7.zip" }, "platforms": { "ios": "8.0" diff --git a/Example/new/Pods/Manifest.lock b/Example/new/Pods/Manifest.lock index 1e62050..b9869e3 100644 --- a/Example/new/Pods/Manifest.lock +++ b/Example/new/Pods/Manifest.lock @@ -14,19 +14,20 @@ PODS: - BlocksKit/UIKit (2.2.5): - BlocksKit/Core - BlocksKit/DynamicDelegate - - Bugsnag (5.17.3) - - Crashlytics (3.12.0): - - Fabric (~> 1.9.0) - - Fabric (1.9.0) - - JGProgressHUD (2.0.3) - - Masonry (1.1.0) + - Bugsnag (5.15.4) + - Crashlytics (3.7.2): + - Fabric (~> 1.6.3) + - Fabric (1.6.7) + - HappyDNS (0.3.10) + - JGProgressHUD (2.0) + - Masonry (1.0.1) - MMMaterialDesignSpinner (0.2.5) - - PLPlayerKit (3.4.6): - - PLPlayerKit/iphoneos (= 3.4.6) - - PLPlayerKit/iphoneos (3.4.6) - - SDWebImage (4.4.5): - - SDWebImage/Core (= 4.4.5) - - SDWebImage/Core (4.4.5) + - PLPlayerKit (3.4.7): + - PLPlayerKit/iphoneos (= 3.4.7) + - PLPlayerKit/iphoneos (3.4.7) + - SDWebImage (4.3.2): + - SDWebImage/Core (= 4.3.2) + - SDWebImage/Core (4.3.2) - WeiboSDK (3.1.3) DEPENDENCIES: @@ -34,6 +35,7 @@ DEPENDENCIES: - Bugsnag - Crashlytics (>= 3.7.2) - Fabric (>= 1.6.7) + - HappyDNS (>= 0.3.10) - JGProgressHUD - Masonry - Masonry (>= 1.0.1) @@ -43,11 +45,12 @@ DEPENDENCIES: - WeiboSDK (>= 3.1.3) SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + trunk: - BlocksKit - Bugsnag - Crashlytics - Fabric + - HappyDNS - JGProgressHUD - Masonry - MMMaterialDesignSpinner @@ -60,16 +63,17 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: BlocksKit: 7f422b971407001178d181a43b99014ea2591fe6 - Bugsnag: a56a5204ebd35e44e56c1f703824705b1d4b5b97 - Crashlytics: a33af323773f73904037dc2e684cd2f0d29f4fe2 - Fabric: 09ef2d9b99b104702bede1acaf469fb8f20a9146 - JGProgressHUD: 12b20a8f4ffe05258f8635c1ab92816e451f904d - Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 + Bugsnag: df1d395695ddf795aa35c23ef4eaef4a04ddcffd + Crashlytics: 2580a9a091e265da4a7a89d2c442aa1c0ea4712c + Fabric: 30e7baf1bb775e776e2e5975a630c173022d7611 + HappyDNS: 06a9fed2796663fd87626dbf02552933265bf059 + JGProgressHUD: c402c0f41fc291ca7e33bba2f999118d9682dd9c + Masonry: a1a931a0d08870ed8ae415a2ea5ea68ebcac77df MMMaterialDesignSpinner: a548042720c2e5f04212048483085d7942ac3e81 - PLPlayerKit: 25795e0605b6ba1c19afb2e913e36ad6bca3bc98 - SDWebImage: ecc03494e973b93b80213649d32175f8d2d17d4d + PLPlayerKit: a4c6da506dc4ae368ae71a95b49e2256f33c0de7 + SDWebImage: 29bd3c0bc1f01e5eb59720847c64ad4c4ca1af5d WeiboSDK: acb067053668102cf07d01aa7604350162c2e466 -PODFILE CHECKSUM: b8e4d3011adae7250551d6868e265422bdfbe1c0 +PODFILE CHECKSUM: 125580bee4fbaff98cc481a161fc9d6987859318 COCOAPODS: 1.10.1 diff --git a/Example/new/Pods/Masonry/Masonry/MASCompositeConstraint.m b/Example/new/Pods/Masonry/Masonry/MASCompositeConstraint.m index 2002a40..ed63ed6 100644 --- a/Example/new/Pods/Masonry/Masonry/MASCompositeConstraint.m +++ b/Example/new/Pods/Masonry/Masonry/MASCompositeConstraint.m @@ -129,12 +129,6 @@ - (void)setInsets:(MASEdgeInsets)insets { } } -- (void)setInset:(CGFloat)inset { - for (MASConstraint *constraint in self.childConstraints) { - constraint.inset = inset; - } -} - - (void)setOffset:(CGFloat)offset { for (MASConstraint *constraint in self.childConstraints) { constraint.offset = offset; diff --git a/Example/new/Pods/Masonry/Masonry/MASConstraint.h b/Example/new/Pods/Masonry/Masonry/MASConstraint.h index 3eaa8a1..70a10c8 100644 --- a/Example/new/Pods/Masonry/Masonry/MASConstraint.h +++ b/Example/new/Pods/Masonry/Masonry/MASConstraint.h @@ -24,13 +24,6 @@ */ - (MASConstraint * (^)(MASEdgeInsets insets))insets; -/** - * Modifies the NSLayoutConstraint constant, - * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following - * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight - */ -- (MASConstraint * (^)(CGFloat inset))inset; - /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following @@ -73,17 +66,17 @@ /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityLow */ -- (MASConstraint * (^)(void))priorityLow; +- (MASConstraint * (^)())priorityLow; /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium */ -- (MASConstraint * (^)(void))priorityMedium; +- (MASConstraint * (^)())priorityMedium; /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh */ -- (MASConstraint * (^)(void))priorityHigh; +- (MASConstraint * (^)())priorityHigh; /** * Sets the constraint relation to NSLayoutRelationEqual @@ -141,7 +134,7 @@ #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin; - (MASConstraint *)rightMargin; @@ -170,13 +163,6 @@ */ - (void)setInsets:(MASEdgeInsets)insets; -/** - * Modifies the NSLayoutConstraint constant, - * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following - * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight - */ -- (void)setInset:(CGFloat)inset; - /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following diff --git a/Example/new/Pods/Masonry/Masonry/MASConstraint.m b/Example/new/Pods/Masonry/Masonry/MASConstraint.m index 52de590..f24ec10 100644 --- a/Example/new/Pods/Masonry/Masonry/MASConstraint.m +++ b/Example/new/Pods/Masonry/Masonry/MASConstraint.m @@ -62,21 +62,21 @@ - (id)init { #pragma mark - MASLayoutPriority proxies -- (MASConstraint * (^)(void))priorityLow { +- (MASConstraint * (^)())priorityLow { return ^id{ self.priority(MASLayoutPriorityDefaultLow); return self; }; } -- (MASConstraint * (^)(void))priorityMedium { +- (MASConstraint * (^)())priorityMedium { return ^id{ self.priority(MASLayoutPriorityDefaultMedium); return self; }; } -- (MASConstraint * (^)(void))priorityHigh { +- (MASConstraint * (^)())priorityHigh { return ^id{ self.priority(MASLayoutPriorityDefaultHigh); return self; @@ -92,13 +92,6 @@ - (id)init { }; } -- (MASConstraint * (^)(CGFloat))inset { - return ^id(CGFloat inset){ - self.inset = inset; - return self; - }; -} - - (MASConstraint * (^)(CGSize))sizeOffset { return ^id(CGSize offset) { self.sizeOffset = offset; @@ -226,7 +219,7 @@ - (MASConstraint *)lastBaseline { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; @@ -276,8 +269,6 @@ - (MASConstraint *)centerYWithinMargins { - (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); } -- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); } - - (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); } - (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); } diff --git a/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.h b/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.h index d9b58f4..8f72b4c 100644 --- a/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.h +++ b/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.h @@ -1,5 +1,5 @@ // -// MASConstraintMaker.h +// MASConstraintBuilder.h // Masonry // // Created by Jonas Budelmann on 20/07/13. @@ -29,7 +29,7 @@ typedef NS_OPTIONS(NSInteger, MASAttribute) { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin, MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin, @@ -74,7 +74,7 @@ typedef NS_OPTIONS(NSInteger, MASAttribute) { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASConstraint *leftMargin; @property (nonatomic, strong, readonly) MASConstraint *rightMargin; @@ -128,7 +128,7 @@ typedef NS_OPTIONS(NSInteger, MASAttribute) { /** * initialises the maker with a default view * - * @param view any MASConstraint are created with this view as the first item + * @param view any MASConstrait are created with this view as the first item * * @return a new MASConstraintMaker */ diff --git a/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.m b/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.m index f11492a..6e40a26 100644 --- a/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.m +++ b/Example/new/Pods/Masonry/Masonry/MASConstraintMaker.m @@ -1,5 +1,5 @@ // -// MASConstraintMaker.m +// MASConstraintBuilder.m // Masonry // // Created by Jonas Budelmann on 20/07/13. @@ -81,7 +81,7 @@ - (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs { #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | MASAttributeFirstBaseline | MASAttributeLastBaseline #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins | MASAttributeCenterYWithinMargins @@ -111,7 +111,7 @@ - (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin]; if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin]; @@ -205,7 +205,7 @@ - (MASConstraint *)lastBaseline { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; diff --git a/Example/new/Pods/Masonry/Masonry/MASViewAttribute.h b/Example/new/Pods/Masonry/Masonry/MASViewAttribute.h index 601c25d..f8eb700 100644 --- a/Example/new/Pods/Masonry/Masonry/MASViewAttribute.h +++ b/Example/new/Pods/Masonry/Masonry/MASViewAttribute.h @@ -1,5 +1,5 @@ // -// MASViewAttribute.h +// MASAttribute.h // Masonry // // Created by Jonas Budelmann on 21/07/13. diff --git a/Example/new/Pods/Masonry/Masonry/MASViewAttribute.m b/Example/new/Pods/Masonry/Masonry/MASViewAttribute.m index e573e8b..7131025 100644 --- a/Example/new/Pods/Masonry/Masonry/MASViewAttribute.m +++ b/Example/new/Pods/Masonry/Masonry/MASViewAttribute.m @@ -1,5 +1,5 @@ // -// MASViewAttribute.m +// MASAttribute.m // Masonry // // Created by Jonas Budelmann on 21/07/13. diff --git a/Example/new/Pods/Masonry/Masonry/MASViewConstraint.h b/Example/new/Pods/Masonry/Masonry/MASViewConstraint.h index ec390d1..5c78f7a 100644 --- a/Example/new/Pods/Masonry/Masonry/MASViewConstraint.h +++ b/Example/new/Pods/Masonry/Masonry/MASViewConstraint.h @@ -1,5 +1,5 @@ // -// MASViewConstraint.h +// MASConstraint.h // Masonry // // Created by Jonas Budelmann on 20/07/13. diff --git a/Example/new/Pods/Masonry/Masonry/MASViewConstraint.m b/Example/new/Pods/Masonry/Masonry/MASViewConstraint.m index 173eec1..e8ccdcb 100644 --- a/Example/new/Pods/Masonry/Masonry/MASViewConstraint.m +++ b/Example/new/Pods/Masonry/Masonry/MASViewConstraint.m @@ -1,5 +1,5 @@ // -// MASViewConstraint.m +// MASConstraint.m // Masonry // // Created by Jonas Budelmann on 20/07/13. @@ -175,7 +175,6 @@ - (void)setSecondViewAttribute:(id)secondViewAttribute { NSMutableArray *children = NSMutableArray.new; for (id attr in attribute) { MASViewConstraint *viewConstraint = [self copy]; - viewConstraint.layoutRelation = relation; viewConstraint.secondViewAttribute = attr; [children addObject:viewConstraint]; } @@ -254,10 +253,6 @@ - (void)setInsets:(MASEdgeInsets)insets { } } -- (void)setInset:(CGFloat)inset { - [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}]; -} - - (void)setOffset:(CGFloat)offset { self.layoutConstant = offset; } diff --git a/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.h b/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.h index 587618d..83be23d 100644 --- a/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.h +++ b/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.h @@ -25,7 +25,7 @@ typedef NS_ENUM(NSUInteger, MASAxisType) { * * @return Array of created MASConstraints */ -- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with each view in the callee. @@ -36,7 +36,7 @@ typedef NS_ENUM(NSUInteger, MASAxisType) { * * @return Array of created/updated MASConstraints */ -- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with each view in the callee. @@ -47,7 +47,7 @@ typedef NS_ENUM(NSUInteger, MASAxisType) { * * @return Array of created/updated MASConstraints */ -- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block; /** * distribute with fixed spacing diff --git a/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.m b/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.m index 831d8cd..e01e009 100644 --- a/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.m +++ b/Example/new/Pods/Masonry/Masonry/NSArray+MASAdditions.m @@ -99,18 +99,19 @@ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:( for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.equalTo(@(fixedItemLength)); if (prev) { + CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); + make.width.equalTo(@(fixedItemLength)); if (i == self.count - 1) {//last one make.right.equalTo(tempSuperView).offset(-tailSpacing); } else { - CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); } } else {//first one make.left.equalTo(tempSuperView).offset(leadSpacing); + make.width.equalTo(@(fixedItemLength)); } }]; prev = v; @@ -121,18 +122,19 @@ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:( for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { - make.height.equalTo(@(fixedItemLength)); if (prev) { + CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); + make.height.equalTo(@(fixedItemLength)); if (i == self.count - 1) {//last one make.bottom.equalTo(tempSuperView).offset(-tailSpacing); } else { - CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); } } else {//first one make.top.equalTo(tempSuperView).offset(leadSpacing); + make.height.equalTo(@(fixedItemLength)); } }]; prev = v; diff --git a/Example/new/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/Example/new/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.m index ab539a2..3569cf8 100644 --- a/Example/new/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.m +++ b/Example/new/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.m @@ -49,7 +49,7 @@ + (NSDictionary *)layoutAttributeDescriptionsByValue { @(NSLayoutAttributeLastBaseline) : @"lastBaseline", #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV @(NSLayoutAttributeLeftMargin) : @"leftMargin", @(NSLayoutAttributeRightMargin) : @"rightMargin", @(NSLayoutAttributeTopMargin) : @"topMargin", diff --git a/Example/new/Pods/Masonry/Masonry/View+MASAdditions.h b/Example/new/Pods/Masonry/Masonry/View+MASAdditions.h index f7343d2..ab1e8ae 100644 --- a/Example/new/Pods/Masonry/Masonry/View+MASAdditions.h +++ b/Example/new/Pods/Masonry/Masonry/View+MASAdditions.h @@ -39,7 +39,7 @@ #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin; @@ -52,16 +52,6 @@ #endif -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000) - -@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0)); - -#endif - /** * a key to associate with this view */ @@ -84,7 +74,7 @@ * * @return Array of created MASConstraints */ -- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with the callee view. @@ -95,7 +85,7 @@ * * @return Array of created/updated MASConstraints */ -- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with the callee view. @@ -106,6 +96,6 @@ * * @return Array of created/updated MASConstraints */ -- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block; +- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; @end diff --git a/Example/new/Pods/Masonry/Masonry/View+MASAdditions.m b/Example/new/Pods/Masonry/Masonry/View+MASAdditions.m index 4fa07b4..b53b68d 100644 --- a/Example/new/Pods/Masonry/Masonry/View+MASAdditions.m +++ b/Example/new/Pods/Masonry/Masonry/View+MASAdditions.m @@ -98,7 +98,7 @@ - (MASViewAttribute *)mas_lastBaseline { #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV - (MASViewAttribute *)mas_leftMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin]; @@ -134,26 +134,6 @@ - (MASViewAttribute *)mas_centerYWithinMargins { #endif -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000) - -- (MASViewAttribute *)mas_safeAreaLayoutGuide { - return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; -} -- (MASViewAttribute *)mas_safeAreaLayoutGuideTop { - return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop]; -} -- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom { - return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; -} -- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft { - return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft]; -} -- (MASViewAttribute *)mas_safeAreaLayoutGuideRight { - return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight]; -} - -#endif - #pragma mark - associated properties - (id)mas_key { diff --git a/Example/new/Pods/Masonry/Masonry/View+MASShorthandAdditions.h b/Example/new/Pods/Masonry/Masonry/View+MASShorthandAdditions.h index 1c19a94..0446056 100644 --- a/Example/new/Pods/Masonry/Masonry/View+MASShorthandAdditions.h +++ b/Example/new/Pods/Masonry/Masonry/View+MASShorthandAdditions.h @@ -36,7 +36,7 @@ #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASViewAttribute *leftMargin; @property (nonatomic, strong, readonly) MASViewAttribute *rightMargin; @@ -49,15 +49,6 @@ #endif -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000) - -@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0)); -@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0)); - -#endif - - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; @@ -90,7 +81,7 @@ MAS_ATTR_FORWARD(lastBaseline); #endif -#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) +#if TARGET_OS_IPHONE || TARGET_OS_TV MAS_ATTR_FORWARD(leftMargin); MAS_ATTR_FORWARD(rightMargin); @@ -103,28 +94,19 @@ MAS_ATTR_FORWARD(centerYWithinMargins); #endif -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000) - -MAS_ATTR_FORWARD(safeAreaLayoutGuideTop); -MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom); -MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft); -MAS_ATTR_FORWARD(safeAreaLayoutGuideRight); - -#endif - - (MASViewAttribute *(^)(NSLayoutAttribute))attribute { return [self mas_attribute]; } -- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block { +- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_makeConstraints:block]; } -- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block { +- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_updateConstraints:block]; } -- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block { +- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_remakeConstraints:block]; } diff --git a/Example/new/Pods/Masonry/README.md b/Example/new/Pods/Masonry/README.md index d428657..3d9013c 100644 --- a/Example/new/Pods/Masonry/README.md +++ b/Example/new/Pods/Masonry/README.md @@ -1,4 +1,4 @@ -# Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Masonry) [![Coverage Status](https://img.shields.io/coveralls/SnapKit/Masonry.svg?style=flat-square)](https://coveralls.io/r/SnapKit/Masonry) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![Pod Version](https://img.shields.io/cocoapods/v/Masonry.svg?style=flat) +#Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Masonry) [![Coverage Status](https://img.shields.io/coveralls/SnapKit/Masonry.svg?style=flat-square)](https://coveralls.io/r/SnapKit/Masonry) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) **Masonry is still actively maintained, we are committed to fixing bugs and merging good quality PRs from the wider community. However if you're using Swift in your project, we recommend using [SnapKit](https://github.com/SnapKit/SnapKit) as it provides better type safety with a simpler API.** @@ -389,17 +389,11 @@ Get busy Masoning Copy the included code snippets to ``~/Library/Developer/Xcode/UserData/CodeSnippets`` to write your masonry blocks at lightning speed! -`mas_make` -> ` [<#view#> mas_makeConstraints:^(MASConstraintMaker *make) { - <#code#> - }];` +`mas_make` -> `[ mas_makeConstraints:^(MASConstraintMaker *make){}];` -`mas_update` -> ` [<#view#> mas_updateConstraints:^(MASConstraintMaker *make) { - <#code#> - }];` +`mas_update` -> `[ mas_updateConstraints:^(MASConstraintMaker *make){}];` -`mas_remake` -> ` [<#view#> mas_remakeConstraints:^(MASConstraintMaker *make) { - <#code#> - }];` +`mas_remake` -> `[ mas_remakeConstraints:^(MASConstraintMaker *make){}];` ## Features * Not limited to subset of Auto Layout. Anything NSLayoutConstraint can do, Masonry can do too! diff --git a/Example/new/Pods/Pods.xcodeproj/project.pbxproj b/Example/new/Pods/Pods.xcodeproj/project.pbxproj index 48a9389..31ebcb3 100644 --- a/Example/new/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/new/Pods/Pods.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ }; ABB048B191245233986A7CD75FE412A5 /* Fabric */ = { isa = PBXAggregateTarget; - buildConfigurationList = D7F975E449170F809EF2F23DFD07B707 /* Build configuration list for PBXAggregateTarget "Fabric" */; + buildConfigurationList = 73FAB66EA93579C69ED9EB71E94C2B72 /* Build configuration list for PBXAggregateTarget "Fabric" */; buildPhases = ( ); dependencies = ( @@ -32,7 +32,7 @@ buildPhases = ( ); dependencies = ( - 890902425D576DA3A0E89615D35D8697 /* PBXTargetDependency */, + 51751B4D15A242332954D9BF50C3034A /* PBXTargetDependency */, ); name = Crashlytics; }; @@ -48,806 +48,878 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0096B5A8BA8E4F2BFD8839D0FE7CD696 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEA006751CA9B17CAAE5833AC73FB5A /* MASLayoutConstraint.m */; }; - 024111A11EA5744CE768CD1DB33494F9 /* BugsnagBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = 6085620410C70F21F83C952C90C87863 /* BugsnagBreadcrumb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 028EEB5ACE866E83B3336986C80D0774 /* JGProgressHUDIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 571B827F6BAAC124E603D6F3B4E6C260 /* JGProgressHUDIndicatorView.m */; }; - 04F3343EB2EA608DB418DEB075A0FD17 /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DF8126FE879296F581FC464176AD4592 /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07E958F34A6A94E94376C9A5474D43D3 /* BugsnagSessionTrackingApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 91AAC4196B7268099DF72F6FD9FDA52F /* BugsnagSessionTrackingApiClient.m */; }; - 08DE9EED4A1910B7C6040304FD949FA1 /* BSG_KSCrashAdvanced.h in Headers */ = {isa = PBXBuildFile; fileRef = 620071B4B0F8455192CAC464B2E973C9 /* BSG_KSCrashAdvanced.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08EE1BB9BBDA14C27AEFDD3D120E2DAB /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5A50D2923E176CA62B82A83094D6D9 /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0958AA191903995C6D8E2D5C5AB8DC9F /* BugsnagCrashReport.m in Sources */ = {isa = PBXBuildFile; fileRef = AF5AF7A34D781C55E7D1888A5C97FF43 /* BugsnagCrashReport.m */; }; - 095DD94E57F29339F0920A48D23F0D99 /* BSG_KSObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = 3E1C4A8A30B767DB4C0DB72DF761EF2D /* BSG_KSObjC.c */; }; - 09B2C5BDBB7CD6118F99765E142B5969 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E7E1505097E53CB8A174F7A3F8C735D7 /* NSMutableDictionary+BlocksKit.m */; }; - 09E958D4C1C8B62D0A18B1B3F6E6297E /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 239FCB262E8CBA5DB80581D8956B4819 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B4E03A69F557C99BC93AF945A064399 /* BSG_KSSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A35207897AE401F4B71D3C12E562895 /* BSG_KSSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CCF5878EA61DD56C85170DF74652612 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2188F95820A9C39AC9B680FB08944F91 /* SDImageCache.m */; }; - 0E93370A610B3A0C9CB07495E02852CF /* BugsnagCrashSentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 14304399DCCB79685B3FBD6B91B780A2 /* BugsnagCrashSentry.m */; }; - 0F6DB5A7EC40ECE024C66249DA183FC4 /* BSG_KSCrashSentry_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = 9484C4E1D6D496C87512AEE556AC43D3 /* BSG_KSCrashSentry_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0FC8733CBC105A978A0C1A5F0E9AC153 /* MFMessageComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F6084E0FEACD6711B1FFE67FB5CC238 /* MFMessageComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 115ACCE253A886181B55773DDC70D6ED /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 01DF55108356F0DB9F283FBEB6593BFD /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 118F951D183D63B09262D230EBF3C8B2 /* BSG_RFC3339DateTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E8025ED85FCAB6DE5F42A047B7DCA03 /* BSG_RFC3339DateTool.m */; }; - 1212617559514315FAFB93E765ADD6FE /* Bugsnag.h in Headers */ = {isa = PBXBuildFile; fileRef = 183EA19F9A679E607F60D80B99273A58 /* Bugsnag.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1212D2B7B4B8D8177BD99492360F60DB /* BugsnagSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3830CDFCD9A01940D4166B7A197AC5 /* BugsnagSession.m */; }; - 13737C16C5683DF04E07F69A0CCEF6C3 /* JGProgressHUDRingIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F3A31497A86443AA3CB021ED086E778 /* JGProgressHUDRingIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13D282DA4D13111F07BA00F967253D70 /* BugsnagSessionFileStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A53EE03E79354704D76B5660736D1E5 /* BugsnagSessionFileStore.m */; }; - 14EA827A4E3FF915FA101FC9FAC97638 /* JGProgressHUDSuccessIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 871E58BD844232917608926D8F919C8F /* JGProgressHUDSuccessIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 154F6E32FBC177C5B3F773375D0A0C1A /* JGProgressHUDShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBEBD92E32D2A27A7F2E472587E8BDC /* JGProgressHUDShadow.m */; }; - 15A814B06A4C85887A01127E0AA1BB38 /* JGProgressHUDIndeterminateIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = FE2C50ED84E079A500E8469E30136767 /* JGProgressHUDIndeterminateIndicatorView.m */; }; - 1631E842664B8680F38F602F7DFE0A1E /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BD0537B364C22782767DDCCC968D3B6 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1674C6D585D343240EC6EA6295637DC8 /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 83F961A191F1CF5EED497F4436B15005 /* MFMessageComposeViewController+BlocksKit.m */; }; - 1755177738D6F76381C9999427850312 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 38D00E65AF2B90C39F3D6A643FF91BD0 /* NSButton+WebCache.m */; }; - 17CFF34B18276A261CAE988D6F115B12 /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D9F1D05F714E8693AADCAB7B4C5BF23C /* BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19D58082E795C97857E3DC04247F406F /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DB43E49809FFBC5915AE79A7BFDD016B /* SDWebImageGIFCoder.m */; }; - 1AF5A2CA3BFE4BBD2683A09368AB04CA /* jg_hud_error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7364A727652C6AF44D00E875AFE2F6D1 /* jg_hud_error@2x.png */; }; - 1C2902B4AAF4635316A1E88E50D47809 /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BFCDA9AF48C1710ABE2D8707712A9EA /* SDWebImageFrame.m */; }; - 1C5CC21D4AAC40B37308E27AD716FBA9 /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = CF79325B4F57DB32357A1D8102A7F33F /* UIView+BlocksKit.m */; }; - 1CEAF7F3840338E3FE8CD251A52676FE /* jg_hud_error@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9A9684DFBEBE74A98285E6F4B4A4BDE1 /* jg_hud_error@3x.png */; }; - 1CFE7401A5D9E1BBA1E6A9317C3F4A59 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 41887EA7A928DFD013E0E02E5F48B651 /* A2BlockInvocation.m */; }; - 1D47B863E7561F94F16AE825B2807724 /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4040CB36277D4F59DF8CBB188B6B7A2F /* UIControl+BlocksKit.m */; }; - 1E5D56FF58658F9F45723CA2940489EE /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD0C0677D523EB6AC0B66D92A53C83E /* MASConstraintMaker.m */; }; - 1E6904A86932F48DB44E6319120368FD /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F1A546DD308C589B3521AE0D338C2BB /* UIImage+ForceDecode.m */; }; - 1F4AFDBC50504674A540A995D133BD1C /* JGProgressHUDErrorIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = E4BFB0AEC2E8617FA8C4EBD49B9909FE /* JGProgressHUDErrorIndicatorView.m */; }; - 1F54F24BFE8DA95F93304856F87CEAC9 /* BugsnagKSCrashSysInfoParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BA4C2B68351540586D5B66C91CCB294 /* BugsnagKSCrashSysInfoParser.m */; }; - 1FA50BEF5B5B38A050B240678B9805DD /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F8226465E6C59DBCBB32DD565714BCA6 /* MFMailComposeViewController+BlocksKit.m */; }; - 1FC1298856F8114627590C4E25F90929 /* BSG_KSCrashReportFilterCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = E07D4445DE0FD7228FE50B6B4112F9E8 /* BSG_KSCrashReportFilterCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 207941E0989E53559952285ED1D46F7A /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B0A4E2D0EDEC8D5E4CEC092C73AE7CF1 /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27AD265F4C7E44052B810F47D2308D73 /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = F338018BE87D0F7F0F1686F2D894C5C3 /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27E17C2BFD36A2F4964F10999797804C /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FD581C1B61046C150334756E9F592F /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28993023A3BD4B130979AFDDB3309919 /* JGProgressHUDAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = FA0F22BF8B9B795C1CE792D06D65245E /* JGProgressHUDAnimation.m */; }; - 2A14C243CAD50E4BF63A82DDC0822FC5 /* BSG_KSCrashCallCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = A231AAD347CA5F6101FBA16159E28699 /* BSG_KSCrashCallCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2A4586473C09CB0CD00BC81C4490C58C /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A781A018CBD64210F8C869C7A1474030 /* SDWebImagePrefetcher.m */; }; - 2A88420BA22D8D14B518A37905F568F7 /* BugsnagSessionFileStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D9DEC06EC7E475908D72BDCCF6BC4564 /* BugsnagSessionFileStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AE67A789516B45F1494CC64FA69B095 /* BSG_KSCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B22A60B1F7AAAEBC67DC907FA1F2F0 /* BSG_KSCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CF40E58CA3070F2203187427FF7F0A9 /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB27E5EBE707DE35E522E54F8FA0D6D /* SDWebImageCoderHelper.m */; }; - 2D04EBA9070FBB0B6BE0D7068A0B5438 /* BSG_KSCrashType.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D6239A0D6613B2AC81A11DD74DD54BB /* BSG_KSCrashType.c */; }; - 2EA029186C7BBCEA3D3454EA6FBFD31A /* JGProgressHUDImageIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = DDDE926727F8BF3961FB5695D3483585 /* JGProgressHUDImageIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EDEDA28C27FE07EDA788D6C75FFE9A9 /* UITextField+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB4F8F66D53D85949BB4B7B79306C93 /* UITextField+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FD7AEA0BDEE24C1F4BB2C8D7FB67BBA /* JGProgressHUDAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C700CB0DE6AC90F84CF4463C3FFE9A28 /* JGProgressHUDAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 314DA1DBBC2FAF2BAC4A803DC80E9DE9 /* BSG_KSObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = E384EDA31D5313B1C5F638179EDD6414 /* BSG_KSObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35179814B41FC6FB86DC69B8F0DEADA9 /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B3367DD199FAC112AAEA65A112D72A90 /* NSURLConnection+BlocksKit.m */; }; - 35E4CBEA1E31DA7AC088E0B7B15785F0 /* BSG_KSCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = E47E5838735CC36CFABD17D029D26C3B /* BSG_KSCrash.m */; }; - 36475328CE76907D3210B074AF0589A5 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E9437C5995DF88E19AB2847C00FECF6D /* NSTimer+BlocksKit.m */; }; - 36576BE33DFC5935A84010F60F2427D5 /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C608245B9ECC955C837BE4C7F82543 /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37FFE933E50E2D3C4920BC07C537DB4F /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76A9BEEB5654E85F86D1D22AA5E4BF6B /* UIView+WebCacheOperation.m */; }; - 3994F4597FB834FB2DDBBF30FD25C713 /* BugsnagCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC34861D828ADCDE3C3BA7BF3632FEF /* BugsnagCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A0CA9EDAC285474B5B11798FC37D909 /* BSG_KSCrashSentry_User.h in Headers */ = {isa = PBXBuildFile; fileRef = A4E27700DF6E5486F91E0F37F189C817 /* BSG_KSCrashSentry_User.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A3457C963F52B29E09CCC5137084BCC /* BSG_KSCrashSentry_User.c in Sources */ = {isa = PBXBuildFile; fileRef = 86AEB27B3F1C1904B9DF792547C4C09C /* BSG_KSCrashSentry_User.c */; }; - 3A6E5D4182DC44657A7218493AD57CC2 /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B56B2C4A1E337397102C310A36901FC6 /* NSImage+WebCache.m */; }; - 3B0044F1B1139ECD0A530E39C056ABE7 /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CAEC40467264D1A4CA3BB6EB2ED95D8 /* UIBarButtonItem+BlocksKit.m */; }; - 3C68532741497B03C92DF7157410CE1B /* BSG_KSString.c in Sources */ = {isa = PBXBuildFile; fileRef = 6A6E4693DB3266D5A2268E0CC5FADC04 /* BSG_KSString.c */; }; - 3D6EDF7075EE819F0C2F0CAD61A49A41 /* BSGSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = C4555DC09BC83711A2DE01F44808B471 /* BSGSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F23A716808341B5E318B01D77AD884E /* BSG_KSString.h in Headers */ = {isa = PBXBuildFile; fileRef = 39FE5DCA31E771F6AEFA9DCF622FBE0C /* BSG_KSString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F61F42D45E81580CC76022854C4A62B /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7D8C162D2853D539FA2BFE520A4FB3 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FEF20DC998594E48D7EF9E18A4A0A18 /* BSG_KSCrashSentry_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 377B2564544D5319DE9C2231377FA4CE /* BSG_KSCrashSentry_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4015CC040ADEC1A2F6545D4E63F88978 /* BSG_KSCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = 6482A315DA041E27C2A72161A56FA211 /* BSG_KSCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 404C2E35C2ED10FF804ECC59CECD4AC4 /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 14B7C90729F7C37896E4326397D97F7E /* UIWebView+BlocksKit.m */; }; - 40B4018D4EE72CF74283AB97D13C67C4 /* UIView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E62EC28A8EC65CDE7FB2CD0171A2C220 /* UIView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 412838BEC5062F1C28DE069249DAE580 /* JGProgressHUDShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = 789AD784FB77029826933E443930DE7E /* JGProgressHUDShadow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 415871C6857A770A415E1CDBF7E5F4C4 /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AAA75437AB3CEBAF98EF43FC1339602 /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 416C56CC1F37B4181DA81CA83E64649B /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = C30735AFE6C5E7E60538E592F5E1553A /* NSObject+BKBlockObservation.m */; }; - 41E5536052433C7D5D9C6B47DEBB70BC /* UIPopoverController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 50754BF7A639707689AB34ACB6DA44C3 /* UIPopoverController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 427E03FBB7F5978384C6C10FD9EEF2E1 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A5917793C64E22C73C5290EF616C0111 /* UIImageView+HighlightedWebCache.m */; }; - 428C01DB6FB4200D794CC8257AA37FAD /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B28C2446973DCFC30D2E97CE16781B15 /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42947699890A199B08A896144A878D80 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = AC65C7EE911F31493B1BA8173CCB128E /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43A8A521B9AE1632682D25754E5F4669 /* BugsnagConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D65C1A20AD2DF0E78C2AC2F84978D6 /* BugsnagConfiguration.m */; }; - 44525D642D73E061061CA5EE1C2D243E /* JGProgressHUDImageIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 03DDC18246077DCA728630C48FC74B8E /* JGProgressHUDImageIndicatorView.m */; }; - 4546D8FA8BEB9D956EF7439EC5209C7C /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E32525D7B85252EB4865D8AA9C32C71 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45732E628768FC16BC30C873C827D17F /* JGProgressHUDRingIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE82C9C38BD2462FEBE3EB76A4D3401 /* JGProgressHUDRingIndicatorView.m */; }; - 45B814C647139B9AFE849AEC43AE89AA /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E47BA0D76276FDC2BF483C5A67B06E5E /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46692A2E77157B00827182C8DC686F72 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E4C81C0A7D50FC98C89DDE886179D3B /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C7F9E87D337D42DDA3B88B201DB4984 /* BugsnagFileStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E223F40F19B7A69403C425BD7914D587 /* BugsnagFileStore.m */; }; - 4CE091F886EC6324673EFE0AEBBEA0FE /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C3C1EFD6FC805355664D10F9412E17 /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D8E3B9827F77A2BB624A6A9EB60B20A /* BSG_KSSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = EFC02E35E088BA6357BE1057EE278B7B /* BSG_KSSignalInfo.c */; }; - 4DB92E8CE6E0817BCE4656C5DE7A46F6 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = D350C3F1638986C7578AF3B0C0905CAB /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4EA5470F5D0C8EA30666DC4BCE29DF5B /* BugsnagApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C1A9034CDE515C4DA19B02E136C9FC9A /* BugsnagApiClient.m */; }; - 4EF3747FDC6CB2681EEE334A0FA2D0EA /* BSG_KSCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 095F344F673333A54E26618BDB8A960A /* BSG_KSCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5048F075FA25FF298B69176CD277C8BC /* BugsnagErrorReportApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A59CC9ECFE59BFDE7A5F0F3802862F /* BugsnagErrorReportApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 518DDFA2ECE10A6529BA7785938499BF /* BugsnagConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E438142310E34F101C8FD33159A0933 /* BugsnagConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 51D55FC60952C14EB3EB7E84E6CA2DCD /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 96AD337CAA005D9F254FD81BE8EDBEBF /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 520CFDD66D96B150707F310F71BDD5CD /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FC3BF20679DFB9B1A52566CC44D9F4 /* UIActionSheet+BlocksKit.m */; }; - 5323B84DE27F38137DEAC916CF282411 /* BugsnagHandledState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D13A63F33DA2AE1573C5B54904A0FB2 /* BugsnagHandledState.m */; }; - 5333A897EB9E6FDEA98815B4EDA82FDE /* BSG_KSBacktrace_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 44D35797B86D3EDCC232ABD7C2C4BBC2 /* BSG_KSBacktrace_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 538DEEF083E2649D010770A08F43FC24 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = C05CC332B414566181226061F397372A /* UIImage+MultiFormat.m */; }; - 542F34275919E0C58F0B2B099EEA4567 /* MFMailComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F4F16ED4839C070342A08F128A1E31 /* MFMailComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56868D2C124DC00081C00B04E3869D7A /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D960317C01D6776925C2447025FF50A /* UIImage+GIF.m */; }; - 56AD56D65FD9A0F9267BEB83A866D441 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = EF76B9C4B10F4AC698B82872D5E813B3 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56F7756A56038F0035C6E9D46A195A68 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE0B34C9D5E46CAC8721123E9AC453F /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 572D05B146EAA3EF5530A0D0E34904A0 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB3DAAA5A4238891EC9CB6690813FFE /* MASViewConstraint.m */; }; - 5781F2F750B747412ACC5AB6572D772F /* BSG_KSSafeCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = E920309F16EE5134B7E7B8098A86883F /* BSG_KSSafeCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58F3AC8B4E8E2F53A63452C1D79CC3C6 /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A524512E5070FEA04B9810908E18C20 /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 593330748ACCA06E68C6795100C9833C /* BSG_KSCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3B3FD14963AB9061DE31ECCB1FA96A /* BSG_KSCrashDoctor.m */; }; - 59EA578EED8BAC126FDC60C32AE11521 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 01724419BA7F4AAE9F774A3FC1D1BB62 /* NSLayoutConstraint+MASDebugAdditions.m */; }; - 5A0B9694311FDC9FF1294BAEF31D3C53 /* BugsnagCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DF8C1CB33B6327266026B7EB0A1ADE6 /* BugsnagCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A404A9BCE5D7D0DC42D783A759F3B47 /* BugsnagBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = C26D251AFF9C7C0EA1481D9FB467125E /* BugsnagBreadcrumb.m */; }; - 5B4D1467DB51A770B042D078CC0665D7 /* BSG_KSSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 95C463090D33F26A371C1FA30EACA51A /* BSG_KSSystemInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B5EDD2FB314E09CBFD0252C5998BE80 /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C15A9FD7B4E4CA463821B8D1749E35 /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B88919F332E967FC4EB25E69A69B414 /* BugsnagSessionTrackingPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = 876092BBDD6B62B009CDD6AE6D0E36A4 /* BugsnagSessionTrackingPayload.m */; }; - 5BFE139049E51141F6F6D43C3C6499F9 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE327418CFBA5B024A883A66C92E855 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D64B327957D3C9ED422E0E5D7927F45 /* jg_hud_success@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 281CF056D8C65534E11335F7E2B99BA5 /* jg_hud_success@3x.png */; }; - 5E51780B9BCC699753AD64FEFAC2C075 /* BSG_KSCrashSentry_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = CAB0A18D09E631CB5C08360C35DDDB8E /* BSG_KSCrashSentry_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FD9274EB113A9AFFDA4D0AF72B2292B /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BFC65481308452D3DE671ADEB905DFD0 /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FF73DCA750C33D6E59D4F65FC5933C7 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F6CD405CBC9F1E09F3D7A87B68CC1A /* A2DynamicDelegate.m */; }; - 6049045F6E6BCCAD2F30AFEB80FD3026 /* BSG_KSCrashSentry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB7A19AFBFCD6C800F6F020B30E91CD /* BSG_KSCrashSentry_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 612AF239D70CAC8510F33C25DEDF5A9D /* BugsnagSink.m in Sources */ = {isa = PBXBuildFile; fileRef = AF8D7B95A8DF6448F44B23EA19A54D7F /* BugsnagSink.m */; }; - 616F1DAC3543DFC1DF7F54B4D545F89E /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 76C30FF068517B04F2AD468AF9BD6E0A /* NSMutableIndexSet+BlocksKit.m */; }; - 61A863254593DB365ACC412305A3E8A3 /* BSG_KSCrashReportStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 699E8B12109ED503F1305D4CE2212255 /* BSG_KSCrashReportStore.m */; }; - 6358B09504E2E048A9FFAA8F72CEDBDD /* BSG_KSJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = A62B781E63BD4DF472D4804DDF476E58 /* BSG_KSJSONCodecObjC.m */; }; - 63F87C318437740E8202E4D3DD0826FA /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 659C4FCB9EFC172F8447BB3EFB4C634A /* MASCompositeConstraint.m */; }; - 645AA5322EAFE0A3235CFBD0D59A178E /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0450AC485092A6DAB4EB0CF5733EACA7 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 647B7813FC7054DF4E4D55D4A2689B50 /* Pods-NiuPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D481F9B1F0A90E0323A9F245A4429C2 /* Pods-NiuPlayer-dummy.m */; }; - 649B0C44D1B8A7C0C403B0D546F8D469 /* NSError+BSG_SimpleConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE8D3D2319A3E20C467F0CCF305B761 /* NSError+BSG_SimpleConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64A03BF6EB4B5ABD8338D8A1D31346AC /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 17C59BF43FEBC341F140DF2032BC7EE6 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 652F445D2487AC90EF216DF5814F7924 /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E207AD9A89A0BE27F7E2658D50A3105C /* UIPopoverController+BlocksKit.m */; }; - 65E88072A2BDC576BFC85E67EF9FBBC6 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F4218AD7C419D59009180ACD0649E36 /* MASUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6618EE80A4044B9928501F8B69FDD39F /* BSG_KSJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = FF631AA1B75C7C07902801D4A8A3D0F4 /* BSG_KSJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 674F1AD54F8E6D2B39906A700A85D355 /* BSG_KSCrashContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9943AC9416ED954E5F39B5BFD2AF3C /* BSG_KSCrashContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67B601A2F83405DBDA082EE891FE28AC /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BEDE965130459FB81CEBC03C0274075 /* BKMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67CD70EA0B809F2840FCE47014818515 /* NSDictionary+BSG_Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 93128D93D892A3672DD48A08EDD8E391 /* NSDictionary+BSG_Merge.m */; }; - 69BE6E07350C57D5D201A0FE245BC556 /* BugsnagSessionTrackingPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = E2FDA19444135BB7959142E4101A558D /* BugsnagSessionTrackingPayload.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69CA3E2FF4DBE5BCBCD813D2ABC37254 /* BSG_KSCrashState.h in Headers */ = {isa = PBXBuildFile; fileRef = 083774F95FFCA6F25E15B558E8BB0D00 /* BSG_KSCrashState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BC51D233DEF9C1206F507A95C807A58 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D783524DDF49BA8A38AB78CCC2507249 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BEA34FC04D66C832E5B99C3D92FD08C /* JGProgressHUD-Defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 653394373F31F43BD900276AD7166569 /* JGProgressHUD-Defines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C3B7E9EB51BEA94D26C32F162020527 /* BSG_KSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DFF8FAB5108D3213E27D6E13C5CF037F /* BSG_KSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D28DADD58C889048A8CBD7D2CE352C9 /* BugsnagFileStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AF60B70CC25498D37361A2708C3F2AAF /* BugsnagFileStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E7B90691DC2DA92CAF0523EFF61EA40 /* BSG_KSCrashSentry_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A301172A0D71A8F4F03C8FB42699E7 /* BSG_KSCrashSentry_NSException.m */; }; - 6F3479A727AE249165D7B50211B7A634 /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = 37D1C02697DB0745AA18E96C9998E905 /* NSObject+BKBlockExecution.m */; }; - 70066FE39C703555B4DF5CB5727200E4 /* BSG_KSCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = A1FED36F7E59F9C82E4447C9A1BC81BC /* BSG_KSCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 723CBF81D639C8A971362B398FA3715E /* JGProgressHUDSuccessIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A053D973F4E60520815FC2A8B8E915 /* JGProgressHUDSuccessIndicatorView.m */; }; - 72A0A38C4C1A53BEC18A43E30130CCC8 /* BugsnagMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E7CEB94EC928013BD1452026D68B50 /* BugsnagMetaData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73CDF267DA7E740D14B0454E2A0A468F /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3C9EB6BCB3A958854F1AE34D30CBD7 /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74043DE5C8997FC02879B8A7F7AEE390 /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AAA1E0ABC9EDDF569A6BC7DC2AF3101 /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7476F8D5DF46CFDFFAE62CE63A9ACD4C /* BSG_KSMachApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 84404EE5040FC6E1E32DB48C571FB14F /* BSG_KSMachApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7484D38FC44E512E32E794CA8506C79C /* BSG_KSFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C75F0273EBB1CEED82FA50A67B52A80 /* BSG_KSFileUtils.c */; }; - 74F798EE545DBB3B4750835024510EB6 /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 05DFC80D52CD47BB11C61A9BDA4849B2 /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78C7EF542037566E83F67AA32BC048F8 /* JGProgressHUDErrorIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E0B5348C3A9BAAE822B3A4A70E2E452 /* JGProgressHUDErrorIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78E1B1FA64DED4101A32AAA20CCDBA94 /* JGProgressHUDPieIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F10922A84EECC3EE324979FE3BBB10D /* JGProgressHUDPieIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 795C99BAFED525CFB87DA37FC7A6D6F1 /* JGProgressHUDFadeZoomAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9A937E49223BC79D25EC8A1D8727F6 /* JGProgressHUDFadeZoomAnimation.m */; }; - 7C1F6DDA42CDB34CF87F8CA02DE2CEA8 /* BugsnagNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 84815F4DFA0C4D089FC4D0CA3E8258E8 /* BugsnagNotifier.m */; }; - 7C48EEC8930F7EE9E2F51226D06F72D0 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A053D2E29EA541517006D1A48AE3950A /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CF2AC7A3B3ED03B30C1E4ED662B0551 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D10DFA6F61FDF8542411EDB5AAF9EB1 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DEE05613957AB564750D40734A5E442 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA690287969DD8E6ABDB36860A1508A /* SDWebImageDownloader.m */; }; - 80561866CAD137AA4C634D9CF8FDDDCA /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 055A94DC9A3B055BCF9A05E78E2F05C4 /* NSObject+A2BlockDelegate.m */; }; - 808CB12DFC51D1D5EAB74E1BA4CB9F06 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 081526B27CA12716008E82A34191670B /* NSOrderedSet+BlocksKit.m */; }; - 81620800E2063ACD76D93B5A92506866 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C479CFD8E11DB7FC4267365D37670B7 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81F811A56B6724F7E8E2D25364E595E3 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = BD993F433F196150BB81C9CC4DF2C6ED /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81F9B9F7C010DB711C9B55DE98ECF05C /* BSG_KSCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = F7DC48DF5DD670E2542956A13E992957 /* BSG_KSCrashReport.c */; }; - 835735CEED5DB31C758F2E0365107AA7 /* BSGSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E08235584359C3E9AA20D9C9CCD9282 /* BSGSerialization.m */; }; - 842D5570CF18F3743208B0EC81F10A22 /* BSG_KSCrashSentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 443BDF1E7E7A4AC2453E63D5A55AD9AE /* BSG_KSCrashSentry.c */; }; - 845F20A47689099022F550EA07B2F7AA /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = B864617548924E8442B2CF222EAD6039 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84B33099E9FB1D869454E79EFD211AA0 /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2164A2A30B03B05DE125C5A3C7D6CB /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84F90E3012A7158B7156C4B8F98EE131 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 691325CABD136BB12FAA322D7FB3E796 /* NSData+ImageContentType.m */; }; - 8527D2FC6F312883A531B076DAC8D0BD /* BSG_KSCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = D947E9C3F117FE20BDD47EA38975AE06 /* BSG_KSCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 864E8109B19B6191369FA0D5527175C9 /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = FDC760D35AE1912FE482EC2E1FD6DC9B /* UIGestureRecognizer+BlocksKit.m */; }; - 86A12F800EB675FCC7444EAA4740F7DE /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D224A3A120DF90F645BC64FBC0F44B53 /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86B66F322F9639C8066867B154EADCB5 /* BSG_KSZombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 13AD00FBAF440BF7ACEC53EFAB909957 /* BSG_KSZombie.c */; }; - 86CB15B1174CBAB5B14DBB4D2EE8C298 /* BSG_KSFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E54DD9746F433B11A34AED2B1B808DF /* BSG_KSFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86EA955E7F9B22DCD3E5572CA5953CFB /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 31FA891807C1A9E40CE3DE9DE7810F4D /* SDWebImage-dummy.m */; }; - 8712A73A5F37F3ED7BA5F3EB40F36C6E /* BugsnagNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 368FCDF9CBBF58AAD8FEB85FC1D2C9A3 /* BugsnagNotifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 876A075D6329669E89B4D2C54F2CD32D /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B01D184420208824836BA74488F13A4B /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8796F55D3EF4127CAE0483CD024FA45D /* BSG_KSDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = 889F1716133D2FA4470119C5A470BEBD /* BSG_KSDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87C9DB46A3764D427326524D442A6D05 /* JGProgressHUDFadeZoomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 00DCC18874B128E09D3AC3B0A78AB8B3 /* JGProgressHUDFadeZoomAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87FF5B8E152B0466AA35633966D62C3A /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C77CDBBFD12BA7DFB57A8A0C58FA2C /* UIAlertView+BlocksKit.m */; }; - 88CDAB083BA1BF7EB86D87420B027729 /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F753BA77665DA568056828558264AC2 /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89B223B1BDD5CE436D3A19835F50B24D /* BSG_KSCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A001776AE561CD0795E95A229097A8 /* BSG_KSCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A45D32D4EBA0E687EAC2211D1A9F39B /* JGProgressHUDFadeAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D5E51CD297D459625363D4EDE79D41A /* JGProgressHUDFadeAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8AE6B9E59DCFA59BE72698A2191CB610 /* UIImagePickerController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AD87E8E2D2DE9BF6EC1276FB694306 /* UIImagePickerController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C06D8ABE69DCB69B84866E13F7182DB /* BSG_KSCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C97DAFC6D54CACAF82EEB0BAA37C6EB4 /* BSG_KSCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D77009DB3C17107F4AF36EE6358E289 /* BugsnagKSCrashSysInfoParser.h in Headers */ = {isa = PBXBuildFile; fileRef = C6B8B211B308E7FC790D79D84D9CC723 /* BugsnagKSCrashSysInfoParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DB190AA4FD42F8FE82CA546DD993278 /* JGProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E8F6F269F22C90B945581A845DD0E1 /* JGProgressHUD-dummy.m */; }; - 8E2C245D3A4018152ADBD695CF3615C9 /* JGProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 807F88227564F6CBD57628C2D13942BF /* JGProgressHUD.m */; }; - 8E402EFD7A93B5DC164FF9FC9D2F03C9 /* BugsnagCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 82BBA88B46B8BFF5D22B5A1B8AA69645 /* BugsnagCollections.m */; }; - 8E5A46521570CBA695B44A8DA38A76DC /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = EA128986E43D10B291153DBD44C4B159 /* SDAnimatedImageRep.m */; }; - 8E7566C5831CE82C0066607E09F9B346 /* NSError+BSG_SimpleConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = F023A2472059DD6E7AE48F1B99D20434 /* NSError+BSG_SimpleConstructor.m */; }; - 8EEBE63DB02D88EB72B5077E527334BA /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE43BC2C9DD663ABCAFABA343EC5547 /* SDWebImageTransition.m */; }; - 8F3A7FAE3D018677E9591212799871B0 /* BSG_KSSingleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF91537D1C5E6840408BDE6572AC1E7 /* BSG_KSSingleton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 909334810C50BB0AE48979046B77AB93 /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = C6BA90D6D0DB41EE274D922FC30A2A0E /* NSArray+BlocksKit.m */; }; - 909602E2A2C86F090D68E15F63C5D2D1 /* BugsnagKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = D294110436D094D87AAA207BF2306EBF /* BugsnagKeys.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90E250F53AF594054F8CD406848ACBD6 /* BSG_KSJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = FA31A0AC7D674727743E002B0B0E4EFA /* BSG_KSJSONCodec.c */; }; - 912A2DEFA1332384FD7F0FF7F708F8D9 /* BSG_KSBacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 02D31D24C8DA79D4453170F8B3F65778 /* BSG_KSBacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9194B58ACE900ED6BAE6AD92E24A2CFF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5700B6938C928E3A8604BE8A8847ED5F /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 923D6C856211CFAAF949776E51F13707 /* BSGConnectivity.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A831CA0A25E45EB62CFFD6717F2AF3 /* BSGConnectivity.m */; }; - 92BF70E9D3285561EB404A7C4A4A6DEE /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2674852B385F35F2A72E789275B15063 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92EF24997C6AFF9160F0C92B743B454B /* BSG_KSSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = 63D0F94314EB932A3640AC7A26E2F2C6 /* BSG_KSSysCtl.c */; }; - 9393A92981C2BDEB9D93FC5E5908F2BA /* jg_hud_error.png in Resources */ = {isa = PBXBuildFile; fileRef = 85A43A997C4566505FF13E3E99D7B354 /* jg_hud_error.png */; }; - 93FA26AA00D38C7FC5F94698FAF024D6 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E5FD4EB86F2678224F168FC068AE794D /* SDWebImageManager.m */; }; - 998F1596653067D76BCAD88F8D0CBC3F /* BSG_KSCrashSentry_Deadlock.h in Headers */ = {isa = PBXBuildFile; fileRef = D5A08B90E7090F0551E2ED620FA2991E /* BSG_KSCrashSentry_Deadlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B624B59504A25F40BF138911C2F6889 /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 395E3887816AEC877EECD2409FEB83B7 /* NSSet+BlocksKit.m */; }; - 9C02E59E3DE7B60A7DB3EFC7E76035A2 /* BSG_KSMach_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = AA4960FC2485BE12EDD3BB5A556229E6 /* BSG_KSMach_x86_32.c */; }; - 9CF2822B59AF3F10DC6C8C0DA71ACEB3 /* UIBarButtonItem+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D366DA09746024C56C9452299856EF /* UIBarButtonItem+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D24C2CA342464F72E9645AE9084D6A4 /* BugsnagUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 98E13C06280849689EC5D442D514A44D /* BugsnagUser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D8CEA85CA94325FB493A148D039602C /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = C18D6151FA9E60C1690B4AF063C5950F /* UITextField+BlocksKit.m */; }; - 9D922D03B4FC85FC0BFE69EDF4D1AD5D /* JGProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 09C20AFA26C0EF3730019FC34FD0BB2D /* JGProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9FEE6630390F3203A2633A0733435F70 /* BSG_KSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2F096249D480F9FA6521733553D875 /* BSG_KSLogger.m */; }; - A1289CD11846663BD7109185193C4B82 /* BugsnagLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B1F08312AF562D53EBFC6961CAF5A7 /* BugsnagLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A128A717E5FB23615B23F9573194F13C /* JGProgressHUDFadeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 48901CE1E0BEF6395F9B14DC096C2E7A /* JGProgressHUDFadeAnimation.m */; }; - A2DEE566030C77DF1397A3C1FB6A16FA /* BugsnagSessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = EFC612EBA52055B7F1A8514E1D2DF70A /* BugsnagSessionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3307B8FB6EE0A049DBAE3AA4D2C6DA0 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A0A3B516E7CFF745B4322C560FEAF367 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A34F6D080CA3C1D7E2FD6844BC1E1F66 /* BSG_KSDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 34356C70FC56B82E28692AD6BF33D758 /* BSG_KSDynamicLinker.c */; }; - A7F5190EE7B38C2F083839B6BD3BC8A3 /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0152A1093BC1F6DD3C8CE615CA90D779 /* NSInvocation+BlocksKit.m */; }; - A833E130A32E2F81A3B12A4AE2A07A91 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D89D07501C6CF7FF8A626EC52D65CD /* SDImageCacheConfig.m */; }; - A893FFB0F9137E298D6752729850D1D6 /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 76A128F57BC0ABEA170673B597A5565C /* MASViewAttribute.m */; }; - A8D8C7C9427CCC26344A333F0D25B555 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC0046C2522B0D29A99067A9EAE7736 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A96FDD14EF36D875312C9B977D3690CA /* BugsnagHandledState.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C81AE4B995878B32EC4E6D6F88C1EF /* BugsnagHandledState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAC76E38D6E6FCACF94850E0E64D9832 /* BSG_KSCrashCallCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = D1FD49475533FBE265454ED02C97555B /* BSG_KSCrashCallCompletion.m */; }; - AB1C3247ED50C01B604B59437AD84517 /* BSG_KSSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B175401DBBFEAC2C682A16C83D4658C4 /* BSG_KSSystemInfo.m */; }; - ABA260F60D059F0E56DFB9357F2EE1E3 /* BSG_KSCrashSentry_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = D88D7856D7533D7418FD57B5446882BC /* BSG_KSCrashSentry_MachException.c */; }; - B20A0E5D8F9BCED1A82793C4BE9E7258 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = E9632E62CD42560C5B59DB1121398E32 /* Masonry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B26716DE118D330C411DAEFF5F47B317 /* Bugsnag.m in Sources */ = {isa = PBXBuildFile; fileRef = B88E74404AD883B17EF1BC4D3D9A8E76 /* Bugsnag.m */; }; - B28593B40E687A5FBD924887593A165D /* MMMaterialDesignSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = AD65D39E8C2C7FB7ED0F8CB04348C23E /* MMMaterialDesignSpinner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3397245B69F2050149CA9FC90761CE5 /* BSG_KSCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = F526F859711AFBDE5243470CACF58B60 /* BSG_KSCrashReportFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B33F6A04EDA3B1C6FA5DD6F6A2C5DB2A /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CE9AEDB9DB1C5B281C99F644188BD9CA /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B371D7E62B43EEDABCA8402415C25B4F /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E670C9811C318C880CF63B64BCC93E5 /* SDWebImageCoder.m */; }; - B4A4EA9655602955A735675212BA339F /* UIWebView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AEF6B5F64C9F6FB6B145C9892762FC2 /* UIWebView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6D23E119FD4F12461265197AC525B0A /* BSG_KSSystemInfoC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E06FAAFD6072701D338396EA51199BD /* BSG_KSSystemInfoC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6D8C1B434059278384511986DC87A4B /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A14CDC377014F82C8594F2477ACBF6EF /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B829A89911987C35F1C5DB1FEB47C3E1 /* BugsnagErrorReportApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = EF265CC166F204A5684765D92F7EF823 /* BugsnagErrorReportApiClient.m */; }; - B84CDEC089EA6BFAFB28C81F4B370C80 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EBF820CE674E680BB20063F53012098 /* UIImagePickerController+BlocksKit.m */; }; - B866622FCF22B732D54DB1FE57535419 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B4F19FEDB124C2D1980289BECEDBA051 /* UIView+WebCache.m */; }; - B946AFB1A725D85E07F645A7EF086383 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7619650DC553C4F772B6A1A8CC92B395 /* NSArray+MASAdditions.m */; }; - B94E7773C4096DE2E56869AF65ECC07A /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = A05ABD9ED07C39510F90D89550F4FC6C /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA0E0DE2BA38EDCCDA95E7F37AA844C9 /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F2491728B1CA07C0BB6E484E8098663 /* NSCache+BlocksKit.m */; }; - BA575740B77696CFFA157A58D53C73C2 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B62148D296FF07EA61C631466F87C56 /* UIButton+WebCache.m */; }; - BA837C8FB9BD5FFDFD7D6C0CA79A434F /* BSG_KSCrashSentry_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = 21E01EBE346E1ED0DB94BD3329A0302C /* BSG_KSCrashSentry_Signal.c */; }; - BC00029DAD4CBA7A9DA15E1786496E6E /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6821018E7DD91BACDC82D2DA06F54318 /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD07E140D72BC6853C14C76B525E4763 /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C664F4F870DB9004E5E0611A9258B63 /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD3C10A15A1485B6B36C066EB103FAA7 /* BSG_KSCrashReportVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 2419289023F9FFEDD2309637A6922CFF /* BSG_KSCrashReportVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BE824078490815CE186E4C951E950AA0 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C86AB54277EBDD13F9680BAF864DE080 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BEBDAA2911FDC5A9F7005E93EFCF9584 /* BSG_KSCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAE57775A8F8CE1B21A6B212107BAA2 /* BSG_KSCrashC.c */; }; - C05FC6699632FE712174ED875A605410 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 410335C79D713F2E3F1151B191457AB1 /* ViewController+MASAdditions.m */; }; - C1AD020D7E0089850DDC6CE9FE5D1525 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EA47C1CF8AAF92B2DB2B28323E7AB868 /* UIImageView+WebCache.m */; }; - C1E3F74476B9650C185CF50241D186A9 /* BSG_KSMach_Arm.c in Sources */ = {isa = PBXBuildFile; fileRef = 1987C79E50A35B9C47F2E12C4FFEE7DB /* BSG_KSMach_Arm.c */; }; - C21932194DF4643EF3BDD85516B0A11D /* UIAlertView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8885DAE2EECD4B4F1C6C9E9DD56BA0FE /* UIAlertView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2DDB4B70A23E9F594A646E839C3D369 /* MMMaterialDesignSpinner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D088B988386EB8CBDB3F5E929A7879 /* MMMaterialDesignSpinner-dummy.m */; }; - C38ABD16D001FF0B6C75D8001BF0EB52 /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB1D8D3067E88701D79AE89732E2ABE /* NSObject+A2DynamicDelegate.m */; }; - C4C06A6682BA6ABD2B27E6D2F0D4CA3F /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD3E7C28A7B83302D9BFFC623A4188F /* UIImage+MemoryCacheCost.m */; }; - C52F73F557477894EAA0A37F5E7B45AB /* BSG_RFC3339DateTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EDABD2706EE9F72E5E565254631C410 /* BSG_RFC3339DateTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C61160BB10D1503062E97232D3C2060B /* BugsnagSession.h in Headers */ = {isa = PBXBuildFile; fileRef = BB3E8F3E4561CF776B70826294047365 /* BugsnagSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C648FEF0F8DB28A791485F18AFF66F7E /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = 60485F50ACFF6568CEB4673443B17D99 /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C74D2E856ADC8139CD00DBD184061B23 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 20C7D38BD5B25FDBA05DBAAC63037EEF /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C760200B79320668F46D7091A43ADA4D /* BSG_KSSystemCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B62E18BAA362962E6FF7000F6CC42B0 /* BSG_KSSystemCapabilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7920681F0164686C56327ED3C6AAC58 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D57DCA001D8D942D25A12BDDE330862 /* View+MASAdditions.m */; }; - C86A19FB977F5D934F0865759E9CF3F9 /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B8E6C0B1C0B38F950D8DB9FA0EA2401E /* NSIndexSet+BlocksKit.m */; }; - CA0B019BDF65F09D767B974D9A85AA8B /* BlocksKit+UIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 066CA7FA8AD42002E9592E921977A135 /* BlocksKit+UIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CAF0C75140C597BFE2B83733FC9FCB58 /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7078B70333ABFD1F600759D38542A1 /* NSObject+BKAssociatedObjects.m */; }; - CBEF06F4A216F649415F27134214A0E8 /* BugsnagCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B14B29B70F681BDE94CD756B5E89100 /* BugsnagCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF1C151607898DF6693DD5C4823D0B5F /* BugsnagApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D0277E8945EDC6BC313EB5B04160EB /* BugsnagApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF8975EC4D9312C767352D8DBEB54441 /* NSDictionary+BSG_Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = A56642A7BDEDCFEB1A3D7FB3E3D58F1F /* NSDictionary+BSG_Merge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CFED6007A4F1E2B0B84C18E34F173C5A /* BugsnagUser.m in Sources */ = {isa = PBXBuildFile; fileRef = B89E9088469CD31CF599D646D242677E /* BugsnagUser.m */; }; - D002DA7E4DADFF6B35061A2700BA3E68 /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 727D47F89934F3D17FB824E9270336C4 /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D173A24DBC65FAABEC1D1163E2528163 /* BSG_KSCrashType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BE80A97114B90D3DBDC8CFF3A061C9C /* BSG_KSCrashType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D26240E466A033A5C1592C47129F11F8 /* BSG_KSMach.c in Sources */ = {isa = PBXBuildFile; fileRef = DC8583A07EDF27F96D073EAC36A83F60 /* BSG_KSMach.c */; }; - D2C9ACFB32FF7A801A212083B334D6C3 /* BSGConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FC9C8FF83C0EB8BAD6923B8C26612D1 /* BSGConnectivity.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3155159B080EA7928185EC97029DD84 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A1F7F559CC998E4E6B7A19C457904528 /* NSMutableOrderedSet+BlocksKit.m */; }; - D3155498814344A88F349CE42C2D5646 /* BSG_KSZombie.h in Headers */ = {isa = PBXBuildFile; fileRef = A472867F9B0F25C1DA00A6CCDE1686E1 /* BSG_KSZombie.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D341EB7564008E9F378546B126D77BA6 /* jg_hud_success.png in Resources */ = {isa = PBXBuildFile; fileRef = A111B4A17DA1CAF8537C80860B3F165F /* jg_hud_success.png */; }; - D6C519408CD7E6E3B35E0ACF8F577FB3 /* UIControl+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 45852088D447F682C7D054EF02ADA491 /* UIControl+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D72849B1031F5DFCB8B038FAF9897276 /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F5832FA0D46403665F604D25BFCB2E5 /* SDWebImageCodersManager.m */; }; - D72EE0E749232B2C899702FC1C9402BB /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9343A1140E00EAC7150452A972B67438 /* Masonry-dummy.m */; }; - D73A65AFD60B81D6BA47B8338D830A43 /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = F4B02CD09019E0E4802B6469FE25AFFB /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D7A644E667989A1602312D4F113B6332 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CA0905C6D936F99BA1CA29470EBA2B /* SDWebImageDownloaderOperation.m */; }; - D8FAE3C449D3E0063429AC2A77A02E2D /* BSG_KSBacktrace.c in Sources */ = {isa = PBXBuildFile; fileRef = 000D19DFE15465CEE978C72072B864E4 /* BSG_KSBacktrace.c */; }; - D965CCBFFD833E4B786EDD3B3D186755 /* JGProgressHUDIndeterminateIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = DEDFFA159622224E4784009667BA2526 /* JGProgressHUDIndeterminateIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DAB5D785AB42FC987C5D48193B395546 /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F0483DB1CC79C0AB145DFE9C39C1FC /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB1D88D9D89683E5AE8FB619A72E221D /* JGProgressHUDIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = C38C982C938DA3CB0AF28C6AB4051AE9 /* JGProgressHUDIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC4C4CD8111EA1D442DB92EFB833F4DE /* ActivityTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = D7869F5E2BC8E54C22DE227F5214ECA2 /* ActivityTracking.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD440529F06B5DF8CA710BF4DD835150 /* BSG_KSObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D31B959A7C3B731128641545FCF988 /* BSG_KSObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E249E83E634EF9A2CB5475CC235EED62 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 947EF90442E5CFC25AAD0329C3F107A7 /* SDWebImageCompat.m */; }; - E2ADC0608F10970C796A83F6C7FE651C /* BSG_KSMach.h in Headers */ = {isa = PBXBuildFile; fileRef = 0164C60480BDFABF914FF6BE049C1C5F /* BSG_KSMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E30D2027FD62FF527E735CE6C455ECDF /* BugsnagSink.h in Headers */ = {isa = PBXBuildFile; fileRef = EE17C1D16E7AAEE38E27EA28F1B3E53F /* BugsnagSink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E4E66C32A9EA1211092286A2F2C9F0B6 /* BSG_KSSafeCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 8876309BD83C7BFB59319E8920CB7DA8 /* BSG_KSSafeCollections.m */; }; - E550C4A206E2021091073BA0B0B5B3C4 /* BugsnagMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB3F911D4CBF0922CCE313D4F5707F5 /* BugsnagMetaData.m */; }; - E5D1F11D7D5D5B40FFAF4F02871EF098 /* BSG_KSJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 126AB0D6A6011B5CCC82003FF0FA5557 /* BSG_KSJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6975377FD7BC094C083B7BD075295EC /* jg_hud_success@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A703F0E440E407DB4E5924C66EA7111C /* jg_hud_success@2x.png */; }; - E76935CFF4AF327F8D9A7C1935F7D900 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CBA41173AE3E31710EFA768BD0C50719 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E7CD6F561479E69059F78B43B47B6EAA /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = BFFB1BBFAB78CF73EE4EEEE246971893 /* NSMutableSet+BlocksKit.m */; }; - E9715AA55DF39BF86F85B6B3F246A558 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6DDB0A72FA6834DA499699C524C152 /* NSDictionary+BlocksKit.m */; }; - EAAD293E08F2A3A7D5273F51D00E2EDD /* BSG_KSArchSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = 275FDF1B7D06F9BC35C2FCA07ABBF43D /* BSG_KSArchSpecific.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAB4C8F947E8B49C87955FE2DC877DCC /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DE8C756D1FEBFC23A4EEAB8130611F /* NSMutableArray+BlocksKit.m */; }; - EB663E3E1EB4BB670DC29B77DB330135 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = F9EA2E84C0DDB3337ACDA5DC03FF5B81 /* MASConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB947BA9E04ECB15ED096DE2D8317F40 /* BSG_KSCrashState.c in Sources */ = {isa = PBXBuildFile; fileRef = 0B5E17A34E00B44E46CBA8A2BCC1C70D /* BSG_KSCrashState.c */; }; - EBE44FF8CC7104B2ECE9D4DDE51AC55C /* JGProgressHUDPieIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DFA9DD658A2B2CBF3B4C879F4FBDA0 /* JGProgressHUDPieIndicatorView.m */; }; - ECB6CB041295FEA9FBF89AF309A032AE /* BSG_KSSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F909D8D95330419BC3376ADB63AEADB9 /* BSG_KSSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECFEA50EA6B65F83B68B87C13DBE1A97 /* BSG_KSCrashSentry_Deadlock.m in Sources */ = {isa = PBXBuildFile; fileRef = C6335D950533269CA4E6C8B9E8C34BE9 /* BSG_KSCrashSentry_Deadlock.m */; }; - ED19552EEEA44864572081170C8CDDDA /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D383D624418A4878A5174EBA7C07A655 /* SDWebImageImageIOCoder.m */; }; - ED360105A24B7B2CE24394E66CF229CF /* BlocksKit+MessageUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BE464EA715515E70464B4F5F61DD8CF /* BlocksKit+MessageUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED82F152137DBD78D72578D0FA3247BA /* UIRefreshControl+MaterialDesignSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E03B0485B3641CE731DDB131239B0AC /* UIRefreshControl+MaterialDesignSpinner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED90EA11C1B989DAFFE46A5A5E94BC24 /* BSG_KSCrashSentry_CPPException.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71E9AE2A9A7BA6ADB5ED767D5C6D5925 /* BSG_KSCrashSentry_CPPException.mm */; }; - EDE3BA2407D442231FCF75E5AB3A999A /* UIGestureRecognizer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C59BB7A88763C04B09D88D2C32691691 /* UIGestureRecognizer+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE659430F4CE57D5801A4A53A98140A6 /* UIActionSheet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 361640A52CD61E607F4A9CC05AFCAEB5 /* UIActionSheet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE936A6838005A5ED1BC5F74BE37B7BD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B60916FD5CA7B037138444C01E5F8A0 /* MASConstraint.m */; }; - EFF12870567B25473265F7BF95DCCFE7 /* BugsnagSessionTrackingApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = B33C43AD95E0521BA91AA8B41A0462CF /* BugsnagSessionTrackingApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F04708D4B3F70190BA210282FA6A1913 /* BSG_KSCrashSentry_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = 397C7D4FC6ABC4595356E33D0EF70242 /* BSG_KSCrashSentry_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F112D0317F099CD4CA5379BEB982C3F8 /* MMMaterialDesignSpinner.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E44B489CFFCB537D9A4327F02482E8 /* MMMaterialDesignSpinner.m */; }; - F1923EAD3D13AEB768A0819C11D39986 /* BlocksKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C69A6933F91BFEA07B3E4D7EC647932 /* BlocksKit-dummy.m */; }; - F1AC006087DD047BAF39A454D11990E4 /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C3FA115FEAFC6AEACCD8693650961071 /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F1B75048874B8773E5568E6D3ACA12E4 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 308FC67C1D1F2EF16374D965CD8725CB /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2FDF8CC54957DE05FD93F99AD1F2A2D /* BSG_KSMach_Arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 8B0786A12319C91E726EA7358F11B19C /* BSG_KSMach_Arm64.c */; }; - F35C59BAA919BFF201A78E656C7560CA /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E23F40A1BD8D788AB497BA8D8B8EABC /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3A9F03636E3336CB460582CB197E5F0 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F342E1C72A970EA83E9E1744EA7351A5 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5A60C32D03741A0BAD72AF81B85A98F /* BugsnagSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 73AC5222CE85002F7FD65A40A2ACC149 /* BugsnagSessionTracker.m */; }; - FAC7F4F99D97AEFE71BD2B5DD10B6AE9 /* BSG_KSCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = CF007A0F8A357DDB0DC6548D4F208E0C /* BSG_KSCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC2C974193A75CFD561D5F33EBDF0D00 /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 81ED50801979FE542A2C7447B7938682 /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD4D22414E51BD4D48C713D01E1ABFA5 /* BSG_KSMach_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B7576F41A9E435CD9B9DDB9CB719B41 /* BSG_KSMach_x86_64.c */; }; - FDF18252113B41829D073F8EE644BD06 /* Bugsnag-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 744CB2472B4C2F63A85B51D64B9C4C14 /* Bugsnag-dummy.m */; }; + 0096B5A8BA8E4F2BFD8839D0FE7CD696 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE49D00410B37571828FDDD523CC3AA /* MASLayoutConstraint.m */; }; + 00BCB07C613265F33E21BCFD801CCF64 /* QNLruCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B41DE1FC0D6A97101620F782231257FB /* QNLruCache.m */; }; + 01AA376C3CC339EE9C1489E28BE477D6 /* QNHex.h in Headers */ = {isa = PBXBuildFile; fileRef = AD480ECEA9F608C1A08746845069D557 /* QNHex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01E84E1BF59025458A596A8D62142264 /* QNAssessment.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFA8FEDA43D51B4B5A33A508EBBB8CC /* QNAssessment.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 024111A11EA5744CE768CD1DB33494F9 /* BugsnagBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF624E1511978793A6054936D583AD0 /* BugsnagBreadcrumb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0241A54F2A2904627B84D1DC71F3FC62 /* QNHosts.m in Sources */ = {isa = PBXBuildFile; fileRef = 40116520A6686684AF06697CDE525661 /* QNHosts.m */; }; + 02666CBA7319563C97D5F7AA0D3D9ED5 /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0ED897A408DC64C9F9EBBD2B345259 /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04F3343EB2EA608DB418DEB075A0FD17 /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8088403C2E61483A335B5B99EE389CE1 /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0569F3959E70201DD3DC98F2A1FEBBD5 /* QNIP.h in Headers */ = {isa = PBXBuildFile; fileRef = A9CFBD20E5A7CDC0A31C14E97DECEF5F /* QNIP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07702EEAFD6B169408E7F3AE2A6E8496 /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B15B5AAC0FD56E3C9B64DEA13CC0B78A /* SDWebImageCoderHelper.m */; }; + 07B6097D466E51148D861CAA0ABE119F /* Pods-NiuPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D481F9B1F0A90E0323A9F245A4429C2 /* Pods-NiuPlayer-dummy.m */; }; + 07E958F34A6A94E94376C9A5474D43D3 /* BugsnagSessionTrackingApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E45C231EE69558378902C2701359DFF /* BugsnagSessionTrackingApiClient.m */; }; + 08DE9EED4A1910B7C6040304FD949FA1 /* BSG_KSCrashAdvanced.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFA28F57068F65A8213E5977F749370 /* BSG_KSCrashAdvanced.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08EE1BB9BBDA14C27AEFDD3D120E2DAB /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B0E27C85C973085C2D66D747A927D631 /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0958AA191903995C6D8E2D5C5AB8DC9F /* BugsnagCrashReport.m in Sources */ = {isa = PBXBuildFile; fileRef = FD54666F2615F82109BCC40C1B5ECDCE /* BugsnagCrashReport.m */; }; + 095DD94E57F29339F0920A48D23F0D99 /* BSG_KSObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = 58D07E1F61F7CAF91FC6FC107ED8DBCB /* BSG_KSObjC.c */; }; + 09B2C5BDBB7CD6118F99765E142B5969 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A0AEDADE49BF6D3220227CFC3DD0A9F4 /* NSMutableDictionary+BlocksKit.m */; }; + 0ACF2D79B0EBF54060209094BE9E0E22 /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D55B686CEBC59C1D94F10D904D40EF /* SDWebImageImageIOCoder.m */; }; + 0B4E03A69F557C99BC93AF945A064399 /* BSG_KSSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = 85D39DB82BE6449173CA8CBDB7EE0A26 /* BSG_KSSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E4AA1BE48AFB5B6E5FB069F67EDB274 /* QNResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 58F5098B4F33DD9C0021EA528198DFFF /* QNResolver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E52BE6B0A1B2BB2D82B4B6A349798DB /* JGProgressHUDShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = EF59D284DF0C8209327A05AA8B7A4502 /* JGProgressHUDShadow.m */; }; + 0E93370A610B3A0C9CB07495E02852CF /* BugsnagCrashSentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 0189D0D53D45B456DFFF31419D1626E3 /* BugsnagCrashSentry.m */; }; + 0F6DB5A7EC40ECE024C66249DA183FC4 /* BSG_KSCrashSentry_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B938CD4F5F78371ABE3251D50F25191 /* BSG_KSCrashSentry_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FC8733CBC105A978A0C1A5F0E9AC153 /* MFMessageComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 135F1FEA4041A79C577E7BF85E4C3B89 /* MFMessageComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 115ACCE253A886181B55773DDC70D6ED /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = BEBD0C3771F070DAB569775F14D4396E /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 118F951D183D63B09262D230EBF3C8B2 /* BSG_RFC3339DateTool.m in Sources */ = {isa = PBXBuildFile; fileRef = E7383DED404B17BDC3EBEB1F74E20AF3 /* BSG_RFC3339DateTool.m */; }; + 1212617559514315FAFB93E765ADD6FE /* Bugsnag.h in Headers */ = {isa = PBXBuildFile; fileRef = C80389EE454FC414741DE5DF7ACFE399 /* Bugsnag.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1212D2B7B4B8D8177BD99492360F60DB /* BugsnagSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 34CB3E0E1F4D5776457623C19D44EE11 /* BugsnagSession.m */; }; + 13D282DA4D13111F07BA00F967253D70 /* BugsnagSessionFileStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 592DE20ABCF5688EEA03086FC88D26A5 /* BugsnagSessionFileStore.m */; }; + 16029AA85DB9F344F3FD340B8159B01D /* QNDes.m in Sources */ = {isa = PBXBuildFile; fileRef = BC43A331FDEA6709D688459992774989 /* QNDes.m */; }; + 1674C6D585D343240EC6EA6295637DC8 /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E3444A30934CCB09FB6EA08D2FE086DB /* MFMessageComposeViewController+BlocksKit.m */; }; + 17CFF34B18276A261CAE988D6F115B12 /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 63EA53BB29C1CA5EAFDBFC7F7EEB7617 /* BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18B3EBAE7752464C071BCDA47219B012 /* JGProgressHUDFadeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 93170957DCDA9DDDEF155FAC91D749B3 /* JGProgressHUDFadeAnimation.m */; }; + 19F037B1DDF54E002B5804B1160C549C /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = F369938FDD258555E16F6A40B2DD3ECA /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C5CC21D4AAC40B37308E27AD716FBA9 /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 706CA6EF9BD6B439540ABE843A302CBC /* UIView+BlocksKit.m */; }; + 1CFE7401A5D9E1BBA1E6A9317C3F4A59 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = CA55862A7AEF4458F880C8915B9C51B5 /* A2BlockInvocation.m */; }; + 1D47B863E7561F94F16AE825B2807724 /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CAB92413D236728023363618EF6A1EE /* UIControl+BlocksKit.m */; }; + 1D786F31CAB84B196D2F64F8AA703059 /* QNTxtResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = F96938E629F6ADD86439B864468655E5 /* QNTxtResolver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E5D56FF58658F9F45723CA2940489EE /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = A57C66E53BBCCC0C371F96658851D68C /* MASConstraintMaker.m */; }; + 1F120D42DDB29AA19CCD90E74278B50E /* QNResolvUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 9096AB2BD8BAE9301E97ACF6EF3D4628 /* QNResolvUtil.m */; }; + 1F54F24BFE8DA95F93304856F87CEAC9 /* BugsnagKSCrashSysInfoParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8588AD307BEEC3BDCB70CB9631EC2B08 /* BugsnagKSCrashSysInfoParser.m */; }; + 1FA50BEF5B5B38A050B240678B9805DD /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F1806B554A05EE2C81838760E44DE276 /* MFMailComposeViewController+BlocksKit.m */; }; + 1FC1298856F8114627590C4E25F90929 /* BSG_KSCrashReportFilterCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B85E7F7A181D9EAFB0F066D3400601 /* BSG_KSCrashReportFilterCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 207941E0989E53559952285ED1D46F7A /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 614F08D75872C2CC8B5346839AF37A9E /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 242BD595617A416912D7FB80A4C6C9F0 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 60E02AE5115746A5FBB1B36BD493AD46 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27AD265F4C7E44052B810F47D2308D73 /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BA6A6CA99DA297062461F52F2FAA144 /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E17C2BFD36A2F4964F10999797804C /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5458C37B9A38D53C300EA93A6A6D3346 /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29B6F69434691CCC32E408EECE1596BF /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D1E4B8AF2C6DE086DB98D81CCEB98D /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29D3C32FA8D94D72F8CA17A7BF71D6A2 /* JGProgressHUDIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 714F125FBC144DB5540DA58773D41B3B /* JGProgressHUDIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29EF5FBDABBC8CD7B16D277A2818ABC1 /* JGProgressHUDErrorIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7621DBD98387BB3378F89C8E50963517 /* JGProgressHUDErrorIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A14C243CAD50E4BF63A82DDC0822FC5 /* BSG_KSCrashCallCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B4286B260C47BD09629322E3EF0DA5 /* BSG_KSCrashCallCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A88420BA22D8D14B518A37905F568F7 /* BugsnagSessionFileStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F7D61DB914C4D5FF4C13D8057642994 /* BugsnagSessionFileStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AE67A789516B45F1494CC64FA69B095 /* BSG_KSCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = B1C7D6601450ECF3572192F42AB688A4 /* BSG_KSCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B958E1096BA7BF0F09563D13E8010D7 /* QNHex.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C629683C25829F044B97B967CCE2F32 /* QNHex.m */; }; + 2BF550B8C4087E83F2403199B226DF02 /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DBB04E724F34A9D1479A79E80A103BD /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D04EBA9070FBB0B6BE0D7068A0B5438 /* BSG_KSCrashType.c in Sources */ = {isa = PBXBuildFile; fileRef = 702D3F0C8744A5A840EA4C3D0B34998D /* BSG_KSCrashType.c */; }; + 2EDEDA28C27FE07EDA788D6C75FFE9A9 /* UITextField+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EFFF6C09C74C7BD4F7042299E97C0321 /* UITextField+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F3531B944E0ED0581C1135E6F8FABAF /* QNResolvUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = DE3020521C87DA3534C5F42006217C46 /* QNResolvUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 301CD9395E474DE10CF30B1582E1193A /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 68C0DAC2C3835C74689AECAA52F97EE7 /* SDWebImagePrefetcher.m */; }; + 314DA1DBBC2FAF2BAC4A803DC80E9DE9 /* BSG_KSObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 62AF33B89DCD1544E7A42A1A80DDBB48 /* BSG_KSObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32D10FE89467BA831C126234BB9EE669 /* QNRefresher.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D3F67B92C1B32CC2CC78CA07B7AC9A /* QNRefresher.m */; }; + 330BECC87EA32D3408CE1B17820CC61E /* QNAssessment.m in Sources */ = {isa = PBXBuildFile; fileRef = EF62B00BE1E56259574C133808153FCF /* QNAssessment.m */; }; + 33A53F28EA81B362E5E7F018F0404E0A /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CCDD2073DC68F4657F8827974E7195E8 /* SDImageCache.m */; }; + 33C592BF2AAD63D0C5E8374A1704F759 /* QNDnspodEnterprise.m in Sources */ = {isa = PBXBuildFile; fileRef = 2421B9B9CB1759A5984BF7D146276A21 /* QNDnspodEnterprise.m */; }; + 35179814B41FC6FB86DC69B8F0DEADA9 /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E2609621C550044C314FAFC068A9E77 /* NSURLConnection+BlocksKit.m */; }; + 35E4CBEA1E31DA7AC088E0B7B15785F0 /* BSG_KSCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84053237CEB82AF02F71BAA7B32BBF /* BSG_KSCrash.m */; }; + 36475328CE76907D3210B074AF0589A5 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 37828E6040B208FED57231FBBF01B440 /* NSTimer+BlocksKit.m */; }; + 36576BE33DFC5935A84010F60F2427D5 /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E48F09C133A5B7E26DDC2221149ACDC5 /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36DC10168C47541965B6315E6E575DEA /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = E15B9A8758A628754E7D4475A72BAF46 /* SDWebImageFrame.m */; }; + 397F52C7545E7FCA033BCA5EE4BCDF77 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C5D9DBB5B3C7F777C882730706CFDB /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3994F4597FB834FB2DDBBF30FD25C713 /* BugsnagCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 95AFE15B5E1792D7BAC6AED0D4FB70A3 /* BugsnagCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A0CA9EDAC285474B5B11798FC37D909 /* BSG_KSCrashSentry_User.h in Headers */ = {isa = PBXBuildFile; fileRef = 78A869B31827C2FDB9034657E9A2BDD7 /* BSG_KSCrashSentry_User.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A3457C963F52B29E09CCC5137084BCC /* BSG_KSCrashSentry_User.c in Sources */ = {isa = PBXBuildFile; fileRef = 264C85EECE9291CBB3927775C2528E7A /* BSG_KSCrashSentry_User.c */; }; + 3A958857B9D877E65F9110E3B30BFAA2 /* JGProgressHUDImageIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6044259B2D04161D313D34DD82DCAD /* JGProgressHUDImageIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B0044F1B1139ECD0A530E39C056ABE7 /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = E7E66B99334C2F16F131483BB3F5DCD2 /* UIBarButtonItem+BlocksKit.m */; }; + 3C68532741497B03C92DF7157410CE1B /* BSG_KSString.c in Sources */ = {isa = PBXBuildFile; fileRef = 7E42C56F584D9AE06DBD39CF0E26F3B8 /* BSG_KSString.c */; }; + 3D6EDF7075EE819F0C2F0CAD61A49A41 /* BSGSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 80D66176F5D1BC5B1A8126FFB12F3846 /* BSGSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D8076B314232537A745E4F6C5272D87 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F730FB5877FC4368574FC606BD31A23C /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E980EF2B158519CBD0E2E371B761262 /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B79BCA12C47D1D04E08FB0856EB85E6 /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F23A716808341B5E318B01D77AD884E /* BSG_KSString.h in Headers */ = {isa = PBXBuildFile; fileRef = BE945BD0D988AA017ADA941D9B113173 /* BSG_KSString.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3FEF20DC998594E48D7EF9E18A4A0A18 /* BSG_KSCrashSentry_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E25D8C60688E7679E980A26BD500FD8 /* BSG_KSCrashSentry_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4015CC040ADEC1A2F6545D4E63F88978 /* BSG_KSCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C6E92113EC9D0840DF2C0891BB79A1 /* BSG_KSCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 404C2E35C2ED10FF804ECC59CECD4AC4 /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3E836385D9994343FE0E80AB19F57F /* UIWebView+BlocksKit.m */; }; + 40B4018D4EE72CF74283AB97D13C67C4 /* UIView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = AF017C5A94CE73B47544650DF6FC4D8E /* UIView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 415871C6857A770A415E1CDBF7E5F4C4 /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F689CBF577C9C33DF572CA75233E5B9 /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 416C56CC1F37B4181DA81CA83E64649B /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFD9D6737FB598AC439024F3037E588 /* NSObject+BKBlockObservation.m */; }; + 41E5536052433C7D5D9C6B47DEBB70BC /* UIPopoverController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3911BD5333A081DA6FE18D848BB49B /* UIPopoverController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42947699890A199B08A896144A878D80 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 3423EAD57A5D1DAE8059DC88ADB88F2A /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 431B219AB99A30F5DD9475249A1354F6 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FC74F89B5418AC6B857ACCC8BBAE066 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43A8A521B9AE1632682D25754E5F4669 /* BugsnagConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C8087D2472F7C286AFE1E8283E0BD5F /* BugsnagConfiguration.m */; }; + 45B814C647139B9AFE849AEC43AE89AA /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EC0167076D8B37548F9D02F2695EC87D /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46692A2E77157B00827182C8DC686F72 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F55BEC9975D5C26529DAE689730774F /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 472A205F433C23CA361312CE051643E3 /* QNLruCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 61E31D5E8F836FD0E105F33C0DB584F8 /* QNLruCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 495E49D3CCDC64C83A7CDBF0B73F6D68 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 761BADCDC5C85480E0874AFBB2942636 /* NSData+ImageContentType.m */; }; + 4B4B739D14FC44D074028F4C7794C9A9 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 315A22C5C5F2241428420C4D12BAD860 /* SDWebImage-dummy.m */; }; + 4C7F9E87D337D42DDA3B88B201DB4984 /* BugsnagFileStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E20D96B07EFA4E10569D1F2D33327FB0 /* BugsnagFileStore.m */; }; + 4CE091F886EC6324673EFE0AEBBEA0FE /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBAE793CA6A3452E1E6CFCBED018E3F /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D8E3B9827F77A2BB624A6A9EB60B20A /* BSG_KSSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = BFC4A17844912DA0FC3DA02D2028D94A /* BSG_KSSignalInfo.c */; }; + 4DCB32B9F17F78B5E6F141352CE81337 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 491FDAC15D030494B2E90C0E7ECD4606 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4EA5470F5D0C8EA30666DC4BCE29DF5B /* BugsnagApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C48CAB39889834FC39B9D5DA17DB9921 /* BugsnagApiClient.m */; }; + 4EF3747FDC6CB2681EEE334A0FA2D0EA /* BSG_KSCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 093B98AA77F7B6455787637F9A607ECB /* BSG_KSCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F560052793D0D15D8B46A1768A8766E /* QNDnspodEnterprise.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CB62CAB2BBDCAD5D13D7701FF2459FB /* QNDnspodEnterprise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5048F075FA25FF298B69176CD277C8BC /* BugsnagErrorReportApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E0D0BC7B294B909F20535AF168760001 /* BugsnagErrorReportApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 516BA21F6267301F5FB39989A3D91B2C /* QNTxtResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = C11B919D2AB6A4650D7D4EE4CDCA31BF /* QNTxtResolver.m */; }; + 51836FC419231AF0F2D4D286F25C98B7 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA6767E60B37B94EC2C093C616D4694 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 518DDFA2ECE10A6529BA7785938499BF /* BugsnagConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C6592BA7755E26EEBD059D798B879C2 /* BugsnagConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51D55FC60952C14EB3EB7E84E6CA2DCD /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB40143031DEDEC49BB4BDD26BF604AA /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 520CFDD66D96B150707F310F71BDD5CD /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA9011E6E7665E93ADC71515FB8E7BE /* UIActionSheet+BlocksKit.m */; }; + 5323B84DE27F38137DEAC916CF282411 /* BugsnagHandledState.m in Sources */ = {isa = PBXBuildFile; fileRef = BF1CD3DF18A7FE3D487DD13BE60FE178 /* BugsnagHandledState.m */; }; + 53319C5F3954BDA130A0D885F98006DE /* JGProgressHUDErrorIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3771DE47F1A3E17AC0DB8E19C0FBE47D /* JGProgressHUDErrorIndicatorView.m */; }; + 5333A897EB9E6FDEA98815B4EDA82FDE /* BSG_KSBacktrace_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A80ACF0E51B7332AC7293B8E1D89E9F /* BSG_KSBacktrace_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 542F34275919E0C58F0B2B099EEA4567 /* MFMailComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D100F0601AD021206CFE21636EE3786 /* MFMailComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 548192417DAC873811C188696BBD9726 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D533380BAF865E4DD12ECDCC1F70A71 /* SDWebImageDownloaderOperation.m */; }; + 572D05B146EAA3EF5530A0D0E34904A0 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 36B33D26AAE181EAB29D9FCEBD29C162 /* MASViewConstraint.m */; }; + 5781F2F750B747412ACC5AB6572D772F /* BSG_KSSafeCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB87D6FCFB9D40189C43B151B78890E /* BSG_KSSafeCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 581A9CC2236AEA214222BE73ADC1D723 /* QNIP.m in Sources */ = {isa = PBXBuildFile; fileRef = 14624B82A0148DDE32CCB87FC4BA8D98 /* QNIP.m */; }; + 58F3AC8B4E8E2F53A63452C1D79CC3C6 /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB5EC40831F52C87F693F3EE291A99C /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 593330748ACCA06E68C6795100C9833C /* BSG_KSCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = A390685531E9B45A9A3C386566BDFDF4 /* BSG_KSCrashDoctor.m */; }; + 59EA578EED8BAC126FDC60C32AE11521 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F23868CE3CC339386946DE5BF6606B05 /* NSLayoutConstraint+MASDebugAdditions.m */; }; + 5A0B9694311FDC9FF1294BAEF31D3C53 /* BugsnagCollections.h in Headers */ = {isa = PBXBuildFile; fileRef = 80AFA5752B879E26AEA62D6B2858FBE5 /* BugsnagCollections.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A404A9BCE5D7D0DC42D783A759F3B47 /* BugsnagBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBF561F54F68721F28E04E6E6DEB1AE /* BugsnagBreadcrumb.m */; }; + 5B4D1467DB51A770B042D078CC0665D7 /* BSG_KSSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B701E4C215A45E611AE0E7A3F14A71A3 /* BSG_KSSystemInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B5EDD2FB314E09CBFD0252C5998BE80 /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE7DAF445F4E9598702B8B63A7008DF /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B88919F332E967FC4EB25E69A69B414 /* BugsnagSessionTrackingPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = C214DDE2C24918F8CFE813BA865DDB9D /* BugsnagSessionTrackingPayload.m */; }; + 5D1BD25F663E0E724A47A9355D99CDAD /* JGProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 3436528695310FF4DAF964573FFEB310 /* JGProgressHUD.m */; }; + 5E51780B9BCC699753AD64FEFAC2C075 /* BSG_KSCrashSentry_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = FCFB4C9AD71C699BFF512937D3E6398A /* BSG_KSCrashSentry_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FF73DCA750C33D6E59D4F65FC5933C7 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 212B37DC7721120A85A1818E8858A6B6 /* A2DynamicDelegate.m */; }; + 6049045F6E6BCCAD2F30AFEB80FD3026 /* BSG_KSCrashSentry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D17A0EC0DC04303EE911732B8CC7DC /* BSG_KSCrashSentry_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 60A17B4467BB8BEFCD0ABD01EFC0A06D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = C78CF3840046AFBD425B5BA2D88F7679 /* UIImage+GIF.m */; }; + 612AF239D70CAC8510F33C25DEDF5A9D /* BugsnagSink.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A0C9D91AADACCB0F7BC5CD5DAC32D7 /* BugsnagSink.m */; }; + 616F1DAC3543DFC1DF7F54B4D545F89E /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DCA32FC3EF84D065EC78E506A8786DD2 /* NSMutableIndexSet+BlocksKit.m */; }; + 61901D7FDADE440505CF633B509D5634 /* JGProgressHUDAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EFAC56444AE0C2603F11EFC0F6E69F0 /* JGProgressHUDAnimation.m */; }; + 61A863254593DB365ACC412305A3E8A3 /* BSG_KSCrashReportStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A26E767099DE44C06F1217BA6DDCE6 /* BSG_KSCrashReportStore.m */; }; + 6358B09504E2E048A9FFAA8F72CEDBDD /* BSG_KSJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E607AC81443C3871BF30387BA78A65D /* BSG_KSJSONCodecObjC.m */; }; + 63F87C318437740E8202E4D3DD0826FA /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CDA2BF0D9BD2962E119971B674B23B2 /* MASCompositeConstraint.m */; }; + 649B0C44D1B8A7C0C403B0D546F8D469 /* NSError+BSG_SimpleConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1581E03529A6D917C47A559E471B10A6 /* NSError+BSG_SimpleConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 652F445D2487AC90EF216DF5814F7924 /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = D42F1F7BD09A5658175583E1F29D2403 /* UIPopoverController+BlocksKit.m */; }; + 65E88072A2BDC576BFC85E67EF9FBBC6 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F75D621F5076707D6A8A71C20B4D0AA5 /* MASUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6618EE80A4044B9928501F8B69FDD39F /* BSG_KSJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 66DE3E4D31868E477D7B013AA32BFE1E /* BSG_KSJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 668C4A1BDE1639CC44C8542A89A8F988 /* JGProgressHUDIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A2A62670930FAAE6BF48800107C306 /* JGProgressHUDIndicatorView.m */; }; + 674F1AD54F8E6D2B39906A700A85D355 /* BSG_KSCrashContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 90AA523DADBC730B1935E86F91F95992 /* BSG_KSCrashContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67B601A2F83405DBDA082EE891FE28AC /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C65A5A3BCA285CD434E1F167DD19E7C /* BKMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67CD70EA0B809F2840FCE47014818515 /* NSDictionary+BSG_Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 6120E88AF3F6A89FC4A2819A63D7CCDB /* NSDictionary+BSG_Merge.m */; }; + 697BEA2E5C767E5E2286411EE41A0915 /* JGProgressHUDSuccessIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A58145464B8A263A2BF1319A3516FC1 /* JGProgressHUDSuccessIndicatorView.m */; }; + 69BE6E07350C57D5D201A0FE245BC556 /* BugsnagSessionTrackingPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BA8EC563822E9BA7CE382F3F9A4E325 /* BugsnagSessionTrackingPayload.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69CA3E2FF4DBE5BCBCD813D2ABC37254 /* BSG_KSCrashState.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E4A54AB05AB734CF12A75359313AD6 /* BSG_KSCrashState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C3B7E9EB51BEA94D26C32F162020527 /* BSG_KSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = E12D6342943485BCFE44346EF146794A /* BSG_KSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CA9582BCD21E15C58584DF8C8CBE67A /* QNIpModel.h in Headers */ = {isa = PBXBuildFile; fileRef = B0FF88E297625329169B21F9C591C818 /* QNIpModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D28DADD58C889048A8CBD7D2CE352C9 /* BugsnagFileStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FB465335239F059238B783BA68A255BD /* BugsnagFileStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D44E0EDF2D4ACB4B54D422E2CDFAD2B /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E2C98C782E8F6059C1006DE0D8CE0FC /* UIButton+WebCache.m */; }; + 6D5D78624DEB38E63F436A8970F04D45 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C34134BA34BA326068BA806750948A2 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E7B90691DC2DA92CAF0523EFF61EA40 /* BSG_KSCrashSentry_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1F052E6E8EFF18388240351B7C77CF /* BSG_KSCrashSentry_NSException.m */; }; + 6F3479A727AE249165D7B50211B7A634 /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DD26DB680BF0B67905FACBE3D147CA /* NSObject+BKBlockExecution.m */; }; + 6FE1AE688036B71B8FC50037CB465F32 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3522EF35471625EEE334EA0BECBE05AF /* UIImageView+HighlightedWebCache.m */; }; + 70066FE39C703555B4DF5CB5727200E4 /* BSG_KSCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70740CD6AB1369312EE743251166C428 /* BSG_KSCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72A0A38C4C1A53BEC18A43E30130CCC8 /* BugsnagMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE1F97AB05865E43EC2A6E2D0B4EC22 /* BugsnagMetaData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73CDF267DA7E740D14B0454E2A0A468F /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = FC91F12171EC17B8D586555694981613 /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74043DE5C8997FC02879B8A7F7AEE390 /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = FDE9369E09C5959C144447B9335099DD /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7476F8D5DF46CFDFFAE62CE63A9ACD4C /* BSG_KSMachApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 4453A62DCC9DF0699B04136617A42E77 /* BSG_KSMachApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7484D38FC44E512E32E794CA8506C79C /* BSG_KSFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = 889370F77F8B15A29B76579F97B58F5F /* BSG_KSFileUtils.c */; }; + 74DA42EF86292B141E81C58CDE7C2B1B /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D1D214B9646E826FFB79151C1E4AEED /* SDWebImageCompat.m */; }; + 77D677CEC38D42F550F49703FE628637 /* JGProgressHUDShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FAF6C861056F03A4140343DC95914AA /* JGProgressHUDShadow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C1F6DDA42CDB34CF87F8CA02DE2CEA8 /* BugsnagNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC45236BB9BFEC1E835E9FC38B19FEB /* BugsnagNotifier.m */; }; + 7CF2AC7A3B3ED03B30C1E4ED662B0551 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 30A46C04B140CEC37E961D0E39BF2DB6 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D7BC056B92D37583CDF5F54B1C39ECE /* JGProgressHUDImageIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA1E70F22AC93D020F54AD83930B694B /* JGProgressHUDImageIndicatorView.m */; }; + 7DC27B0AE3EBD7836F185C5BD841DFCB /* QNDnsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E3CCE32179393F67375D36A8C000BC0 /* QNDnsManager.m */; }; + 7E644708F5AD28C42318E938E4452C97 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9230E0C901F41592E3DF9A67D2E716A9 /* NSButton+WebCache.m */; }; + 7E93D4070CC337A9E8B046B16CCE7086 /* JGProgressHUD-Defines.h in Headers */ = {isa = PBXBuildFile; fileRef = DFF6CE06FCC979B2501492F45042AE8A /* JGProgressHUD-Defines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7ED5F70ACDBE0FE90105F8F66AEE8D8B /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C285C3224707D9DF3318E4241B75C363 /* SDWebImageManager.m */; }; + 7F7CAC52ABAA6B84BA89293212B9F451 /* HappyDNS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 133B1F1CE9BC07E7CB0FE18638CD33C4 /* HappyDNS-dummy.m */; }; + 80561866CAD137AA4C634D9CF8FDDDCA /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 39023082C2207E1138A62545ACA55618 /* NSObject+A2BlockDelegate.m */; }; + 808CB12DFC51D1D5EAB74E1BA4CB9F06 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE6665FA6687575478E9F2D887AD706 /* NSOrderedSet+BlocksKit.m */; }; + 80F74BA39D5BD2509C49D1F283B008A7 /* QNDomain.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FD8DD93AB5A283AD969634CCE2FB863 /* QNDomain.m */; }; + 81F811A56B6724F7E8E2D25364E595E3 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE853BF6A41CBE71196E8BBBCECBF76 /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81F9B9F7C010DB711C9B55DE98ECF05C /* BSG_KSCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = A245B93E3CCC682F4979F51E8813B509 /* BSG_KSCrashReport.c */; }; + 835735CEED5DB31C758F2E0365107AA7 /* BSGSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D73602CED8DA70A2CDE67B1FE03E39 /* BSGSerialization.m */; }; + 83C63BD851A493127D45C8679B0C1095 /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = B776BCCB43F76B9381253B539FF8DD76 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 842D5570CF18F3743208B0EC81F10A22 /* BSG_KSCrashSentry.c in Sources */ = {isa = PBXBuildFile; fileRef = ECECCE7A8AEB033B5E981BD47FE4B0B6 /* BSG_KSCrashSentry.c */; }; + 8527D2FC6F312883A531B076DAC8D0BD /* BSG_KSCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = A6DBFB9182568D110B9ABB4C92CE15AD /* BSG_KSCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 864E8109B19B6191369FA0D5527175C9 /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = D700CEB29A4D74DD78472D61666C4939 /* UIGestureRecognizer+BlocksKit.m */; }; + 86A12F800EB675FCC7444EAA4740F7DE /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DFCA4B9AC445EE870C3E88672AFDD13 /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86B66F322F9639C8066867B154EADCB5 /* BSG_KSZombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 32BCA03F2A38924344C68A82C03F4C98 /* BSG_KSZombie.c */; }; + 86CB15B1174CBAB5B14DBB4D2EE8C298 /* BSG_KSFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B105A06E22A1F1C48C6FE432AB172A4 /* BSG_KSFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8712A73A5F37F3ED7BA5F3EB40F36C6E /* BugsnagNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = D0FEE1B7CA43D49A02E371FEECBCBDB2 /* BugsnagNotifier.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8796F55D3EF4127CAE0483CD024FA45D /* BSG_KSDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = 518A20E7BD85BA89C8AFE31BCD7A4C9F /* BSG_KSDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87FF5B8E152B0466AA35633966D62C3A /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 080112233C994DA7622A53C4708ED80D /* UIAlertView+BlocksKit.m */; }; + 88CDAB083BA1BF7EB86D87420B027729 /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B3FA53C5D2065D3FEF519E807B62AEF /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89B223B1BDD5CE436D3A19835F50B24D /* BSG_KSCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = B9F6FE99A4945618A12F259329765635 /* BSG_KSCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AE6B9E59DCFA59BE72698A2191CB610 /* UIImagePickerController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1984136C0AA72EB3042BA586D567F6EF /* UIImagePickerController+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C06D8ABE69DCB69B84866E13F7182DB /* BSG_KSCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA05598B5DB86EA1C67235DB5B97AC6 /* BSG_KSCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D77009DB3C17107F4AF36EE6358E289 /* BugsnagKSCrashSysInfoParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB90D44BA44BE285FB808F66671C882 /* BugsnagKSCrashSysInfoParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E402EFD7A93B5DC164FF9FC9D2F03C9 /* BugsnagCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 40B648C49DDD0D8E1D5AFCC5A2B431CB /* BugsnagCollections.m */; }; + 8E7566C5831CE82C0066607E09F9B346 /* NSError+BSG_SimpleConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = BE75B90B3452C4C80DFFB271A6C44DA6 /* NSError+BSG_SimpleConstructor.m */; }; + 8F3A7FAE3D018677E9591212799871B0 /* BSG_KSSingleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B564E31AC4C4CF2CC5D6E17959499C /* BSG_KSSingleton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F606A5D4F1892FEF2F9D2046AEF17E7 /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A0AA6E5AA0CD867DA5D58480481D4757 /* NSImage+WebCache.m */; }; + 909334810C50BB0AE48979046B77AB93 /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A20F5514583B5643E8783092763FE6F /* NSArray+BlocksKit.m */; }; + 909602E2A2C86F090D68E15F63C5D2D1 /* BugsnagKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F9F1B8F04BCFDBDA3EC8964F314D41A /* BugsnagKeys.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90E250F53AF594054F8CD406848ACBD6 /* BSG_KSJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = CDE4E747676BA40D8D5ECADBF184D4C6 /* BSG_KSJSONCodec.c */; }; + 9103687D945641FB47C645DE6C9AD953 /* HappyDNS.h in Headers */ = {isa = PBXBuildFile; fileRef = 844483D93AEF817850E68678A76C2C76 /* HappyDNS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 912A2DEFA1332384FD7F0FF7F708F8D9 /* BSG_KSBacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = B534CCFDC60AC6FECF92380A7A650681 /* BSG_KSBacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9194B58ACE900ED6BAE6AD92E24A2CFF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 3091017B6D40C295F66231E2F3AC7A6B /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 923D6C856211CFAAF949776E51F13707 /* BSGConnectivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A7A6FFFFAECEAF4CC374CA2E77CE77 /* BSGConnectivity.m */; }; + 92BF70E9D3285561EB404A7C4A4A6DEE /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = DD16ADC7F01A26324E9B7CF0A493B3BE /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92EF24997C6AFF9160F0C92B743B454B /* BSG_KSSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = 27EEABC91AC392A764FD525F72791B12 /* BSG_KSSysCtl.c */; }; + 94765EBA562A8931572142F0EB65BA87 /* QNRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A91C5E954FCF6B7C915E25FE01C10AB /* QNRecord.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96507E505EC7DBBD8F00A2AF8E031574 /* QNDnspodFree.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EC9EA854329AC18C4A67F21063E6E11 /* QNDnspodFree.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 996BB4B6535B54ECC0878ABC3F89F011 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD82385CB8D648D502368D238C5676C /* UIImage+MultiFormat.m */; }; + 998F1596653067D76BCAD88F8D0CBC3F /* BSG_KSCrashSentry_Deadlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 9234AEEF1F4B298EBD3214451FCD9C55 /* BSG_KSCrashSentry_Deadlock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B624B59504A25F40BF138911C2F6889 /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = C17A0A52653CBD01E6B87D07BE14FCF1 /* NSSet+BlocksKit.m */; }; + 9BCCDEC1044989F0BECFEAB755A0411F /* QNHijackingDetectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF1D231D8ACAF6FA64822EBCED10825 /* QNHijackingDetectWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C02E59E3DE7B60A7DB3EFC7E76035A2 /* BSG_KSMach_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = E61F55CC8CA6FE0FDED726C1ABDB0806 /* BSG_KSMach_x86_32.c */; }; + 9C74A86822D54116059A22663D1ACCA0 /* QNRefresher.h in Headers */ = {isa = PBXBuildFile; fileRef = B392E48C93883483E4161851FB5E758D /* QNRefresher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CF2822B59AF3F10DC6C8C0DA71ACEB3 /* UIBarButtonItem+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 60BD4334ABC2F7DE7AC47FF29F44ED13 /* UIBarButtonItem+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D24C2CA342464F72E9645AE9084D6A4 /* BugsnagUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E6ABB88573AB816E853CB38D8F967D /* BugsnagUser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D25FFE1FD226AF5E302D2513E0C9F69 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7574C0137F71D841B3B29511B2D2CC /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D8CEA85CA94325FB493A148D039602C /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F8781D1600C6C52B8609B43B0515A9C /* UITextField+BlocksKit.m */; }; + 9FEE6630390F3203A2633A0733435F70 /* BSG_KSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 45E7408AEAD159BE8EE934377888DC7E /* BSG_KSLogger.m */; }; + A1289CD11846663BD7109185193C4B82 /* BugsnagLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = AD50D1481660D097CD7B38A309703351 /* BugsnagLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1AFAAE75F22E56B1C810E1A57478260 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = E8936040259E1F97AE2DEF10224B5534 /* SDWebImageDownloader.m */; }; + A2DEE566030C77DF1397A3C1FB6A16FA /* BugsnagSessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5486ED85487C767A072A13CAF2697FF7 /* BugsnagSessionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A326795A61B5D035EAE422D71E01AF0F /* JGProgressHUDRingIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CB2BC56E1929450545B53E41F56D01 /* JGProgressHUDRingIndicatorView.m */; }; + A3307B8FB6EE0A049DBAE3AA4D2C6DA0 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD25A3470A290BA4F19692B31C5DD73 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A342683498F827B086866EA215751C05 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC03114642C8E97B2E2B71083E39DD7 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A34F6D080CA3C1D7E2FD6844BC1E1F66 /* BSG_KSDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = EB5BD9F7DFF1FCC8E9A9A160EF3FD0B1 /* BSG_KSDynamicLinker.c */; }; + A495CF59F0B1DD70B85387DBC099D985 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ECAFA212B76953320CE51185061271A /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7F5190EE7B38C2F083839B6BD3BC8A3 /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D07F85CE9F8B732BA0F59759BE1223F /* NSInvocation+BlocksKit.m */; }; + A8656F9F5FA8C032F68FBFD79EDAEA81 /* JGProgressHUDFadeZoomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 253DF9ECB63F85B7FDECCFD61F60D653 /* JGProgressHUDFadeZoomAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A893FFB0F9137E298D6752729850D1D6 /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F3944DC2EFDCB10CD1C1E93ADA547B /* MASViewAttribute.m */; }; + A96FDD14EF36D875312C9B977D3690CA /* BugsnagHandledState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5384A949F5F34DB15A701751798AA00A /* BugsnagHandledState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9A1C0ADA881C69815BC3F5DC2241CED /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E227A286033EA0DAA3416102BEEA9BA /* UIView+WebCacheOperation.m */; }; + A9BD71EC2B2D4B04B44B2BDCADD94117 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A35BE9C148711E2F6927929594430A22 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9DFFDDA43CB8D7014C56FEF218883A7 /* QNIpModel.m in Sources */ = {isa = PBXBuildFile; fileRef = FDD208D7703284C73858EDD5D9931DC3 /* QNIpModel.m */; }; + AA03442874A47D34D3EE92CD03567CC2 /* JGProgressHUDFadeAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6120C3F5D579D97362D9BCF696D6E50A /* JGProgressHUDFadeAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAC76E38D6E6FCACF94850E0E64D9832 /* BSG_KSCrashCallCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EBEBFFAA31F2C24709BCF873A5F9976 /* BSG_KSCrashCallCompletion.m */; }; + AB1C3247ED50C01B604B59437AD84517 /* BSG_KSSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B381AC685B39599CCE7895E7CC06B3C1 /* BSG_KSSystemInfo.m */; }; + ABA260F60D059F0E56DFB9357F2EE1E3 /* BSG_KSCrashSentry_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A06517392907A86C3EE90F936A09D92 /* BSG_KSCrashSentry_MachException.c */; }; + ADCDDEFA5446062309DA5DBCE53F64CC /* QNDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 47925D87B45F4F360F8D336574DF1B7B /* QNDomain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADF73D3D07DCCD33D75DB18F3D5A7997 /* QNHosts.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A01901F1577B0EED57E0FDCB0950D6C /* QNHosts.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF0DA335690D173C179A97DBF167E85F /* QNHijackingDetectWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 063BD509C758F3BDAD7540AA46400513 /* QNHijackingDetectWrapper.m */; }; + AF21EAA02BCD50A6CE3D9EA2D6FFEE11 /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E303AAE0435E68D727842CA27F9CB4CA /* SDWebImageGIFCoder.m */; }; + B20A0E5D8F9BCED1A82793C4BE9E7258 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = 29080304BD639016355C6F30385D6A9F /* Masonry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B26716DE118D330C411DAEFF5F47B317 /* Bugsnag.m in Sources */ = {isa = PBXBuildFile; fileRef = B030750C003187CAF16903C4BA2F68EE /* Bugsnag.m */; }; + B28593B40E687A5FBD924887593A165D /* MMMaterialDesignSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC0BF63A5A9CC32BBC8F0388DA518F3 /* MMMaterialDesignSpinner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B294B487389725262AC7DFD72A1691D6 /* QNRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = C23DE6C230B1E19AE954E2919A71BEAB /* QNRecord.m */; }; + B3397245B69F2050149CA9FC90761CE5 /* BSG_KSCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 90F92F2E64574252675F8EA5CEC1DACE /* BSG_KSCrashReportFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4A4EA9655602955A735675212BA339F /* UIWebView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F78B68289E2BE9736EE442989DD68422 /* UIWebView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B544ABD60943BEFA18254D77AF7B61A2 /* JGProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD6603A4CA3E47722422A3BC081EA14 /* JGProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B565D20FFFDF5BA5314FBDB509ED3F10 /* JGProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 72CA1877BCB9D3F656907E74AAA7EAA8 /* JGProgressHUD-dummy.m */; }; + B5DE58D5340CF7C2E389A4E7F9537028 /* QNResolverDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E8039A193131FD20BB3A12FCB779202B /* QNResolverDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6D23E119FD4F12461265197AC525B0A /* BSG_KSSystemInfoC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD58B7B103307E352A5B9723463CF48 /* BSG_KSSystemInfoC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B744645E35C7E9FF8E283AC77B74D905 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2033803E751374DB12FBB0A56BF83AE0 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B829A89911987C35F1C5DB1FEB47C3E1 /* BugsnagErrorReportApiClient.m in Sources */ = {isa = PBXBuildFile; fileRef = E426EE515BD51CC86E9CFCB012D95CB4 /* BugsnagErrorReportApiClient.m */; }; + B84CDEC089EA6BFAFB28C81F4B370C80 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F6D5EED4194E7A48E19E290246220C /* UIImagePickerController+BlocksKit.m */; }; + B946AFB1A725D85E07F645A7EF086383 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B73A0F728115CB1CF2107AEA23F7F0 /* NSArray+MASAdditions.m */; }; + BA0E0DE2BA38EDCCDA95E7F37AA844C9 /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = D963CE22ED72456759C9CF4FCB01FA23 /* NSCache+BlocksKit.m */; }; + BA837C8FB9BD5FFDFD7D6C0CA79A434F /* BSG_KSCrashSentry_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = E55B4E0FFF90B98A4C48A2D9C5D3475E /* BSG_KSCrashSentry_Signal.c */; }; + BB2628A5ADDFD79DE6E62E76A2C63AD3 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4739D9161301F773FE924DD388597878 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC00029DAD4CBA7A9DA15E1786496E6E /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF931307F012A2053801DEC1FE0DFC6 /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD3C10A15A1485B6B36C066EB103FAA7 /* BSG_KSCrashReportVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E052CA9DE91D9FAE441A0F398274DD /* BSG_KSCrashReportVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BEBDAA2911FDC5A9F7005E93EFCF9584 /* BSG_KSCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = 3BEB4CBF8743AC5683339D5FF6E65481 /* BSG_KSCrashC.c */; }; + C05FC6699632FE712174ED875A605410 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F1A608EF38BBD85D84317AF703AC4BBF /* ViewController+MASAdditions.m */; }; + C18CFE69E0418BF129C9CA7F4C2A3AE3 /* QNGetAddrInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = CE34D6910D448B48E1B6CC5D8827B62B /* QNGetAddrInfo.m */; }; + C1E3F74476B9650C185CF50241D186A9 /* BSG_KSMach_Arm.c in Sources */ = {isa = PBXBuildFile; fileRef = 237738AF826FF0B408FB33D2B5523CD8 /* BSG_KSMach_Arm.c */; }; + C21932194DF4643EF3BDD85516B0A11D /* UIAlertView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 828D509B11639C4AD96137B8D281D3D4 /* UIAlertView+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2DDB4B70A23E9F594A646E839C3D369 /* MMMaterialDesignSpinner-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D306915379A95F29AC586F0827664757 /* MMMaterialDesignSpinner-dummy.m */; }; + C36AF4971FA49B7FD07698261293ED42 /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D571EDF6DAFF89F5D7D724C798ACA52 /* SDWebImageCoder.m */; }; + C38ABD16D001FF0B6C75D8001BF0EB52 /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E5E63A5A85B28D19BF546C6DEB3B1C /* NSObject+A2DynamicDelegate.m */; }; + C52F73F557477894EAA0A37F5E7B45AB /* BSG_RFC3339DateTool.h in Headers */ = {isa = PBXBuildFile; fileRef = B006CAC860CE89318AE88CE9D8F6847D /* BSG_RFC3339DateTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C60A1CA8B5E6D829445AE31B23D2F3D0 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F13266EA0097BE1406D5ABB0463653B /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C61160BB10D1503062E97232D3C2060B /* BugsnagSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2933F5751D9C4CE53673B1778A9524 /* BugsnagSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C648FEF0F8DB28A791485F18AFF66F7E /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E0D86E628BB8CD8547F74671E4CEB0C /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C74D2E856ADC8139CD00DBD184061B23 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 095AF3D1B32ED590BBB2239CB1DC2B94 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C755FF91CFC68C381A8BFEFD5088D979 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B7A7D6E53F8A4F1F19D65C5D95F0EA /* UIImage+ForceDecode.m */; }; + C760200B79320668F46D7091A43ADA4D /* BSG_KSSystemCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C40976B25BCEAE16707EC484BB8FA9 /* BSG_KSSystemCapabilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7920681F0164686C56327ED3C6AAC58 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C30B7D778B321F7B078292406910A5 /* View+MASAdditions.m */; }; + C7F0806E9002E9825E3795B339E81FB2 /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 627CC28A277027BC84DA4450949AB621 /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C86A19FB977F5D934F0865759E9CF3F9 /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C1824C50646ACE38FE44CCBD533161 /* NSIndexSet+BlocksKit.m */; }; + CA0B019BDF65F09D767B974D9A85AA8B /* BlocksKit+UIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9C1182B98E547BC39492C61F34929D /* BlocksKit+UIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAF0C75140C597BFE2B83733FC9FCB58 /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E8BD95EC20AB9D09EF39DDBFE63301E /* NSObject+BKAssociatedObjects.m */; }; + CB0B97FE3CD3FB61A439E03135030147 /* JGProgressHUDSuccessIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = E4FD2807FFF6FD4868E4F784F3E64157 /* JGProgressHUDSuccessIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB6D56B916F04E5B14AD5FB7F46450A2 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 76110038AE081824A5F2F8959E90236C /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CBEF06F4A216F649415F27134214A0E8 /* BugsnagCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 82D82860579B2270941D46AFE1864AD2 /* BugsnagCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE820E09C747DD81D44FBA22131AA804 /* JGProgressHUDFadeZoomAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B8ECE6CE2D343E9FF764553D877DE7 /* JGProgressHUDFadeZoomAnimation.m */; }; + CF1C151607898DF6693DD5C4823D0B5F /* BugsnagApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 229D726EC19059F5922A52EB5766DA36 /* BugsnagApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF8975EC4D9312C767352D8DBEB54441 /* NSDictionary+BSG_Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 57B3B54B5D0EC2E7BD3A7CC4C5879106 /* NSDictionary+BSG_Merge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CFED6007A4F1E2B0B84C18E34F173C5A /* BugsnagUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 545A7BC505467EFD732C9FE39DF03EFC /* BugsnagUser.m */; }; + D002DA7E4DADFF6B35061A2700BA3E68 /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A155E41C802F6DF86EF001BDF119458B /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0477D46C3DD962279EFF5B2F12F1AF0 /* JGProgressHUDIndeterminateIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 88AEBFD16FF67A0FBDD1DD437C01F0E0 /* JGProgressHUDIndeterminateIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D173A24DBC65FAABEC1D1163E2528163 /* BSG_KSCrashType.h in Headers */ = {isa = PBXBuildFile; fileRef = 7131170949CCD2723BBFE52A31EE6828 /* BSG_KSCrashType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2028FCA260D365DDB7A71DBE3CD2DC6 /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EDF1B19294C351EFE07E56671326ACAA /* SDWebImageCodersManager.m */; }; + D26240E466A033A5C1592C47129F11F8 /* BSG_KSMach.c in Sources */ = {isa = PBXBuildFile; fileRef = E51FE7D15007376E6E9902D68C512C3D /* BSG_KSMach.c */; }; + D2C9ACFB32FF7A801A212083B334D6C3 /* BSGConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = E8987FC72C678A4622139EDEFCD04B59 /* BSGConnectivity.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3155159B080EA7928185EC97029DD84 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 8396C8305B6B863513A5428F058E4EA5 /* NSMutableOrderedSet+BlocksKit.m */; }; + D3155498814344A88F349CE42C2D5646 /* BSG_KSZombie.h in Headers */ = {isa = PBXBuildFile; fileRef = CED3BC22EE9470EA8DF490F7CA84DDAB /* BSG_KSZombie.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D38A1819376D3C3680B3D0D1FA1BCCAA /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = FD0354FF9B699D0B4CBDC5673A6F8820 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5C8A60277EDCFDCE94A423B96453FE6 /* JGProgressHUDIndeterminateIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F48AECCE01E3F52AC1AD39D37AA7EE /* JGProgressHUDIndeterminateIndicatorView.m */; }; + D6C519408CD7E6E3B35E0ACF8F577FB3 /* UIControl+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ECBE8D1CAE4A70199649D699B9704B5 /* UIControl+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6FFD1746F0D7645AECB30A903CB0E86 /* QNDes.h in Headers */ = {isa = PBXBuildFile; fileRef = A8509B0AEF4E2FCF05B36C320F213143 /* QNDes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D72EE0E749232B2C899702FC1C9402BB /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 714AA9DD9B0F1BCE3D90B268A57043A4 /* Masonry-dummy.m */; }; + D8FAE3C449D3E0063429AC2A77A02E2D /* BSG_KSBacktrace.c in Sources */ = {isa = PBXBuildFile; fileRef = A68CBDE8A9BB1C6A821CA0CB1980A6E9 /* BSG_KSBacktrace.c */; }; + DAB5D785AB42FC987C5D48193B395546 /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 79194EEF3570698C96B21C34C841415D /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC4C4CD8111EA1D442DB92EFB833F4DE /* ActivityTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FE19206F001F7277B948F96685B5D7 /* ActivityTracking.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DCA923BCCF01487B8B95E1B20767FF17 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D83B0866070296738FD4D149C351D3F4 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD440529F06B5DF8CA710BF4DD835150 /* BSG_KSObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 660AB4E67D152D8A49B1E3D0E28E4836 /* BSG_KSObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD9EEF86FCFDB4130D87A622164BA5CF /* QNNetworkInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E89E00109FEF478942181AE569B80D5C /* QNNetworkInfo.m */; }; + DDDA2FCBB5D54C95AEDC69F9715CBFB9 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = D45AEC51C331068BF8F91EC62E269E34 /* SDAnimatedImageRep.m */; }; + E1D8B0082951C48A9D929EC6F0A4450A /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = DEF89F8209C2188308C1DC4BF83C7F0F /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2ADC0608F10970C796A83F6C7FE651C /* BSG_KSMach.h in Headers */ = {isa = PBXBuildFile; fileRef = A72C164AA781070E2EDD44DB155B4A5E /* BSG_KSMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E30D2027FD62FF527E735CE6C455ECDF /* BugsnagSink.h in Headers */ = {isa = PBXBuildFile; fileRef = 176A66C6CBC6845C997E9E7617886C97 /* BugsnagSink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4E66C32A9EA1211092286A2F2C9F0B6 /* BSG_KSSafeCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = FEBFE81A72AD4FFCBA4BC6582DD63E33 /* BSG_KSSafeCollections.m */; }; + E530B8B1E005AA98DC2F881ED52BD8FA /* JGProgressHUDRingIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A386E3346104E972AF6956C45FFE1C6 /* JGProgressHUDRingIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E550C4A206E2021091073BA0B0B5B3C4 /* BugsnagMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = EED210C0F440388FE74FC31665B17DA6 /* BugsnagMetaData.m */; }; + E5D1F11D7D5D5B40FFAF4F02871EF098 /* BSG_KSJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = C28BDBC70D607E2C6698288A1F553A05 /* BSG_KSJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E76935CFF4AF327F8D9A7C1935F7D900 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CEA1D18E5979EED1F2164C0A82662F6 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7CD6F561479E69059F78B43B47B6EAA /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 502D837830CE0A1BB3E476AC469AF187 /* NSMutableSet+BlocksKit.m */; }; + E84728FD19EC36762BBD6D5C9EE556B9 /* QNGetAddrInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FC435667109B397418161F49C428E1AB /* QNGetAddrInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9715AA55DF39BF86F85B6B3F246A558 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B2AA00D6CBB2BA4E37903C74AA5F6209 /* NSDictionary+BlocksKit.m */; }; + E9F701052509F2C006E98FC917C2E223 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC3F814031C92E9B2510DD531E8B05B /* SDWebImageTransition.m */; }; + EAAD293E08F2A3A7D5273F51D00E2EDD /* BSG_KSArchSpecific.h in Headers */ = {isa = PBXBuildFile; fileRef = 44D17C8EEE3DA52CBD7B944411A01A30 /* BSG_KSArchSpecific.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAB4C8F947E8B49C87955FE2DC877DCC /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B80BAE170CB1AF103649F4985767FD /* NSMutableArray+BlocksKit.m */; }; + EB65AF2B6BE84F9103F75183BED66B07 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D4170B88766C08CD83F49DF4FF6FD435 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB663E3E1EB4BB670DC29B77DB330135 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = ECB0CD6B51028E00889138CC04EB6CEB /* MASConstraint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB947BA9E04ECB15ED096DE2D8317F40 /* BSG_KSCrashState.c in Sources */ = {isa = PBXBuildFile; fileRef = C017EBA7228E2886288F2ED0F18E2E1C /* BSG_KSCrashState.c */; }; + EC72EF71E479531B589177FC24982337 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 498EDBAACE5DE1CD7FA5686161FC3D1B /* SDImageCacheConfig.m */; }; + ECB6CB041295FEA9FBF89AF309A032AE /* BSG_KSSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 73D48B6C182BB95F6DBD2D70F5B9D72B /* BSG_KSSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ECFEA50EA6B65F83B68B87C13DBE1A97 /* BSG_KSCrashSentry_Deadlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9502079BC7A27CE9BD7204F795928E71 /* BSG_KSCrashSentry_Deadlock.m */; }; + ED360105A24B7B2CE24394E66CF229CF /* BlocksKit+MessageUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F97CD4E37A1018300E9658042E594C9 /* BlocksKit+MessageUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED82F152137DBD78D72578D0FA3247BA /* UIRefreshControl+MaterialDesignSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B361FECA35090F4B0A607401C5ABF55 /* UIRefreshControl+MaterialDesignSpinner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED90EA11C1B989DAFFE46A5A5E94BC24 /* BSG_KSCrashSentry_CPPException.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7602750296879DE5DB95DAB62DC9C031 /* BSG_KSCrashSentry_CPPException.mm */; }; + EDE3BA2407D442231FCF75E5AB3A999A /* UIGestureRecognizer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 391726B5BAE6D850BF6EDFB3AC131C88 /* UIGestureRecognizer+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE659430F4CE57D5801A4A53A98140A6 /* UIActionSheet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C0A827B8443EDEA3D98209B3C5FE5F49 /* UIActionSheet+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE839AD9056E372ABA3A91822FB04D95 /* JGProgressHUDAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A31390612D463D2B1728DAAD2497E447 /* JGProgressHUDAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE936A6838005A5ED1BC5F74BE37B7BD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F715CBB6B30CEF29283BE952BCE2184 /* MASConstraint.m */; }; + EF1FC16B7CA83139B5EEA7126B41D50C /* JGProgressHUDPieIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 737D78FE3E42F8A23B63011C94CB254B /* JGProgressHUDPieIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFF12870567B25473265F7BF95DCCFE7 /* BugsnagSessionTrackingApiClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C1C83B260155E2B2A2DB819E3892C0F5 /* BugsnagSessionTrackingApiClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F04708D4B3F70190BA210282FA6A1913 /* BSG_KSCrashSentry_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = 15AD3D28C5E974EC02C4F08F17E5E3F6 /* BSG_KSCrashSentry_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F112D0317F099CD4CA5379BEB982C3F8 /* MMMaterialDesignSpinner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F392F42507262D92CE779D914C66670 /* MMMaterialDesignSpinner.m */; }; + F1923EAD3D13AEB768A0819C11D39986 /* BlocksKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 547DAE1B095DDF510078AEE8E67383F3 /* BlocksKit-dummy.m */; }; + F1AC006087DD047BAF39A454D11990E4 /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B513AA91EAC7F9B3B9F577710722B7 /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F1B75048874B8773E5568E6D3ACA12E4 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 715BB4C46C8DE8EDEEA613E11C00B253 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2E595DF94B71C173F77B018B71A29FD /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 657F9206B40BE62B2B5717ECB6510232 /* UIImageView+WebCache.m */; }; + F2FDF8CC54957DE05FD93F99AD1F2A2D /* BSG_KSMach_Arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 3340BF20CBC468CCA44285ACED31D08B /* BSG_KSMach_Arm64.c */; }; + F37B2894E219BA1EEE1AEFE28E30D6CA /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 429BBF7DE00800B81D05792F86FE8BF7 /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4B43F05E54ED2E1838BD8BB4A8D4184 /* JGProgressHUDPieIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = C4EBF1B36CA846531BD03DA94952F109 /* JGProgressHUDPieIndicatorView.m */; }; + F5A60C32D03741A0BAD72AF81B85A98F /* BugsnagSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = EDDD9447A81A79B1AD74E1BF15EDEDB5 /* BugsnagSessionTracker.m */; }; + F670C7D7A113FD39CB4416E64D52A249 /* QNResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC81B954EE0A5E2FD15180501085A9C /* QNResolver.m */; }; + F8A1500CCE7E735746B42A529B167942 /* QNNetworkInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B7357A48605CDE300B12B3F3568CE9 /* QNNetworkInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F937F6E5793327A85747214E9B2642D7 /* QNDnspodFree.m in Sources */ = {isa = PBXBuildFile; fileRef = E9BF84197D4841FC20DFFE58E2CA1ED7 /* QNDnspodFree.m */; }; + F9AF462C21BE1444D6661E873F52F1E1 /* QNDnsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB0256DF1F4F20FDA80A4C8CE01D73B /* QNDnsManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAC7F4F99D97AEFE71BD2B5DD10B6AE9 /* BSG_KSCrashSentry.h in Headers */ = {isa = PBXBuildFile; fileRef = C070AE4A38678CD2BD3713B279893BD1 /* BSG_KSCrashSentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC059126654AB27E3761FE608D4BABB7 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F42AB2D1C48C343FEEB8CAF7F3DEB4 /* UIView+WebCache.m */; }; + FC2C974193A75CFD561D5F33EBDF0D00 /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F4B614792EC501B17939EE37961177 /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD4D22414E51BD4D48C713D01E1ABFA5 /* BSG_KSMach_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = E21D650B293C368DFDE5C5742BB906FC /* BSG_KSMach_x86_64.c */; }; + FDF18252113B41829D073F8EE644BD06 /* Bugsnag-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A802AE814BA1625230387F76E2A0ACAD /* Bugsnag-dummy.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0402F497AFC319A782CFB5A93D036911 /* PBXContainerItemProxy */ = { + 19880FDF334D7DA45A062F215129340F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BDC8B0769B39E03BE257939D6FD4D966; - remoteInfo = Bugsnag; - }; - 0D240BB8B40B9FF0D75E59F148B466BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BBD6B43FA0F7FFBCD1978EBE76F99021; - remoteInfo = "JGProgressHUD-JGProgressHUD"; + remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; + remoteInfo = Fabric; }; - 30024B75A7B24537CDB65321FF082442 /* PBXContainerItemProxy */ = { + 33799E8F7C28982DA974A928942291A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B2777DC549C19A310651FBD3C87B71DF; - remoteInfo = BlocksKit; + remoteGlobalIDString = BDC8B0769B39E03BE257939D6FD4D966; + remoteInfo = Bugsnag; }; - 5A4998DEA87BF35412544B91D0645F4D /* PBXContainerItemProxy */ = { + 48B9BD23C11630951C70ED05B521F1D4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C0E41540D6862472ED7F2FA11669BE1F; - remoteInfo = Crashlytics; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; }; - 65C0E8C2D4913B2267242F6095C9C5C7 /* PBXContainerItemProxy */ = { + 577ED207D2EA03264D9E12BE0C091082 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; - remoteInfo = Fabric; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; - 663D807ACAB105DA98451FAB51471A2A /* PBXContainerItemProxy */ = { + 7522A9BE701FC9A177B5B9E72D19DE0C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6F3964F174D0EBFB0D64F8DBC20E1429; - remoteInfo = JGProgressHUD; + remoteGlobalIDString = 96F820A9CBD7912A405650AC238D1F8E; + remoteInfo = HappyDNS; }; - B33BDFAEAB1927E3D0463DBBAFE63ADC /* PBXContainerItemProxy */ = { + A006E09F5F1C46C0AB99BD310B851BED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C6E91171266BAC1C56880BC4814260AA; - remoteInfo = WeiboSDK; + remoteGlobalIDString = C0E41540D6862472ED7F2FA11669BE1F; + remoteInfo = Crashlytics; }; - B6E8A4AC3A780A9D3F31211798294E90 /* PBXContainerItemProxy */ = { + C0D46A3D2876328691836D3FBA0521F2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; + remoteGlobalIDString = 6F3964F174D0EBFB0D64F8DBC20E1429; + remoteInfo = JGProgressHUD; }; - CE2F8856CCC01B73BDD242D693FC4826 /* PBXContainerItemProxy */ = { + C1BF76B013C67AA8F06425CFA8B03BC3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 08D1C32F3760C018544DDB02B1C53A5B; remoteInfo = PLPlayerKit; }; - E42DAFA2E0A7C6F9E69ABF286F421E8F /* PBXContainerItemProxy */ = { + C89A34585B589444540952C7197E3CC9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; + remoteGlobalIDString = 42DEC9A4B20265DB1DB1D22459F80C88; + remoteInfo = MMMaterialDesignSpinner; }; - FBBA954CF0B0E79D76D6ACC7536A6BB0 /* PBXContainerItemProxy */ = { + E4EBE5A5614696E114B033E8836473D1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 42DEC9A4B20265DB1DB1D22459F80C88; - remoteInfo = MMMaterialDesignSpinner; + remoteGlobalIDString = C6E91171266BAC1C56880BC4814260AA; + remoteInfo = WeiboSDK; }; - FDC0D4BF4C069C66A4CAA7C84FF27B41 /* PBXContainerItemProxy */ = { + E7A4E0D9EAD18C0CE7A7550D9BDF8DBF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; remoteInfo = Fabric; }; + F140C765399CD31755F4117EE7D76A54 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B2777DC549C19A310651FBD3C87B71DF; + remoteInfo = BlocksKit; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 000D19DFE15465CEE978C72072B864E4 /* BSG_KSBacktrace.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSBacktrace.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c; sourceTree = ""; }; - 00DCC18874B128E09D3AC3B0A78AB8B3 /* JGProgressHUDFadeZoomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDFadeZoomAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h; sourceTree = ""; }; - 0152A1093BC1F6DD3C8CE615CA90D779 /* NSInvocation+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+BlocksKit.m"; path = "BlocksKit/Core/NSInvocation+BlocksKit.m"; sourceTree = ""; }; - 0164C60480BDFABF914FF6BE049C1C5F /* BSG_KSMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSMach.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach.h; sourceTree = ""; }; - 01724419BA7F4AAE9F774A3FC1D1BB62 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; - 01DF55108356F0DB9F283FBEB6593BFD /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; - 01ECD6C8D7A21FFA3A1EED987D0C13D0 /* WeiboSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.debug.xcconfig; sourceTree = ""; }; - 02D31D24C8DA79D4453170F8B3F65778 /* BSG_KSBacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSBacktrace.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.h; sourceTree = ""; }; - 03DDC18246077DCA728630C48FC74B8E /* JGProgressHUDImageIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDImageIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDImageIndicatorView.m; sourceTree = ""; }; - 0450AC485092A6DAB4EB0CF5733EACA7 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 0009A0CD2C104DDCB17F61323FD76458 /* MMMaterialDesignSpinner-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MMMaterialDesignSpinner-prefix.pch"; sourceTree = ""; }; + 0189D0D53D45B456DFFF31419D1626E3 /* BugsnagCrashSentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashSentry.m; path = Source/BugsnagCrashSentry.m; sourceTree = ""; }; + 03B73A0F728115CB1CF2107AEA23F7F0 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; 0479A8AB7DA16E77B0741BCC1F5845BD /* PLPlayerKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PLPlayerKit.release.xcconfig; sourceTree = ""; }; - 055A94DC9A3B055BCF9A05E78E2F05C4 /* NSObject+A2BlockDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+A2BlockDelegate.m"; path = "BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m"; sourceTree = ""; }; - 058D9599650E197CCD657E3D48359D4C /* WBSDKRelationshipButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKRelationshipButton.h; path = libWeiboSDK/WBSDKRelationshipButton.h; sourceTree = ""; }; - 05DFC80D52CD47BB11C61A9BDA4849B2 /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; - 05E9C771468A4009403B3376824F2062 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; - 066CA7FA8AD42002E9592E921977A135 /* BlocksKit+UIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BlocksKit+UIKit.h"; path = "BlocksKit/BlocksKit+UIKit.h"; sourceTree = ""; }; - 081526B27CA12716008E82A34191670B /* NSOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSOrderedSet+BlocksKit.m"; path = "BlocksKit/Core/NSOrderedSet+BlocksKit.m"; sourceTree = ""; }; - 083774F95FFCA6F25E15B558E8BB0D00 /* BSG_KSCrashState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashState.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashState.h; sourceTree = ""; }; - 095F344F673333A54E26618BDB8A960A /* BSG_KSCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportWriter.h; path = Source/BSG_KSCrashReportWriter.h; sourceTree = ""; }; - 09C20AFA26C0EF3730019FC34FD0BB2D /* JGProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUD.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.h; sourceTree = ""; }; - 09DED3E0F18DF6E7FE74FA315C904F27 /* Crashlytics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.debug.xcconfig; sourceTree = ""; }; - 0AAA1E0ABC9EDDF569A6BC7DC2AF3101 /* NSMutableDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableDictionary+BlocksKit.h"; path = "BlocksKit/Core/NSMutableDictionary+BlocksKit.h"; sourceTree = ""; }; - 0B5E17A34E00B44E46CBA8A2BCC1C70D /* BSG_KSCrashState.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashState.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashState.c; sourceTree = ""; }; - 0B9943AC9416ED954E5F39B5BFD2AF3C /* BSG_KSCrashContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashContext.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h; sourceTree = ""; }; - 0BA4C2B68351540586D5B66C91CCB294 /* BugsnagKSCrashSysInfoParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagKSCrashSysInfoParser.m; path = Source/BugsnagKSCrashSysInfoParser.m; sourceTree = ""; }; - 0C664F4F870DB9004E5E0611A9258B63 /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; - 0CA1F74ECC8226301FD91CAE445B55BA /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 0E03B0485B3641CE731DDB131239B0AC /* UIRefreshControl+MaterialDesignSpinner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+MaterialDesignSpinner.h"; path = "Pod/Classes/UIRefreshControl+MaterialDesignSpinner.h"; sourceTree = ""; }; - 0E08235584359C3E9AA20D9C9CCD9282 /* BSGSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSGSerialization.m; path = Source/BSGSerialization.m; sourceTree = ""; }; - 0E32525D7B85252EB4865D8AA9C32C71 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - 0E438142310E34F101C8FD33159A0933 /* BugsnagConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagConfiguration.h; path = Source/BugsnagConfiguration.h; sourceTree = ""; }; - 0F753BA77665DA568056828558264AC2 /* A2BlockInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2BlockInvocation.h; path = BlocksKit/DynamicDelegate/A2BlockInvocation.h; sourceTree = ""; }; - 126AB0D6A6011B5CCC82003FF0FA5557 /* BSG_KSJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSJSONCodecObjC.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodecObjC.h; sourceTree = ""; }; - 13AD00FBAF440BF7ACEC53EFAB909957 /* BSG_KSZombie.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSZombie.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSZombie.c; sourceTree = ""; }; - 14304399DCCB79685B3FBD6B91B780A2 /* BugsnagCrashSentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashSentry.m; path = Source/BugsnagCrashSentry.m; sourceTree = ""; }; - 14B7C90729F7C37896E4326397D97F7E /* UIWebView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+BlocksKit.m"; path = "BlocksKit/UIKit/UIWebView+BlocksKit.m"; sourceTree = ""; }; + 05C30B7D778B321F7B078292406910A5 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; + 063BD509C758F3BDAD7540AA46400513 /* QNHijackingDetectWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNHijackingDetectWrapper.m; path = HappyDNS/Local/QNHijackingDetectWrapper.m; sourceTree = ""; }; + 080112233C994DA7622A53C4708ED80D /* UIAlertView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+BlocksKit.m"; path = "BlocksKit/UIKit/UIAlertView+BlocksKit.m"; sourceTree = ""; }; + 08E052CA9DE91D9FAE441A0F398274DD /* BSG_KSCrashReportVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportVersion.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportVersion.h; sourceTree = ""; }; + 093B98AA77F7B6455787637F9A607ECB /* BSG_KSCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportWriter.h; path = Source/BSG_KSCrashReportWriter.h; sourceTree = ""; }; + 095AF3D1B32ED590BBB2239CB1DC2B94 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; + 0A386E3346104E972AF6956C45FFE1C6 /* JGProgressHUDRingIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDRingIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h; sourceTree = ""; }; + 0B474BC1F42C23E47A3B6CE3AD6AC53B /* BlocksKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BlocksKit.release.xcconfig; sourceTree = ""; }; + 0BE6665FA6687575478E9F2D887AD706 /* NSOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSOrderedSet+BlocksKit.m"; path = "BlocksKit/Core/NSOrderedSet+BlocksKit.m"; sourceTree = ""; }; + 0CAB92413D236728023363618EF6A1EE /* UIControl+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIControl+BlocksKit.m"; path = "BlocksKit/UIKit/UIControl+BlocksKit.m"; sourceTree = ""; }; + 0CD6603A4CA3E47722422A3BC081EA14 /* JGProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUD.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.h; sourceTree = ""; }; + 0D533380BAF865E4DD12ECDCC1F70A71 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 0E2609621C550044C314FAFC068A9E77 /* NSURLConnection+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLConnection+BlocksKit.m"; path = "BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m"; sourceTree = ""; }; + 0EFAC56444AE0C2603F11EFC0F6E69F0 /* JGProgressHUDAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.m; sourceTree = ""; }; + 12C40976B25BCEAE16707EC484BB8FA9 /* BSG_KSSystemCapabilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemCapabilities.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemCapabilities.h; sourceTree = ""; }; + 12FA4FB58476F6286A55814FA729CAAF /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; + 133B1F1CE9BC07E7CB0FE18638CD33C4 /* HappyDNS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HappyDNS-dummy.m"; sourceTree = ""; }; + 135F1FEA4041A79C577E7BF85E4C3B89 /* MFMessageComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MFMessageComposeViewController+BlocksKit.h"; path = "BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h"; sourceTree = ""; }; + 13A25BF310A9922485F7539D1B301E4B /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; + 14624B82A0148DDE32CCB87FC4BA8D98 /* QNIP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNIP.m; path = HappyDNS/Util/QNIP.m; sourceTree = ""; }; + 153F8F9B0A3996B02592F6EBBAD57BB2 /* WBSDKRelationshipButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKRelationshipButton.h; path = libWeiboSDK/WBSDKRelationshipButton.h; sourceTree = ""; }; + 1581E03529A6D917C47A559E471B10A6 /* NSError+BSG_SimpleConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+BSG_SimpleConstructor.h"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSError+BSG_SimpleConstructor.h"; sourceTree = ""; }; + 15AD3D28C5E974EC02C4F08F17E5E3F6 /* BSG_KSCrashSentry_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Signal.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Signal.h; sourceTree = ""; }; + 15E6ABB88573AB816E853CB38D8F967D /* BugsnagUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagUser.h; path = Source/BugsnagUser.h; sourceTree = ""; }; + 16328E3FF1AA02A5AA3B5ED714B9C062 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; 16BCB11BB556B1C6FF65E0500DC29D03 /* Pods-NiuPlayer-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-NiuPlayer-resources.sh"; sourceTree = ""; }; - 17C59BF43FEBC341F140DF2032BC7EE6 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/SDAnimatedImageRep.h; sourceTree = ""; }; - 183EA19F9A679E607F60D80B99273A58 /* Bugsnag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bugsnag.h; path = Source/Bugsnag.h; sourceTree = ""; }; - 184786EA9ECBAD604F4AE579CC8DA11E /* Crashlytics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.release.xcconfig; sourceTree = ""; }; - 1987C79E50A35B9C47F2E12C4FFEE7DB /* BSG_KSMach_Arm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_Arm.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_Arm.c; sourceTree = ""; }; - 1A2F096249D480F9FA6521733553D875 /* BSG_KSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSLogger.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSLogger.m; sourceTree = ""; }; - 1EB767781D943E47C7EEBA34ACA41067 /* MMMaterialDesignSpinner-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MMMaterialDesignSpinner-prefix.pch"; sourceTree = ""; }; - 1F5241E0C002955AFA851071B4E58EEE /* Bugsnag.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.debug.xcconfig; sourceTree = ""; }; + 176A66C6CBC6845C997E9E7617886C97 /* BugsnagSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSink.h; path = Source/BugsnagSink.h; sourceTree = ""; }; + 18D17A0EC0DC04303EE911732B8CC7DC /* BSG_KSCrashSentry_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Private.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Private.h; sourceTree = ""; }; + 1984136C0AA72EB3042BA586D567F6EF /* UIImagePickerController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImagePickerController+BlocksKit.h"; path = "BlocksKit/UIKit/UIImagePickerController+BlocksKit.h"; sourceTree = ""; }; + 1A80ACF0E51B7332AC7293B8E1D89E9F /* BSG_KSBacktrace_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSBacktrace_Private.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace_Private.h; sourceTree = ""; }; + 1AA05598B5DB86EA1C67235DB5B97AC6 /* BSG_KSCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportStore.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportStore.h; sourceTree = ""; }; + 1AE1F97AB05865E43EC2A6E2D0B4EC22 /* BugsnagMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagMetaData.h; path = Source/BugsnagMetaData.h; sourceTree = ""; }; + 1B3FA53C5D2065D3FEF519E807B62AEF /* A2BlockInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2BlockInvocation.h; path = BlocksKit/DynamicDelegate/A2BlockInvocation.h; sourceTree = ""; }; + 1BBAE793CA6A3452E1E6CFCBED018E3F /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; + 1CB5EC40831F52C87F693F3EE291A99C /* NSInvocation+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+BlocksKit.h"; path = "BlocksKit/Core/NSInvocation+BlocksKit.h"; sourceTree = ""; }; + 1D1D214B9646E826FFB79151C1E4AEED /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 1D7574C0137F71D841B3B29511B2D2CC /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + 1DF624E1511978793A6054936D583AD0 /* BugsnagBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagBreadcrumb.h; path = Source/BugsnagBreadcrumb.h; sourceTree = ""; }; + 1E2C98C782E8F6059C1006DE0D8CE0FC /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 1E3CCE32179393F67375D36A8C000BC0 /* QNDnsManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNDnsManager.m; path = HappyDNS/Common/QNDnsManager.m; sourceTree = ""; }; + 1E5B44E9ADEF5B793B92E3D1D2C5A6DE /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; + 1F715CBB6B30CEF29283BE952BCE2184 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; + 1FC81B954EE0A5E2FD15180501085A9C /* QNResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNResolver.m; path = HappyDNS/Local/QNResolver.m; sourceTree = ""; }; 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMasonry.a; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 20C7D38BD5B25FDBA05DBAAC63037EEF /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; - 2188F95820A9C39AC9B680FB08944F91 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 21E01EBE346E1ED0DB94BD3329A0302C /* BSG_KSCrashSentry_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_Signal.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Signal.c; sourceTree = ""; }; - 22A59CC9ECFE59BFDE7A5F0F3802862F /* BugsnagErrorReportApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagErrorReportApiClient.h; path = Source/BugsnagErrorReportApiClient.h; sourceTree = ""; }; - 239FCB262E8CBA5DB80581D8956B4819 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 2419289023F9FFEDD2309637A6922CFF /* BSG_KSCrashReportVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportVersion.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportVersion.h; sourceTree = ""; }; - 24C3C1EFD6FC805355664D10F9412E17 /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; - 25C77CDBBFD12BA7DFB57A8A0C58FA2C /* UIAlertView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+BlocksKit.m"; path = "BlocksKit/UIKit/UIAlertView+BlocksKit.m"; sourceTree = ""; }; - 2674852B385F35F2A72E789275B15063 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; - 275FDF1B7D06F9BC35C2FCA07ABBF43D /* BSG_KSArchSpecific.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSArchSpecific.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSArchSpecific.h; sourceTree = ""; }; - 281CF056D8C65534E11335F7E2B99BA5 /* jg_hud_success@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_success@3x.png"; path = "JGProgressHUD/Resources/jg_hud_success@3x.png"; sourceTree = ""; }; - 294D83DE77971EDA00CA5A2C9CEB2446 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; - 2A524512E5070FEA04B9810908E18C20 /* NSInvocation+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+BlocksKit.h"; path = "BlocksKit/Core/NSInvocation+BlocksKit.h"; sourceTree = ""; }; - 2AB27E5EBE707DE35E522E54F8FA0D6D /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; - 2BE82C9C38BD2462FEBE3EB76A4D3401 /* JGProgressHUDRingIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDRingIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m; sourceTree = ""; }; - 2CE327418CFBA5B024A883A66C92E855 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 2E54DD9746F433B11A34AED2B1B808DF /* BSG_KSFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSFileUtils.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSFileUtils.h; sourceTree = ""; }; - 2EC34861D828ADCDE3C3BA7BF3632FEF /* BugsnagCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashSentry.h; path = Source/BugsnagCrashSentry.h; sourceTree = ""; }; - 2F1A546DD308C589B3521AE0D338C2BB /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; - 2FD3E7C28A7B83302D9BFFC623A4188F /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; - 308FC67C1D1F2EF16374D965CD8725CB /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; - 31FA891807C1A9E40CE3DE9DE7810F4D /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 32D0277E8945EDC6BC313EB5B04160EB /* BugsnagApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagApiClient.h; path = Source/BugsnagApiClient.h; sourceTree = ""; }; + 2033803E751374DB12FBB0A56BF83AE0 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; + 20FFCD27F5632259BCCA3F5C8B9646C9 /* WeiboSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.debug.xcconfig; sourceTree = ""; }; + 212B37DC7721120A85A1818E8858A6B6 /* A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2DynamicDelegate.m; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.m; sourceTree = ""; }; + 229D726EC19059F5922A52EB5766DA36 /* BugsnagApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagApiClient.h; path = Source/BugsnagApiClient.h; sourceTree = ""; }; + 237738AF826FF0B408FB33D2B5523CD8 /* BSG_KSMach_Arm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_Arm.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_Arm.c; sourceTree = ""; }; + 2421B9B9CB1759A5984BF7D146276A21 /* QNDnspodEnterprise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNDnspodEnterprise.m; path = HappyDNS/Http/QNDnspodEnterprise.m; sourceTree = ""; }; + 253DF9ECB63F85B7FDECCFD61F60D653 /* JGProgressHUDFadeZoomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDFadeZoomAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.h; sourceTree = ""; }; + 264C85EECE9291CBB3927775C2528E7A /* BSG_KSCrashSentry_User.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_User.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c; sourceTree = ""; }; + 26B7357A48605CDE300B12B3F3568CE9 /* QNNetworkInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNNetworkInfo.h; path = HappyDNS/Common/QNNetworkInfo.h; sourceTree = ""; }; + 27EEABC91AC392A764FD525F72791B12 /* BSG_KSSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSSysCtl.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSysCtl.c; sourceTree = ""; }; + 29080304BD639016355C6F30385D6A9F /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; + 2B7A3655C8022CB6F91866B2F3A1260D /* WeiboSDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = WeiboSDK.bundle; path = libWeiboSDK/WeiboSDK.bundle; sourceTree = ""; }; + 2D571EDF6DAFF89F5D7D724C798ACA52 /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; + 2DB87D6FCFB9D40189C43B151B78890E /* BSG_KSSafeCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSafeCollections.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSafeCollections.h; sourceTree = ""; }; + 2E227A286033EA0DAA3416102BEEA9BA /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 2EBEBFFAA31F2C24709BCF873A5F9976 /* BSG_KSCrashCallCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashCallCompletion.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSCrashCallCompletion.m; sourceTree = ""; }; + 2FC74F89B5418AC6B857ACCC8BBAE066 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 2FD58B7B103307E352A5B9723463CF48 /* BSG_KSSystemInfoC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemInfoC.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfoC.h; sourceTree = ""; }; + 2FF6BC03753E6EE79EFD21BD6304A5FD /* WeiboSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeiboSDK.h; path = libWeiboSDK/WeiboSDK.h; sourceTree = ""; }; + 3091017B6D40C295F66231E2F3AC7A6B /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + 30A46C04B140CEC37E961D0E39BF2DB6 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; + 30E12B2DCB884116924DB794B40831A0 /* WBHttpRequest+WeiboToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboToken.h"; path = "libWeiboSDK/WBHttpRequest+WeiboToken.h"; sourceTree = ""; }; + 315A22C5C5F2241428420C4D12BAD860 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 31DD26DB680BF0B67905FACBE3D147CA /* NSObject+BKBlockExecution.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKBlockExecution.m"; path = "BlocksKit/Core/NSObject+BKBlockExecution.m"; sourceTree = ""; }; + 31F3944DC2EFDCB10CD1C1E93ADA547B /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; + 32BCA03F2A38924344C68A82C03F4C98 /* BSG_KSZombie.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSZombie.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSZombie.c; sourceTree = ""; }; + 332998AD30F6C9203F0A44EC0E171BAE /* HappyDNS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HappyDNS-prefix.pch"; sourceTree = ""; }; + 3340BF20CBC468CCA44285ACED31D08B /* BSG_KSMach_Arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_Arm64.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_Arm64.c; sourceTree = ""; }; 3379568A644091C9EA3E5621263FE541 /* PLPlayerKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PLPlayerKit.debug.xcconfig; sourceTree = ""; }; - 34356C70FC56B82E28692AD6BF33D758 /* BSG_KSDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSDynamicLinker.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c; sourceTree = ""; }; + 3423EAD57A5D1DAE8059DC88ADB88F2A /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; + 3436528695310FF4DAF964573FFEB310 /* JGProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUD.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.m; sourceTree = ""; }; 34B8983D85D3A2CA9404C5DE373B20BF /* libMMMaterialDesignSpinner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMMMaterialDesignSpinner.a; path = libMMMaterialDesignSpinner.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 34DE8C756D1FEBFC23A4EEAB8130611F /* NSMutableArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+BlocksKit.m"; path = "BlocksKit/Core/NSMutableArray+BlocksKit.m"; sourceTree = ""; }; - 361640A52CD61E607F4A9CC05AFCAEB5 /* UIActionSheet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActionSheet+BlocksKit.h"; path = "BlocksKit/UIKit/UIActionSheet+BlocksKit.h"; sourceTree = ""; }; - 3687B37E94A51F94BDE44651CE7AAA8C /* Bugsnag-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-prefix.pch"; sourceTree = ""; }; - 368FCDF9CBBF58AAD8FEB85FC1D2C9A3 /* BugsnagNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagNotifier.h; path = Source/BugsnagNotifier.h; sourceTree = ""; }; - 377B2564544D5319DE9C2231377FA4CE /* BSG_KSCrashSentry_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_NSException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.h; sourceTree = ""; }; - 37D1C02697DB0745AA18E96C9998E905 /* NSObject+BKBlockExecution.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKBlockExecution.m"; path = "BlocksKit/Core/NSObject+BKBlockExecution.m"; sourceTree = ""; }; - 38D00E65AF2B90C39F3D6A643FF91BD0 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/NSButton+WebCache.m"; sourceTree = ""; }; - 395E3887816AEC877EECD2409FEB83B7 /* NSSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSSet+BlocksKit.m"; path = "BlocksKit/Core/NSSet+BlocksKit.m"; sourceTree = ""; }; - 397C7D4FC6ABC4595356E33D0EF70242 /* BSG_KSCrashSentry_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Signal.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Signal.h; sourceTree = ""; }; - 39FE5DCA31E771F6AEFA9DCF622FBE0C /* BSG_KSString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSString.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSString.h; sourceTree = ""; }; - 3A35207897AE401F4B71D3C12E562895 /* BSG_KSSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSysCtl.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSysCtl.h; sourceTree = ""; }; - 3A3830CDFCD9A01940D4166B7A197AC5 /* BugsnagSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSession.m; path = Source/BugsnagSession.m; sourceTree = ""; }; - 3ACFC6182E8311AD65CC6887B610B39A /* MMMaterialDesignSpinner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MMMaterialDesignSpinner.debug.xcconfig; sourceTree = ""; }; - 3B0CBA0CE56C309AAC06F277ED0F339E /* WeiboSDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = WeiboSDK.bundle; path = libWeiboSDK/WeiboSDK.bundle; sourceTree = ""; }; - 3BFDED47A2E8ADBBDB7D360797FEB72C /* WBHttpRequest+WeiboShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboShare.h"; path = "libWeiboSDK/WBHttpRequest+WeiboShare.h"; sourceTree = ""; }; - 3C75F0273EBB1CEED82FA50A67B52A80 /* BSG_KSFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSFileUtils.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSFileUtils.c; sourceTree = ""; }; - 3D10DFA6F61FDF8542411EDB5AAF9EB1 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; - 3D7D8C162D2853D539FA2BFE520A4FB3 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 3DC0046C2522B0D29A99067A9EAE7736 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 3E1C4A8A30B767DB4C0DB72DF761EF2D /* BSG_KSObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSObjC.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjC.c; sourceTree = ""; }; - 3F3A31497A86443AA3CB021ED086E778 /* JGProgressHUDRingIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDRingIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.h; sourceTree = ""; }; - 3F5A50D2923E176CA62B82A83094D6D9 /* NSIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSIndexSet+BlocksKit.h"; path = "BlocksKit/Core/NSIndexSet+BlocksKit.h"; sourceTree = ""; }; + 34CB3E0E1F4D5776457623C19D44EE11 /* BugsnagSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSession.m; path = Source/BugsnagSession.m; sourceTree = ""; }; + 34ED0E3B88E3AF280DB4AB101406251A /* jg_hud_error@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_error@3x.png"; path = "JGProgressHUD/Resources/jg_hud_error@3x.png"; sourceTree = ""; }; + 3522EF35471625EEE334EA0BECBE05AF /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 3667B5F6798CDC2ADA1BBC70D052FF68 /* libHappyDNS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libHappyDNS.a; path = libHappyDNS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 36B33D26AAE181EAB29D9FCEBD29C162 /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; + 3771DE47F1A3E17AC0DB8E19C0FBE47D /* JGProgressHUDErrorIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDErrorIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m; sourceTree = ""; }; + 37828E6040B208FED57231FBBF01B440 /* NSTimer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+BlocksKit.m"; path = "BlocksKit/Core/NSTimer+BlocksKit.m"; sourceTree = ""; }; + 37E3F69DAAADC740030A5924ABF51FFF /* HappyDNS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HappyDNS.release.xcconfig; sourceTree = ""; }; + 39023082C2207E1138A62545ACA55618 /* NSObject+A2BlockDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+A2BlockDelegate.m"; path = "BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m"; sourceTree = ""; }; + 391726B5BAE6D850BF6EDFB3AC131C88 /* UIGestureRecognizer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIGestureRecognizer+BlocksKit.h"; path = "BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h"; sourceTree = ""; }; + 3A3E836385D9994343FE0E80AB19F57F /* UIWebView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+BlocksKit.m"; path = "BlocksKit/UIKit/UIWebView+BlocksKit.m"; sourceTree = ""; }; + 3A58145464B8A263A2BF1319A3516FC1 /* JGProgressHUDSuccessIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDSuccessIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m; sourceTree = ""; }; + 3B3D34482FBE66915CE12678C374919B /* jg_hud_success@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_success@2x.png"; path = "JGProgressHUD/Resources/jg_hud_success@2x.png"; sourceTree = ""; }; + 3B751F261BFF4F19B73C12663A41A10C /* libWeiboSDK.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libWeiboSDK.a; path = libWeiboSDK/libWeiboSDK.a; sourceTree = ""; }; + 3BA8EC563822E9BA7CE382F3F9A4E325 /* BugsnagSessionTrackingPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTrackingPayload.h; path = Source/BugsnagSessionTrackingPayload.h; sourceTree = ""; }; + 3BEB4CBF8743AC5683339D5FF6E65481 /* BSG_KSCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashC.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c; sourceTree = ""; }; + 3CACB4FC3C379F92F157DC29C1A557E7 /* WeiboUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeiboUser.h; path = libWeiboSDK/WeiboUser.h; sourceTree = ""; }; + 3CB90D44BA44BE285FB808F66671C882 /* BugsnagKSCrashSysInfoParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagKSCrashSysInfoParser.h; path = Source/BugsnagKSCrashSysInfoParser.h; sourceTree = ""; }; + 3D07F85CE9F8B732BA0F59759BE1223F /* NSInvocation+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+BlocksKit.m"; path = "BlocksKit/Core/NSInvocation+BlocksKit.m"; sourceTree = ""; }; + 3E2933F5751D9C4CE53673B1778A9524 /* BugsnagSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSession.h; path = Source/BugsnagSession.h; sourceTree = ""; }; + 3F55BEC9975D5C26529DAE689730774F /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; + 3F689CBF577C9C33DF572CA75233E5B9 /* NSObject+A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+A2DynamicDelegate.h"; path = "BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h"; sourceTree = ""; }; + 3F7D61DB914C4D5FF4C13D8057642994 /* BugsnagSessionFileStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionFileStore.h; path = Source/BugsnagSessionFileStore.h; sourceTree = ""; }; 3FD647E01C8434BA0AEEB2906D82CEC1 /* PLPlayerKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PLPlayerKit.framework; path = Pod/Library/PLPlayerKit.framework; sourceTree = ""; }; - 4040CB36277D4F59DF8CBB188B6B7A2F /* UIControl+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIControl+BlocksKit.m"; path = "BlocksKit/UIKit/UIControl+BlocksKit.m"; sourceTree = ""; }; - 410335C79D713F2E3F1151B191457AB1 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; - 41887EA7A928DFD013E0E02E5F48B651 /* A2BlockInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2BlockInvocation.m; path = BlocksKit/DynamicDelegate/A2BlockInvocation.m; sourceTree = ""; }; - 42CA0905C6D936F99BA1CA29470EBA2B /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 43195784C3B196D95DA8E6BE6076AF4C /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - 443BDF1E7E7A4AC2453E63D5A55AD9AE /* BSG_KSCrashSentry.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c; sourceTree = ""; }; - 44D35797B86D3EDCC232ABD7C2C4BBC2 /* BSG_KSBacktrace_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSBacktrace_Private.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace_Private.h; sourceTree = ""; }; - 45852088D447F682C7D054EF02ADA491 /* UIControl+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIControl+BlocksKit.h"; path = "BlocksKit/UIKit/UIControl+BlocksKit.h"; sourceTree = ""; }; + 40116520A6686684AF06697CDE525661 /* QNHosts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNHosts.m; path = HappyDNS/Local/QNHosts.m; sourceTree = ""; }; + 40B4286B260C47BD09629322E3EF0DA5 /* BSG_KSCrashCallCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashCallCompletion.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSCrashCallCompletion.h; sourceTree = ""; }; + 40B648C49DDD0D8E1D5AFCC5A2B431CB /* BugsnagCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCollections.m; path = Source/BugsnagCollections.m; sourceTree = ""; }; + 41B80BAE170CB1AF103649F4985767FD /* NSMutableArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+BlocksKit.m"; path = "BlocksKit/Core/NSMutableArray+BlocksKit.m"; sourceTree = ""; }; + 429BBF7DE00800B81D05792F86FE8BF7 /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; + 4453A62DCC9DF0699B04136617A42E77 /* BSG_KSMachApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSMachApple.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMachApple.h; sourceTree = ""; }; + 44D17C8EEE3DA52CBD7B944411A01A30 /* BSG_KSArchSpecific.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSArchSpecific.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSArchSpecific.h; sourceTree = ""; }; + 45E7408AEAD159BE8EE934377888DC7E /* BSG_KSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSLogger.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSLogger.m; sourceTree = ""; }; + 466444AA980E6C5EE91EFBD4BFC7B2E5 /* WBHttpRequest+WeiboGame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboGame.h"; path = "libWeiboSDK/WBHttpRequest+WeiboGame.h"; sourceTree = ""; }; + 4739D9161301F773FE924DD388597878 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 47925D87B45F4F360F8D336574DF1B7B /* QNDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNDomain.h; path = HappyDNS/Common/QNDomain.h; sourceTree = ""; }; 4881B23B5EA7B0808A76BB7AFABDA897 /* Pods-NiuPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NiuPlayer.debug.xcconfig"; sourceTree = ""; }; - 48901CE1E0BEF6395F9B14DC096C2E7A /* JGProgressHUDFadeAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.m; sourceTree = ""; }; - 4A53EE03E79354704D76B5660736D1E5 /* BugsnagSessionFileStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionFileStore.m; path = Source/BugsnagSessionFileStore.m; sourceTree = ""; }; - 4A8990C9673D8FE04B533BF7387931C4 /* WeiboSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.release.xcconfig; sourceTree = ""; }; - 4AEF6B5F64C9F6FB6B145C9892762FC2 /* UIWebView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+BlocksKit.h"; path = "BlocksKit/UIKit/UIWebView+BlocksKit.h"; sourceTree = ""; }; - 4B7576F41A9E435CD9B9DDB9CB719B41 /* BSG_KSMach_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_x86_64.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_x86_64.c; sourceTree = ""; }; - 4BEBCB58891695A28A60AD6904F19A3F /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - 4C479CFD8E11DB7FC4267365D37670B7 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 4C69A6933F91BFEA07B3E4D7EC647932 /* BlocksKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BlocksKit-dummy.m"; sourceTree = ""; }; - 4C7078B70333ABFD1F600759D38542A1 /* NSObject+BKAssociatedObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKAssociatedObjects.m"; path = "BlocksKit/Core/NSObject+BKAssociatedObjects.m"; sourceTree = ""; }; - 4D2BA0DD2586DFB9B22762A8DA0CF877 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; - 4D57DCA001D8D942D25A12BDDE330862 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; - 4DA0497AB46139323DDC4D38E9AA7370 /* Fabric.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.release.xcconfig; sourceTree = ""; }; - 4DF8C1CB33B6327266026B7EB0A1ADE6 /* BugsnagCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCollections.h; path = Source/BugsnagCollections.h; sourceTree = ""; }; + 491FDAC15D030494B2E90C0E7ECD4606 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; + 498EDBAACE5DE1CD7FA5686161FC3D1B /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; + 4A01901F1577B0EED57E0FDCB0950D6C /* QNHosts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNHosts.h; path = HappyDNS/Local/QNHosts.h; sourceTree = ""; }; + 4A06517392907A86C3EE90F936A09D92 /* BSG_KSCrashSentry_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_MachException.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c; sourceTree = ""; }; + 4AB0256DF1F4F20FDA80A4C8CE01D73B /* QNDnsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNDnsManager.h; path = HappyDNS/Common/QNDnsManager.h; sourceTree = ""; }; + 4BE853BF6A41CBE71196E8BBBCECBF76 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; + 4C34134BA34BA326068BA806750948A2 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = ""; }; + 4C6592BA7755E26EEBD059D798B879C2 /* BugsnagConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagConfiguration.h; path = Source/BugsnagConfiguration.h; sourceTree = ""; }; + 4CE9090F75ECCC26074FD48BC578794B /* BlocksKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BlocksKit.debug.xcconfig; sourceTree = ""; }; + 4D6044259B2D04161D313D34DD82DCAD /* JGProgressHUDImageIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDImageIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDImageIndicatorView.h; sourceTree = ""; }; + 4DFCA4B9AC445EE870C3E88672AFDD13 /* NSArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+BlocksKit.h"; path = "BlocksKit/Core/NSArray+BlocksKit.h"; sourceTree = ""; }; 4E94098BE653FBB69D39AD38BE9E8DB2 /* Pods-NiuPlayer-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-NiuPlayer-acknowledgements.markdown"; sourceTree = ""; }; 4EBBB440A1A1784261FFC6085027B094 /* Pods-NiuPlayer-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-NiuPlayer-frameworks.sh"; sourceTree = ""; }; - 4F10922A84EECC3EE324979FE3BBB10D /* JGProgressHUDPieIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDPieIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h; sourceTree = ""; }; - 4FC9C8FF83C0EB8BAD6923B8C26612D1 /* BSGConnectivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSGConnectivity.h; path = Source/BSGConnectivity.h; sourceTree = ""; }; - 50754BF7A639707689AB34ACB6DA44C3 /* UIPopoverController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+BlocksKit.h"; path = "BlocksKit/UIKit/UIPopoverController+BlocksKit.h"; sourceTree = ""; }; - 50A301172A0D71A8F4F03C8FB42699E7 /* BSG_KSCrashSentry_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashSentry_NSException.m; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m; sourceTree = ""; }; - 50BFFE42053E6D006359F73E08370CE1 /* JGProgressHUD.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = JGProgressHUD.bundle; path = "JGProgressHUD-JGProgressHUD.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F13266EA0097BE1406D5ABB0463653B /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; + 4FD8DD93AB5A283AD969634CCE2FB863 /* QNDomain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNDomain.m; path = HappyDNS/Common/QNDomain.m; sourceTree = ""; }; + 502D837830CE0A1BB3E476AC469AF187 /* NSMutableSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableSet+BlocksKit.m"; sourceTree = ""; }; + 50B7A7D6E53F8A4F1F19D65C5D95F0EA /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; + 518A20E7BD85BA89C8AFE31BCD7A4C9F /* BSG_KSDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSDynamicLinker.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.h; sourceTree = ""; }; 531888DAE744353F1D90FDA15CB646F1 /* PLPlayerKit-copy-dsyms.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "PLPlayerKit-copy-dsyms.sh"; sourceTree = ""; }; - 544255DFB762AF37B4DA6CC99021984C /* MMMaterialDesignSpinner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MMMaterialDesignSpinner.release.xcconfig; sourceTree = ""; }; - 55A053D973F4E60520815FC2A8B8E915 /* JGProgressHUDSuccessIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDSuccessIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.m; sourceTree = ""; }; + 5384A949F5F34DB15A701751798AA00A /* BugsnagHandledState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagHandledState.h; path = Source/BugsnagHandledState.h; sourceTree = ""; }; + 5458C37B9A38D53C300EA93A6A6D3346 /* NSURLConnection+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLConnection+BlocksKit.h"; path = "BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h"; sourceTree = ""; }; + 545A7BC505467EFD732C9FE39DF03EFC /* BugsnagUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagUser.m; path = Source/BugsnagUser.m; sourceTree = ""; }; + 547DAE1B095DDF510078AEE8E67383F3 /* BlocksKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BlocksKit-dummy.m"; sourceTree = ""; }; + 5486ED85487C767A072A13CAF2697FF7 /* BugsnagSessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTracker.h; path = Source/BugsnagSessionTracker.h; sourceTree = ""; }; + 550AC9BC81D38C6F1F798A7C1C86A6ED /* Crashlytics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.debug.xcconfig; sourceTree = ""; }; + 55D482A1600D6F5C4E97AEBFCC38F25A /* jg_hud_error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_error.png; path = JGProgressHUD/Resources/jg_hud_error.png; sourceTree = ""; }; 56592058A32B14B7C10DF80396204F05 /* PLPlayerKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = PLPlayerKit.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 5700B6938C928E3A8604BE8A8847ED5F /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; - 571B827F6BAAC124E603D6F3B4E6C260 /* JGProgressHUDIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m; sourceTree = ""; }; - 57E44B489CFFCB537D9A4327F02482E8 /* MMMaterialDesignSpinner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MMMaterialDesignSpinner.m; path = Pod/Classes/MMMaterialDesignSpinner.m; sourceTree = ""; }; - 5855CD5C12B6380C21D5A07D36A409FD /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; - 58D89D07501C6CF7FF8A626EC52D65CD /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; - 5B62148D296FF07EA61C631466F87C56 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 5B62E18BAA362962E6FF7000F6CC42B0 /* BSG_KSSystemCapabilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemCapabilities.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemCapabilities.h; sourceTree = ""; }; - 5BE43BC2C9DD663ABCAFABA343EC5547 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/SDWebImageTransition.m; sourceTree = ""; }; - 5BE80A97114B90D3DBDC8CFF3A061C9C /* BSG_KSCrashType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashType.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashType.h; sourceTree = ""; }; - 5BEA006751CA9B17CAAE5833AC73FB5A /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; - 5BEDE965130459FB81CEBC03C0274075 /* BKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BKMacros.h; path = BlocksKit/Core/BKMacros.h; sourceTree = ""; }; + 57B3B54B5D0EC2E7BD3A7CC4C5879106 /* NSDictionary+BSG_Merge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+BSG_Merge.h"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+BSG_Merge.h"; sourceTree = ""; }; + 58D07E1F61F7CAF91FC6FC107ED8DBCB /* BSG_KSObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSObjC.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjC.c; sourceTree = ""; }; + 58F5098B4F33DD9C0021EA528198DFFF /* QNResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNResolver.h; path = HappyDNS/Local/QNResolver.h; sourceTree = ""; }; + 592DE20ABCF5688EEA03086FC88D26A5 /* BugsnagSessionFileStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionFileStore.m; path = Source/BugsnagSessionFileStore.m; sourceTree = ""; }; + 59D1E4B8AF2C6DE086DB98D81CCEB98D /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 5A20F5514583B5643E8783092763FE6F /* NSArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+BlocksKit.m"; path = "BlocksKit/Core/NSArray+BlocksKit.m"; sourceTree = ""; }; + 5B79BCA12C47D1D04E08FB0856EB85E6 /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; + 5C629683C25829F044B97B967CCE2F32 /* QNHex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNHex.m; path = HappyDNS/Util/QNHex.m; sourceTree = ""; }; + 5C9C1182B98E547BC39492C61F34929D /* BlocksKit+UIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BlocksKit+UIKit.h"; path = "BlocksKit/BlocksKit+UIKit.h"; sourceTree = ""; }; + 5D4459B12A285FF72F4E346D10C2CF84 /* Bugsnag.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.debug.xcconfig; sourceTree = ""; }; 5D481F9B1F0A90E0323A9F245A4429C2 /* Pods-NiuPlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-NiuPlayer-dummy.m"; sourceTree = ""; }; - 5D7E25D0FF4DB36295818447207E159B /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - 5E670C9811C318C880CF63B64BCC93E5 /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; - 5FD0C0677D523EB6AC0B66D92A53C83E /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; - 60485F50ACFF6568CEB4673443B17D99 /* NSObject+BKBlockObservation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKBlockObservation.h"; path = "BlocksKit/Core/NSObject+BKBlockObservation.h"; sourceTree = ""; }; - 6085620410C70F21F83C952C90C87863 /* BugsnagBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagBreadcrumb.h; path = Source/BugsnagBreadcrumb.h; sourceTree = ""; }; - 60A1ADEB5646A4D517CE1C4972C20B61 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; - 620071B4B0F8455192CAC464B2E973C9 /* BSG_KSCrashAdvanced.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashAdvanced.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h; sourceTree = ""; }; - 63D0F94314EB932A3640AC7A26E2F2C6 /* BSG_KSSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSSysCtl.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSysCtl.c; sourceTree = ""; }; - 63DFA9DD658A2B2CBF3B4C879F4FBDA0 /* JGProgressHUDPieIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDPieIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m; sourceTree = ""; }; - 64783F7E46C5A8A6CFFCDF4AD3C44882 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - 6482A315DA041E27C2A72161A56FA211 /* BSG_KSCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashC.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h; sourceTree = ""; }; - 653394373F31F43BD900276AD7166569 /* JGProgressHUD-Defines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JGProgressHUD-Defines.h"; path = "JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h"; sourceTree = ""; }; - 659C4FCB9EFC172F8447BB3EFB4C634A /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; - 67B22A60B1F7AAAEBC67DC907FA1F2F0 /* BSG_KSCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFields.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h; sourceTree = ""; }; - 6821018E7DD91BACDC82D2DA06F54318 /* A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2DynamicDelegate.h; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.h; sourceTree = ""; }; - 691325CABD136BB12FAA322D7FB3E796 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 699E8B12109ED503F1305D4CE2212255 /* BSG_KSCrashReportStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashReportStore.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportStore.m; sourceTree = ""; }; - 6A2164A2A30B03B05DE125C5A3C7D6CB /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; - 6A6E4693DB3266D5A2268E0CC5FADC04 /* BSG_KSString.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSString.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSString.c; sourceTree = ""; }; - 6B14B29B70F681BDE94CD756B5E89100 /* BugsnagCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashReport.h; path = Source/BugsnagCrashReport.h; sourceTree = ""; }; - 6B70C254433426CE79A6AC1DF9DCE0BC /* WBHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBHttpRequest.h; path = libWeiboSDK/WBHttpRequest.h; sourceTree = ""; }; - 6D6239A0D6613B2AC81A11DD74DD54BB /* BSG_KSCrashType.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashType.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashType.c; sourceTree = ""; }; - 6E23F40A1BD8D788AB497BA8D8B8EABC /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = ""; }; - 6EBF820CE674E680BB20063F53012098 /* UIImagePickerController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImagePickerController+BlocksKit.m"; path = "BlocksKit/UIKit/UIImagePickerController+BlocksKit.m"; sourceTree = ""; }; - 6F6084E0FEACD6711B1FFE67FB5CC238 /* MFMessageComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MFMessageComposeViewController+BlocksKit.h"; path = "BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h"; sourceTree = ""; }; + 5DFA8FEDA43D51B4B5A33A508EBBB8CC /* QNAssessment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNAssessment.h; path = HappyDNS/Assessment/QNAssessment.h; sourceTree = ""; }; + 5E8BD95EC20AB9D09EF39DDBFE63301E /* NSObject+BKAssociatedObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKAssociatedObjects.m"; path = "BlocksKit/Core/NSObject+BKAssociatedObjects.m"; sourceTree = ""; }; + 5EFD9D6737FB598AC439024F3037E588 /* NSObject+BKBlockObservation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKBlockObservation.m"; path = "BlocksKit/Core/NSObject+BKBlockObservation.m"; sourceTree = ""; }; + 5FAF6C861056F03A4140343DC95914AA /* JGProgressHUDShadow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDShadow.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h; sourceTree = ""; }; + 60BD4334ABC2F7DE7AC47FF29F44ED13 /* UIBarButtonItem+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+BlocksKit.h"; path = "BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h"; sourceTree = ""; }; + 60E02AE5115746A5FBB1B36BD493AD46 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 6120C3F5D579D97362D9BCF696D6E50A /* JGProgressHUDFadeAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDFadeAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h; sourceTree = ""; }; + 6120E88AF3F6A89FC4A2819A63D7CCDB /* NSDictionary+BSG_Merge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+BSG_Merge.m"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+BSG_Merge.m"; sourceTree = ""; }; + 614F08D75872C2CC8B5346839AF37A9E /* NSMutableSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableSet+BlocksKit.h"; sourceTree = ""; }; + 61E31D5E8F836FD0E105F33C0DB584F8 /* QNLruCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNLruCache.h; path = HappyDNS/Common/QNLruCache.h; sourceTree = ""; }; + 627CC28A277027BC84DA4450949AB621 /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; + 62AF33B89DCD1544E7A42A1A80DDBB48 /* BSG_KSObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSObjCApple.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjCApple.h; sourceTree = ""; }; + 63A2A62670930FAAE6BF48800107C306 /* JGProgressHUDIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.m; sourceTree = ""; }; + 63A7A6FFFFAECEAF4CC374CA2E77CE77 /* BSGConnectivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSGConnectivity.m; path = Source/BSGConnectivity.m; sourceTree = ""; }; + 63CB2BC56E1929450545B53E41F56D01 /* JGProgressHUDRingIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDRingIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDRingIndicatorView.m; sourceTree = ""; }; + 63EA53BB29C1CA5EAFDBFC7F7EEB7617 /* BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BlocksKit.h; path = BlocksKit/BlocksKit.h; sourceTree = ""; }; + 65234627F6CBAB11173C2236578089F3 /* jg_hud_success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_success.png; path = JGProgressHUD/Resources/jg_hud_success.png; sourceTree = ""; }; + 657F9206B40BE62B2B5717ECB6510232 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + 660AB4E67D152D8A49B1E3D0E28E4836 /* BSG_KSObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSObjC.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjC.h; sourceTree = ""; }; + 66DE3E4D31868E477D7B013AA32BFE1E /* BSG_KSJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSJSONCodec.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodec.h; sourceTree = ""; }; + 68B85E7F7A181D9EAFB0F066D3400601 /* BSG_KSCrashReportFilterCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFilterCompletion.h; path = Source/KSCrash/Source/KSCrash/Reporting/Filters/BSG_KSCrashReportFilterCompletion.h; sourceTree = ""; }; + 68C0DAC2C3835C74689AECAA52F97EE7 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 69B513AA91EAC7F9B3B9F577710722B7 /* NSCache+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCache+BlocksKit.h"; path = "BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h"; sourceTree = ""; }; + 6A0ED897A408DC64C9F9EBBD2B345259 /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; + 6B105A06E22A1F1C48C6FE432AB172A4 /* BSG_KSFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSFileUtils.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSFileUtils.h; sourceTree = ""; }; + 6B9BCFCDF61D18089AB6A8F19CE4623D /* Bugsnag.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.release.xcconfig; sourceTree = ""; }; + 6BA6A6CA99DA297062461F52F2FAA144 /* NSObject+BKBlockExecution.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKBlockExecution.h"; path = "BlocksKit/Core/NSObject+BKBlockExecution.h"; sourceTree = ""; }; + 6D100F0601AD021206CFE21636EE3786 /* MFMailComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MFMailComposeViewController+BlocksKit.h"; path = "BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h"; sourceTree = ""; }; + 6DBB04E724F34A9D1479A79E80A103BD /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; + 6E0D86E628BB8CD8547F74671E4CEB0C /* NSObject+BKBlockObservation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKBlockObservation.h"; path = "BlocksKit/Core/NSObject+BKBlockObservation.h"; sourceTree = ""; }; + 6E4C89DE35AF4BCCDADB88700B9D4B86 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 6E98E1045DE756DC9CA9B42C7451A390 /* Fabric.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.debug.xcconfig; sourceTree = ""; }; + 6ECAFA212B76953320CE51185061271A /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; 6F70BF603CE98579EE97E286801E741E /* libBlocksKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBlocksKit.a; path = libBlocksKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 71E9AE2A9A7BA6ADB5ED767D5C6D5925 /* BSG_KSCrashSentry_CPPException.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_CPPException.mm; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm; sourceTree = ""; }; - 727D47F89934F3D17FB824E9270336C4 /* NSMutableArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+BlocksKit.h"; path = "BlocksKit/Core/NSMutableArray+BlocksKit.h"; sourceTree = ""; }; - 7364A727652C6AF44D00E875AFE2F6D1 /* jg_hud_error@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_error@2x.png"; path = "JGProgressHUD/Resources/jg_hud_error@2x.png"; sourceTree = ""; }; - 73AC5222CE85002F7FD65A40A2ACC149 /* BugsnagSessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTracker.m; path = Source/BugsnagSessionTracker.m; sourceTree = ""; }; - 744CB2472B4C2F63A85B51D64B9C4C14 /* Bugsnag-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bugsnag-dummy.m"; sourceTree = ""; }; - 7619650DC553C4F772B6A1A8CC92B395 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; - 76A128F57BC0ABEA170673B597A5565C /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; - 76A9BEEB5654E85F86D1D22AA5E4BF6B /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 76C30FF068517B04F2AD468AF9BD6E0A /* NSMutableIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableIndexSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableIndexSet+BlocksKit.m"; sourceTree = ""; }; + 6F8781D1600C6C52B8609B43B0515A9C /* UITextField+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+BlocksKit.m"; path = "BlocksKit/UIKit/UITextField+BlocksKit.m"; sourceTree = ""; }; + 702D3F0C8744A5A840EA4C3D0B34998D /* BSG_KSCrashType.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashType.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashType.c; sourceTree = ""; }; + 706CA6EF9BD6B439540ABE843A302CBC /* UIView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+BlocksKit.m"; path = "BlocksKit/UIKit/UIView+BlocksKit.m"; sourceTree = ""; }; + 70740CD6AB1369312EE743251166C428 /* BSG_KSCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashDoctor.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashDoctor.h; sourceTree = ""; }; + 7131170949CCD2723BBFE52A31EE6828 /* BSG_KSCrashType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashType.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashType.h; sourceTree = ""; }; + 714AA9DD9B0F1BCE3D90B268A57043A4 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; + 714F125FBC144DB5540DA58773D41B3B /* JGProgressHUDIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.h; sourceTree = ""; }; + 715BB4C46C8DE8EDEEA613E11C00B253 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; + 72CA1877BCB9D3F656907E74AAA7EAA8 /* JGProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JGProgressHUD-dummy.m"; sourceTree = ""; }; + 737D78FE3E42F8A23B63011C94CB254B /* JGProgressHUDPieIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDPieIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.h; sourceTree = ""; }; + 73D48B6C182BB95F6DBD2D70F5B9D72B /* BSG_KSSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSignalInfo.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSignalInfo.h; sourceTree = ""; }; + 74B564E31AC4C4CF2CC5D6E17959499C /* BSG_KSSingleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSingleton.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSingleton.h; sourceTree = ""; }; + 74D73602CED8DA70A2CDE67B1FE03E39 /* BSGSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSGSerialization.m; path = Source/BSGSerialization.m; sourceTree = ""; }; + 7602750296879DE5DB95DAB62DC9C031 /* BSG_KSCrashSentry_CPPException.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_CPPException.mm; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.mm; sourceTree = ""; }; + 76110038AE081824A5F2F8959E90236C /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 761BADCDC5C85480E0874AFBB2942636 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 7621DBD98387BB3378F89C8E50963517 /* JGProgressHUDErrorIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDErrorIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h; sourceTree = ""; }; 77307EDD0583406D474CD905FC4C0C5C /* Pods-NiuPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NiuPlayer.release.xcconfig"; sourceTree = ""; }; 78706E00991EF7B5DB7649EDEAD953CA /* Pods-NiuPlayer-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-NiuPlayer-acknowledgements.plist"; sourceTree = ""; }; - 789AD784FB77029826933E443930DE7E /* JGProgressHUDShadow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDShadow.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.h; sourceTree = ""; }; - 7B60916FD5CA7B037138444C01E5F8A0 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; - 7BD0537B364C22782767DDCCC968D3B6 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; - 7CAEC40467264D1A4CA3BB6EB2ED95D8 /* UIBarButtonItem+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+BlocksKit.m"; path = "BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m"; sourceTree = ""; }; - 7D960317C01D6776925C2447025FF50A /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - 7E0B5348C3A9BAAE822B3A4A70E2E452 /* JGProgressHUDErrorIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDErrorIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.h; sourceTree = ""; }; - 7F4218AD7C419D59009180ACD0649E36 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; + 78A869B31827C2FDB9034657E9A2BDD7 /* BSG_KSCrashSentry_User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_User.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h; sourceTree = ""; }; + 78EC915768F238D4D43FF05E9D5165E9 /* JGProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JGProgressHUD-prefix.pch"; sourceTree = ""; }; + 79194EEF3570698C96B21C34C841415D /* NSTimer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+BlocksKit.h"; path = "BlocksKit/Core/NSTimer+BlocksKit.h"; sourceTree = ""; }; + 7A91C5E954FCF6B7C915E25FE01C10AB /* QNRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNRecord.h; path = HappyDNS/Common/QNRecord.h; sourceTree = ""; }; + 7B938CD4F5F78371ABE3251D50F25191 /* BSG_KSCrashSentry_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_MachException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.h; sourceTree = ""; }; + 7C642A7EE90EBF0666A4EADFA96DAC34 /* jg_hud_success@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_success@3x.png"; path = "JGProgressHUD/Resources/jg_hud_success@3x.png"; sourceTree = ""; }; + 7CB62CAB2BBDCAD5D13D7701FF2459FB /* QNDnspodEnterprise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNDnspodEnterprise.h; path = HappyDNS/Http/QNDnspodEnterprise.h; sourceTree = ""; }; + 7E42C56F584D9AE06DBD39CF0E26F3B8 /* BSG_KSString.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSString.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSString.c; sourceTree = ""; }; + 7EC9EA854329AC18C4A67F21063E6E11 /* QNDnspodFree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNDnspodFree.h; path = HappyDNS/Http/QNDnspodFree.h; sourceTree = ""; }; + 7ECBE8D1CAE4A70199649D699B9704B5 /* UIControl+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIControl+BlocksKit.h"; path = "BlocksKit/UIKit/UIControl+BlocksKit.h"; sourceTree = ""; }; + 7F97CD4E37A1018300E9658042E594C9 /* BlocksKit+MessageUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BlocksKit+MessageUI.h"; path = "BlocksKit/BlocksKit+MessageUI.h"; sourceTree = ""; }; 7FBAFAA66E9C7401884F439AE8BC662C /* libJGProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libJGProgressHUD.a; path = libJGProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 807F88227564F6CBD57628C2D13942BF /* JGProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUD.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUD.m; sourceTree = ""; }; - 81AA91C8235C98BDA7F0E4BA67A22A05 /* libWeiboSDK.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libWeiboSDK.a; path = libWeiboSDK/libWeiboSDK.a; sourceTree = ""; }; - 81ED50801979FE542A2C7447B7938682 /* NSObject+BKAssociatedObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKAssociatedObjects.h"; path = "BlocksKit/Core/NSObject+BKAssociatedObjects.h"; sourceTree = ""; }; - 82BBA88B46B8BFF5D22B5A1B8AA69645 /* BugsnagCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCollections.m; path = Source/BugsnagCollections.m; sourceTree = ""; }; - 83F88AB4B2C2FE3E8E7A6E5B2B995253 /* WBSDKBasicButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKBasicButton.h; path = libWeiboSDK/WBSDKBasicButton.h; sourceTree = ""; }; - 83F961A191F1CF5EED497F4436B15005 /* MFMessageComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MFMessageComposeViewController+BlocksKit.m"; path = "BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m"; sourceTree = ""; }; - 8405CAA45D701BA126F8C74E49398779 /* JGProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JGProgressHUD.release.xcconfig; sourceTree = ""; }; - 84404EE5040FC6E1E32DB48C571FB14F /* BSG_KSMachApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSMachApple.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMachApple.h; sourceTree = ""; }; - 84815F4DFA0C4D089FC4D0CA3E8258E8 /* BugsnagNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagNotifier.m; path = Source/BugsnagNotifier.m; sourceTree = ""; }; - 85A43A997C4566505FF13E3E99D7B354 /* jg_hud_error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_error.png; path = JGProgressHUD/Resources/jg_hud_error.png; sourceTree = ""; }; - 85C15A9FD7B4E4CA463821B8D1749E35 /* NSObject+A2BlockDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+A2BlockDelegate.h"; path = "BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h"; sourceTree = ""; }; - 86AEB27B3F1C1904B9DF792547C4C09C /* BSG_KSCrashSentry_User.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_User.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.c; sourceTree = ""; }; - 871E58BD844232917608926D8F919C8F /* JGProgressHUDSuccessIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDSuccessIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h; sourceTree = ""; }; + 7FC781FC342A83F3126D99B75B00C387 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 7FF1D231D8ACAF6FA64822EBCED10825 /* QNHijackingDetectWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNHijackingDetectWrapper.h; path = HappyDNS/Local/QNHijackingDetectWrapper.h; sourceTree = ""; }; + 8088403C2E61483A335B5B99EE389CE1 /* NSMutableIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableIndexSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableIndexSet+BlocksKit.h"; sourceTree = ""; }; + 80AFA5752B879E26AEA62D6B2858FBE5 /* BugsnagCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCollections.h; path = Source/BugsnagCollections.h; sourceTree = ""; }; + 80D66176F5D1BC5B1A8126FFB12F3846 /* BSGSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSGSerialization.h; path = Source/BSGSerialization.h; sourceTree = ""; }; + 828D509B11639C4AD96137B8D281D3D4 /* UIAlertView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+BlocksKit.h"; path = "BlocksKit/UIKit/UIAlertView+BlocksKit.h"; sourceTree = ""; }; + 82D82860579B2270941D46AFE1864AD2 /* BugsnagCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashReport.h; path = Source/BugsnagCrashReport.h; sourceTree = ""; }; + 8396C8305B6B863513A5428F058E4EA5 /* NSMutableOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableOrderedSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableOrderedSet+BlocksKit.m"; sourceTree = ""; }; + 83A0C9D91AADACCB0F7BC5CD5DAC32D7 /* BugsnagSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSink.m; path = Source/BugsnagSink.m; sourceTree = ""; }; + 844483D93AEF817850E68678A76C2C76 /* HappyDNS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HappyDNS.h; path = HappyDNS/HappyDNS.h; sourceTree = ""; }; + 84F4B614792EC501B17939EE37961177 /* NSObject+BKAssociatedObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKAssociatedObjects.h"; path = "BlocksKit/Core/NSObject+BKAssociatedObjects.h"; sourceTree = ""; }; + 8588AD307BEEC3BDCB70CB9631EC2B08 /* BugsnagKSCrashSysInfoParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagKSCrashSysInfoParser.m; path = Source/BugsnagKSCrashSysInfoParser.m; sourceTree = ""; }; + 85D39DB82BE6449173CA8CBDB7EE0A26 /* BSG_KSSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSysCtl.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSysCtl.h; sourceTree = ""; }; + 8666C13200655E2EB14D7AADC8D9BE79 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + 8717B328F1673F390D2B6CD2BDA221D1 /* jg_hud_error@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_error@2x.png"; path = "JGProgressHUD/Resources/jg_hud_error@2x.png"; sourceTree = ""; }; 872296C6BF98514FED139D225E897B3B /* libPods-NiuPlayer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-NiuPlayer.a"; path = "libPods-NiuPlayer.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 876092BBDD6B62B009CDD6AE6D0E36A4 /* BugsnagSessionTrackingPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTrackingPayload.m; path = Source/BugsnagSessionTrackingPayload.m; sourceTree = ""; }; - 8876309BD83C7BFB59319E8920CB7DA8 /* BSG_KSSafeCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSSafeCollections.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSafeCollections.m; sourceTree = ""; }; - 8885DAE2EECD4B4F1C6C9E9DD56BA0FE /* UIAlertView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+BlocksKit.h"; path = "BlocksKit/UIKit/UIAlertView+BlocksKit.h"; sourceTree = ""; }; - 889F1716133D2FA4470119C5A470BEBD /* BSG_KSDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSDynamicLinker.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.h; sourceTree = ""; }; - 89D65C1A20AD2DF0E78C2AC2F84978D6 /* BugsnagConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagConfiguration.m; path = Source/BugsnagConfiguration.m; sourceTree = ""; }; - 8AAA75437AB3CEBAF98EF43FC1339602 /* NSObject+A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+A2DynamicDelegate.h"; path = "BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h"; sourceTree = ""; }; - 8B0786A12319C91E726EA7358F11B19C /* BSG_KSMach_Arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_Arm64.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_Arm64.c; sourceTree = ""; }; - 8D5E51CD297D459625363D4EDE79D41A /* JGProgressHUDFadeAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDFadeAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.h; sourceTree = ""; }; - 8EDABD2706EE9F72E5E565254631C410 /* BSG_RFC3339DateTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_RFC3339DateTool.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_RFC3339DateTool.h; sourceTree = ""; }; - 8F2491728B1CA07C0BB6E484E8098663 /* NSCache+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCache+BlocksKit.m"; path = "BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m"; sourceTree = ""; }; - 8F5832FA0D46403665F604D25BFCB2E5 /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; - 91AAC4196B7268099DF72F6FD9FDA52F /* BugsnagSessionTrackingApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTrackingApiClient.m; path = Source/BugsnagSessionTrackingApiClient.m; sourceTree = ""; }; - 93128D93D892A3672DD48A08EDD8E391 /* NSDictionary+BSG_Merge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+BSG_Merge.m"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+BSG_Merge.m"; sourceTree = ""; }; - 9343A1140E00EAC7150452A972B67438 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; - 93F0483DB1CC79C0AB145DFE9C39C1FC /* NSTimer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+BlocksKit.h"; path = "BlocksKit/Core/NSTimer+BlocksKit.h"; sourceTree = ""; }; - 947EF90442E5CFC25AAD0329C3F107A7 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 9484C4E1D6D496C87512AEE556AC43D3 /* BSG_KSCrashSentry_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_MachException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.h; sourceTree = ""; }; - 95C463090D33F26A371C1FA30EACA51A /* BSG_KSSystemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemInfo.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfo.h; sourceTree = ""; }; - 96AD337CAA005D9F254FD81BE8EDBEBF /* NSMutableOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableOrderedSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h"; sourceTree = ""; }; - 98E13C06280849689EC5D442D514A44D /* BugsnagUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagUser.h; path = Source/BugsnagUser.h; sourceTree = ""; }; - 9971BBE63FD57412E8265284AACA6496 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - 9A9684DFBEBE74A98285E6F4B4A4BDE1 /* jg_hud_error@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_error@3x.png"; path = "JGProgressHUD/Resources/jg_hud_error@3x.png"; sourceTree = ""; }; - 9B6DDB0A72FA6834DA499699C524C152 /* NSDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+BlocksKit.m"; path = "BlocksKit/Core/NSDictionary+BlocksKit.m"; sourceTree = ""; }; - 9BAA6E0CA29E109AF54AD7E80A8BFF1B /* BlocksKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BlocksKit.debug.xcconfig; sourceTree = ""; }; - 9BE464EA715515E70464B4F5F61DD8CF /* BlocksKit+MessageUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BlocksKit+MessageUI.h"; path = "BlocksKit/BlocksKit+MessageUI.h"; sourceTree = ""; }; - 9BFCDA9AF48C1710ABE2D8707712A9EA /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; - 9CB7A19AFBFCD6C800F6F020B30E91CD /* BSG_KSCrashSentry_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Private.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Private.h; sourceTree = ""; }; - 9CF91537D1C5E6840408BDE6572AC1E7 /* BSG_KSSingleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSingleton.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSingleton.h; sourceTree = ""; }; - 9D13A63F33DA2AE1573C5B54904A0FB2 /* BugsnagHandledState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagHandledState.m; path = Source/BugsnagHandledState.m; sourceTree = ""; }; + 889370F77F8B15A29B76579F97B58F5F /* BSG_KSFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSFileUtils.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSFileUtils.c; sourceTree = ""; }; + 88AEBFD16FF67A0FBDD1DD437C01F0E0 /* JGProgressHUDIndeterminateIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndeterminateIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h; sourceTree = ""; }; + 88D0841F433ED344339107D1F07E8CE1 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 88F6D5EED4194E7A48E19E290246220C /* UIImagePickerController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImagePickerController+BlocksKit.m"; path = "BlocksKit/UIKit/UIImagePickerController+BlocksKit.m"; sourceTree = ""; }; + 8B361FECA35090F4B0A607401C5ABF55 /* UIRefreshControl+MaterialDesignSpinner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+MaterialDesignSpinner.h"; path = "Pod/Classes/UIRefreshControl+MaterialDesignSpinner.h"; sourceTree = ""; }; + 8C65A5A3BCA285CD434E1F167DD19E7C /* BKMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BKMacros.h; path = BlocksKit/Core/BKMacros.h; sourceTree = ""; }; + 8CBF561F54F68721F28E04E6E6DEB1AE /* BugsnagBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagBreadcrumb.m; path = Source/BugsnagBreadcrumb.m; sourceTree = ""; }; + 8CDA2BF0D9BD2962E119971B674B23B2 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; + 8CEA1D18E5979EED1F2164C0A82662F6 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; + 8E25D8C60688E7679E980A26BD500FD8 /* BSG_KSCrashSentry_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_NSException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.h; sourceTree = ""; }; + 8E45C231EE69558378902C2701359DFF /* BugsnagSessionTrackingApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTrackingApiClient.m; path = Source/BugsnagSessionTrackingApiClient.m; sourceTree = ""; }; + 8F392F42507262D92CE779D914C66670 /* MMMaterialDesignSpinner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MMMaterialDesignSpinner.m; path = Pod/Classes/MMMaterialDesignSpinner.m; sourceTree = ""; }; + 9096AB2BD8BAE9301E97ACF6EF3D4628 /* QNResolvUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNResolvUtil.m; path = HappyDNS/Local/QNResolvUtil.m; sourceTree = ""; }; + 90AA523DADBC730B1935E86F91F95992 /* BSG_KSCrashContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashContext.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashContext.h; sourceTree = ""; }; + 90F92F2E64574252675F8EA5CEC1DACE /* BSG_KSCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFilter.h; path = Source/KSCrash/Source/KSCrash/Reporting/Filters/BSG_KSCrashReportFilter.h; sourceTree = ""; }; + 9230E0C901F41592E3DF9A67D2E716A9 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/NSButton+WebCache.m"; sourceTree = ""; }; + 9234AEEF1F4B298EBD3214451FCD9C55 /* BSG_KSCrashSentry_Deadlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Deadlock.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Deadlock.h; sourceTree = ""; }; + 93170957DCDA9DDDEF155FAC91D749B3 /* JGProgressHUDFadeAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeAnimation.m; sourceTree = ""; }; + 9502079BC7A27CE9BD7204F795928E71 /* BSG_KSCrashSentry_Deadlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashSentry_Deadlock.m; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Deadlock.m; sourceTree = ""; }; + 952C1EF16B573E5526B42AAB955F31BC /* Crashlytics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.release.xcconfig; sourceTree = ""; }; + 95AFE15B5E1792D7BAC6AED0D4FB70A3 /* BugsnagCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagCrashSentry.h; path = Source/BugsnagCrashSentry.h; sourceTree = ""; }; + 97C1824C50646ACE38FE44CCBD533161 /* NSIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSIndexSet+BlocksKit.m"; path = "BlocksKit/Core/NSIndexSet+BlocksKit.m"; sourceTree = ""; }; + 97E5E63A5A85B28D19BF546C6DEB3B1C /* NSObject+A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+A2DynamicDelegate.m"; path = "BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m"; sourceTree = ""; }; + 9A5950DC83CA9EE7004B8D1E3EA35424 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; + 9C8087D2472F7C286AFE1E8283E0BD5F /* BugsnagConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagConfiguration.m; path = Source/BugsnagConfiguration.m; sourceTree = ""; }; + 9CA6767E60B37B94EC2C093C616D4694 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E06FAAFD6072701D338396EA51199BD /* BSG_KSSystemInfoC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemInfoC.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfoC.h; sourceTree = ""; }; - 9E4C81C0A7D50FC98C89DDE886179D3B /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; - 9E8025ED85FCAB6DE5F42A047B7DCA03 /* BSG_RFC3339DateTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_RFC3339DateTool.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_RFC3339DateTool.m; sourceTree = ""; }; - 9F0B1F94F9F63A210B7F1F9A10119B7B /* WBHttpRequest+WeiboUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboUser.h"; path = "libWeiboSDK/WBHttpRequest+WeiboUser.h"; sourceTree = ""; }; - A03648EDA932A07C6D110CBB704350C0 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; - A053D2E29EA541517006D1A48AE3950A /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - A05ABD9ED07C39510F90D89550F4FC6C /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/SDWebImageTransition.h; sourceTree = ""; }; - A0A3B516E7CFF745B4322C560FEAF367 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; - A111B4A17DA1CAF8537C80860B3F165F /* jg_hud_success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = jg_hud_success.png; path = JGProgressHUD/Resources/jg_hud_success.png; sourceTree = ""; }; - A14CDC377014F82C8594F2477ACBF6EF /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - A1F7F559CC998E4E6B7A19C457904528 /* NSMutableOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableOrderedSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableOrderedSet+BlocksKit.m"; sourceTree = ""; }; - A1FED36F7E59F9C82E4447C9A1BC81BC /* BSG_KSCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashDoctor.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashDoctor.h; sourceTree = ""; }; - A231AAD347CA5F6101FBA16159E28699 /* BSG_KSCrashCallCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashCallCompletion.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSCrashCallCompletion.h; sourceTree = ""; }; - A472867F9B0F25C1DA00A6CCDE1686E1 /* BSG_KSZombie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSZombie.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSZombie.h; sourceTree = ""; }; - A4E27700DF6E5486F91E0F37F189C817 /* BSG_KSCrashSentry_User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_User.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_User.h; sourceTree = ""; }; - A55E95009A1889289CEEB8BA434EC272 /* WBHttpRequest+WeiboGame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboGame.h"; path = "libWeiboSDK/WBHttpRequest+WeiboGame.h"; sourceTree = ""; }; - A56642A7BDEDCFEB1A3D7FB3E3D58F1F /* NSDictionary+BSG_Merge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+BSG_Merge.h"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSDictionary+BSG_Merge.h"; sourceTree = ""; }; - A5917793C64E22C73C5290EF616C0111 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - A62B781E63BD4DF472D4804DDF476E58 /* BSG_KSJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSJSONCodecObjC.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodecObjC.m; sourceTree = ""; }; - A6E8F6F269F22C90B945581A845DD0E1 /* JGProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JGProgressHUD-dummy.m"; sourceTree = ""; }; - A703F0E440E407DB4E5924C66EA7111C /* jg_hud_success@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "jg_hud_success@2x.png"; path = "JGProgressHUD/Resources/jg_hud_success@2x.png"; sourceTree = ""; }; - A781A018CBD64210F8C869C7A1474030 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - A8AD87E8E2D2DE9BF6EC1276FB694306 /* UIImagePickerController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImagePickerController+BlocksKit.h"; path = "BlocksKit/UIKit/UIImagePickerController+BlocksKit.h"; sourceTree = ""; }; - AA4960FC2485BE12EDD3BB5A556229E6 /* BSG_KSMach_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_x86_32.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_x86_32.c; sourceTree = ""; }; - AB3B3FD14963AB9061DE31ECCB1FA96A /* BSG_KSCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashDoctor.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashDoctor.m; sourceTree = ""; }; - AC65C7EE911F31493B1BA8173CCB128E /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; - AD65D39E8C2C7FB7ED0F8CB04348C23E /* MMMaterialDesignSpinner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MMMaterialDesignSpinner.h; path = Pod/Classes/MMMaterialDesignSpinner.h; sourceTree = ""; }; - AF5AF7A34D781C55E7D1888A5C97FF43 /* BugsnagCrashReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashReport.m; path = Source/BugsnagCrashReport.m; sourceTree = ""; }; - AF60B70CC25498D37361A2708C3F2AAF /* BugsnagFileStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagFileStore.h; path = Source/BugsnagFileStore.h; sourceTree = ""; }; - AF8D7B95A8DF6448F44B23EA19A54D7F /* BugsnagSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSink.m; path = Source/BugsnagSink.m; sourceTree = ""; }; - AF9A937E49223BC79D25EC8A1D8727F6 /* JGProgressHUDFadeZoomAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeZoomAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m; sourceTree = ""; }; - AFAE57775A8F8CE1B21A6B212107BAA2 /* BSG_KSCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashC.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.c; sourceTree = ""; }; + 9E607AC81443C3871BF30387BA78A65D /* BSG_KSJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSJSONCodecObjC.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodecObjC.m; sourceTree = ""; }; + 9EE49D00410B37571828FDDD523CC3AA /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; + 9F5632642BB4DF43C4675874C345CE86 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; + 9F9F1B8F04BCFDBDA3EC8964F314D41A /* BugsnagKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagKeys.h; path = Source/BugsnagKeys.h; sourceTree = ""; }; + 9FC3F814031C92E9B2510DD531E8B05B /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/SDWebImageTransition.m; sourceTree = ""; }; + A0AA6E5AA0CD867DA5D58480481D4757 /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; + A0AEDADE49BF6D3220227CFC3DD0A9F4 /* NSMutableDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableDictionary+BlocksKit.m"; path = "BlocksKit/Core/NSMutableDictionary+BlocksKit.m"; sourceTree = ""; }; + A155E41C802F6DF86EF001BDF119458B /* NSMutableArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+BlocksKit.h"; path = "BlocksKit/Core/NSMutableArray+BlocksKit.h"; sourceTree = ""; }; + A1748B2E1D1C224082E1798D981490A0 /* WeiboSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.release.xcconfig; sourceTree = ""; }; + A1C5D9DBB5B3C7F777C882730706CFDB /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + A245B93E3CCC682F4979F51E8813B509 /* BSG_KSCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashReport.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c; sourceTree = ""; }; + A31390612D463D2B1728DAAD2497E447 /* JGProgressHUDAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.h; sourceTree = ""; }; + A35BE9C148711E2F6927929594430A22 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + A390685531E9B45A9A3C386566BDFDF4 /* BSG_KSCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashDoctor.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashDoctor.m; sourceTree = ""; }; + A57C66E53BBCCC0C371F96658851D68C /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; + A608F819BBF2516D13EFEC9F890FA3DA /* JGProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JGProgressHUD.debug.xcconfig; sourceTree = ""; }; + A68CBDE8A9BB1C6A821CA0CB1980A6E9 /* BSG_KSBacktrace.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSBacktrace.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.c; sourceTree = ""; }; + A6DBFB9182568D110B9ABB4C92CE15AD /* BSG_KSCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrash.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h; sourceTree = ""; }; + A72C164AA781070E2EDD44DB155B4A5E /* BSG_KSMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSMach.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach.h; sourceTree = ""; }; + A802AE814BA1625230387F76E2A0ACAD /* Bugsnag-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bugsnag-dummy.m"; sourceTree = ""; }; + A8509B0AEF4E2FCF05B36C320F213143 /* QNDes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNDes.h; path = HappyDNS/Util/QNDes.h; sourceTree = ""; }; + A8E70DEB91643DD09C645C97F399DFB4 /* WBHttpRequest+WeiboShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboShare.h"; path = "libWeiboSDK/WBHttpRequest+WeiboShare.h"; sourceTree = ""; }; + A9CFBD20E5A7CDC0A31C14E97DECEF5F /* QNIP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNIP.h; path = HappyDNS/Util/QNIP.h; sourceTree = ""; }; + AC1F052E6E8EFF18388240351B7C77CF /* BSG_KSCrashSentry_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashSentry_NSException.m; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_NSException.m; sourceTree = ""; }; + AD480ECEA9F608C1A08746845069D557 /* QNHex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNHex.h; path = HappyDNS/Util/QNHex.h; sourceTree = ""; }; + AD50D1481660D097CD7B38A309703351 /* BugsnagLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagLogger.h; path = Source/BugsnagLogger.h; sourceTree = ""; }; + AF017C5A94CE73B47544650DF6FC4D8E /* UIView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+BlocksKit.h"; path = "BlocksKit/UIKit/UIView+BlocksKit.h"; sourceTree = ""; }; AFCFF05430D46AE44C4B2B0AC7D9715A /* libBugsnag.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBugsnag.a; path = libBugsnag.a; sourceTree = BUILT_PRODUCTS_DIR; }; - B01D184420208824836BA74488F13A4B /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - B0A4E2D0EDEC8D5E4CEC092C73AE7CF1 /* NSMutableSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableSet+BlocksKit.h"; sourceTree = ""; }; + B006CAC860CE89318AE88CE9D8F6847D /* BSG_RFC3339DateTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_RFC3339DateTool.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_RFC3339DateTool.h; sourceTree = ""; }; + B030750C003187CAF16903C4BA2F68EE /* Bugsnag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bugsnag.m; path = Source/Bugsnag.m; sourceTree = ""; }; + B05BAFC886498B61737E74D472347D8B /* HappyDNS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HappyDNS.debug.xcconfig; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; - B175401DBBFEAC2C682A16C83D4658C4 /* BSG_KSSystemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSSystemInfo.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfo.m; sourceTree = ""; }; - B28C2446973DCFC30D2E97CE16781B15 /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; - B3367DD199FAC112AAEA65A112D72A90 /* NSURLConnection+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLConnection+BlocksKit.m"; path = "BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m"; sourceTree = ""; }; - B33C43AD95E0521BA91AA8B41A0462CF /* BugsnagSessionTrackingApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTrackingApiClient.h; path = Source/BugsnagSessionTrackingApiClient.h; sourceTree = ""; }; - B4F19FEDB124C2D1980289BECEDBA051 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; - B56B2C4A1E337397102C310A36901FC6 /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; - B7A831CA0A25E45EB62CFFD6717F2AF3 /* BSGConnectivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSGConnectivity.m; path = Source/BSGConnectivity.m; sourceTree = ""; }; - B7C608245B9ECC955C837BE4C7F82543 /* NSDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+BlocksKit.h"; path = "BlocksKit/Core/NSDictionary+BlocksKit.h"; sourceTree = ""; }; - B864617548924E8442B2CF222EAD6039 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - B88E74404AD883B17EF1BC4D3D9A8E76 /* Bugsnag.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bugsnag.m; path = Source/Bugsnag.m; sourceTree = ""; }; - B89E9088469CD31CF599D646D242677E /* BugsnagUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagUser.m; path = Source/BugsnagUser.m; sourceTree = ""; }; - B8E6C0B1C0B38F950D8DB9FA0EA2401E /* NSIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSIndexSet+BlocksKit.m"; path = "BlocksKit/Core/NSIndexSet+BlocksKit.m"; sourceTree = ""; }; - BAA690287969DD8E6ABDB36860A1508A /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - BB3E8F3E4561CF776B70826294047365 /* BugsnagSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSession.h; path = Source/BugsnagSession.h; sourceTree = ""; }; - BC9A79F19E5FF61A798896F17DEE22E9 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - BD993F433F196150BB81C9CC4DF2C6ED /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; - BFAA3F23948B2D4A538D8D926B7E36E2 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; - BFC65481308452D3DE671ADEB905DFD0 /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; - BFFB1BBFAB78CF73EE4EEEE246971893 /* NSMutableSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableSet+BlocksKit.m"; sourceTree = ""; }; - C05CC332B414566181226061F397372A /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - C18D6151FA9E60C1690B4AF063C5950F /* UITextField+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+BlocksKit.m"; path = "BlocksKit/UIKit/UITextField+BlocksKit.m"; sourceTree = ""; }; - C1A9034CDE515C4DA19B02E136C9FC9A /* BugsnagApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagApiClient.m; path = Source/BugsnagApiClient.m; sourceTree = ""; }; - C26D251AFF9C7C0EA1481D9FB467125E /* BugsnagBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagBreadcrumb.m; path = Source/BugsnagBreadcrumb.m; sourceTree = ""; }; - C30735AFE6C5E7E60538E592F5E1553A /* NSObject+BKBlockObservation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+BKBlockObservation.m"; path = "BlocksKit/Core/NSObject+BKBlockObservation.m"; sourceTree = ""; }; - C38C982C938DA3CB0AF28C6AB4051AE9 /* JGProgressHUDIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndicatorView.h; sourceTree = ""; }; - C3A9BF9BB5F15342D7BE936F4814EED2 /* ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist"; sourceTree = ""; }; - C3FA115FEAFC6AEACCD8693650961071 /* NSCache+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCache+BlocksKit.h"; path = "BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h"; sourceTree = ""; }; - C4555DC09BC83711A2DE01F44808B471 /* BSGSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSGSerialization.h; path = Source/BSGSerialization.h; sourceTree = ""; }; - C4D366DA09746024C56C9452299856EF /* UIBarButtonItem+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+BlocksKit.h"; path = "BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h"; sourceTree = ""; }; - C59BB7A88763C04B09D88D2C32691691 /* UIGestureRecognizer+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIGestureRecognizer+BlocksKit.h"; path = "BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h"; sourceTree = ""; }; - C6335D950533269CA4E6C8B9E8C34BE9 /* BSG_KSCrashSentry_Deadlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashSentry_Deadlock.m; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Deadlock.m; sourceTree = ""; }; - C69AF7D2ABF1FC021356CEDF96A52892 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - C6B8B211B308E7FC790D79D84D9CC723 /* BugsnagKSCrashSysInfoParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagKSCrashSysInfoParser.h; path = Source/BugsnagKSCrashSysInfoParser.h; sourceTree = ""; }; - C6BA90D6D0DB41EE274D922FC30A2A0E /* NSArray+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+BlocksKit.m"; path = "BlocksKit/Core/NSArray+BlocksKit.m"; sourceTree = ""; }; - C700CB0DE6AC90F84CF4463C3FFE9A28 /* JGProgressHUDAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDAnimation.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.h; sourceTree = ""; }; - C86AB54277EBDD13F9680BAF864DE080 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; - C97DAFC6D54CACAF82EEB0BAA37C6EB4 /* BSG_KSCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportStore.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportStore.h; sourceTree = ""; }; - C9F6CD405CBC9F1E09F3D7A87B68CC1A /* A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2DynamicDelegate.m; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.m; sourceTree = ""; }; - CAB0A18D09E631CB5C08360C35DDDB8E /* BSG_KSCrashSentry_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_CPPException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.h; sourceTree = ""; }; - CBA41173AE3E31710EFA768BD0C50719 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; - CE9AEDB9DB1C5B281C99F644188BD9CA /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; - CEBEBD92E32D2A27A7F2E472587E8BDC /* JGProgressHUDShadow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDShadow.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.m; sourceTree = ""; }; - CF007A0F8A357DDB0DC6548D4F208E0C /* BSG_KSCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h; sourceTree = ""; }; - CF79325B4F57DB32357A1D8102A7F33F /* UIView+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+BlocksKit.m"; path = "BlocksKit/UIKit/UIView+BlocksKit.m"; sourceTree = ""; }; - D03EB06A4B764716299A31A2CCD7B41D /* BlocksKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BlocksKit.release.xcconfig; sourceTree = ""; }; - D1FD49475533FBE265454ED02C97555B /* BSG_KSCrashCallCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashCallCompletion.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSCrashCallCompletion.m; sourceTree = ""; }; - D224A3A120DF90F645BC64FBC0F44B53 /* NSArray+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+BlocksKit.h"; path = "BlocksKit/Core/NSArray+BlocksKit.h"; sourceTree = ""; }; - D294110436D094D87AAA207BF2306EBF /* BugsnagKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagKeys.h; path = Source/BugsnagKeys.h; sourceTree = ""; }; - D2C2D3195B61846A821420DA8C9CC9DE /* WeiboSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeiboSDK.h; path = libWeiboSDK/WeiboSDK.h; sourceTree = ""; }; - D350C3F1638986C7578AF3B0C0905CAB /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; - D383D624418A4878A5174EBA7C07A655 /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; - D3B1D9886EB88B8424404EB63C9F54E1 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; - D4F4F16ED4839C070342A08F128A1E31 /* MFMailComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MFMailComposeViewController+BlocksKit.h"; path = "BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h"; sourceTree = ""; }; - D5A08B90E7090F0551E2ED620FA2991E /* BSG_KSCrashSentry_Deadlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_Deadlock.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Deadlock.h; sourceTree = ""; }; - D5DC846B2979A4B275943C7BC1F887CF /* Fabric.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.debug.xcconfig; sourceTree = ""; }; - D7578CA65419F9A6B47EE688F92FF0F6 /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - D783524DDF49BA8A38AB78CCC2507249 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - D7869F5E2BC8E54C22DE227F5214ECA2 /* ActivityTracking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActivityTracking.h; path = Pod/Classes/ActivityTracking.h; sourceTree = ""; }; - D88D7856D7533D7418FD57B5446882BC /* BSG_KSCrashSentry_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_MachException.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_MachException.c; sourceTree = ""; }; - D8D31B959A7C3B731128641545FCF988 /* BSG_KSObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSObjC.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjC.h; sourceTree = ""; }; - D947E9C3F117FE20BDD47EA38975AE06 /* BSG_KSCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrash.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.h; sourceTree = ""; }; - D9A001776AE561CD0795E95A229097A8 /* BSG_KSCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReport.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.h; sourceTree = ""; }; - D9DEC06EC7E475908D72BDCCF6BC4564 /* BugsnagSessionFileStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionFileStore.h; path = Source/BugsnagSessionFileStore.h; sourceTree = ""; }; - D9F1D05F714E8693AADCAB7B4C5BF23C /* BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BlocksKit.h; path = BlocksKit/BlocksKit.h; sourceTree = ""; }; - DB43E49809FFBC5915AE79A7BFDD016B /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; - DC8583A07EDF27F96D073EAC36A83F60 /* BSG_KSMach.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach.c; sourceTree = ""; }; - DDB4F8F66D53D85949BB4B7B79306C93 /* UITextField+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+BlocksKit.h"; path = "BlocksKit/UIKit/UITextField+BlocksKit.h"; sourceTree = ""; }; - DDDE926727F8BF3961FB5695D3483585 /* JGProgressHUDImageIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDImageIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDImageIndicatorView.h; sourceTree = ""; }; - DDE0B34C9D5E46CAC8721123E9AC453F /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - DEDFFA159622224E4784009667BA2526 /* JGProgressHUDIndeterminateIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDIndeterminateIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.h; sourceTree = ""; }; - DEF7047585AD4828ED25A382154B2877 /* WBHttpRequest+WeiboToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboToken.h"; path = "libWeiboSDK/WBHttpRequest+WeiboToken.h"; sourceTree = ""; }; - DF8126FE879296F581FC464176AD4592 /* NSMutableIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableIndexSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableIndexSet+BlocksKit.h"; sourceTree = ""; }; - DFB1D8D3067E88701D79AE89732E2ABE /* NSObject+A2DynamicDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+A2DynamicDelegate.m"; path = "BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m"; sourceTree = ""; }; - DFB3F911D4CBF0922CCE313D4F5707F5 /* BugsnagMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagMetaData.m; path = Source/BugsnagMetaData.m; sourceTree = ""; }; - DFF8FAB5108D3213E27D6E13C5CF037F /* BSG_KSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSLogger.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSLogger.h; sourceTree = ""; }; - E07D4445DE0FD7228FE50B6B4112F9E8 /* BSG_KSCrashReportFilterCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFilterCompletion.h; path = Source/KSCrash/Source/KSCrash/Reporting/Filters/BSG_KSCrashReportFilterCompletion.h; sourceTree = ""; }; - E1E7CEB94EC928013BD1452026D68B50 /* BugsnagMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagMetaData.h; path = Source/BugsnagMetaData.h; sourceTree = ""; }; - E1FD581C1B61046C150334756E9F592F /* NSURLConnection+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLConnection+BlocksKit.h"; path = "BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h"; sourceTree = ""; }; - E207AD9A89A0BE27F7E2658D50A3105C /* UIPopoverController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+BlocksKit.m"; path = "BlocksKit/UIKit/UIPopoverController+BlocksKit.m"; sourceTree = ""; }; - E223F40F19B7A69403C425BD7914D587 /* BugsnagFileStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagFileStore.m; path = Source/BugsnagFileStore.m; sourceTree = ""; }; - E2E63C3FAB1AC79E806E5818474F2195 /* JGProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JGProgressHUD.debug.xcconfig; sourceTree = ""; }; - E2FDA19444135BB7959142E4101A558D /* BugsnagSessionTrackingPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTrackingPayload.h; path = Source/BugsnagSessionTrackingPayload.h; sourceTree = ""; }; - E384EDA31D5313B1C5F638179EDD6414 /* BSG_KSObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSObjCApple.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSObjCApple.h; sourceTree = ""; }; - E47BA0D76276FDC2BF483C5A67B06E5E /* NSOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSOrderedSet+BlocksKit.h"; path = "BlocksKit/Core/NSOrderedSet+BlocksKit.h"; sourceTree = ""; }; - E47E5838735CC36CFABD17D029D26C3B /* BSG_KSCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrash.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m; sourceTree = ""; }; - E4BFB0AEC2E8617FA8C4EBD49B9909FE /* JGProgressHUDErrorIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDErrorIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDErrorIndicatorView.m; sourceTree = ""; }; - E52A0410754F65B4232698F3BC005495 /* WeiboUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeiboUser.h; path = libWeiboSDK/WeiboUser.h; sourceTree = ""; }; - E5FD4EB86F2678224F168FC068AE794D /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - E62EC28A8EC65CDE7FB2CD0171A2C220 /* UIView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+BlocksKit.h"; path = "BlocksKit/UIKit/UIView+BlocksKit.h"; sourceTree = ""; }; - E6FC3BF20679DFB9B1A52566CC44D9F4 /* UIActionSheet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActionSheet+BlocksKit.m"; path = "BlocksKit/UIKit/UIActionSheet+BlocksKit.m"; sourceTree = ""; }; - E7E1505097E53CB8A174F7A3F8C735D7 /* NSMutableDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableDictionary+BlocksKit.m"; path = "BlocksKit/Core/NSMutableDictionary+BlocksKit.m"; sourceTree = ""; }; - E920309F16EE5134B7E7B8098A86883F /* BSG_KSSafeCollections.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSafeCollections.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSafeCollections.h; sourceTree = ""; }; - E9437C5995DF88E19AB2847C00FECF6D /* NSTimer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+BlocksKit.m"; path = "BlocksKit/Core/NSTimer+BlocksKit.m"; sourceTree = ""; }; - E9632E62CD42560C5B59DB1121398E32 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; - E9B1F08312AF562D53EBFC6961CAF5A7 /* BugsnagLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagLogger.h; path = Source/BugsnagLogger.h; sourceTree = ""; }; - EA128986E43D10B291153DBD44C4B159 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/SDAnimatedImageRep.m; sourceTree = ""; }; - EA47C1CF8AAF92B2DB2B28323E7AB868 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - ECE8D3D2319A3E20C467F0CCF305B761 /* NSError+BSG_SimpleConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+BSG_SimpleConstructor.h"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSError+BSG_SimpleConstructor.h"; sourceTree = ""; }; - ED04625EEDC3F3387DDE34FC3BF822B0 /* JGProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JGProgressHUD-prefix.pch"; sourceTree = ""; }; - ED6C7EA141AB8B435FA0ADFE243E5FA0 /* BlocksKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BlocksKit-prefix.pch"; sourceTree = ""; }; - EE17C1D16E7AAEE38E27EA28F1B3E53F /* BugsnagSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSink.h; path = Source/BugsnagSink.h; sourceTree = ""; }; - EF265CC166F204A5684765D92F7EF823 /* BugsnagErrorReportApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagErrorReportApiClient.m; path = Source/BugsnagErrorReportApiClient.m; sourceTree = ""; }; - EF3C9EB6BCB3A958854F1AE34D30CBD7 /* NSSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSSet+BlocksKit.h"; path = "BlocksKit/Core/NSSet+BlocksKit.h"; sourceTree = ""; }; - EF76B9C4B10F4AC698B82872D5E813B3 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - EFACFE257D59E9B79F8380A2730EA095 /* WBSDKCommentButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKCommentButton.h; path = libWeiboSDK/WBSDKCommentButton.h; sourceTree = ""; }; - EFC02E35E088BA6357BE1057EE278B7B /* BSG_KSSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSSignalInfo.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSignalInfo.c; sourceTree = ""; }; - EFC612EBA52055B7F1A8514E1D2DF70A /* BugsnagSessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTracker.h; path = Source/BugsnagSessionTracker.h; sourceTree = ""; }; - F023A2472059DD6E7AE48F1B99D20434 /* NSError+BSG_SimpleConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+BSG_SimpleConstructor.m"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSError+BSG_SimpleConstructor.m"; sourceTree = ""; }; - F0B161E828663A415322FC8E730218B5 /* Bugsnag.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bugsnag.release.xcconfig; sourceTree = ""; }; - F1C81AE4B995878B32EC4E6D6F88C1EF /* BugsnagHandledState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagHandledState.h; path = Source/BugsnagHandledState.h; sourceTree = ""; }; - F338018BE87D0F7F0F1686F2D894C5C3 /* NSObject+BKBlockExecution.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+BKBlockExecution.h"; path = "BlocksKit/Core/NSObject+BKBlockExecution.h"; sourceTree = ""; }; - F342E1C72A970EA83E9E1744EA7351A5 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - F4B02CD09019E0E4802B6469FE25AFFB /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; - F526F859711AFBDE5243470CACF58B60 /* BSG_KSCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFilter.h; path = Source/KSCrash/Source/KSCrash/Reporting/Filters/BSG_KSCrashReportFilter.h; sourceTree = ""; }; - F7DC48DF5DD670E2542956A13E992957 /* BSG_KSCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashReport.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.c; sourceTree = ""; }; - F8226465E6C59DBCBB32DD565714BCA6 /* MFMailComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MFMailComposeViewController+BlocksKit.m"; path = "BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m"; sourceTree = ""; }; - F909D8D95330419BC3376ADB63AEADB9 /* BSG_KSSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSignalInfo.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSignalInfo.h; sourceTree = ""; }; - F9D088B988386EB8CBDB3F5E929A7879 /* MMMaterialDesignSpinner-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MMMaterialDesignSpinner-dummy.m"; sourceTree = ""; }; - F9EA2E84C0DDB3337ACDA5DC03FF5B81 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; - FA0F22BF8B9B795C1CE792D06D65245E /* JGProgressHUDAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDAnimation.m; sourceTree = ""; }; - FA31A0AC7D674727743E002B0B0E4EFA /* BSG_KSJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSJSONCodec.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodec.c; sourceTree = ""; }; - FDC760D35AE1912FE482EC2E1FD6DC9B /* UIGestureRecognizer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIGestureRecognizer+BlocksKit.m"; path = "BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m"; sourceTree = ""; }; - FE2C50ED84E079A500E8469E30136767 /* JGProgressHUDIndeterminateIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndeterminateIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.m; sourceTree = ""; }; - FF631AA1B75C7C07902801D4A8A3D0F4 /* BSG_KSJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSJSONCodec.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodec.h; sourceTree = ""; }; - FFB3DAAA5A4238891EC9CB6690813FFE /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; + B0E27C85C973085C2D66D747A927D631 /* NSIndexSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSIndexSet+BlocksKit.h"; path = "BlocksKit/Core/NSIndexSet+BlocksKit.h"; sourceTree = ""; }; + B0FF88E297625329169B21F9C591C818 /* QNIpModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNIpModel.h; path = HappyDNS/Assessment/QNIpModel.h; sourceTree = ""; }; + B15B5AAC0FD56E3C9B64DEA13CC0B78A /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; + B1C7D6601450ECF3572192F42AB688A4 /* BSG_KSCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReportFields.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportFields.h; sourceTree = ""; }; + B2AA00D6CBB2BA4E37903C74AA5F6209 /* NSDictionary+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+BlocksKit.m"; path = "BlocksKit/Core/NSDictionary+BlocksKit.m"; sourceTree = ""; }; + B381AC685B39599CCE7895E7CC06B3C1 /* BSG_KSSystemInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSSystemInfo.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfo.m; sourceTree = ""; }; + B392E48C93883483E4161851FB5E758D /* QNRefresher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNRefresher.h; path = HappyDNS/QNRefresher.h; sourceTree = ""; }; + B3E4A54AB05AB734CF12A75359313AD6 /* BSG_KSCrashState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashState.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashState.h; sourceTree = ""; }; + B41DE1FC0D6A97101620F782231257FB /* QNLruCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNLruCache.m; path = HappyDNS/Common/QNLruCache.m; sourceTree = ""; }; + B534CCFDC60AC6FECF92380A7A650681 /* BSG_KSBacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSBacktrace.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSBacktrace.h; sourceTree = ""; }; + B701E4C215A45E611AE0E7A3F14A71A3 /* BSG_KSSystemInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSSystemInfo.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSSystemInfo.h; sourceTree = ""; }; + B776BCCB43F76B9381253B539FF8DD76 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; + B7E2DD1B1376C42C9B0796AFC2C97134 /* Fabric.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.release.xcconfig; sourceTree = ""; }; + B8C6E92113EC9D0840DF2C0891BB79A1 /* BSG_KSCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashC.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashC.h; sourceTree = ""; }; + B9F6FE99A4945618A12F259329765635 /* BSG_KSCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashReport.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReport.h; sourceTree = ""; }; + BC43A331FDEA6709D688459992774989 /* QNDes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNDes.m; path = HappyDNS/Util/QNDes.m; sourceTree = ""; }; + BCA2CB45839B43BA6728E56CF25AD39B /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + BCF931307F012A2053801DEC1FE0DFC6 /* A2DynamicDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = A2DynamicDelegate.h; path = BlocksKit/DynamicDelegate/A2DynamicDelegate.h; sourceTree = ""; }; + BE75B90B3452C4C80DFFB271A6C44DA6 /* NSError+BSG_SimpleConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+BSG_SimpleConstructor.m"; path = "Source/KSCrash/Source/KSCrash/Recording/Tools/NSError+BSG_SimpleConstructor.m"; sourceTree = ""; }; + BE945BD0D988AA017ADA941D9B113173 /* BSG_KSString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSString.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSString.h; sourceTree = ""; }; + BEBD0C3771F070DAB569775F14D4396E /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; + BEFA28F57068F65A8213E5977F749370 /* BSG_KSCrashAdvanced.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashAdvanced.h; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashAdvanced.h; sourceTree = ""; }; + BF1CD3DF18A7FE3D487DD13BE60FE178 /* BugsnagHandledState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagHandledState.m; path = Source/BugsnagHandledState.m; sourceTree = ""; }; + BFC4A17844912DA0FC3DA02D2028D94A /* BSG_KSSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSSignalInfo.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSignalInfo.c; sourceTree = ""; }; + C017EBA7228E2886288F2ED0F18E2E1C /* BSG_KSCrashState.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashState.c; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashState.c; sourceTree = ""; }; + C070AE4A38678CD2BD3713B279893BD1 /* BSG_KSCrashSentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.h; sourceTree = ""; }; + C0A827B8443EDEA3D98209B3C5FE5F49 /* UIActionSheet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActionSheet+BlocksKit.h"; path = "BlocksKit/UIKit/UIActionSheet+BlocksKit.h"; sourceTree = ""; }; + C0B15BAB43BE5D58237BA1466629149D /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + C11B919D2AB6A4650D7D4EE4CDCA31BF /* QNTxtResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNTxtResolver.m; path = HappyDNS/Local/QNTxtResolver.m; sourceTree = ""; }; + C17A0A52653CBD01E6B87D07BE14FCF1 /* NSSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSSet+BlocksKit.m"; path = "BlocksKit/Core/NSSet+BlocksKit.m"; sourceTree = ""; }; + C1C83B260155E2B2A2DB819E3892C0F5 /* BugsnagSessionTrackingApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagSessionTrackingApiClient.h; path = Source/BugsnagSessionTrackingApiClient.h; sourceTree = ""; }; + C1D55B686CEBC59C1D94F10D904D40EF /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; + C214DDE2C24918F8CFE813BA865DDB9D /* BugsnagSessionTrackingPayload.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTrackingPayload.m; path = Source/BugsnagSessionTrackingPayload.m; sourceTree = ""; }; + C23DE6C230B1E19AE954E2919A71BEAB /* QNRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNRecord.m; path = HappyDNS/Common/QNRecord.m; sourceTree = ""; }; + C285C3224707D9DF3318E4241B75C363 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + C28BDBC70D607E2C6698288A1F553A05 /* BSG_KSJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSJSONCodecObjC.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodecObjC.h; sourceTree = ""; }; + C3778B965B1FBD46B8E08BCB11306ED0 /* JGProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JGProgressHUD.release.xcconfig; sourceTree = ""; }; + C3B8ECE6CE2D343E9FF764553D877DE7 /* JGProgressHUDFadeZoomAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDFadeZoomAnimation.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDFadeZoomAnimation.m; sourceTree = ""; }; + C48CAB39889834FC39B9D5DA17DB9921 /* BugsnagApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagApiClient.m; path = Source/BugsnagApiClient.m; sourceTree = ""; }; + C4EBF1B36CA846531BD03DA94952F109 /* JGProgressHUDPieIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDPieIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDPieIndicatorView.m; sourceTree = ""; }; + C78CF3840046AFBD425B5BA2D88F7679 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + C80389EE454FC414741DE5DF7ACFE399 /* Bugsnag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bugsnag.h; path = Source/Bugsnag.h; sourceTree = ""; }; + CA55862A7AEF4458F880C8915B9C51B5 /* A2BlockInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = A2BlockInvocation.m; path = BlocksKit/DynamicDelegate/A2BlockInvocation.m; sourceTree = ""; }; + CBC0BF63A5A9CC32BBC8F0388DA518F3 /* MMMaterialDesignSpinner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MMMaterialDesignSpinner.h; path = Pod/Classes/MMMaterialDesignSpinner.h; sourceTree = ""; }; + CCDD2073DC68F4657F8827974E7195E8 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + CDE4E747676BA40D8D5ECADBF184D4C6 /* BSG_KSJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSJSONCodec.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSJSONCodec.c; sourceTree = ""; }; + CE34D6910D448B48E1B6CC5D8827B62B /* QNGetAddrInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNGetAddrInfo.m; path = HappyDNS/Util/QNGetAddrInfo.m; sourceTree = ""; }; + CE84053237CEB82AF02F71BAA7B32BBF /* BSG_KSCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrash.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrash.m; sourceTree = ""; }; + CEA9011E6E7665E93ADC71515FB8E7BE /* UIActionSheet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActionSheet+BlocksKit.m"; path = "BlocksKit/UIKit/UIActionSheet+BlocksKit.m"; sourceTree = ""; }; + CED3BC22EE9470EA8DF490F7CA84DDAB /* BSG_KSZombie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSZombie.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSZombie.h; sourceTree = ""; }; + D0FEE1B7CA43D49A02E371FEECBCBDB2 /* BugsnagNotifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagNotifier.h; path = Source/BugsnagNotifier.h; sourceTree = ""; }; + D2A26E767099DE44C06F1217BA6DDCE6 /* BSG_KSCrashReportStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSCrashReportStore.m; path = Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashReportStore.m; sourceTree = ""; }; + D306915379A95F29AC586F0827664757 /* MMMaterialDesignSpinner-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MMMaterialDesignSpinner-dummy.m"; sourceTree = ""; }; + D4170B88766C08CD83F49DF4FF6FD435 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + D42F1F7BD09A5658175583E1F29D2403 /* UIPopoverController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+BlocksKit.m"; path = "BlocksKit/UIKit/UIPopoverController+BlocksKit.m"; sourceTree = ""; }; + D45AEC51C331068BF8F91EC62E269E34 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/SDAnimatedImageRep.m; sourceTree = ""; }; + D700CEB29A4D74DD78472D61666C4939 /* UIGestureRecognizer+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIGestureRecognizer+BlocksKit.m"; path = "BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m"; sourceTree = ""; }; + D70C4541E2F314869BCEEF150BB31426 /* WBHttpRequest+WeiboUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WBHttpRequest+WeiboUser.h"; path = "libWeiboSDK/WBHttpRequest+WeiboUser.h"; sourceTree = ""; }; + D7E2DA1B3E8775161A74CB487AB40ABB /* MMMaterialDesignSpinner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MMMaterialDesignSpinner.release.xcconfig; sourceTree = ""; }; + D817009EC2CE35FFD1C2AC77D5EED614 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; + D83B0866070296738FD4D149C351D3F4 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + D963CE22ED72456759C9CF4FCB01FA23 /* NSCache+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCache+BlocksKit.m"; path = "BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m"; sourceTree = ""; }; + DAE7DAF445F4E9598702B8B63A7008DF /* NSObject+A2BlockDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+A2BlockDelegate.h"; path = "BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h"; sourceTree = ""; }; + DB40143031DEDEC49BB4BDD26BF604AA /* NSMutableOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableOrderedSet+BlocksKit.h"; path = "BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h"; sourceTree = ""; }; + DBC45236BB9BFEC1E835E9FC38B19FEB /* BugsnagNotifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagNotifier.m; path = Source/BugsnagNotifier.m; sourceTree = ""; }; + DBD25A3470A290BA4F19692B31C5DD73 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; + DBD82385CB8D648D502368D238C5676C /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + DCA32FC3EF84D065EC78E506A8786DD2 /* NSMutableIndexSet+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableIndexSet+BlocksKit.m"; path = "BlocksKit/Core/NSMutableIndexSet+BlocksKit.m"; sourceTree = ""; }; + DD16ADC7F01A26324E9B7CF0A493B3BE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; + DDC03114642C8E97B2E2B71083E39DD7 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/SDAnimatedImageRep.h; sourceTree = ""; }; + DE3020521C87DA3534C5F42006217C46 /* QNResolvUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNResolvUtil.h; path = HappyDNS/Local/QNResolvUtil.h; sourceTree = ""; }; + DEF89F8209C2188308C1DC4BF83C7F0F /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; + DFF6CE06FCC979B2501492F45042AE8A /* JGProgressHUD-Defines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JGProgressHUD-Defines.h"; path = "JGProgressHUD/JGProgressHUD/JGProgressHUD-Defines.h"; sourceTree = ""; }; + E0D0BC7B294B909F20535AF168760001 /* BugsnagErrorReportApiClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagErrorReportApiClient.h; path = Source/BugsnagErrorReportApiClient.h; sourceTree = ""; }; + E119F4ED3541BA201AA7318CF7DF27DA /* WBHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBHttpRequest.h; path = libWeiboSDK/WBHttpRequest.h; sourceTree = ""; }; + E12D6342943485BCFE44346EF146794A /* BSG_KSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSLogger.h; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSLogger.h; sourceTree = ""; }; + E15B9A8758A628754E7D4475A72BAF46 /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; + E20D96B07EFA4E10569D1F2D33327FB0 /* BugsnagFileStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagFileStore.m; path = Source/BugsnagFileStore.m; sourceTree = ""; }; + E21D650B293C368DFDE5C5742BB906FC /* BSG_KSMach_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_x86_64.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_x86_64.c; sourceTree = ""; }; + E303AAE0435E68D727842CA27F9CB4CA /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; + E3444A30934CCB09FB6EA08D2FE086DB /* MFMessageComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MFMessageComposeViewController+BlocksKit.m"; path = "BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m"; sourceTree = ""; }; + E3B31AA0D209428218511156811771FB /* WBSDKCommentButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKCommentButton.h; path = libWeiboSDK/WBSDKCommentButton.h; sourceTree = ""; }; + E426EE515BD51CC86E9CFCB012D95CB4 /* BugsnagErrorReportApiClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagErrorReportApiClient.m; path = Source/BugsnagErrorReportApiClient.m; sourceTree = ""; }; + E4851F9035CEF12026D50BEA2F6179F0 /* BlocksKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BlocksKit-prefix.pch"; sourceTree = ""; }; + E48F09C133A5B7E26DDC2221149ACDC5 /* NSDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+BlocksKit.h"; path = "BlocksKit/Core/NSDictionary+BlocksKit.h"; sourceTree = ""; }; + E4FD2807FFF6FD4868E4F784F3E64157 /* JGProgressHUDSuccessIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JGProgressHUDSuccessIndicatorView.h; path = JGProgressHUD/JGProgressHUD/JGProgressHUDSuccessIndicatorView.h; sourceTree = ""; }; + E51FE7D15007376E6E9902D68C512C3D /* BSG_KSMach.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach.c; sourceTree = ""; }; + E55B4E0FFF90B98A4C48A2D9C5D3475E /* BSG_KSCrashSentry_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry_Signal.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_Signal.c; sourceTree = ""; }; + E61F55CC8CA6FE0FDED726C1ABDB0806 /* BSG_KSMach_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSMach_x86_32.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSMach_x86_32.c; sourceTree = ""; }; + E7383DED404B17BDC3EBEB1F74E20AF3 /* BSG_RFC3339DateTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_RFC3339DateTool.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_RFC3339DateTool.m; sourceTree = ""; }; + E7E66B99334C2F16F131483BB3F5DCD2 /* UIBarButtonItem+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+BlocksKit.m"; path = "BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m"; sourceTree = ""; }; + E8039A193131FD20BB3A12FCB779202B /* QNResolverDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNResolverDelegate.h; path = HappyDNS/Common/QNResolverDelegate.h; sourceTree = ""; }; + E8936040259E1F97AE2DEF10224B5534 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + E8987FC72C678A4622139EDEFCD04B59 /* BSGConnectivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSGConnectivity.h; path = Source/BSGConnectivity.h; sourceTree = ""; }; + E89E00109FEF478942181AE569B80D5C /* QNNetworkInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNNetworkInfo.m; path = HappyDNS/Common/QNNetworkInfo.m; sourceTree = ""; }; + E9BF84197D4841FC20DFFE58E2CA1ED7 /* QNDnspodFree.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNDnspodFree.m; path = HappyDNS/Http/QNDnspodFree.m; sourceTree = ""; }; + EB5BD9F7DFF1FCC8E9A9A160EF3FD0B1 /* BSG_KSDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSDynamicLinker.c; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSDynamicLinker.c; sourceTree = ""; }; + EC0167076D8B37548F9D02F2695EC87D /* NSOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSOrderedSet+BlocksKit.h"; path = "BlocksKit/Core/NSOrderedSet+BlocksKit.h"; sourceTree = ""; }; + ECB0CD6B51028E00889138CC04EB6CEB /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; + ECECCE7A8AEB033B5E981BD47FE4B0B6 /* BSG_KSCrashSentry.c */ = {isa = PBXFileReference; includeInIndex = 1; name = BSG_KSCrashSentry.c; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry.c; sourceTree = ""; }; + EDDD9447A81A79B1AD74E1BF15EDEDB5 /* BugsnagSessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagSessionTracker.m; path = Source/BugsnagSessionTracker.m; sourceTree = ""; }; + EDF1B19294C351EFE07E56671326ACAA /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; + EE3911BD5333A081DA6FE18D848BB49B /* UIPopoverController+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+BlocksKit.h"; path = "BlocksKit/UIKit/UIPopoverController+BlocksKit.h"; sourceTree = ""; }; + EEC9FDBD20688A8BFE10CAFF9A85DDFC /* Bugsnag-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bugsnag-prefix.pch"; sourceTree = ""; }; + EED210C0F440388FE74FC31665B17DA6 /* BugsnagMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagMetaData.m; path = Source/BugsnagMetaData.m; sourceTree = ""; }; + EF59D284DF0C8209327A05AA8B7A4502 /* JGProgressHUDShadow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDShadow.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDShadow.m; sourceTree = ""; }; + EF62B00BE1E56259574C133808153FCF /* QNAssessment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNAssessment.m; path = HappyDNS/Assessment/QNAssessment.m; sourceTree = ""; }; + EFFF6C09C74C7BD4F7042299E97C0321 /* UITextField+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+BlocksKit.h"; path = "BlocksKit/UIKit/UITextField+BlocksKit.h"; sourceTree = ""; }; + F1806B554A05EE2C81838760E44DE276 /* MFMailComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MFMailComposeViewController+BlocksKit.m"; path = "BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m"; sourceTree = ""; }; + F1A608EF38BBD85D84317AF703AC4BBF /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; + F23868CE3CC339386946DE5BF6606B05 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; + F34FAC61BDD922D3E93DA14D6968AD89 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + F369938FDD258555E16F6A40B2DD3ECA /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/SDWebImageTransition.h; sourceTree = ""; }; + F4FE19206F001F7277B948F96685B5D7 /* ActivityTracking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActivityTracking.h; path = Pod/Classes/ActivityTracking.h; sourceTree = ""; }; + F6F42AB2D1C48C343FEEB8CAF7F3DEB4 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; + F6F48AECCE01E3F52AC1AD39D37AA7EE /* JGProgressHUDIndeterminateIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDIndeterminateIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDIndeterminateIndicatorView.m; sourceTree = ""; }; + F730FB5877FC4368574FC606BD31A23C /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + F75D621F5076707D6A8A71C20B4D0AA5 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; + F78B68289E2BE9736EE442989DD68422 /* UIWebView+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+BlocksKit.h"; path = "BlocksKit/UIKit/UIWebView+BlocksKit.h"; sourceTree = ""; }; + F8D3F67B92C1B32CC2CC78CA07B7AC9A /* QNRefresher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNRefresher.m; path = HappyDNS/QNRefresher.m; sourceTree = ""; }; + F96938E629F6ADD86439B864468655E5 /* QNTxtResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNTxtResolver.h; path = HappyDNS/Local/QNTxtResolver.h; sourceTree = ""; }; + FA1E70F22AC93D020F54AD83930B694B /* JGProgressHUDImageIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JGProgressHUDImageIndicatorView.m; path = JGProgressHUD/JGProgressHUD/JGProgressHUDImageIndicatorView.m; sourceTree = ""; }; + FACC08B90B3E576C3058A986D8D8FB7F /* MMMaterialDesignSpinner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MMMaterialDesignSpinner.debug.xcconfig; sourceTree = ""; }; + FB0ABE00D18112BE2F61A7F5E6BCEA64 /* WBSDKBasicButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WBSDKBasicButton.h; path = libWeiboSDK/WBSDKBasicButton.h; sourceTree = ""; }; + FB21FC2E31A0F104075833D4EDFED169 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + FB465335239F059238B783BA68A255BD /* BugsnagFileStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BugsnagFileStore.h; path = Source/BugsnagFileStore.h; sourceTree = ""; }; + FC435667109B397418161F49C428E1AB /* QNGetAddrInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QNGetAddrInfo.h; path = HappyDNS/Util/QNGetAddrInfo.h; sourceTree = ""; }; + FC91F12171EC17B8D586555694981613 /* NSSet+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSSet+BlocksKit.h"; path = "BlocksKit/Core/NSSet+BlocksKit.h"; sourceTree = ""; }; + FCFB4C9AD71C699BFF512937D3E6398A /* BSG_KSCrashSentry_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BSG_KSCrashSentry_CPPException.h; path = Source/KSCrash/Source/KSCrash/Recording/Sentry/BSG_KSCrashSentry_CPPException.h; sourceTree = ""; }; + FD0354FF9B699D0B4CBDC5673A6F8820 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + FD54666F2615F82109BCC40C1B5ECDCE /* BugsnagCrashReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BugsnagCrashReport.m; path = Source/BugsnagCrashReport.m; sourceTree = ""; }; + FDD208D7703284C73858EDD5D9931DC3 /* QNIpModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QNIpModel.m; path = HappyDNS/Assessment/QNIpModel.m; sourceTree = ""; }; + FDE9369E09C5959C144447B9335099DD /* NSMutableDictionary+BlocksKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableDictionary+BlocksKit.h"; path = "BlocksKit/Core/NSMutableDictionary+BlocksKit.h"; sourceTree = ""; }; + FEBFE81A72AD4FFCBA4BC6582DD63E33 /* BSG_KSSafeCollections.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BSG_KSSafeCollections.m; path = Source/KSCrash/Source/KSCrash/Recording/Tools/BSG_KSSafeCollections.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -858,49 +930,49 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4936B03FDD45D7D594CD0E4044272298 /* Frameworks */ = { + 0E15903B84E1B8D9EA00B69312557EC4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 49841F1D536CCC654816C6EA6BB2E3EC /* Frameworks */ = { + 3F926C1D855FCFC76FD477993125C3EB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 56010F82DCF8418E579FA7835727DCF9 /* Frameworks */ = { + 49841F1D536CCC654816C6EA6BB2E3EC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 5A1B21ACA99B88006AEC7C97FCFCBE6E /* Frameworks */ = { + 83BDB1929F8CBA09366F031885B449C0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 83BDB1929F8CBA09366F031885B449C0 /* Frameworks */ = { + B58EC8A2994F8AFEFFC0ACA1FA8B67E4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B58EC8A2994F8AFEFFC0ACA1FA8B67E4 /* Frameworks */ = { + F0B1398EDCAB91B65B897FA987A25F2F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - EAE31FCE8FB8EC4CA1E07174D3B3492A /* Frameworks */ = { + F2F4464578CF436B22964F257A551927 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -910,63 +982,29 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 13DAADC01725D8E15F7ABEC5F65714E6 /* Fabric */ = { - isa = PBXGroup; - children = ( - D7578CA65419F9A6B47EE688F92FF0F6 /* FABAttributes.h */, - 0CA1F74ECC8226301FD91CAE445B55BA /* Fabric.h */, - 45AC528DA63467D2D3EB06EC0565A3C3 /* Frameworks */, - AC2623597F1AECE6F1787CFD3FE8D2FB /* Support Files */, - ); - name = Fabric; - path = Fabric; - sourceTree = ""; - }; - 149D283DF87CB5A8D372C3EE9CAC77AD /* Frameworks */ = { + 0544B1636FB5EE463A7F12DE0206D7DD /* Frameworks */ = { isa = PBXGroup; children = ( - 43195784C3B196D95DA8E6BE6076AF4C /* Crashlytics.framework */, + 3B751F261BFF4F19B73C12663A41A10C /* libWeiboSDK.a */, ); name = Frameworks; sourceTree = ""; }; - 15506F8F274901A82030124C20A7B1CE /* Core */ = { + 0A33A8674A2930463011E7AFAE4292F5 /* Crashlytics */ = { isa = PBXGroup; children = ( - 5BEDE965130459FB81CEBC03C0274075 /* BKMacros.h */, - D9F1D05F714E8693AADCAB7B4C5BF23C /* BlocksKit.h */, - D224A3A120DF90F645BC64FBC0F44B53 /* NSArray+BlocksKit.h */, - C6BA90D6D0DB41EE274D922FC30A2A0E /* NSArray+BlocksKit.m */, - B7C608245B9ECC955C837BE4C7F82543 /* NSDictionary+BlocksKit.h */, - 9B6DDB0A72FA6834DA499699C524C152 /* NSDictionary+BlocksKit.m */, - 3F5A50D2923E176CA62B82A83094D6D9 /* NSIndexSet+BlocksKit.h */, - B8E6C0B1C0B38F950D8DB9FA0EA2401E /* NSIndexSet+BlocksKit.m */, - 2A524512E5070FEA04B9810908E18C20 /* NSInvocation+BlocksKit.h */, - 0152A1093BC1F6DD3C8CE615CA90D779 /* NSInvocation+BlocksKit.m */, - 727D47F89934F3D17FB824E9270336C4 /* NSMutableArray+BlocksKit.h */, - 34DE8C756D1FEBFC23A4EEAB8130611F /* NSMutableArray+BlocksKit.m */, - 0AAA1E0ABC9EDDF569A6BC7DC2AF3101 /* NSMutableDictionary+BlocksKit.h */, - E7E1505097E53CB8A174F7A3F8C735D7 /* NSMutableDictionary+BlocksKit.m */, - DF8126FE879296F581FC464176AD4592 /* NSMutableIndexSet+BlocksKit.h */, - 76C30FF068517B04F2AD468AF9BD6E0A /* NSMutableIndexSet+BlocksKit.m */, - 96AD337CAA005D9F254FD81BE8EDBEBF /* NSMutableOrderedSet+BlocksKit.h */, - A1F7F559CC998E4E6B7A19C457904528 /* NSMutableOrderedSet+BlocksKit.m */, - B0A4E2D0EDEC8D5E4CEC092C73AE7CF1 /* NSMutableSet+BlocksKit.h */, - BFFB1BBFAB78CF73EE4EEEE246971893 /* NSMutableSet+BlocksKit.m */, - 81ED50801979FE542A2C7447B7938682 /* NSObject+BKAssociatedObjects.h */, - 4C7078B70333ABFD1F600759D38542A1 /* NSObject+BKAssociatedObjects.m */, - F338018BE87D0F7F0F1686F2D894C5C3 /* NSObject+BKBlockExecution.h */, - 37D1C02697DB0745AA18E96C9998E905 /* NSObject+BKBlockExecution.m */, - 60485F50ACFF6568CEB4673443B17D99 /* NSObject+BKBlockObservation.h */, - C30735AFE6C5E7E60538E592F5E1553A /* NSObject+BKBlockObservation.m */, - E47BA0D76276FDC2BF483C5A67B06E5E /* NSOrderedSet+BlocksKit.h */, - 081526B27CA12716008E82A34191670B /* NSOrderedSet+BlocksKit.m */, - EF3C9EB6BCB3A958854F1AE34D30CBD7 /* NSSet+BlocksKit.h */, - 395E3887816AEC877EECD2409FEB83B7 /* NSSet+BlocksKit.m */, - 93F0483DB1CC79C0AB145DFE9C39C1FC /* NSTimer+BlocksKit.h */, - E9437C5995DF88E19AB2847C00FECF6D /* NSTimer+BlocksKit.m */, + 9F5632642BB4DF43C4675874C345CE86 /* ANSCompatibility.h */, + 7FC781FC342A83F3126D99B75B00C387 /* Answers.h */, + 16328E3FF1AA02A5AA3B5ED714B9C062 /* CLSAttributes.h */, + 1E5B44E9ADEF5B793B92E3D1D2C5A6DE /* CLSLogging.h */, + C0B15BAB43BE5D58237BA1466629149D /* CLSReport.h */, + 12FA4FB58476F6286A55814FA729CAAF /* CLSStackFrame.h */, + 8666C13200655E2EB14D7AADC8D9BE79 /* Crashlytics.h */, + F0310C33C2742E551595F2E900033A7E /* Frameworks */, + D007DBB84DCF3058535203232C4FAA95 /* Support Files */, ); - name = Core; + name = Crashlytics; + path = Crashlytics; sourceTree = ""; }; 17D3DB89EFE42AE1A1A9570C3235E00F /* Pods-NiuPlayer */ = { @@ -984,10 +1022,80 @@ path = "Target Support Files/Pods-NiuPlayer"; sourceTree = ""; }; - 375DF841949256A05CE86DA0F617C2A5 /* Frameworks */ = { + 1ED2AABFBCDB46D1937D7F96A0F60622 /* Support Files */ = { + isa = PBXGroup; + children = ( + 20FFCD27F5632259BCCA3F5C8B9646C9 /* WeiboSDK.debug.xcconfig */, + A1748B2E1D1C224082E1798D981490A0 /* WeiboSDK.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/WeiboSDK"; + sourceTree = ""; + }; + 291BBF30B45F0C6CF2DB77EA86125368 /* Core */ = { + isa = PBXGroup; + children = ( + 4C34134BA34BA326068BA806750948A2 /* NSButton+WebCache.h */, + 9230E0C901F41592E3DF9A67D2E716A9 /* NSButton+WebCache.m */, + 9CA6767E60B37B94EC2C093C616D4694 /* NSData+ImageContentType.h */, + 761BADCDC5C85480E0874AFBB2942636 /* NSData+ImageContentType.m */, + 6DBB04E724F34A9D1479A79E80A103BD /* NSImage+WebCache.h */, + A0AA6E5AA0CD867DA5D58480481D4757 /* NSImage+WebCache.m */, + DDC03114642C8E97B2E2B71083E39DD7 /* SDAnimatedImageRep.h */, + D45AEC51C331068BF8F91EC62E269E34 /* SDAnimatedImageRep.m */, + D83B0866070296738FD4D149C351D3F4 /* SDImageCache.h */, + CCDD2073DC68F4657F8827974E7195E8 /* SDImageCache.m */, + 491FDAC15D030494B2E90C0E7ECD4606 /* SDImageCacheConfig.h */, + 498EDBAACE5DE1CD7FA5686161FC3D1B /* SDImageCacheConfig.m */, + 6A0ED897A408DC64C9F9EBBD2B345259 /* SDWebImageCoder.h */, + 2D571EDF6DAFF89F5D7D724C798ACA52 /* SDWebImageCoder.m */, + B776BCCB43F76B9381253B539FF8DD76 /* SDWebImageCoderHelper.h */, + B15B5AAC0FD56E3C9B64DEA13CC0B78A /* SDWebImageCoderHelper.m */, + 627CC28A277027BC84DA4450949AB621 /* SDWebImageCodersManager.h */, + EDF1B19294C351EFE07E56671326ACAA /* SDWebImageCodersManager.m */, + 1D7574C0137F71D841B3B29511B2D2CC /* SDWebImageCompat.h */, + 1D1D214B9646E826FFB79151C1E4AEED /* SDWebImageCompat.m */, + FD0354FF9B699D0B4CBDC5673A6F8820 /* SDWebImageDownloader.h */, + E8936040259E1F97AE2DEF10224B5534 /* SDWebImageDownloader.m */, + A35BE9C148711E2F6927929594430A22 /* SDWebImageDownloaderOperation.h */, + 0D533380BAF865E4DD12ECDCC1F70A71 /* SDWebImageDownloaderOperation.m */, + 429BBF7DE00800B81D05792F86FE8BF7 /* SDWebImageFrame.h */, + E15B9A8758A628754E7D4475A72BAF46 /* SDWebImageFrame.m */, + 5B79BCA12C47D1D04E08FB0856EB85E6 /* SDWebImageGIFCoder.h */, + E303AAE0435E68D727842CA27F9CB4CA /* SDWebImageGIFCoder.m */, + DEF89F8209C2188308C1DC4BF83C7F0F /* SDWebImageImageIOCoder.h */, + C1D55B686CEBC59C1D94F10D904D40EF /* SDWebImageImageIOCoder.m */, + 6ECAFA212B76953320CE51185061271A /* SDWebImageManager.h */, + C285C3224707D9DF3318E4241B75C363 /* SDWebImageManager.m */, + 4739D9161301F773FE924DD388597878 /* SDWebImageOperation.h */, + 2FC74F89B5418AC6B857ACCC8BBAE066 /* SDWebImagePrefetcher.h */, + 68C0DAC2C3835C74689AECAA52F97EE7 /* SDWebImagePrefetcher.m */, + F369938FDD258555E16F6A40B2DD3ECA /* SDWebImageTransition.h */, + 9FC3F814031C92E9B2510DD531E8B05B /* SDWebImageTransition.m */, + 76110038AE081824A5F2F8959E90236C /* UIButton+WebCache.h */, + 1E2C98C782E8F6059C1006DE0D8CE0FC /* UIButton+WebCache.m */, + 4F13266EA0097BE1406D5ABB0463653B /* UIImage+ForceDecode.h */, + 50B7A7D6E53F8A4F1F19D65C5D95F0EA /* UIImage+ForceDecode.m */, + A1C5D9DBB5B3C7F777C882730706CFDB /* UIImage+GIF.h */, + C78CF3840046AFBD425B5BA2D88F7679 /* UIImage+GIF.m */, + 59D1E4B8AF2C6DE086DB98D81CCEB98D /* UIImage+MultiFormat.h */, + DBD82385CB8D648D502368D238C5676C /* UIImage+MultiFormat.m */, + F730FB5877FC4368574FC606BD31A23C /* UIImageView+HighlightedWebCache.h */, + 3522EF35471625EEE334EA0BECBE05AF /* UIImageView+HighlightedWebCache.m */, + 60E02AE5115746A5FBB1B36BD493AD46 /* UIImageView+WebCache.h */, + 657F9206B40BE62B2B5717ECB6510232 /* UIImageView+WebCache.m */, + 2033803E751374DB12FBB0A56BF83AE0 /* UIView+WebCache.h */, + F6F42AB2D1C48C343FEEB8CAF7F3DEB4 /* UIView+WebCache.m */, + D4170B88766C08CD83F49DF4FF6FD435 /* UIView+WebCacheOperation.h */, + 2E227A286033EA0DAA3416102BEEA9BA /* UIView+WebCacheOperation.m */, + ); + name = Core; + sourceTree = ""; + }; + 2C2461FEA65A374929E7D3CB48413426 /* Frameworks */ = { isa = PBXGroup; children = ( - 81AA91C8235C98BDA7F0E4BA67A22A05 /* libWeiboSDK.a */, + FB21FC2E31A0F104075833D4EDFED169 /* Fabric.framework */, ); name = Frameworks; sourceTree = ""; @@ -1003,379 +1111,520 @@ path = "Example/new/Pods/Target Support Files/PLPlayerKit"; sourceTree = ""; }; - 3F7EEF6B93F48D4ECBF1AE421E60CE3C /* Pods */ = { + 4958EEDB3617E4012F6F32C93988039E /* Support Files */ = { isa = PBXGroup; children = ( - E448F9F754D018E0FF5FA7D7B0B83E27 /* BlocksKit */, - F8F22C162E6650E323CB78B73329555C /* Bugsnag */, - 535BE196C20DFF7D0B81C3BB1B318A5F /* Crashlytics */, - 13DAADC01725D8E15F7ABEC5F65714E6 /* Fabric */, - CD6413A31495CE3B7BC5D333B18948C2 /* JGProgressHUD */, - B397A0342B68FC1178E184EF0FF0ABC0 /* Masonry */, - 9574DC624551CE56A3A524FE1B026033 /* MMMaterialDesignSpinner */, - 573E256C27BD8862C4698B8C68FE6C7C /* SDWebImage */, - D87F4BD3ED71551862D7A724F9859FD5 /* WeiboSDK */, + A802AE814BA1625230387F76E2A0ACAD /* Bugsnag-dummy.m */, + EEC9FDBD20688A8BFE10CAFF9A85DDFC /* Bugsnag-prefix.pch */, + 5D4459B12A285FF72F4E346D10C2CF84 /* Bugsnag.debug.xcconfig */, + 6B9BCFCDF61D18089AB6A8F19CE4623D /* Bugsnag.release.xcconfig */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/Bugsnag"; sourceTree = ""; }; - 3FD530C8667CBF92EE681ACB24CE2721 /* Support Files */ = { + 5A0D538483D0A5A814BCF454A7A3A55F /* Support Files */ = { isa = PBXGroup; children = ( - 4C69A6933F91BFEA07B3E4D7EC647932 /* BlocksKit-dummy.m */, - ED6C7EA141AB8B435FA0ADFE243E5FA0 /* BlocksKit-prefix.pch */, - 9BAA6E0CA29E109AF54AD7E80A8BFF1B /* BlocksKit.debug.xcconfig */, - D03EB06A4B764716299A31A2CCD7B41D /* BlocksKit.release.xcconfig */, + 6E98E1045DE756DC9CA9B42C7451A390 /* Fabric.debug.xcconfig */, + B7E2DD1B1376C42C9B0796AFC2C97134 /* Fabric.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/BlocksKit"; + path = "../Target Support Files/Fabric"; sourceTree = ""; }; - 45AC528DA63467D2D3EB06EC0565A3C3 /* Frameworks */ = { + 5F7637A84DFDFA4CB59C768410ED6C3D /* Pod */ = { isa = PBXGroup; children = ( - 294D83DE77971EDA00CA5A2C9CEB2446 /* Fabric.framework */, + 56592058A32B14B7C10DF80396204F05 /* PLPlayerKit.podspec */, ); - name = Frameworks; + name = Pod; sourceTree = ""; }; - 535BE196C20DFF7D0B81C3BB1B318A5F /* Crashlytics */ = { + 612623BEC6B35AC5838D9521CD007031 /* UIKit */ = { isa = PBXGroup; children = ( - 5D7E25D0FF4DB36295818447207E159B /* ANSCompatibility.h */, - 60A1ADEB5646A4D517CE1C4972C20B61 /* Answers.h */, - 64783F7E46C5A8A6CFFCDF4AD3C44882 /* CLSAttributes.h */, - 4BEBCB58891695A28A60AD6904F19A3F /* CLSLogging.h */, - BC9A79F19E5FF61A798896F17DEE22E9 /* CLSReport.h */, - 5855CD5C12B6380C21D5A07D36A409FD /* CLSStackFrame.h */, - 05E9C771468A4009403B3376824F2062 /* Crashlytics.h */, - 149D283DF87CB5A8D372C3EE9CAC77AD /* Frameworks */, - 5FE65ABD878466B0CF614FB5944E220A /* Support Files */, + 5C9C1182B98E547BC39492C61F34929D /* BlocksKit+UIKit.h */, + C0A827B8443EDEA3D98209B3C5FE5F49 /* UIActionSheet+BlocksKit.h */, + CEA9011E6E7665E93ADC71515FB8E7BE /* UIActionSheet+BlocksKit.m */, + 828D509B11639C4AD96137B8D281D3D4 /* UIAlertView+BlocksKit.h */, + 080112233C994DA7622A53C4708ED80D /* UIAlertView+BlocksKit.m */, + 60BD4334ABC2F7DE7AC47FF29F44ED13 /* UIBarButtonItem+BlocksKit.h */, + E7E66B99334C2F16F131483BB3F5DCD2 /* UIBarButtonItem+BlocksKit.m */, + 7ECBE8D1CAE4A70199649D699B9704B5 /* UIControl+BlocksKit.h */, + 0CAB92413D236728023363618EF6A1EE /* UIControl+BlocksKit.m */, + 391726B5BAE6D850BF6EDFB3AC131C88 /* UIGestureRecognizer+BlocksKit.h */, + D700CEB29A4D74DD78472D61666C4939 /* UIGestureRecognizer+BlocksKit.m */, + 1984136C0AA72EB3042BA586D567F6EF /* UIImagePickerController+BlocksKit.h */, + 88F6D5EED4194E7A48E19E290246220C /* UIImagePickerController+BlocksKit.m */, + EE3911BD5333A081DA6FE18D848BB49B /* UIPopoverController+BlocksKit.h */, + D42F1F7BD09A5658175583E1F29D2403 /* UIPopoverController+BlocksKit.m */, + EFFF6C09C74C7BD4F7042299E97C0321 /* UITextField+BlocksKit.h */, + 6F8781D1600C6C52B8609B43B0515A9C /* UITextField+BlocksKit.m */, + AF017C5A94CE73B47544650DF6FC4D8E /* UIView+BlocksKit.h */, + 706CA6EF9BD6B439540ABE843A302CBC /* UIView+BlocksKit.m */, + F78B68289E2BE9736EE442989DD68422 /* UIWebView+BlocksKit.h */, + 3A3E836385D9994343FE0E80AB19F57F /* UIWebView+BlocksKit.m */, ); - name = Crashlytics; - path = Crashlytics; + name = UIKit; sourceTree = ""; }; - 5399348968261DE59F4A52AB06935155 /* Support Files */ = { + 614B883BDE899D22EEEBE6E745A65EF4 /* Support Files */ = { isa = PBXGroup; children = ( - 744CB2472B4C2F63A85B51D64B9C4C14 /* Bugsnag-dummy.m */, - 3687B37E94A51F94BDE44651CE7AAA8C /* Bugsnag-prefix.pch */, - 1F5241E0C002955AFA851071B4E58EEE /* Bugsnag.debug.xcconfig */, - F0B161E828663A415322FC8E730218B5 /* Bugsnag.release.xcconfig */, + 72CA1877BCB9D3F656907E74AAA7EAA8 /* JGProgressHUD-dummy.m */, + 78EC915768F238D4D43FF05E9D5165E9 /* JGProgressHUD-prefix.pch */, + A608F819BBF2516D13EFEC9F890FA3DA /* JGProgressHUD.debug.xcconfig */, + C3778B965B1FBD46B8E08BCB11306ED0 /* JGProgressHUD.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Bugsnag"; + path = "../Target Support Files/JGProgressHUD"; sourceTree = ""; }; - 573E256C27BD8862C4698B8C68FE6C7C /* SDWebImage */ = { + 719C1C859827E9832051BA5F1A1C0E40 /* Support Files */ = { isa = PBXGroup; children = ( - CFED4F834BB6A77ECE87A2A98FF3D357 /* Core */, - F25C880F913EDD21E88F52667A5EB767 /* Support Files */, + D306915379A95F29AC586F0827664757 /* MMMaterialDesignSpinner-dummy.m */, + 0009A0CD2C104DDCB17F61323FD76458 /* MMMaterialDesignSpinner-prefix.pch */, + FACC08B90B3E576C3058A986D8D8FB7F /* MMMaterialDesignSpinner.debug.xcconfig */, + D7E2DA1B3E8775161A74CB487AB40ABB /* MMMaterialDesignSpinner.release.xcconfig */, ); - name = SDWebImage; - path = SDWebImage; + name = "Support Files"; + path = "../Target Support Files/MMMaterialDesignSpinner"; sourceTree = ""; }; - 5F7637A84DFDFA4CB59C768410ED6C3D /* Pod */ = { + 769B5EE50F68A6B11E8536D8E2ED7E70 /* Bugsnag */ = { isa = PBXGroup; children = ( - 56592058A32B14B7C10DF80396204F05 /* PLPlayerKit.podspec */, + 44D17C8EEE3DA52CBD7B944411A01A30 /* BSG_KSArchSpecific.h */, + A68CBDE8A9BB1C6A821CA0CB1980A6E9 /* BSG_KSBacktrace.c */, + B534CCFDC60AC6FECF92380A7A650681 /* BSG_KSBacktrace.h */, + 1A80ACF0E51B7332AC7293B8E1D89E9F /* BSG_KSBacktrace_Private.h */, + A6DBFB9182568D110B9ABB4C92CE15AD /* BSG_KSCrash.h */, + CE84053237CEB82AF02F71BAA7B32BBF /* BSG_KSCrash.m */, + BEFA28F57068F65A8213E5977F749370 /* BSG_KSCrashAdvanced.h */, + 3BEB4CBF8743AC5683339D5FF6E65481 /* BSG_KSCrashC.c */, + B8C6E92113EC9D0840DF2C0891BB79A1 /* BSG_KSCrashC.h */, + 40B4286B260C47BD09629322E3EF0DA5 /* BSG_KSCrashCallCompletion.h */, + 2EBEBFFAA31F2C24709BCF873A5F9976 /* BSG_KSCrashCallCompletion.m */, + 90AA523DADBC730B1935E86F91F95992 /* BSG_KSCrashContext.h */, + 70740CD6AB1369312EE743251166C428 /* BSG_KSCrashDoctor.h */, + A390685531E9B45A9A3C386566BDFDF4 /* BSG_KSCrashDoctor.m */, + A245B93E3CCC682F4979F51E8813B509 /* BSG_KSCrashReport.c */, + B9F6FE99A4945618A12F259329765635 /* BSG_KSCrashReport.h */, + B1C7D6601450ECF3572192F42AB688A4 /* BSG_KSCrashReportFields.h */, + 90F92F2E64574252675F8EA5CEC1DACE /* BSG_KSCrashReportFilter.h */, + 68B85E7F7A181D9EAFB0F066D3400601 /* BSG_KSCrashReportFilterCompletion.h */, + 1AA05598B5DB86EA1C67235DB5B97AC6 /* BSG_KSCrashReportStore.h */, + D2A26E767099DE44C06F1217BA6DDCE6 /* BSG_KSCrashReportStore.m */, + 08E052CA9DE91D9FAE441A0F398274DD /* BSG_KSCrashReportVersion.h */, + 093B98AA77F7B6455787637F9A607ECB /* BSG_KSCrashReportWriter.h */, + ECECCE7A8AEB033B5E981BD47FE4B0B6 /* BSG_KSCrashSentry.c */, + C070AE4A38678CD2BD3713B279893BD1 /* BSG_KSCrashSentry.h */, + FCFB4C9AD71C699BFF512937D3E6398A /* BSG_KSCrashSentry_CPPException.h */, + 7602750296879DE5DB95DAB62DC9C031 /* BSG_KSCrashSentry_CPPException.mm */, + 9234AEEF1F4B298EBD3214451FCD9C55 /* BSG_KSCrashSentry_Deadlock.h */, + 9502079BC7A27CE9BD7204F795928E71 /* BSG_KSCrashSentry_Deadlock.m */, + 4A06517392907A86C3EE90F936A09D92 /* BSG_KSCrashSentry_MachException.c */, + 7B938CD4F5F78371ABE3251D50F25191 /* BSG_KSCrashSentry_MachException.h */, + 8E25D8C60688E7679E980A26BD500FD8 /* BSG_KSCrashSentry_NSException.h */, + AC1F052E6E8EFF18388240351B7C77CF /* BSG_KSCrashSentry_NSException.m */, + 18D17A0EC0DC04303EE911732B8CC7DC /* BSG_KSCrashSentry_Private.h */, + E55B4E0FFF90B98A4C48A2D9C5D3475E /* BSG_KSCrashSentry_Signal.c */, + 15AD3D28C5E974EC02C4F08F17E5E3F6 /* BSG_KSCrashSentry_Signal.h */, + 264C85EECE9291CBB3927775C2528E7A /* BSG_KSCrashSentry_User.c */, + 78A869B31827C2FDB9034657E9A2BDD7 /* BSG_KSCrashSentry_User.h */, + C017EBA7228E2886288F2ED0F18E2E1C /* BSG_KSCrashState.c */, + B3E4A54AB05AB734CF12A75359313AD6 /* BSG_KSCrashState.h */, + 702D3F0C8744A5A840EA4C3D0B34998D /* BSG_KSCrashType.c */, + 7131170949CCD2723BBFE52A31EE6828 /* BSG_KSCrashType.h */, + EB5BD9F7DFF1FCC8E9A9A160EF3FD0B1 /* BSG_KSDynamicLinker.c */, + 518A20E7BD85BA89C8AFE31BCD7A4C9F /* BSG_KSDynamicLinker.h */, + 889370F77F8B15A29B76579F97B58F5F /* BSG_KSFileUtils.c */, + 6B105A06E22A1F1C48C6FE432AB172A4 /* BSG_KSFileUtils.h */, + CDE4E747676BA40D8D5ECADBF184D4C6 /* BSG_KSJSONCodec.c */, + 66DE3E4D31868E477D7B013AA32BFE1E /* BSG_KSJSONCodec.h */, + C28BDBC70D607E2C6698288A1F553A05 /* BSG_KSJSONCodecObjC.h */, + 9E607AC81443C3871BF30387BA78A65D /* BSG_KSJSONCodecObjC.m */, + E12D6342943485BCFE44346EF146794A /* BSG_KSLogger.h */, + 45E7408AEAD159BE8EE934377888DC7E /* BSG_KSLogger.m */, + E51FE7D15007376E6E9902D68C512C3D /* BSG_KSMach.c */, + A72C164AA781070E2EDD44DB155B4A5E /* BSG_KSMach.h */, + 237738AF826FF0B408FB33D2B5523CD8 /* BSG_KSMach_Arm.c */, + 3340BF20CBC468CCA44285ACED31D08B /* BSG_KSMach_Arm64.c */, + E61F55CC8CA6FE0FDED726C1ABDB0806 /* BSG_KSMach_x86_32.c */, + E21D650B293C368DFDE5C5742BB906FC /* BSG_KSMach_x86_64.c */, + 4453A62DCC9DF0699B04136617A42E77 /* BSG_KSMachApple.h */, + 58D07E1F61F7CAF91FC6FC107ED8DBCB /* BSG_KSObjC.c */, + 660AB4E67D152D8A49B1E3D0E28E4836 /* BSG_KSObjC.h */, + 62AF33B89DCD1544E7A42A1A80DDBB48 /* BSG_KSObjCApple.h */, + 2DB87D6FCFB9D40189C43B151B78890E /* BSG_KSSafeCollections.h */, + FEBFE81A72AD4FFCBA4BC6582DD63E33 /* BSG_KSSafeCollections.m */, + BFC4A17844912DA0FC3DA02D2028D94A /* BSG_KSSignalInfo.c */, + 73D48B6C182BB95F6DBD2D70F5B9D72B /* BSG_KSSignalInfo.h */, + 74B564E31AC4C4CF2CC5D6E17959499C /* BSG_KSSingleton.h */, + 7E42C56F584D9AE06DBD39CF0E26F3B8 /* BSG_KSString.c */, + BE945BD0D988AA017ADA941D9B113173 /* BSG_KSString.h */, + 27EEABC91AC392A764FD525F72791B12 /* BSG_KSSysCtl.c */, + 85D39DB82BE6449173CA8CBDB7EE0A26 /* BSG_KSSysCtl.h */, + 12C40976B25BCEAE16707EC484BB8FA9 /* BSG_KSSystemCapabilities.h */, + B701E4C215A45E611AE0E7A3F14A71A3 /* BSG_KSSystemInfo.h */, + B381AC685B39599CCE7895E7CC06B3C1 /* BSG_KSSystemInfo.m */, + 2FD58B7B103307E352A5B9723463CF48 /* BSG_KSSystemInfoC.h */, + 32BCA03F2A38924344C68A82C03F4C98 /* BSG_KSZombie.c */, + CED3BC22EE9470EA8DF490F7CA84DDAB /* BSG_KSZombie.h */, + B006CAC860CE89318AE88CE9D8F6847D /* BSG_RFC3339DateTool.h */, + E7383DED404B17BDC3EBEB1F74E20AF3 /* BSG_RFC3339DateTool.m */, + E8987FC72C678A4622139EDEFCD04B59 /* BSGConnectivity.h */, + 63A7A6FFFFAECEAF4CC374CA2E77CE77 /* BSGConnectivity.m */, + 80D66176F5D1BC5B1A8126FFB12F3846 /* BSGSerialization.h */, + 74D73602CED8DA70A2CDE67B1FE03E39 /* BSGSerialization.m */, + C80389EE454FC414741DE5DF7ACFE399 /* Bugsnag.h */, + B030750C003187CAF16903C4BA2F68EE /* Bugsnag.m */, + 229D726EC19059F5922A52EB5766DA36 /* BugsnagApiClient.h */, + C48CAB39889834FC39B9D5DA17DB9921 /* BugsnagApiClient.m */, + 1DF624E1511978793A6054936D583AD0 /* BugsnagBreadcrumb.h */, + 8CBF561F54F68721F28E04E6E6DEB1AE /* BugsnagBreadcrumb.m */, + 80AFA5752B879E26AEA62D6B2858FBE5 /* BugsnagCollections.h */, + 40B648C49DDD0D8E1D5AFCC5A2B431CB /* BugsnagCollections.m */, + 4C6592BA7755E26EEBD059D798B879C2 /* BugsnagConfiguration.h */, + 9C8087D2472F7C286AFE1E8283E0BD5F /* BugsnagConfiguration.m */, + 82D82860579B2270941D46AFE1864AD2 /* BugsnagCrashReport.h */, + FD54666F2615F82109BCC40C1B5ECDCE /* BugsnagCrashReport.m */, + 95AFE15B5E1792D7BAC6AED0D4FB70A3 /* BugsnagCrashSentry.h */, + 0189D0D53D45B456DFFF31419D1626E3 /* BugsnagCrashSentry.m */, + E0D0BC7B294B909F20535AF168760001 /* BugsnagErrorReportApiClient.h */, + E426EE515BD51CC86E9CFCB012D95CB4 /* BugsnagErrorReportApiClient.m */, + FB465335239F059238B783BA68A255BD /* BugsnagFileStore.h */, + E20D96B07EFA4E10569D1F2D33327FB0 /* BugsnagFileStore.m */, + 5384A949F5F34DB15A701751798AA00A /* BugsnagHandledState.h */, + BF1CD3DF18A7FE3D487DD13BE60FE178 /* BugsnagHandledState.m */, + 9F9F1B8F04BCFDBDA3EC8964F314D41A /* BugsnagKeys.h */, + 3CB90D44BA44BE285FB808F66671C882 /* BugsnagKSCrashSysInfoParser.h */, + 8588AD307BEEC3BDCB70CB9631EC2B08 /* BugsnagKSCrashSysInfoParser.m */, + AD50D1481660D097CD7B38A309703351 /* BugsnagLogger.h */, + 1AE1F97AB05865E43EC2A6E2D0B4EC22 /* BugsnagMetaData.h */, + EED210C0F440388FE74FC31665B17DA6 /* BugsnagMetaData.m */, + D0FEE1B7CA43D49A02E371FEECBCBDB2 /* BugsnagNotifier.h */, + DBC45236BB9BFEC1E835E9FC38B19FEB /* BugsnagNotifier.m */, + 3E2933F5751D9C4CE53673B1778A9524 /* BugsnagSession.h */, + 34CB3E0E1F4D5776457623C19D44EE11 /* BugsnagSession.m */, + 3F7D61DB914C4D5FF4C13D8057642994 /* BugsnagSessionFileStore.h */, + 592DE20ABCF5688EEA03086FC88D26A5 /* BugsnagSessionFileStore.m */, + 5486ED85487C767A072A13CAF2697FF7 /* BugsnagSessionTracker.h */, + EDDD9447A81A79B1AD74E1BF15EDEDB5 /* BugsnagSessionTracker.m */, + C1C83B260155E2B2A2DB819E3892C0F5 /* BugsnagSessionTrackingApiClient.h */, + 8E45C231EE69558378902C2701359DFF /* BugsnagSessionTrackingApiClient.m */, + 3BA8EC563822E9BA7CE382F3F9A4E325 /* BugsnagSessionTrackingPayload.h */, + C214DDE2C24918F8CFE813BA865DDB9D /* BugsnagSessionTrackingPayload.m */, + 176A66C6CBC6845C997E9E7617886C97 /* BugsnagSink.h */, + 83A0C9D91AADACCB0F7BC5CD5DAC32D7 /* BugsnagSink.m */, + 15E6ABB88573AB816E853CB38D8F967D /* BugsnagUser.h */, + 545A7BC505467EFD732C9FE39DF03EFC /* BugsnagUser.m */, + 57B3B54B5D0EC2E7BD3A7CC4C5879106 /* NSDictionary+BSG_Merge.h */, + 6120E88AF3F6A89FC4A2819A63D7CCDB /* NSDictionary+BSG_Merge.m */, + 1581E03529A6D917C47A559E471B10A6 /* NSError+BSG_SimpleConstructor.h */, + BE75B90B3452C4C80DFFB271A6C44DA6 /* NSError+BSG_SimpleConstructor.m */, + 4958EEDB3617E4012F6F32C93988039E /* Support Files */, ); - name = Pod; + name = Bugsnag; + path = Bugsnag; sourceTree = ""; }; - 5FE65ABD878466B0CF614FB5944E220A /* Support Files */ = { + 78C66DC7A6EB32B856B5D46F0F6A29D4 /* Core */ = { isa = PBXGroup; children = ( - 09DED3E0F18DF6E7FE74FA315C904F27 /* Crashlytics.debug.xcconfig */, - 184786EA9ECBAD604F4AE579CC8DA11E /* Crashlytics.release.xcconfig */, + 8C65A5A3BCA285CD434E1F167DD19E7C /* BKMacros.h */, + 63EA53BB29C1CA5EAFDBFC7F7EEB7617 /* BlocksKit.h */, + 4DFCA4B9AC445EE870C3E88672AFDD13 /* NSArray+BlocksKit.h */, + 5A20F5514583B5643E8783092763FE6F /* NSArray+BlocksKit.m */, + E48F09C133A5B7E26DDC2221149ACDC5 /* NSDictionary+BlocksKit.h */, + B2AA00D6CBB2BA4E37903C74AA5F6209 /* NSDictionary+BlocksKit.m */, + B0E27C85C973085C2D66D747A927D631 /* NSIndexSet+BlocksKit.h */, + 97C1824C50646ACE38FE44CCBD533161 /* NSIndexSet+BlocksKit.m */, + 1CB5EC40831F52C87F693F3EE291A99C /* NSInvocation+BlocksKit.h */, + 3D07F85CE9F8B732BA0F59759BE1223F /* NSInvocation+BlocksKit.m */, + A155E41C802F6DF86EF001BDF119458B /* NSMutableArray+BlocksKit.h */, + 41B80BAE170CB1AF103649F4985767FD /* NSMutableArray+BlocksKit.m */, + FDE9369E09C5959C144447B9335099DD /* NSMutableDictionary+BlocksKit.h */, + A0AEDADE49BF6D3220227CFC3DD0A9F4 /* NSMutableDictionary+BlocksKit.m */, + 8088403C2E61483A335B5B99EE389CE1 /* NSMutableIndexSet+BlocksKit.h */, + DCA32FC3EF84D065EC78E506A8786DD2 /* NSMutableIndexSet+BlocksKit.m */, + DB40143031DEDEC49BB4BDD26BF604AA /* NSMutableOrderedSet+BlocksKit.h */, + 8396C8305B6B863513A5428F058E4EA5 /* NSMutableOrderedSet+BlocksKit.m */, + 614F08D75872C2CC8B5346839AF37A9E /* NSMutableSet+BlocksKit.h */, + 502D837830CE0A1BB3E476AC469AF187 /* NSMutableSet+BlocksKit.m */, + 84F4B614792EC501B17939EE37961177 /* NSObject+BKAssociatedObjects.h */, + 5E8BD95EC20AB9D09EF39DDBFE63301E /* NSObject+BKAssociatedObjects.m */, + 6BA6A6CA99DA297062461F52F2FAA144 /* NSObject+BKBlockExecution.h */, + 31DD26DB680BF0B67905FACBE3D147CA /* NSObject+BKBlockExecution.m */, + 6E0D86E628BB8CD8547F74671E4CEB0C /* NSObject+BKBlockObservation.h */, + 5EFD9D6737FB598AC439024F3037E588 /* NSObject+BKBlockObservation.m */, + EC0167076D8B37548F9D02F2695EC87D /* NSOrderedSet+BlocksKit.h */, + 0BE6665FA6687575478E9F2D887AD706 /* NSOrderedSet+BlocksKit.m */, + FC91F12171EC17B8D586555694981613 /* NSSet+BlocksKit.h */, + C17A0A52653CBD01E6B87D07BE14FCF1 /* NSSet+BlocksKit.m */, + 79194EEF3570698C96B21C34C841415D /* NSTimer+BlocksKit.h */, + 37828E6040B208FED57231FBBF01B440 /* NSTimer+BlocksKit.m */, ); - name = "Support Files"; - path = "../Target Support Files/Crashlytics"; + name = Core; sourceTree = ""; }; - 88647399ACFF0D99B514D50BDD8CE8D7 /* Support Files */ = { + 80FDC1E21A6AB6B2F0059C8ED48C00BF /* Support Files */ = { isa = PBXGroup; children = ( - 9343A1140E00EAC7150452A972B67438 /* Masonry-dummy.m */, - BFAA3F23948B2D4A538D8D926B7E36E2 /* Masonry-prefix.pch */, - 4D2BA0DD2586DFB9B22762A8DA0CF877 /* Masonry.debug.xcconfig */, - A03648EDA932A07C6D110CBB704350C0 /* Masonry.release.xcconfig */, + 133B1F1CE9BC07E7CB0FE18638CD33C4 /* HappyDNS-dummy.m */, + 332998AD30F6C9203F0A44EC0E171BAE /* HappyDNS-prefix.pch */, + B05BAFC886498B61737E74D472347D8B /* HappyDNS.debug.xcconfig */, + 37E3F69DAAADC740030A5924ABF51FFF /* HappyDNS.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Masonry"; + path = "../Target Support Files/HappyDNS"; sourceTree = ""; }; - 946F33674BDE0EE317B0FCFE13C49ED0 /* UIKit */ = { + 824301D78AA32C54F945D25B468EFFB4 /* Fabric */ = { isa = PBXGroup; children = ( - 066CA7FA8AD42002E9592E921977A135 /* BlocksKit+UIKit.h */, - 361640A52CD61E607F4A9CC05AFCAEB5 /* UIActionSheet+BlocksKit.h */, - E6FC3BF20679DFB9B1A52566CC44D9F4 /* UIActionSheet+BlocksKit.m */, - 8885DAE2EECD4B4F1C6C9E9DD56BA0FE /* UIAlertView+BlocksKit.h */, - 25C77CDBBFD12BA7DFB57A8A0C58FA2C /* UIAlertView+BlocksKit.m */, - C4D366DA09746024C56C9452299856EF /* UIBarButtonItem+BlocksKit.h */, - 7CAEC40467264D1A4CA3BB6EB2ED95D8 /* UIBarButtonItem+BlocksKit.m */, - 45852088D447F682C7D054EF02ADA491 /* UIControl+BlocksKit.h */, - 4040CB36277D4F59DF8CBB188B6B7A2F /* UIControl+BlocksKit.m */, - C59BB7A88763C04B09D88D2C32691691 /* UIGestureRecognizer+BlocksKit.h */, - FDC760D35AE1912FE482EC2E1FD6DC9B /* UIGestureRecognizer+BlocksKit.m */, - A8AD87E8E2D2DE9BF6EC1276FB694306 /* UIImagePickerController+BlocksKit.h */, - 6EBF820CE674E680BB20063F53012098 /* UIImagePickerController+BlocksKit.m */, - 50754BF7A639707689AB34ACB6DA44C3 /* UIPopoverController+BlocksKit.h */, - E207AD9A89A0BE27F7E2658D50A3105C /* UIPopoverController+BlocksKit.m */, - DDB4F8F66D53D85949BB4B7B79306C93 /* UITextField+BlocksKit.h */, - C18D6151FA9E60C1690B4AF063C5950F /* UITextField+BlocksKit.m */, - E62EC28A8EC65CDE7FB2CD0171A2C220 /* UIView+BlocksKit.h */, - CF79325B4F57DB32357A1D8102A7F33F /* UIView+BlocksKit.m */, - 4AEF6B5F64C9F6FB6B145C9892762FC2 /* UIWebView+BlocksKit.h */, - 14B7C90729F7C37896E4326397D97F7E /* UIWebView+BlocksKit.m */, + 2C2461FEA65A374929E7D3CB48413426 /* Frameworks */, + 5A0D538483D0A5A814BCF454A7A3A55F /* Support Files */, ); - name = UIKit; + name = Fabric; + path = Fabric; sourceTree = ""; }; - 9574DC624551CE56A3A524FE1B026033 /* MMMaterialDesignSpinner */ = { + 90ECFD4611A39DC8D9D925ABF3D093AA /* Support Files */ = { isa = PBXGroup; children = ( - D7869F5E2BC8E54C22DE227F5214ECA2 /* ActivityTracking.h */, - AD65D39E8C2C7FB7ED0F8CB04348C23E /* MMMaterialDesignSpinner.h */, - 57E44B489CFFCB537D9A4327F02482E8 /* MMMaterialDesignSpinner.m */, - 0E03B0485B3641CE731DDB131239B0AC /* UIRefreshControl+MaterialDesignSpinner.h */, - FE17726552693AF2B2C431CE1350F818 /* Support Files */, + 547DAE1B095DDF510078AEE8E67383F3 /* BlocksKit-dummy.m */, + E4851F9035CEF12026D50BEA2F6179F0 /* BlocksKit-prefix.pch */, + 4CE9090F75ECCC26074FD48BC578794B /* BlocksKit.debug.xcconfig */, + 0B474BC1F42C23E47A3B6CE3AD6AC53B /* BlocksKit.release.xcconfig */, ); - name = MMMaterialDesignSpinner; - path = MMMaterialDesignSpinner; + name = "Support Files"; + path = "../Target Support Files/BlocksKit"; sourceTree = ""; }; - A756A178DC2701CC4AA94C0E7ECEED4D /* Resources */ = { + 91E84E80B19BED5C8179F963F63AA6E1 /* Resources */ = { isa = PBXGroup; children = ( - 3B0CBA0CE56C309AAC06F277ED0F339E /* WeiboSDK.bundle */, + 55D482A1600D6F5C4E97AEBFCC38F25A /* jg_hud_error.png */, + 8717B328F1673F390D2B6CD2BDA221D1 /* jg_hud_error@2x.png */, + 34ED0E3B88E3AF280DB4AB101406251A /* jg_hud_error@3x.png */, + 65234627F6CBAB11173C2236578089F3 /* jg_hud_success.png */, + 3B3D34482FBE66915CE12678C374919B /* jg_hud_success@2x.png */, + 7C642A7EE90EBF0666A4EADFA96DAC34 /* jg_hud_success@3x.png */, ); name = Resources; sourceTree = ""; }; - AC2623597F1AECE6F1787CFD3FE8D2FB /* Support Files */ = { + A223EBADC2CF8362E4884B37A41262B7 /* Pods */ = { + isa = PBXGroup; + children = ( + A85D6950A38EBCB5A6BB43C7D9025B08 /* BlocksKit */, + 769B5EE50F68A6B11E8536D8E2ED7E70 /* Bugsnag */, + 0A33A8674A2930463011E7AFAE4292F5 /* Crashlytics */, + 824301D78AA32C54F945D25B468EFFB4 /* Fabric */, + AA979503EC5ACB5CAB4C5F86753B987D /* HappyDNS */, + CD7425D6C91DEB0E318B2A561D705A1F /* JGProgressHUD */, + DEE79D4637D435D2A99AAEE81D8DC0EB /* Masonry */, + AE9BF391B5E86A4EF901B472A519DC7D /* MMMaterialDesignSpinner */, + CA6FCB0D1DAFD96E9DFED4FF928DE2A0 /* SDWebImage */, + E413D2F5EAB5070D977DC56C437F2EA4 /* WeiboSDK */, + ); + name = Pods; + sourceTree = ""; + }; + A8226B7E99F39DCAFC5A6C7560A914E3 /* Support Files */ = { isa = PBXGroup; children = ( - D5DC846B2979A4B275943C7BC1F887CF /* Fabric.debug.xcconfig */, - 4DA0497AB46139323DDC4D38E9AA7370 /* Fabric.release.xcconfig */, + 315A22C5C5F2241428420C4D12BAD860 /* SDWebImage-dummy.m */, + 6E4C89DE35AF4BCCDADB88700B9D4B86 /* SDWebImage-prefix.pch */, + F34FAC61BDD922D3E93DA14D6968AD89 /* SDWebImage.debug.xcconfig */, + 88D0841F433ED344339107D1F07E8CE1 /* SDWebImage.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Fabric"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - B151A40795A023B31776A25F2537E535 /* Products */ = { + A85D6950A38EBCB5A6BB43C7D9025B08 /* BlocksKit */ = { isa = PBXGroup; children = ( - 50BFFE42053E6D006359F73E08370CE1 /* JGProgressHUD.bundle */, - 6F70BF603CE98579EE97E286801E741E /* libBlocksKit.a */, - AFCFF05430D46AE44C4B2B0AC7D9715A /* libBugsnag.a */, - 7FBAFAA66E9C7401884F439AE8BC662C /* libJGProgressHUD.a */, - 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */, - 34B8983D85D3A2CA9404C5DE373B20BF /* libMMMaterialDesignSpinner.a */, - 872296C6BF98514FED139D225E897B3B /* libPods-NiuPlayer.a */, - B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, + 78C66DC7A6EB32B856B5D46F0F6A29D4 /* Core */, + B09FCA97D0CAB6480C38C2820691AA0B /* DynamicDelegate */, + FE9C14561E2A8442F7FA74163290B79A /* MessageUI */, + 90ECFD4611A39DC8D9D925ABF3D093AA /* Support Files */, + 612623BEC6B35AC5838D9521CD007031 /* UIKit */, ); - name = Products; + name = BlocksKit; + path = BlocksKit; + sourceTree = ""; + }; + AA979503EC5ACB5CAB4C5F86753B987D /* HappyDNS */ = { + isa = PBXGroup; + children = ( + 844483D93AEF817850E68678A76C2C76 /* HappyDNS.h */, + 5DFA8FEDA43D51B4B5A33A508EBBB8CC /* QNAssessment.h */, + EF62B00BE1E56259574C133808153FCF /* QNAssessment.m */, + A8509B0AEF4E2FCF05B36C320F213143 /* QNDes.h */, + BC43A331FDEA6709D688459992774989 /* QNDes.m */, + 4AB0256DF1F4F20FDA80A4C8CE01D73B /* QNDnsManager.h */, + 1E3CCE32179393F67375D36A8C000BC0 /* QNDnsManager.m */, + 7CB62CAB2BBDCAD5D13D7701FF2459FB /* QNDnspodEnterprise.h */, + 2421B9B9CB1759A5984BF7D146276A21 /* QNDnspodEnterprise.m */, + 7EC9EA854329AC18C4A67F21063E6E11 /* QNDnspodFree.h */, + E9BF84197D4841FC20DFFE58E2CA1ED7 /* QNDnspodFree.m */, + 47925D87B45F4F360F8D336574DF1B7B /* QNDomain.h */, + 4FD8DD93AB5A283AD969634CCE2FB863 /* QNDomain.m */, + FC435667109B397418161F49C428E1AB /* QNGetAddrInfo.h */, + CE34D6910D448B48E1B6CC5D8827B62B /* QNGetAddrInfo.m */, + AD480ECEA9F608C1A08746845069D557 /* QNHex.h */, + 5C629683C25829F044B97B967CCE2F32 /* QNHex.m */, + 7FF1D231D8ACAF6FA64822EBCED10825 /* QNHijackingDetectWrapper.h */, + 063BD509C758F3BDAD7540AA46400513 /* QNHijackingDetectWrapper.m */, + 4A01901F1577B0EED57E0FDCB0950D6C /* QNHosts.h */, + 40116520A6686684AF06697CDE525661 /* QNHosts.m */, + A9CFBD20E5A7CDC0A31C14E97DECEF5F /* QNIP.h */, + 14624B82A0148DDE32CCB87FC4BA8D98 /* QNIP.m */, + B0FF88E297625329169B21F9C591C818 /* QNIpModel.h */, + FDD208D7703284C73858EDD5D9931DC3 /* QNIpModel.m */, + 61E31D5E8F836FD0E105F33C0DB584F8 /* QNLruCache.h */, + B41DE1FC0D6A97101620F782231257FB /* QNLruCache.m */, + 26B7357A48605CDE300B12B3F3568CE9 /* QNNetworkInfo.h */, + E89E00109FEF478942181AE569B80D5C /* QNNetworkInfo.m */, + 7A91C5E954FCF6B7C915E25FE01C10AB /* QNRecord.h */, + C23DE6C230B1E19AE954E2919A71BEAB /* QNRecord.m */, + B392E48C93883483E4161851FB5E758D /* QNRefresher.h */, + F8D3F67B92C1B32CC2CC78CA07B7AC9A /* QNRefresher.m */, + 58F5098B4F33DD9C0021EA528198DFFF /* QNResolver.h */, + 1FC81B954EE0A5E2FD15180501085A9C /* QNResolver.m */, + E8039A193131FD20BB3A12FCB779202B /* QNResolverDelegate.h */, + DE3020521C87DA3534C5F42006217C46 /* QNResolvUtil.h */, + 9096AB2BD8BAE9301E97ACF6EF3D4628 /* QNResolvUtil.m */, + F96938E629F6ADD86439B864468655E5 /* QNTxtResolver.h */, + C11B919D2AB6A4650D7D4EE4CDCA31BF /* QNTxtResolver.m */, + 80FDC1E21A6AB6B2F0059C8ED48C00BF /* Support Files */, + ); + name = HappyDNS; + path = HappyDNS; sourceTree = ""; }; - B397A0342B68FC1178E184EF0FF0ABC0 /* Masonry */ = { + AE9BF391B5E86A4EF901B472A519DC7D /* MMMaterialDesignSpinner */ = { isa = PBXGroup; children = ( - 2674852B385F35F2A72E789275B15063 /* MASCompositeConstraint.h */, - 659C4FCB9EFC172F8447BB3EFB4C634A /* MASCompositeConstraint.m */, - F9EA2E84C0DDB3337ACDA5DC03FF5B81 /* MASConstraint.h */, - 7B60916FD5CA7B037138444C01E5F8A0 /* MASConstraint.m */, - 24C3C1EFD6FC805355664D10F9412E17 /* MASConstraint+Private.h */, - 5700B6938C928E3A8604BE8A8847ED5F /* MASConstraintMaker.h */, - 5FD0C0677D523EB6AC0B66D92A53C83E /* MASConstraintMaker.m */, - 3D10DFA6F61FDF8542411EDB5AAF9EB1 /* MASLayoutConstraint.h */, - 5BEA006751CA9B17CAAE5833AC73FB5A /* MASLayoutConstraint.m */, - E9632E62CD42560C5B59DB1121398E32 /* Masonry.h */, - 7F4218AD7C419D59009180ACD0649E36 /* MASUtilities.h */, - AC65C7EE911F31493B1BA8173CCB128E /* MASViewAttribute.h */, - 76A128F57BC0ABEA170673B597A5565C /* MASViewAttribute.m */, - 01DF55108356F0DB9F283FBEB6593BFD /* MASViewConstraint.h */, - FFB3DAAA5A4238891EC9CB6690813FFE /* MASViewConstraint.m */, - 308FC67C1D1F2EF16374D965CD8725CB /* NSArray+MASAdditions.h */, - 7619650DC553C4F772B6A1A8CC92B395 /* NSArray+MASAdditions.m */, - BD993F433F196150BB81C9CC4DF2C6ED /* NSArray+MASShorthandAdditions.h */, - 20C7D38BD5B25FDBA05DBAAC63037EEF /* NSLayoutConstraint+MASDebugAdditions.h */, - 01724419BA7F4AAE9F774A3FC1D1BB62 /* NSLayoutConstraint+MASDebugAdditions.m */, - 9E4C81C0A7D50FC98C89DDE886179D3B /* View+MASAdditions.h */, - 4D57DCA001D8D942D25A12BDDE330862 /* View+MASAdditions.m */, - A0A3B516E7CFF745B4322C560FEAF367 /* View+MASShorthandAdditions.h */, - CBA41173AE3E31710EFA768BD0C50719 /* ViewController+MASAdditions.h */, - 410335C79D713F2E3F1151B191457AB1 /* ViewController+MASAdditions.m */, - 88647399ACFF0D99B514D50BDD8CE8D7 /* Support Files */, + F4FE19206F001F7277B948F96685B5D7 /* ActivityTracking.h */, + CBC0BF63A5A9CC32BBC8F0388DA518F3 /* MMMaterialDesignSpinner.h */, + 8F392F42507262D92CE779D914C66670 /* MMMaterialDesignSpinner.m */, + 8B361FECA35090F4B0A607401C5ABF55 /* UIRefreshControl+MaterialDesignSpinner.h */, + 719C1C859827E9832051BA5F1A1C0E40 /* Support Files */, ); - name = Masonry; - path = Masonry; + name = MMMaterialDesignSpinner; + path = MMMaterialDesignSpinner; + sourceTree = ""; + }; + B09FCA97D0CAB6480C38C2820691AA0B /* DynamicDelegate */ = { + isa = PBXGroup; + children = ( + 1B3FA53C5D2065D3FEF519E807B62AEF /* A2BlockInvocation.h */, + CA55862A7AEF4458F880C8915B9C51B5 /* A2BlockInvocation.m */, + BCF931307F012A2053801DEC1FE0DFC6 /* A2DynamicDelegate.h */, + 212B37DC7721120A85A1818E8858A6B6 /* A2DynamicDelegate.m */, + 69B513AA91EAC7F9B3B9F577710722B7 /* NSCache+BlocksKit.h */, + D963CE22ED72456759C9CF4FCB01FA23 /* NSCache+BlocksKit.m */, + DAE7DAF445F4E9598702B8B63A7008DF /* NSObject+A2BlockDelegate.h */, + 39023082C2207E1138A62545ACA55618 /* NSObject+A2BlockDelegate.m */, + 3F689CBF577C9C33DF572CA75233E5B9 /* NSObject+A2DynamicDelegate.h */, + 97E5E63A5A85B28D19BF546C6DEB3B1C /* NSObject+A2DynamicDelegate.m */, + 5458C37B9A38D53C300EA93A6A6D3346 /* NSURLConnection+BlocksKit.h */, + 0E2609621C550044C314FAFC068A9E77 /* NSURLConnection+BlocksKit.m */, + ); + name = DynamicDelegate; sourceTree = ""; }; - B9881DB0D8F3EDA25BDE10FF7B6CE835 /* Resources */ = { + C3EF97F78F13E1FEB8E37C1243125079 /* Resources */ = { isa = PBXGroup; children = ( - 85A43A997C4566505FF13E3E99D7B354 /* jg_hud_error.png */, - 7364A727652C6AF44D00E875AFE2F6D1 /* jg_hud_error@2x.png */, - 9A9684DFBEBE74A98285E6F4B4A4BDE1 /* jg_hud_error@3x.png */, - A111B4A17DA1CAF8537C80860B3F165F /* jg_hud_success.png */, - A703F0E440E407DB4E5924C66EA7111C /* jg_hud_success@2x.png */, - 281CF056D8C65534E11335F7E2B99BA5 /* jg_hud_success@3x.png */, + 2B7A3655C8022CB6F91866B2F3A1260D /* WeiboSDK.bundle */, ); name = Resources; sourceTree = ""; }; - CD6413A31495CE3B7BC5D333B18948C2 /* JGProgressHUD */ = { + C451F75F7531217575E5928D13DA2249 /* Support Files */ = { isa = PBXGroup; children = ( - 09C20AFA26C0EF3730019FC34FD0BB2D /* JGProgressHUD.h */, - 807F88227564F6CBD57628C2D13942BF /* JGProgressHUD.m */, - 653394373F31F43BD900276AD7166569 /* JGProgressHUD-Defines.h */, - C700CB0DE6AC90F84CF4463C3FFE9A28 /* JGProgressHUDAnimation.h */, - FA0F22BF8B9B795C1CE792D06D65245E /* JGProgressHUDAnimation.m */, - 7E0B5348C3A9BAAE822B3A4A70E2E452 /* JGProgressHUDErrorIndicatorView.h */, - E4BFB0AEC2E8617FA8C4EBD49B9909FE /* JGProgressHUDErrorIndicatorView.m */, - 8D5E51CD297D459625363D4EDE79D41A /* JGProgressHUDFadeAnimation.h */, - 48901CE1E0BEF6395F9B14DC096C2E7A /* JGProgressHUDFadeAnimation.m */, - 00DCC18874B128E09D3AC3B0A78AB8B3 /* JGProgressHUDFadeZoomAnimation.h */, - AF9A937E49223BC79D25EC8A1D8727F6 /* JGProgressHUDFadeZoomAnimation.m */, - DDDE926727F8BF3961FB5695D3483585 /* JGProgressHUDImageIndicatorView.h */, - 03DDC18246077DCA728630C48FC74B8E /* JGProgressHUDImageIndicatorView.m */, - DEDFFA159622224E4784009667BA2526 /* JGProgressHUDIndeterminateIndicatorView.h */, - FE2C50ED84E079A500E8469E30136767 /* JGProgressHUDIndeterminateIndicatorView.m */, - C38C982C938DA3CB0AF28C6AB4051AE9 /* JGProgressHUDIndicatorView.h */, - 571B827F6BAAC124E603D6F3B4E6C260 /* JGProgressHUDIndicatorView.m */, - 4F10922A84EECC3EE324979FE3BBB10D /* JGProgressHUDPieIndicatorView.h */, - 63DFA9DD658A2B2CBF3B4C879F4FBDA0 /* JGProgressHUDPieIndicatorView.m */, - 3F3A31497A86443AA3CB021ED086E778 /* JGProgressHUDRingIndicatorView.h */, - 2BE82C9C38BD2462FEBE3EB76A4D3401 /* JGProgressHUDRingIndicatorView.m */, - 789AD784FB77029826933E443930DE7E /* JGProgressHUDShadow.h */, - CEBEBD92E32D2A27A7F2E472587E8BDC /* JGProgressHUDShadow.m */, - 871E58BD844232917608926D8F919C8F /* JGProgressHUDSuccessIndicatorView.h */, - 55A053D973F4E60520815FC2A8B8E915 /* JGProgressHUDSuccessIndicatorView.m */, - B9881DB0D8F3EDA25BDE10FF7B6CE835 /* Resources */, - FCA91652C5AAFA25EF59740B99CBFE59 /* Support Files */, + 714AA9DD9B0F1BCE3D90B268A57043A4 /* Masonry-dummy.m */, + 9A5950DC83CA9EE7004B8D1E3EA35424 /* Masonry-prefix.pch */, + D817009EC2CE35FFD1C2AC77D5EED614 /* Masonry.debug.xcconfig */, + 13A25BF310A9922485F7539D1B301E4B /* Masonry.release.xcconfig */, ); - name = JGProgressHUD; - path = JGProgressHUD; + name = "Support Files"; + path = "../Target Support Files/Masonry"; sourceTree = ""; }; - CF1408CF629C7361332E53B88F7BD30C = { + CA6FCB0D1DAFD96E9DFED4FF928DE2A0 /* SDWebImage */ = { isa = PBXGroup; children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - E085E9D086722AFC464F733E4DF57E96 /* Development Pods */, - D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, - 3F7EEF6B93F48D4ECBF1AE421E60CE3C /* Pods */, - B151A40795A023B31776A25F2537E535 /* Products */, - EDB488D40FF1E1BEF52E699669A9E53A /* Targets Support Files */, + 291BBF30B45F0C6CF2DB77EA86125368 /* Core */, + A8226B7E99F39DCAFC5A6C7560A914E3 /* Support Files */, ); + name = SDWebImage; + path = SDWebImage; sourceTree = ""; }; - CFED4F834BB6A77ECE87A2A98FF3D357 /* Core */ = { + CD7425D6C91DEB0E318B2A561D705A1F /* JGProgressHUD */ = { isa = PBXGroup; children = ( - 6E23F40A1BD8D788AB497BA8D8B8EABC /* NSButton+WebCache.h */, - 38D00E65AF2B90C39F3D6A643FF91BD0 /* NSButton+WebCache.m */, - A053D2E29EA541517006D1A48AE3950A /* NSData+ImageContentType.h */, - 691325CABD136BB12FAA322D7FB3E796 /* NSData+ImageContentType.m */, - B28C2446973DCFC30D2E97CE16781B15 /* NSImage+WebCache.h */, - B56B2C4A1E337397102C310A36901FC6 /* NSImage+WebCache.m */, - 17C59BF43FEBC341F140DF2032BC7EE6 /* SDAnimatedImageRep.h */, - EA128986E43D10B291153DBD44C4B159 /* SDAnimatedImageRep.m */, - 0450AC485092A6DAB4EB0CF5733EACA7 /* SDImageCache.h */, - 2188F95820A9C39AC9B680FB08944F91 /* SDImageCache.m */, - C86AB54277EBDD13F9680BAF864DE080 /* SDImageCacheConfig.h */, - 58D89D07501C6CF7FF8A626EC52D65CD /* SDImageCacheConfig.m */, - 05DFC80D52CD47BB11C61A9BDA4849B2 /* SDWebImageCoder.h */, - 5E670C9811C318C880CF63B64BCC93E5 /* SDWebImageCoder.m */, - 7BD0537B364C22782767DDCCC968D3B6 /* SDWebImageCoderHelper.h */, - 2AB27E5EBE707DE35E522E54F8FA0D6D /* SDWebImageCoderHelper.m */, - BFC65481308452D3DE671ADEB905DFD0 /* SDWebImageCodersManager.h */, - 8F5832FA0D46403665F604D25BFCB2E5 /* SDWebImageCodersManager.m */, - EF76B9C4B10F4AC698B82872D5E813B3 /* SDWebImageCompat.h */, - 947EF90442E5CFC25AAD0329C3F107A7 /* SDWebImageCompat.m */, - B01D184420208824836BA74488F13A4B /* SDWebImageDownloader.h */, - BAA690287969DD8E6ABDB36860A1508A /* SDWebImageDownloader.m */, - B864617548924E8442B2CF222EAD6039 /* SDWebImageDownloaderOperation.h */, - 42CA0905C6D936F99BA1CA29470EBA2B /* SDWebImageDownloaderOperation.m */, - F4B02CD09019E0E4802B6469FE25AFFB /* SDWebImageFrame.h */, - 9BFCDA9AF48C1710ABE2D8707712A9EA /* SDWebImageFrame.m */, - 0C664F4F870DB9004E5E0611A9258B63 /* SDWebImageGIFCoder.h */, - DB43E49809FFBC5915AE79A7BFDD016B /* SDWebImageGIFCoder.m */, - 6A2164A2A30B03B05DE125C5A3C7D6CB /* SDWebImageImageIOCoder.h */, - D383D624418A4878A5174EBA7C07A655 /* SDWebImageImageIOCoder.m */, - F342E1C72A970EA83E9E1744EA7351A5 /* SDWebImageManager.h */, - E5FD4EB86F2678224F168FC068AE794D /* SDWebImageManager.m */, - DDE0B34C9D5E46CAC8721123E9AC453F /* SDWebImageOperation.h */, - D783524DDF49BA8A38AB78CCC2507249 /* SDWebImagePrefetcher.h */, - A781A018CBD64210F8C869C7A1474030 /* SDWebImagePrefetcher.m */, - A05ABD9ED07C39510F90D89550F4FC6C /* SDWebImageTransition.h */, - 5BE43BC2C9DD663ABCAFABA343EC5547 /* SDWebImageTransition.m */, - 4C479CFD8E11DB7FC4267365D37670B7 /* UIButton+WebCache.h */, - 5B62148D296FF07EA61C631466F87C56 /* UIButton+WebCache.m */, - D350C3F1638986C7578AF3B0C0905CAB /* UIImage+ForceDecode.h */, - 2F1A546DD308C589B3521AE0D338C2BB /* UIImage+ForceDecode.m */, - A14CDC377014F82C8594F2477ACBF6EF /* UIImage+GIF.h */, - 7D960317C01D6776925C2447025FF50A /* UIImage+GIF.m */, - 3D7D8C162D2853D539FA2BFE520A4FB3 /* UIImage+MemoryCacheCost.h */, - 2FD3E7C28A7B83302D9BFFC623A4188F /* UIImage+MemoryCacheCost.m */, - 239FCB262E8CBA5DB80581D8956B4819 /* UIImage+MultiFormat.h */, - C05CC332B414566181226061F397372A /* UIImage+MultiFormat.m */, - 2CE327418CFBA5B024A883A66C92E855 /* UIImageView+HighlightedWebCache.h */, - A5917793C64E22C73C5290EF616C0111 /* UIImageView+HighlightedWebCache.m */, - 0E32525D7B85252EB4865D8AA9C32C71 /* UIImageView+WebCache.h */, - EA47C1CF8AAF92B2DB2B28323E7AB868 /* UIImageView+WebCache.m */, - CE9AEDB9DB1C5B281C99F644188BD9CA /* UIView+WebCache.h */, - B4F19FEDB124C2D1980289BECEDBA051 /* UIView+WebCache.m */, - 3DC0046C2522B0D29A99067A9EAE7736 /* UIView+WebCacheOperation.h */, - 76A9BEEB5654E85F86D1D22AA5E4BF6B /* UIView+WebCacheOperation.m */, + 0CD6603A4CA3E47722422A3BC081EA14 /* JGProgressHUD.h */, + 3436528695310FF4DAF964573FFEB310 /* JGProgressHUD.m */, + DFF6CE06FCC979B2501492F45042AE8A /* JGProgressHUD-Defines.h */, + A31390612D463D2B1728DAAD2497E447 /* JGProgressHUDAnimation.h */, + 0EFAC56444AE0C2603F11EFC0F6E69F0 /* JGProgressHUDAnimation.m */, + 7621DBD98387BB3378F89C8E50963517 /* JGProgressHUDErrorIndicatorView.h */, + 3771DE47F1A3E17AC0DB8E19C0FBE47D /* JGProgressHUDErrorIndicatorView.m */, + 6120C3F5D579D97362D9BCF696D6E50A /* JGProgressHUDFadeAnimation.h */, + 93170957DCDA9DDDEF155FAC91D749B3 /* JGProgressHUDFadeAnimation.m */, + 253DF9ECB63F85B7FDECCFD61F60D653 /* JGProgressHUDFadeZoomAnimation.h */, + C3B8ECE6CE2D343E9FF764553D877DE7 /* JGProgressHUDFadeZoomAnimation.m */, + 4D6044259B2D04161D313D34DD82DCAD /* JGProgressHUDImageIndicatorView.h */, + FA1E70F22AC93D020F54AD83930B694B /* JGProgressHUDImageIndicatorView.m */, + 88AEBFD16FF67A0FBDD1DD437C01F0E0 /* JGProgressHUDIndeterminateIndicatorView.h */, + F6F48AECCE01E3F52AC1AD39D37AA7EE /* JGProgressHUDIndeterminateIndicatorView.m */, + 714F125FBC144DB5540DA58773D41B3B /* JGProgressHUDIndicatorView.h */, + 63A2A62670930FAAE6BF48800107C306 /* JGProgressHUDIndicatorView.m */, + 737D78FE3E42F8A23B63011C94CB254B /* JGProgressHUDPieIndicatorView.h */, + C4EBF1B36CA846531BD03DA94952F109 /* JGProgressHUDPieIndicatorView.m */, + 0A386E3346104E972AF6956C45FFE1C6 /* JGProgressHUDRingIndicatorView.h */, + 63CB2BC56E1929450545B53E41F56D01 /* JGProgressHUDRingIndicatorView.m */, + 5FAF6C861056F03A4140343DC95914AA /* JGProgressHUDShadow.h */, + EF59D284DF0C8209327A05AA8B7A4502 /* JGProgressHUDShadow.m */, + E4FD2807FFF6FD4868E4F784F3E64157 /* JGProgressHUDSuccessIndicatorView.h */, + 3A58145464B8A263A2BF1319A3516FC1 /* JGProgressHUDSuccessIndicatorView.m */, + 91E84E80B19BED5C8179F963F63AA6E1 /* Resources */, + 614B883BDE899D22EEEBE6E745A65EF4 /* Support Files */, ); - name = Core; + name = JGProgressHUD; + path = JGProgressHUD; sourceTree = ""; }; - D479F1D8B609C2CF20D8496EE5E6407B /* DynamicDelegate */ = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - 0F753BA77665DA568056828558264AC2 /* A2BlockInvocation.h */, - 41887EA7A928DFD013E0E02E5F48B651 /* A2BlockInvocation.m */, - 6821018E7DD91BACDC82D2DA06F54318 /* A2DynamicDelegate.h */, - C9F6CD405CBC9F1E09F3D7A87B68CC1A /* A2DynamicDelegate.m */, - C3FA115FEAFC6AEACCD8693650961071 /* NSCache+BlocksKit.h */, - 8F2491728B1CA07C0BB6E484E8098663 /* NSCache+BlocksKit.m */, - 85C15A9FD7B4E4CA463821B8D1749E35 /* NSObject+A2BlockDelegate.h */, - 055A94DC9A3B055BCF9A05E78E2F05C4 /* NSObject+A2BlockDelegate.m */, - 8AAA75437AB3CEBAF98EF43FC1339602 /* NSObject+A2DynamicDelegate.h */, - DFB1D8D3067E88701D79AE89732E2ABE /* NSObject+A2DynamicDelegate.m */, - E1FD581C1B61046C150334756E9F592F /* NSURLConnection+BlocksKit.h */, - B3367DD199FAC112AAEA65A112D72A90 /* NSURLConnection+BlocksKit.m */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + E085E9D086722AFC464F733E4DF57E96 /* Development Pods */, + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, + A223EBADC2CF8362E4884B37A41262B7 /* Pods */, + FCBBB7209DF2E1332E44CFCAF47FC7A0 /* Products */, + EDB488D40FF1E1BEF52E699669A9E53A /* Targets Support Files */, ); - name = DynamicDelegate; sourceTree = ""; }; - D87F4BD3ED71551862D7A724F9859FD5 /* WeiboSDK */ = { + D007DBB84DCF3058535203232C4FAA95 /* Support Files */ = { isa = PBXGroup; children = ( - 6B70C254433426CE79A6AC1DF9DCE0BC /* WBHttpRequest.h */, - A55E95009A1889289CEEB8BA434EC272 /* WBHttpRequest+WeiboGame.h */, - 3BFDED47A2E8ADBBDB7D360797FEB72C /* WBHttpRequest+WeiboShare.h */, - DEF7047585AD4828ED25A382154B2877 /* WBHttpRequest+WeiboToken.h */, - 9F0B1F94F9F63A210B7F1F9A10119B7B /* WBHttpRequest+WeiboUser.h */, - 83F88AB4B2C2FE3E8E7A6E5B2B995253 /* WBSDKBasicButton.h */, - EFACFE257D59E9B79F8380A2730EA095 /* WBSDKCommentButton.h */, - 058D9599650E197CCD657E3D48359D4C /* WBSDKRelationshipButton.h */, - D2C2D3195B61846A821420DA8C9CC9DE /* WeiboSDK.h */, - E52A0410754F65B4232698F3BC005495 /* WeiboUser.h */, - 375DF841949256A05CE86DA0F617C2A5 /* Frameworks */, - A756A178DC2701CC4AA94C0E7ECEED4D /* Resources */, - F36DDA5589A9C091DCB4AB57F65547C5 /* Support Files */, + 550AC9BC81D38C6F1F798A7C1C86A6ED /* Crashlytics.debug.xcconfig */, + 952C1EF16B573E5526B42AAB955F31BC /* Crashlytics.release.xcconfig */, ); - name = WeiboSDK; - path = WeiboSDK; + name = "Support Files"; + path = "../Target Support Files/Crashlytics"; sourceTree = ""; }; D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { @@ -1396,6 +1645,40 @@ path = ../../..; sourceTree = ""; }; + DEE79D4637D435D2A99AAEE81D8DC0EB /* Masonry */ = { + isa = PBXGroup; + children = ( + DD16ADC7F01A26324E9B7CF0A493B3BE /* MASCompositeConstraint.h */, + 8CDA2BF0D9BD2962E119971B674B23B2 /* MASCompositeConstraint.m */, + ECB0CD6B51028E00889138CC04EB6CEB /* MASConstraint.h */, + 1F715CBB6B30CEF29283BE952BCE2184 /* MASConstraint.m */, + 1BBAE793CA6A3452E1E6CFCBED018E3F /* MASConstraint+Private.h */, + 3091017B6D40C295F66231E2F3AC7A6B /* MASConstraintMaker.h */, + A57C66E53BBCCC0C371F96658851D68C /* MASConstraintMaker.m */, + 30A46C04B140CEC37E961D0E39BF2DB6 /* MASLayoutConstraint.h */, + 9EE49D00410B37571828FDDD523CC3AA /* MASLayoutConstraint.m */, + 29080304BD639016355C6F30385D6A9F /* Masonry.h */, + F75D621F5076707D6A8A71C20B4D0AA5 /* MASUtilities.h */, + 3423EAD57A5D1DAE8059DC88ADB88F2A /* MASViewAttribute.h */, + 31F3944DC2EFDCB10CD1C1E93ADA547B /* MASViewAttribute.m */, + BEBD0C3771F070DAB569775F14D4396E /* MASViewConstraint.h */, + 36B33D26AAE181EAB29D9FCEBD29C162 /* MASViewConstraint.m */, + 715BB4C46C8DE8EDEEA613E11C00B253 /* NSArray+MASAdditions.h */, + 03B73A0F728115CB1CF2107AEA23F7F0 /* NSArray+MASAdditions.m */, + 4BE853BF6A41CBE71196E8BBBCECBF76 /* NSArray+MASShorthandAdditions.h */, + 095AF3D1B32ED590BBB2239CB1DC2B94 /* NSLayoutConstraint+MASDebugAdditions.h */, + F23868CE3CC339386946DE5BF6606B05 /* NSLayoutConstraint+MASDebugAdditions.m */, + 3F55BEC9975D5C26529DAE689730774F /* View+MASAdditions.h */, + 05C30B7D778B321F7B078292406910A5 /* View+MASAdditions.m */, + DBD25A3470A290BA4F19692B31C5DD73 /* View+MASShorthandAdditions.h */, + 8CEA1D18E5979EED1F2164C0A82662F6 /* ViewController+MASAdditions.h */, + F1A608EF38BBD85D84317AF703AC4BBF /* ViewController+MASAdditions.m */, + C451F75F7531217575E5928D13DA2249 /* Support Files */, + ); + name = Masonry; + path = Masonry; + sourceTree = ""; + }; E011722A8689CD7D53E3F582AA5A80E8 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -1412,17 +1695,25 @@ name = "Development Pods"; sourceTree = ""; }; - E448F9F754D018E0FF5FA7D7B0B83E27 /* BlocksKit */ = { + E413D2F5EAB5070D977DC56C437F2EA4 /* WeiboSDK */ = { isa = PBXGroup; children = ( - 15506F8F274901A82030124C20A7B1CE /* Core */, - D479F1D8B609C2CF20D8496EE5E6407B /* DynamicDelegate */, - F73E1977F03E80CBEA070F4E75988239 /* MessageUI */, - 3FD530C8667CBF92EE681ACB24CE2721 /* Support Files */, - 946F33674BDE0EE317B0FCFE13C49ED0 /* UIKit */, + E119F4ED3541BA201AA7318CF7DF27DA /* WBHttpRequest.h */, + 466444AA980E6C5EE91EFBD4BFC7B2E5 /* WBHttpRequest+WeiboGame.h */, + A8E70DEB91643DD09C645C97F399DFB4 /* WBHttpRequest+WeiboShare.h */, + 30E12B2DCB884116924DB794B40831A0 /* WBHttpRequest+WeiboToken.h */, + D70C4541E2F314869BCEEF150BB31426 /* WBHttpRequest+WeiboUser.h */, + FB0ABE00D18112BE2F61A7F5E6BCEA64 /* WBSDKBasicButton.h */, + E3B31AA0D209428218511156811771FB /* WBSDKCommentButton.h */, + 153F8F9B0A3996B02592F6EBBAD57BB2 /* WBSDKRelationshipButton.h */, + 2FF6BC03753E6EE79EFD21BD6304A5FD /* WeiboSDK.h */, + 3CACB4FC3C379F92F157DC29C1A557E7 /* WeiboUser.h */, + 0544B1636FB5EE463A7F12DE0206D7DD /* Frameworks */, + C3EF97F78F13E1FEB8E37C1243125079 /* Resources */, + 1ED2AABFBCDB46D1937D7F96A0F60622 /* Support Files */, ); - name = BlocksKit; - path = BlocksKit; + name = WeiboSDK; + path = WeiboSDK; sourceTree = ""; }; EDB488D40FF1E1BEF52E699669A9E53A /* Targets Support Files */ = { @@ -1433,203 +1724,41 @@ name = "Targets Support Files"; sourceTree = ""; }; - F25C880F913EDD21E88F52667A5EB767 /* Support Files */ = { + F0310C33C2742E551595F2E900033A7E /* Frameworks */ = { isa = PBXGroup; children = ( - 31FA891807C1A9E40CE3DE9DE7810F4D /* SDWebImage-dummy.m */, - C69AF7D2ABF1FC021356CEDF96A52892 /* SDWebImage-prefix.pch */, - 9971BBE63FD57412E8265284AACA6496 /* SDWebImage.debug.xcconfig */, - D3B1D9886EB88B8424404EB63C9F54E1 /* SDWebImage.release.xcconfig */, + BCA2CB45839B43BA6728E56CF25AD39B /* Crashlytics.framework */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = Frameworks; sourceTree = ""; }; - F36DDA5589A9C091DCB4AB57F65547C5 /* Support Files */ = { + FCBBB7209DF2E1332E44CFCAF47FC7A0 /* Products */ = { isa = PBXGroup; children = ( - 01ECD6C8D7A21FFA3A1EED987D0C13D0 /* WeiboSDK.debug.xcconfig */, - 4A8990C9673D8FE04B533BF7387931C4 /* WeiboSDK.release.xcconfig */, + 6F70BF603CE98579EE97E286801E741E /* libBlocksKit.a */, + AFCFF05430D46AE44C4B2B0AC7D9715A /* libBugsnag.a */, + 3667B5F6798CDC2ADA1BBC70D052FF68 /* libHappyDNS.a */, + 7FBAFAA66E9C7401884F439AE8BC662C /* libJGProgressHUD.a */, + 1FFED36A657123030ABB700256D73F15 /* libMasonry.a */, + 34B8983D85D3A2CA9404C5DE373B20BF /* libMMMaterialDesignSpinner.a */, + 872296C6BF98514FED139D225E897B3B /* libPods-NiuPlayer.a */, + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, ); - name = "Support Files"; - path = "../Target Support Files/WeiboSDK"; + name = Products; sourceTree = ""; }; - F73E1977F03E80CBEA070F4E75988239 /* MessageUI */ = { + FE9C14561E2A8442F7FA74163290B79A /* MessageUI */ = { isa = PBXGroup; children = ( - 9BE464EA715515E70464B4F5F61DD8CF /* BlocksKit+MessageUI.h */, - D4F4F16ED4839C070342A08F128A1E31 /* MFMailComposeViewController+BlocksKit.h */, - F8226465E6C59DBCBB32DD565714BCA6 /* MFMailComposeViewController+BlocksKit.m */, - 6F6084E0FEACD6711B1FFE67FB5CC238 /* MFMessageComposeViewController+BlocksKit.h */, - 83F961A191F1CF5EED497F4436B15005 /* MFMessageComposeViewController+BlocksKit.m */, + 7F97CD4E37A1018300E9658042E594C9 /* BlocksKit+MessageUI.h */, + 6D100F0601AD021206CFE21636EE3786 /* MFMailComposeViewController+BlocksKit.h */, + F1806B554A05EE2C81838760E44DE276 /* MFMailComposeViewController+BlocksKit.m */, + 135F1FEA4041A79C577E7BF85E4C3B89 /* MFMessageComposeViewController+BlocksKit.h */, + E3444A30934CCB09FB6EA08D2FE086DB /* MFMessageComposeViewController+BlocksKit.m */, ); name = MessageUI; sourceTree = ""; }; - F8F22C162E6650E323CB78B73329555C /* Bugsnag */ = { - isa = PBXGroup; - children = ( - 275FDF1B7D06F9BC35C2FCA07ABBF43D /* BSG_KSArchSpecific.h */, - 000D19DFE15465CEE978C72072B864E4 /* BSG_KSBacktrace.c */, - 02D31D24C8DA79D4453170F8B3F65778 /* BSG_KSBacktrace.h */, - 44D35797B86D3EDCC232ABD7C2C4BBC2 /* BSG_KSBacktrace_Private.h */, - D947E9C3F117FE20BDD47EA38975AE06 /* BSG_KSCrash.h */, - E47E5838735CC36CFABD17D029D26C3B /* BSG_KSCrash.m */, - 620071B4B0F8455192CAC464B2E973C9 /* BSG_KSCrashAdvanced.h */, - AFAE57775A8F8CE1B21A6B212107BAA2 /* BSG_KSCrashC.c */, - 6482A315DA041E27C2A72161A56FA211 /* BSG_KSCrashC.h */, - A231AAD347CA5F6101FBA16159E28699 /* BSG_KSCrashCallCompletion.h */, - D1FD49475533FBE265454ED02C97555B /* BSG_KSCrashCallCompletion.m */, - 0B9943AC9416ED954E5F39B5BFD2AF3C /* BSG_KSCrashContext.h */, - A1FED36F7E59F9C82E4447C9A1BC81BC /* BSG_KSCrashDoctor.h */, - AB3B3FD14963AB9061DE31ECCB1FA96A /* BSG_KSCrashDoctor.m */, - F7DC48DF5DD670E2542956A13E992957 /* BSG_KSCrashReport.c */, - D9A001776AE561CD0795E95A229097A8 /* BSG_KSCrashReport.h */, - 67B22A60B1F7AAAEBC67DC907FA1F2F0 /* BSG_KSCrashReportFields.h */, - F526F859711AFBDE5243470CACF58B60 /* BSG_KSCrashReportFilter.h */, - E07D4445DE0FD7228FE50B6B4112F9E8 /* BSG_KSCrashReportFilterCompletion.h */, - C97DAFC6D54CACAF82EEB0BAA37C6EB4 /* BSG_KSCrashReportStore.h */, - 699E8B12109ED503F1305D4CE2212255 /* BSG_KSCrashReportStore.m */, - 2419289023F9FFEDD2309637A6922CFF /* BSG_KSCrashReportVersion.h */, - 095F344F673333A54E26618BDB8A960A /* BSG_KSCrashReportWriter.h */, - 443BDF1E7E7A4AC2453E63D5A55AD9AE /* BSG_KSCrashSentry.c */, - CF007A0F8A357DDB0DC6548D4F208E0C /* BSG_KSCrashSentry.h */, - CAB0A18D09E631CB5C08360C35DDDB8E /* BSG_KSCrashSentry_CPPException.h */, - 71E9AE2A9A7BA6ADB5ED767D5C6D5925 /* BSG_KSCrashSentry_CPPException.mm */, - D5A08B90E7090F0551E2ED620FA2991E /* BSG_KSCrashSentry_Deadlock.h */, - C6335D950533269CA4E6C8B9E8C34BE9 /* BSG_KSCrashSentry_Deadlock.m */, - D88D7856D7533D7418FD57B5446882BC /* BSG_KSCrashSentry_MachException.c */, - 9484C4E1D6D496C87512AEE556AC43D3 /* BSG_KSCrashSentry_MachException.h */, - 377B2564544D5319DE9C2231377FA4CE /* BSG_KSCrashSentry_NSException.h */, - 50A301172A0D71A8F4F03C8FB42699E7 /* BSG_KSCrashSentry_NSException.m */, - 9CB7A19AFBFCD6C800F6F020B30E91CD /* BSG_KSCrashSentry_Private.h */, - 21E01EBE346E1ED0DB94BD3329A0302C /* BSG_KSCrashSentry_Signal.c */, - 397C7D4FC6ABC4595356E33D0EF70242 /* BSG_KSCrashSentry_Signal.h */, - 86AEB27B3F1C1904B9DF792547C4C09C /* BSG_KSCrashSentry_User.c */, - A4E27700DF6E5486F91E0F37F189C817 /* BSG_KSCrashSentry_User.h */, - 0B5E17A34E00B44E46CBA8A2BCC1C70D /* BSG_KSCrashState.c */, - 083774F95FFCA6F25E15B558E8BB0D00 /* BSG_KSCrashState.h */, - 6D6239A0D6613B2AC81A11DD74DD54BB /* BSG_KSCrashType.c */, - 5BE80A97114B90D3DBDC8CFF3A061C9C /* BSG_KSCrashType.h */, - 34356C70FC56B82E28692AD6BF33D758 /* BSG_KSDynamicLinker.c */, - 889F1716133D2FA4470119C5A470BEBD /* BSG_KSDynamicLinker.h */, - 3C75F0273EBB1CEED82FA50A67B52A80 /* BSG_KSFileUtils.c */, - 2E54DD9746F433B11A34AED2B1B808DF /* BSG_KSFileUtils.h */, - FA31A0AC7D674727743E002B0B0E4EFA /* BSG_KSJSONCodec.c */, - FF631AA1B75C7C07902801D4A8A3D0F4 /* BSG_KSJSONCodec.h */, - 126AB0D6A6011B5CCC82003FF0FA5557 /* BSG_KSJSONCodecObjC.h */, - A62B781E63BD4DF472D4804DDF476E58 /* BSG_KSJSONCodecObjC.m */, - DFF8FAB5108D3213E27D6E13C5CF037F /* BSG_KSLogger.h */, - 1A2F096249D480F9FA6521733553D875 /* BSG_KSLogger.m */, - DC8583A07EDF27F96D073EAC36A83F60 /* BSG_KSMach.c */, - 0164C60480BDFABF914FF6BE049C1C5F /* BSG_KSMach.h */, - 1987C79E50A35B9C47F2E12C4FFEE7DB /* BSG_KSMach_Arm.c */, - 8B0786A12319C91E726EA7358F11B19C /* BSG_KSMach_Arm64.c */, - AA4960FC2485BE12EDD3BB5A556229E6 /* BSG_KSMach_x86_32.c */, - 4B7576F41A9E435CD9B9DDB9CB719B41 /* BSG_KSMach_x86_64.c */, - 84404EE5040FC6E1E32DB48C571FB14F /* BSG_KSMachApple.h */, - 3E1C4A8A30B767DB4C0DB72DF761EF2D /* BSG_KSObjC.c */, - D8D31B959A7C3B731128641545FCF988 /* BSG_KSObjC.h */, - E384EDA31D5313B1C5F638179EDD6414 /* BSG_KSObjCApple.h */, - E920309F16EE5134B7E7B8098A86883F /* BSG_KSSafeCollections.h */, - 8876309BD83C7BFB59319E8920CB7DA8 /* BSG_KSSafeCollections.m */, - EFC02E35E088BA6357BE1057EE278B7B /* BSG_KSSignalInfo.c */, - F909D8D95330419BC3376ADB63AEADB9 /* BSG_KSSignalInfo.h */, - 9CF91537D1C5E6840408BDE6572AC1E7 /* BSG_KSSingleton.h */, - 6A6E4693DB3266D5A2268E0CC5FADC04 /* BSG_KSString.c */, - 39FE5DCA31E771F6AEFA9DCF622FBE0C /* BSG_KSString.h */, - 63D0F94314EB932A3640AC7A26E2F2C6 /* BSG_KSSysCtl.c */, - 3A35207897AE401F4B71D3C12E562895 /* BSG_KSSysCtl.h */, - 5B62E18BAA362962E6FF7000F6CC42B0 /* BSG_KSSystemCapabilities.h */, - 95C463090D33F26A371C1FA30EACA51A /* BSG_KSSystemInfo.h */, - B175401DBBFEAC2C682A16C83D4658C4 /* BSG_KSSystemInfo.m */, - 9E06FAAFD6072701D338396EA51199BD /* BSG_KSSystemInfoC.h */, - 13AD00FBAF440BF7ACEC53EFAB909957 /* BSG_KSZombie.c */, - A472867F9B0F25C1DA00A6CCDE1686E1 /* BSG_KSZombie.h */, - 8EDABD2706EE9F72E5E565254631C410 /* BSG_RFC3339DateTool.h */, - 9E8025ED85FCAB6DE5F42A047B7DCA03 /* BSG_RFC3339DateTool.m */, - 4FC9C8FF83C0EB8BAD6923B8C26612D1 /* BSGConnectivity.h */, - B7A831CA0A25E45EB62CFFD6717F2AF3 /* BSGConnectivity.m */, - C4555DC09BC83711A2DE01F44808B471 /* BSGSerialization.h */, - 0E08235584359C3E9AA20D9C9CCD9282 /* BSGSerialization.m */, - 183EA19F9A679E607F60D80B99273A58 /* Bugsnag.h */, - B88E74404AD883B17EF1BC4D3D9A8E76 /* Bugsnag.m */, - 32D0277E8945EDC6BC313EB5B04160EB /* BugsnagApiClient.h */, - C1A9034CDE515C4DA19B02E136C9FC9A /* BugsnagApiClient.m */, - 6085620410C70F21F83C952C90C87863 /* BugsnagBreadcrumb.h */, - C26D251AFF9C7C0EA1481D9FB467125E /* BugsnagBreadcrumb.m */, - 4DF8C1CB33B6327266026B7EB0A1ADE6 /* BugsnagCollections.h */, - 82BBA88B46B8BFF5D22B5A1B8AA69645 /* BugsnagCollections.m */, - 0E438142310E34F101C8FD33159A0933 /* BugsnagConfiguration.h */, - 89D65C1A20AD2DF0E78C2AC2F84978D6 /* BugsnagConfiguration.m */, - 6B14B29B70F681BDE94CD756B5E89100 /* BugsnagCrashReport.h */, - AF5AF7A34D781C55E7D1888A5C97FF43 /* BugsnagCrashReport.m */, - 2EC34861D828ADCDE3C3BA7BF3632FEF /* BugsnagCrashSentry.h */, - 14304399DCCB79685B3FBD6B91B780A2 /* BugsnagCrashSentry.m */, - 22A59CC9ECFE59BFDE7A5F0F3802862F /* BugsnagErrorReportApiClient.h */, - EF265CC166F204A5684765D92F7EF823 /* BugsnagErrorReportApiClient.m */, - AF60B70CC25498D37361A2708C3F2AAF /* BugsnagFileStore.h */, - E223F40F19B7A69403C425BD7914D587 /* BugsnagFileStore.m */, - F1C81AE4B995878B32EC4E6D6F88C1EF /* BugsnagHandledState.h */, - 9D13A63F33DA2AE1573C5B54904A0FB2 /* BugsnagHandledState.m */, - D294110436D094D87AAA207BF2306EBF /* BugsnagKeys.h */, - C6B8B211B308E7FC790D79D84D9CC723 /* BugsnagKSCrashSysInfoParser.h */, - 0BA4C2B68351540586D5B66C91CCB294 /* BugsnagKSCrashSysInfoParser.m */, - E9B1F08312AF562D53EBFC6961CAF5A7 /* BugsnagLogger.h */, - E1E7CEB94EC928013BD1452026D68B50 /* BugsnagMetaData.h */, - DFB3F911D4CBF0922CCE313D4F5707F5 /* BugsnagMetaData.m */, - 368FCDF9CBBF58AAD8FEB85FC1D2C9A3 /* BugsnagNotifier.h */, - 84815F4DFA0C4D089FC4D0CA3E8258E8 /* BugsnagNotifier.m */, - BB3E8F3E4561CF776B70826294047365 /* BugsnagSession.h */, - 3A3830CDFCD9A01940D4166B7A197AC5 /* BugsnagSession.m */, - D9DEC06EC7E475908D72BDCCF6BC4564 /* BugsnagSessionFileStore.h */, - 4A53EE03E79354704D76B5660736D1E5 /* BugsnagSessionFileStore.m */, - EFC612EBA52055B7F1A8514E1D2DF70A /* BugsnagSessionTracker.h */, - 73AC5222CE85002F7FD65A40A2ACC149 /* BugsnagSessionTracker.m */, - B33C43AD95E0521BA91AA8B41A0462CF /* BugsnagSessionTrackingApiClient.h */, - 91AAC4196B7268099DF72F6FD9FDA52F /* BugsnagSessionTrackingApiClient.m */, - E2FDA19444135BB7959142E4101A558D /* BugsnagSessionTrackingPayload.h */, - 876092BBDD6B62B009CDD6AE6D0E36A4 /* BugsnagSessionTrackingPayload.m */, - EE17C1D16E7AAEE38E27EA28F1B3E53F /* BugsnagSink.h */, - AF8D7B95A8DF6448F44B23EA19A54D7F /* BugsnagSink.m */, - 98E13C06280849689EC5D442D514A44D /* BugsnagUser.h */, - B89E9088469CD31CF599D646D242677E /* BugsnagUser.m */, - A56642A7BDEDCFEB1A3D7FB3E3D58F1F /* NSDictionary+BSG_Merge.h */, - 93128D93D892A3672DD48A08EDD8E391 /* NSDictionary+BSG_Merge.m */, - ECE8D3D2319A3E20C467F0CCF305B761 /* NSError+BSG_SimpleConstructor.h */, - F023A2472059DD6E7AE48F1B99D20434 /* NSError+BSG_SimpleConstructor.m */, - 5399348968261DE59F4A52AB06935155 /* Support Files */, - ); - name = Bugsnag; - path = Bugsnag; - sourceTree = ""; - }; - FCA91652C5AAFA25EF59740B99CBFE59 /* Support Files */ = { - isa = PBXGroup; - children = ( - A6E8F6F269F22C90B945581A845DD0E1 /* JGProgressHUD-dummy.m */, - ED04625EEDC3F3387DDE34FC3BF822B0 /* JGProgressHUD-prefix.pch */, - E2E63C3FAB1AC79E806E5818474F2195 /* JGProgressHUD.debug.xcconfig */, - 8405CAA45D701BA126F8C74E49398779 /* JGProgressHUD.release.xcconfig */, - C3A9BF9BB5F15342D7BE936F4814EED2 /* ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/JGProgressHUD"; - sourceTree = ""; - }; - FE17726552693AF2B2C431CE1350F818 /* Support Files */ = { - isa = PBXGroup; - children = ( - F9D088B988386EB8CBDB3F5E929A7879 /* MMMaterialDesignSpinner-dummy.m */, - 1EB767781D943E47C7EEBA34ACA41067 /* MMMaterialDesignSpinner-prefix.pch */, - 3ACFC6182E8311AD65CC6887B610B39A /* MMMaterialDesignSpinner.debug.xcconfig */, - 544255DFB762AF37B4DA6CC99021984C /* MMMaterialDesignSpinner.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/MMMaterialDesignSpinner"; - sourceTree = ""; - }; FF71D20CCAA27568001140C85E9C5B3E /* iphoneos */ = { isa = PBXGroup; children = ( @@ -1641,13 +1770,6 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0396A8A548F667088EF59F37DD26A6B4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 2697A8D6B2989B073B236F7B4BF67F30 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1670,38 +1792,44 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6909F05BA7EB1535EF422FEA6DEC62B9 /* Headers */ = { + 5E74C5E67723334013364DCE9457F5C2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6D5D78624DEB38E63F436A8970F04D45 /* NSButton+WebCache.h in Headers */, + 51836FC419231AF0F2D4D286F25C98B7 /* NSData+ImageContentType.h in Headers */, + 2BF550B8C4087E83F2403199B226DF02 /* NSImage+WebCache.h in Headers */, + A342683498F827B086866EA215751C05 /* SDAnimatedImageRep.h in Headers */, + DCA923BCCF01487B8B95E1B20767FF17 /* SDImageCache.h in Headers */, + 4DCB32B9F17F78B5E6F141352CE81337 /* SDImageCacheConfig.h in Headers */, + 02666CBA7319563C97D5F7AA0D3D9ED5 /* SDWebImageCoder.h in Headers */, + 83C63BD851A493127D45C8679B0C1095 /* SDWebImageCoderHelper.h in Headers */, + C7F0806E9002E9825E3795B339E81FB2 /* SDWebImageCodersManager.h in Headers */, + 9D25FFE1FD226AF5E302D2513E0C9F69 /* SDWebImageCompat.h in Headers */, + D38A1819376D3C3680B3D0D1FA1BCCAA /* SDWebImageDownloader.h in Headers */, + A9BD71EC2B2D4B04B44B2BDCADD94117 /* SDWebImageDownloaderOperation.h in Headers */, + F37B2894E219BA1EEE1AEFE28E30D6CA /* SDWebImageFrame.h in Headers */, + 3E980EF2B158519CBD0E2E371B761262 /* SDWebImageGIFCoder.h in Headers */, + E1D8B0082951C48A9D929EC6F0A4450A /* SDWebImageImageIOCoder.h in Headers */, + A495CF59F0B1DD70B85387DBC099D985 /* SDWebImageManager.h in Headers */, + BB2628A5ADDFD79DE6E62E76A2C63AD3 /* SDWebImageOperation.h in Headers */, + 431B219AB99A30F5DD9475249A1354F6 /* SDWebImagePrefetcher.h in Headers */, + 19F037B1DDF54E002B5804B1160C549C /* SDWebImageTransition.h in Headers */, + CB6D56B916F04E5B14AD5FB7F46450A2 /* UIButton+WebCache.h in Headers */, + C60A1CA8B5E6D829445AE31B23D2F3D0 /* UIImage+ForceDecode.h in Headers */, + 397F52C7545E7FCA033BCA5EE4BCDF77 /* UIImage+GIF.h in Headers */, + 29B6F69434691CCC32E408EECE1596BF /* UIImage+MultiFormat.h in Headers */, + 3D8076B314232537A745E4F6C5272D87 /* UIImageView+HighlightedWebCache.h in Headers */, + 242BD595617A416912D7FB80A4C6C9F0 /* UIImageView+WebCache.h in Headers */, + B744645E35C7E9FF8E283AC77B74D905 /* UIView+WebCache.h in Headers */, + EB65AF2B6BE84F9103F75183BED66B07 /* UIView+WebCacheOperation.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 86035430F52EEE45C65368E705AD62FD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F35C59BAA919BFF201A78E656C7560CA /* NSButton+WebCache.h in Headers */, - 7C48EEC8930F7EE9E2F51226D06F72D0 /* NSData+ImageContentType.h in Headers */, - 428C01DB6FB4200D794CC8257AA37FAD /* NSImage+WebCache.h in Headers */, - 64A03BF6EB4B5ABD8338D8A1D31346AC /* SDAnimatedImageRep.h in Headers */, - 645AA5322EAFE0A3235CFBD0D59A178E /* SDImageCache.h in Headers */, - BE824078490815CE186E4C951E950AA0 /* SDImageCacheConfig.h in Headers */, - 74F798EE545DBB3B4750835024510EB6 /* SDWebImageCoder.h in Headers */, - 1631E842664B8680F38F602F7DFE0A1E /* SDWebImageCoderHelper.h in Headers */, - 5FD9274EB113A9AFFDA4D0AF72B2292B /* SDWebImageCodersManager.h in Headers */, - 56AD56D65FD9A0F9267BEB83A866D441 /* SDWebImageCompat.h in Headers */, - 876A075D6329669E89B4D2C54F2CD32D /* SDWebImageDownloader.h in Headers */, - 845F20A47689099022F550EA07B2F7AA /* SDWebImageDownloaderOperation.h in Headers */, - D73A65AFD60B81D6BA47B8338D830A43 /* SDWebImageFrame.h in Headers */, - BD07E140D72BC6853C14C76B525E4763 /* SDWebImageGIFCoder.h in Headers */, - 84B33099E9FB1D869454E79EFD211AA0 /* SDWebImageImageIOCoder.h in Headers */, - F3A9F03636E3336CB460582CB197E5F0 /* SDWebImageManager.h in Headers */, - 56F7756A56038F0035C6E9D46A195A68 /* SDWebImageOperation.h in Headers */, - 6BC51D233DEF9C1206F507A95C807A58 /* SDWebImagePrefetcher.h in Headers */, - B94E7773C4096DE2E56869AF65ECC07A /* SDWebImageTransition.h in Headers */, - 81620800E2063ACD76D93B5A92506866 /* UIButton+WebCache.h in Headers */, - 4DB92E8CE6E0817BCE4656C5DE7A46F6 /* UIImage+ForceDecode.h in Headers */, - B6D8C1B434059278384511986DC87A4B /* UIImage+GIF.h in Headers */, - 3F61F42D45E81580CC76022854C4A62B /* UIImage+MemoryCacheCost.h in Headers */, - 09E958D4C1C8B62D0A18B1B3F6E6297E /* UIImage+MultiFormat.h in Headers */, - 5BFE139049E51141F6F6D43C3C6499F9 /* UIImageView+HighlightedWebCache.h in Headers */, - 4546D8FA8BEB9D956EF7439EC5209C7C /* UIImageView+WebCache.h in Headers */, - B33F6A04EDA3B1C6FA5DD6F6A2C5DB2A /* UIView+WebCache.h in Headers */, - A8D8C7C9427CCC26344A333F0D25B555 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1783,6 +1911,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A3158B9A2A96C01F321F0B20909B1529 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9103687D945641FB47C645DE6C9AD953 /* HappyDNS.h in Headers */, + 01E84E1BF59025458A596A8D62142264 /* QNAssessment.h in Headers */, + D6FFD1746F0D7645AECB30A903CB0E86 /* QNDes.h in Headers */, + F9AF462C21BE1444D6661E873F52F1E1 /* QNDnsManager.h in Headers */, + 4F560052793D0D15D8B46A1768A8766E /* QNDnspodEnterprise.h in Headers */, + 96507E505EC7DBBD8F00A2AF8E031574 /* QNDnspodFree.h in Headers */, + ADCDDEFA5446062309DA5DBCE53F64CC /* QNDomain.h in Headers */, + E84728FD19EC36762BBD6D5C9EE556B9 /* QNGetAddrInfo.h in Headers */, + 01AA376C3CC339EE9C1489E28BE477D6 /* QNHex.h in Headers */, + 9BCCDEC1044989F0BECFEAB755A0411F /* QNHijackingDetectWrapper.h in Headers */, + ADF73D3D07DCCD33D75DB18F3D5A7997 /* QNHosts.h in Headers */, + 0569F3959E70201DD3DC98F2A1FEBBD5 /* QNIP.h in Headers */, + 6CA9582BCD21E15C58584DF8C8CBE67A /* QNIpModel.h in Headers */, + 472A205F433C23CA361312CE051643E3 /* QNLruCache.h in Headers */, + F8A1500CCE7E735746B42A529B167942 /* QNNetworkInfo.h in Headers */, + 94765EBA562A8931572142F0EB65BA87 /* QNRecord.h in Headers */, + 9C74A86822D54116059A22663D1ACCA0 /* QNRefresher.h in Headers */, + 0E4AA1BE48AFB5B6E5FB069F67EDB274 /* QNResolver.h in Headers */, + B5DE58D5340CF7C2E389A4E7F9537028 /* QNResolverDelegate.h in Headers */, + 2F3531B944E0ED0581C1135E6F8FABAF /* QNResolvUtil.h in Headers */, + 1D786F31CAB84B196D2F64F8AA703059 /* QNTxtResolver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A6692299A9B9723D19A02C96A9AC5B30 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1837,23 +1993,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E80DE4363DF298D650631AD18AE11D53 /* Headers */ = { + FFFF9930FD335032748594A77448809B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6BEA34FC04D66C832E5B99C3D92FD08C /* JGProgressHUD-Defines.h in Headers */, - 9D922D03B4FC85FC0BFE69EDF4D1AD5D /* JGProgressHUD.h in Headers */, - 2FD7AEA0BDEE24C1F4BB2C8D7FB67BBA /* JGProgressHUDAnimation.h in Headers */, - 78C7EF542037566E83F67AA32BC048F8 /* JGProgressHUDErrorIndicatorView.h in Headers */, - 8A45D32D4EBA0E687EAC2211D1A9F39B /* JGProgressHUDFadeAnimation.h in Headers */, - 87C9DB46A3764D427326524D442A6D05 /* JGProgressHUDFadeZoomAnimation.h in Headers */, - 2EA029186C7BBCEA3D3454EA6FBFD31A /* JGProgressHUDImageIndicatorView.h in Headers */, - D965CCBFFD833E4B786EDD3B3D186755 /* JGProgressHUDIndeterminateIndicatorView.h in Headers */, - DB1D88D9D89683E5AE8FB619A72E221D /* JGProgressHUDIndicatorView.h in Headers */, - 78E1B1FA64DED4101A32AAA20CCDBA94 /* JGProgressHUDPieIndicatorView.h in Headers */, - 13737C16C5683DF04E07F69A0CCEF6C3 /* JGProgressHUDRingIndicatorView.h in Headers */, - 412838BEC5062F1C28DE069249DAE580 /* JGProgressHUDShadow.h in Headers */, - 14EA827A4E3FF915FA101FC9FAC97638 /* JGProgressHUDSuccessIndicatorView.h in Headers */, + 7E93D4070CC337A9E8B046B16CCE7086 /* JGProgressHUD-Defines.h in Headers */, + B544ABD60943BEFA18254D77AF7B61A2 /* JGProgressHUD.h in Headers */, + EE839AD9056E372ABA3A91822FB04D95 /* JGProgressHUDAnimation.h in Headers */, + 29EF5FBDABBC8CD7B16D277A2818ABC1 /* JGProgressHUDErrorIndicatorView.h in Headers */, + AA03442874A47D34D3EE92CD03567CC2 /* JGProgressHUDFadeAnimation.h in Headers */, + A8656F9F5FA8C032F68FBFD79EDAEA81 /* JGProgressHUDFadeZoomAnimation.h in Headers */, + 3A958857B9D877E65F9110E3B30BFAA2 /* JGProgressHUDImageIndicatorView.h in Headers */, + D0477D46C3DD962279EFF5B2F12F1AF0 /* JGProgressHUDIndeterminateIndicatorView.h in Headers */, + 29D3C32FA8D94D72F8CA17A7BF71D6A2 /* JGProgressHUDIndicatorView.h in Headers */, + EF1FC16B7CA83139B5EEA7126B41D50C /* JGProgressHUDPieIndicatorView.h in Headers */, + E530B8B1E005AA98DC2F881ED52BD8FA /* JGProgressHUDRingIndicatorView.h in Headers */, + 77D677CEC38D42F550F49703FE628637 /* JGProgressHUDShadow.h in Headers */, + CB0B97FE3CD3FB61A439E03135030147 /* JGProgressHUDSuccessIndicatorView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1862,11 +2018,11 @@ /* Begin PBXNativeTarget section */ 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 71AB6472704509F0C26E38DA84FCC5AC /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = B59E53A0A7C481101DA0493D6142FAD5 /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - 6909F05BA7EB1535EF422FEA6DEC62B9 /* Headers */, - FDB64F02F0C0D83EB94CC3C104E300F4 /* Sources */, - 56010F82DCF8418E579FA7835727DCF9 /* Frameworks */, + 5E74C5E67723334013364DCE9457F5C2 /* Headers */, + 3618C59949B4C3C33FC2A70D9D38B4B6 /* Sources */, + F0B1398EDCAB91B65B897FA987A25F2F /* Frameworks */, ); buildRules = ( ); @@ -1879,25 +2035,26 @@ }; 3F4313ADFA55C8C72E1677C4441CEA4E /* Pods-NiuPlayer */ = { isa = PBXNativeTarget; - buildConfigurationList = 4B015B870412581D34E4DE33A1E220E4 /* Build configuration list for PBXNativeTarget "Pods-NiuPlayer" */; + buildConfigurationList = DC5DC7CF9F5A74709E0C25A9D3042F16 /* Build configuration list for PBXNativeTarget "Pods-NiuPlayer" */; buildPhases = ( - 0396A8A548F667088EF59F37DD26A6B4 /* Headers */, - 42A30D7F8F93E43343228D08AD38ABD7 /* Sources */, - 5A1B21ACA99B88006AEC7C97FCFCBE6E /* Frameworks */, + 86035430F52EEE45C65368E705AD62FD /* Headers */, + 72E671E05AFE57C69ACA3F19635AE023 /* Sources */, + F2F4464578CF436B22964F257A551927 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 40D400A3B6A397C83BE328E980A87E4F /* PBXTargetDependency */, - CA8A375442AC8C438067C7FD6364401B /* PBXTargetDependency */, - 5BC5819735C01EE83AFBF1CE453E8F6B /* PBXTargetDependency */, - 345D9DC063C2418FABF5CAD990FA9DD8 /* PBXTargetDependency */, - 76CBCA00073B68071949584F77EEF1A9 /* PBXTargetDependency */, - 4909592D55D1C6F5437BFC6B78FB6487 /* PBXTargetDependency */, - 8F42B944026072F6F27F8249B5DCC81A /* PBXTargetDependency */, - 6595C90912E52A14DB53A9FF7B4E7695 /* PBXTargetDependency */, - 6426AAD4201D63AEF27A8A75511A149A /* PBXTargetDependency */, - 179FFBBE0799BDFB5C181F440A46B416 /* PBXTargetDependency */, + 64A590E58A386308A785C7BF35BE9847 /* PBXTargetDependency */, + B1D087BA33CC44B93E6392C58B839EAA /* PBXTargetDependency */, + 830670DE22541A5A3260C07858DE113E /* PBXTargetDependency */, + BAD7F44E45D274531C63AFC9C4DD8148 /* PBXTargetDependency */, + 45F968F2ED73C00E8EBC390872B27773 /* PBXTargetDependency */, + C84DE69897B51F2A7FA3CA70CB803284 /* PBXTargetDependency */, + 71C197AE4E593033A98603D87C542E20 /* PBXTargetDependency */, + 1EC759C6BCF225A346AF4F2F502E2DB4 /* PBXTargetDependency */, + B34A8169F8E897770F2B34059AA9C604 /* PBXTargetDependency */, + 50D93B17B2BCC84DC5DEF1495BA28BF9 /* PBXTargetDependency */, + C2FAE3CE00CC415AFE126DC0532AC782 /* PBXTargetDependency */, ); name = "Pods-NiuPlayer"; productName = "Pods-NiuPlayer"; @@ -1940,55 +2097,54 @@ }; 6F3964F174D0EBFB0D64F8DBC20E1429 /* JGProgressHUD */ = { isa = PBXNativeTarget; - buildConfigurationList = C468DC6EE2ACCFFED67A8909FEF17CB3 /* Build configuration list for PBXNativeTarget "JGProgressHUD" */; + buildConfigurationList = A3845EC4E66E2813912BB124ABA06C15 /* Build configuration list for PBXNativeTarget "JGProgressHUD" */; buildPhases = ( - E80DE4363DF298D650631AD18AE11D53 /* Headers */, - 07D1373EF5F8920FEBB75B18FE7E83EA /* Sources */, - EAE31FCE8FB8EC4CA1E07174D3B3492A /* Frameworks */, + FFFF9930FD335032748594A77448809B /* Headers */, + 3F77468F2C15E84C7A47268FFAC9E2B0 /* Sources */, + 0E15903B84E1B8D9EA00B69312557EC4 /* Frameworks */, ); buildRules = ( ); dependencies = ( - F0021F3B0BDE91E89D5BAEEDB7E762E2 /* PBXTargetDependency */, ); name = JGProgressHUD; productName = JGProgressHUD; productReference = 7FBAFAA66E9C7401884F439AE8BC662C /* libJGProgressHUD.a */; productType = "com.apple.product-type.library.static"; }; - B2777DC549C19A310651FBD3C87B71DF /* BlocksKit */ = { + 96F820A9CBD7912A405650AC238D1F8E /* HappyDNS */ = { isa = PBXNativeTarget; - buildConfigurationList = 6D91D6089D00E894E8BCFDE11942C585 /* Build configuration list for PBXNativeTarget "BlocksKit" */; + buildConfigurationList = 4E3ADD209947FC9AFD058B367A910FE6 /* Build configuration list for PBXNativeTarget "HappyDNS" */; buildPhases = ( - BDCAA58C3EAFAECD0AA5F775A8472FC1 /* Headers */, - 62F3421F2AD5EB520CD080C6A939D21B /* Sources */, - 83BDB1929F8CBA09366F031885B449C0 /* Frameworks */, + A3158B9A2A96C01F321F0B20909B1529 /* Headers */, + 8E9A4F8FF43C029414AF7BA540B1512A /* Sources */, + 3F926C1D855FCFC76FD477993125C3EB /* Frameworks */, ); buildRules = ( ); dependencies = ( ); - name = BlocksKit; - productName = BlocksKit; - productReference = 6F70BF603CE98579EE97E286801E741E /* libBlocksKit.a */; + name = HappyDNS; + productName = HappyDNS; + productReference = 3667B5F6798CDC2ADA1BBC70D052FF68 /* libHappyDNS.a */; productType = "com.apple.product-type.library.static"; }; - BBD6B43FA0F7FFBCD1978EBE76F99021 /* JGProgressHUD-JGProgressHUD */ = { + B2777DC549C19A310651FBD3C87B71DF /* BlocksKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 062F5639536FBBC6A909DCFF5813E631 /* Build configuration list for PBXNativeTarget "JGProgressHUD-JGProgressHUD" */; + buildConfigurationList = 6D91D6089D00E894E8BCFDE11942C585 /* Build configuration list for PBXNativeTarget "BlocksKit" */; buildPhases = ( - 68ADA1B6FD21D09106828DEE0CD4F560 /* Sources */, - 4936B03FDD45D7D594CD0E4044272298 /* Frameworks */, - F05AD8589EDCCFF6489E420483339B27 /* Resources */, + BDCAA58C3EAFAECD0AA5F775A8472FC1 /* Headers */, + 62F3421F2AD5EB520CD080C6A939D21B /* Sources */, + 83BDB1929F8CBA09366F031885B449C0 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); - name = "JGProgressHUD-JGProgressHUD"; - productName = "JGProgressHUD-JGProgressHUD"; - productReference = 50BFFE42053E6D006359F73E08370CE1 /* JGProgressHUD.bundle */; - productType = "com.apple.product-type.bundle"; + name = BlocksKit; + productName = BlocksKit; + productReference = 6F70BF603CE98579EE97E286801E741E /* libBlocksKit.a */; + productType = "com.apple.product-type.library.static"; }; BDC8B0769B39E03BE257939D6FD4D966 /* Bugsnag */ = { isa = PBXNativeTarget; @@ -2025,7 +2181,7 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = B151A40795A023B31776A25F2537E535 /* Products */; + productRefGroup = FCBBB7209DF2E1332E44CFCAF47FC7A0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -2033,8 +2189,8 @@ BDC8B0769B39E03BE257939D6FD4D966 /* Bugsnag */, C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */, ABB048B191245233986A7CD75FE412A5 /* Fabric */, + 96F820A9CBD7912A405650AC238D1F8E /* HappyDNS */, 6F3964F174D0EBFB0D64F8DBC20E1429 /* JGProgressHUD */, - BBD6B43FA0F7FFBCD1978EBE76F99021 /* JGProgressHUD-JGProgressHUD */, 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */, 42DEC9A4B20265DB1DB1D22459F80C88 /* MMMaterialDesignSpinner */, 08D1C32F3760C018544DDB02B1C53A5B /* PLPlayerKit */, @@ -2045,22 +2201,6 @@ }; /* End PBXProject section */ -/* Begin PBXResourcesBuildPhase section */ - F05AD8589EDCCFF6489E420483339B27 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9393A92981C2BDEB9D93FC5E5908F2BA /* jg_hud_error.png in Resources */, - 1AF5A2CA3BFE4BBD2683A09368AB04CA /* jg_hud_error@2x.png in Resources */, - 1CEAF7F3840338E3FE8CD251A52676FE /* jg_hud_error@3x.png in Resources */, - D341EB7564008E9F378546B126D77BA6 /* jg_hud_success.png in Resources */, - E6975377FD7BC094C083B7BD075295EC /* jg_hud_success@2x.png in Resources */, - 5D64B327957D3C9ED422E0E5D7927F45 /* jg_hud_success@3x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - /* Begin PBXShellScriptBuildPhase section */ B1A6EC4175CCE4699E70493FFCF040A8 /* [CP] Copy dSYMs */ = { isa = PBXShellScriptBuildPhase; @@ -2148,31 +2288,57 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 07D1373EF5F8920FEBB75B18FE7E83EA /* Sources */ = { + 3618C59949B4C3C33FC2A70D9D38B4B6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8DB190AA4FD42F8FE82CA546DD993278 /* JGProgressHUD-dummy.m in Sources */, - 8E2C245D3A4018152ADBD695CF3615C9 /* JGProgressHUD.m in Sources */, - 28993023A3BD4B130979AFDDB3309919 /* JGProgressHUDAnimation.m in Sources */, - 1F4AFDBC50504674A540A995D133BD1C /* JGProgressHUDErrorIndicatorView.m in Sources */, - A128A717E5FB23615B23F9573194F13C /* JGProgressHUDFadeAnimation.m in Sources */, - 795C99BAFED525CFB87DA37FC7A6D6F1 /* JGProgressHUDFadeZoomAnimation.m in Sources */, - 44525D642D73E061061CA5EE1C2D243E /* JGProgressHUDImageIndicatorView.m in Sources */, - 15A814B06A4C85887A01127E0AA1BB38 /* JGProgressHUDIndeterminateIndicatorView.m in Sources */, - 028EEB5ACE866E83B3336986C80D0774 /* JGProgressHUDIndicatorView.m in Sources */, - EBE44FF8CC7104B2ECE9D4DDE51AC55C /* JGProgressHUDPieIndicatorView.m in Sources */, - 45732E628768FC16BC30C873C827D17F /* JGProgressHUDRingIndicatorView.m in Sources */, - 154F6E32FBC177C5B3F773375D0A0C1A /* JGProgressHUDShadow.m in Sources */, - 723CBF81D639C8A971362B398FA3715E /* JGProgressHUDSuccessIndicatorView.m in Sources */, + 7E644708F5AD28C42318E938E4452C97 /* NSButton+WebCache.m in Sources */, + 495E49D3CCDC64C83A7CDBF0B73F6D68 /* NSData+ImageContentType.m in Sources */, + 8F606A5D4F1892FEF2F9D2046AEF17E7 /* NSImage+WebCache.m in Sources */, + DDDA2FCBB5D54C95AEDC69F9715CBFB9 /* SDAnimatedImageRep.m in Sources */, + 33A53F28EA81B362E5E7F018F0404E0A /* SDImageCache.m in Sources */, + EC72EF71E479531B589177FC24982337 /* SDImageCacheConfig.m in Sources */, + 4B4B739D14FC44D074028F4C7794C9A9 /* SDWebImage-dummy.m in Sources */, + C36AF4971FA49B7FD07698261293ED42 /* SDWebImageCoder.m in Sources */, + 07702EEAFD6B169408E7F3AE2A6E8496 /* SDWebImageCoderHelper.m in Sources */, + D2028FCA260D365DDB7A71DBE3CD2DC6 /* SDWebImageCodersManager.m in Sources */, + 74DA42EF86292B141E81C58CDE7C2B1B /* SDWebImageCompat.m in Sources */, + A1AFAAE75F22E56B1C810E1A57478260 /* SDWebImageDownloader.m in Sources */, + 548192417DAC873811C188696BBD9726 /* SDWebImageDownloaderOperation.m in Sources */, + 36DC10168C47541965B6315E6E575DEA /* SDWebImageFrame.m in Sources */, + AF21EAA02BCD50A6CE3D9EA2D6FFEE11 /* SDWebImageGIFCoder.m in Sources */, + 0ACF2D79B0EBF54060209094BE9E0E22 /* SDWebImageImageIOCoder.m in Sources */, + 7ED5F70ACDBE0FE90105F8F66AEE8D8B /* SDWebImageManager.m in Sources */, + 301CD9395E474DE10CF30B1582E1193A /* SDWebImagePrefetcher.m in Sources */, + E9F701052509F2C006E98FC917C2E223 /* SDWebImageTransition.m in Sources */, + 6D44E0EDF2D4ACB4B54D422E2CDFAD2B /* UIButton+WebCache.m in Sources */, + C755FF91CFC68C381A8BFEFD5088D979 /* UIImage+ForceDecode.m in Sources */, + 60A17B4467BB8BEFCD0ABD01EFC0A06D /* UIImage+GIF.m in Sources */, + 996BB4B6535B54ECC0878ABC3F89F011 /* UIImage+MultiFormat.m in Sources */, + 6FE1AE688036B71B8FC50037CB465F32 /* UIImageView+HighlightedWebCache.m in Sources */, + F2E595DF94B71C173F77B018B71A29FD /* UIImageView+WebCache.m in Sources */, + FC059126654AB27E3761FE608D4BABB7 /* UIView+WebCache.m in Sources */, + A9A1C0ADA881C69815BC3F5DC2241CED /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 42A30D7F8F93E43343228D08AD38ABD7 /* Sources */ = { + 3F77468F2C15E84C7A47268FFAC9E2B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 647B7813FC7054DF4E4D55D4A2689B50 /* Pods-NiuPlayer-dummy.m in Sources */, + B565D20FFFDF5BA5314FBDB509ED3F10 /* JGProgressHUD-dummy.m in Sources */, + 5D1BD25F663E0E724A47A9355D99CDAD /* JGProgressHUD.m in Sources */, + 61901D7FDADE440505CF633B509D5634 /* JGProgressHUDAnimation.m in Sources */, + 53319C5F3954BDA130A0D885F98006DE /* JGProgressHUDErrorIndicatorView.m in Sources */, + 18B3EBAE7752464C071BCDA47219B012 /* JGProgressHUDFadeAnimation.m in Sources */, + CE820E09C747DD81D44FBA22131AA804 /* JGProgressHUDFadeZoomAnimation.m in Sources */, + 7D7BC056B92D37583CDF5F54B1C39ECE /* JGProgressHUDImageIndicatorView.m in Sources */, + D5C8A60277EDCFDCE94A423B96453FE6 /* JGProgressHUDIndeterminateIndicatorView.m in Sources */, + 668C4A1BDE1639CC44C8542A89A8F988 /* JGProgressHUDIndicatorView.m in Sources */, + F4B43F05E54ED2E1838BD8BB4A8D4184 /* JGProgressHUDPieIndicatorView.m in Sources */, + A326795A61B5D035EAE422D71E01AF0F /* JGProgressHUDRingIndicatorView.m in Sources */, + 0E52BE6B0A1B2BB2D82B4B6A349798DB /* JGProgressHUDShadow.m in Sources */, + 697BEA2E5C767E5E2286411EE41A0915 /* JGProgressHUDSuccessIndicatorView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2217,10 +2383,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 68ADA1B6FD21D09106828DEE0CD4F560 /* Sources */ = { + 72E671E05AFE57C69ACA3F19635AE023 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 07B6097D466E51148D861CAA0ABE119F /* Pods-NiuPlayer-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2251,122 +2418,114 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FDB64F02F0C0D83EB94CC3C104E300F4 /* Sources */ = { + 8E9A4F8FF43C029414AF7BA540B1512A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1755177738D6F76381C9999427850312 /* NSButton+WebCache.m in Sources */, - 84F90E3012A7158B7156C4B8F98EE131 /* NSData+ImageContentType.m in Sources */, - 3A6E5D4182DC44657A7218493AD57CC2 /* NSImage+WebCache.m in Sources */, - 8E5A46521570CBA695B44A8DA38A76DC /* SDAnimatedImageRep.m in Sources */, - 0CCF5878EA61DD56C85170DF74652612 /* SDImageCache.m in Sources */, - A833E130A32E2F81A3B12A4AE2A07A91 /* SDImageCacheConfig.m in Sources */, - 86EA955E7F9B22DCD3E5572CA5953CFB /* SDWebImage-dummy.m in Sources */, - B371D7E62B43EEDABCA8402415C25B4F /* SDWebImageCoder.m in Sources */, - 2CF40E58CA3070F2203187427FF7F0A9 /* SDWebImageCoderHelper.m in Sources */, - D72849B1031F5DFCB8B038FAF9897276 /* SDWebImageCodersManager.m in Sources */, - E249E83E634EF9A2CB5475CC235EED62 /* SDWebImageCompat.m in Sources */, - 7DEE05613957AB564750D40734A5E442 /* SDWebImageDownloader.m in Sources */, - D7A644E667989A1602312D4F113B6332 /* SDWebImageDownloaderOperation.m in Sources */, - 1C2902B4AAF4635316A1E88E50D47809 /* SDWebImageFrame.m in Sources */, - 19D58082E795C97857E3DC04247F406F /* SDWebImageGIFCoder.m in Sources */, - ED19552EEEA44864572081170C8CDDDA /* SDWebImageImageIOCoder.m in Sources */, - 93FA26AA00D38C7FC5F94698FAF024D6 /* SDWebImageManager.m in Sources */, - 2A4586473C09CB0CD00BC81C4490C58C /* SDWebImagePrefetcher.m in Sources */, - 8EEBE63DB02D88EB72B5077E527334BA /* SDWebImageTransition.m in Sources */, - BA575740B77696CFFA157A58D53C73C2 /* UIButton+WebCache.m in Sources */, - 1E6904A86932F48DB44E6319120368FD /* UIImage+ForceDecode.m in Sources */, - 56868D2C124DC00081C00B04E3869D7A /* UIImage+GIF.m in Sources */, - C4C06A6682BA6ABD2B27E6D2F0D4CA3F /* UIImage+MemoryCacheCost.m in Sources */, - 538DEEF083E2649D010770A08F43FC24 /* UIImage+MultiFormat.m in Sources */, - 427E03FBB7F5978384C6C10FD9EEF2E1 /* UIImageView+HighlightedWebCache.m in Sources */, - C1AD020D7E0089850DDC6CE9FE5D1525 /* UIImageView+WebCache.m in Sources */, - B866622FCF22B732D54DB1FE57535419 /* UIView+WebCache.m in Sources */, - 37FFE933E50E2D3C4920BC07C537DB4F /* UIView+WebCacheOperation.m in Sources */, + 7F7CAC52ABAA6B84BA89293212B9F451 /* HappyDNS-dummy.m in Sources */, + 330BECC87EA32D3408CE1B17820CC61E /* QNAssessment.m in Sources */, + 16029AA85DB9F344F3FD340B8159B01D /* QNDes.m in Sources */, + 7DC27B0AE3EBD7836F185C5BD841DFCB /* QNDnsManager.m in Sources */, + 33C592BF2AAD63D0C5E8374A1704F759 /* QNDnspodEnterprise.m in Sources */, + F937F6E5793327A85747214E9B2642D7 /* QNDnspodFree.m in Sources */, + 80F74BA39D5BD2509C49D1F283B008A7 /* QNDomain.m in Sources */, + C18CFE69E0418BF129C9CA7F4C2A3AE3 /* QNGetAddrInfo.m in Sources */, + 2B958E1096BA7BF0F09563D13E8010D7 /* QNHex.m in Sources */, + AF0DA335690D173C179A97DBF167E85F /* QNHijackingDetectWrapper.m in Sources */, + 0241A54F2A2904627B84D1DC71F3FC62 /* QNHosts.m in Sources */, + 581A9CC2236AEA214222BE73ADC1D723 /* QNIP.m in Sources */, + A9DFFDDA43CB8D7014C56FEF218883A7 /* QNIpModel.m in Sources */, + 00BCB07C613265F33E21BCFD801CCF64 /* QNLruCache.m in Sources */, + DD9EEF86FCFDB4130D87A622164BA5CF /* QNNetworkInfo.m in Sources */, + B294B487389725262AC7DFD72A1691D6 /* QNRecord.m in Sources */, + 32D10FE89467BA831C126234BB9EE669 /* QNRefresher.m in Sources */, + F670C7D7A113FD39CB4416E64D52A249 /* QNResolver.m in Sources */, + 1F120D42DDB29AA19CCD90E74278B50E /* QNResolvUtil.m in Sources */, + 516BA21F6267301F5FB39989A3D91B2C /* QNTxtResolver.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 179FFBBE0799BDFB5C181F440A46B416 /* PBXTargetDependency */ = { + 1EC759C6BCF225A346AF4F2F502E2DB4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = WeiboSDK; - target = C6E91171266BAC1C56880BC4814260AA /* WeiboSDK */; - targetProxy = B33BDFAEAB1927E3D0463DBBAFE63ADC /* PBXContainerItemProxy */; + name = Masonry; + target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; + targetProxy = 48B9BD23C11630951C70ED05B521F1D4 /* PBXContainerItemProxy */; }; - 345D9DC063C2418FABF5CAD990FA9DD8 /* PBXTargetDependency */ = { + 45F968F2ED73C00E8EBC390872B27773 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; - targetProxy = 65C0E8C2D4913B2267242F6095C9C5C7 /* PBXContainerItemProxy */; + name = HappyDNS; + target = 96F820A9CBD7912A405650AC238D1F8E /* HappyDNS */; + targetProxy = 7522A9BE701FC9A177B5B9E72D19DE0C /* PBXContainerItemProxy */; }; - 40D400A3B6A397C83BE328E980A87E4F /* PBXTargetDependency */ = { + 50D93B17B2BCC84DC5DEF1495BA28BF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = BlocksKit; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 577ED207D2EA03264D9E12BE0C091082 /* PBXContainerItemProxy */; + }; + 51751B4D15A242332954D9BF50C3034A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Fabric; + target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; + targetProxy = E7A4E0D9EAD18C0CE7A7550D9BDF8DBF /* PBXContainerItemProxy */; + }; + 64A590E58A386308A785C7BF35BE9847 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BlocksKit; target = B2777DC549C19A310651FBD3C87B71DF /* BlocksKit */; - targetProxy = 30024B75A7B24537CDB65321FF082442 /* PBXContainerItemProxy */; + targetProxy = F140C765399CD31755F4117EE7D76A54 /* PBXContainerItemProxy */; }; - 4909592D55D1C6F5437BFC6B78FB6487 /* PBXTargetDependency */ = { + 71C197AE4E593033A98603D87C542E20 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MMMaterialDesignSpinner; target = 42DEC9A4B20265DB1DB1D22459F80C88 /* MMMaterialDesignSpinner */; - targetProxy = FBBA954CF0B0E79D76D6ACC7536A6BB0 /* PBXContainerItemProxy */; + targetProxy = C89A34585B589444540952C7197E3CC9 /* PBXContainerItemProxy */; }; - 5BC5819735C01EE83AFBF1CE453E8F6B /* PBXTargetDependency */ = { + 830670DE22541A5A3260C07858DE113E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Crashlytics; target = C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */; - targetProxy = 5A4998DEA87BF35412544B91D0645F4D /* PBXContainerItemProxy */; + targetProxy = A006E09F5F1C46C0AB99BD310B851BED /* PBXContainerItemProxy */; }; - 6426AAD4201D63AEF27A8A75511A149A /* PBXTargetDependency */ = { + B1D087BA33CC44B93E6392C58B839EAA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = E42DAFA2E0A7C6F9E69ABF286F421E8F /* PBXContainerItemProxy */; + name = Bugsnag; + target = BDC8B0769B39E03BE257939D6FD4D966 /* Bugsnag */; + targetProxy = 33799E8F7C28982DA974A928942291A2 /* PBXContainerItemProxy */; }; - 6595C90912E52A14DB53A9FF7B4E7695 /* PBXTargetDependency */ = { + B34A8169F8E897770F2B34059AA9C604 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = PLPlayerKit; target = 08D1C32F3760C018544DDB02B1C53A5B /* PLPlayerKit */; - targetProxy = CE2F8856CCC01B73BDD242D693FC4826 /* PBXContainerItemProxy */; - }; - 76CBCA00073B68071949584F77EEF1A9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JGProgressHUD; - target = 6F3964F174D0EBFB0D64F8DBC20E1429 /* JGProgressHUD */; - targetProxy = 663D807ACAB105DA98451FAB51471A2A /* PBXContainerItemProxy */; + targetProxy = C1BF76B013C67AA8F06425CFA8B03BC3 /* PBXContainerItemProxy */; }; - 890902425D576DA3A0E89615D35D8697 /* PBXTargetDependency */ = { + BAD7F44E45D274531C63AFC9C4DD8148 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Fabric; target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; - targetProxy = FDC0D4BF4C069C66A4CAA7C84FF27B41 /* PBXContainerItemProxy */; + targetProxy = 19880FDF334D7DA45A062F215129340F /* PBXContainerItemProxy */; }; - 8F42B944026072F6F27F8249B5DCC81A /* PBXTargetDependency */ = { + C2FAE3CE00CC415AFE126DC0532AC782 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Masonry; - target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = B6E8A4AC3A780A9D3F31211798294E90 /* PBXContainerItemProxy */; - }; - CA8A375442AC8C438067C7FD6364401B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bugsnag; - target = BDC8B0769B39E03BE257939D6FD4D966 /* Bugsnag */; - targetProxy = 0402F497AFC319A782CFB5A93D036911 /* PBXContainerItemProxy */; + name = WeiboSDK; + target = C6E91171266BAC1C56880BC4814260AA /* WeiboSDK */; + targetProxy = E4EBE5A5614696E114B033E8836473D1 /* PBXContainerItemProxy */; }; - F0021F3B0BDE91E89D5BAEEDB7E762E2 /* PBXTargetDependency */ = { + C84DE69897B51F2A7FA3CA70CB803284 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "JGProgressHUD-JGProgressHUD"; - target = BBD6B43FA0F7FFBCD1978EBE76F99021 /* JGProgressHUD-JGProgressHUD */; - targetProxy = 0D240BB8B40B9FF0D75E59F148B466BB /* PBXContainerItemProxy */; + name = JGProgressHUD; + target = 6F3964F174D0EBFB0D64F8DBC20E1429 /* JGProgressHUD */; + targetProxy = C0D46A3D2876328691836D3FBA0521F2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 05B8A3B122BAC80AEE34371C0A8C56CD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 544255DFB762AF37B4DA6CC99021984C /* MMMaterialDesignSpinner.release.xcconfig */; + baseConfigurationReference = D7E2DA1B3E8775161A74CB487AB40ABB /* MMMaterialDesignSpinner.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2389,7 +2548,7 @@ }; 1259209FA135B7987FE13C60C2A29D8E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F5241E0C002955AFA851071B4E58EEE /* Bugsnag.debug.xcconfig */; + baseConfigurationReference = 5D4459B12A285FF72F4E346D10C2CF84 /* Bugsnag.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2409,22 +2568,9 @@ }; name = Debug; }; - 159A318D2372D02302411D90C2598412 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D5DC846B2979A4B275943C7BC1F887CF /* Fabric.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 338E6FFEA81AB1FA90F5FE410B63C2EF /* Release */ = { + 26C125FD0B3D739C253FE3361D047D50 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D3B1D9886EB88B8424404EB63C9F54E1 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 88D0841F433ED344339107D1F07E8CE1 /* SDWebImage.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2447,7 +2593,7 @@ }; 360C80658313B3B1FC4F8F5CFE08107C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 01ECD6C8D7A21FFA3A1EED987D0C13D0 /* WeiboSDK.debug.xcconfig */; + baseConfigurationReference = 20FFCD27F5632259BCCA3F5C8B9646C9 /* WeiboSDK.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -2461,7 +2607,7 @@ }; 38157752B0C08F9285B88B5D1BD95926 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4D2BA0DD2586DFB9B22762A8DA0CF877 /* Masonry.debug.xcconfig */; + baseConfigurationReference = D817009EC2CE35FFD1C2AC77D5EED614 /* Masonry.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2495,25 +2641,45 @@ }; name = Release; }; - 509A75EF16B0FBD0CEE36B5E4D04750B /* Release */ = { + 4C7F6D3D76EA88E732AD312F58892839 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8405CAA45D701BA126F8C74E49398779 /* JGProgressHUD.release.xcconfig */; + baseConfigurationReference = 952C1EF16B573E5526B42AAB955F31BC /* Crashlytics.release.xcconfig */; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/JGProgressHUD"; - IBSC_MODULE = JGProgressHUD; - INFOPLIST_FILE = "Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4CFDBAAE67EE09936B7435D637D0E6BC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A608F819BBF2516D13EFEC9F890FA3DA /* JGProgressHUD.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/JGProgressHUD/JGProgressHUD-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = JGProgressHUD; PRODUCT_NAME = JGProgressHUD; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 592E5B614ABF37D01A2E69886E0A54A0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F0B161E828663A415322FC8E730218B5 /* Bugsnag.release.xcconfig */; + baseConfigurationReference = 6B9BCFCDF61D18089AB6A8F19CE4623D /* Bugsnag.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2534,63 +2700,110 @@ }; name = Release; }; - 5B60A66215F22B26C7C0832579899408 /* Release */ = { + 5CE6F49CA900338CD15302FAC4F398B9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4DA0497AB46139323DDC4D38E9AA7370 /* Fabric.release.xcconfig */; + baseConfigurationReference = 13A25BF310A9922485F7539D1B301E4B /* Masonry.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Masonry; + PRODUCT_NAME = Masonry; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 5CE6F49CA900338CD15302FAC4F398B9 /* Release */ = { + 5F5EE407D19911F22366B9D7EE1D1977 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A03648EDA932A07C6D110CBB704350C0 /* Masonry.release.xcconfig */; + baseConfigurationReference = B05BAFC886498B61737E74D472347D8B /* HappyDNS.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/HappyDNS/HappyDNS-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Masonry; - PRODUCT_NAME = Masonry; + PRODUCT_MODULE_NAME = HappyDNS; + PRODUCT_NAME = HappyDNS; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 6BCD78D8E1F8988A7687F17679599BBC /* Debug */ = { + 61A020A8CAC8BFF8512DC6E9BE22E559 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4881B23B5EA7B0808A76BB7AFABDA897 /* Pods-NiuPlayer.debug.xcconfig */; + baseConfigurationReference = F34FAC61BDD922D3E93DA14D6968AD89 /* SDWebImage.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; + 6A213BC7EF330A19B13857E2BA15A91C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C3778B965B1FBD46B8E08BCB11306ED0 /* JGProgressHUD.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/JGProgressHUD/JGProgressHUD-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = JGProgressHUD; + PRODUCT_NAME = JGProgressHUD; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6BA2A2D39BC12C81EF7B7FCFF4ED9E73 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B7E2DD1B1376C42C9B0796AFC2C97134 /* Fabric.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 6D42DC62C4F2E194221DF89C48496C98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2653,90 +2866,22 @@ }; name = Release; }; - 77C4DAB097C9232CD2F0587E4F3D55B8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9971BBE63FD57412E8265284AACA6496 /* SDWebImage.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 78EADD840C5191397D2E089EBACE4CD3 /* Release */ = { + 73C7C213995FAB4C1A8FEC5AF47FE3C0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 184786EA9ECBAD604F4AE579CC8DA11E /* Crashlytics.release.xcconfig */; + baseConfigurationReference = 6E98E1045DE756DC9CA9B42C7451A390 /* Fabric.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 84F1FDD5FA3C1184312D4874CC66F0AE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E2E63C3FAB1AC79E806E5818474F2195 /* JGProgressHUD.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/JGProgressHUD/JGProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = JGProgressHUD; - PRODUCT_NAME = JGProgressHUD; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 90BD93FC0C99D48C170E3682C47BC344 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8405CAA45D701BA126F8C74E49398779 /* JGProgressHUD.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/JGProgressHUD/JGProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = JGProgressHUD; - PRODUCT_NAME = JGProgressHUD; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 933BDFFAB2CB6927C5FF529AB9DF6AEF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4A8990C9673D8FE04B533BF7387931C4 /* WeiboSDK.release.xcconfig */; + baseConfigurationReference = A1748B2E1D1C224082E1798D981490A0 /* WeiboSDK.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -2751,7 +2896,7 @@ }; 9982CDD6405E3F9F03E6E0949549B952 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3ACFC6182E8311AD65CC6887B610B39A /* MMMaterialDesignSpinner.debug.xcconfig */; + baseConfigurationReference = FACC08B90B3E576C3058A986D8D8FB7F /* MMMaterialDesignSpinner.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2771,25 +2916,9 @@ }; name = Debug; }; - 9AF1DEB78A1FBB6A536572839D4231E1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E2E63C3FAB1AC79E806E5818474F2195 /* JGProgressHUD.debug.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/JGProgressHUD"; - IBSC_MODULE = JGProgressHUD; - INFOPLIST_FILE = "Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = JGProgressHUD; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 9F7596E576852556F527900E4EAC64C5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D03EB06A4B764716299A31A2CCD7B41D /* BlocksKit.release.xcconfig */; + baseConfigurationReference = 0B474BC1F42C23E47A3B6CE3AD6AC53B /* BlocksKit.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2812,7 +2941,7 @@ }; A3142E87A8ECB783342E46F1E541C6E8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9BAA6E0CA29E109AF54AD7E80A8BFF1B /* BlocksKit.debug.xcconfig */; + baseConfigurationReference = 4CE9090F75ECCC26074FD48BC578794B /* BlocksKit.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2832,7 +2961,27 @@ }; name = Debug; }; - C90E63E85C05161342B99E5CEDF5C80B /* Release */ = { + A6109B0D9224628C39B41DD70B625D64 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4881B23B5EA7B0808A76BB7AFABDA897 /* Pods-NiuPlayer.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C4E2BA2873D8D91DF0EF9B2A09171C81 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 77307EDD0583406D474CD905FC4C0C5C /* Pods-NiuPlayer.release.xcconfig */; buildSettings = { @@ -2853,6 +3002,19 @@ }; name = Release; }; + CE3412696E382D9F42C8B567DDA004B8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 550AC9BC81D38C6F1F798A7C1C86A6ED /* Crashlytics.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; DF1919CB695A30925FA88E5EA23039EA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3379568A644091C9EA3E5621263FE541 /* PLPlayerKit.debug.xcconfig */; @@ -2932,31 +3094,32 @@ }; name = Debug; }; - EE4B61CB33FFFD9A6BBBAD227A7D8424 /* Debug */ = { + F3BF5361022112AC869C3DE45691E09A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 09DED3E0F18DF6E7FE74FA315C904F27 /* Crashlytics.debug.xcconfig */; + baseConfigurationReference = 37E3F69DAAADC740030A5924ABF51FFF /* HappyDNS.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/HappyDNS/HappyDNS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = HappyDNS; + PRODUCT_NAME = HappyDNS; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 062F5639536FBBC6A909DCFF5813E631 /* Build configuration list for PBXNativeTarget "JGProgressHUD-JGProgressHUD" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9AF1DEB78A1FBB6A536572839D4231E1 /* Debug */, - 509A75EF16B0FBD0CEE36B5E4D04750B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 0B9F7EAACDDA564EC328F53A4AB8CF85 /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2978,8 +3141,8 @@ 2FD49999DA0C737E43F6B26D46E2798D /* Build configuration list for PBXAggregateTarget "Crashlytics" */ = { isa = XCConfigurationList; buildConfigurations = ( - EE4B61CB33FFFD9A6BBBAD227A7D8424 /* Debug */, - 78EADD840C5191397D2E089EBACE4CD3 /* Release */, + CE3412696E382D9F42C8B567DDA004B8 /* Debug */, + 4C7F6D3D76EA88E732AD312F58892839 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3002,11 +3165,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4B015B870412581D34E4DE33A1E220E4 /* Build configuration list for PBXNativeTarget "Pods-NiuPlayer" */ = { + 4E3ADD209947FC9AFD058B367A910FE6 /* Build configuration list for PBXNativeTarget "HappyDNS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6BCD78D8E1F8988A7687F17679599BBC /* Debug */, - C90E63E85C05161342B99E5CEDF5C80B /* Release */, + 5F5EE407D19911F22366B9D7EE1D1977 /* Debug */, + F3BF5361022112AC869C3DE45691E09A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3020,38 +3183,47 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 71AB6472704509F0C26E38DA84FCC5AC /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 73FAB66EA93579C69ED9EB71E94C2B72 /* Build configuration list for PBXAggregateTarget "Fabric" */ = { isa = XCConfigurationList; buildConfigurations = ( - 77C4DAB097C9232CD2F0587E4F3D55B8 /* Debug */, - 338E6FFEA81AB1FA90F5FE410B63C2EF /* Release */, + 73C7C213995FAB4C1A8FEC5AF47FE3C0 /* Debug */, + 6BA2A2D39BC12C81EF7B7FCFF4ED9E73 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C38207C65B0EEA424D2295955B52D918 /* Build configuration list for PBXAggregateTarget "WeiboSDK" */ = { + A3845EC4E66E2813912BB124ABA06C15 /* Build configuration list for PBXNativeTarget "JGProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - 360C80658313B3B1FC4F8F5CFE08107C /* Debug */, - 933BDFFAB2CB6927C5FF529AB9DF6AEF /* Release */, + 4CFDBAAE67EE09936B7435D637D0E6BC /* Debug */, + 6A213BC7EF330A19B13857E2BA15A91C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C468DC6EE2ACCFFED67A8909FEF17CB3 /* Build configuration list for PBXNativeTarget "JGProgressHUD" */ = { + B59E53A0A7C481101DA0493D6142FAD5 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84F1FDD5FA3C1184312D4874CC66F0AE /* Debug */, - 90BD93FC0C99D48C170E3682C47BC344 /* Release */, + 61A020A8CAC8BFF8512DC6E9BE22E559 /* Debug */, + 26C125FD0B3D739C253FE3361D047D50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C38207C65B0EEA424D2295955B52D918 /* Build configuration list for PBXAggregateTarget "WeiboSDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 360C80658313B3B1FC4F8F5CFE08107C /* Debug */, + 933BDFFAB2CB6927C5FF529AB9DF6AEF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D7F975E449170F809EF2F23DFD07B707 /* Build configuration list for PBXAggregateTarget "Fabric" */ = { + DC5DC7CF9F5A74709E0C25A9D3042F16 /* Build configuration list for PBXNativeTarget "Pods-NiuPlayer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 159A318D2372D02302411D90C2598412 /* Debug */, - 5B60A66215F22B26C7C0832579899408 /* Release */, + A6109B0D9224628C39B41DD70B625D64 /* Debug */, + C4E2BA2873D8D91DF0EF9B2A09171C81 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/new/Pods/SDWebImage/README.md b/Example/new/Pods/SDWebImage/README.md index 3328f5d..6976eca 100644 --- a/Example/new/Pods/SDWebImage/README.md +++ b/Example/new/Pods/SDWebImage/README.md @@ -1,14 +1,16 @@ -

+

-[![Build Status](http://img.shields.io/travis/SDWebImage/SDWebImage/master.svg?style=flat)](https://travis-ci.org/SDWebImage/SDWebImage) +[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage) [![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) [![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) [![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/SDWebImage/SDWebImage) -[![codecov](https://codecov.io/gh/SDWebImage/SDWebImage/branch/master/graph/badge.svg)](https://codecov.io/gh/SDWebImage/SDWebImage) +[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage) +[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage) +[![codecov](https://codecov.io/gh/rs/SDWebImage/branch/master/graph/badge.svg)](https://codecov.io/gh/rs/SDWebImage) This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like `UIImageView`, `UIButton`, `MKAnnotationView`. @@ -28,13 +30,6 @@ This library provides an async image downloader with cache support. For convenie - Image formats supported by UIImage (JPEG, PNG, ...), including GIF - WebP format, including animated WebP (use the `WebP` subspec) -- Support extendable coder plugins for new image formats. Like APNG, BPG, HFIF, SVG, etc. See all the list in [Image coder plugin List](https://github.com/SDWebImage/SDWebImage/wiki/Coder-Plugin-List) - -## Beta version - -SDWebImage's 5.0 version is nearing completion. Which introduce many new features like Animated ImageView and Transformer. We also provide a more modularized design used for advanced user customization. - -You can check the latest [5.x branch](https://github.com/SDWebImage/SDWebImage/tree/5.x) to know about the current status. We'd love you to have a try with the beta version and provide any feedback. If you'd love, check [SDWebImage 5.0 Migration Guide](https://github.com/SDWebImage/SDWebImage/wiki/5.0-Migration-guide) and prepare for the migration. ## Requirements @@ -46,22 +41,22 @@ You can check the latest [5.x branch](https://github.com/SDWebImage/SDWebImage/t #### Backwards compatibility -- For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/SDWebImage/SDWebImage/tree/3.7.6) -- For iOS < 5.0, please use the last [2.0 version](https://github.com/SDWebImage/SDWebImage/tree/2.0-compat). +- For iOS 5 and 6, use [any 3.x version up to 3.7.6](https://github.com/rs/SDWebImage/tree/3.7.6) +- For iOS < 5.0, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat). ## Getting Started - Read this Readme doc -- Read the [How to use section](https://github.com/SDWebImage/SDWebImage#how-to-use) +- Read the [How to use section](https://github.com/rs/SDWebImage#how-to-use) - Read the [Documentation @ CocoaDocs](http://cocoadocs.org/docsets/SDWebImage/) - Try the example by downloading the project from Github or even easier using CocoaPods try `pod try SDWebImage` -- Read the [Installation Guide](https://github.com/SDWebImage/SDWebImage/wiki/Installation-Guide) +- Read the [Installation Guide](https://github.com/rs/SDWebImage/wiki/Installation-Guide) - Read the [SDWebImage 4.0 Migration Guide](Docs/SDWebImage-4.0-Migration-guide.md) to get an idea of the changes from 3.x to 4.x -- Read the [Common Problems](https://github.com/SDWebImage/SDWebImage/wiki/Common-Problems) to find the solution for common problems -- Go to the [Wiki Page](https://github.com/SDWebImage/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage) +- Read the [Common Problems](https://github.com/rs/SDWebImage/wiki/Common-Problems) to find the solution for common problems +- Go to the [Wiki Page](https://github.com/rs/SDWebImage/wiki) for more information such as [Advanced Usage](https://github.com/rs/SDWebImage/wiki/Advanced-Usage) ## Who Uses It -- Find out [who uses SDWebImage](https://github.com/SDWebImage/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list. +- Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list. ## Communication @@ -97,7 +92,7 @@ imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg - Starting with the 4.0 version, we rely on [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) to take care of our animated images. - If you use cocoapods, add `pod 'SDWebImage/GIF'` to your podfile. - To use it, simply make sure you use `FLAnimatedImageView` instead of `UIImageView`. -- **Note**: there is a backwards compatible feature, so if you are still trying to load a GIF into a `UIImageView`, it will only show the 1st frame as a static image by default. However, you can enable the full GIF support by using the built-in GIF coder. See [GIF coder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#gif-coder) +- **Note**: there is a backwards compatible feature, so if you are still trying to load a GIF into a `UIImageView`, it will only show the 1st frame as a static image by default. However, you can enable the full GIF support by using the built-in GIF coder. See [GIF coder](https://github.com/rs/SDWebImage/wiki/Advanced-Usage#gif-coder) - **Important**: FLAnimatedImage only works on the iOS platform. For macOS, use `NSImageView` with `animates` set to `YES` to show the entire animated images and `NO` to only show the 1st frame. For all the other platforms (tvOS, watchOS) we will fallback to the backwards compatibility feature described above ## Installation @@ -117,27 +112,10 @@ platform :ios, '7.0' pod 'SDWebImage', '~> 4.0' ``` -##### Swift and static framework - -Swift project previously have to use `use_frameworks!` to make all Pods into dynamic framework to let CocoaPods works. - -However, start with `CocoaPods 1.5.0+` (with `Xcode 9+`), which supports to build both Objective-C && Swift code into static framework. You can use modular headers to use SDWebImage as static framework, without the need of `use_frameworks!`: - -``` -platform :ios, '8.0' -# Uncomment the next line when you want all Pods as static framework -# use_modular_headers! -pod 'SDWebImage', :modular_headers => true -``` - -See more on [CocoaPods 1.5.0 — Swift Static Libraries](http://blog.cocoapods.org/CocoaPods-1.5.0/) - -If not, you still need to add `use_frameworks!` to use SDWebImage as dynamic framework: - +If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+: ``` platform :ios, '8.0' use_frameworks! -pod 'SDWebImage' ``` #### Subspecs @@ -157,7 +135,7 @@ To install with carthage, follow the instruction on [Carthage](https://github.co #### Cartfile ``` -github "SDWebImage/SDWebImage" +github "rs/SDWebImage" ``` ### Installation by cloning the repository @@ -184,20 +162,17 @@ community can help you solve it. - [Bogdan Poplauschi](https://github.com/bpoplauschi) - [Chester Liu](https://github.com/skyline75489) - [DreamPiggy](https://github.com/dreampiggy) -- [Wu Zhong](https://github.com/zhongwuzw) ## Licenses -All source code is licensed under the [MIT License](https://raw.github.com/SDWebImage/SDWebImage/master/LICENSE). +All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE). ## Architecture -

+

-

+

- - diff --git a/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h b/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h index d29bbad..0ca226d 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h @@ -17,8 +17,7 @@ typedef NS_ENUM(NSInteger, SDImageFormat) { SDImageFormatGIF, SDImageFormatTIFF, SDImageFormatWebP, - SDImageFormatHEIC, - SDImageFormatHEIF + SDImageFormatHEIC }; @interface NSData (ImageContentType) @@ -33,19 +32,11 @@ typedef NS_ENUM(NSInteger, SDImageFormat) { + (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data; /** - * Convert SDImageFormat to UTType - * - * @param format Format as SDImageFormat - * @return The UTType as CFStringRef - */ -+ (nonnull CFStringRef)sd_UTTypeFromSDImageFormat:(SDImageFormat)format; + Convert SDImageFormat to UTType -/** - * Convert UTTyppe to SDImageFormat - * - * @param uttype The UTType as CFStringRef - * @return The Format as SDImageFormat + @param format Format as SDImageFormat + @return The UTType as CFStringRef */ -+ (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype; ++ (nonnull CFStringRef)sd_UTTypeFromSDImageFormat:(SDImageFormat)format; @end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m b/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m index 927330c..6a59061 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m @@ -16,9 +16,8 @@ // Currently Image/IO does not support WebP #define kSDUTTypeWebP ((__bridge CFStringRef)@"public.webp") -// AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation +// AVFileTypeHEIC is defined in AVFoundation via iOS 11, we use this without import AVFoundation #define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") -#define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") @implementation NSData (ImageContentType) @@ -60,9 +59,6 @@ + (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data { || [testString isEqualToString:@"ftyphevx"]) { return SDImageFormatHEIC; } - if ([testString isEqualToString:@"ftypmif1"] || [testString isEqualToString:@"ftypmsf1"]) { - return SDImageFormatHEIF; - } } break; } @@ -91,9 +87,6 @@ + (nonnull CFStringRef)sd_UTTypeFromSDImageFormat:(SDImageFormat)format { case SDImageFormatHEIC: UTType = kSDUTTypeHEIC; break; - case SDImageFormatHEIF: - UTType = kSDUTTypeHEIF; - break; default: // default is kUTTypePNG UTType = kUTTypePNG; @@ -102,29 +95,4 @@ + (nonnull CFStringRef)sd_UTTypeFromSDImageFormat:(SDImageFormat)format { return UTType; } -+ (SDImageFormat)sd_imageFormatFromUTType:(CFStringRef)uttype { - if (!uttype) { - return SDImageFormatUndefined; - } - SDImageFormat imageFormat; - if (CFStringCompare(uttype, kUTTypeJPEG, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatJPEG; - } else if (CFStringCompare(uttype, kUTTypePNG, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatPNG; - } else if (CFStringCompare(uttype, kUTTypeGIF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatGIF; - } else if (CFStringCompare(uttype, kUTTypeTIFF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatTIFF; - } else if (CFStringCompare(uttype, kSDUTTypeWebP, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatWebP; - } else if (CFStringCompare(uttype, kSDUTTypeHEIC, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatHEIC; - } else if (CFStringCompare(uttype, kSDUTTypeHEIF, 0) == kCFCompareEqualTo) { - imageFormat = SDImageFormatHEIF; - } else { - imageFormat = SDImageFormatUndefined; - } - return imageFormat; -} - @end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.h b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.h index ce25989..216151d 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.h @@ -33,12 +33,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { /** * By default, we query the memory cache synchronously, disk cache asynchronously. This mask can force to query disk cache synchronously. */ - SDImageCacheQueryDiskSync = 1 << 1, - /** - * By default, images are decoded respecting their original size. On iOS, this flag will scale down the - * images to a size compatible with the constrained memory of devices. - */ - SDImageCacheScaleDownLargeImages = 1 << 2 + SDImageCacheQueryDiskSync = 1 << 1 }; typedef void(^SDCacheQueryCompletedBlock)(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType); @@ -154,6 +149,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot /** * Synchronously store image NSData into disk cache at the given key. * + * @warning This method is synchronous, make sure to call it from the ioQueue * * @param imageData The image data to store * @param key The unique image cache key, usually it's image absolute URL @@ -178,14 +174,6 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot */ - (BOOL)diskImageDataExistsWithKey:(nullable NSString *)key; -/** - * Query the image data for the given key synchronously. - * - * @param key The unique key used to store the wanted image - * @return The image data for the given key, or nil if not found. - */ -- (nullable NSData *)diskImageDataForKey:(nullable NSString *)key; - /** * Operation that queries the cache asynchronously and call the completion when done. * @@ -211,7 +199,6 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot * Query the memory cache synchronously. * * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. */ - (nullable UIImage *)imageFromMemoryCacheForKey:(nullable NSString *)key; @@ -219,7 +206,6 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot * Query the disk cache synchronously. * * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. */ - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key; @@ -227,7 +213,6 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot * Query the cache (memory and or disk) synchronously after checking the memory cache. * * @param key The unique key used to store the image - * @return The image for the given key, or nil if not found. */ - (nullable UIImage *)imageFromCacheForKey:(nullable NSString *)key; diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.m b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.m index 015f6ac..3687757 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCache.m @@ -9,14 +9,19 @@ #import "SDImageCache.h" #import #import "NSImage+WebCache.h" -#import "UIImage+MemoryCacheCost.h" #import "SDWebImageCodersManager.h" -#define SD_MAX_FILE_EXTENSION_LENGTH (NAME_MAX - CC_MD5_DIGEST_LENGTH * 2 - 1) - #define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); #define UNLOCK(lock) dispatch_semaphore_signal(lock); +FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { +#if SD_MAC + return image.size.height * image.size.width; +#elif SD_UIKIT || SD_WATCH + return image.size.height * image.size.width * image.scale * image.scale; +#endif +} + // A memory cache which auto purge the cache on memory warning and support weak cache. @interface SDMemoryCache : NSCache @@ -25,13 +30,9 @@ @interface SDMemoryCache : NSCache // Private @interface SDMemoryCache () -@property (nonatomic, strong, nonnull) SDImageCacheConfig *config; @property (nonatomic, strong, nonnull) NSMapTable *weakCache; // strong-weak cache @property (nonatomic, strong, nonnull) dispatch_semaphore_t weakCacheLock; // a lock to keep the access to `weakCache` thread-safe -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithConfig:(nonnull SDImageCacheConfig *)config; - @end @implementation SDMemoryCache @@ -44,7 +45,7 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; } -- (instancetype)initWithConfig:(SDImageCacheConfig *)config { +- (instancetype)init { self = [super init]; if (self) { // Use a strong-weak maptable storing the secondary cache. Follow the doc that NSCache does not copy keys @@ -52,7 +53,6 @@ - (instancetype)initWithConfig:(SDImageCacheConfig *)config { // At this case, we can sync weak cache back and do not need to load from disk cache self.weakCache = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0]; self.weakCacheLock = dispatch_semaphore_create(1); - self.config = config; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification @@ -69,24 +69,16 @@ - (void)didReceiveMemoryWarning:(NSNotification *)notification { // `setObject:forKey:` just call this with 0 cost. Override this is enough - (void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g { [super setObject:obj forKey:key cost:g]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } if (key && obj) { // Store weak cache LOCK(self.weakCacheLock); - // Do the real copy of the key and only let NSMapTable manage the key's lifetime - // Fixes issue #2507 https://github.com/SDWebImage/SDWebImage/issues/2507 - [self.weakCache setObject:obj forKey:[[key mutableCopy] copy]]; + [self.weakCache setObject:obj forKey:key]; UNLOCK(self.weakCacheLock); } } - (id)objectForKey:(id)key { id obj = [super objectForKey:key]; - if (!self.config.shouldUseWeakMemoryCache) { - return obj; - } if (key && !obj) { // Check weak cache LOCK(self.weakCacheLock); @@ -96,7 +88,7 @@ - (id)objectForKey:(id)key { // Sync cache NSUInteger cost = 0; if ([obj isKindOfClass:[UIImage class]]) { - cost = [(UIImage *)obj sd_memoryCost]; + cost = SDCacheCostForImage(obj); } [super setObject:obj forKey:key cost:cost]; } @@ -106,9 +98,6 @@ - (id)objectForKey:(id)key { - (void)removeObjectForKey:(id)key { [super removeObjectForKey:key]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } if (key) { // Remove weak cache LOCK(self.weakCacheLock); @@ -119,22 +108,12 @@ - (void)removeObjectForKey:(id)key { - (void)removeAllObjects { [super removeAllObjects]; - if (!self.config.shouldUseWeakMemoryCache) { - return; - } // Manually remove should also remove weak cache LOCK(self.weakCacheLock); [self.weakCache removeAllObjects]; UNLOCK(self.weakCacheLock); } -#else - -- (instancetype)initWithConfig:(SDImageCacheConfig *)config { - self = [super init]; - return self; -} - #endif @end @@ -184,7 +163,7 @@ - (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns _config = [[SDImageCacheConfig alloc] init]; // Init the memory cache - _memCache = [[SDMemoryCache alloc] initWithConfig:_config]; + _memCache = [[SDMemoryCache alloc] init]; _memCache.name = fullNamespace; // Init the disk cache @@ -196,7 +175,7 @@ - (nonnull instancetype)initWithNamespace:(nonnull NSString *)ns } dispatch_sync(_ioQueue, ^{ - self.fileManager = [NSFileManager new]; + _fileManager = [NSFileManager new]; }); #if SD_UIKIT @@ -250,10 +229,6 @@ - (nullable NSString *)cachedFileNameForKey:(nullable NSString *)key { CC_MD5(str, (CC_LONG)strlen(str), r); NSURL *keyURL = [NSURL URLWithString:key]; NSString *ext = keyURL ? keyURL.pathExtension : key.pathExtension; - // File system has file name length limit, we need to check if ext is too long, we don't add it to the filename - if (ext.length > SD_MAX_FILE_EXTENSION_LENGTH) { - ext = nil; - } NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%@", r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15], ext.length == 0 ? @"" : [NSString stringWithFormat:@".%@", ext]]; @@ -293,7 +268,7 @@ - (void)storeImage:(nullable UIImage *)image } // if memory cache is enabled if (self.config.shouldCacheImagesInMemory) { - NSUInteger cost = image.sd_memoryCost; + NSUInteger cost = SDCacheCostForImage(image); [self.memCache setObject:image forKey:key cost:cost]; } @@ -391,7 +366,7 @@ - (BOOL)_diskImageDataExistsWithKey:(nullable NSString *)key { } BOOL exists = [self.fileManager fileExistsAtPath:[self defaultCachePathForKey:key]]; - // fallback because of https://github.com/SDWebImage/SDWebImage/pull/976 that added the extension to the disk file name + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name // checking the key with and without the extension if (!exists) { exists = [self.fileManager fileExistsAtPath:[self defaultCachePathForKey:key].stringByDeletingPathExtension]; @@ -400,18 +375,6 @@ - (BOOL)_diskImageDataExistsWithKey:(nullable NSString *)key { return exists; } -- (nullable NSData *)diskImageDataForKey:(nullable NSString *)key { - if (!key) { - return nil; - } - __block NSData *imageData = nil; - dispatch_sync(self.ioQueue, ^{ - imageData = [self diskImageDataBySearchingAllPathsForKey:key]; - }); - - return imageData; -} - - (nullable UIImage *)imageFromMemoryCacheForKey:(nullable NSString *)key { return [self.memCache objectForKey:key]; } @@ -419,7 +382,7 @@ - (nullable UIImage *)imageFromMemoryCacheForKey:(nullable NSString *)key { - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key { UIImage *diskImage = [self diskImageForKey:key]; if (diskImage && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = diskImage.sd_memoryCost; + NSUInteger cost = SDCacheCostForImage(diskImage); [self.memCache setObject:diskImage forKey:key cost:cost]; } @@ -445,7 +408,7 @@ - (nullable NSData *)diskImageDataBySearchingAllPathsForKey:(nullable NSString * return data; } - // fallback because of https://github.com/SDWebImage/SDWebImage/pull/976 that added the extension to the disk file name + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name // checking the key with and without the extension data = [NSData dataWithContentsOfFile:defaultPath.stringByDeletingPathExtension options:self.config.diskCacheReadingOptions error:nil]; if (data) { @@ -460,7 +423,7 @@ - (nullable NSData *)diskImageDataBySearchingAllPathsForKey:(nullable NSString * return imageData; } - // fallback because of https://github.com/SDWebImage/SDWebImage/pull/976 that added the extension to the disk file name + // fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name // checking the key with and without the extension imageData = [NSData dataWithContentsOfFile:filePath.stringByDeletingPathExtension options:self.config.diskCacheReadingOptions error:nil]; if (imageData) { @@ -472,21 +435,16 @@ - (nullable NSData *)diskImageDataBySearchingAllPathsForKey:(nullable NSString * } - (nullable UIImage *)diskImageForKey:(nullable NSString *)key { - NSData *data = [self diskImageDataForKey:key]; + NSData *data = [self diskImageDataBySearchingAllPathsForKey:key]; return [self diskImageForKey:key data:data]; } - (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data { - return [self diskImageForKey:key data:data options:0]; -} - -- (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data options:(SDImageCacheOptions)options { if (data) { UIImage *image = [[SDWebImageCodersManager sharedInstance] decodedImageWithData:data]; image = [self scaledImageForKey:key image:image]; if (self.config.shouldDecompressImages) { - BOOL shouldScaleDown = options & SDImageCacheScaleDownLargeImages; - image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&data options:@{SDWebImageCoderScaleDownLargeImagesKey: @(shouldScaleDown)}]; + image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&data options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}]; } return image; } else { @@ -530,17 +488,16 @@ - (nullable NSOperation *)queryCacheOperationForKey:(nullable NSString *)key opt @autoreleasepool { NSData *diskData = [self diskImageDataBySearchingAllPathsForKey:key]; UIImage *diskImage; - SDImageCacheType cacheType = SDImageCacheTypeNone; + SDImageCacheType cacheType = SDImageCacheTypeDisk; if (image) { // the image is from in-memory cache diskImage = image; cacheType = SDImageCacheTypeMemory; } else if (diskData) { - cacheType = SDImageCacheTypeDisk; // decode image data only if in-memory cache missed - diskImage = [self diskImageForKey:key data:diskData options:options]; + diskImage = [self diskImageForKey:key data:diskData]; if (diskImage && self.config.shouldCacheImagesInMemory) { - NSUInteger cost = diskImage.sd_memoryCost; + NSUInteger cost = SDCacheCostForImage(diskImage); [self.memCache setObject:diskImage forKey:key cost:cost]; } } @@ -644,23 +601,7 @@ - (void)deleteOldFiles { - (void)deleteOldFilesWithCompletionBlock:(nullable SDWebImageNoParamsBlock)completionBlock { dispatch_async(self.ioQueue, ^{ NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - - // Compute content date key to be used for tests - NSURLResourceKey cacheContentDateKey = NSURLContentModificationDateKey; - switch (self.config.diskCacheExpireType) { - case SDImageCacheConfigExpireTypeAccessDate: - cacheContentDateKey = NSURLContentAccessDateKey; - break; - - case SDImageCacheConfigExpireTypeModificationDate: - cacheContentDateKey = NSURLContentModificationDateKey; - break; - - default: - break; - } - - NSArray *resourceKeys = @[NSURLIsDirectoryKey, cacheContentDateKey, NSURLTotalFileAllocatedSizeKey]; + NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey]; // This enumerator prefetches useful properties for our cache files. NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL @@ -687,12 +628,12 @@ - (void)deleteOldFilesWithCompletionBlock:(nullable SDWebImageNoParamsBlock)comp } // Remove files that are older than the expiration date; - NSDate *modifiedDate = resourceValues[cacheContentDateKey]; - if ([[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) { + NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey]; + if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) { [urlsToDelete addObject:fileURL]; continue; } - + // Store a reference to this file and account for its total size. NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; currentCacheSize += totalAllocatedSize.unsignedIntegerValue; @@ -709,10 +650,10 @@ - (void)deleteOldFilesWithCompletionBlock:(nullable SDWebImageNoParamsBlock)comp // Target half of our maximum cache size for this cleanup pass. const NSUInteger desiredCacheSize = self.config.maxCacheSize / 2; - // Sort the remaining cache files by their last modification time or last access time (oldest first). + // Sort the remaining cache files by their last modification time (oldest first). NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1[cacheContentDateKey] compare:obj2[cacheContentDateKey]]; + return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]]; }]; // Delete files until we fall below our desired cache size. diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h index c0de688..d3cb542 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.h @@ -9,17 +9,6 @@ #import #import "SDWebImageCompat.h" -typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { - /** - * When the image is accessed it will update this value - */ - SDImageCacheConfigExpireTypeAccessDate, - /** - * The image was obtained from the disk cache (Default) - */ - SDImageCacheConfigExpireTypeModificationDate -}; - @interface SDImageCacheConfig : NSObject /** @@ -29,25 +18,15 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { @property (assign, nonatomic) BOOL shouldDecompressImages; /** - * Whether or not to disable iCloud backup - * Defaults to YES. + * disable iCloud backup [defaults to YES] */ @property (assign, nonatomic) BOOL shouldDisableiCloud; /** - * Whether or not to use memory cache - * @note When the memory cache is disabled, the weak memory cache will also be disabled. - * Defaults to YES. + * use memory cache [defaults to YES] */ @property (assign, nonatomic) BOOL shouldCacheImagesInMemory; -/** - * The option to control weak memory cache for images. When enable, `SDImageCache`'s memory cache will use a weak maptable to store the image at the same time when it stored to memory, and get removed at the same time. - * However when memory warning is triggered, since the weak maptable does not hold a strong reference to image instacnce, even when the memory cache itself is purged, some images which are held strongly by UIImageViews or other live instances can be recovered again, to avoid later re-query from disk cache or network. This may be helpful for the case, for example, when app enter background and memory is purged, cause cell flashing after re-enter foreground. - * Defautls to YES. You can change this option dynamically. - */ -@property (assign, nonatomic) BOOL shouldUseWeakMemoryCache; - /** * The reading options while reading cache from disk. * Defaults to 0. You can set this to `NSDataReadingMappedIfSafe` to improve performance. @@ -70,10 +49,4 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) { */ @property (assign, nonatomic) NSUInteger maxCacheSize; -/** - * The attribute which the clear cache will be checked against when clearing the disk cache - * Default is Modified Date - */ -@property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType; - @end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m index d4f4dd2..923506d 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDImageCacheConfig.m @@ -17,12 +17,10 @@ - (instancetype)init { _shouldDecompressImages = YES; _shouldDisableiCloud = YES; _shouldCacheImagesInMemory = YES; - _shouldUseWeakMemoryCache = YES; _diskCacheReadingOptions = 0; _diskCacheWritingOptions = NSDataWritingAtomic; _maxCacheAge = kDefaultCacheMaxCacheAge; _maxCacheSize = 0; - _diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate; } return self; } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCoderHelper.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCoderHelper.m index ea1dae1..0cdd4a5 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCoderHelper.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCoderHelper.m @@ -64,7 +64,7 @@ + (UIImage *)animatedImageWithFrames:(NSArray *)frames { SDWebImageFrame *frame = frames[i]; float frameDuration = frame.duration; CGImageRef frameImageRef = frame.image.CGImage; - NSDictionary *frameProperties = @{(__bridge NSString *)kCGImagePropertyGIFDictionary : @{(__bridge NSString *)kCGImagePropertyGIFDelayTime : @(frameDuration)}}; + NSDictionary *frameProperties = @{(__bridge_transfer NSString *)kCGImagePropertyGIFDictionary : @{(__bridge_transfer NSString *)kCGImagePropertyGIFDelayTime : @(frameDuration)}}; CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)frameProperties); } } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.h index ca68748..5c3d4b3 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.h @@ -39,7 +39,7 @@ /** All coders in coders manager. The coders array is a priority queue, which means the later added coder will have the highest priority */ -@property (nonatomic, copy, readwrite, nullable) NSArray> *coders; +@property (nonatomic, strong, readwrite, nullable) NSArray* coders; /** Add a new coder to the end of coders array. Which has the highest priority. diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.m index 883d1fd..6134aa8 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCodersManager.m @@ -12,14 +12,11 @@ #ifdef SD_WEBP #import "SDWebImageWebPCoder.h" #endif -#import "UIImage+MultiFormat.h" - -#define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); -#define UNLOCK(lock) dispatch_semaphore_signal(lock); @interface SDWebImageCodersManager () -@property (nonatomic, strong, nonnull) dispatch_semaphore_t codersLock; +@property (strong, nonatomic, nonnull) NSMutableArray* mutableCoders; +@property (strong, nonatomic, nullable) dispatch_queue_t mutableCodersAccessQueue; @end @@ -37,12 +34,11 @@ + (nonnull instancetype)sharedInstance { - (instancetype)init { if (self = [super init]) { // initialize with default coders - NSMutableArray> *mutableCoders = [@[[SDWebImageImageIOCoder sharedCoder]] mutableCopy]; + _mutableCoders = [@[[SDWebImageImageIOCoder sharedCoder]] mutableCopy]; #ifdef SD_WEBP - [mutableCoders addObject:[SDWebImageWebPCoder sharedCoder]]; + [_mutableCoders addObject:[SDWebImageWebPCoder sharedCoder]]; #endif - _coders = [mutableCoders copy]; - _codersLock = dispatch_semaphore_create(1); + _mutableCodersAccessQueue = dispatch_queue_create("com.hackemist.SDWebImageCodersManager", DISPATCH_QUEUE_CONCURRENT); } return self; } @@ -50,36 +46,36 @@ - (instancetype)init { #pragma mark - Coder IO operations - (void)addCoder:(nonnull id)coder { - if (![coder conformsToProtocol:@protocol(SDWebImageCoder)]) { - return; - } - LOCK(self.codersLock); - NSMutableArray> *mutableCoders = [self.coders mutableCopy]; - if (!mutableCoders) { - mutableCoders = [NSMutableArray array]; + if ([coder conformsToProtocol:@protocol(SDWebImageCoder)]) { + dispatch_barrier_sync(self.mutableCodersAccessQueue, ^{ + [self.mutableCoders addObject:coder]; + }); } - [mutableCoders addObject:coder]; - self.coders = [mutableCoders copy]; - UNLOCK(self.codersLock); } - (void)removeCoder:(nonnull id)coder { - if (![coder conformsToProtocol:@protocol(SDWebImageCoder)]) { - return; - } - LOCK(self.codersLock); - NSMutableArray> *mutableCoders = [self.coders mutableCopy]; - [mutableCoders removeObject:coder]; - self.coders = [mutableCoders copy]; - UNLOCK(self.codersLock); + dispatch_barrier_sync(self.mutableCodersAccessQueue, ^{ + [self.mutableCoders removeObject:coder]; + }); +} + +- (NSArray *)coders { + __block NSArray *sortedCoders = nil; + dispatch_sync(self.mutableCodersAccessQueue, ^{ + sortedCoders = (NSArray *)[[[self.mutableCoders copy] reverseObjectEnumerator] allObjects]; + }); + return sortedCoders; +} + +- (void)setCoders:(NSArray *)coders { + dispatch_barrier_sync(self.mutableCodersAccessQueue, ^{ + self.mutableCoders = [coders mutableCopy]; + }); } #pragma mark - SDWebImageCoder - (BOOL)canDecodeFromData:(NSData *)data { - LOCK(self.codersLock); - NSArray> *coders = self.coders; - UNLOCK(self.codersLock); - for (id coder in coders.reverseObjectEnumerator) { + for (id coder in self.coders) { if ([coder canDecodeFromData:data]) { return YES; } @@ -88,10 +84,7 @@ - (BOOL)canDecodeFromData:(NSData *)data { } - (BOOL)canEncodeToFormat:(SDImageFormat)format { - LOCK(self.codersLock); - NSArray> *coders = self.coders; - UNLOCK(self.codersLock); - for (id coder in coders.reverseObjectEnumerator) { + for (id coder in self.coders) { if ([coder canEncodeToFormat:format]) { return YES; } @@ -100,10 +93,10 @@ - (BOOL)canEncodeToFormat:(SDImageFormat)format { } - (UIImage *)decodedImageWithData:(NSData *)data { - LOCK(self.codersLock); - NSArray> *coders = self.coders; - UNLOCK(self.codersLock); - for (id coder in coders.reverseObjectEnumerator) { + if (!data) { + return nil; + } + for (id coder in self.coders) { if ([coder canDecodeFromData:data]) { return [coder decodedImageWithData:data]; } @@ -117,14 +110,9 @@ - (UIImage *)decompressedImageWithImage:(UIImage *)image if (!image) { return nil; } - LOCK(self.codersLock); - NSArray> *coders = self.coders; - UNLOCK(self.codersLock); - for (id coder in coders.reverseObjectEnumerator) { + for (id coder in self.coders) { if ([coder canDecodeFromData:*data]) { - UIImage *decompressedImage = [coder decompressedImageWithImage:image data:data options:optionsDict]; - decompressedImage.sd_imageFormat = image.sd_imageFormat; - return decompressedImage; + return [coder decompressedImageWithImage:image data:data options:optionsDict]; } } return nil; @@ -134,10 +122,7 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format { if (!image) { return nil; } - LOCK(self.codersLock); - NSArray> *coders = self.coders; - UNLOCK(self.codersLock); - for (id coder in coders.reverseObjectEnumerator) { + for (id coder in self.coders) { if ([coder canEncodeToFormat:format]) { return [coder encodedDataWithImage:image format:format]; } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h index a4493ae..ce06807 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h @@ -70,12 +70,6 @@ #endif #if SD_WATCH #import - #ifndef UIView - #define UIView WKInterfaceObject - #endif - #ifndef UIImageView - #define UIImageView WKInterfaceImage - #endif #endif #endif @@ -95,7 +89,7 @@ FOUNDATION_EXPORT NSString *const SDWebImageErrorDomain; #ifndef dispatch_queue_async_safe #define dispatch_queue_async_safe(queue, block)\ - if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(queue)) {\ + if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(queue)) == 0) {\ block();\ } else {\ dispatch_async(queue, block);\ diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m index ffde1d2..bb53495 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m @@ -35,7 +35,6 @@ UIImage *animatedImage = [UIImage animatedImageWithImages:scaledImages duration:image.duration]; if (animatedImage) { animatedImage.sd_imageLoopCount = image.sd_imageLoopCount; - animatedImage.sd_imageFormat = image.sd_imageFormat; } return animatedImage; } else { @@ -56,12 +55,9 @@ scale = 3.0; } } - - if (scale != image.scale) { - UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; - scaledImage.sd_imageFormat = image.sd_imageFormat; - image = scaledImage; - } + + UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; + image = scaledImage; } return image; } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h index 906eaa7..b5911af 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h @@ -197,13 +197,12 @@ typedef SDHTTPHeadersDictionary * _Nullable (^SDWebImageDownloaderHeadersFilterB - (nullable NSString *)valueForHTTPHeaderField:(nullable NSString *)field; /** - * Sets a subclass of `NSOperation` and conforms to `SDWebImageDownloaderOperationInterface`. - * Default is `SDWebImageDownloaderOperation`. - * Can be used each time SDWebImage constructs a request + * Sets a subclass of `SDWebImageDownloaderOperation` as the default + * `NSOperation` to be used each time SDWebImage constructs a request * operation to download an image. * - * @param operationClass The subclass of `NSOperation` and conforms to `SDWebImageDownloaderOperationInterface`. - * Default is `SDWebImageDownloaderOperation`, Passing `nil` will revert to `SDWebImageDownloaderOperation`. + * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set + * as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`. */ - (void)setOperationClass:(nullable Class)operationClass; diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m index 30cadca..f775a24 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m @@ -37,7 +37,7 @@ @interface SDWebImageDownloader () *> *URLOperations; +@property (strong, nonatomic, nonnull) NSMutableDictionary *URLOperations; @property (strong, nonatomic, nullable) SDHTTPHeadersMutableDictionary *HTTPHeaders; @property (strong, nonatomic, nonnull) dispatch_semaphore_t operationsLock; // a lock to keep the access to `URLOperations` thread-safe @property (strong, nonatomic, nonnull) dispatch_semaphore_t headersLock; // a lock to keep the access to `HTTPHeaders` thread-safe @@ -94,32 +94,11 @@ - (nonnull instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfi _downloadQueue.maxConcurrentOperationCount = 6; _downloadQueue.name = @"com.hackemist.SDWebImageDownloader"; _URLOperations = [NSMutableDictionary new]; - SDHTTPHeadersMutableDictionary *headerDictionary = [SDHTTPHeadersMutableDictionary dictionary]; - NSString *userAgent = nil; -#if SD_UIKIT - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; -#elif SD_WATCH - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; -#elif SD_MAC - userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; -#endif - if (userAgent) { - if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { - NSMutableString *mutableUserAgent = [userAgent mutableCopy]; - if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { - userAgent = mutableUserAgent; - } - } - headerDictionary[@"User-Agent"] = userAgent; - } #ifdef SD_WEBP - headerDictionary[@"Accept"] = @"image/webp,image/*;q=0.8"; + _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy]; #else - headerDictionary[@"Accept"] = @"image/*;q=0.8"; + _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy]; #endif - _HTTPHeaders = headerDictionary; _operationsLock = dispatch_semaphore_create(1); _headersLock = dispatch_semaphore_create(1); _downloadTimeout = 15.0; @@ -214,49 +193,56 @@ - (void)setOperationClass:(nullable Class)operationClass { } } -- (NSOperation *)createDownloaderOperationWithUrl:(nullable NSURL *)url - options:(SDWebImageDownloaderOptions)options { - NSTimeInterval timeoutInterval = self.downloadTimeout; - if (timeoutInterval == 0.0) { - timeoutInterval = 15.0; - } +- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url + options:(SDWebImageDownloaderOptions)options + progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock + completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock { + __weak SDWebImageDownloader *wself = self; - // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise - NSURLRequestCachePolicy cachePolicy = options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData; - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url - cachePolicy:cachePolicy - timeoutInterval:timeoutInterval]; - - request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies); - request.HTTPShouldUsePipelining = YES; - if (self.headersFilter) { - request.allHTTPHeaderFields = self.headersFilter(url, [self allHTTPHeaderFields]); - } - else { - request.allHTTPHeaderFields = [self allHTTPHeaderFields]; - } - NSOperation *operation = [[self.operationClass alloc] initWithRequest:request inSession:self.session options:options]; - operation.shouldDecompressImages = self.shouldDecompressImages; - - if (self.urlCredential) { - operation.credential = self.urlCredential; - } else if (self.username && self.password) { - operation.credential = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceForSession]; - } - - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } - - if (self.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { - // Emulate LIFO execution order by systematically adding new operations as last operation's dependency - [self.lastAddedOperation addDependency:operation]; - self.lastAddedOperation = operation; - } + return [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^SDWebImageDownloaderOperation *{ + __strong __typeof (wself) sself = wself; + NSTimeInterval timeoutInterval = sself.downloadTimeout; + if (timeoutInterval == 0.0) { + timeoutInterval = 15.0; + } - return operation; + // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise + NSURLRequestCachePolicy cachePolicy = options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData; + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url + cachePolicy:cachePolicy + timeoutInterval:timeoutInterval]; + + request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies); + request.HTTPShouldUsePipelining = YES; + if (sself.headersFilter) { + request.allHTTPHeaderFields = sself.headersFilter(url, [sself allHTTPHeaderFields]); + } + else { + request.allHTTPHeaderFields = [sself allHTTPHeaderFields]; + } + SDWebImageDownloaderOperation *operation = [[sself.operationClass alloc] initWithRequest:request inSession:sself.session options:options]; + operation.shouldDecompressImages = sself.shouldDecompressImages; + + if (sself.urlCredential) { + operation.credential = sself.urlCredential; + } else if (sself.username && sself.password) { + operation.credential = [NSURLCredential credentialWithUser:sself.username password:sself.password persistence:NSURLCredentialPersistenceForSession]; + } + + if (options & SDWebImageDownloaderHighPriority) { + operation.queuePriority = NSOperationQueuePriorityHigh; + } else if (options & SDWebImageDownloaderLowPriority) { + operation.queuePriority = NSOperationQueuePriorityLow; + } + + if (sself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { + // Emulate LIFO execution order by systematically adding new operations as last operation's dependency + [sself.lastAddedOperation addDependency:operation]; + sself.lastAddedOperation = operation; + } + + return operation; + }]; } - (void)cancel:(nullable SDWebImageDownloadToken *)token { @@ -265,7 +251,7 @@ - (void)cancel:(nullable SDWebImageDownloadToken *)token { return; } LOCK(self.operationsLock); - NSOperation *operation = [self.URLOperations objectForKey:url]; + SDWebImageDownloaderOperation *operation = [self.URLOperations objectForKey:url]; if (operation) { BOOL canceled = [operation cancel:token.downloadOperationCancelToken]; if (canceled) { @@ -275,10 +261,10 @@ - (void)cancel:(nullable SDWebImageDownloadToken *)token { UNLOCK(self.operationsLock); } -- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url - options:(SDWebImageDownloaderOptions)options - progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock { +- (nullable SDWebImageDownloadToken *)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock + completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock + forURL:(nullable NSURL *)url + createCallback:(SDWebImageDownloaderOperation *(^)(void))createCallback { // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. if (url == nil) { if (completedBlock != nil) { @@ -288,10 +274,9 @@ - (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url } LOCK(self.operationsLock); - NSOperation *operation = [self.URLOperations objectForKey:url]; - // There is a case that the operation may be marked as finished or cancelled, but not been removed from `self.URLOperations`. - if (!operation || operation.isFinished || operation.isCancelled) { - operation = [self createDownloaderOperationWithUrl:url options:options]; + SDWebImageDownloaderOperation *operation = [self.URLOperations objectForKey:url]; + if (!operation) { + operation = createCallback(); __weak typeof(self) wself = self; operation.completionBlock = ^{ __strong typeof(wself) sself = wself; @@ -307,15 +292,6 @@ - (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url // `addOperation:` does not synchronously execute the `operation.completionBlock` so this will not cause deadlock. [self.downloadQueue addOperation:operation]; } - else if (!operation.isExecuting) { - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } else { - operation.queuePriority = NSOperationQueuePriorityNormal; - } - } UNLOCK(self.operationsLock); id downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock]; @@ -338,14 +314,12 @@ - (void)cancelAllDownloads { #pragma mark Helper methods -- (NSOperation *)operationWithTask:(NSURLSessionTask *)task { - NSOperation *returnOperation = nil; - for (NSOperation *operation in self.downloadQueue.operations) { - if ([operation respondsToSelector:@selector(dataTask)]) { - if (operation.dataTask.taskIdentifier == task.taskIdentifier) { - returnOperation = operation; - break; - } +- (SDWebImageDownloaderOperation *)operationWithTask:(NSURLSessionTask *)task { + SDWebImageDownloaderOperation *returnOperation = nil; + for (SDWebImageDownloaderOperation *operation in self.downloadQueue.operations) { + if (operation.dataTask.taskIdentifier == task.taskIdentifier) { + returnOperation = operation; + break; } } return returnOperation; @@ -359,7 +333,7 @@ - (void)URLSession:(NSURLSession *)session completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:didReceiveResponse:completionHandler:)]) { [dataOperation URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler]; } else { @@ -372,7 +346,7 @@ - (void)URLSession:(NSURLSession *)session - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:didReceiveData:)]) { [dataOperation URLSession:session dataTask:dataTask didReceiveData:data]; } @@ -384,7 +358,7 @@ - (void)URLSession:(NSURLSession *)session completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:dataTask]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:dataTask]; if ([dataOperation respondsToSelector:@selector(URLSession:dataTask:willCacheResponse:completionHandler:)]) { [dataOperation URLSession:session dataTask:dataTask willCacheResponse:proposedResponse completionHandler:completionHandler]; } else { @@ -399,7 +373,7 @@ - (void)URLSession:(NSURLSession *)session - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task]; if ([dataOperation respondsToSelector:@selector(URLSession:task:didCompleteWithError:)]) { [dataOperation URLSession:session task:task didCompleteWithError:error]; } @@ -408,7 +382,7 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task]; if ([dataOperation respondsToSelector:@selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)]) { [dataOperation URLSession:session task:task willPerformHTTPRedirection:response newRequest:request completionHandler:completionHandler]; } else { @@ -421,7 +395,7 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPer - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { // Identify the operation that runs this task and pass it the delegate method - NSOperation *dataOperation = [self operationWithTask:task]; + SDWebImageDownloaderOperation *dataOperation = [self operationWithTask:task]; if ([dataOperation respondsToSelector:@selector(URLSession:task:didReceiveChallenge:completionHandler:)]) { [dataOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler]; } else { diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h index 6d9d95c..d0c5815 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h @@ -21,8 +21,8 @@ FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageDownloadFinishNotification Describes a downloader operation. If one wants to use a custom downloader op, it needs to inherit from `NSOperation` and conform to this protocol For the description about these methods, see `SDWebImageDownloaderOperation` */ -@protocol SDWebImageDownloaderOperationInterface -@required +@protocol SDWebImageDownloaderOperationInterface + - (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request inSession:(nullable NSURLSession *)session options:(SDWebImageDownloaderOptions)options; @@ -38,13 +38,10 @@ FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageDownloadFinishNotification - (BOOL)cancel:(nullable id)token; -@optional -- (nullable NSURLSessionTask *)dataTask; - @end -@interface SDWebImageDownloaderOperation : NSOperation +@interface SDWebImageDownloaderOperation : NSOperation /** * The request used by the operation's task. diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m index 445dbc4..722645f 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m @@ -10,7 +10,6 @@ #import "SDWebImageManager.h" #import "NSImage+WebCache.h" #import "SDWebImageCodersManager.h" -#import "UIImage+MultiFormat.h" #define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); #define UNLOCK(lock) dispatch_semaphore_signal(lock); @@ -83,9 +82,6 @@ - (nonnull instancetype)initWithRequest:(nullable NSURLRequest *)request _unownedSession = session; _callbacksLock = dispatch_semaphore_create(1); _coderQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderOperationCoderQueue", DISPATCH_QUEUE_SERIAL); -#if SD_UIKIT - _backgroundTaskId = UIBackgroundTaskInvalid; -#endif } return self; } @@ -139,7 +135,14 @@ - (void)start { __weak __typeof__ (self) wself = self; UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)]; self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ - [wself cancel]; + __strong __typeof (wself) sself = wself; + + if (sself) { + [sself cancel]; + + [app endBackgroundTask:sself.backgroundTaskId]; + sself.backgroundTaskId = UIBackgroundTaskInvalid; + } }]; } #endif @@ -194,15 +197,27 @@ - (void)start { for (SDWebImageDownloaderProgressBlock progressBlock in [self callbacksForKey:kProgressCallbackKey]) { progressBlock(0, NSURLResponseUnknownLength, self.request.URL); } - __block typeof(self) strongSelf = self; + __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:strongSelf]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:weakSelf]; }); } else { [self callCompletionBlocksWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorUnknown userInfo:@{NSLocalizedDescriptionKey : @"Task can't be initialized"}]]; [self done]; return; } + +#if SD_UIKIT + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { + return; + } + if (self.backgroundTaskId != UIBackgroundTaskInvalid) { + UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; + [app endBackgroundTask:self.backgroundTaskId]; + self.backgroundTaskId = UIBackgroundTaskInvalid; + } +#endif } - (void)cancel { @@ -217,9 +232,9 @@ - (void)cancelInternal { if (self.dataTask) { [self.dataTask cancel]; - __block typeof(self) strongSelf = self; + __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:strongSelf]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:weakSelf]; }); // As we cancelled the task, its callback won't be called and thus won't @@ -241,23 +256,11 @@ - (void)reset { LOCK(self.callbacksLock); [self.callbackBlocks removeAllObjects]; UNLOCK(self.callbacksLock); + self.dataTask = nil; - @synchronized (self) { - self.dataTask = nil; - - if (self.ownedSession) { - [self.ownedSession invalidateAndCancel]; - self.ownedSession = nil; - } - -#if SD_UIKIT - if (self.backgroundTaskId != UIBackgroundTaskInvalid) { - // If backgroundTaskId != UIBackgroundTaskInvalid, sharedApplication is always exist - UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; - [app endBackgroundTask:self.backgroundTaskId]; - self.backgroundTaskId = UIBackgroundTaskInvalid; - } -#endif + if (self.ownedSession) { + [self.ownedSession invalidateAndCancel]; + self.ownedSession = nil; } } @@ -304,9 +307,10 @@ - (void)URLSession:(NSURLSession *)session // Status code invalid and marked as cancelled. Do not call `[self.dataTask cancel]` which may mass up URLSession life cycle disposition = NSURLSessionResponseCancel; } - __block typeof(self) strongSelf = self; + + __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:strongSelf]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:weakSelf]; }); if (completionHandler) { @@ -341,19 +345,17 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)data // progressive decode the image in coder queue dispatch_async(self.coderQueue, ^{ - @autoreleasepool { - UIImage *image = [self.progressiveCoder incrementallyDecodedImageWithData:imageData finished:finished]; - if (image) { - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - image = [self scaledImageForKey:key image:image]; - if (self.shouldDecompressImages) { - image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&imageData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}]; - } - - // We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding. - - [self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO]; + UIImage *image = [self.progressiveCoder incrementallyDecodedImageWithData:imageData finished:finished]; + if (image) { + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; + image = [self scaledImageForKey:key image:image]; + if (self.shouldDecompressImages) { + image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&imageData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(NO)}]; } + + // We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding. + + [self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO]; } }); } @@ -384,11 +386,11 @@ - (void)URLSession:(NSURLSession *)session - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { @synchronized(self) { self.dataTask = nil; - __block typeof(self) strongSelf = self; + __weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:strongSelf]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:weakSelf]; if (!error) { - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:strongSelf]; + [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:weakSelf]; } }); } @@ -414,28 +416,36 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp } else { // decode the image in coder queue dispatch_async(self.coderQueue, ^{ - @autoreleasepool { - UIImage *image = [[SDWebImageCodersManager sharedInstance] decodedImageWithData:imageData]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - image = [self scaledImageForKey:key image:image]; - - // Do not force decoding animated images or GIF, - // because there has imageCoder which can change `image` or `imageData` to static image, lose the animated feature totally. - BOOL shouldDecode = !image.images && image.sd_imageFormat != SDImageFormatGIF; - if (shouldDecode) { - if (self.shouldDecompressImages) { - BOOL shouldScaleDown = self.options & SDWebImageDownloaderScaleDownLargeImages; - image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&imageData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(shouldScaleDown)}]; - } + UIImage *image = [[SDWebImageCodersManager sharedInstance] decodedImageWithData:imageData]; + NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; + image = [self scaledImageForKey:key image:image]; + + BOOL shouldDecode = YES; + // Do not force decoding animated GIFs and WebPs + if (image.images) { + shouldDecode = NO; + } else { +#ifdef SD_WEBP + SDImageFormat imageFormat = [NSData sd_imageFormatForImageData:imageData]; + if (imageFormat == SDImageFormatWebP) { + shouldDecode = NO; } - CGSize imageSize = image.size; - if (imageSize.width == 0 || imageSize.height == 0) { - [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}]]; - } else { - [self callCompletionBlocksWithImage:image imageData:imageData error:nil finished:YES]; +#endif + } + + if (shouldDecode) { + if (self.shouldDecompressImages) { + BOOL shouldScaleDown = self.options & SDWebImageDownloaderScaleDownLargeImages; + image = [[SDWebImageCodersManager sharedInstance] decompressedImageWithImage:image data:&imageData options:@{SDWebImageCoderScaleDownLargeImagesKey: @(shouldScaleDown)}]; } - [self done]; } + CGSize imageSize = image.size; + if (imageSize.width == 0 || imageSize.height == 0) { + [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}]]; + } else { + [self callCompletionBlocksWithImage:image imageData:imageData error:nil finished:YES]; + } + [self done]; }); } } else { diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageGIFCoder.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageGIFCoder.m index e43b773..b9ebf1a 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageGIFCoder.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageGIFCoder.m @@ -71,9 +71,9 @@ - (UIImage *)decodedImageWithData:(NSData *)data { NSUInteger loopCount = 1; NSDictionary *imageProperties = (__bridge_transfer NSDictionary *)CGImageSourceCopyProperties(source, nil); - NSDictionary *gifProperties = [imageProperties valueForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary]; + NSDictionary *gifProperties = [imageProperties valueForKey:(__bridge_transfer NSString *)kCGImagePropertyGIFDictionary]; if (gifProperties) { - NSNumber *gifLoopCount = [gifProperties valueForKey:(__bridge NSString *)kCGImagePropertyGIFLoopCount]; + NSNumber *gifLoopCount = [gifProperties valueForKey:(__bridge_transfer NSString *)kCGImagePropertyGIFLoopCount]; if (gifLoopCount != nil) { loopCount = gifLoopCount.unsignedIntegerValue; } @@ -81,7 +81,6 @@ - (UIImage *)decodedImageWithData:(NSData *)data { animatedImage = [SDWebImageCoderHelper animatedImageWithFrames:frames]; animatedImage.sd_imageLoopCount = loopCount; - animatedImage.sd_imageFormat = SDImageFormatGIF; } CFRelease(source); @@ -159,14 +158,14 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format { } else { // for animated GIF images NSUInteger loopCount = image.sd_imageLoopCount; - NSDictionary *gifProperties = @{(__bridge NSString *)kCGImagePropertyGIFDictionary: @{(__bridge NSString *)kCGImagePropertyGIFLoopCount : @(loopCount)}}; + NSDictionary *gifProperties = @{(__bridge_transfer NSString *)kCGImagePropertyGIFDictionary: @{(__bridge_transfer NSString *)kCGImagePropertyGIFLoopCount : @(loopCount)}}; CGImageDestinationSetProperties(imageDestination, (__bridge CFDictionaryRef)gifProperties); for (size_t i = 0; i < frames.count; i++) { SDWebImageFrame *frame = frames[i]; float frameDuration = frame.duration; CGImageRef frameImageRef = frame.image.CGImage; - NSDictionary *frameProperties = @{(__bridge NSString *)kCGImagePropertyGIFDictionary : @{(__bridge NSString *)kCGImagePropertyGIFDelayTime : @(frameDuration)}}; + NSDictionary *frameProperties = @{(__bridge_transfer NSString *)kCGImagePropertyGIFDictionary : @{(__bridge_transfer NSString *)kCGImagePropertyGIFDelayTime : @(frameDuration)}}; CGImageDestinationAddImage(imageDestination, frameImageRef, (__bridge CFDictionaryRef)frameProperties); } } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageImageIOCoder.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageImageIOCoder.m index 8f31e97..bfa2273 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageImageIOCoder.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageImageIOCoder.m @@ -11,7 +11,6 @@ #import "NSImage+WebCache.h" #import #import "NSData+ImageContentType.h" -#import "UIImage+MultiFormat.h" #if SD_UIKIT || SD_WATCH static const size_t kBytesPerPixel = 4; @@ -74,9 +73,6 @@ - (BOOL)canDecodeFromData:(nullable NSData *)data { case SDImageFormatHEIC: // Check HEIC decoding compatibility return [[self class] canDecodeFromHEICFormat]; - case SDImageFormatHEIF: - // Check HEIF decoding compatibility - return [[self class] canDecodeFromHEIFFormat]; default: return YES; } @@ -90,9 +86,6 @@ - (BOOL)canIncrementallyDecodeFromData:(NSData *)data { case SDImageFormatHEIC: // Check HEIC decoding compatibility return [[self class] canDecodeFromHEICFormat]; - case SDImageFormatHEIF: - // Check HEIF decoding compatibility - return [[self class] canDecodeFromHEIFFormat]; default: return YES; } @@ -104,9 +97,21 @@ - (UIImage *)decodedImageWithData:(NSData *)data { } UIImage *image = [[UIImage alloc] initWithData:data]; - image.sd_imageFormat = [NSData sd_imageFormatForImageData:data]; + +#if SD_MAC + return image; +#else + if (!image) { + return nil; + } + + UIImageOrientation orientation = [[self class] sd_imageOrientationFromImageData:data]; + if (orientation != UIImageOrientationUp) { + image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:orientation]; + } return image; +#endif } - (UIImage *)incrementallyDecodedImageWithData:(NSData *)data finished:(BOOL)finished { @@ -147,6 +152,25 @@ - (UIImage *)incrementallyDecodedImageWithData:(NSData *)data finished:(BOOL)fin // Create the image CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(_imageSource, 0, NULL); +#if SD_UIKIT || SD_WATCH + // Workaround for iOS anamorphic image + if (partialImageRef) { + const size_t partialHeight = CGImageGetHeight(partialImageRef); + CGColorSpaceRef colorSpace = SDCGColorSpaceGetDeviceRGB(); + CGContextRef bmContext = CGBitmapContextCreate(NULL, _width, _height, 8, 0, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); + if (bmContext) { + CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = _width, .size.height = partialHeight}, partialImageRef); + CGImageRelease(partialImageRef); + partialImageRef = CGBitmapContextCreateImage(bmContext); + CGContextRelease(bmContext); + } + else { + CGImageRelease(partialImageRef); + partialImageRef = nil; + } + } +#endif + if (partialImageRef) { #if SD_UIKIT || SD_WATCH image = [[UIImage alloc] initWithCGImage:partialImageRef scale:1 orientation:_orientation]; @@ -154,7 +178,6 @@ - (UIImage *)incrementallyDecodedImageWithData:(NSData *)data finished:(BOOL)fin image = [[UIImage alloc] initWithCGImage:partialImageRef size:NSZeroSize]; #endif CGImageRelease(partialImageRef); - image.sd_imageFormat = [NSData sd_imageFormatForImageData:data]; } } @@ -213,12 +236,7 @@ - (nullable UIImage *)sd_decompressedImageWithImage:(nullable UIImage *)image { @autoreleasepool{ CGImageRef imageRef = image.CGImage; - // device color space - CGColorSpaceRef colorspaceRef = SDCGColorSpaceGetDeviceRGB(); - BOOL hasAlpha = SDCGImageRefContainsAlpha(imageRef); - // iOS display alpha info (BRGA8888/BGRX8888) - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + CGColorSpaceRef colorspaceRef = [[self class] colorSpaceForImageRef:imageRef]; size_t width = CGImageGetWidth(imageRef); size_t height = CGImageGetHeight(imageRef); @@ -232,7 +250,7 @@ - (nullable UIImage *)sd_decompressedImageWithImage:(nullable UIImage *)image { kBitsPerComponent, 0, colorspaceRef, - bitmapInfo); + kCGBitmapByteOrderDefault|kCGImageAlphaNoneSkipLast); if (context == NULL) { return image; } @@ -267,21 +285,17 @@ - (nullable UIImage *)sd_decompressedAndScaledDownImageWithImage:(nullable UIIma CGSize sourceResolution = CGSizeZero; sourceResolution.width = CGImageGetWidth(sourceImageRef); sourceResolution.height = CGImageGetHeight(sourceImageRef); - CGFloat sourceTotalPixels = sourceResolution.width * sourceResolution.height; + float sourceTotalPixels = sourceResolution.width * sourceResolution.height; // Determine the scale ratio to apply to the input image // that results in an output image of the defined size. // see kDestImageSizeMB, and how it relates to destTotalPixels. - CGFloat imageScale = sqrt(kDestTotalPixels / sourceTotalPixels); + float imageScale = kDestTotalPixels / sourceTotalPixels; CGSize destResolution = CGSizeZero; - destResolution.width = (int)(sourceResolution.width * imageScale); - destResolution.height = (int)(sourceResolution.height * imageScale); + destResolution.width = (int)(sourceResolution.width*imageScale); + destResolution.height = (int)(sourceResolution.height*imageScale); - // device color space - CGColorSpaceRef colorspaceRef = SDCGColorSpaceGetDeviceRGB(); - BOOL hasAlpha = SDCGImageRefContainsAlpha(sourceImageRef); - // iOS display alpha info (BGRA8888/BGRX8888) - CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host; - bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst; + // current color space + CGColorSpaceRef colorspaceRef = [[self class] colorSpaceForImageRef:sourceImageRef]; // kCGImageAlphaNone is not supported in CGBitmapContextCreate. // Since the original image here has no alpha info, use kCGImageAlphaNoneSkipLast @@ -292,7 +306,7 @@ - (nullable UIImage *)sd_decompressedAndScaledDownImageWithImage:(nullable UIIma kBitsPerComponent, 0, colorspaceRef, - bitmapInfo); + kCGBitmapByteOrderDefault|kCGImageAlphaNoneSkipLast); if (destContext == NULL) { return image; @@ -378,9 +392,6 @@ - (BOOL)canEncodeToFormat:(SDImageFormat)format { case SDImageFormatHEIC: // Check HEIC encoding compatibility return [[self class] canEncodeToHEICFormat]; - case SDImageFormatHEIF: - // Check HEIF encoding compatibility - return [[self class] canEncodeToHEIFFormat]; default: return YES; } @@ -413,7 +424,7 @@ - (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format { NSMutableDictionary *properties = [NSMutableDictionary dictionary]; #if SD_UIKIT || SD_WATCH NSInteger exifOrientation = [SDWebImageCoderHelper exifOrientationFromImageOrientation:image.imageOrientation]; - [properties setValue:@(exifOrientation) forKey:(__bridge NSString *)kCGImagePropertyOrientation]; + [properties setValue:@(exifOrientation) forKey:(__bridge_transfer NSString *)kCGImagePropertyOrientation]; #endif // Add your image to the destination. @@ -442,6 +453,14 @@ + (BOOL)shouldDecodeImage:(nullable UIImage *)image { return NO; } + CGImageRef imageRef = image.CGImage; + + BOOL hasAlpha = SDCGImageRefContainsAlpha(imageRef); + // do not decode images with alpha + if (hasAlpha) { + return NO; + } + return YES; } @@ -449,24 +468,28 @@ + (BOOL)canDecodeFromHEICFormat { static BOOL canDecode = NO; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - CFStringRef imageUTType = [NSData sd_UTTypeFromSDImageFormat:SDImageFormatHEIC]; - NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers(); - if ([imageUTTypes containsObject:(__bridge NSString *)(imageUTType)]) { - canDecode = YES; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" +#if TARGET_OS_SIMULATOR || SD_WATCH + canDecode = NO; +#elif SD_MAC + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + if ([processInfo respondsToSelector:@selector(operatingSystemVersion)]) { + // macOS 10.13+ + canDecode = processInfo.operatingSystemVersion.minorVersion >= 13; + } else { + canDecode = NO; } - }); - return canDecode; -} - -+ (BOOL)canDecodeFromHEIFFormat { - static BOOL canDecode = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - CFStringRef imageUTType = [NSData sd_UTTypeFromSDImageFormat:SDImageFormatHEIF]; - NSArray *imageUTTypes = (__bridge_transfer NSArray *)CGImageSourceCopyTypeIdentifiers(); - if ([imageUTTypes containsObject:(__bridge NSString *)(imageUTType)]) { - canDecode = YES; +#elif SD_UIKIT + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + if ([processInfo respondsToSelector:@selector(operatingSystemVersion)]) { + // iOS 11+ && tvOS 11+ + canDecode = processInfo.operatingSystemVersion.majorVersion >= 11; + } else { + canDecode = NO; } +#endif +#pragma clang diagnostic pop }); return canDecode; } @@ -492,26 +515,30 @@ + (BOOL)canEncodeToHEICFormat { return canEncode; } -+ (BOOL)canEncodeToHEIFFormat { - static BOOL canEncode = NO; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSMutableData *imageData = [NSMutableData data]; - CFStringRef imageUTType = [NSData sd_UTTypeFromSDImageFormat:SDImageFormatHEIF]; - - // Create an image destination. - CGImageDestinationRef imageDestination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageData, imageUTType, 1, NULL); - if (!imageDestination) { - // Can't encode to HEIF - canEncode = NO; +#if SD_UIKIT || SD_WATCH +#pragma mark EXIF orientation tag converter ++ (UIImageOrientation)sd_imageOrientationFromImageData:(nonnull NSData *)imageData { + UIImageOrientation result = UIImageOrientationUp; + CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); + if (imageSource) { + CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); + if (properties) { + CFTypeRef val; + NSInteger exifOrientation; + val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); + if (val) { + CFNumberGetValue(val, kCFNumberNSIntegerType, &exifOrientation); + result = [SDWebImageCoderHelper imageOrientationFromEXIFOrientation:exifOrientation]; + } // else - if it's not set it remains at up + CFRelease((CFTypeRef) properties); } else { - // Can encode to HEIF - CFRelease(imageDestination); - canEncode = YES; + //NSLog(@"NO PROPERTIES, FAIL"); } - }); - return canEncode; + CFRelease(imageSource); + } + return result; } +#endif #if SD_UIKIT || SD_WATCH + (BOOL)shouldScaleDownImage:(nonnull UIImage *)image { @@ -531,6 +558,21 @@ + (BOOL)shouldScaleDownImage:(nonnull UIImage *)image { return shouldScaleDown; } + ++ (CGColorSpaceRef)colorSpaceForImageRef:(CGImageRef)imageRef { + // current + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(CGImageGetColorSpace(imageRef)); + CGColorSpaceRef colorspaceRef = CGImageGetColorSpace(imageRef); + + BOOL unsupportedColorSpace = (imageColorSpaceModel == kCGColorSpaceModelUnknown || + imageColorSpaceModel == kCGColorSpaceModelMonochrome || + imageColorSpaceModel == kCGColorSpaceModelCMYK || + imageColorSpaceModel == kCGColorSpaceModelIndexed); + if (unsupportedColorSpace) { + colorspaceRef = SDCGColorSpaceGetDeviceRGB(); + } + return colorspaceRef; +} #endif @end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.h index 9168021..508042e 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.h @@ -122,9 +122,7 @@ typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _N typedef void(^SDInternalCompletionBlock)(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL); -typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _Nullable url); - -typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL); +typedef NSString * _Nullable (^SDWebImageCacheKeyFilterBlock)(NSURL * _Nullable url); @class SDWebImageManager; @@ -143,16 +141,6 @@ typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull i */ - (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nullable NSURL *)imageURL; -/** - * Controls the complicated logic to mark as failed URLs when download error occur. - * If the delegate implement this method, we will not use the built-in way to mark URL as failed based on error code; - @param imageManager The current `SDWebImageManager` - @param imageURL The url of the image - @param error The download error for the url - @return Whether to block this url or not. Return YES to mark this URL as failed. - */ -- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldBlockFailedURL:(nonnull NSURL *)imageURL withError:(nonnull NSError *)error; - /** * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory. * NOTE: This method is called from a global queue in order to not to block the main thread. @@ -205,35 +193,15 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager]; * * @code -SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL * _Nullable url) { +[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) { url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; return [url absoluteString]; -}; +}]; * @endcode */ @property (nonatomic, copy, nullable) SDWebImageCacheKeyFilterBlock cacheKeyFilter; -/** - * The cache serializer is a block used to convert the decoded image, the source downloaded data, to the actual data used for storing to the disk cache. If you return nil, means to generate the data from the image instance, see `SDImageCache`. - * For example, if you are using WebP images and facing the slow decoding time issue when later retriving from disk cache again. You can try to encode the decoded image to JPEG/PNG format to disk cache instead of source downloaded data. - * @note The `image` arg is nonnull, but when you also provide a image transformer and the image is transformed, the `data` arg may be nil, take attention to this case. - * @note This method is called from a global queue in order to not to block the main thread. - * @code - SDWebImageManager.sharedManager.cacheSerializer = ^NSData * _Nullable(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL) { - SDImageFormat format = [NSData sd_imageFormatForImageData:data]; - switch (format) { - case SDImageFormatWebP: - return image.images ? data : nil; - default: - return data; - } - }; - * @endcode - * The default value is nil. Means we just store the source downloaded data to disk cache. - */ -@property (nonatomic, copy, nullable) SDWebImageCacheSerializerBlock cacheSerializer; - /** * Returns global SDWebImageManager instance. * diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.m index c912fb5..674b88c 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageManager.m @@ -10,9 +10,6 @@ #import "NSImage+WebCache.h" #import -#define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); -#define UNLOCK(lock) dispatch_semaphore_signal(lock); - @interface SDWebImageCombinedOperation : NSObject @property (assign, nonatomic, getter = isCancelled) BOOL cancelled; @@ -27,9 +24,7 @@ @interface SDWebImageManager () @property (strong, nonatomic, readwrite, nonnull) SDImageCache *imageCache; @property (strong, nonatomic, readwrite, nonnull) SDWebImageDownloader *imageDownloader; @property (strong, nonatomic, nonnull) NSMutableSet *failedURLs; -@property (strong, nonatomic, nonnull) dispatch_semaphore_t failedURLsLock; // a lock to keep the access to `failedURLs` thread-safe -@property (strong, nonatomic, nonnull) NSMutableSet *runningOperations; -@property (strong, nonatomic, nonnull) dispatch_semaphore_t runningOperationsLock; // a lock to keep the access to `runningOperations` thread-safe +@property (strong, nonatomic, nonnull) NSMutableArray *runningOperations; @end @@ -55,9 +50,7 @@ - (nonnull instancetype)initWithCache:(nonnull SDImageCache *)cache downloader:( _imageCache = cache; _imageDownloader = downloader; _failedURLs = [NSMutableSet new]; - _failedURLsLock = dispatch_semaphore_create(1); - _runningOperations = [NSMutableSet new]; - _runningOperationsLock = dispatch_semaphore_create(1); + _runningOperations = [NSMutableArray new]; } return self; } @@ -137,9 +130,9 @@ - (void)diskImageExistsForURL:(nullable NSURL *)url BOOL isFailedUrl = NO; if (url) { - LOCK(self.failedURLsLock); - isFailedUrl = [self.failedURLs containsObject:url]; - UNLOCK(self.failedURLsLock); + @synchronized (self.failedURLs) { + isFailedUrl = [self.failedURLs containsObject:url]; + } } if (url.absoluteString.length == 0 || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { @@ -147,15 +140,14 @@ - (void)diskImageExistsForURL:(nullable NSURL *)url return operation; } - LOCK(self.runningOperationsLock); - [self.runningOperations addObject:operation]; - UNLOCK(self.runningOperationsLock); + @synchronized (self.runningOperations) { + [self.runningOperations addObject:operation]; + } NSString *key = [self cacheKeyForURL:url]; SDImageCacheOptions cacheOptions = 0; if (options & SDWebImageQueryDataWhenInMemory) cacheOptions |= SDImageCacheQueryDataWhenInMemory; if (options & SDWebImageQueryDiskSync) cacheOptions |= SDImageCacheQueryDiskSync; - if (options & SDWebImageScaleDownLargeImages) cacheOptions |= SDImageCacheScaleDownLargeImages; __weak SDWebImageCombinedOperation *weakOperation = operation; operation.cacheOperation = [self.imageCache queryCacheOperationForKey:key options:cacheOptions done:^(UIImage *cachedImage, NSData *cachedData, SDImageCacheType cacheType) { @@ -194,7 +186,7 @@ - (void)diskImageExistsForURL:(nullable NSURL *)url downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; } - // `SDWebImageCombinedOperation` -> `SDWebImageDownloadToken` -> `downloadOperationCancelToken`, which is a `SDCallbacksDictionary` and retain the completed block below, so we need weak-strong again to avoid retain cycle + // `SDWebImageCombinedOperation` -> `SDWebImageDownloadToken` -> `downloadOperationCancelToken`, which is a `SDCallbacksDictionary` and retain the completed block bellow, so we need weak-strong again to avoid retain cycle __weak typeof(strongOperation) weakSubOperation = strongOperation; strongOperation.downloadToken = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) { __strong typeof(weakSubOperation) strongSubOperation = weakSubOperation; @@ -204,32 +196,25 @@ - (void)diskImageExistsForURL:(nullable NSURL *)url // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data } else if (error) { [self callCompletionBlockForOperation:strongSubOperation completion:completedBlock error:error url:url]; - BOOL shouldBlockFailedURL; - // Check whether we should block failed url - if ([self.delegate respondsToSelector:@selector(imageManager:shouldBlockFailedURL:withError:)]) { - shouldBlockFailedURL = [self.delegate imageManager:self shouldBlockFailedURL:url withError:error]; - } else { - shouldBlockFailedURL = ( error.code != NSURLErrorNotConnectedToInternet - && error.code != NSURLErrorCancelled - && error.code != NSURLErrorTimedOut - && error.code != NSURLErrorInternationalRoamingOff - && error.code != NSURLErrorDataNotAllowed - && error.code != NSURLErrorCannotFindHost - && error.code != NSURLErrorCannotConnectToHost - && error.code != NSURLErrorNetworkConnectionLost); - } - - if (shouldBlockFailedURL) { - LOCK(self.failedURLsLock); - [self.failedURLs addObject:url]; - UNLOCK(self.failedURLsLock); + + if ( error.code != NSURLErrorNotConnectedToInternet + && error.code != NSURLErrorCancelled + && error.code != NSURLErrorTimedOut + && error.code != NSURLErrorInternationalRoamingOff + && error.code != NSURLErrorDataNotAllowed + && error.code != NSURLErrorCannotFindHost + && error.code != NSURLErrorCannotConnectToHost + && error.code != NSURLErrorNetworkConnectionLost) { + @synchronized (self.failedURLs) { + [self.failedURLs addObject:url]; + } } } else { if ((options & SDWebImageRetryFailed)) { - LOCK(self.failedURLsLock); - [self.failedURLs removeObject:url]; - UNLOCK(self.failedURLsLock); + @synchronized (self.failedURLs) { + [self.failedURLs removeObject:url]; + } } BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly); @@ -243,36 +228,19 @@ - (void)diskImageExistsForURL:(nullable NSURL *)url // Image refresh hit the NSURLCache cache, do not call the completion block } else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - @autoreleasepool { - UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; - - if (transformedImage && finished) { - BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; - NSData *cacheData; - // pass nil if the image was transformed, so we can recalculate the data from the image - if (self.cacheSerializer) { - cacheData = self.cacheSerializer(transformedImage, (imageWasTransformed ? nil : downloadedData), url); - } else { - cacheData = (imageWasTransformed ? nil : downloadedData); - } - [self.imageCache storeImage:transformedImage imageData:cacheData forKey:key toDisk:cacheOnDisk completion:nil]; - } - - [self callCompletionBlockForOperation:strongSubOperation completion:completedBlock image:transformedImage data:downloadedData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; + UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; + + if (transformedImage && finished) { + BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; + // pass nil if the image was transformed, so we can recalculate the data from the image + [self.imageCache storeImage:transformedImage imageData:(imageWasTransformed ? nil : downloadedData) forKey:key toDisk:cacheOnDisk completion:nil]; } + + [self callCompletionBlockForOperation:strongSubOperation completion:completedBlock image:transformedImage data:downloadedData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; }); } else { if (downloadedImage && finished) { - if (self.cacheSerializer) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - @autoreleasepool { - NSData *cacheData = self.cacheSerializer(downloadedImage, downloadedData, url); - [self.imageCache storeImage:downloadedImage imageData:cacheData forKey:key toDisk:cacheOnDisk completion:nil]; - } - }); - } else { - [self.imageCache storeImage:downloadedImage imageData:downloadedData forKey:key toDisk:cacheOnDisk completion:nil]; - } + [self.imageCache storeImage:downloadedImage imageData:downloadedData forKey:key toDisk:cacheOnDisk completion:nil]; } [self callCompletionBlockForOperation:strongSubOperation completion:completedBlock image:downloadedImage data:downloadedData error:nil cacheType:SDImageCacheTypeNone finished:finished url:url]; } @@ -303,27 +271,27 @@ - (void)saveImageToCache:(nullable UIImage *)image forURL:(nullable NSURL *)url } - (void)cancelAll { - LOCK(self.runningOperationsLock); - NSSet *copiedOperations = [self.runningOperations copy]; - UNLOCK(self.runningOperationsLock); - [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; // This will call `safelyRemoveOperationFromRunning:` and remove from the array + @synchronized (self.runningOperations) { + NSArray *copiedOperations = [self.runningOperations copy]; + [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; + [self.runningOperations removeObjectsInArray:copiedOperations]; + } } - (BOOL)isRunning { BOOL isRunning = NO; - LOCK(self.runningOperationsLock); - isRunning = (self.runningOperations.count > 0); - UNLOCK(self.runningOperationsLock); + @synchronized (self.runningOperations) { + isRunning = (self.runningOperations.count > 0); + } return isRunning; } - (void)safelyRemoveOperationFromRunning:(nullable SDWebImageCombinedOperation*)operation { - if (!operation) { - return; + @synchronized (self.runningOperations) { + if (operation) { + [self.runningOperations removeObject:operation]; + } } - LOCK(self.runningOperationsLock); - [self.runningOperations removeObject:operation]; - UNLOCK(self.runningOperationsLock); } - (void)callCompletionBlockForOperation:(nullable SDWebImageCombinedOperation*)operation diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.h b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.h index 6740108..0192594 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.h @@ -62,7 +62,7 @@ typedef void (^SDWebImageTransitionCompletionBlock)(BOOL finished); @end // Convenience way to create transition. Remember to specify the duration if needed. -// for UIKit, these transition just use the correspond `animationOptions`. By default we enable `UIViewAnimationOptionAllowUserInteraction` to allow user interaction during transition. +// for UIKit, these transition just use the correspond `animationOptions` // for AppKit, these transition use Core Animation in `animations`. So your view must be layer-backed. Set `wantsLayer = YES` before you apply it. @interface SDWebImageTransition (Conveniences) diff --git a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.m b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.m index b04a4c3..122b982 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/SDWebImageTransition.m @@ -31,7 +31,7 @@ @implementation SDWebImageTransition (Conveniences) + (SDWebImageTransition *)fadeTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionCrossDissolve; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -45,7 +45,7 @@ + (SDWebImageTransition *)fadeTransition { + (SDWebImageTransition *)flipFromLeftTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionFlipFromLeft; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -60,7 +60,7 @@ + (SDWebImageTransition *)flipFromLeftTransition { + (SDWebImageTransition *)flipFromRightTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionFlipFromRight; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -75,7 +75,7 @@ + (SDWebImageTransition *)flipFromRightTransition { + (SDWebImageTransition *)flipFromTopTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionFlipFromTop; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -90,7 +90,7 @@ + (SDWebImageTransition *)flipFromTopTransition { + (SDWebImageTransition *)flipFromBottomTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionFlipFromBottom; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -105,7 +105,7 @@ + (SDWebImageTransition *)flipFromBottomTransition { + (SDWebImageTransition *)curlUpTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCurlUp | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionCurlUp; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; @@ -120,7 +120,7 @@ + (SDWebImageTransition *)curlUpTransition { + (SDWebImageTransition *)curlDownTransition { SDWebImageTransition *transition = [SDWebImageTransition new]; #if SD_UIKIT - transition.animationOptions = UIViewAnimationOptionTransitionCurlDown | UIViewAnimationOptionAllowUserInteraction; + transition.animationOptions = UIViewAnimationOptionTransitionCurlDown; #else transition.animations = ^(__kindof NSView * _Nonnull view, NSImage * _Nullable image) { CATransition *trans = [CATransition animation]; diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h deleted file mode 100644 index 9ecf5b9..0000000 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" - -@interface UIImage (MemoryCacheCost) - -/** - The memory cache cost for specify image used by image cache. The cost function is the pixles count held in memory. - If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost. - - For `UIImage`, this method return the single frame pixles count when `image.images` is nil for static image. Retuen full frame pixels count when `image.images` is not nil for animated image. - For `NSImage`, this method return the single frame pixels count because `NSImage` does not store all frames in memory. - @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. - */ -@property (assign, nonatomic) NSUInteger sd_memoryCost; - -@end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.m b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.m deleted file mode 100644 index 6f1375d..0000000 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MemoryCacheCost.m +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImage+MemoryCacheCost.h" -#import "objc/runtime.h" - -FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) { -#if SD_MAC - return image.size.height * image.size.width; -#elif SD_UIKIT || SD_WATCH - NSUInteger imageSize = image.size.height * image.size.width * image.scale * image.scale; - return image.images ? (imageSize * image.images.count) : imageSize; -#endif -} - -@implementation UIImage (MemoryCacheCost) - -- (NSUInteger)sd_memoryCost { - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost)); - NSUInteger memoryCost; - if (value != nil) { - memoryCost = [value unsignedIntegerValue]; - } else { - memoryCost = SDMemoryCacheCostForImage(self); - } - return memoryCost; -} - -- (void)setSd_memoryCost:(NSUInteger)sd_memoryCost { - objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h index 5c6f473..c0792d1 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h @@ -15,7 +15,7 @@ * UIKit: * For static image format, this value is always 0. * For animated image format, 0 means infinite looping. - * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. + * Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. * AppKit: * NSImage currently only support animated via GIF imageRep unlike UIImage. * The getter of this property will get the loop count from GIF imageRep @@ -23,13 +23,6 @@ */ @property (nonatomic, assign) NSUInteger sd_imageLoopCount; -/** - * The image format represent the original compressed image data format. - * If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value. - * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods. - */ -@property (nonatomic, assign) SDImageFormat sd_imageFormat; - + (nullable UIImage *)sd_imageWithData:(nullable NSData *)data; - (nullable NSData *)sd_imageData; - (nullable NSData *)sd_imageDataAsFormat:(SDImageFormat)imageFormat; diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m index d3198d2..664e096 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m @@ -7,9 +7,9 @@ */ #import "UIImage+MultiFormat.h" -#import "NSImage+WebCache.h" -#import "SDWebImageCodersManager.h" + #import "objc/runtime.h" +#import "SDWebImageCodersManager.h" @implementation UIImage (MultiFormat) @@ -53,28 +53,6 @@ - (void)setSd_imageLoopCount:(NSUInteger)sd_imageLoopCount { } #endif -- (SDImageFormat)sd_imageFormat { - SDImageFormat imageFormat = SDImageFormatUndefined; - NSNumber *value = objc_getAssociatedObject(self, @selector(sd_imageFormat)); - if ([value isKindOfClass:[NSNumber class]]) { - imageFormat = value.integerValue; - return imageFormat; - } - // Check CGImage's UTType, may return nil for non-Image/IO based image -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - if (&CGImageGetUTType != NULL) { - CFStringRef uttype = CGImageGetUTType(self.CGImage); - imageFormat = [NSData sd_imageFormatFromUTType:uttype]; - } -#pragma clang diagnostic pop - return imageFormat; -} - -- (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat { - objc_setAssociatedObject(self, @selector(sd_imageFormat), @(sd_imageFormat), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - + (nullable UIImage *)sd_imageWithData:(nullable NSData *)data { return [[SDWebImageCodersManager sharedInstance] decodedImageWithData:data]; } diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h index d2992cb..ef2eacf 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h @@ -7,6 +7,9 @@ */ #import "SDWebImageCompat.h" + +#if SD_UIKIT || SD_MAC + #import "SDWebImageManager.h" /** @@ -27,7 +30,8 @@ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]; + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] + autorelease]; } // Here we use the provided sd_setImageWithURL: method to load the web image @@ -191,3 +195,5 @@ #endif @end + +#endif diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m index 1baea5d..aa8ce43 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m @@ -7,6 +7,9 @@ */ #import "UIImageView+WebCache.h" + +#if SD_UIKIT || SD_MAC + #import "objc/runtime.h" #import "UIView+WebCacheOperation.h" #import "UIView+WebCache.h" @@ -137,3 +140,5 @@ - (void)sd_cancelCurrentAnimationImagesLoad { #endif @end + +#endif diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.h b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.h index 5cf40ca..d89452d 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.h @@ -7,6 +7,9 @@ */ #import "SDWebImageCompat.h" + +#if SD_UIKIT || SD_MAC + #import "SDWebImageManager.h" #import "SDWebImageTransition.h" @@ -24,7 +27,6 @@ FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageExternalCustomManagerKey; FOUNDATION_EXPORT const int64_t SDWebImageProgressUnitCountUnknown; /* 1LL */ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable imageData); -typedef void(^SDInternalSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL); @interface UIView (WebCache) @@ -103,8 +105,6 @@ typedef void(^SDInternalSetImageBlock)(UIImage * _Nullable image, NSData * _Null */ - (void)sd_cancelCurrentImageLoad; -#if SD_UIKIT || SD_MAC - #pragma mark - Image Transition /** @@ -135,6 +135,6 @@ typedef void(^SDInternalSetImageBlock)(UIImage * _Nullable image, NSData * _Null #endif -#endif - @end + +#endif diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.m b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.m index 1ebd3e7..e9f6dc6 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCache.m @@ -7,6 +7,9 @@ */ #import "UIView+WebCache.h" + +#if SD_UIKIT || SD_MAC + #import "objc/runtime.h" #import "UIView+WebCacheOperation.h" @@ -20,8 +23,8 @@ #if SD_UIKIT static char TAG_ACTIVITY_INDICATOR; static char TAG_ACTIVITY_STYLE; -static char TAG_ACTIVITY_SHOW; #endif +static char TAG_ACTIVITY_SHOW; @implementation UIView (WebCache) @@ -60,53 +63,34 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock context:(nullable NSDictionary *)context { - SDInternalSetImageBlock internalSetImageBlock; - if (setImageBlock) { - internalSetImageBlock = ^(UIImage * _Nullable image, NSData * _Nullable imageData, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { - if (setImageBlock) { - setImageBlock(image, imageData); - } - }; - } - [self sd_internalSetImageWithURL:url placeholderImage:placeholder options:options operationKey:operationKey internalSetImageBlock:internalSetImageBlock progress:progressBlock completed:completedBlock context:context]; -} - -- (void)sd_internalSetImageWithURL:(nullable NSURL *)url - placeholderImage:(nullable UIImage *)placeholder - options:(SDWebImageOptions)options - operationKey:(nullable NSString *)operationKey - internalSetImageBlock:(nullable SDInternalSetImageBlock)setImageBlock - progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock - completed:(nullable SDExternalCompletionBlock)completedBlock - context:(nullable NSDictionary *)context { NSString *validOperationKey = operationKey ?: NSStringFromClass([self class]); [self sd_cancelImageLoadOperationWithKey:validOperationKey]; objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - dispatch_group_t group = context[SDWebImageInternalSetImageGroupKey]; if (!(options & SDWebImageDelayPlaceholder)) { - if (group) { + if ([context valueForKey:SDWebImageInternalSetImageGroupKey]) { + dispatch_group_t group = [context valueForKey:SDWebImageInternalSetImageGroupKey]; dispatch_group_enter(group); } dispatch_main_async_safe(^{ - [self sd_setImage:placeholder imageData:nil basedOnClassOrViaCustomSetImageBlock:setImageBlock cacheType:SDImageCacheTypeNone imageURL:url]; + [self sd_setImage:placeholder imageData:nil basedOnClassOrViaCustomSetImageBlock:setImageBlock]; }); } if (url) { -#if SD_UIKIT // check if activityView is enabled or not if ([self sd_showActivityIndicatorView]) { [self sd_addActivityIndicator]; } -#endif // reset the progress self.sd_imageProgress.totalUnitCount = 0; self.sd_imageProgress.completedUnitCount = 0; - SDWebImageManager *manager = [context objectForKey:SDWebImageExternalCustomManagerKey]; - if (!manager) { + SDWebImageManager *manager; + if ([context valueForKey:SDWebImageExternalCustomManagerKey]) { + manager = (SDWebImageManager *)[context valueForKey:SDWebImageExternalCustomManagerKey]; + } else { manager = [SDWebImageManager sharedManager]; } @@ -121,9 +105,7 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url id operation = [manager loadImageWithURL:url options:options progress:combinedProgressBlock completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { __strong __typeof (wself) sself = wself; if (!sself) { return; } -#if SD_UIKIT [sself sd_removeActivityIndicator]; -#endif // if the progress not been updated, mark it to complete state if (finished && !error && sself.sd_imageProgress.totalUnitCount == 0 && sself.sd_imageProgress.completedUnitCount == 0) { sself.sd_imageProgress.totalUnitCount = SDWebImageProgressUnitCountUnknown; @@ -162,41 +144,32 @@ - (void)sd_internalSetImageWithURL:(nullable NSURL *)url targetData = nil; } -#if SD_UIKIT || SD_MAC // check whether we should use the image transition SDWebImageTransition *transition = nil; if (finished && (options & SDWebImageForceTransition || cacheType == SDImageCacheTypeNone)) { transition = sself.sd_imageTransition; } -#endif - dispatch_main_async_safe(^{ - if (group) { - dispatch_group_enter(group); - } -#if SD_UIKIT || SD_MAC - [sself sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:transition cacheType:cacheType imageURL:imageURL]; -#else - [sself sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock cacheType:cacheType imageURL:imageURL]; -#endif - if (group) { - // compatible code for FLAnimatedImage, because we assume completedBlock called after image was set. This will be removed in 5.x - BOOL shouldUseGroup = [objc_getAssociatedObject(group, &SDWebImageInternalSetImageGroupKey) boolValue]; - if (shouldUseGroup) { - dispatch_group_notify(group, dispatch_get_main_queue(), callCompletedBlockClojure); - } else { - callCompletedBlockClojure(); - } - } else { + if ([context valueForKey:SDWebImageInternalSetImageGroupKey]) { + dispatch_group_t group = [context valueForKey:SDWebImageInternalSetImageGroupKey]; + dispatch_group_enter(group); + dispatch_main_async_safe(^{ + [sself sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:transition cacheType:cacheType imageURL:imageURL]; + }); + // ensure completion block is called after custom setImage process finish + dispatch_group_notify(group, dispatch_get_main_queue(), ^{ callCompletedBlockClojure(); - } - }); + }); + } else { + dispatch_main_async_safe(^{ + [sself sd_setImage:targetImage imageData:targetData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:transition cacheType:cacheType imageURL:imageURL]; + callCompletedBlockClojure(); + }); + } }]; [self sd_setImageLoadOperation:operation forKey:validOperationKey]; } else { dispatch_main_async_safe(^{ -#if SD_UIKIT [self sd_removeActivityIndicator]; -#endif if (completedBlock) { NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; completedBlock(nil, error, SDImageCacheTypeNone, url); @@ -209,36 +182,28 @@ - (void)sd_cancelCurrentImageLoad { [self sd_cancelImageLoadOperationWithKey:NSStringFromClass([self class])]; } -- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDInternalSetImageBlock)setImageBlock cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { -#if SD_UIKIT || SD_MAC - [self sd_setImage:image imageData:imageData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:nil cacheType:cacheType imageURL:imageURL]; -#else - // watchOS does not support view transition. Simplify the logic - if (setImageBlock) { - setImageBlock(image, imageData, cacheType, imageURL); - } else if ([self isKindOfClass:[UIImageView class]]) { - UIImageView *imageView = (UIImageView *)self; - [imageView setImage:image]; - } -#endif +- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock { + [self sd_setImage:image imageData:imageData basedOnClassOrViaCustomSetImageBlock:setImageBlock transition:nil cacheType:0 imageURL:nil]; } -#if SD_UIKIT || SD_MAC -- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDInternalSetImageBlock)setImageBlock transition:(SDWebImageTransition *)transition cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { +- (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassOrViaCustomSetImageBlock:(SDSetImageBlock)setImageBlock transition:(SDWebImageTransition *)transition cacheType:(SDImageCacheType)cacheType imageURL:(NSURL *)imageURL { UIView *view = self; - SDInternalSetImageBlock finalSetImageBlock; + SDSetImageBlock finalSetImageBlock; if (setImageBlock) { finalSetImageBlock = setImageBlock; - } else if ([view isKindOfClass:[UIImageView class]]) { + } +#if SD_UIKIT || SD_MAC + else if ([view isKindOfClass:[UIImageView class]]) { UIImageView *imageView = (UIImageView *)view; - finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData, SDImageCacheType setCacheType, NSURL *setImageURL) { + finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData) { imageView.image = setImage; }; } +#endif #if SD_UIKIT else if ([view isKindOfClass:[UIButton class]]) { UIButton *button = (UIButton *)view; - finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData, SDImageCacheType setCacheType, NSURL *setImageURL) { + finalSetImageBlock = ^(UIImage *setImage, NSData *setImageData){ [button setImage:setImage forState:UIControlStateNormal]; }; } @@ -254,7 +219,7 @@ - (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassO } completion:^(BOOL finished) { [UIView transitionWithView:view duration:transition.duration options:transition.animationOptions animations:^{ if (finalSetImageBlock && !transition.avoidAutoSetImage) { - finalSetImageBlock(image, imageData, cacheType, imageURL); + finalSetImageBlock(image, imageData); } if (transition.animations) { transition.animations(view, image); @@ -274,7 +239,7 @@ - (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassO context.timingFunction = transition.timingFunction; context.allowsImplicitAnimation = (transition.animationOptions & SDWebImageAnimationOptionAllowsImplicitAnimation); if (finalSetImageBlock && !transition.avoidAutoSetImage) { - finalSetImageBlock(image, imageData, cacheType, imageURL); + finalSetImageBlock(image, imageData); } if (transition.animations) { transition.animations(view, image); @@ -288,24 +253,19 @@ - (void)sd_setImage:(UIImage *)image imageData:(NSData *)imageData basedOnClassO #endif } else { if (finalSetImageBlock) { - finalSetImageBlock(image, imageData, cacheType, imageURL); + finalSetImageBlock(image, imageData); } } } -#endif - (void)sd_setNeedsLayout { #if SD_UIKIT [self setNeedsLayout]; #elif SD_MAC [self setNeedsLayout:YES]; -#elif SD_WATCH - // Do nothing because WatchKit automatically layout the view after property change #endif } -#if SD_UIKIT || SD_MAC - #pragma mark - Image Transition - (SDWebImageTransition *)sd_imageTransition { return objc_getAssociatedObject(self, @selector(sd_imageTransition)); @@ -315,9 +275,10 @@ - (void)setSd_imageTransition:(SDWebImageTransition *)sd_imageTransition { objc_setAssociatedObject(self, @selector(sd_imageTransition), sd_imageTransition, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -#if SD_UIKIT - #pragma mark - Activity indicator + +#pragma mark - +#if SD_UIKIT - (UIActivityIndicatorView *)activityIndicator { return (UIActivityIndicatorView *)objc_getAssociatedObject(self, &TAG_ACTIVITY_INDICATOR); } @@ -325,6 +286,7 @@ - (UIActivityIndicatorView *)activityIndicator { - (void)setActivityIndicator:(UIActivityIndicatorView *)activityIndicator { objc_setAssociatedObject(self, &TAG_ACTIVITY_INDICATOR, activityIndicator, OBJC_ASSOCIATION_RETAIN); } +#endif - (void)sd_setShowActivityIndicatorView:(BOOL)show { objc_setAssociatedObject(self, &TAG_ACTIVITY_SHOW, @(show), OBJC_ASSOCIATION_RETAIN); @@ -334,6 +296,7 @@ - (BOOL)sd_showActivityIndicatorView { return [objc_getAssociatedObject(self, &TAG_ACTIVITY_SHOW) boolValue]; } +#if SD_UIKIT - (void)sd_setIndicatorStyle:(UIActivityIndicatorViewStyle)style{ objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN); } @@ -341,8 +304,10 @@ - (void)sd_setIndicatorStyle:(UIActivityIndicatorViewStyle)style{ - (int)sd_getIndicatorStyle{ return [objc_getAssociatedObject(self, &TAG_ACTIVITY_STYLE) intValue]; } +#endif - (void)sd_addActivityIndicator { +#if SD_UIKIT dispatch_main_async_safe(^{ if (!self.activityIndicator) { self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:[self sd_getIndicatorStyle]]; @@ -367,19 +332,20 @@ - (void)sd_addActivityIndicator { } [self.activityIndicator startAnimating]; }); +#endif } - (void)sd_removeActivityIndicator { +#if SD_UIKIT dispatch_main_async_safe(^{ if (self.activityIndicator) { [self.activityIndicator removeFromSuperview]; self.activityIndicator = nil; } }); +#endif } -#endif +@end #endif - -@end diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h index 0be284b..5d44691 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h @@ -7,7 +7,10 @@ */ #import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" + +#if SD_UIKIT || SD_MAC + +#import "SDWebImageManager.h" // These methods are used to support canceling for UIView image loading, it's designed to be used internal but not external. // All the stored operations are weak, so it will be dalloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them. @@ -36,3 +39,5 @@ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; @end + +#endif diff --git a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m index cd769be..3d1329c 100644 --- a/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m +++ b/Example/new/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m @@ -7,6 +7,9 @@ */ #import "UIView+WebCacheOperation.h" + +#if SD_UIKIT || SD_MAC + #import "objc/runtime.h" static char loadOperationKey; @@ -42,21 +45,18 @@ - (void)sd_setImageLoadOperation:(nullable id)operation for } - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key { - if (key) { - // Cancel in progress downloader from queue - SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; - id operation; - - @synchronized (self) { - operation = [operationDictionary objectForKey:key]; + // Cancel in progress downloader from queue + SDOperationsDictionary *operationDictionary = [self sd_operationDictionary]; + id operation; + @synchronized (self) { + operation = [operationDictionary objectForKey:key]; + } + if (operation) { + if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]){ + [operation cancel]; } - if (operation) { - if ([operation conformsToProtocol:@protocol(SDWebImageOperation)]) { - [operation cancel]; - } - @synchronized (self) { - [operationDictionary removeObjectForKey:key]; - } + @synchronized (self) { + [operationDictionary removeObjectForKey:key]; } } } @@ -71,3 +71,5 @@ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key { } @end + +#endif diff --git a/Example/new/Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig b/Example/new/Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig index e7464f5..51f0f47 100644 --- a/Example/new/Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig +++ b/Example/new/Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BlocksKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BlocksKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -framework "MessageUI" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/Bugsnag/Bugsnag.xcconfig b/Example/new/Pods/Target Support Files/Bugsnag/Bugsnag.xcconfig index 8b50a25..a7b026e 100644 --- a/Example/new/Pods/Target Support Files/Bugsnag/Bugsnag.xcconfig +++ b/Example/new/Pods/Target Support Files/Bugsnag/Bugsnag.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bugsnag GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bugsnag" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Bugsnag" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bugsnag" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -l"c++" -l"z" -framework "Foundation" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig b/Example/new/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig deleted file mode 100644 index ac2fdf6..0000000 --- a/Example/new/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Crashlytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Crashlytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/new/Pods/Target Support Files/Fabric/Fabric.xcconfig b/Example/new/Pods/Target Support Files/Fabric/Fabric.xcconfig deleted file mode 100644 index 3a9dd3e..0000000 --- a/Example/new/Pods/Target Support Files/Fabric/Fabric.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Fabric -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Fabric -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Example/new/Pods/Target Support Files/JGProgressHUD/JGProgressHUD.xcconfig b/Example/new/Pods/Target Support Files/JGProgressHUD/JGProgressHUD.xcconfig index 6c43fbd..05085af 100644 --- a/Example/new/Pods/Target Support Files/JGProgressHUD/JGProgressHUD.xcconfig +++ b/Example/new/Pods/Target Support Files/JGProgressHUD/JGProgressHUD.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/JGProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/JGProgressHUD" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/JGProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-Info.plist b/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-Info.plist deleted file mode 100644 index 7f89207..0000000 --- a/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 2.0.3 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist b/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist deleted file mode 100644 index 7f89207..0000000 --- a/Example/new/Pods/Target Support Files/JGProgressHUD/ResourceBundle-JGProgressHUD-JGProgressHUD-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 2.0.3 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/Example/new/Pods/Target Support Files/MMMaterialDesignSpinner/MMMaterialDesignSpinner.xcconfig b/Example/new/Pods/Target Support Files/MMMaterialDesignSpinner/MMMaterialDesignSpinner.xcconfig index e8a997f..5b2cf0c 100644 --- a/Example/new/Pods/Target Support Files/MMMaterialDesignSpinner/MMMaterialDesignSpinner.xcconfig +++ b/Example/new/Pods/Target Support Files/MMMaterialDesignSpinner/MMMaterialDesignSpinner.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MMMaterialDesignSpinner GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -framework "CoreGraphics" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/Masonry/Masonry.xcconfig b/Example/new/Pods/Target Support Files/Masonry/Masonry.xcconfig index fcb7965..484aa7c 100644 --- a/Example/new/Pods/Target Support Files/Masonry/Masonry.xcconfig +++ b/Example/new/Pods/Target Support Files/Masonry/Masonry.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.markdown b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.markdown index 2e28c15..3d9c730 100644 --- a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.markdown +++ b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.markdown @@ -41,17 +41,42 @@ THE SOFTWARE. ## Crashlytics -Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt +Fabric: Copyright 2016 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2016 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt ## Fabric -Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt +Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + +## HappyDNS + +The MIT License (MIT) + +Copyright (c) 2012-2016 qiniu.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + ## JGProgressHUD The MIT License (MIT) -Copyright (c) 2014-2018 Jonas Gessner +Copyright (c) 2014-2017 Jonas Gessner Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.plist b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.plist index a7e02d6..44825df 100644 --- a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.plist +++ b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-acknowledgements.plist @@ -64,7 +64,7 @@ THE SOFTWARE. FooterText - Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + Fabric: Copyright 2016 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2016 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt License Commercial Title @@ -74,7 +74,7 @@ THE SOFTWARE. FooterText - Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + Fabric: Copyright 2015 Twitter, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt License Commercial Title @@ -86,7 +86,38 @@ THE SOFTWARE. FooterText The MIT License (MIT) -Copyright (c) 2014-2018 Jonas Gessner +Copyright (c) 2012-2016 qiniu.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + HappyDNS + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2014-2017 Jonas Gessner Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh index e6448c7..4964fb4 100755 --- a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh +++ b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer-resources.sh @@ -97,11 +97,21 @@ EOM esac } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.bundle" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@2x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@3x.png" install_resource "${PODS_ROOT}/WeiboSDK/libWeiboSDK/WeiboSDK.bundle" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD/JGProgressHUD.bundle" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@2x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_error@3x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@2x.png" + install_resource "${PODS_ROOT}/JGProgressHUD/JGProgressHUD/Resources/jg_hud_success@3x.png" install_resource "${PODS_ROOT}/WeiboSDK/libWeiboSDK/WeiboSDK.bundle" fi diff --git a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.debug.xcconfig b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.debug.xcconfig index d713b21..953a3ef 100644 --- a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.debug.xcconfig +++ b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.debug.xcconfig @@ -2,10 +2,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../../Pod/Library" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/Bugsnag" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MMMaterialDesignSpinner" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_ROOT}/WeiboSDK/libWeiboSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"Bugsnag" -l"JGProgressHUD" -l"MMMaterialDesignSpinner" -l"Masonry" -l"SDWebImage" -l"WeiboSDK" -l"bz2" -l"c++" -l"iconv" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "Accelerate" -framework "AudioToolbox" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "ImageIO" -framework "MediaPlayer" -framework "MessageUI" -framework "OpenGLES" -framework "PLPlayerKit" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/Bugsnag" "${PODS_CONFIGURATION_BUILD_DIR}/HappyDNS" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MMMaterialDesignSpinner" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_ROOT}/WeiboSDK/libWeiboSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"Bugsnag" -l"HappyDNS" -l"JGProgressHUD" -l"MMMaterialDesignSpinner" -l"Masonry" -l"SDWebImage" -l"WeiboSDK" -l"bz2" -l"c++" -l"iconv" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "Accelerate" -framework "AudioToolbox" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "ImageIO" -framework "MediaPlayer" -framework "MessageUI" -framework "OpenGLES" -framework "PLPlayerKit" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.release.xcconfig b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.release.xcconfig index d713b21..953a3ef 100644 --- a/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.release.xcconfig +++ b/Example/new/Pods/Target Support Files/Pods-NiuPlayer/Pods-NiuPlayer.release.xcconfig @@ -2,10 +2,10 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../../Pod/Library" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/Bugsnag" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MMMaterialDesignSpinner" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_ROOT}/WeiboSDK/libWeiboSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"Bugsnag" -l"JGProgressHUD" -l"MMMaterialDesignSpinner" -l"Masonry" -l"SDWebImage" -l"WeiboSDK" -l"bz2" -l"c++" -l"iconv" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "Accelerate" -framework "AudioToolbox" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "ImageIO" -framework "MediaPlayer" -framework "MessageUI" -framework "OpenGLES" -framework "PLPlayerKit" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/Bugsnag" "${PODS_CONFIGURATION_BUILD_DIR}/HappyDNS" "${PODS_CONFIGURATION_BUILD_DIR}/JGProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MMMaterialDesignSpinner" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_ROOT}/WeiboSDK/libWeiboSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"Bugsnag" -l"HappyDNS" -l"JGProgressHUD" -l"MMMaterialDesignSpinner" -l"Masonry" -l"SDWebImage" -l"WeiboSDK" -l"bz2" -l"c++" -l"iconv" -l"resolv" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "Accelerate" -framework "AudioToolbox" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "ImageIO" -framework "MediaPlayer" -framework "MessageUI" -framework "OpenGLES" -framework "PLPlayerKit" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/new/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/Example/new/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig index 71e53f9..b7e155c 100644 --- a/Example/new/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ b/Example/new/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig @@ -1,6 +1,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/Bugsnag" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" "${PODS_ROOT}/Headers/Public/HappyDNS" "${PODS_ROOT}/Headers/Public/JGProgressHUD" "${PODS_ROOT}/Headers/Public/MMMaterialDesignSpinner" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/WeiboSDK" +OTHER_LDFLAGS = -framework "ImageIO" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/new/Pods/Target Support Files/WeiboSDK/WeiboSDK.xcconfig b/Example/new/Pods/Target Support Files/WeiboSDK/WeiboSDK.xcconfig deleted file mode 100644 index 21fe17e..0000000 --- a/Example/new/Pods/Target Support Files/WeiboSDK/WeiboSDK.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WeiboSDK -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/WeiboSDK" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/WeiboSDK" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/WeiboSDK -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/PLPlayerKit-Universal.podspec b/PLPlayerKit-Universal.podspec index 1881ab7..59dd9a2 100644 --- a/PLPlayerKit-Universal.podspec +++ b/PLPlayerKit-Universal.podspec @@ -9,12 +9,12 @@ Pod::Spec.new do |s| s.name = "PLPlayerKit" - s.version = "3.4.6" + s.version = "3.4.7" s.summary = "Pili iOS video player SDK, RTMP, HLS video streaming supported." s.homepage = "https://github.com/pili-engineering/PLPlayerKit" s.license = 'Apache License, Version 2.0' s.author = { "pili" => "pili-coresdk@qiniu.com" } - s.source = { :http => "https://sdk-release.qnsdk.com/PLPlayerKit-universal-v3.4.6.zip" } + s.source = { :http => "https://sdk-release.qnsdk.com/PLPlayerKit-universal-v3.4.7.zip" } s.platform = :ios, '8.0' s.requires_arc = true diff --git a/PLPlayerKit.podspec b/PLPlayerKit.podspec index e56faf3..dd0b622 100644 --- a/PLPlayerKit.podspec +++ b/PLPlayerKit.podspec @@ -9,12 +9,12 @@ Pod::Spec.new do |s| s.name = "PLPlayerKit" - s.version = "3.4.6" + s.version = "3.4.7" s.summary = "Pili iOS video player SDK, RTMP, HLS video streaming supported." s.homepage = "https://github.com/pili-engineering/PLPlayerKit" s.license = 'Apache License, Version 2.0' s.author = { "pili" => "pili-coresdk@qiniu.com" } - s.source = { :http => "https://sdk-release.qnsdk.com/PLPlayerKit-iphoneos-v3.4.6.zip" } + s.source = { :http => "https://sdk-release.qnsdk.com/PLPlayerKit-iphoneos-v3.4.7.zip" } s.platform = :ios, '8.0' s.requires_arc = true diff --git a/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Info.plist b/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Info.plist index 2f4caff..49bd6e6 100644 --- a/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Info.plist +++ b/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Info.plist @@ -13,7 +13,7 @@ CFBundleSignature ???? CFBundleShortVersionString - 3.4.6 + 3.4.7 CFBundleVersion 1 diff --git a/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit b/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit index 0033e82..778af6d 100644 Binary files a/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit and b/Pod/Library-Universal/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit differ diff --git a/Pod/Library-Universal/PLPlayerKit.framework/Headers/PLPlayerOption.h b/Pod/Library-Universal/PLPlayerKit.framework/Headers/PLPlayerOption.h index 0fb5681..2f5e8d0 100644 --- a/Pod/Library-Universal/PLPlayerKit.framework/Headers/PLPlayerOption.h +++ b/Pod/Library-Universal/PLPlayerKit.framework/Headers/PLPlayerOption.h @@ -104,7 +104,6 @@ extern NSString * _Nonnull PLPlayerOptionKeyTimeoutIntervalForMediaPackets; @discussion 该缓存存放的是网络层读取到的数据,为保证实时性,超过该缓存池大小的过期音频数据将被丢弃,视频将加速渲染追上音频 - @warning 该参数仅对 rtmp/flv 直播生效 @since v2.1.3 */ @@ -115,12 +114,22 @@ extern NSString * _Nonnull PLPlayerOptionKeyMaxL1BufferDuration; @discussion 该缓存存放的是解码之后待渲染的数据,如果该缓存池满,则二级缓存将不再接收来自一级缓存的数据 - @warning 该参数仅对 rtmp/flv 直播生效 @since v2.1.3 */ extern NSString * _Nonnull PLPlayerOptionKeyMaxL2BufferDuration; + +/** + @abstract 用于是否根据最小缓冲时间和最大缓冲时间,使播放速度变慢或变快 + + @discussion 默认 YES ,即底层会自动根据缓存 buffer 调节速率。注意点播播放的时候,需关闭这个参数 + + @since v3.4.7 + */ +extern NSString * _Nonnull PLPlayerOptionKeyCacheBufferDurationSpeedAdjust; + + /** @abstract 是否使用 video toolbox 硬解码。 diff --git a/Pod/Library-Universal/PLPlayerKit.framework/Info.plist b/Pod/Library-Universal/PLPlayerKit.framework/Info.plist index 53a9a3b..2bbc22c 100644 Binary files a/Pod/Library-Universal/PLPlayerKit.framework/Info.plist and b/Pod/Library-Universal/PLPlayerKit.framework/Info.plist differ diff --git a/Pod/Library-Universal/PLPlayerKit.framework/PLPlayerKit b/Pod/Library-Universal/PLPlayerKit.framework/PLPlayerKit index 8ca3383..736a767 100755 Binary files a/Pod/Library-Universal/PLPlayerKit.framework/PLPlayerKit and b/Pod/Library-Universal/PLPlayerKit.framework/PLPlayerKit differ diff --git a/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Info.plist b/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Info.plist index 2f4caff..49bd6e6 100644 --- a/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Info.plist +++ b/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Info.plist @@ -13,7 +13,7 @@ CFBundleSignature ???? CFBundleShortVersionString - 3.4.6 + 3.4.7 CFBundleVersion 1 diff --git a/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit b/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit index dbfe349..778af6d 100644 Binary files a/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit and b/Pod/Library/PLPlayerKit.framework.dSYM/Contents/Resources/DWARF/PLPlayerKit differ diff --git a/Pod/Library/PLPlayerKit.framework/Headers/PLPlayerOption.h b/Pod/Library/PLPlayerKit.framework/Headers/PLPlayerOption.h index 0fb5681..2f5e8d0 100644 --- a/Pod/Library/PLPlayerKit.framework/Headers/PLPlayerOption.h +++ b/Pod/Library/PLPlayerKit.framework/Headers/PLPlayerOption.h @@ -104,7 +104,6 @@ extern NSString * _Nonnull PLPlayerOptionKeyTimeoutIntervalForMediaPackets; @discussion 该缓存存放的是网络层读取到的数据,为保证实时性,超过该缓存池大小的过期音频数据将被丢弃,视频将加速渲染追上音频 - @warning 该参数仅对 rtmp/flv 直播生效 @since v2.1.3 */ @@ -115,12 +114,22 @@ extern NSString * _Nonnull PLPlayerOptionKeyMaxL1BufferDuration; @discussion 该缓存存放的是解码之后待渲染的数据,如果该缓存池满,则二级缓存将不再接收来自一级缓存的数据 - @warning 该参数仅对 rtmp/flv 直播生效 @since v2.1.3 */ extern NSString * _Nonnull PLPlayerOptionKeyMaxL2BufferDuration; + +/** + @abstract 用于是否根据最小缓冲时间和最大缓冲时间,使播放速度变慢或变快 + + @discussion 默认 YES ,即底层会自动根据缓存 buffer 调节速率。注意点播播放的时候,需关闭这个参数 + + @since v3.4.7 + */ +extern NSString * _Nonnull PLPlayerOptionKeyCacheBufferDurationSpeedAdjust; + + /** @abstract 是否使用 video toolbox 硬解码。 diff --git a/Pod/Library/PLPlayerKit.framework/Info.plist b/Pod/Library/PLPlayerKit.framework/Info.plist index 53a9a3b..2bbc22c 100644 Binary files a/Pod/Library/PLPlayerKit.framework/Info.plist and b/Pod/Library/PLPlayerKit.framework/Info.plist differ diff --git a/Pod/Library/PLPlayerKit.framework/PLPlayerKit b/Pod/Library/PLPlayerKit.framework/PLPlayerKit index d06d757..b88c53d 100755 Binary files a/Pod/Library/PLPlayerKit.framework/PLPlayerKit and b/Pod/Library/PLPlayerKit.framework/PLPlayerKit differ diff --git a/README.md b/README.md index a9abbfd..5657ae3 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,19 @@ self.player.delegate = self; - OpenSSL: OpenSSL_1_1_0f - Speex: v1.2.0 -## 版本历史 +## 版本历史 + +- 3.4.7 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.7.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.7.md)) +- 优化 + - 支持图片色彩空间 BT709 + +- 缺陷 + - 修复边下边播没有全部缓存结束,断网。播放缓存不流畅 bug + - 修复精准 seek 后多次缓存回调 bug + - 修复弱网 h265 花屏 bug + +- 其他 + - 更新三方依赖库 - 3.4.6 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.6.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.6.md)) @@ -258,18 +270,19 @@ self.player.delegate = self; - 3.4.5 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.5.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.5.md)) - 缺陷 - - 修复播放器播放aac纯音频总时间不准确 + - 修复播放器播放 AAC 纯音频总时间不准确 - 修复快速切换播放地址一段时间后崩溃 - - 修复h264 split 不正确, 硬解奔溃,软解花屏 - - 修复sei 信息解析越界问题 + - 修复 H.264 split 不正确, 硬解崩溃,软解花屏 + - 修复 SEI 信息解析越界问题 - 修复打点信息重复上传 - 修复打点信息 dns 解析耗时计算不正确 - 优化设置超时过短有可能导致的 rtsp 流打开失败的问题 - 修复 FFmpeg 检测漏洞的问题 - - 修复hls加密文件的秘钥前缀是//无法播放 + - 修复 hls 加密文件的秘钥前缀是 // 无法播放 - 修复播放未开播的直播资源,播放器无限制重试不符合预期 - 播放完成后,切换后台再切到前台视频画面变黑屏 + - 3.4.4 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.4.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.4.md)) - 缺陷 @@ -281,12 +294,12 @@ self.player.delegate = self; - 修复纯音频播放偶现 crash 的问题 - 修复弱网下特定视频卡死的问题 - 修复特定视频 seek 内存泄漏的问题 - + - 3.4.3 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.3.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.3.md)) - 缺陷 - - 修复 iOS13 下,playerView 修改 contentMode 崩溃的问题 - + - 修复 iOS13 下,playerView 修改 contentMode 崩溃的问题 + - 3.4.2 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.2.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.2.md)) - 缺陷 @@ -294,7 +307,7 @@ self.player.delegate = self; - 修复偶现 4G 网络下打开链接失败的问题 - 修复在后台时直播流分辨率变化,回到前台播放显示异常的问题 - 解决直播流分辨率变化,回调宽高不准确的问题 - - 解决部分 flv 流转推后,播放过程中频繁缓冲的问题 + - 解决部分 flv 流转推后,播放过程中频繁缓冲的问题 - 3.4.1 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.1.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.1.md)) diff --git a/ReleaseNotes/release-notes-3.4.7.md b/ReleaseNotes/release-notes-3.4.7.md new file mode 100644 index 0000000..3861742 --- /dev/null +++ b/ReleaseNotes/release-notes-3.4.7.md @@ -0,0 +1,41 @@ +# PLPlayerKit Release Notes for 3.4.7 + +## 内容 + +- [简介](#简介) +- [问题反馈](#问题反馈) +- [记录](#记录) + +## 简介 + +PLPlayerKit 为 iOS 开发者提供直播播放 SDK。 + +## 问题反馈 + +当你遇到任何问题时,可以通过在 GitHub 的 repo 提交 ```issues``` 来反馈问题,请尽可能的描述清楚遇到的问题,如果有错误信息也一同附带,并且在 ```Labels``` 中指明类型为 bug 或者其他。 + +[通过这里查看已有的 issues 和提交 Bug](https://github.com/pili-engineering/PLPlayerKit/issues) + +## 记录 + +### Player + +- 3.4.7 ([Release Notes](https://github.com/pili-engineering/PLPlayerKit/blob/master/ReleaseNotes/release-notes-3.4.7.md) && [API Diffs](https://github.com/pili-engineering/PLPlayerKit/blob/master/APIDiffs/api-diffs-3.4.7.md)) + +- 优化 + + - 支持图片色彩空间 BT709 + +- 缺陷 + + - 修复边下边播没有全部缓存结束,断网。播放缓存不流畅 bug + - 修复精准 seek 后多次缓存回调 bug + - 修复弱网 h265 花屏 bug + +- 其他 + + - 更新第三方依赖库 + + + +