Commit f14ff2de authored by gm-mini's avatar gm-mini

mbp

parent 98cf49fa
...@@ -10,7 +10,7 @@ source 'git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git' ...@@ -10,7 +10,7 @@ source 'git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git'
target 'GMShareSDK_Example' do target 'GMShareSDK_Example' do
pod 'GMShareSDK', :path => '../' pod 'GMShareSDK', :path => '../'
pod 'MBProgressHUD', '1.1.0' pod 'MBProgressHUD', '0.9.2'
target 'GMShareSDK_Tests' do target 'GMShareSDK_Tests' do
inherit! :search_paths inherit! :search_paths
......
...@@ -54,7 +54,7 @@ PODS: ...@@ -54,7 +54,7 @@ PODS:
- WechatOpenSDK - WechatOpenSDK
- WeiboSDK - WeiboSDK
- Masonry (1.1.0) - Masonry (1.1.0)
- MBProgressHUD (1.1.0) - MBProgressHUD (0.9.2)
- SDWebImage (5.4.0): - SDWebImage (5.4.0):
- SDWebImage/Core (= 5.4.0) - SDWebImage/Core (= 5.4.0)
- SDWebImage/Core (5.4.0) - SDWebImage/Core (5.4.0)
...@@ -64,7 +64,7 @@ PODS: ...@@ -64,7 +64,7 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- GMShareSDK (from `../`) - GMShareSDK (from `../`)
- MBProgressHUD (= 1.1.0) - MBProgressHUD (= 0.9.2)
SPEC REPOS: SPEC REPOS:
"git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git": "git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git":
...@@ -97,12 +97,12 @@ SPEC CHECKSUMS: ...@@ -97,12 +97,12 @@ SPEC CHECKSUMS:
GMPhobos: 1e2d68c456b69bf156276d7242877498107474db GMPhobos: 1e2d68c456b69bf156276d7242877498107474db
GMShareSDK: 0eb73091491849a0f0bcf8c976ddef860fb44c0e GMShareSDK: 0eb73091491849a0f0bcf8c976ddef860fb44c0e
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 MBProgressHUD: 1569cf7ace17a8bac47aabfbb8580a49690386d1
SDWebImage: 5bf6aec6481ae2a062bdc59f9d6c1d1e552090e0 SDWebImage: 5bf6aec6481ae2a062bdc59f9d6c1d1e552090e0
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
WechatOpenSDK: 368ae03b72ee3ea1328c4f11326fbb5d2721d118 WechatOpenSDK: 368ae03b72ee3ea1328c4f11326fbb5d2721d118
WeiboSDK: acb067053668102cf07d01aa7604350162c2e466 WeiboSDK: acb067053668102cf07d01aa7604350162c2e466
PODFILE CHECKSUM: f7f43230ff4b071c07a8cd96821fe597fdb590f6 PODFILE CHECKSUM: 7d810478599596071b1f4191c35ed3266ebed840
COCOAPODS: 1.8.4 COCOAPODS: 1.8.4
Copyright © 2009-2016 Matej Bukovinski Copyright (c) 2009-2015 Matej Bukovinski
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
......
// //
// MBProgressHUD.h // MBProgressHUD.h
// Version 1.1.0 // Version 0.9.2
// Created by Matej Bukovinski on 2.4.09. // Created by Matej Bukovinski on 2.4.09.
// //
// This code is distributed under the terms and conditions of the MIT license. // This code is distributed under the terms and conditions of the MIT license.
// Copyright © 2009-2016 Matej Bukovinski // Copyright (c) 2009-2015 Matej Bukovinski
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
...@@ -30,67 +30,90 @@ ...@@ -30,67 +30,90 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import <CoreGraphics/CoreGraphics.h> #import <CoreGraphics/CoreGraphics.h>
@class MBBackgroundView;
@protocol MBProgressHUDDelegate; @protocol MBProgressHUDDelegate;
extern CGFloat const MBProgressMaxOffset;
typedef NS_ENUM(NSInteger, MBProgressHUDMode) { typedef NS_ENUM(NSInteger, MBProgressHUDMode) {
/// UIActivityIndicatorView. /** Progress is shown using an UIActivityIndicatorView. This is the default. */
MBProgressHUDModeIndeterminate, MBProgressHUDModeIndeterminate,
/// A round, pie-chart like, progress view. /** Progress is shown using a round, pie-chart like, progress view. */
MBProgressHUDModeDeterminate, MBProgressHUDModeDeterminate,
/// Horizontal progress bar. /** Progress is shown using a horizontal progress bar */
MBProgressHUDModeDeterminateHorizontalBar, MBProgressHUDModeDeterminateHorizontalBar,
/// Ring-shaped progress view. /** Progress is shown using a ring-shaped progress view. */
MBProgressHUDModeAnnularDeterminate, MBProgressHUDModeAnnularDeterminate,
/// Shows a custom view. /** Shows a custom view */
MBProgressHUDModeCustomView, MBProgressHUDModeCustomView,
/// Shows only labels. /** Shows only labels */
MBProgressHUDModeText MBProgressHUDModeText
}; };
typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) { typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) {
/// Opacity animation /** Opacity animation */
MBProgressHUDAnimationFade, MBProgressHUDAnimationFade,
/// Opacity + scale animation (zoom in when appearing zoom out when disappearing) /** Opacity + scale animation */
MBProgressHUDAnimationZoom, MBProgressHUDAnimationZoom,
/// Opacity + scale animation (zoom out style) MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom,
MBProgressHUDAnimationZoomOut, MBProgressHUDAnimationZoomIn
/// Opacity + scale animation (zoom in style)
MBProgressHUDAnimationZoomIn
}; };
typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) {
/// Solid color background
MBProgressHUDBackgroundStyleSolidColor,
/// UIVisualEffectView or UIToolbar.layer background view
MBProgressHUDBackgroundStyleBlur
};
typedef void (^MBProgressHUDCompletionBlock)(void); #ifndef MB_INSTANCETYPE
#if __has_feature(objc_instancetype)
#define MB_INSTANCETYPE instancetype
#else
#define MB_INSTANCETYPE id
#endif
#endif
#ifndef MB_STRONG
#if __has_feature(objc_arc)
#define MB_STRONG strong
#else
#define MB_STRONG retain
#endif
#endif
#ifndef MB_WEAK
#if __has_feature(objc_arc_weak)
#define MB_WEAK weak
#elif __has_feature(objc_arc)
#define MB_WEAK unsafe_unretained
#else
#define MB_WEAK assign
#endif
#endif
NS_ASSUME_NONNULL_BEGIN #if NS_BLOCKS_AVAILABLE
typedef void (^MBProgressHUDCompletionBlock)();
#endif
/** /**
* Displays a simple HUD window containing a progress indicator and two optional labels for short messages. * Displays a simple HUD window containing a progress indicator and two optional labels for short messages.
* *
* This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class.
* The MBProgressHUD window spans over the entire space given to it by the initWithFrame: constructor and catches all * The MBProgressHUD window spans over the entire space given to it by the initWithFrame constructor and catches all
* user input on this region, thereby preventing the user operations on components below the view. * user input on this region, thereby preventing the user operations on components below the view. The HUD itself is
* drawn centered as a rounded semi-transparent view which resizes depending on the user specified content.
* *
* @note To still allow touches to pass through the HUD, you can set hud.userInteractionEnabled = NO. * This view supports four modes of operation:
* @attention MBProgressHUD is a UI class and should therefore only be accessed on the main thread. * - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView
* - MBProgressHUDModeDeterminate - shows a custom round progress indicator
* - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator
* - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (see `customView`)
*
* All three modes can have optional labels assigned:
* - If the labelText property is set and non-empty then a label containing the provided content is placed below the
* indicator view.
* - If also the detailsLabelText property is set then another label is placed below the first label.
*/ */
@interface MBProgressHUD : UIView @interface MBProgressHUD : UIView
/** /**
* Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:.
* *
* @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. * @note This method sets `removeFromSuperViewOnHide`. The HUD will automatically be removed from the view hierarchy when hidden.
* *
* @param view The view that the HUD will be added to * @param view The view that the HUD will be added to
* @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
...@@ -100,14 +123,12 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -100,14 +123,12 @@ NS_ASSUME_NONNULL_BEGIN
* @see hideHUDForView:animated: * @see hideHUDForView:animated:
* @see animationType * @see animationType
*/ */
+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; + (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;
/// @name Showing and hiding
/** /**
* Finds the top-most HUD subview that hasn't finished and hides it. The counterpart to this method is showHUDAddedTo:animated:. * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:.
* *
* @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. * @note This method sets `removeFromSuperViewOnHide`. The HUD will automatically be removed from the view hierarchy when hidden.
* *
* @param view The view that is going to be searched for a HUD subview. * @param view The view that is going to be searched for a HUD subview.
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
...@@ -120,38 +141,68 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -120,38 +141,68 @@ NS_ASSUME_NONNULL_BEGIN
+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; + (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;
/** /**
* Finds the top-most HUD subview that hasn't finished and returns it. * Finds all the HUD subviews and hides them.
*
* @note This method sets `removeFromSuperViewOnHide`. The HUDs will automatically be removed from the view hierarchy when hidden.
*
* @param view The view that is going to be searched for HUD subviews.
* @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use
* animations while disappearing.
* @return the number of HUDs found and removed.
*
* @see hideHUDForView:animated:
* @see animationType
*/
+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated;
/**
* Finds the top-most HUD subview and returns it.
* *
* @param view The view that is going to be searched. * @param view The view that is going to be searched.
* @return A reference to the last HUD subview discovered. * @return A reference to the last HUD subview discovered.
*/ */
+ (nullable MBProgressHUD *)HUDForView:(UIView *)view; + (MB_INSTANCETYPE)HUDForView:(UIView *)view;
/**
* Finds all HUD subviews and returns them.
*
* @param view The view that is going to be searched.
* @return All found HUD views (array of MBProgressHUD objects).
*/
+ (NSArray *)allHUDsForView:(UIView *)view;
/**
* A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with
* window.bounds as the parameter.
*
* @param window The window instance that will provide the bounds for the HUD. Should be the same instance as
* the HUD's superview (i.e., the window that the HUD will be added to).
*/
- (id)initWithWindow:(UIWindow *)window;
/** /**
* A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with
* view.bounds as the parameter. * view.bounds as the parameter
* *
* @param view The view instance that will provide the bounds for the HUD. Should be the same instance as * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as
* the HUD's superview (i.e., the view that the HUD will be added to). * the HUD's superview (i.e., the view that the HUD will be added to).
*/ */
- (instancetype)initWithView:(UIView *)view; - (id)initWithView:(UIView *)view;
/** /**
* Displays the HUD. * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so
* * the user interface can be updated. Call this method when your task is already set-up to be executed in a new thread
* @note You need to make sure that the main thread completes its run loop soon after this method call so that * (e.g., when using something like NSOperation or calling an asynchronous call like NSURLRequest).
* the user interface can be updated. Call this method when your task is already set up to be executed in a new thread
* (e.g., when using something like NSOperation or making an asynchronous call like NSURLRequest).
* *
* @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
* animations while appearing. * animations while appearing.
* *
* @see animationType * @see animationType
*/ */
- (void)showAnimated:(BOOL)animated; - (void)show:(BOOL)animated;
/** /**
* Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to * Hide the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
* hide the HUD when your task completes. * hide the HUD when your task completes.
* *
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
...@@ -159,10 +210,10 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -159,10 +210,10 @@ NS_ASSUME_NONNULL_BEGIN
* *
* @see animationType * @see animationType
*/ */
- (void)hideAnimated:(BOOL)animated; - (void)hide:(BOOL)animated;
/** /**
* Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to * Hide the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
* hide the HUD when your task completes. * hide the HUD when your task completes.
* *
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
...@@ -171,136 +222,228 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -171,136 +222,228 @@ NS_ASSUME_NONNULL_BEGIN
* *
* @see animationType * @see animationType
*/ */
- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay; - (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;
/** /**
* The HUD delegate object. Receives HUD state notifications. * Shows the HUD while a background task is executing in a new thread, then hides the HUD.
*
* This method also takes care of autorelease pools so your method does not have to be concerned with setting up a
* pool.
*
* @param method The method to be executed while the HUD is shown. This method will be executed in a new thread.
* @param target The object that the target method belongs to.
* @param object An optional object to be passed to the method.
* @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use
* animations while (dis)appearing.
*/ */
@property (weak, nonatomic) id<MBProgressHUDDelegate> delegate; - (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;
#if NS_BLOCKS_AVAILABLE
/** /**
* Called after the HUD is hiden. * Shows the HUD while a block is executing on a background queue, then hides the HUD.
*
* @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
*/ */
@property (copy, nullable) MBProgressHUDCompletionBlock completionBlock; - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block;
/* /**
* Grace period is the time (in seconds) that the invoked method may be run without * Shows the HUD while a block is executing on a background queue, then hides the HUD.
* showing the HUD. If the task finishes before the grace time runs out, the HUD will *
* not be shown at all. * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
* This may be used to prevent HUD display for very short tasks.
* Defaults to 0 (no grace time).
*/ */
@property (assign, nonatomic) NSTimeInterval graceTime; - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion;
/** /**
* The minimum time (in seconds) that the HUD is shown. * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD.
* This avoids the problem of the HUD being shown and than instantly hidden. *
* Defaults to 0 (no minimum show time). * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
*/ */
@property (assign, nonatomic) NSTimeInterval minShowTime; - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue;
/**
* Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD.
*
* @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will
* not use animations while (dis)appearing.
* @param block The block to be executed while the HUD is shown.
* @param queue The dispatch queue on which the block should be executed.
* @param completion The block to be executed on completion.
*
* @see completionBlock
*/
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
completionBlock:(MBProgressHUDCompletionBlock)completion;
/** /**
* Removes the HUD from its parent view when hidden. * A block that gets called after the HUD was completely hidden.
* Defaults to NO.
*/ */
@property (assign, nonatomic) BOOL removeFromSuperViewOnHide; @property (copy) MBProgressHUDCompletionBlock completionBlock;
/// @name Appearance #endif
/** /**
* MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate.
*
* @see MBProgressHUDMode
*/ */
@property (assign, nonatomic) MBProgressHUDMode mode; @property (assign) MBProgressHUDMode mode;
/** /**
* A color that gets forwarded to all labels and supported indicators. Also sets the tintColor * The animation type that should be used when the HUD is shown and hidden.
* for custom views on iOS 7+. Set to nil to manage color individually. *
* Defaults to semi-translucent black on iOS 7 and later and white on earlier iOS versions. * @see MBProgressHUDAnimation
*/ */
@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR; @property (assign) MBProgressHUDAnimation animationType;
/** /**
* The animation type that should be used when the HUD is shown and hidden. * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView.
* For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds).
*/ */
@property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR; @property (MB_STRONG) UIView *customView;
/** /**
* The bezel offset relative to the center of the view. You can use MBProgressMaxOffset * The HUD delegate object.
* and -MBProgressMaxOffset to move the HUD all the way to the screen edge in each direction. *
* E.g., CGPointMake(0.f, MBProgressMaxOffset) would position the HUD centered on the bottom edge. * @see MBProgressHUDDelegate
*/ */
@property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR; @property (MB_WEAK) id<MBProgressHUDDelegate> delegate;
/** /**
* The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit
* This also represents the minimum bezel distance to the edge of the HUD view. * the entire text. If the text is too long it will get clipped by displaying "..." at the end. If left unchanged or
* Defaults to 20.f * set to @"", then no message is displayed.
*/ */
@property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR; @property (copy) NSString *labelText;
/**
* An optional details message displayed below the labelText message. This message is displayed only if the labelText
* property is also set and is different from an empty string (@""). The details text can span multiple lines.
*/
@property (copy) NSString *detailsLabelText;
/**
* The opacity of the HUD window. Defaults to 0.8 (80% opacity).
*/
@property (assign) float opacity;
/** /**
* The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). * The color of the HUD window. Defaults to black. If this property is set, color is set using
* this UIColor and the opacity property is not used. using retain because performing copy on
* UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone.
*/
@property (MB_STRONG) UIColor *color;
/**
* The x-axis offset of the HUD relative to the centre of the superview.
*/
@property (assign) float xOffset;
/**
* The y-axis offset of the HUD relative to the centre of the superview.
*/ */
@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR; @property (assign) float yOffset;
/** /**
* Force the HUD dimensions to be equal if possible. * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views).
* Defaults to 20.0
*/ */
@property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR; @property (assign) float margin;
/** /**
* When enabled, the bezel center gets slightly affected by the device accelerometer data. * The corner radius for the HUD
* Has no effect on iOS < 7.0. Defaults to YES. * Defaults to 10.0
*/ */
@property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR; @property (assign) float cornerRadius;
/// @name Progress /**
* Cover the HUD background view with a radial gradient.
*/
@property (assign) BOOL dimBackground;
/*
* Grace period is the time (in seconds) that the invoked method may be run without
* showing the HUD. If the task finishes before the grace time runs out, the HUD will
* not be shown at all.
* This may be used to prevent HUD display for very short tasks.
* Defaults to 0 (no grace time).
* Grace time functionality is only supported when the task status is known!
* @see taskInProgress
*/
@property (assign) float graceTime;
/** /**
* The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. * The minimum time (in seconds) that the HUD is shown.
* This avoids the problem of the HUD being shown and than instantly hidden.
* Defaults to 0 (no minimum show time).
*/ */
@property (assign, nonatomic) float progress; @property (assign) float minShowTime;
/// @name ProgressObject /**
* Indicates that the executed operation is in progress. Needed for correct graceTime operation.
* If you don't set a graceTime (different than 0.0) this does nothing.
* This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:.
* When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly),
* you need to set this property when your task starts and completes in order to have normal graceTime
* functionality.
*/
@property (assign) BOOL taskInProgress;
/** /**
* The NSProgress object feeding the progress information to the progress indicator. * Removes the HUD from its parent view when hidden.
* Defaults to NO.
*/ */
@property (strong, nonatomic, nullable) NSProgress *progressObject; @property (assign) BOOL removeFromSuperViewOnHide;
/// @name Views /**
* Font to be used for the main label. Set this property if the default is not adequate.
*/
@property (MB_STRONG) UIFont* labelFont;
/** /**
* The view containing the labels and indicator (or customView). * Color to be used for the main label. Set this property if the default is not adequate.
*/ */
@property (strong, nonatomic, readonly) MBBackgroundView *bezelView; @property (MB_STRONG) UIColor* labelColor;
/** /**
* View covering the entire HUD area, placed behind bezelView. * Font to be used for the details label. Set this property if the default is not adequate.
*/ */
@property (strong, nonatomic, readonly) MBBackgroundView *backgroundView; @property (MB_STRONG) UIFont* detailsLabelFont;
/**
* Color to be used for the details label. Set this property if the default is not adequate.
*/
@property (MB_STRONG) UIColor* detailsLabelColor;
/** /**
* The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. * The color of the activity indicator. Defaults to [UIColor whiteColor]
* The view should implement intrinsicContentSize for proper sizing. For best results use approximately 37 by 37 pixels. * Does nothing on pre iOS 5.
*/ */
@property (strong, nonatomic, nullable) UIView *customView; @property (MB_STRONG) UIColor *activityIndicatorColor;
/**
* The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0.
*/
@property (assign) float progress;
/** /**
* A label that holds an optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size).
* the entire text.
*/ */
@property (strong, nonatomic, readonly) UILabel *label; @property (assign) CGSize minSize;
/** /**
* A label that holds an optional details message displayed below the labelText message. The details text can span multiple lines. * The actual size of the HUD bezel.
* You can use this to limit touch handling on the bezel area only.
* @see https://github.com/jdg/MBProgressHUD/pull/200
*/ */
@property (strong, nonatomic, readonly) UILabel *detailsLabel; @property (atomic, assign, readonly) CGSize size;
/** /**
* A button that is placed below the labels. Visible only if a target / action is added. * Force the HUD dimensions to be equal if possible.
*/ */
@property (strong, nonatomic, readonly) UIButton *button; @property (assign, getter = isSquare) BOOL square;
@end @end
...@@ -329,16 +472,15 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -329,16 +472,15 @@ NS_ASSUME_NONNULL_BEGIN
/** /**
* Indicator progress color. * Indicator progress color.
* Defaults to white [UIColor whiteColor]. * Defaults to white [UIColor whiteColor]
*/ */
@property (nonatomic, strong) UIColor *progressTintColor; @property (nonatomic, MB_STRONG) UIColor *progressTintColor;
/** /**
* Indicator background (non-progress) color. * Indicator background (non-progress) color.
* Only applicable on iOS versions older than iOS 7. * Defaults to translucent white (alpha 0.1)
* Defaults to translucent white (alpha 0.1).
*/ */
@property (nonatomic, strong) UIColor *backgroundTintColor; @property (nonatomic, MB_STRONG) UIColor *backgroundTintColor;
/* /*
* Display mode - NO = round or YES = annular. Defaults to round. * Display mode - NO = round or YES = annular. Defaults to round.
...@@ -362,82 +504,18 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -362,82 +504,18 @@ NS_ASSUME_NONNULL_BEGIN
* Bar border line color. * Bar border line color.
* Defaults to white [UIColor whiteColor]. * Defaults to white [UIColor whiteColor].
*/ */
@property (nonatomic, strong) UIColor *lineColor; @property (nonatomic, MB_STRONG) UIColor *lineColor;
/** /**
* Bar background color. * Bar background color.
* Defaults to clear [UIColor clearColor]; * Defaults to clear [UIColor clearColor];
*/ */
@property (nonatomic, strong) UIColor *progressRemainingColor; @property (nonatomic, MB_STRONG) UIColor *progressRemainingColor;
/** /**
* Bar progress color. * Bar progress color.
* Defaults to white [UIColor whiteColor]. * Defaults to white [UIColor whiteColor].
*/ */
@property (nonatomic, strong) UIColor *progressColor; @property (nonatomic, MB_STRONG) UIColor *progressColor;
@end
@interface MBBackgroundView : UIView
/**
* The background style.
* Defaults to MBProgressHUDBackgroundStyleBlur on iOS 7 or later and MBProgressHUDBackgroundStyleSolidColor otherwise.
* @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions.
*/
@property (nonatomic) MBProgressHUDBackgroundStyle style;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
/**
* The blur effect style, when using MBProgressHUDBackgroundStyleBlur.
* Defaults to UIBlurEffectStyleLight.
*/
@property (nonatomic) UIBlurEffectStyle blurEffectStyle;
#endif
/**
* The background color or the blur tint color.
* @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions.
*/
@property (nonatomic, strong) UIColor *color;
@end @end
@interface MBProgressHUD (Deprecated)
+ (NSArray *)allHUDsForView:(UIView *)view __attribute__((deprecated("Store references when using more than one HUD per view.")));
+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated __attribute__((deprecated("Store references when using more than one HUD per view.")));
- (id)initWithWindow:(UIWindow *)window __attribute__((deprecated("Use initWithView: instead.")));
- (void)show:(BOOL)animated __attribute__((deprecated("Use showAnimated: instead.")));
- (void)hide:(BOOL)animated __attribute__((deprecated("Use hideAnimated: instead.")));
- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay __attribute__((deprecated("Use hideAnimated:afterDelay: instead.")));
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated __attribute__((deprecated("Use GCD directly.")));
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block __attribute__((deprecated("Use GCD directly.")));
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly.")));
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue __attribute__((deprecated("Use GCD directly.")));
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly.")));
@property (assign) BOOL taskInProgress __attribute__((deprecated("No longer needed.")));
@property (nonatomic, copy) NSString *labelText __attribute__((deprecated("Use label.text instead.")));
@property (nonatomic, strong) UIFont *labelFont __attribute__((deprecated("Use label.font instead.")));
@property (nonatomic, strong) UIColor *labelColor __attribute__((deprecated("Use label.textColor instead.")));
@property (nonatomic, copy) NSString *detailsLabelText __attribute__((deprecated("Use detailsLabel.text instead.")));
@property (nonatomic, strong) UIFont *detailsLabelFont __attribute__((deprecated("Use detailsLabel.font instead.")));
@property (nonatomic, strong) UIColor *detailsLabelColor __attribute__((deprecated("Use detailsLabel.textColor instead.")));
@property (assign, nonatomic) CGFloat opacity __attribute__((deprecated("Customize bezelView properties instead.")));
@property (strong, nonatomic) UIColor *color __attribute__((deprecated("Customize the bezelView color instead.")));
@property (assign, nonatomic) CGFloat xOffset __attribute__((deprecated("Set offset.x instead.")));
@property (assign, nonatomic) CGFloat yOffset __attribute__((deprecated("Set offset.y instead.")));
@property (assign, nonatomic) CGFloat cornerRadius __attribute__((deprecated("Set bezelView.layer.cornerRadius instead.")));
@property (assign, nonatomic) BOOL dimBackground __attribute__((deprecated("Customize HUD background properties instead.")));
@property (strong, nonatomic) UIColor *activityIndicatorColor __attribute__((deprecated("Use UIAppearance to customize UIActivityIndicatorView. E.g.: [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor redColor];")));
@property (atomic, assign, readonly) CGSize size __attribute__((deprecated("Get the bezelView.frame.size instead.")));
@end
NS_ASSUME_NONNULL_END
// //
// MBProgressHUD.m // MBProgressHUD.m
// Version 1.1.0 // Version 0.9.2
// Created by Matej Bukovinski on 2.4.09. // Created by Matej Bukovinski on 2.4.09.
// //
...@@ -8,199 +8,293 @@ ...@@ -8,199 +8,293 @@
#import <tgmath.h> #import <tgmath.h>
#if __has_feature(objc_arc)
#define MB_AUTORELEASE(exp) exp
#define MB_RELEASE(exp) exp
#define MB_RETAIN(exp) exp
#else
#define MB_AUTORELEASE(exp) [exp autorelease]
#define MB_RELEASE(exp) [exp release]
#define MB_RETAIN(exp) [exp retain]
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000
#define MBLabelAlignmentCenter NSTextAlignmentCenter
#else
#define MBLabelAlignmentCenter UITextAlignmentCenter
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text \
sizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero;
#else
#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero;
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \
boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin) \
attributes:@{NSFontAttributeName:font} context:nil].size : CGSizeZero;
#else
#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \
sizeWithFont:font constrainedToSize:maxSize lineBreakMode:mode] : CGSizeZero;
#endif
#ifndef kCFCoreFoundationVersionNumber_iOS_7_0 #ifndef kCFCoreFoundationVersionNumber_iOS_7_0
#define kCFCoreFoundationVersionNumber_iOS_7_0 847.20 #define kCFCoreFoundationVersionNumber_iOS_7_0 847.20
#endif #endif
#ifndef kCFCoreFoundationVersionNumber_iOS_8_0 #ifndef kCFCoreFoundationVersionNumber_iOS_8_0
#define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15 #define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15
#endif #endif
#define MBMainThreadAssert() NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread.");
CGFloat const MBProgressMaxOffset = 1000000.f; static const CGFloat kPadding = 4.f;
static const CGFloat kLabelFontSize = 16.f;
static const CGFloat MBDefaultPadding = 4.f; static const CGFloat kDetailsLabelFontSize = 12.f;
static const CGFloat MBDefaultLabelFontSize = 16.f;
static const CGFloat MBDefaultDetailsLabelFontSize = 12.f;
@interface MBProgressHUD () { @interface MBProgressHUD () {
// Deprecated BOOL useAnimation;
UIColor *_activityIndicatorColor; SEL methodForExecution;
CGFloat _opacity; id targetForExecution;
id objectForExecution;
UILabel *label;
UILabel *detailsLabel;
BOOL isFinished;
CGAffineTransform rotationTransform;
} }
@property (nonatomic, assign) BOOL useAnimation; @property (atomic, MB_STRONG) UIView *indicator;
@property (nonatomic, assign, getter=hasFinished) BOOL finished; @property (atomic, MB_STRONG) NSTimer *graceTimer;
@property (nonatomic, strong) UIView *indicator; @property (atomic, MB_STRONG) NSTimer *minShowTimer;
@property (nonatomic, strong) NSDate *showStarted; @property (atomic, MB_STRONG) NSDate *showStarted;
@property (nonatomic, strong) NSArray *paddingConstraints;
@property (nonatomic, strong) NSArray *bezelConstraints;
@property (nonatomic, strong) UIView *topSpacer;
@property (nonatomic, strong) UIView *bottomSpacer;
@property (nonatomic, weak) NSTimer *graceTimer;
@property (nonatomic, weak) NSTimer *minShowTimer;
@property (nonatomic, weak) NSTimer *hideDelayTimer;
@property (nonatomic, weak) CADisplayLink *progressObjectDisplayLink;
// Deprecated
@property (assign) BOOL taskInProgress;
@end @end
@interface MBProgressHUDRoundedButton : UIButton @implementation MBProgressHUD
@end
#pragma mark - Properties
@implementation MBProgressHUD @synthesize animationType;
@synthesize delegate;
@synthesize opacity;
@synthesize color;
@synthesize labelFont;
@synthesize labelColor;
@synthesize detailsLabelFont;
@synthesize detailsLabelColor;
@synthesize indicator;
@synthesize xOffset;
@synthesize yOffset;
@synthesize minSize;
@synthesize square;
@synthesize margin;
@synthesize dimBackground;
@synthesize graceTime;
@synthesize minShowTime;
@synthesize graceTimer;
@synthesize minShowTimer;
@synthesize taskInProgress;
@synthesize removeFromSuperViewOnHide;
@synthesize customView;
@synthesize showStarted;
@synthesize mode;
@synthesize labelText;
@synthesize detailsLabelText;
@synthesize progress;
@synthesize size;
@synthesize activityIndicatorColor;
#if NS_BLOCKS_AVAILABLE
@synthesize completionBlock;
#endif
#pragma mark - Class methods #pragma mark - Class methods
+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated { + (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated {
MBProgressHUD *hud = [[self alloc] initWithView:view]; MBProgressHUD *hud = [[self alloc] initWithView:view];
hud.removeFromSuperViewOnHide = YES; hud.removeFromSuperViewOnHide = YES;
[view addSubview:hud]; [view addSubview:hud];
[hud showAnimated:animated]; [hud show:animated];
return hud; return MB_AUTORELEASE(hud);
} }
+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated { + (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated {
MBProgressHUD *hud = [self HUDForView:view]; MBProgressHUD *hud = [self HUDForView:view];
if (hud != nil) { if (hud != nil) {
hud.removeFromSuperViewOnHide = YES; hud.removeFromSuperViewOnHide = YES;
[hud hideAnimated:animated]; [hud hide:animated];
return YES; return YES;
} }
return NO; return NO;
} }
+ (MBProgressHUD *)HUDForView:(UIView *)view { + (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated {
NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; NSArray *huds = [MBProgressHUD allHUDsForView:view];
for (UIView *subview in subviewsEnum) { for (MBProgressHUD *hud in huds) {
if ([subview isKindOfClass:self]) { hud.removeFromSuperViewOnHide = YES;
MBProgressHUD *hud = (MBProgressHUD *)subview; [hud hide:animated];
if (hud.hasFinished == NO) { }
return hud; return [huds count];
}
}
}
return nil;
} }
#pragma mark - Lifecycle + (MB_INSTANCETYPE)HUDForView:(UIView *)view {
NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator];
- (void)commonInit { for (UIView *subview in subviewsEnum) {
// Set default values for properties if ([subview isKindOfClass:self]) {
_animationType = MBProgressHUDAnimationFade; return (MBProgressHUD *)subview;
_mode = MBProgressHUDModeIndeterminate; }
_margin = 20.0f; }
_opacity = 1.f; return nil;
_defaultMotionEffectsEnabled = YES;
// Default color, depending on the current iOS version
BOOL isLegacy = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0;
_contentColor = isLegacy ? [UIColor whiteColor] : [UIColor colorWithWhite:0.f alpha:0.7f];
// Transparent background
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
// Make it invisible for now
self.alpha = 0.0f;
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.layer.allowsGroupOpacity = NO;
[self setupViews];
[self updateIndicators];
[self registerForNotifications];
} }
- (instancetype)initWithFrame:(CGRect)frame { + (NSArray *)allHUDsForView:(UIView *)view {
if ((self = [super initWithFrame:frame])) { NSMutableArray *huds = [NSMutableArray array];
[self commonInit]; NSArray *subviews = view.subviews;
} for (UIView *aView in subviews) {
return self; if ([aView isKindOfClass:self]) {
[huds addObject:aView];
}
}
return [NSArray arrayWithArray:huds];
} }
- (instancetype)initWithCoder:(NSCoder *)aDecoder { #pragma mark - Lifecycle
if ((self = [super initWithCoder:aDecoder])) {
[self commonInit]; - (id)initWithFrame:(CGRect)frame {
} self = [super initWithFrame:frame];
return self; if (self) {
// Set default values for properties
self.animationType = MBProgressHUDAnimationFade;
self.mode = MBProgressHUDModeIndeterminate;
self.labelText = nil;
self.detailsLabelText = nil;
self.opacity = 0.8f;
self.color = nil;
self.labelFont = [UIFont boldSystemFontOfSize:kLabelFontSize];
self.labelColor = [UIColor whiteColor];
self.detailsLabelFont = [UIFont boldSystemFontOfSize:kDetailsLabelFontSize];
self.detailsLabelColor = [UIColor whiteColor];
self.activityIndicatorColor = [UIColor whiteColor];
self.xOffset = 0.0f;
self.yOffset = 0.0f;
self.dimBackground = NO;
self.margin = 20.0f;
self.cornerRadius = 10.0f;
self.graceTime = 0.0f;
self.minShowTime = 0.0f;
self.removeFromSuperViewOnHide = NO;
self.minSize = CGSizeZero;
self.square = NO;
self.contentMode = UIViewContentModeCenter;
self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin
| UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
// Transparent background
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
// Make it invisible for now
self.alpha = 0.0f;
taskInProgress = NO;
rotationTransform = CGAffineTransformIdentity;
[self setupLabels];
[self updateIndicators];
[self registerForKVO];
[self registerForNotifications];
}
return self;
} }
- (id)initWithView:(UIView *)view { - (id)initWithView:(UIView *)view {
NSAssert(view, @"View must not be nil."); NSAssert(view, @"View must not be nil.");
return [self initWithFrame:view.bounds]; return [self initWithFrame:view.bounds];
}
- (id)initWithWindow:(UIWindow *)window {
return [self initWithView:window];
} }
- (void)dealloc { - (void)dealloc {
[self unregisterFromNotifications]; [self unregisterFromNotifications];
[self unregisterFromKVO];
#if !__has_feature(objc_arc)
[color release];
[indicator release];
[label release];
[detailsLabel release];
[labelText release];
[detailsLabelText release];
[graceTimer release];
[minShowTimer release];
[showStarted release];
[customView release];
[labelFont release];
[labelColor release];
[detailsLabelFont release];
[detailsLabelColor release];
#if NS_BLOCKS_AVAILABLE
[completionBlock release];
#endif
[super dealloc];
#endif
} }
#pragma mark - Show & hide #pragma mark - Show & hide
- (void)showAnimated:(BOOL)animated { - (void)show:(BOOL)animated {
MBMainThreadAssert(); NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread.");
[self.minShowTimer invalidate]; useAnimation = animated;
self.useAnimation = animated; // If the grace time is set postpone the HUD display
self.finished = NO; if (self.graceTime > 0.0) {
// If the grace time is set, postpone the HUD display NSTimer *newGraceTimer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO];
if (self.graceTime > 0.0) { [[NSRunLoop currentRunLoop] addTimer:newGraceTimer forMode:NSRunLoopCommonModes];
NSTimer *timer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; self.graceTimer = newGraceTimer;
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; }
self.graceTimer = timer; // ... otherwise show the HUD imediately
} else {
// ... otherwise show the HUD immediately [self showUsingAnimation:useAnimation];
else { }
[self showUsingAnimation:self.useAnimation];
}
} }
- (void)hideAnimated:(BOOL)animated { - (void)hide:(BOOL)animated {
MBMainThreadAssert(); NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread.");
[self.graceTimer invalidate]; useAnimation = animated;
self.useAnimation = animated; // If the minShow time is set, calculate how long the hud was shown,
self.finished = YES; // and pospone the hiding operation if necessary
// If the minShow time is set, calculate how long the HUD was shown, if (self.minShowTime > 0.0 && showStarted) {
// and postpone the hiding operation if necessary NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:showStarted];
if (self.minShowTime > 0.0 && self.showStarted) { if (interv < self.minShowTime) {
NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:self.showStarted]; self.minShowTimer = [NSTimer scheduledTimerWithTimeInterval:(self.minShowTime - interv) target:self
if (interv < self.minShowTime) { selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO];
NSTimer *timer = [NSTimer timerWithTimeInterval:(self.minShowTime - interv) target:self selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO]; return;
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; }
self.minShowTimer = timer; }
return; // ... otherwise hide the HUD immediately
} [self hideUsingAnimation:useAnimation];
}
// ... otherwise hide the HUD immediately
[self hideUsingAnimation:self.useAnimation];
} }
- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay { - (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay {
// Cancel any scheduled hideDelayed: calls [self performSelector:@selector(hideDelayed:) withObject:[NSNumber numberWithBool:animated] afterDelay:delay];
[self.hideDelayTimer invalidate]; }
NSTimer *timer = [NSTimer timerWithTimeInterval:delay target:self selector:@selector(handleHideTimer:) userInfo:@(animated) repeats:NO]; - (void)hideDelayed:(NSNumber *)animated {
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; [self hide:[animated boolValue]];
self.hideDelayTimer = timer;
} }
#pragma mark - Timer callbacks #pragma mark - Timer callbacks
- (void)handleGraceTimer:(NSTimer *)theTimer { - (void)handleGraceTimer:(NSTimer *)theTimer {
// Show the HUD only if the task is still running // Show the HUD only if the task is still running
if (!self.hasFinished) { if (taskInProgress) {
[self showUsingAnimation:self.useAnimation]; [self showUsingAnimation:useAnimation];
} }
} }
- (void)handleMinShowTimer:(NSTimer *)theTimer { - (void)handleMinShowTimer:(NSTimer *)theTimer {
[self hideUsingAnimation:self.useAnimation]; [self hideUsingAnimation:useAnimation];
}
- (void)handleHideTimer:(NSTimer *)timer {
[self hideAnimated:[timer.userInfo boolValue]];
} }
#pragma mark - View Hierrarchy #pragma mark - View Hierrarchy
...@@ -212,618 +306,478 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; ...@@ -212,618 +306,478 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f;
#pragma mark - Internal show & hide operations #pragma mark - Internal show & hide operations
- (void)showUsingAnimation:(BOOL)animated { - (void)showUsingAnimation:(BOOL)animated {
// Cancel any previous animations
[self.bezelView.layer removeAllAnimations];
[self.backgroundView.layer removeAllAnimations];
// Cancel any scheduled hideDelayed: calls // Cancel any scheduled hideDelayed: calls
[self.hideDelayTimer invalidate]; [NSObject cancelPreviousPerformRequestsWithTarget:self];
[self setNeedsDisplay];
self.showStarted = [NSDate date];
self.alpha = 1.f; if (animated && animationType == MBProgressHUDAnimationZoomIn) {
self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));
// Needed in case we hide and re-show with the same NSProgress object attached. } else if (animated && animationType == MBProgressHUDAnimationZoomOut) {
[self setNSProgressDisplayLinkEnabled:YES]; self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));
}
if (animated) { self.showStarted = [NSDate date];
[self animateIn:YES withType:self.animationType completion:NULL]; // Fade in
} else { if (animated) {
#pragma clang diagnostic push [UIView beginAnimations:nil context:NULL];
#pragma clang diagnostic ignored "-Wdeprecated-declarations" [UIView setAnimationDuration:0.30];
self.bezelView.alpha = self.opacity; self.alpha = 1.0f;
#pragma clang diagnostic pop if (animationType == MBProgressHUDAnimationZoomIn || animationType == MBProgressHUDAnimationZoomOut) {
self.backgroundView.alpha = 1.f; self.transform = rotationTransform;
} }
[UIView commitAnimations];
}
else {
self.alpha = 1.0f;
}
} }
- (void)hideUsingAnimation:(BOOL)animated { - (void)hideUsingAnimation:(BOOL)animated {
if (animated && self.showStarted) { // Fade out
self.showStarted = nil; if (animated && showStarted) {
[self animateIn:NO withType:self.animationType completion:^(BOOL finished) { [UIView beginAnimations:nil context:NULL];
[self done]; [UIView setAnimationDuration:0.30];
}]; [UIView setAnimationDelegate:self];
} else { [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
self.showStarted = nil; // 0.02 prevents the hud from passing through touches during the animation the hud will get completely hidden
self.bezelView.alpha = 0.f; // in the done method
self.backgroundView.alpha = 1.f; if (animationType == MBProgressHUDAnimationZoomIn) {
[self done]; self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f));
} } else if (animationType == MBProgressHUDAnimationZoomOut) {
} self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f));
}
- (void)animateIn:(BOOL)animatingIn withType:(MBProgressHUDAnimation)type completion:(void(^)(BOOL finished))completion {
// Automatically determine the correct zoom animation type self.alpha = 0.02f;
if (type == MBProgressHUDAnimationZoom) { [UIView commitAnimations];
type = animatingIn ? MBProgressHUDAnimationZoomIn : MBProgressHUDAnimationZoomOut; }
} else {
self.alpha = 0.0f;
CGAffineTransform small = CGAffineTransformMakeScale(0.5f, 0.5f); [self done];
CGAffineTransform large = CGAffineTransformMakeScale(1.5f, 1.5f); }
self.showStarted = nil;
// Set starting state }
UIView *bezelView = self.bezelView;
if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomIn) { - (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void*)context {
bezelView.transform = small; [self done];
} else if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomOut) {
bezelView.transform = large;
}
// Perform animations
dispatch_block_t animations = ^{
if (animatingIn) {
bezelView.transform = CGAffineTransformIdentity;
} else if (!animatingIn && type == MBProgressHUDAnimationZoomIn) {
bezelView.transform = large;
} else if (!animatingIn && type == MBProgressHUDAnimationZoomOut) {
bezelView.transform = small;
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
bezelView.alpha = animatingIn ? self.opacity : 0.f;
#pragma clang diagnostic pop
self.backgroundView.alpha = animatingIn ? 1.f : 0.f;
};
// Spring animations are nicer, but only available on iOS 7+
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) {
[UIView animateWithDuration:0.3 delay:0. usingSpringWithDamping:1.f initialSpringVelocity:0.f options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion];
return;
}
#endif
[UIView animateWithDuration:0.3 delay:0. options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion];
} }
- (void)done { - (void)done {
// Cancel any scheduled hideDelayed: calls [NSObject cancelPreviousPerformRequestsWithTarget:self];
[self.hideDelayTimer invalidate]; isFinished = YES;
[self setNSProgressDisplayLinkEnabled:NO]; self.alpha = 0.0f;
if (removeFromSuperViewOnHide) {
if (self.hasFinished) { [self removeFromSuperview];
self.alpha = 0.0f; }
if (self.removeFromSuperViewOnHide) { #if NS_BLOCKS_AVAILABLE
[self removeFromSuperview]; if (self.completionBlock) {
} self.completionBlock();
} self.completionBlock = NULL;
MBProgressHUDCompletionBlock completionBlock = self.completionBlock; }
if (completionBlock) {
completionBlock();
}
id<MBProgressHUDDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(hudWasHidden:)]) {
[delegate performSelector:@selector(hudWasHidden:) withObject:self];
}
}
#pragma mark - UI
- (void)setupViews {
UIColor *defaultColor = self.contentColor;
MBBackgroundView *backgroundView = [[MBBackgroundView alloc] initWithFrame:self.bounds];
backgroundView.style = MBProgressHUDBackgroundStyleSolidColor;
backgroundView.backgroundColor = [UIColor clearColor];
backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
backgroundView.alpha = 0.f;
[self addSubview:backgroundView];
_backgroundView = backgroundView;
MBBackgroundView *bezelView = [MBBackgroundView new];
bezelView.translatesAutoresizingMaskIntoConstraints = NO;
bezelView.layer.cornerRadius = 5.f;
bezelView.alpha = 0.f;
[self addSubview:bezelView];
_bezelView = bezelView;
[self updateBezelMotionEffects];
UILabel *label = [UILabel new];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = NSTextAlignmentCenter;
label.textColor = defaultColor;
label.font = [UIFont boldSystemFontOfSize:MBDefaultLabelFontSize];
label.opaque = NO;
label.backgroundColor = [UIColor clearColor];
_label = label;
UILabel *detailsLabel = [UILabel new];
detailsLabel.adjustsFontSizeToFitWidth = NO;
detailsLabel.textAlignment = NSTextAlignmentCenter;
detailsLabel.textColor = defaultColor;
detailsLabel.numberOfLines = 0;
detailsLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize];
detailsLabel.opaque = NO;
detailsLabel.backgroundColor = [UIColor clearColor];
_detailsLabel = detailsLabel;
UIButton *button = [MBProgressHUDRoundedButton buttonWithType:UIButtonTypeCustom];
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize];
[button setTitleColor:defaultColor forState:UIControlStateNormal];
_button = button;
for (UIView *view in @[label, detailsLabel, button]) {
view.translatesAutoresizingMaskIntoConstraints = NO;
[view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal];
[view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical];
[bezelView addSubview:view];
}
UIView *topSpacer = [UIView new];
topSpacer.translatesAutoresizingMaskIntoConstraints = NO;
topSpacer.hidden = YES;
[bezelView addSubview:topSpacer];
_topSpacer = topSpacer;
UIView *bottomSpacer = [UIView new];
bottomSpacer.translatesAutoresizingMaskIntoConstraints = NO;
bottomSpacer.hidden = YES;
[bezelView addSubview:bottomSpacer];
_bottomSpacer = bottomSpacer;
}
- (void)updateIndicators {
UIView *indicator = self.indicator;
BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]];
BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]];
MBProgressHUDMode mode = self.mode;
if (mode == MBProgressHUDModeIndeterminate) {
if (!isActivityIndicator) {
// Update to indeterminate indicator
[indicator removeFromSuperview];
indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[(UIActivityIndicatorView *)indicator startAnimating];
[self.bezelView addSubview:indicator];
}
}
else if (mode == MBProgressHUDModeDeterminateHorizontalBar) {
// Update to bar determinate indicator
[indicator removeFromSuperview];
indicator = [[MBBarProgressView alloc] init];
[self.bezelView addSubview:indicator];
}
else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) {
if (!isRoundIndicator) {
// Update to determinante indicator
[indicator removeFromSuperview];
indicator = [[MBRoundProgressView alloc] init];
[self.bezelView addSubview:indicator];
}
if (mode == MBProgressHUDModeAnnularDeterminate) {
[(MBRoundProgressView *)indicator setAnnular:YES];
}
}
else if (mode == MBProgressHUDModeCustomView && self.customView != indicator) {
// Update custom view indicator
[indicator removeFromSuperview];
indicator = self.customView;
[self.bezelView addSubview:indicator];
}
else if (mode == MBProgressHUDModeText) {
[indicator removeFromSuperview];
indicator = nil;
}
indicator.translatesAutoresizingMaskIntoConstraints = NO;
self.indicator = indicator;
if ([indicator respondsToSelector:@selector(setProgress:)]) {
[(id)indicator setValue:@(self.progress) forKey:@"progress"];
}
[indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal];
[indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical];
[self updateViewsForColor:self.contentColor];
[self setNeedsUpdateConstraints];
}
- (void)updateViewsForColor:(UIColor *)color {
if (!color) return;
self.label.textColor = color;
self.detailsLabel.textColor = color;
[self.button setTitleColor:color forState:UIControlStateNormal];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if (self.activityIndicatorColor) {
color = self.activityIndicatorColor;
}
#pragma clang diagnostic pop
// UIAppearance settings are prioritized. If they are preset the set color is ignored.
UIView *indicator = self.indicator;
if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) {
UIActivityIndicatorView *appearance = nil;
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
appearance = [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil];
#else
// For iOS 9+
appearance = [UIActivityIndicatorView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]];
#endif
if (appearance.color == nil) {
((UIActivityIndicatorView *)indicator).color = color;
}
} else if ([indicator isKindOfClass:[MBRoundProgressView class]]) {
MBRoundProgressView *appearance = nil;
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
appearance = [MBRoundProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil];
#else
appearance = [MBRoundProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]];
#endif #endif
if (appearance.progressTintColor == nil) { if ([delegate respondsToSelector:@selector(hudWasHidden:)]) {
((MBRoundProgressView *)indicator).progressTintColor = color; [delegate performSelector:@selector(hudWasHidden:) withObject:self];
} }
if (appearance.backgroundTintColor == nil) {
((MBRoundProgressView *)indicator).backgroundTintColor = [color colorWithAlphaComponent:0.1];
}
} else if ([indicator isKindOfClass:[MBBarProgressView class]]) {
MBBarProgressView *appearance = nil;
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
appearance = [MBBarProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil];
#else
appearance = [MBBarProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]];
#endif
if (appearance.progressColor == nil) {
((MBBarProgressView *)indicator).progressColor = color;
}
if (appearance.lineColor == nil) {
((MBBarProgressView *)indicator).lineColor = color;
}
} else {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV
if ([indicator respondsToSelector:@selector(setTintColor:)]) {
[indicator setTintColor:color];
}
#endif
}
}
- (void)updateBezelMotionEffects {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV
MBBackgroundView *bezelView = self.bezelView;
if (![bezelView respondsToSelector:@selector(addMotionEffect:)]) return;
if (self.defaultMotionEffectsEnabled) {
CGFloat effectOffset = 10.f;
UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
effectX.maximumRelativeValue = @(effectOffset);
effectX.minimumRelativeValue = @(-effectOffset);
UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
effectY.maximumRelativeValue = @(effectOffset);
effectY.minimumRelativeValue = @(-effectOffset);
UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init];
group.motionEffects = @[effectX, effectY];
[bezelView addMotionEffect:group];
} else {
NSArray *effects = [bezelView motionEffects];
for (UIMotionEffect *effect in effects) {
[bezelView removeMotionEffect:effect];
}
}
#endif
}
#pragma mark - Layout
- (void)updateConstraints {
UIView *bezel = self.bezelView;
UIView *topSpacer = self.topSpacer;
UIView *bottomSpacer = self.bottomSpacer;
CGFloat margin = self.margin;
NSMutableArray *bezelConstraints = [NSMutableArray array];
NSDictionary *metrics = @{@"margin": @(margin)};
NSMutableArray *subviews = [NSMutableArray arrayWithObjects:self.topSpacer, self.label, self.detailsLabel, self.button, self.bottomSpacer, nil];
if (self.indicator) [subviews insertObject:self.indicator atIndex:1];
// Remove existing constraints
[self removeConstraints:self.constraints];
[topSpacer removeConstraints:topSpacer.constraints];
[bottomSpacer removeConstraints:bottomSpacer.constraints];
if (self.bezelConstraints) {
[bezel removeConstraints:self.bezelConstraints];
self.bezelConstraints = nil;
}
// Center bezel in container (self), applying the offset if set
CGPoint offset = self.offset;
NSMutableArray *centeringConstraints = [NSMutableArray array];
[centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.f constant:offset.x]];
[centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.f constant:offset.y]];
[self applyPriority:998.f toConstraints:centeringConstraints];
[self addConstraints:centeringConstraints];
// Ensure minimum side margin is kept
NSMutableArray *sideConstraints = [NSMutableArray array];
[sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]];
[sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]];
[self applyPriority:999.f toConstraints:sideConstraints];
[self addConstraints:sideConstraints];
// Minimum bezel size, if set
CGSize minimumSize = self.minSize;
if (!CGSizeEqualToSize(minimumSize, CGSizeZero)) {
NSMutableArray *minSizeConstraints = [NSMutableArray array];
[minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.width]];
[minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.height]];
[self applyPriority:997.f toConstraints:minSizeConstraints];
[bezelConstraints addObjectsFromArray:minSizeConstraints];
}
// Square aspect ratio, if set
if (self.square) {
NSLayoutConstraint *square = [NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeWidth multiplier:1.f constant:0];
square.priority = 997.f;
[bezelConstraints addObject:square];
}
// Top and bottom spacing
[topSpacer addConstraint:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]];
[bottomSpacer addConstraint:[NSLayoutConstraint constraintWithItem:bottomSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]];
// Top and bottom spaces should be equal
[bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bottomSpacer attribute:NSLayoutAttributeHeight multiplier:1.f constant:0.f]];
// Layout subviews in bezel
NSMutableArray *paddingConstraints = [NSMutableArray new];
[subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
// Center in bezel
[bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeCenterX multiplier:1.f constant:0.f]];
// Ensure the minimum edge margin is kept
[bezelConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[view]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(view)]];
// Element spacing
if (idx == 0) {
// First, ensure spacing to bezel edge
[bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]];
} else if (idx == subviews.count - 1) {
// Last, ensure spacing to bezel edge
[bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]];
}
if (idx > 0) {
// Has previous
NSLayoutConstraint *padding = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:subviews[idx - 1] attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f];
[bezelConstraints addObject:padding];
[paddingConstraints addObject:padding];
}
}];
[bezel addConstraints:bezelConstraints];
self.bezelConstraints = bezelConstraints;
self.paddingConstraints = [paddingConstraints copy];
[self updatePaddingConstraints];
[super updateConstraints];
} }
- (void)layoutSubviews { #pragma mark - Threading
// There is no need to update constraints if they are going to
// be recreated in [super layoutSubviews] due to needsUpdateConstraints being set.
// This also avoids an issue on iOS 8, where updatePaddingConstraints
// would trigger a zombie object access.
if (!self.needsUpdateConstraints) {
[self updatePaddingConstraints];
}
[super layoutSubviews];
}
- (void)updatePaddingConstraints {
// Set padding dynamically, depending on whether the view is visible or not
__block BOOL hasVisibleAncestors = NO;
[self.paddingConstraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *padding, NSUInteger idx, BOOL *stop) {
UIView *firstView = (UIView *)padding.firstItem;
UIView *secondView = (UIView *)padding.secondItem;
BOOL firstVisible = !firstView.hidden && !CGSizeEqualToSize(firstView.intrinsicContentSize, CGSizeZero);
BOOL secondVisible = !secondView.hidden && !CGSizeEqualToSize(secondView.intrinsicContentSize, CGSizeZero);
// Set if both views are visible or if there's a visible view on top that doesn't have padding
// added relative to the current view yet
padding.constant = (firstVisible && (secondVisible || hasVisibleAncestors)) ? MBDefaultPadding : 0.f;
hasVisibleAncestors |= secondVisible;
}];
}
- (void)applyPriority:(UILayoutPriority)priority toConstraints:(NSArray *)constraints { - (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
for (NSLayoutConstraint *constraint in constraints) { methodForExecution = method;
constraint.priority = priority; targetForExecution = MB_RETAIN(target);
} objectForExecution = MB_RETAIN(object);
// Launch execution in new thread
self.taskInProgress = YES;
[NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];
// Show HUD view
[self show:animated];
} }
#pragma mark - Properties #if NS_BLOCKS_AVAILABLE
- (void)setMode:(MBProgressHUDMode)mode { - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block {
if (mode != _mode) { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_mode = mode; [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
[self updateIndicators];
}
} }
- (void)setCustomView:(UIView *)customView { - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion {
if (customView != _customView) { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_customView = customView; [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion];
if (self.mode == MBProgressHUDModeCustomView) {
[self updateIndicators];
}
}
} }
- (void)setOffset:(CGPoint)offset { - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue {
if (!CGPointEqualToPoint(offset, _offset)) { [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
_offset = offset;
[self setNeedsUpdateConstraints];
}
} }
- (void)setMargin:(CGFloat)margin { - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
if (margin != _margin) { completionBlock:(MBProgressHUDCompletionBlock)completion {
_margin = margin; self.taskInProgress = YES;
[self setNeedsUpdateConstraints]; self.completionBlock = completion;
} dispatch_async(queue, ^(void) {
block();
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self cleanUp];
});
});
[self show:animated];
} }
- (void)setMinSize:(CGSize)minSize { #endif
if (!CGSizeEqualToSize(minSize, _minSize)) {
_minSize = minSize;
[self setNeedsUpdateConstraints];
}
}
- (void)setSquare:(BOOL)square { - (void)launchExecution {
if (square != _square) { @autoreleasepool {
_square = square; #pragma clang diagnostic push
[self setNeedsUpdateConstraints]; #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
} // Start executing the requested task
[targetForExecution performSelector:methodForExecution withObject:objectForExecution];
#pragma clang diagnostic pop
// Task completed, update view in main thread (note: view operations should
// be done only in the main thread)
[self performSelectorOnMainThread:@selector(cleanUp) withObject:nil waitUntilDone:NO];
}
} }
- (void)setProgressObjectDisplayLink:(CADisplayLink *)progressObjectDisplayLink { - (void)cleanUp {
if (progressObjectDisplayLink != _progressObjectDisplayLink) { taskInProgress = NO;
[_progressObjectDisplayLink invalidate]; #if !__has_feature(objc_arc)
[targetForExecution release];
_progressObjectDisplayLink = progressObjectDisplayLink; [objectForExecution release];
#else
[_progressObjectDisplayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; targetForExecution = nil;
} objectForExecution = nil;
#endif
[self hide:useAnimation];
} }
- (void)setProgressObject:(NSProgress *)progressObject { #pragma mark - UI
if (progressObject != _progressObject) {
_progressObject = progressObject;
[self setNSProgressDisplayLinkEnabled:YES];
}
}
- (void)setProgress:(float)progress { - (void)setupLabels {
if (progress != _progress) { label = [[UILabel alloc] initWithFrame:self.bounds];
_progress = progress; label.adjustsFontSizeToFitWidth = NO;
UIView *indicator = self.indicator; label.textAlignment = MBLabelAlignmentCenter;
if ([indicator respondsToSelector:@selector(setProgress:)]) { label.opaque = NO;
[(id)indicator setValue:@(self.progress) forKey:@"progress"]; label.backgroundColor = [UIColor clearColor];
} label.textColor = self.labelColor;
} label.font = self.labelFont;
label.text = self.labelText;
[self addSubview:label];
detailsLabel = [[UILabel alloc] initWithFrame:self.bounds];
detailsLabel.font = self.detailsLabelFont;
detailsLabel.adjustsFontSizeToFitWidth = NO;
detailsLabel.textAlignment = MBLabelAlignmentCenter;
detailsLabel.opaque = NO;
detailsLabel.backgroundColor = [UIColor clearColor];
detailsLabel.textColor = self.detailsLabelColor;
detailsLabel.numberOfLines = 0;
detailsLabel.font = self.detailsLabelFont;
detailsLabel.text = self.detailsLabelText;
[self addSubview:detailsLabel];
} }
- (void)setContentColor:(UIColor *)contentColor { - (void)updateIndicators {
if (contentColor != _contentColor && ![contentColor isEqual:_contentColor]) {
_contentColor = contentColor; BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]];
[self updateViewsForColor:contentColor]; BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]];
}
if (mode == MBProgressHUDModeIndeterminate) {
if (!isActivityIndicator) {
// Update to indeterminate indicator
[indicator removeFromSuperview];
self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]);
[(UIActivityIndicatorView *)indicator startAnimating];
[self addSubview:indicator];
}
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 50000
[(UIActivityIndicatorView *)indicator setColor:self.activityIndicatorColor];
#endif
}
else if (mode == MBProgressHUDModeDeterminateHorizontalBar) {
// Update to bar determinate indicator
[indicator removeFromSuperview];
self.indicator = MB_AUTORELEASE([[MBBarProgressView alloc] init]);
[self addSubview:indicator];
}
else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) {
if (!isRoundIndicator) {
// Update to determinante indicator
[indicator removeFromSuperview];
self.indicator = MB_AUTORELEASE([[MBRoundProgressView alloc] init]);
[self addSubview:indicator];
}
if (mode == MBProgressHUDModeAnnularDeterminate) {
[(MBRoundProgressView *)indicator setAnnular:YES];
}
[(MBRoundProgressView *)indicator setProgressTintColor:self.activityIndicatorColor];
[(MBRoundProgressView *)indicator setBackgroundTintColor:[self.activityIndicatorColor colorWithAlphaComponent:0.1f]];
}
else if (mode == MBProgressHUDModeCustomView && customView != indicator) {
// Update custom view indicator
[indicator removeFromSuperview];
self.indicator = customView;
[self addSubview:indicator];
} else if (mode == MBProgressHUDModeText) {
[indicator removeFromSuperview];
self.indicator = nil;
}
} }
- (void)setDefaultMotionEffectsEnabled:(BOOL)defaultMotionEffectsEnabled { #pragma mark - Layout
if (defaultMotionEffectsEnabled != _defaultMotionEffectsEnabled) {
_defaultMotionEffectsEnabled = defaultMotionEffectsEnabled;
[self updateBezelMotionEffects];
}
}
#pragma mark - NSProgress - (void)layoutSubviews {
[super layoutSubviews];
- (void)setNSProgressDisplayLinkEnabled:(BOOL)enabled {
// We're using CADisplayLink, because NSProgress can change very quickly and observing it may starve the main thread, // Entirely cover the parent view
// so we're refreshing the progress only every frame draw UIView *parent = self.superview;
if (enabled && self.progressObject) { if (parent) {
// Only create if not already active. self.frame = parent.bounds;
if (!self.progressObjectDisplayLink) { }
self.progressObjectDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateProgressFromProgressObject)]; CGRect bounds = self.bounds;
}
} else { // Determine the total width and height needed
self.progressObjectDisplayLink = nil; CGFloat maxWidth = bounds.size.width - 4 * margin;
} CGSize totalSize = CGSizeZero;
}
CGRect indicatorF = indicator.bounds;
indicatorF.size.width = MIN(indicatorF.size.width, maxWidth);
totalSize.width = MAX(totalSize.width, indicatorF.size.width);
totalSize.height += indicatorF.size.height;
CGSize labelSize = MB_TEXTSIZE(label.text, label.font);
labelSize.width = MIN(labelSize.width, maxWidth);
totalSize.width = MAX(totalSize.width, labelSize.width);
totalSize.height += labelSize.height;
if (labelSize.height > 0.f && indicatorF.size.height > 0.f) {
totalSize.height += kPadding;
}
CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin;
CGSize maxSize = CGSizeMake(maxWidth, remainingHeight);
CGSize detailsLabelSize = MB_MULTILINE_TEXTSIZE(detailsLabel.text, detailsLabel.font, maxSize, detailsLabel.lineBreakMode);
totalSize.width = MAX(totalSize.width, detailsLabelSize.width);
totalSize.height += detailsLabelSize.height;
if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {
totalSize.height += kPadding;
}
totalSize.width += 2 * margin;
totalSize.height += 2 * margin;
// Position elements
CGFloat yPos = round(((bounds.size.height - totalSize.height) / 2)) + margin + yOffset;
CGFloat xPos = xOffset;
indicatorF.origin.y = yPos;
indicatorF.origin.x = round((bounds.size.width - indicatorF.size.width) / 2) + xPos;
indicator.frame = indicatorF;
yPos += indicatorF.size.height;
if (labelSize.height > 0.f && indicatorF.size.height > 0.f) {
yPos += kPadding;
}
CGRect labelF;
labelF.origin.y = yPos;
labelF.origin.x = round((bounds.size.width - labelSize.width) / 2) + xPos;
labelF.size = labelSize;
label.frame = labelF;
yPos += labelF.size.height;
if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) {
yPos += kPadding;
}
CGRect detailsLabelF;
detailsLabelF.origin.y = yPos;
detailsLabelF.origin.x = round((bounds.size.width - detailsLabelSize.width) / 2) + xPos;
detailsLabelF.size = detailsLabelSize;
detailsLabel.frame = detailsLabelF;
// Enforce minsize and quare rules
if (square) {
CGFloat max = MAX(totalSize.width, totalSize.height);
if (max <= bounds.size.width - 2 * margin) {
totalSize.width = max;
}
if (max <= bounds.size.height - 2 * margin) {
totalSize.height = max;
}
}
if (totalSize.width < minSize.width) {
totalSize.width = minSize.width;
}
if (totalSize.height < minSize.height) {
totalSize.height = minSize.height;
}
size = totalSize;
}
#pragma mark BG Drawing
- (void)updateProgressFromProgressObject { - (void)drawRect:(CGRect)rect {
self.progress = self.progressObject.fractionCompleted;
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
if (self.dimBackground) {
//Gradient colours
size_t gradLocationsNum = 2;
CGFloat gradLocations[2] = {0.0f, 1.0f};
CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
CGColorSpaceRelease(colorSpace);
//Gradient center
CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
//Gradient radius
float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;
//Gradient draw
CGContextDrawRadialGradient (context, gradient, gradCenter,
0, gradCenter, gradRadius,
kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
}
// Set background rect color
if (self.color) {
CGContextSetFillColorWithColor(context, self.color.CGColor);
} else {
CGContextSetGrayFillColor(context, 0.0f, self.opacity);
}
// Center HUD
CGRect allRect = self.bounds;
// Draw rounded HUD backgroud rect
CGRect boxRect = CGRectMake(round((allRect.size.width - size.width) / 2) + self.xOffset,
round((allRect.size.height - size.height) / 2) + self.yOffset, size.width, size.height);
float radius = self.cornerRadius;
CGContextBeginPath(context);
CGContextMoveToPoint(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect));
CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMinY(boxRect) + radius, radius, 3 * (float)M_PI / 2, 0, 0);
CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMaxY(boxRect) - radius, radius, 0, (float)M_PI / 2, 0);
CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMaxY(boxRect) - radius, radius, (float)M_PI / 2, (float)M_PI, 0);
CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect) + radius, radius, (float)M_PI, 3 * (float)M_PI / 2, 0);
CGContextClosePath(context);
CGContextFillPath(context);
UIGraphicsPopContext();
}
#pragma mark - KVO
- (void)registerForKVO {
for (NSString *keyPath in [self observableKeypaths]) {
[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
}
}
- (void)unregisterFromKVO {
for (NSString *keyPath in [self observableKeypaths]) {
[self removeObserver:self forKeyPath:keyPath];
}
}
- (NSArray *)observableKeypaths {
return [NSArray arrayWithObjects:@"mode", @"customView", @"labelText", @"labelFont", @"labelColor",
@"detailsLabelText", @"detailsLabelFont", @"detailsLabelColor", @"progress", @"activityIndicatorColor", nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (![NSThread isMainThread]) {
[self performSelectorOnMainThread:@selector(updateUIForKeypath:) withObject:keyPath waitUntilDone:NO];
} else {
[self updateUIForKeypath:keyPath];
}
}
- (void)updateUIForKeypath:(NSString *)keyPath {
if ([keyPath isEqualToString:@"mode"] || [keyPath isEqualToString:@"customView"] ||
[keyPath isEqualToString:@"activityIndicatorColor"]) {
[self updateIndicators];
} else if ([keyPath isEqualToString:@"labelText"]) {
label.text = self.labelText;
} else if ([keyPath isEqualToString:@"labelFont"]) {
label.font = self.labelFont;
} else if ([keyPath isEqualToString:@"labelColor"]) {
label.textColor = self.labelColor;
} else if ([keyPath isEqualToString:@"detailsLabelText"]) {
detailsLabel.text = self.detailsLabelText;
} else if ([keyPath isEqualToString:@"detailsLabelFont"]) {
detailsLabel.font = self.detailsLabelFont;
} else if ([keyPath isEqualToString:@"detailsLabelColor"]) {
detailsLabel.textColor = self.detailsLabelColor;
} else if ([keyPath isEqualToString:@"progress"]) {
if ([indicator respondsToSelector:@selector(setProgress:)]) {
[(id)indicator setValue:@(progress) forKey:@"progress"];
}
return;
}
[self setNeedsLayout];
[self setNeedsDisplay];
} }
#pragma mark - Notifications #pragma mark - Notifications
- (void)registerForNotifications { - (void)registerForNotifications {
#if !TARGET_OS_TV #if !TARGET_OS_TV
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(statusBarOrientationDidChange:) [nc addObserver:self selector:@selector(statusBarOrientationDidChange:)
name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
#endif #endif
} }
- (void)unregisterFromNotifications { - (void)unregisterFromNotifications {
#if !TARGET_OS_TV #if !TARGET_OS_TV
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; [nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
#endif #endif
} }
#if !TARGET_OS_TV #if !TARGET_OS_TV
- (void)statusBarOrientationDidChange:(NSNotification *)notification { - (void)statusBarOrientationDidChange:(NSNotification *)notification {
UIView *superview = self.superview; UIView *superview = self.superview;
if (!superview) { if (!superview) {
return; return;
} else { } else {
[self updateForCurrentOrientationAnimated:YES]; [self updateForCurrentOrientationAnimated:YES];
} }
} }
#endif #endif
- (void)updateForCurrentOrientationAnimated:(BOOL)animated { - (void)updateForCurrentOrientationAnimated:(BOOL)animated {
// Stay in sync with the superview in any case // Stay in sync with the superview in any case
if (self.superview) { if (self.superview) {
self.frame = self.superview.bounds; self.bounds = self.superview.bounds;
[self setNeedsDisplay];
} }
// Not needed on iOS 8+, compile out when the deployment target allows, // Not needed on iOS 8+, compile out when the deployment target allows,
// to avoid sharedApplication problems on extension targets // to avoid sharedApplication problems on extension targets
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 #if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000
// Only needed pre iOS 8 when added to a window // Only needed pre iOS 7 when added to a window
BOOL iOS8OrLater = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0; BOOL iOS8OrLater = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0;
if (iOS8OrLater || ![self.superview isKindOfClass:[UIWindow class]]) return; if (iOS8OrLater || ![self.superview isKindOfClass:[UIWindow class]]) return;
// Make extension friendly. Will not get called on extensions (iOS 8+) due to the above check. UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
// This just ensures we don't get a warning about extension-unsafe API. CGFloat radians = 0;
Class UIApplicationClass = NSClassFromString(@"UIApplication"); if (UIInterfaceOrientationIsLandscape(orientation)) {
if (!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) return; if (orientation == UIInterfaceOrientationLandscapeLeft) { radians = -(CGFloat)M_PI_2; }
else { radians = (CGFloat)M_PI_2; }
UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; // Window coordinates differ!
UIInterfaceOrientation orientation = application.statusBarOrientation; self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width);
CGFloat radians = 0; } else {
if (orientation == UIInterfaceOrientationPortraitUpsideDown) { radians = (CGFloat)M_PI; }
if (UIInterfaceOrientationIsLandscape(orientation)) { else { radians = 0; }
radians = orientation == UIInterfaceOrientationLandscapeLeft ? -(CGFloat)M_PI_2 : (CGFloat)M_PI_2; }
// Window coordinates differ! rotationTransform = CGAffineTransformMakeRotation(radians);
self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width);
} else { if (animated) {
radians = orientation == UIInterfaceOrientationPortraitUpsideDown ? (CGFloat)M_PI : 0.f; [UIView beginAnimations:nil context:nil];
} [UIView setAnimationDuration:0.3];
}
if (animated) { [self setTransform:rotationTransform];
[UIView animateWithDuration:0.3 animations:^{ if (animated) {
self.transform = CGAffineTransformMakeRotation(radians); [UIView commitAnimations];
}]; }
} else {
self.transform = CGAffineTransformMakeRotation(radians);
}
#endif #endif
} }
...@@ -835,117 +789,102 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; ...@@ -835,117 +789,102 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f;
#pragma mark - Lifecycle #pragma mark - Lifecycle
- (id)init { - (id)init {
return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)]; return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)];
} }
- (id)initWithFrame:(CGRect)frame { - (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame]; self = [super initWithFrame:frame];
if (self) { if (self) {
self.backgroundColor = [UIColor clearColor]; self.backgroundColor = [UIColor clearColor];
self.opaque = NO; self.opaque = NO;
_progress = 0.f; _progress = 0.f;
_annular = NO; _annular = NO;
_progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f]; _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f];
_backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f]; _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f];
} [self registerForKVO];
return self; }
} return self;
#pragma mark - Layout
- (CGSize)intrinsicContentSize {
return CGSizeMake(37.f, 37.f);
} }
#pragma mark - Properties - (void)dealloc {
[self unregisterFromKVO];
- (void)setProgress:(float)progress { #if !__has_feature(objc_arc)
if (progress != _progress) { [_progressTintColor release];
_progress = progress; [_backgroundTintColor release];
[self setNeedsDisplay]; [super dealloc];
} #endif
}
- (void)setProgressTintColor:(UIColor *)progressTintColor {
NSAssert(progressTintColor, @"The color should not be nil.");
if (progressTintColor != _progressTintColor && ![progressTintColor isEqual:_progressTintColor]) {
_progressTintColor = progressTintColor;
[self setNeedsDisplay];
}
}
- (void)setBackgroundTintColor:(UIColor *)backgroundTintColor {
NSAssert(backgroundTintColor, @"The color should not be nil.");
if (backgroundTintColor != _backgroundTintColor && ![backgroundTintColor isEqual:_backgroundTintColor]) {
_backgroundTintColor = backgroundTintColor;
[self setNeedsDisplay];
}
} }
#pragma mark - Drawing #pragma mark - Drawing
- (void)drawRect:(CGRect)rect { - (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; CGRect allRect = self.bounds;
CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f);
if (_annular) { CGContextRef context = UIGraphicsGetCurrentContext();
// Draw background
CGFloat lineWidth = isPreiOS7 ? 5.f : 2.f; if (_annular) {
UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; // Draw background
processBackgroundPath.lineWidth = lineWidth; BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0;
processBackgroundPath.lineCapStyle = kCGLineCapButt; CGFloat lineWidth = isPreiOS7 ? 5.f : 2.f;
CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath];
CGFloat radius = (self.bounds.size.width - lineWidth)/2; processBackgroundPath.lineWidth = lineWidth;
CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees processBackgroundPath.lineCapStyle = kCGLineCapButt;
CGFloat endAngle = (2 * (float)M_PI) + startAngle; CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
[processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; CGFloat radius = (self.bounds.size.width - lineWidth)/2;
[_backgroundTintColor set]; CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
[processBackgroundPath stroke]; CGFloat endAngle = (2 * (float)M_PI) + startAngle;
// Draw progress [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
UIBezierPath *processPath = [UIBezierPath bezierPath]; [_backgroundTintColor set];
processPath.lineCapStyle = isPreiOS7 ? kCGLineCapRound : kCGLineCapSquare; [processBackgroundPath stroke];
processPath.lineWidth = lineWidth; // Draw progress
endAngle = (self.progress * 2 * (float)M_PI) + startAngle; UIBezierPath *processPath = [UIBezierPath bezierPath];
[processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; processPath.lineCapStyle = isPreiOS7 ? kCGLineCapRound : kCGLineCapSquare;
[_progressTintColor set]; processPath.lineWidth = lineWidth;
[processPath stroke]; endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
} else { [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
// Draw background [_progressTintColor set];
CGFloat lineWidth = 2.f; [processPath stroke];
CGRect allRect = self.bounds; } else {
CGRect circleRect = CGRectInset(allRect, lineWidth/2.f, lineWidth/2.f); // Draw background
CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); [_progressTintColor setStroke];
[_progressTintColor setStroke]; [_backgroundTintColor setFill];
[_backgroundTintColor setFill]; CGContextSetLineWidth(context, 2.0f);
CGContextSetLineWidth(context, lineWidth); CGContextFillEllipseInRect(context, circleRect);
if (isPreiOS7) { CGContextStrokeEllipseInRect(context, circleRect);
CGContextFillEllipseInRect(context, circleRect); // Draw progress
} CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2);
CGContextStrokeEllipseInRect(context, circleRect); CGFloat radius = (allRect.size.width - 4) / 2;
// 90 degrees CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees
CGFloat startAngle = - ((float)M_PI / 2.f); CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle;
// Draw progress [_progressTintColor setFill];
if (isPreiOS7) { CGContextMoveToPoint(context, center.x, center.y);
CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - lineWidth; CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0);
CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; CGContextClosePath(context);
[_progressTintColor setFill]; CGContextFillPath(context);
CGContextMoveToPoint(context, center.x, center.y); }
CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); }
CGContextClosePath(context);
CGContextFillPath(context); #pragma mark - KVO
} else {
UIBezierPath *processPath = [UIBezierPath bezierPath]; - (void)registerForKVO {
processPath.lineCapStyle = kCGLineCapButt; for (NSString *keyPath in [self observableKeypaths]) {
processPath.lineWidth = lineWidth * 2.f; [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - (processPath.lineWidth / 2.f); }
CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; }
[processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
// Ensure that we don't get color overlapping when _progressTintColor alpha < 1.f. - (void)unregisterFromKVO {
CGContextSetBlendMode(context, kCGBlendModeCopy); for (NSString *keyPath in [self observableKeypaths]) {
[_progressTintColor set]; [self removeObserver:self forKeyPath:keyPath];
[processPath stroke]; }
} }
}
- (NSArray *)observableKeypaths {
return [NSArray arrayWithObjects:@"progressTintColor", @"backgroundTintColor", @"progress", @"annular", nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
[self setNeedsDisplay];
} }
@end @end
...@@ -956,540 +895,139 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; ...@@ -956,540 +895,139 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f;
#pragma mark - Lifecycle #pragma mark - Lifecycle
- (id)init { - (id)init {
return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)]; return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)];
} }
- (id)initWithFrame:(CGRect)frame { - (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame]; self = [super initWithFrame:frame];
if (self) { if (self) {
_progress = 0.f; _progress = 0.f;
_lineColor = [UIColor whiteColor]; _lineColor = [UIColor whiteColor];
_progressColor = [UIColor whiteColor]; _progressColor = [UIColor whiteColor];
_progressRemainingColor = [UIColor clearColor]; _progressRemainingColor = [UIColor clearColor];
self.backgroundColor = [UIColor clearColor]; self.backgroundColor = [UIColor clearColor];
self.opaque = NO; self.opaque = NO;
} [self registerForKVO];
return self; }
return self;
} }
#pragma mark - Layout - (void)dealloc {
[self unregisterFromKVO];
- (CGSize)intrinsicContentSize { #if !__has_feature(objc_arc)
BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; [_lineColor release];
return CGSizeMake(120.f, isPreiOS7 ? 20.f : 10.f); [_progressColor release];
} [_progressRemainingColor release];
[super dealloc];
#pragma mark - Properties #endif
- (void)setProgress:(float)progress {
if (progress != _progress) {
_progress = progress;
[self setNeedsDisplay];
}
}
- (void)setProgressColor:(UIColor *)progressColor {
NSAssert(progressColor, @"The color should not be nil.");
if (progressColor != _progressColor && ![progressColor isEqual:_progressColor]) {
_progressColor = progressColor;
[self setNeedsDisplay];
}
}
- (void)setProgressRemainingColor:(UIColor *)progressRemainingColor {
NSAssert(progressRemainingColor, @"The color should not be nil.");
if (progressRemainingColor != _progressRemainingColor && ![progressRemainingColor isEqual:_progressRemainingColor]) {
_progressRemainingColor = progressRemainingColor;
[self setNeedsDisplay];
}
} }
#pragma mark - Drawing #pragma mark - Drawing
- (void)drawRect:(CGRect)rect { - (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext(); CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2); CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]);
CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]);
// Draw background and Border // Draw background
CGFloat radius = (rect.size.height / 2) - 2; float radius = (rect.size.height / 2) - 2;
CGContextMoveToPoint(context, 2, rect.size.height/2); CGContextMoveToPoint(context, 2, rect.size.height/2);
CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);
CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);
CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);
CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);
CGContextDrawPath(context, kCGPathFillStroke); CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);
CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);
CGContextSetFillColorWithColor(context, [_progressColor CGColor]); CGContextFillPath(context);
radius = radius - 2;
CGFloat amount = self.progress * rect.size.width; // Draw border
CGContextMoveToPoint(context, 2, rect.size.height/2);
// Progress in the middle area CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius);
if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2);
CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius);
CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius);
CGContextAddLineToPoint(context, amount, 4); CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2);
CGContextAddLineToPoint(context, amount, radius + 4); CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius);
CGContextStrokePath(context);
CGContextMoveToPoint(context, 4, rect.size.height/2);
CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); CGContextSetFillColorWithColor(context, [_progressColor CGColor]);
CGContextAddLineToPoint(context, amount, rect.size.height - 4); radius = radius - 2;
CGContextAddLineToPoint(context, amount, radius + 4); float amount = self.progress * rect.size.width;
CGContextFillPath(context); // Progress in the middle area
} if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) {
CGContextMoveToPoint(context, 4, rect.size.height/2);
// Progress in the right arc CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
else if (amount > radius + 4) { CGContextAddLineToPoint(context, amount, 4);
CGFloat x = amount - (rect.size.width - radius - 4); CGContextAddLineToPoint(context, amount, radius + 4);
CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextMoveToPoint(context, 4, rect.size.height/2);
CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4); CGContextAddLineToPoint(context, amount, rect.size.height - 4);
CGFloat angle = -acos(x/radius); CGContextAddLineToPoint(context, amount, radius + 4);
if (isnan(angle)) angle = 0;
CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0); CGContextFillPath(context);
CGContextAddLineToPoint(context, amount, rect.size.height/2); }
CGContextMoveToPoint(context, 4, rect.size.height/2); // Progress in the right arc
CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); else if (amount > radius + 4) {
CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4); float x = amount - (rect.size.width - radius - 4);
angle = acos(x/radius);
if (isnan(angle)) angle = 0; CGContextMoveToPoint(context, 4, rect.size.height/2);
CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
CGContextAddLineToPoint(context, amount, rect.size.height/2); CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4);
float angle = -acos(x/radius);
CGContextFillPath(context); if (isnan(angle)) angle = 0;
} CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0);
CGContextAddLineToPoint(context, amount, rect.size.height/2);
// Progress is in the left arc
else if (amount < radius + 4 && amount > 0) { CGContextMoveToPoint(context, 4, rect.size.height/2);
CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4);
CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); angle = acos(x/radius);
if (isnan(angle)) angle = 0;
CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1);
CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); CGContextAddLineToPoint(context, amount, rect.size.height/2);
CGContextAddLineToPoint(context, radius + 4, rect.size.height/2);
CGContextFillPath(context);
CGContextFillPath(context); }
}
} // Progress is in the left arc
else if (amount < radius + 4 && amount > 0) {
@end CGContextMoveToPoint(context, 4, rect.size.height/2);
CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius);
CGContextAddLineToPoint(context, radius + 4, rect.size.height/2);
@interface MBBackgroundView ()
CGContextMoveToPoint(context, 4, rect.size.height/2);
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius);
@property UIVisualEffectView *effectView; CGContextAddLineToPoint(context, radius + 4, rect.size.height/2);
#endif
#if !TARGET_OS_TV CGContextFillPath(context);
@property UIToolbar *toolbar; }
#endif }
@end #pragma mark - KVO
- (void)registerForKVO {
@implementation MBBackgroundView for (NSString *keyPath in [self observableKeypaths]) {
[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
#pragma mark - Lifecycle }
}
- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) { - (void)unregisterFromKVO {
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { for (NSString *keyPath in [self observableKeypaths]) {
_style = MBProgressHUDBackgroundStyleBlur; [self removeObserver:self forKeyPath:keyPath];
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV }
_blurEffectStyle = UIBlurEffectStyleLight; }
#endif
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { - (NSArray *)observableKeypaths {
_color = [UIColor colorWithWhite:0.8f alpha:0.6f]; return [NSArray arrayWithObjects:@"lineColor", @"progressRemainingColor", @"progressColor", @"progress", nil];
} else { }
_color = [UIColor colorWithWhite:0.95f alpha:0.6f];
} - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
} else { [self setNeedsDisplay];
_style = MBProgressHUDBackgroundStyleSolidColor;
_color = [[UIColor blackColor] colorWithAlphaComponent:0.8];
}
self.clipsToBounds = YES;
[self updateForBackgroundStyle];
}
return self;
}
#pragma mark - Layout
- (CGSize)intrinsicContentSize {
// Smallest size possible. Content pushes against this.
return CGSizeZero;
}
#pragma mark - Appearance
- (void)setStyle:(MBProgressHUDBackgroundStyle)style {
if (style == MBProgressHUDBackgroundStyleBlur && kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0) {
style = MBProgressHUDBackgroundStyleSolidColor;
}
if (_style != style) {
_style = style;
[self updateForBackgroundStyle];
}
}
- (void)setColor:(UIColor *)color {
NSAssert(color, @"The color should not be nil.");
if (color != _color && ![color isEqual:_color]) {
_color = color;
[self updateViewsForColor:color];
}
}
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
- (void)setBlurEffectStyle:(UIBlurEffectStyle)blurEffectStyle {
if (_blurEffectStyle == blurEffectStyle) {
return;
}
_blurEffectStyle = blurEffectStyle;
[self updateForBackgroundStyle];
}
#endif
///////////////////////////////////////////////////////////////////////////////////////////
#pragma mark - Views
- (void)updateForBackgroundStyle {
MBProgressHUDBackgroundStyle style = self.style;
if (style == MBProgressHUDBackgroundStyleBlur) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) {
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:self.blurEffectStyle];
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
[self addSubview:effectView];
effectView.frame = self.bounds;
effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.backgroundColor = self.color;
self.layer.allowsGroupOpacity = NO;
self.effectView = effectView;
} else {
#endif
#if !TARGET_OS_TV
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectInset(self.bounds, -100.f, -100.f)];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
toolbar.barTintColor = self.color;
toolbar.translucent = YES;
[self addSubview:toolbar];
self.toolbar = toolbar;
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
}
#endif
} else {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) {
[self.effectView removeFromSuperview];
self.effectView = nil;
} else {
#endif
#if !TARGET_OS_TV
[self.toolbar removeFromSuperview];
self.toolbar = nil;
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
}
#endif
self.backgroundColor = self.color;
}
}
- (void)updateViewsForColor:(UIColor *)color {
if (self.style == MBProgressHUDBackgroundStyleBlur) {
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) {
self.backgroundColor = self.color;
} else {
#if !TARGET_OS_TV
self.toolbar.barTintColor = color;
#endif
}
} else {
self.backgroundColor = self.color;
}
}
@end
@implementation MBProgressHUD (Deprecated)
#pragma mark - Class
+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated {
NSArray *huds = [MBProgressHUD allHUDsForView:view];
for (MBProgressHUD *hud in huds) {
hud.removeFromSuperViewOnHide = YES;
[hud hideAnimated:animated];
}
return [huds count];
}
+ (NSArray *)allHUDsForView:(UIView *)view {
NSMutableArray *huds = [NSMutableArray array];
NSArray *subviews = view.subviews;
for (UIView *aView in subviews) {
if ([aView isKindOfClass:self]) {
[huds addObject:aView];
}
}
return [NSArray arrayWithArray:huds];
}
#pragma mark - Lifecycle
- (id)initWithWindow:(UIWindow *)window {
return [self initWithView:window];
}
#pragma mark - Show & hide
- (void)show:(BOOL)animated {
[self showAnimated:animated];
}
- (void)hide:(BOOL)animated {
[self hideAnimated:animated];
}
- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay {
[self hideAnimated:animated afterDelay:delay];
}
#pragma mark - Threading
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
[self showAnimated:animated whileExecutingBlock:^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
// Start executing the requested task
[target performSelector:method withObject:object];
#pragma clang diagnostic pop
}];
}
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
[self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
}
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)(void))completion {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
[self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion];
}
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue {
[self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL];
}
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue completionBlock:(nullable MBProgressHUDCompletionBlock)completion {
self.taskInProgress = YES;
self.completionBlock = completion;
dispatch_async(queue, ^(void) {
block();
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self cleanUp];
});
});
[self showAnimated:animated];
}
- (void)cleanUp {
self.taskInProgress = NO;
[self hideAnimated:self.useAnimation];
}
#pragma mark - Labels
- (NSString *)labelText {
return self.label.text;
}
- (void)setLabelText:(NSString *)labelText {
MBMainThreadAssert();
self.label.text = labelText;
}
- (UIFont *)labelFont {
return self.label.font;
}
- (void)setLabelFont:(UIFont *)labelFont {
MBMainThreadAssert();
self.label.font = labelFont;
}
- (UIColor *)labelColor {
return self.label.textColor;
}
- (void)setLabelColor:(UIColor *)labelColor {
MBMainThreadAssert();
self.label.textColor = labelColor;
}
- (NSString *)detailsLabelText {
return self.detailsLabel.text;
}
- (void)setDetailsLabelText:(NSString *)detailsLabelText {
MBMainThreadAssert();
self.detailsLabel.text = detailsLabelText;
}
- (UIFont *)detailsLabelFont {
return self.detailsLabel.font;
}
- (void)setDetailsLabelFont:(UIFont *)detailsLabelFont {
MBMainThreadAssert();
self.detailsLabel.font = detailsLabelFont;
}
- (UIColor *)detailsLabelColor {
return self.detailsLabel.textColor;
}
- (void)setDetailsLabelColor:(UIColor *)detailsLabelColor {
MBMainThreadAssert();
self.detailsLabel.textColor = detailsLabelColor;
}
- (CGFloat)opacity {
return _opacity;
}
- (void)setOpacity:(CGFloat)opacity {
MBMainThreadAssert();
_opacity = opacity;
}
- (UIColor *)color {
return self.bezelView.color;
}
- (void)setColor:(UIColor *)color {
MBMainThreadAssert();
self.bezelView.color = color;
}
- (CGFloat)yOffset {
return self.offset.y;
}
- (void)setYOffset:(CGFloat)yOffset {
MBMainThreadAssert();
self.offset = CGPointMake(self.offset.x, yOffset);
}
- (CGFloat)xOffset {
return self.offset.x;
}
- (void)setXOffset:(CGFloat)xOffset {
MBMainThreadAssert();
self.offset = CGPointMake(xOffset, self.offset.y);
}
- (CGFloat)cornerRadius {
return self.bezelView.layer.cornerRadius;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
MBMainThreadAssert();
self.bezelView.layer.cornerRadius = cornerRadius;
}
- (BOOL)dimBackground {
MBBackgroundView *backgroundView = self.backgroundView;
UIColor *dimmedColor = [UIColor colorWithWhite:0.f alpha:.2f];
return backgroundView.style == MBProgressHUDBackgroundStyleSolidColor && [backgroundView.color isEqual:dimmedColor];
}
- (void)setDimBackground:(BOOL)dimBackground {
MBMainThreadAssert();
self.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor;
self.backgroundView.color = dimBackground ? [UIColor colorWithWhite:0.f alpha:.2f] : [UIColor clearColor];
}
- (CGSize)size {
return self.bezelView.frame.size;
}
- (UIColor *)activityIndicatorColor {
return _activityIndicatorColor;
}
- (void)setActivityIndicatorColor:(UIColor *)activityIndicatorColor {
if (activityIndicatorColor != _activityIndicatorColor) {
_activityIndicatorColor = activityIndicatorColor;
UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)self.indicator;
if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) {
[indicator setColor:activityIndicatorColor];
}
}
}
@end
@implementation MBProgressHUDRoundedButton
#pragma mark - Lifecycle
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
CALayer *layer = self.layer;
layer.borderWidth = 1.f;
}
return self;
}
#pragma mark - Layout
- (void)layoutSubviews {
[super layoutSubviews];
// Fully rounded corners
CGFloat height = CGRectGetHeight(self.bounds);
self.layer.cornerRadius = ceil(height / 2.f);
}
- (CGSize)intrinsicContentSize {
// Only show if we have associated control events
if (self.allControlEvents == 0) return CGSizeZero;
CGSize size = [super intrinsicContentSize];
// Add some side padding
size.width += 20.f;
return size;
}
#pragma mark - Color
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state {
[super setTitleColor:color forState:state];
// Update related colors
[self setHighlighted:self.highlighted];
self.layer.borderColor = color.CGColor;
}
- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
UIColor *baseColor = [self titleColorForState:UIControlStateSelected];
self.backgroundColor = highlighted ? [baseColor colorWithAlphaComponent:0.1f] : [UIColor clearColor];
} }
@end @end
# MBProgressHUD # MBProgressHUD [![Build Status](https://travis-ci.org/matej/MBProgressHUD.svg?branch=master)](https://travis-ci.org/matej/MBProgressHUD)
[![Build Status](https://travis-ci.org/matej/MBProgressHUD.svg?branch=master)](https://travis-ci.org/matej/MBProgressHUD) [![codecov.io](https://codecov.io/github/matej/MBProgressHUD/coverage.svg?branch=master)](https://codecov.io/github/matej/MBProgressHUD?branch=master) MBProgressHUD is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features.
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) [![CocoaPods compatible](https://img.shields.io/cocoapods/v/MBProgressHUD.svg?style=flat)](https://cocoapods.org/pods/MBProgressHUD) [![License: MIT](https://img.shields.io/cocoapods/l/MBProgressHUD.svg?style=flat)](http://opensource.org/licenses/MIT)
`MBProgressHUD` is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private `UIKit` `UIProgressHUD` with some additional features. [![](http://dl.dropbox.com/u/378729/MBProgressHUD/1-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/1.png)
[![](http://dl.dropbox.com/u/378729/MBProgressHUD/2-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/2.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/1-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/1.png) [![](http://dl.dropbox.com/u/378729/MBProgressHUD/3-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/3.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/2-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/2.png) [![](http://dl.dropbox.com/u/378729/MBProgressHUD/4-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/4.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/3-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/3.png) [![](http://dl.dropbox.com/u/378729/MBProgressHUD/5-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/5.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/4-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/4.png) [![](http://dl.dropbox.com/u/378729/MBProgressHUD/6-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/6.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/5-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/5.png) [![](http://dl.dropbox.com/u/378729/MBProgressHUD/7-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/7.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/6-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/6.png)
[![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/7-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/7.png)
**NOTE:** The class has recently undergone a major rewrite. The old version is available in the [legacy](https://github.com/jdg/MBProgressHUD/tree/legacy) branch, should you need it.
## Requirements ## Requirements
`MBProgressHUD` works on iOS 6+ and requires ARC to build. It depends on the following Apple frameworks, which should already be included with most Xcode templates: MBProgressHUD works on any iOS version and is compatible with both ARC and non-ARC projects. It depends on the following Apple frameworks, which should already be included with most Xcode templates:
* Foundation.framework * Foundation.framework
* UIKit.framework * UIKit.framework
* CoreGraphics.framework * CoreGraphics.framework
You will need the latest developer tools in order to build `MBProgressHUD`. Old Xcode versions might work, but compatibility will not be explicitly maintained. You will need the latest developer tools in order to build MBProgressHUD. Old Xcode versions might work, but compatibility will not be explicitly maintained.
## Adding MBProgressHUD to your project ## Adding MBProgressHUD to your project
### CocoaPods ### Cocoapods
[CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project. [CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project.
1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 1.1.0'` 1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 0.9.2'`
2. Install the pod(s) by running `pod install`. 2. Install the pod(s) by running `pod install`.
3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. 3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`.
### Carthage
1. Add MBProgressHUD to your Cartfile. e.g., `github "jdg/MBProgressHUD" ~> 1.1.0`
2. Run `carthage update`
3. Follow the rest of the [standard Carthage installation instructions](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add MBProgressHUD to your project.
### Source files ### Source files
Alternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project. Alternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project.
1. Download the [latest code version](https://github.com/matej/MBProgressHUD/archive/master.zip) or add the repository as a git submodule to your git-tracked project. 1. Download the [latest code version](https://github.com/matej/MBProgressHUD/archive/master.zip) or add the repository as a git submodule to your git-tracked project.
2. Open your project in Xcode, then drag and drop `MBProgressHUD.h` and `MBProgressHUD.m` onto your project (use the "Product Navigator view"). Make sure to select Copy items when asked if you extracted the code archive outside of your project. 2. Open your project in Xcode, then drag and drop `MBProgressHUD.h` and `MBProgressHUD.m` onto your project (use the "Product Navigator view"). Make sure to select Copy items when asked if you extracted the code archive outside of your project.
3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. 3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`.
### Static library ### Static library
You can also add MBProgressHUD as a static library to your project or workspace. You can also add MBProgressHUD as a static library to your project or workspace.
1. Download the [latest code version](https://github.com/matej/MBProgressHUD/downloads) or add the repository as a git submodule to your git-tracked project. 1. Download the [latest code version](https://github.com/matej/MBProgressHUD/downloads) or add the repository as a git submodule to your git-tracked project.
2. Open your project in Xcode, then drag and drop `MBProgressHUD.xcodeproj` onto your project or workspace (use the "Product Navigator view"). 2. Open your project in Xcode, then drag and drop `MBProgressHUD.xcodeproj` onto your project or workspace (use the "Product Navigator view").
3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add `libMBProgressHUD.a`. You might also need to add `MBProgressHUD` to the Target Dependencies list. 3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add `libMBProgressHUD.a`. You might also need to add `MBProgressHUD` to the Target Dependencies list.
4. Include MBProgressHUD wherever you need it with `#import <MBProgressHUD/MBProgressHUD.h>`. 4. Include MBProgressHUD wherever you need it with `#import <MBProgressHUD/MBProgressHUD.h>`.
## Usage ## Usage
The main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread. The main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread.
```objective-c ```objective-c
[MBProgressHUD showHUDAddedTo:self.view animated:YES]; [MBProgressHUD showHUDAddedTo:self.view animated:YES];
...@@ -72,34 +61,20 @@ dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ ...@@ -72,34 +61,20 @@ dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
}); });
``` ```
You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain `UIKit` views with complex view hierarchies - like `UITableView` or `UICollectionView`. Those can mutate their subviews in unexpected ways and thereby break HUD display. If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns.
If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns.
```objective-c ```objective-c
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate; hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading"; hud.labelText = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) { [self doSomethingInBackgroundWithProgressCallback:^(float progress) {
hud.progress = progress; hud.progress = progress;
} completionCallback:^{ } completionCallback:^{
[hud hideAnimated:YES]; [hud hide:YES];
}];
```
You can also use a `NSProgress` object and MBProgressHUD will update itself when there is progress reported through that object.
```objective-c
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading";
NSProgress *progress = [self doSomethingInBackgroundCompletion:^{
[hud hideAnimated:YES];
}]; }];
hud.progressObject = progress;
``` ```
Keep in mind that UI updates, inclining calls to MBProgressHUD should always be done on the main thread. UI updates should always be done on the main thread. Some MBProgressHUD setters are however considered "thread safe" and can be called from background threads. Those also include `setMode:`, `setCustomView:`, `setLabelText:`, `setLabelFont:`, `setDetailsLabelText:`, `setDetailsLabelFont:` and `setProgress:`.
If you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task. If you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task.
...@@ -119,8 +94,8 @@ For more examples, including how to use MBProgressHUD with asynchronous operatio ...@@ -119,8 +94,8 @@ For more examples, including how to use MBProgressHUD with asynchronous operatio
## License ## License
This code is distributed under the terms and conditions of the [MIT license](LICENSE). This code is distributed under the terms and conditions of the [MIT license](LICENSE).
## Change-log ## Change-log
A brief summary of each MBProgressHUD release can be found in the [CHANGELOG](CHANGELOG.mdown). A brief summary of each MBProgressHUD release can be found on the [wiki](https://github.com/matej/MBProgressHUD/wiki/Change-log).
...@@ -54,7 +54,7 @@ PODS: ...@@ -54,7 +54,7 @@ PODS:
- WechatOpenSDK - WechatOpenSDK
- WeiboSDK - WeiboSDK
- Masonry (1.1.0) - Masonry (1.1.0)
- MBProgressHUD (1.1.0) - MBProgressHUD (0.9.2)
- SDWebImage (5.4.0): - SDWebImage (5.4.0):
- SDWebImage/Core (= 5.4.0) - SDWebImage/Core (= 5.4.0)
- SDWebImage/Core (5.4.0) - SDWebImage/Core (5.4.0)
...@@ -64,7 +64,7 @@ PODS: ...@@ -64,7 +64,7 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- GMShareSDK (from `../`) - GMShareSDK (from `../`)
- MBProgressHUD (= 1.1.0) - MBProgressHUD (= 0.9.2)
SPEC REPOS: SPEC REPOS:
"git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git": "git@git.wanmeizhensuo.com:gengmeiios/GMSpecs.git":
...@@ -97,12 +97,12 @@ SPEC CHECKSUMS: ...@@ -97,12 +97,12 @@ SPEC CHECKSUMS:
GMPhobos: 1e2d68c456b69bf156276d7242877498107474db GMPhobos: 1e2d68c456b69bf156276d7242877498107474db
GMShareSDK: 0eb73091491849a0f0bcf8c976ddef860fb44c0e GMShareSDK: 0eb73091491849a0f0bcf8c976ddef860fb44c0e
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 MBProgressHUD: 1569cf7ace17a8bac47aabfbb8580a49690386d1
SDWebImage: 5bf6aec6481ae2a062bdc59f9d6c1d1e552090e0 SDWebImage: 5bf6aec6481ae2a062bdc59f9d6c1d1e552090e0
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
WechatOpenSDK: 368ae03b72ee3ea1328c4f11326fbb5d2721d118 WechatOpenSDK: 368ae03b72ee3ea1328c4f11326fbb5d2721d118
WeiboSDK: acb067053668102cf07d01aa7604350162c2e466 WeiboSDK: acb067053668102cf07d01aa7604350162c2e466
PODFILE CHECKSUM: f7f43230ff4b071c07a8cd96821fe597fdb590f6 PODFILE CHECKSUM: 7d810478599596071b1f4191c35ed3266ebed840
COCOAPODS: 1.8.4 COCOAPODS: 1.8.4
...@@ -51,10 +51,10 @@ ...@@ -51,10 +51,10 @@
047A9AF53C78C1C145B26FB34C064583 /* GMCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FD15DB8AD239113D9B2E2BC383FD66 /* GMCollectionViewCell.m */; }; 047A9AF53C78C1C145B26FB34C064583 /* GMCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FD15DB8AD239113D9B2E2BC383FD66 /* GMCollectionViewCell.m */; };
0480E4CAFAC128E23BDB81099CF7520B /* GMShareVideoAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = C483D5B22CD2F2C3B6EC559153D4FDF4 /* GMShareVideoAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0480E4CAFAC128E23BDB81099CF7520B /* GMShareVideoAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = C483D5B22CD2F2C3B6EC559153D4FDF4 /* GMShareVideoAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; };
054485EA534389C97C7C3637E0269D9C /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F93A702EE4C228B1EA8ED6E4ED2A8A /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; 054485EA534389C97C7C3637E0269D9C /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F93A702EE4C228B1EA8ED6E4ED2A8A /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
07EAF6CAE732A0A57254A23C0D32FB15 /* Masonry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CC374A56E6CB5C51FF247FE24218640 /* Masonry.framework */; }; 07EAF6CAE732A0A57254A23C0D32FB15 /* Masonry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85A103797FDC3D913E942C299211DA8B /* Masonry.framework */; };
083E2FB0ACA331BFFBC1F1A1811C69A4 /* GMDiaryShareInfoView.h in Headers */ = {isa = PBXBuildFile; fileRef = CFA20A457BD9C10727C2C74C40596752 /* GMDiaryShareInfoView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 083E2FB0ACA331BFFBC1F1A1811C69A4 /* GMDiaryShareInfoView.h in Headers */ = {isa = PBXBuildFile; fileRef = CFA20A457BD9C10727C2C74C40596752 /* GMDiaryShareInfoView.h */; settings = {ATTRIBUTES = (Public, ); }; };
090B281783A714301985E5325F844E34 /* WYSegmentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA7AF980AE465990AF0EAE1CF671A9C /* WYSegmentView.m */; }; 090B281783A714301985E5325F844E34 /* WYSegmentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA7AF980AE465990AF0EAE1CF671A9C /* WYSegmentView.m */; };
0A493904BDC1FDE3D130CC04EA2FFBB0 /* TMCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075862B34835ABE9A764E2614D89D838 /* TMCache.framework */; }; 0A493904BDC1FDE3D130CC04EA2FFBB0 /* TMCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F3551192ADB090E6E61E2539F1C0337 /* TMCache.framework */; };
0B49C6F47FA7C5AB5557299868C66E6D /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5EB4C0EDC78BCB474EB9B1513EB379 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B49C6F47FA7C5AB5557299868C66E6D /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5EB4C0EDC78BCB474EB9B1513EB379 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };
0C8762D7BA2CD9FD05A3ED7A80C63FD0 /* GMShareCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 00DE9456BEE57FA65C777AD57901F6EC /* GMShareCell.m */; }; 0C8762D7BA2CD9FD05A3ED7A80C63FD0 /* GMShareCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 00DE9456BEE57FA65C777AD57901F6EC /* GMShareCell.m */; };
0C8EBB5603E083B76A211FB9BE6103E8 /* Phobos.m in Sources */ = {isa = PBXBuildFile; fileRef = ED403BBBDE31EC8C95B1D3E3079BE923 /* Phobos.m */; }; 0C8EBB5603E083B76A211FB9BE6103E8 /* Phobos.m in Sources */ = {isa = PBXBuildFile; fileRef = ED403BBBDE31EC8C95B1D3E3079BE923 /* Phobos.m */; };
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
18C739EB9BC7266B14931ABF14670F85 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E5C1F4D88C1BE84FEA8364C36E611F72 /* NSLayoutConstraint+MASDebugAdditions.m */; }; 18C739EB9BC7266B14931ABF14670F85 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E5C1F4D88C1BE84FEA8364C36E611F72 /* NSLayoutConstraint+MASDebugAdditions.m */; };
19ACC08978F032F1C7589E6C1D4DF349 /* GMJSONModel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CA99B99AAA401868FD61D0E336509A86 /* GMJSONModel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19ACC08978F032F1C7589E6C1D4DF349 /* GMJSONModel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CA99B99AAA401868FD61D0E336509A86 /* GMJSONModel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
1A6C5F810132621F86E1A07624F4864B /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F8EE02C2C63CEF1A64B5A6DFA964546A /* SDAnimatedImagePlayer.m */; }; 1A6C5F810132621F86E1A07624F4864B /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F8EE02C2C63CEF1A64B5A6DFA964546A /* SDAnimatedImagePlayer.m */; };
1A91472DB54B7A28414AE0CB11D6888F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 1A91472DB54B7A28414AE0CB11D6888F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
1B02BFA376A33296524D5D6D38DBB24A /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C26775B4CF2DBBA2E2D345DB1BB0B5F /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1B02BFA376A33296524D5D6D38DBB24A /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C26775B4CF2DBBA2E2D345DB1BB0B5F /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
1C7041C4C9A1D31BDED41C4DB79D210E /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 151DAAADD321680E0C709856F255426D /* UIImage+GIF.m */; }; 1C7041C4C9A1D31BDED41C4DB79D210E /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 151DAAADD321680E0C709856F255426D /* UIImage+GIF.m */; };
1C8284593B1AC14958D2CC12523120E3 /* JSONModel+networking.h in Headers */ = {isa = PBXBuildFile; fileRef = DD47D720FEEBD55D4C04F313DC434455 /* JSONModel+networking.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1C8284593B1AC14958D2CC12523120E3 /* JSONModel+networking.h in Headers */ = {isa = PBXBuildFile; fileRef = DD47D720FEEBD55D4C04F313DC434455 /* JSONModel+networking.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -89,15 +89,15 @@ ...@@ -89,15 +89,15 @@
1CDB7486DE989D9F88D999717624905F /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 40432893111934EEF3944D20E293B739 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1CDB7486DE989D9F88D999717624905F /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 40432893111934EEF3944D20E293B739 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; };
1D5A830FE86E05B3409604516B60D2D5 /* JSONModelError.h in Headers */ = {isa = PBXBuildFile; fileRef = 8811B6AA6551246D54AFBA5A9C41A4BB /* JSONModelError.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1D5A830FE86E05B3409604516B60D2D5 /* JSONModelError.h in Headers */ = {isa = PBXBuildFile; fileRef = 8811B6AA6551246D54AFBA5A9C41A4BB /* JSONModelError.h */; settings = {ATTRIBUTES = (Public, ); }; };
20E1B065122546AD781BF382C04010C6 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C7F6B01A0B960201ADBB7026558259 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20E1B065122546AD781BF382C04010C6 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 13C7F6B01A0B960201ADBB7026558259 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; };
21497749178587CD7535943A79D93DB7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 21497749178587CD7535943A79D93DB7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
221109BF12D49B36AC08A989A8EB81E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 221109BF12D49B36AC08A989A8EB81E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
22593120335A13C5D314126370D9ADD6 /* GMTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DB4A7A9B250C9179D6C1A7CD01BD21C /* GMTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 22593120335A13C5D314126370D9ADD6 /* GMTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DB4A7A9B250C9179D6C1A7CD01BD21C /* GMTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
225E62EF40E94DC666FACB5114706DD5 /* UIView+SafeArea.m in Sources */ = {isa = PBXBuildFile; fileRef = 835ED805F8140DA60C35CE0B481F33F7 /* UIView+SafeArea.m */; }; 225E62EF40E94DC666FACB5114706DD5 /* UIView+SafeArea.m in Sources */ = {isa = PBXBuildFile; fileRef = 835ED805F8140DA60C35CE0B481F33F7 /* UIView+SafeArea.m */; };
2341DAC9C22454A1B3E7ACD090EE7CFD /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA631236294275C5069398DA3E2FE62 /* SDWebImageDownloaderOperation.m */; }; 2341DAC9C22454A1B3E7ACD090EE7CFD /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA631236294275C5069398DA3E2FE62 /* SDWebImageDownloaderOperation.m */; };
23817D952AE7CF7DB77BA09D732FBDEF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = C14DDA405DED148A40FFC10011ADFDC5 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23817D952AE7CF7DB77BA09D732FBDEF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = C14DDA405DED148A40FFC10011ADFDC5 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; };
24AA8484F16C6BE0F542808367CB07B1 /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ACB7F284D1DFAB9AC1B364EAAD3D883E /* SDWebImage.framework */; }; 24AA8484F16C6BE0F542808367CB07B1 /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4B7F18F4FD45A5C6A0BF3D04C2215FB /* SDWebImage.framework */; };
256981D79597A950E4B836729E6E18BD /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C869BE3F28E2344EAB6729990EF2388 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 256981D79597A950E4B836729E6E18BD /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C869BE3F28E2344EAB6729990EF2388 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };
26AC9B7A59209CE4F2F4A807D55BFCBE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 26AC9B7A59209CE4F2F4A807D55BFCBE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
281FB3A7DCF553CD254D67BD33C1AE41 /* UIColor+GMTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFE8C51BA42834DF49776742A0AE0D1 /* UIColor+GMTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; 281FB3A7DCF553CD254D67BD33C1AE41 /* UIColor+GMTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFE8C51BA42834DF49776742A0AE0D1 /* UIColor+GMTheme.h */; settings = {ATTRIBUTES = (Public, ); }; };
283B733918002412F194478F5A5EE85C /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 144ABE0C91376A40A1BC8F1F839CD969 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; 283B733918002412F194478F5A5EE85C /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 144ABE0C91376A40A1BC8F1F839CD969 /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; };
2920EC65383953B6608A3D63093BE456 /* NSString+Encrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CEB9DA09D3818AC52BE4D1045DF188 /* NSString+Encrypt.m */; }; 2920EC65383953B6608A3D63093BE456 /* NSString+Encrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CEB9DA09D3818AC52BE4D1045DF188 /* NSString+Encrypt.m */; };
...@@ -109,8 +109,8 @@ ...@@ -109,8 +109,8 @@
2D6C6A13F295E5FBC34CD1FB4BE57B36 /* GMDiaryShareView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4623582F9DD47010A241CDED56C4E3A /* GMDiaryShareView.m */; }; 2D6C6A13F295E5FBC34CD1FB4BE57B36 /* GMDiaryShareView.m in Sources */ = {isa = PBXBuildFile; fileRef = F4623582F9DD47010A241CDED56C4E3A /* GMDiaryShareView.m */; };
2EF098BDBDA130C9440FC49C56A18B6E /* ALPlatformView.h in Headers */ = {isa = PBXBuildFile; fileRef = 902C2DA860B9CDE6711EF22B05F66C8B /* ALPlatformView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2EF098BDBDA130C9440FC49C56A18B6E /* ALPlatformView.h in Headers */ = {isa = PBXBuildFile; fileRef = 902C2DA860B9CDE6711EF22B05F66C8B /* ALPlatformView.h */; settings = {ATTRIBUTES = (Public, ); }; };
2F5C4A3995564CFF8D6F03BCBD329541 /* GMScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD0B588A86791A36267B4F6DAB5C1F2 /* GMScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2F5C4A3995564CFF8D6F03BCBD329541 /* GMScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD0B588A86791A36267B4F6DAB5C1F2 /* GMScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; };
31578283E9D0C436571196A532AF54BF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0904210056341D1D1487B57F4F076CD1 /* UIKit.framework */; }; 31578283E9D0C436571196A532AF54BF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C7ADE775CBA206408B6857C67FD0757 /* UIKit.framework */; };
317D7A57804B3CAD5893DDF236278013 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 317D7A57804B3CAD5893DDF236278013 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
332E6BB73B9683ADCB514AF7A9F7BDDC /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 190847946B05327531B7B070B39104DD /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 332E6BB73B9683ADCB514AF7A9F7BDDC /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 190847946B05327531B7B070B39104DD /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
339D13DFEB18250B946C8EDA95717A01 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 621680EB7CFDC7BCFB2077B41DA2C7FB /* SDAssociatedObject.m */; }; 339D13DFEB18250B946C8EDA95717A01 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 621680EB7CFDC7BCFB2077B41DA2C7FB /* SDAssociatedObject.m */; };
33BD8E33B9392EE5F009F0FEF080E869 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 02E8B9FA96F62771153B2467AFA45FBE /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33BD8E33B9392EE5F009F0FEF080E869 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 02E8B9FA96F62771153B2467AFA45FBE /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -119,7 +119,6 @@ ...@@ -119,7 +119,6 @@
35D1AD8476B2F804E4FCA343A2299A87 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 34283CB3F7454B9103E3305936B0B95D /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 35D1AD8476B2F804E4FCA343A2299A87 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 34283CB3F7454B9103E3305936B0B95D /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
35D2B67164AD478B4FBD636D4A7E5753 /* TMDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B16533393072830484260C12C4461F5 /* TMDiskCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 35D2B67164AD478B4FBD636D4A7E5753 /* TMDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B16533393072830484260C12C4461F5 /* TMDiskCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
3632116692F17509FA7DB910C3DD256A /* NSObject+KeyboardAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C32D5AD847C016EA8755412B32126F /* NSObject+KeyboardAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3632116692F17509FA7DB910C3DD256A /* NSObject+KeyboardAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C32D5AD847C016EA8755412B32126F /* NSObject+KeyboardAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; };
3633F6BC492D1B7DD2BC1F999780AF63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; };
36B44BD80F5345B25D9F511C22673FEF /* JSONModelClassProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = BED347D15FBE64FBBF9F17C9D139C0D7 /* JSONModelClassProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; 36B44BD80F5345B25D9F511C22673FEF /* JSONModelClassProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = BED347D15FBE64FBBF9F17C9D139C0D7 /* JSONModelClassProperty.h */; settings = {ATTRIBUTES = (Public, ); }; };
38C930B10CC634E843ACCE58577210C4 /* GMFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4177E3EFFB1F4D3CDD036D97D75AA6C9 /* GMFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 38C930B10CC634E843ACCE58577210C4 /* GMFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4177E3EFFB1F4D3CDD036D97D75AA6C9 /* GMFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
39C152BD783DBA0B2543B7DE5FD17FA6 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1220D48AE5C9A3EE2D0C52AA1B678C /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; 39C152BD783DBA0B2543B7DE5FD17FA6 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1220D48AE5C9A3EE2D0C52AA1B678C /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -127,7 +126,7 @@ ...@@ -127,7 +126,7 @@
3A776A823710D2B01209AED4AF687192 /* GMRateView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DC54CADF8399EC7AAD69522329499E0 /* GMRateView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3A776A823710D2B01209AED4AF687192 /* GMRateView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DC54CADF8399EC7AAD69522329499E0 /* GMRateView.h */; settings = {ATTRIBUTES = (Public, ); }; };
3ABA3C53EDC38006347BD0EAAD2D9ABA /* TMCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F81A98A03D263EE0C9D40370F0B97099 /* TMCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3ABA3C53EDC38006347BD0EAAD2D9ABA /* TMCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F81A98A03D263EE0C9D40370F0B97099 /* TMCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
3AC4ED49105A539FC4AF32C821590EBB /* JSONModel+networking.m in Sources */ = {isa = PBXBuildFile; fileRef = FB15A54B63A342F9516793A4EE819F58 /* JSONModel+networking.m */; }; 3AC4ED49105A539FC4AF32C821590EBB /* JSONModel+networking.m in Sources */ = {isa = PBXBuildFile; fileRef = FB15A54B63A342F9516793A4EE819F58 /* JSONModel+networking.m */; };
3B356FC337CF981598CEDCF1416BE16D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A8FD7F69597452F61FAE35599930BBB /* CoreLocation.framework */; }; 3B356FC337CF981598CEDCF1416BE16D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86A3B519CFE97F86476384D027F3D6E2 /* CoreLocation.framework */; };
3C465B3BE49B4C7F16AD49AEB94F19C1 /* UILabel+CopyExtern.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B473770A34DAC9677EFB8EBF510672A /* UILabel+CopyExtern.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3C465B3BE49B4C7F16AD49AEB94F19C1 /* UILabel+CopyExtern.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B473770A34DAC9677EFB8EBF510672A /* UILabel+CopyExtern.h */; settings = {ATTRIBUTES = (Public, ); }; };
3D1C305F8DC247B53D9D86C768E58751 /* ALShareTopicCardView.m in Sources */ = {isa = PBXBuildFile; fileRef = CF6786223E4628707F6BBE69B7ED5FB8 /* ALShareTopicCardView.m */; }; 3D1C305F8DC247B53D9D86C768E58751 /* ALShareTopicCardView.m in Sources */ = {isa = PBXBuildFile; fileRef = CF6786223E4628707F6BBE69B7ED5FB8 /* ALShareTopicCardView.m */; };
3E2D953FB11C4C13E37097D849D775BC /* TMCache-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F869185B8A69F2C67DC5AEF2B77E346 /* TMCache-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3E2D953FB11C4C13E37097D849D775BC /* TMCache-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F869185B8A69F2C67DC5AEF2B77E346 /* TMCache-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -138,7 +137,7 @@ ...@@ -138,7 +137,7 @@
42934F1CACFEECC4BEACE9F29E6A8EE7 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEBC8D79578D0CF6242BD1186C6BB74 /* SDWebImageCacheKeyFilter.m */; }; 42934F1CACFEECC4BEACE9F29E6A8EE7 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEBC8D79578D0CF6242BD1186C6BB74 /* SDWebImageCacheKeyFilter.m */; };
42D34B4F5FD1D282F28B41A80710973E /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CFB719B12DF682448725AC2378FED93 /* UIView+WebCache.m */; }; 42D34B4F5FD1D282F28B41A80710973E /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CFB719B12DF682448725AC2378FED93 /* UIView+WebCache.m */; };
43076447DCD092AC172E5E949DE7FEC5 /* TMCache-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BD585A8A3E8FCF6B71E974D355254575 /* TMCache-dummy.m */; }; 43076447DCD092AC172E5E949DE7FEC5 /* TMCache-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BD585A8A3E8FCF6B71E974D355254575 /* TMCache-dummy.m */; };
44BF55A66323E12400A4429582CFA80E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0904210056341D1D1487B57F4F076CD1 /* UIKit.framework */; }; 44BF55A66323E12400A4429582CFA80E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C7ADE775CBA206408B6857C67FD0757 /* UIKit.framework */; };
4574792F2A5F37D35AA33A24DFE9B415 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F4FB21E5E7027B6F2E5C78F0E0FD5AC /* MASLayoutConstraint.m */; }; 4574792F2A5F37D35AA33A24DFE9B415 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F4FB21E5E7027B6F2E5C78F0E0FD5AC /* MASLayoutConstraint.m */; };
45FDEDC9D926677732F9A27672DC7E8A /* GMPopupBgView.h in Headers */ = {isa = PBXBuildFile; fileRef = EA0B3A2DEF42D5E1B56F9135F645AAD8 /* GMPopupBgView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 45FDEDC9D926677732F9A27672DC7E8A /* GMPopupBgView.h in Headers */ = {isa = PBXBuildFile; fileRef = EA0B3A2DEF42D5E1B56F9135F645AAD8 /* GMPopupBgView.h */; settings = {ATTRIBUTES = (Public, ); }; };
473C0277132A1B64AF0440E1AF5633DA /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C342AB398B5EDC6A6C163F1D3A45F5C9 /* UIView+WebCacheOperation.m */; }; 473C0277132A1B64AF0440E1AF5633DA /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C342AB398B5EDC6A6C163F1D3A45F5C9 /* UIView+WebCacheOperation.m */; };
...@@ -155,7 +154,7 @@ ...@@ -155,7 +154,7 @@
5255AB9696B7274722D3A4676A00AC66 /* GMShareCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 497777EC5F658744D0FB515F09C88897 /* GMShareCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5255AB9696B7274722D3A4676A00AC66 /* GMShareCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 497777EC5F658744D0FB515F09C88897 /* GMShareCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
52DF3514DC7F3BD543B0053606B12EEC /* JSONModelLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EA3FC1C136B600DF85B5F55574758F /* JSONModelLib.h */; settings = {ATTRIBUTES = (Public, ); }; }; 52DF3514DC7F3BD543B0053606B12EEC /* JSONModelLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EA3FC1C136B600DF85B5F55574758F /* JSONModelLib.h */; settings = {ATTRIBUTES = (Public, ); }; };
531BDC90353DDF3B3189109B63853099 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A8F14915EDAD6F9036E72D4EDE6F08 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 531BDC90353DDF3B3189109B63853099 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A8F14915EDAD6F9036E72D4EDE6F08 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
5340B0C87744F567C3BAC7DA569B56BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 5340B0C87744F567C3BAC7DA569B56BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
54FB7A27E4CA03D0F227EB6B1E704A71 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 832750CEED265E584924B5BE6B33B5BE /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; 54FB7A27E4CA03D0F227EB6B1E704A71 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 832750CEED265E584924B5BE6B33B5BE /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; };
5578A5462712423AF62D9C43F1EDBFD7 /* JSONAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 857A530CF9C8FE4B45A34E89FCA0F087 /* JSONAPI.m */; }; 5578A5462712423AF62D9C43F1EDBFD7 /* JSONAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 857A530CF9C8FE4B45A34E89FCA0F087 /* JSONAPI.m */; };
5622A0E181DB0F7F988812D01901EB6C /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 897F1463EF1E3A93CE8302870E2CAAAD /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5622A0E181DB0F7F988812D01901EB6C /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 897F1463EF1E3A93CE8302870E2CAAAD /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -164,13 +163,14 @@ ...@@ -164,13 +163,14 @@
56F053A66D8172220697858FF3A98049 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C0504A755939477B3D7C57608F633F91 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 56F053A66D8172220697858FF3A98049 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C0504A755939477B3D7C57608F633F91 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
57166C8B1603FD29EDBEC90EDA20AB07 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EA34FCBA259BC9B892B63140EBC7A9 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 57166C8B1603FD29EDBEC90EDA20AB07 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EA34FCBA259BC9B892B63140EBC7A9 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
5742D68C0C11E32EAFAB4CE2D5644A05 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A829A7953981235426740FD4FF1B35A8 /* SDImageCacheConfig.m */; }; 5742D68C0C11E32EAFAB4CE2D5644A05 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A829A7953981235426740FD4FF1B35A8 /* SDImageCacheConfig.m */; };
576D27FFA051A4D69C731B1298413F58 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; 576D27FFA051A4D69C731B1298413F58 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
58013ACD82E032FC073197069A4EE8FE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 31680C610481B5B87FE8C7D659A51F2C /* MASConstraint.m */; }; 58013ACD82E032FC073197069A4EE8FE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 31680C610481B5B87FE8C7D659A51F2C /* MASConstraint.m */; };
59A4E24D3536899440DEA25037399493 /* SDImageHEICCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6998DC9934288C7C586F49AC7A0C02 /* SDImageHEICCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 59A4E24D3536899440DEA25037399493 /* SDImageHEICCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = FD6998DC9934288C7C586F49AC7A0C02 /* SDImageHEICCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
59C617E4775DCC3832D93110314E8E15 /* UIColor+HexString.m in Sources */ = {isa = PBXBuildFile; fileRef = D0FDFB1865FCE5F494AF8DFE697ED301 /* UIColor+HexString.m */; }; 59C617E4775DCC3832D93110314E8E15 /* UIColor+HexString.m in Sources */ = {isa = PBXBuildFile; fileRef = D0FDFB1865FCE5F494AF8DFE697ED301 /* UIColor+HexString.m */; };
59DE47750A12EC92BBCDB9AD6E4A5391 /* WMShareObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2497B691B70A6D30F8C5FC7490DC43A9 /* WMShareObject.m */; }; 59DE47750A12EC92BBCDB9AD6E4A5391 /* WMShareObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 2497B691B70A6D30F8C5FC7490DC43A9 /* WMShareObject.m */; };
59DF2B74C697CC8BE3016C1B67136A89 /* Pods-GMShareSDK_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E920BA8813E02956A7F480A8100176DF /* Pods-GMShareSDK_Tests-dummy.m */; }; 59DF2B74C697CC8BE3016C1B67136A89 /* Pods-GMShareSDK_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E920BA8813E02956A7F480A8100176DF /* Pods-GMShareSDK_Tests-dummy.m */; };
5A2F39E0AF5E6F1F0DBD69CC7C96D65F /* JSONValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA3C7E3937E7D1B65657B66AD2C056D /* JSONValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5A2F39E0AF5E6F1F0DBD69CC7C96D65F /* JSONValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA3C7E3937E7D1B65657B66AD2C056D /* JSONValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; };
5A858472F163A5F13D3B6B250E6A23D9 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F26493BE6C3CFB1C4542FBB9C12823A /* CoreGraphics.framework */; };
5B797FF489C352E67F1FF5D35BDEC7DB /* GMThirdPartyLoginHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6897C0618A329A858613ED6F096F8707 /* GMThirdPartyLoginHelper.m */; }; 5B797FF489C352E67F1FF5D35BDEC7DB /* GMThirdPartyLoginHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6897C0618A329A858613ED6F096F8707 /* GMThirdPartyLoginHelper.m */; };
5B859A27B1F1C42D6D5D7F3AE7EA95F6 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 351774E3669E8270146DD71DD119D353 /* SDImageGraphics.m */; }; 5B859A27B1F1C42D6D5D7F3AE7EA95F6 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 351774E3669E8270146DD71DD119D353 /* SDImageGraphics.m */; };
5C2520F7C2F7C6FA0393CBDE80CCCB3C /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C4A277B6272FBD727D652F56C13A20 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5C2520F7C2F7C6FA0393CBDE80CCCB3C /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C4A277B6272FBD727D652F56C13A20 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -188,7 +188,6 @@ ...@@ -188,7 +188,6 @@
6147DF6CE0A7395F0AF3322EA18B59FF /* Pods-GMShareSDK_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B559EF6F1D943B7B74A4ED85EABA21 /* Pods-GMShareSDK_Example-dummy.m */; }; 6147DF6CE0A7395F0AF3322EA18B59FF /* Pods-GMShareSDK_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B559EF6F1D943B7B74A4ED85EABA21 /* Pods-GMShareSDK_Example-dummy.m */; };
62B5478282C6BCD60A7DB4EE4CA91CF0 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8592CC9A89D64D73C47E8C028B1657BC /* View+MASAdditions.m */; }; 62B5478282C6BCD60A7DB4EE4CA91CF0 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8592CC9A89D64D73C47E8C028B1657BC /* View+MASAdditions.m */; };
63FC70113A948BE9E413F82A4B26BBD7 /* TMMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E908F8BC9207E402A274031129A333 /* TMMemoryCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 63FC70113A948BE9E413F82A4B26BBD7 /* TMMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D7E908F8BC9207E402A274031129A333 /* TMMemoryCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
650D99A605F9E47BA46F2546BB11736D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03EDB64E39288B1D313CCC17A2CCBF59 /* QuartzCore.framework */; };
663F534D51EFFFF006A17406BCF12BBF /* GMCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C651AFA80930CD9B628FD0CA62B52B7 /* GMCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; 663F534D51EFFFF006A17406BCF12BBF /* GMCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C651AFA80930CD9B628FD0CA62B52B7 /* GMCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
6795110EBAD8B3C0F9ED529B56777901 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4DABABC1C870EBECF739EDE0CA0699 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6795110EBAD8B3C0F9ED529B56777901 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F4DABABC1C870EBECF739EDE0CA0699 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
67ECA0EA4F46C9B8797620C2CDD5F7DA /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 919A9FF451418DDDC8DF4E4B7431D8EF /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 67ECA0EA4F46C9B8797620C2CDD5F7DA /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 919A9FF451418DDDC8DF4E4B7431D8EF /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -233,11 +232,12 @@ ...@@ -233,11 +232,12 @@
85747BFE6E93FA821461AB5B34E0DBEF /* NSFileManager+FolderSize.m in Sources */ = {isa = PBXBuildFile; fileRef = FA9F88F6BA30BC6B0387D67C745D80C4 /* NSFileManager+FolderSize.m */; }; 85747BFE6E93FA821461AB5B34E0DBEF /* NSFileManager+FolderSize.m in Sources */ = {isa = PBXBuildFile; fileRef = FA9F88F6BA30BC6B0387D67C745D80C4 /* NSFileManager+FolderSize.m */; };
8599414381E329958524AD2A52B77BE7 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A62D87CEB00C8A660DC8226C49623C6 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8599414381E329958524AD2A52B77BE7 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A62D87CEB00C8A660DC8226C49623C6 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; };
865EB1AE15D6B5C27957A8E49C750F87 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = C35710A126C2E8357797246C7652B298 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; 865EB1AE15D6B5C27957A8E49C750F87 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = C35710A126C2E8357797246C7652B298 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; };
8672FB42436891CA6F4E78638D20D0F5 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8A250FF648195B5FCAEDE0B643ACA61 /* MBProgressHUD-dummy.m */; };
868294533E524DEA5A743A1675405C6A /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 53404BADC30EE4CBD53FE330E04D47BB /* SDWebImageDownloaderDecryptor.m */; }; 868294533E524DEA5A743A1675405C6A /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 53404BADC30EE4CBD53FE330E04D47BB /* SDWebImageDownloaderDecryptor.m */; };
870FFD622F61D1277AC62B4DE383B4D5 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CACCB15539E1DCF565E78E762D69D82B /* SDAnimatedImageView+WebCache.m */; }; 870FFD622F61D1277AC62B4DE383B4D5 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CACCB15539E1DCF565E78E762D69D82B /* SDAnimatedImageView+WebCache.m */; };
87B4F5D55BB2591896CBA1C1400C8565 /* GMThirdPartyLoginHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F3CA764BCF8866BADA7AFB3E6B0BF7FF /* GMThirdPartyLoginHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; 87B4F5D55BB2591896CBA1C1400C8565 /* GMThirdPartyLoginHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F3CA764BCF8866BADA7AFB3E6B0BF7FF /* GMThirdPartyLoginHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
87D3125FC100C9994B322ED9F92D6F8E /* UIAlertController+gm.m in Sources */ = {isa = PBXBuildFile; fileRef = BB2053920D9E0B9FAA935CA5ED19C7BB /* UIAlertController+gm.m */; }; 87D3125FC100C9994B322ED9F92D6F8E /* UIAlertController+gm.m in Sources */ = {isa = PBXBuildFile; fileRef = BB2053920D9E0B9FAA935CA5ED19C7BB /* UIAlertController+gm.m */; };
88532BE44901AED6AFD328CB28BCA41F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1CA666EA3FCD70A99F6F172B39680C0 /* CoreGraphics.framework */; }; 88B5C23CAE2D8BECBA7BA8D04F0E4E35 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0758B3EE7937DA981FF1E40709E7BE /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
89683788975E049F910041D4F529A05B /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 889D08F333DE1C4CDAAFD8326F6B638B /* MASViewAttribute.m */; }; 89683788975E049F910041D4F529A05B /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 889D08F333DE1C4CDAAFD8326F6B638B /* MASViewAttribute.m */; };
89F30A6860A61BA1A8646ABB2FAFFA21 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EBA951E40E378F5599EF07F0C43C5A7 /* SDImageIOAnimatedCoder.m */; }; 89F30A6860A61BA1A8646ABB2FAFFA21 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EBA951E40E378F5599EF07F0C43C5A7 /* SDImageIOAnimatedCoder.m */; };
8A0670BBF2C08F46155A9A7F36062161 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5FE1BDAB6AE9CCC2385634679970B6 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A0670BBF2C08F46155A9A7F36062161 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5FE1BDAB6AE9CCC2385634679970B6 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
...@@ -246,7 +246,7 @@ ...@@ -246,7 +246,7 @@
8C4230B081547F99721BAB57D772AAB8 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F626389039C5109D93B071CF343A9D4 /* SDWebImageDefine.m */; }; 8C4230B081547F99721BAB57D772AAB8 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F626389039C5109D93B071CF343A9D4 /* SDWebImageDefine.m */; };
8C52C93A29A25C30B72EB3234D47B3DE /* JSONHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE84F5DCC625EEB5239C83815113B24 /* JSONHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8C52C93A29A25C30B72EB3234D47B3DE /* JSONHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE84F5DCC625EEB5239C83815113B24 /* JSONHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; };
8CC9B579FE7AE51942BE658F4ABA423D /* JSONHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = DC532EC6AC4CB0F7123ADF64017F6FBD /* JSONHTTPClient.m */; }; 8CC9B579FE7AE51942BE658F4ABA423D /* JSONHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = DC532EC6AC4CB0F7123ADF64017F6FBD /* JSONHTTPClient.m */; };
8CF962EB8E7AE419B0D4757011C0D22A /* GMCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4E8AE443F2026715324B872E5106B51 /* GMCache.framework */; }; 8CF962EB8E7AE419B0D4757011C0D22A /* GMCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EB58D3054EA0520E008152D439EF178 /* GMCache.framework */; };
8D1F2D9888A4BC1941C0FD4D69EB0186 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 14B934074EDCA6EF5DB1B6D9F9097FD3 /* SDImageIOCoder.m */; }; 8D1F2D9888A4BC1941C0FD4D69EB0186 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 14B934074EDCA6EF5DB1B6D9F9097FD3 /* SDImageIOCoder.m */; };
8D201A34FE2749CE44A00E6872CB2CBD /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A4F556CC1112097CC8E70261BFF50C /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8D201A34FE2749CE44A00E6872CB2CBD /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A4F556CC1112097CC8E70261BFF50C /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; };
8D8CFF69746FA52A01052B56D32E5DE7 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4FE485E9C1EB49221075478AB70052 /* SDWebImageManager.m */; }; 8D8CFF69746FA52A01052B56D32E5DE7 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4FE485E9C1EB49221075478AB70052 /* SDWebImageManager.m */; };
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
8DE13FDA1C4CCEDE887390C9D6C286CC /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B5CDADD372A82802999EB91B3B5665 /* SDImageLoader.m */; }; 8DE13FDA1C4CCEDE887390C9D6C286CC /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C3B5CDADD372A82802999EB91B3B5665 /* SDImageLoader.m */; };
8E3E4D1C655021CD5CEEB98F5B9F4823 /* GMCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 03434366E2DD82B2BA967ABA7B721C97 /* GMCache.m */; }; 8E3E4D1C655021CD5CEEB98F5B9F4823 /* GMCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 03434366E2DD82B2BA967ABA7B721C97 /* GMCache.m */; };
8F1A597AED56115BE5544BAFEEEB0274 /* PhobosCustomVisibleController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1923A020F0C1BF31B6B270F7D69E0A /* PhobosCustomVisibleController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8F1A597AED56115BE5544BAFEEEB0274 /* PhobosCustomVisibleController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C1923A020F0C1BF31B6B270F7D69E0A /* PhobosCustomVisibleController.h */; settings = {ATTRIBUTES = (Public, ); }; };
8F21D78CD98CBE5F4004FF6D93733781 /* GMKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BA61E612F5D8AC6577B205D3A0BA149 /* GMKit.framework */; }; 8F21D78CD98CBE5F4004FF6D93733781 /* GMKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C1EC7383B377107A5C60600507CD3D /* GMKit.framework */; };
8F5846596AE986D62C6A6509AC894C1C /* JSONModelError.m in Sources */ = {isa = PBXBuildFile; fileRef = 64FD5D465E77364D3C2BDBA894D831F6 /* JSONModelError.m */; }; 8F5846596AE986D62C6A6509AC894C1C /* JSONModelError.m in Sources */ = {isa = PBXBuildFile; fileRef = 64FD5D465E77364D3C2BDBA894D831F6 /* JSONModelError.m */; };
8F5A910723D13E909A4209923EBA5CF9 /* GMRateView.m in Sources */ = {isa = PBXBuildFile; fileRef = EA82724DCD0021FC161654B3893DE55B /* GMRateView.m */; }; 8F5A910723D13E909A4209923EBA5CF9 /* GMRateView.m in Sources */ = {isa = PBXBuildFile; fileRef = EA82724DCD0021FC161654B3893DE55B /* GMRateView.m */; };
8FC8FE6EAF9ED01221B45ABE02FCBEBF /* GMCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EB9436E9630F2B4F237673E62F24E6 /* GMCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8FC8FE6EAF9ED01221B45ABE02FCBEBF /* GMCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EB9436E9630F2B4F237673E62F24E6 /* GMCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -289,8 +289,8 @@ ...@@ -289,8 +289,8 @@
A752F99A837F6F7B7C58890C8E8CA59F /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = C90F836B0F6121E83BD1763AFFB25376 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; A752F99A837F6F7B7C58890C8E8CA59F /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = C90F836B0F6121E83BD1763AFFB25376 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; };
A7BBA42243F85CA588D7ED2BE4CA72D2 /* GMPreviewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FCDC84F87E4DA28028DDB3C5BE8DEEF2 /* GMPreviewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; A7BBA42243F85CA588D7ED2BE4CA72D2 /* GMPreviewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = FCDC84F87E4DA28028DDB3C5BE8DEEF2 /* GMPreviewCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
A8B623EF82DF13666AE73CE5E2613334 /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B5AB8FF931B49BD389ED5EAC2B4DC5 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; A8B623EF82DF13666AE73CE5E2613334 /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B5AB8FF931B49BD389ED5EAC2B4DC5 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
A8DF23C1FD98EF16C2E322303C6AE255 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; A8DF23C1FD98EF16C2E322303C6AE255 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
A91FD947F1AD648F611197F5F2338738 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A5DDFD519A2025B318498423AC30825 /* ImageIO.framework */; }; A91FD947F1AD648F611197F5F2338738 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A95276845F19156C6DFFBE2ADE99011B /* ImageIO.framework */; };
A96F2A971318CAAEA47A07005A02C0D8 /* GMKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 19AF1FFE03F3FC1C4A23785905BB032F /* GMKit-dummy.m */; }; A96F2A971318CAAEA47A07005A02C0D8 /* GMKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 19AF1FFE03F3FC1C4A23785905BB032F /* GMKit-dummy.m */; };
AB60B5B7DC8774A978B419CD153AC158 /* GMCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C627E3EDCEBD40006F05AD1B8C6665F /* GMCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; AB60B5B7DC8774A978B419CD153AC158 /* GMCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C627E3EDCEBD40006F05AD1B8C6665F /* GMCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; };
ABA84F2C6D42A1CC3911BF018C470622 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F10E8AF69714DD555650E368CC5F2BC3 /* SDMemoryCache.m */; }; ABA84F2C6D42A1CC3911BF018C470622 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F10E8AF69714DD555650E368CC5F2BC3 /* SDMemoryCache.m */; };
...@@ -310,6 +310,7 @@ ...@@ -310,6 +310,7 @@
B4863C9F88F3ABDC08F99D77633DEE0A /* NSDate+DateFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C80AF630F0FEE845DF499A0EB71372 /* NSDate+DateFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; B4863C9F88F3ABDC08F99D77633DEE0A /* NSDate+DateFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C80AF630F0FEE845DF499A0EB71372 /* NSDate+DateFormat.h */; settings = {ATTRIBUTES = (Public, ); }; };
B53D7CEDB99A9392A2C54D0D9E63A750 /* GMShareView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11A976018C4FDB07E274A32F4EBAA877 /* GMShareView.h */; settings = {ATTRIBUTES = (Public, ); }; }; B53D7CEDB99A9392A2C54D0D9E63A750 /* GMShareView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11A976018C4FDB07E274A32F4EBAA877 /* GMShareView.h */; settings = {ATTRIBUTES = (Public, ); }; };
B728BE0165612F82E023C52B880B34FE /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECE28F3EF079F1F4B24F28B6853DC4A /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; B728BE0165612F82E023C52B880B34FE /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECE28F3EF079F1F4B24F28B6853DC4A /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
B7C7807BD0D18C4CBF4BE73BE9FC043C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
B8A8E1A5D33807D157594D7A621D2596 /* GMAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1B7BD7C6081742C3459A986FAC326A /* GMAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; B8A8E1A5D33807D157594D7A621D2596 /* GMAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1B7BD7C6081742C3459A986FAC326A /* GMAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; };
B8B112D8198AC177B7D8608EF9E3FBCD /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 38ED9021D57B15C68ACB9A5536E6FD36 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; B8B112D8198AC177B7D8608EF9E3FBCD /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 38ED9021D57B15C68ACB9A5536E6FD36 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; };
B8CE3D85F1AF2A73714B641112C8EF55 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 412A015B3C5D453614CB4DBDA41C430F /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; B8CE3D85F1AF2A73714B641112C8EF55 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 412A015B3C5D453614CB4DBDA41C430F /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -328,7 +329,6 @@ ...@@ -328,7 +329,6 @@
C1622F9D11F22FB2BB89FC3CAF8CF8E4 /* GMShareBaseObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C734F2E3DD67F4E59986827932625A /* GMShareBaseObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; C1622F9D11F22FB2BB89FC3CAF8CF8E4 /* GMShareBaseObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C734F2E3DD67F4E59986827932625A /* GMShareBaseObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
C1AFA5185D8F01E68A2AF1832A92D6C2 /* GMButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9746DF90FBBED45842D1A9F57E7E54 /* GMButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; C1AFA5185D8F01E68A2AF1832A92D6C2 /* GMButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9746DF90FBBED45842D1A9F57E7E54 /* GMButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
C20315F340EB54865A8BFDDF6474473D /* GMHighlightLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = D5A275BBA2EE6EA94FB76139C5424535 /* GMHighlightLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; C20315F340EB54865A8BFDDF6474473D /* GMHighlightLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = D5A275BBA2EE6EA94FB76139C5424535 /* GMHighlightLabel.h */; settings = {ATTRIBUTES = (Public, ); }; };
C203AD229674E164A8873CCC387C209A /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A8A250FF648195B5FCAEDE0B643ACA61 /* MBProgressHUD-dummy.m */; };
C25A68272D0BE7BA538CB9A48AF5E663 /* GMLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6B2DB2B553D3028BF42E939E98387D /* GMLoadingView.m */; }; C25A68272D0BE7BA538CB9A48AF5E663 /* GMLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6B2DB2B553D3028BF42E939E98387D /* GMLoadingView.m */; };
C3183B6F068C7E73CF2D66FBD1F8AC0D /* GMFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ECCEF81A21B8D113FB298E5EA366B4A /* GMFont.m */; }; C3183B6F068C7E73CF2D66FBD1F8AC0D /* GMFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ECCEF81A21B8D113FB298E5EA366B4A /* GMFont.m */; };
C3CDD98D6C079428D7462AA732A53C90 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CB170650A17BA06ECC56C188045AE434 /* SDImageCodersManager.m */; }; C3CDD98D6C079428D7462AA732A53C90 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CB170650A17BA06ECC56C188045AE434 /* SDImageCodersManager.m */; };
...@@ -341,7 +341,7 @@ ...@@ -341,7 +341,7 @@
C8F871248CA33714AEE39B85B28AAF29 /* ALShareTopicCardView.h in Headers */ = {isa = PBXBuildFile; fileRef = 846DB39F885A5D8793DD8BD3D19EC2D1 /* ALShareTopicCardView.h */; settings = {ATTRIBUTES = (Public, ); }; }; C8F871248CA33714AEE39B85B28AAF29 /* ALShareTopicCardView.h in Headers */ = {isa = PBXBuildFile; fileRef = 846DB39F885A5D8793DD8BD3D19EC2D1 /* ALShareTopicCardView.h */; settings = {ATTRIBUTES = (Public, ); }; };
C902DB7F79DC0084F6E83A7A15C72425 /* NSURLRequest+IgnoreSSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AEA38AFE57B88FC08D4E3FE70360AB5 /* NSURLRequest+IgnoreSSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; C902DB7F79DC0084F6E83A7A15C72425 /* NSURLRequest+IgnoreSSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AEA38AFE57B88FC08D4E3FE70360AB5 /* NSURLRequest+IgnoreSSL.h */; settings = {ATTRIBUTES = (Public, ); }; };
C9B9F4187656C2A7D98B8F25F96681CD /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE639E751E8AAE494FE90721874A761 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; C9B9F4187656C2A7D98B8F25F96681CD /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE639E751E8AAE494FE90721874A761 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; };
C9FB9C8982E8CE3301D7337D0B879143 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9822C128BE340EBFCF3D2B8AE3820A9 /* MapKit.framework */; }; C9FB9C8982E8CE3301D7337D0B879143 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B444E38C08344297E19CFB1A20A60929 /* MapKit.framework */; };
CB024C8D51264C8B7EFB6C96F309976A /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 89655131592F299E8D42F74E520BDB21 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; CB024C8D51264C8B7EFB6C96F309976A /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 89655131592F299E8D42F74E520BDB21 /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; };
CCCAF78A336470B92D33BBB2865A3ACC /* GMTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7814511C74B062D705FAA68DB73035BF /* GMTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; CCCAF78A336470B92D33BBB2865A3ACC /* GMTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7814511C74B062D705FAA68DB73035BF /* GMTableView.h */; settings = {ATTRIBUTES = (Public, ); }; };
CD7388A4F0341AEFDE1403FC055FFB70 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5A3E5654DFDC1482088A343ED052BB /* MASConstraintMaker.m */; }; CD7388A4F0341AEFDE1403FC055FFB70 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5A3E5654DFDC1482088A343ED052BB /* MASConstraintMaker.m */; };
...@@ -389,11 +389,10 @@ ...@@ -389,11 +389,10 @@
E85B0B65AC135ECB6F58C3869D4C6BE3 /* TMCacheBackgroundTaskManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C5F5BD7D05B5AD0A0D46C0A9BD4FF5 /* TMCacheBackgroundTaskManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; E85B0B65AC135ECB6F58C3869D4C6BE3 /* TMCacheBackgroundTaskManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C5F5BD7D05B5AD0A0D46C0A9BD4FF5 /* TMCacheBackgroundTaskManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
E89E89BE55E85FFF195799CAF1D771AD /* Constant.m in Sources */ = {isa = PBXBuildFile; fileRef = 0857D261507081566F207B034C29CE83 /* Constant.m */; }; E89E89BE55E85FFF195799CAF1D771AD /* Constant.m in Sources */ = {isa = PBXBuildFile; fileRef = 0857D261507081566F207B034C29CE83 /* Constant.m */; };
E8B7F647DBC2F71839F8EC918D23FF73 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = DC7B57D46EC2EE125F92A72CFE88D638 /* UIImage+MultiFormat.m */; }; E8B7F647DBC2F71839F8EC918D23FF73 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = DC7B57D46EC2EE125F92A72CFE88D638 /* UIImage+MultiFormat.m */; };
E943A34194C2085A73A9AD0E4C8A5354 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0758B3EE7937DA981FF1E40709E7BE /* MBProgressHUD.m */; };
E9D4885D2BD53C9CE40954A168C36152 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F985CBA90A194D2BD580C2FC187F21 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; E9D4885D2BD53C9CE40954A168C36152 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F985CBA90A194D2BD580C2FC187F21 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
E9F17EB79FBC9415AB4D623C7D4E7144 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17171350F35DD70C16C6992617D5361A /* Masonry-dummy.m */; }; E9F17EB79FBC9415AB4D623C7D4E7144 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17171350F35DD70C16C6992617D5361A /* Masonry-dummy.m */; };
E9F824C8C00F67B7248E3D56A4054889 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 89579D25EDAFA0825685A23E2148D608 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; E9F824C8C00F67B7248E3D56A4054889 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 89579D25EDAFA0825685A23E2148D608 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; };
EA31B9D13B0725853930EE48BD20DF6E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; EA31B9D13B0725853930EE48BD20DF6E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
EAC5CAF0CDA9D34D1E2D79F792C7281D /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 6878C553F6326C451F843E663376011D /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; EAC5CAF0CDA9D34D1E2D79F792C7281D /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 6878C553F6326C451F843E663376011D /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; };
EAFF2B4246E173CE128C8EC97B7F4D39 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = BD3F03A858262A1A0D43B27777E905D0 /* UIImage+ExtendedCacheData.m */; }; EAFF2B4246E173CE128C8EC97B7F4D39 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = BD3F03A858262A1A0D43B27777E905D0 /* UIImage+ExtendedCacheData.m */; };
EBAC8AA4A337A1AC40776E62F2F23930 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A36CA4551E57FE3B045BFE6A2E2F14 /* SDAnimatedImageView.m */; }; EBAC8AA4A337A1AC40776E62F2F23930 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A36CA4551E57FE3B045BFE6A2E2F14 /* SDAnimatedImageView.m */; };
...@@ -414,7 +413,7 @@ ...@@ -414,7 +413,7 @@
F4777AC13CC084432E289CFA058C1EB1 /* GMShareSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D963E3657B268CDC3A0B1452CD8596BC /* GMShareSDK-dummy.m */; }; F4777AC13CC084432E289CFA058C1EB1 /* GMShareSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D963E3657B268CDC3A0B1452CD8596BC /* GMShareSDK-dummy.m */; };
F5C8E4644A8E228E018F39A11211F64B /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEEBE039FB873AE49A4868EB53A466A /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; F5C8E4644A8E228E018F39A11211F64B /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEEBE039FB873AE49A4868EB53A466A /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; };
F827112366658D0B90A01EF3E11C067C /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 93502715EF24F6770EF96472230F3117 /* SDWebImageDownloaderConfig.m */; }; F827112366658D0B90A01EF3E11C067C /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 93502715EF24F6770EF96472230F3117 /* SDWebImageDownloaderConfig.m */; };
F86ED472EA4D41185D7EA7DBE99969DE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; F86ED472EA4D41185D7EA7DBE99969DE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
F8E555F9645E1B8BE638822BC2FCD51C /* TMDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CB13738504EB4121CFDFD71F7FB5F14A /* TMDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; F8E555F9645E1B8BE638822BC2FCD51C /* TMDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CB13738504EB4121CFDFD71F7FB5F14A /* TMDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
FA56F0E266C10CF59D5242B2C7A6DA88 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 67E497E0614B557742A0EE58BE977D7C /* NSButton+WebCache.m */; }; FA56F0E266C10CF59D5242B2C7A6DA88 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 67E497E0614B557742A0EE58BE977D7C /* NSButton+WebCache.m */; };
FA5F209980DF31CCC4E77CABD5A4CF84 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A6CB2DBD7783B605CEAC90E301607F4 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; FA5F209980DF31CCC4E77CABD5A4CF84 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A6CB2DBD7783B605CEAC90E301607F4 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -425,7 +424,7 @@ ...@@ -425,7 +424,7 @@
FC3A7E14D992FEFD9D7F383F64A3D1FB /* WYSegmentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8699B8FD591B491FDCC58A2F49A16FAF /* WYSegmentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; FC3A7E14D992FEFD9D7F383F64A3D1FB /* WYSegmentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8699B8FD591B491FDCC58A2F49A16FAF /* WYSegmentView.h */; settings = {ATTRIBUTES = (Public, ); }; };
FC75FFF6118B11C400FBDF62BA118BB4 /* GMTopSearchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E88E3CEFC637A6AF3D50171C806353 /* GMTopSearchButton.m */; }; FC75FFF6118B11C400FBDF62BA118BB4 /* GMTopSearchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E88E3CEFC637A6AF3D50171C806353 /* GMTopSearchButton.m */; };
FCBC328624CC0D344AF5943F6A03E005 /* JSONValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 231CF68480305F9F8DC6006B3DC03169 /* JSONValueTransformer.m */; }; FCBC328624CC0D344AF5943F6A03E005 /* JSONValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 231CF68480305F9F8DC6006B3DC03169 /* JSONValueTransformer.m */; };
FD338CC664CDE9711AFD0049FA1DBDC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */; }; FD338CC664CDE9711AFD0049FA1DBDC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D18413F648F2F15F070795A92476C563 /* Foundation.framework */; };
FD4A319A00F247A259715155937C1A13 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B082AE62C52AA398CABC8666792F9F /* SDWebImagePrefetcher.m */; }; FD4A319A00F247A259715155937C1A13 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B082AE62C52AA398CABC8666792F9F /* SDWebImagePrefetcher.m */; };
FE40DD46B95DBAD25FCFF3A3B6127C41 /* NSObject+KeyboardAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE885E166C050E2017CE092A949B457 /* NSObject+KeyboardAnimation.m */; }; FE40DD46B95DBAD25FCFF3A3B6127C41 /* NSObject+KeyboardAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE885E166C050E2017CE092A949B457 /* NSObject+KeyboardAnimation.m */; };
FF35D24F6AA39554F1D840A04CD0A7F5 /* GMView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6F2E23B581C7168056A758A543E1A4 /* GMView.h */; settings = {ATTRIBUTES = (Public, ); }; }; FF35D24F6AA39554F1D840A04CD0A7F5 /* GMView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6F2E23B581C7168056A758A543E1A4 /* GMView.h */; settings = {ATTRIBUTES = (Public, ); }; };
...@@ -655,16 +654,12 @@ ...@@ -655,16 +654,12 @@
02E8B9FA96F62771153B2467AFA45FBE /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = "<group>"; }; 02E8B9FA96F62771153B2467AFA45FBE /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = "<group>"; };
03434366E2DD82B2BA967ABA7B721C97 /* GMCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMCache.m; path = GMCache/Classes/GMCache.m; sourceTree = "<group>"; }; 03434366E2DD82B2BA967ABA7B721C97 /* GMCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMCache.m; path = GMCache/Classes/GMCache.m; sourceTree = "<group>"; };
0380DBC3DD108D342E625AFE82FC08BF /* GMFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GMFoundation-dummy.m"; sourceTree = "<group>"; }; 0380DBC3DD108D342E625AFE82FC08BF /* GMFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GMFoundation-dummy.m"; sourceTree = "<group>"; };
03EDB64E39288B1D313CCC17A2CCBF59 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
048828D9BDEF6A7FC80F6912F0ED1293 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = "<group>"; }; 048828D9BDEF6A7FC80F6912F0ED1293 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = "<group>"; };
04AADB2DBEBB4D39E03000EAD541AA02 /* Masonry.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.xcconfig; sourceTree = "<group>"; }; 04AADB2DBEBB4D39E03000EAD541AA02 /* Masonry.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.xcconfig; sourceTree = "<group>"; };
04B4362117A211E5E04359A180696C2A /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = "<group>"; }; 04B4362117A211E5E04359A180696C2A /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = "<group>"; };
075862B34835ABE9A764E2614D89D838 /* TMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
082252D19341235D245E37DFC97C57A2 /* JSONKeyMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONKeyMapper.m; path = JSONModel/JSONModelTransformations/JSONKeyMapper.m; sourceTree = "<group>"; }; 082252D19341235D245E37DFC97C57A2 /* JSONKeyMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONKeyMapper.m; path = JSONModel/JSONModelTransformations/JSONKeyMapper.m; sourceTree = "<group>"; };
0857D261507081566F207B034C29CE83 /* Constant.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Constant.m; path = Pod/Classes/Constant/Constant.m; sourceTree = "<group>"; }; 0857D261507081566F207B034C29CE83 /* Constant.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Constant.m; path = Pod/Classes/Constant/Constant.m; sourceTree = "<group>"; };
08C61BED593297452EBFBE76C0809359 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = "<group>"; }; 08C61BED593297452EBFBE76C0809359 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = "<group>"; };
0904210056341D1D1487B57F4F076CD1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
0A8FD7F69597452F61FAE35599930BBB /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; };
0AD0BF2E8AF6BA87820844A6ACFDADA7 /* NSBezierPath+RoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+RoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+RoundedCorners.m"; sourceTree = "<group>"; }; 0AD0BF2E8AF6BA87820844A6ACFDADA7 /* NSBezierPath+RoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+RoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+RoundedCorners.m"; sourceTree = "<group>"; };
0AEA38AFE57B88FC08D4E3FE70360AB5 /* NSURLRequest+IgnoreSSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSURLRequest+IgnoreSSL.h"; sourceTree = "<group>"; }; 0AEA38AFE57B88FC08D4E3FE70360AB5 /* NSURLRequest+IgnoreSSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSURLRequest+IgnoreSSL.h"; sourceTree = "<group>"; };
0BFDCD74514B77C44C9827F8846034AB /* GMKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMKit-umbrella.h"; sourceTree = "<group>"; }; 0BFDCD74514B77C44C9827F8846034AB /* GMKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMKit-umbrella.h"; sourceTree = "<group>"; };
...@@ -673,6 +668,7 @@ ...@@ -673,6 +668,7 @@
0DA631236294275C5069398DA3E2FE62 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; }; 0DA631236294275C5069398DA3E2FE62 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = "<group>"; };
0E50E00E4421321D57AF47786A4A959D /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = "<group>"; }; 0E50E00E4421321D57AF47786A4A959D /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = "<group>"; };
0E56519B2EF7DE41F90F45BC496EB80C /* TMCache-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TMCache-prefix.pch"; sourceTree = "<group>"; }; 0E56519B2EF7DE41F90F45BC496EB80C /* TMCache-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TMCache-prefix.pch"; sourceTree = "<group>"; };
0EB58D3054EA0520E008152D439EF178 /* GMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0ECCEF81A21B8D113FB298E5EA366B4A /* GMFont.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMFont.m; path = Pod/Classes/Kit/GMFont.m; sourceTree = "<group>"; }; 0ECCEF81A21B8D113FB298E5EA366B4A /* GMFont.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMFont.m; path = Pod/Classes/Kit/GMFont.m; sourceTree = "<group>"; };
0EFE1CCDF3AA280000E13B686568B626 /* GMImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMImageView.h; path = Pod/Classes/Kit/GMImageView.h; sourceTree = "<group>"; }; 0EFE1CCDF3AA280000E13B686568B626 /* GMImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMImageView.h; path = Pod/Classes/Kit/GMImageView.h; sourceTree = "<group>"; };
0F3915C5FE957325AD5A95AD7BB62E31 /* GMHighlightLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMHighlightLabel.m; path = Pod/Classes/Kit/GMHighlightLabel.m; sourceTree = "<group>"; }; 0F3915C5FE957325AD5A95AD7BB62E31 /* GMHighlightLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMHighlightLabel.m; path = Pod/Classes/Kit/GMHighlightLabel.m; sourceTree = "<group>"; };
...@@ -711,6 +707,7 @@ ...@@ -711,6 +707,7 @@
1DB4A7A9B250C9179D6C1A7CD01BD21C /* GMTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMTableViewCell.h; path = Pod/Classes/Kit/GMTableViewCell.h; sourceTree = "<group>"; }; 1DB4A7A9B250C9179D6C1A7CD01BD21C /* GMTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMTableViewCell.h; path = Pod/Classes/Kit/GMTableViewCell.h; sourceTree = "<group>"; };
1ECE28F3EF079F1F4B24F28B6853DC4A /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = "<group>"; }; 1ECE28F3EF079F1F4B24F28B6853DC4A /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = "<group>"; };
1ECF70E1309FAED59A40169743B92261 /* WeiboSDK.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.xcconfig; sourceTree = "<group>"; }; 1ECF70E1309FAED59A40169743B92261 /* WeiboSDK.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WeiboSDK.xcconfig; sourceTree = "<group>"; };
1F26493BE6C3CFB1C4542FBB9C12823A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
1FBD0C03169D1997399E1284BAB8DBBF /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; }; 1FBD0C03169D1997399E1284BAB8DBBF /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; };
1FFE8C51BA42834DF49776742A0AE0D1 /* UIColor+GMTheme.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+GMTheme.h"; path = "Pod/Classes/Color/UIColor+GMTheme.h"; sourceTree = "<group>"; }; 1FFE8C51BA42834DF49776742A0AE0D1 /* UIColor+GMTheme.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+GMTheme.h"; path = "Pod/Classes/Color/UIColor+GMTheme.h"; sourceTree = "<group>"; };
1FFED36A657123030ABB700256D73F15 /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry.framework; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1FFED36A657123030ABB700256D73F15 /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry.framework; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
...@@ -764,7 +761,6 @@ ...@@ -764,7 +761,6 @@
36EA3FC1C136B600DF85B5F55574758F /* JSONModelLib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelLib.h; path = JSONModel/JSONModelLib.h; sourceTree = "<group>"; }; 36EA3FC1C136B600DF85B5F55574758F /* JSONModelLib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelLib.h; path = JSONModel/JSONModelLib.h; sourceTree = "<group>"; };
38ED9021D57B15C68ACB9A5536E6FD36 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = "<group>"; }; 38ED9021D57B15C68ACB9A5536E6FD36 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = "<group>"; };
39767185A3224097DFBC63F03BB35994 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = "<group>"; }; 39767185A3224097DFBC63F03BB35994 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = "<group>"; };
3A5DDFD519A2025B318498423AC30825 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; };
3A6CB2DBD7783B605CEAC90E301607F4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = "<group>"; }; 3A6CB2DBD7783B605CEAC90E301607F4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = "<group>"; };
3AA4582CFD1D1A7E28C3EEF0D54AED21 /* NSDate+DateFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+DateFormat.m"; path = "GMFoundation/Classes/NSDate+DateFormat.m"; sourceTree = "<group>"; }; 3AA4582CFD1D1A7E28C3EEF0D54AED21 /* NSDate+DateFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+DateFormat.m"; path = "GMFoundation/Classes/NSDate+DateFormat.m"; sourceTree = "<group>"; };
3AE559B39159BA6EAECFB7E6C8FE4FFF /* GMShareSDK.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GMShareSDK.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 3AE559B39159BA6EAECFB7E6C8FE4FFF /* GMShareSDK.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GMShareSDK.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
...@@ -819,6 +815,7 @@ ...@@ -819,6 +815,7 @@
5C7BCC4587B2EE6D418768F265D403E9 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = "<group>"; }; 5C7BCC4587B2EE6D418768F265D403E9 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = "<group>"; };
5D649D19B877A7775F04DCE54DDE41B8 /* GMKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMKit.xcconfig; sourceTree = "<group>"; }; 5D649D19B877A7775F04DCE54DDE41B8 /* GMKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMKit.xcconfig; sourceTree = "<group>"; };
5DD55C1A17AE23B1B15189B25CB561AC /* Pods-GMShareSDK_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GMShareSDK_Example-resources.sh"; sourceTree = "<group>"; }; 5DD55C1A17AE23B1B15189B25CB561AC /* Pods-GMShareSDK_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GMShareSDK_Example-resources.sh"; sourceTree = "<group>"; };
5F3551192ADB090E6E61E2539F1C0337 /* TMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5F626389039C5109D93B071CF343A9D4 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = "<group>"; }; 5F626389039C5109D93B071CF343A9D4 /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = "<group>"; };
5FF031B184DA661F30B60E3DEF84822B /* GMKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GMKit.modulemap; sourceTree = "<group>"; }; 5FF031B184DA661F30B60E3DEF84822B /* GMKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GMKit.modulemap; sourceTree = "<group>"; };
6068A36F08989D18C1C02170BB52FF90 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = "<group>"; }; 6068A36F08989D18C1C02170BB52FF90 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = "<group>"; };
...@@ -854,9 +851,8 @@ ...@@ -854,9 +851,8 @@
7814511C74B062D705FAA68DB73035BF /* GMTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMTableView.h; path = Pod/Classes/Kit/GMTableView.h; sourceTree = "<group>"; }; 7814511C74B062D705FAA68DB73035BF /* GMTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMTableView.h; path = Pod/Classes/Kit/GMTableView.h; sourceTree = "<group>"; };
79F04CAE4D6A7A06B88868BAEDA95BAF /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = "<group>"; }; 79F04CAE4D6A7A06B88868BAEDA95BAF /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = "<group>"; };
7A5A3E5654DFDC1482088A343ED052BB /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = "<group>"; }; 7A5A3E5654DFDC1482088A343ED052BB /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = "<group>"; };
7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
7BA61E612F5D8AC6577B205D3A0BA149 /* GMKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GMKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7BF4E07DD380DD52F7047C05C9B2959A /* GMShareSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GMShareSDK.h; sourceTree = "<group>"; }; 7BF4E07DD380DD52F7047C05C9B2959A /* GMShareSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GMShareSDK.h; sourceTree = "<group>"; };
7C7ADE775CBA206408B6857C67FD0757 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
7D1150320369F9EC9BA074227BEFEAC9 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = "<group>"; }; 7D1150320369F9EC9BA074227BEFEAC9 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = "<group>"; };
7FF1354E67053709AD9704B52DB12AF9 /* TMCache.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TMCache.xcconfig; sourceTree = "<group>"; }; 7FF1354E67053709AD9704B52DB12AF9 /* TMCache.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TMCache.xcconfig; sourceTree = "<group>"; };
80B8BF85E48D7BA575B21B11EB0C63F3 /* GMView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMView.m; path = Pod/Classes/Kit/GMView.m; sourceTree = "<group>"; }; 80B8BF85E48D7BA575B21B11EB0C63F3 /* GMView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMView.m; path = Pod/Classes/Kit/GMView.m; sourceTree = "<group>"; };
...@@ -867,9 +863,11 @@ ...@@ -867,9 +863,11 @@
846DB39F885A5D8793DD8BD3D19EC2D1 /* ALShareTopicCardView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ALShareTopicCardView.h; sourceTree = "<group>"; }; 846DB39F885A5D8793DD8BD3D19EC2D1 /* ALShareTopicCardView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ALShareTopicCardView.h; sourceTree = "<group>"; };
857A530CF9C8FE4B45A34E89FCA0F087 /* JSONAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONAPI.m; path = JSONModel/JSONModelNetworking/JSONAPI.m; sourceTree = "<group>"; }; 857A530CF9C8FE4B45A34E89FCA0F087 /* JSONAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONAPI.m; path = JSONModel/JSONModelNetworking/JSONAPI.m; sourceTree = "<group>"; };
8592CC9A89D64D73C47E8C028B1657BC /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = "<group>"; }; 8592CC9A89D64D73C47E8C028B1657BC /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = "<group>"; };
85A103797FDC3D913E942C299211DA8B /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
85C734F2E3DD67F4E59986827932625A /* GMShareBaseObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GMShareBaseObject.h; sourceTree = "<group>"; }; 85C734F2E3DD67F4E59986827932625A /* GMShareBaseObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GMShareBaseObject.h; sourceTree = "<group>"; };
86264C3E9D980DE9B5F40A474E20876D /* PhobosConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PhobosConfig.h; path = GMPhobos/Classes/PhobosConfig.h; sourceTree = "<group>"; }; 86264C3E9D980DE9B5F40A474E20876D /* PhobosConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PhobosConfig.h; path = GMPhobos/Classes/PhobosConfig.h; sourceTree = "<group>"; };
8699B8FD591B491FDCC58A2F49A16FAF /* WYSegmentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WYSegmentView.h; path = Pod/Classes/Kit/WYSegmentView.h; sourceTree = "<group>"; }; 8699B8FD591B491FDCC58A2F49A16FAF /* WYSegmentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WYSegmentView.h; path = Pod/Classes/Kit/WYSegmentView.h; sourceTree = "<group>"; };
86A3B519CFE97F86476384D027F3D6E2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; };
872736B77843B27685AE52DDDF21E304 /* GMMarkStarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMMarkStarView.h; path = Pod/Classes/Kit/GMMarkStarView.h; sourceTree = "<group>"; }; 872736B77843B27685AE52DDDF21E304 /* GMMarkStarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMMarkStarView.h; path = Pod/Classes/Kit/GMMarkStarView.h; sourceTree = "<group>"; };
8811B6AA6551246D54AFBA5A9C41A4BB /* JSONModelError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelError.h; path = JSONModel/JSONModel/JSONModelError.h; sourceTree = "<group>"; }; 8811B6AA6551246D54AFBA5A9C41A4BB /* JSONModelError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelError.h; path = JSONModel/JSONModel/JSONModelError.h; sourceTree = "<group>"; };
886DBBC6C55E0A15470C33A4B84ACB7E /* GMShareSDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GMShareSDK-Info.plist"; sourceTree = "<group>"; }; 886DBBC6C55E0A15470C33A4B84ACB7E /* GMShareSDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GMShareSDK-Info.plist"; sourceTree = "<group>"; };
...@@ -887,7 +885,6 @@ ...@@ -887,7 +885,6 @@
8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8B9E43E4A0631BF5DED6EDE880842D11 /* UIView+SafeArea.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SafeArea.h"; path = "Pod/Classes/Category/UIView+SafeArea.h"; sourceTree = "<group>"; }; 8B9E43E4A0631BF5DED6EDE880842D11 /* UIView+SafeArea.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SafeArea.h"; path = "Pod/Classes/Category/UIView+SafeArea.h"; sourceTree = "<group>"; };
8BA8E92CB231528E445EECC20B5B9D28 /* WXApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApi.h; path = WeChatSDK1.8.6.1/WXApi.h; sourceTree = "<group>"; }; 8BA8E92CB231528E445EECC20B5B9D28 /* WXApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApi.h; path = WeChatSDK1.8.6.1/WXApi.h; sourceTree = "<group>"; };
8CC374A56E6CB5C51FF247FE24218640 /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8D6A30004F78FA393AAAE84DD4CA3235 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = "<group>"; }; 8D6A30004F78FA393AAAE84DD4CA3235 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = "<group>"; };
8E87DD8999283E13BAA6945578223EEC /* GMCache.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GMCache.modulemap; sourceTree = "<group>"; }; 8E87DD8999283E13BAA6945578223EEC /* GMCache.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GMCache.modulemap; sourceTree = "<group>"; };
8EBA951E40E378F5599EF07F0C43C5A7 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = "<group>"; }; 8EBA951E40E378F5599EF07F0C43C5A7 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = "<group>"; };
...@@ -934,12 +931,11 @@ ...@@ -934,12 +931,11 @@
A829A7953981235426740FD4FF1B35A8 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = "<group>"; }; A829A7953981235426740FD4FF1B35A8 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = "<group>"; };
A82A07A0240A5EC675050860970E42EB /* GMFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMFoundation.xcconfig; sourceTree = "<group>"; }; A82A07A0240A5EC675050860970E42EB /* GMFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMFoundation.xcconfig; sourceTree = "<group>"; };
A8A250FF648195B5FCAEDE0B643ACA61 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = "<group>"; }; A8A250FF648195B5FCAEDE0B643ACA61 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = "<group>"; };
A9822C128BE340EBFCF3D2B8AE3820A9 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; }; A95276845F19156C6DFFBE2ADE99011B /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; };
AAE84F5DCC625EEB5239C83815113B24 /* JSONHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONHTTPClient.h; path = JSONModel/JSONModelNetworking/JSONHTTPClient.h; sourceTree = "<group>"; }; AAE84F5DCC625EEB5239C83815113B24 /* JSONHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONHTTPClient.h; path = JSONModel/JSONModelNetworking/JSONHTTPClient.h; sourceTree = "<group>"; };
AC14F2D131A3D7A9BC5B9D1340B33363 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = "<group>"; }; AC14F2D131A3D7A9BC5B9D1340B33363 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = "<group>"; };
AC2A87A30CE638F6DF5579D1EF858ED3 /* UIResponder+PhobosPV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIResponder+PhobosPV.h"; path = "GMPhobos/Classes/UIResponder+PhobosPV.h"; sourceTree = "<group>"; }; AC2A87A30CE638F6DF5579D1EF858ED3 /* UIResponder+PhobosPV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIResponder+PhobosPV.h"; path = "GMPhobos/Classes/UIResponder+PhobosPV.h"; sourceTree = "<group>"; };
AC82CF115D3B41DEDD879598DEDA1FBD /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; }; AC82CF115D3B41DEDD879598DEDA1FBD /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; };
ACB7F284D1DFAB9AC1B364EAAD3D883E /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
AD5F57A65D91D6EA1346BF40B8B99A0D /* GMLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMLabel.m; path = Pod/Classes/Kit/GMLabel.m; sourceTree = "<group>"; }; AD5F57A65D91D6EA1346BF40B8B99A0D /* GMLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMLabel.m; path = Pod/Classes/Kit/GMLabel.m; sourceTree = "<group>"; };
AE5C834AF6F80B5A7A70E730BFEEC53C /* DouyinOpenSDKApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DouyinOpenSDKApi.h; path = DouyinOpenSDK/Headers/DouyinOpenSDKApi.h; sourceTree = "<group>"; }; AE5C834AF6F80B5A7A70E730BFEEC53C /* DouyinOpenSDKApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DouyinOpenSDKApi.h; path = DouyinOpenSDK/Headers/DouyinOpenSDKApi.h; sourceTree = "<group>"; };
AF76362CBFD3ADA8C28B6C87D388DC3E /* GMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GMCache.framework; path = GMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AF76362CBFD3ADA8C28B6C87D388DC3E /* GMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GMCache.framework; path = GMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
...@@ -949,8 +945,10 @@ ...@@ -949,8 +945,10 @@
B247F2769BF979E53ED46D51A44B9CDD /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = "<group>"; }; B247F2769BF979E53ED46D51A44B9CDD /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = "<group>"; };
B3111BFDDD18947334597CCBF77A54D9 /* TMCache.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TMCache.modulemap; sourceTree = "<group>"; }; B3111BFDDD18947334597CCBF77A54D9 /* TMCache.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TMCache.modulemap; sourceTree = "<group>"; };
B38DF2ECA782C1C3C5C5A66DEA4F84DA /* GMTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMTextField.m; path = Pod/Classes/Kit/GMTextField.m; sourceTree = "<group>"; }; B38DF2ECA782C1C3C5C5A66DEA4F84DA /* GMTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMTextField.m; path = Pod/Classes/Kit/GMTextField.m; sourceTree = "<group>"; };
B3C1EC7383B377107A5C60600507CD3D /* GMKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GMKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B3F60F23B19B8967BB86787FE2AA7E94 /* Phobos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Phobos.h; path = GMPhobos/Classes/Phobos.h; sourceTree = "<group>"; }; B3F60F23B19B8967BB86787FE2AA7E94 /* Phobos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Phobos.h; path = GMPhobos/Classes/Phobos.h; sourceTree = "<group>"; };
B43F5FBB47748EFC09EE81A3819102D1 /* Pods-GMShareSDK_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GMShareSDK_Tests.debug.xcconfig"; sourceTree = "<group>"; }; B43F5FBB47748EFC09EE81A3819102D1 /* Pods-GMShareSDK_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GMShareSDK_Tests.debug.xcconfig"; sourceTree = "<group>"; };
B444E38C08344297E19CFB1A20A60929 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; };
B444E967BAF33414EA6F785D6027C12D /* GMCache.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMCache.xcconfig; sourceTree = "<group>"; }; B444E967BAF33414EA6F785D6027C12D /* GMCache.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GMCache.xcconfig; sourceTree = "<group>"; };
B5D8EB87E1A1AC6D19091AE5B049ECA2 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = "<group>"; }; B5D8EB87E1A1AC6D19091AE5B049ECA2 /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = "<group>"; };
B71328CBB3C6088AB9B5DCCB058DF0E0 /* GMJSONModel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GMJSONModel-Info.plist"; sourceTree = "<group>"; }; B71328CBB3C6088AB9B5DCCB058DF0E0 /* GMJSONModel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GMJSONModel-Info.plist"; sourceTree = "<group>"; };
...@@ -1012,6 +1010,7 @@ ...@@ -1012,6 +1010,7 @@
D0E0CC85B34CBBC145DB1B1ACBA517B4 /* GMPopupBgView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMPopupBgView.m; path = Pod/Classes/Kit/GMPopupBgView.m; sourceTree = "<group>"; }; D0E0CC85B34CBBC145DB1B1ACBA517B4 /* GMPopupBgView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMPopupBgView.m; path = Pod/Classes/Kit/GMPopupBgView.m; sourceTree = "<group>"; };
D0FDFB1865FCE5F494AF8DFE697ED301 /* UIColor+HexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+HexString.m"; path = "SDWebImage/Private/UIColor+HexString.m"; sourceTree = "<group>"; }; D0FDFB1865FCE5F494AF8DFE697ED301 /* UIColor+HexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+HexString.m"; path = "SDWebImage/Private/UIColor+HexString.m"; sourceTree = "<group>"; };
D13602FBE9A26AD38A049D0099699BE6 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = "<group>"; }; D13602FBE9A26AD38A049D0099699BE6 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = "<group>"; };
D18413F648F2F15F070795A92476C563 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
D2DD70F9676F3B67F455A618AA0C30C3 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = "<group>"; }; D2DD70F9676F3B67F455A618AA0C30C3 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = "<group>"; };
D4328CB37276418B39D1D295916349C7 /* GMPlaceholderTextContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMPlaceholderTextContainer.m; path = Pod/Classes/Kit/GMPlaceholderTextContainer.m; sourceTree = "<group>"; }; D4328CB37276418B39D1D295916349C7 /* GMPlaceholderTextContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMPlaceholderTextContainer.m; path = Pod/Classes/Kit/GMPlaceholderTextContainer.m; sourceTree = "<group>"; };
D585E0AF97C193D14351360B498F80C6 /* GMCache-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMCache-prefix.pch"; sourceTree = "<group>"; }; D585E0AF97C193D14351360B498F80C6 /* GMCache-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMCache-prefix.pch"; sourceTree = "<group>"; };
...@@ -1045,7 +1044,6 @@ ...@@ -1045,7 +1044,6 @@
DF40B416447ED512581CFA208617E13E /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = "<group>"; }; DF40B416447ED512581CFA208617E13E /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = "<group>"; };
E0E371D6BEFD0F7A3EB198B90BC23B6D /* UILabel+CopyExtern.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+CopyExtern.m"; path = "Pod/Classes/Category/UILabel+CopyExtern.m"; sourceTree = "<group>"; }; E0E371D6BEFD0F7A3EB198B90BC23B6D /* UILabel+CopyExtern.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+CopyExtern.m"; path = "Pod/Classes/Category/UILabel+CopyExtern.m"; sourceTree = "<group>"; };
E0F345A47D543E9FF5D34AB12099706B /* GMShareTopView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMShareTopView.m; sourceTree = "<group>"; }; E0F345A47D543E9FF5D34AB12099706B /* GMShareTopView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMShareTopView.m; sourceTree = "<group>"; };
E1CA666EA3FCD70A99F6F172B39680C0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
E1EAE7484E09DFB26E1935F253767E03 /* GMAnnotation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMAnnotation.m; path = Pod/Classes/Kit/GMAnnotation.m; sourceTree = "<group>"; }; E1EAE7484E09DFB26E1935F253767E03 /* GMAnnotation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GMAnnotation.m; path = Pod/Classes/Kit/GMAnnotation.m; sourceTree = "<group>"; };
E29488EB786C50EB848F19AF70DAACFB /* JSONKeyMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONKeyMapper.h; path = JSONModel/JSONModelTransformations/JSONKeyMapper.h; sourceTree = "<group>"; }; E29488EB786C50EB848F19AF70DAACFB /* JSONKeyMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONKeyMapper.h; path = JSONModel/JSONModelTransformations/JSONKeyMapper.h; sourceTree = "<group>"; };
E2C5F5BD7D05B5AD0A0D46C0A9BD4FF5 /* TMCacheBackgroundTaskManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TMCacheBackgroundTaskManager.h; path = TMCache/TMCacheBackgroundTaskManager.h; sourceTree = "<group>"; }; E2C5F5BD7D05B5AD0A0D46C0A9BD4FF5 /* TMCacheBackgroundTaskManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TMCacheBackgroundTaskManager.h; path = TMCache/TMCacheBackgroundTaskManager.h; sourceTree = "<group>"; };
...@@ -1091,7 +1089,7 @@ ...@@ -1091,7 +1089,7 @@
F42DDF038191B22E55CD5A530FFB96E0 /* GMKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMKit-prefix.pch"; sourceTree = "<group>"; }; F42DDF038191B22E55CD5A530FFB96E0 /* GMKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GMKit-prefix.pch"; sourceTree = "<group>"; };
F449AE8AB02FA84AF27B6C78B47EEB96 /* GMShareVideoAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMShareVideoAlertView.m; sourceTree = "<group>"; }; F449AE8AB02FA84AF27B6C78B47EEB96 /* GMShareVideoAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMShareVideoAlertView.m; sourceTree = "<group>"; };
F4623582F9DD47010A241CDED56C4E3A /* GMDiaryShareView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMDiaryShareView.m; sourceTree = "<group>"; }; F4623582F9DD47010A241CDED56C4E3A /* GMDiaryShareView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GMDiaryShareView.m; sourceTree = "<group>"; };
F4E8AE443F2026715324B872E5106B51 /* GMCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GMCache.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F4B7F18F4FD45A5C6A0BF3D04C2215FB /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F4EEF706E84FD53AAAA9061B24205123 /* WMShareObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WMShareObject.h; sourceTree = "<group>"; }; F4EEF706E84FD53AAAA9061B24205123 /* WMShareObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WMShareObject.h; sourceTree = "<group>"; };
F5E80F92689528F3EAD4100E5186FDE7 /* Pods-GMShareSDK_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GMShareSDK_Tests-umbrella.h"; sourceTree = "<group>"; }; F5E80F92689528F3EAD4100E5186FDE7 /* Pods-GMShareSDK_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GMShareSDK_Tests-umbrella.h"; sourceTree = "<group>"; };
F614E3A6C7B1771EF0087AB509C0E663 /* GMEmptyView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMEmptyView.h; path = Pod/Classes/Kit/GMEmptyView.h; sourceTree = "<group>"; }; F614E3A6C7B1771EF0087AB509C0E663 /* GMEmptyView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMEmptyView.h; path = Pod/Classes/Kit/GMEmptyView.h; sourceTree = "<group>"; };
...@@ -1183,16 +1181,6 @@ ...@@ -1183,16 +1181,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
E1AE31498452F799683AE14A9217361B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
88532BE44901AED6AFD328CB28BCA41F /* CoreGraphics.framework in Frameworks */,
3633F6BC492D1B7DD2BC1F999780AF63 /* Foundation.framework in Frameworks */,
650D99A605F9E47BA46F2546BB11736D /* QuartzCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
EBFCD6CC6CAC2BCFFB32313839EC76FC /* Frameworks */ = { EBFCD6CC6CAC2BCFFB32313839EC76FC /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
...@@ -1223,6 +1211,15 @@ ...@@ -1223,6 +1211,15 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
FF4B225633D137B31869832F8193D9A5 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5A858472F163A5F13D3B6B250E6A23D9 /* CoreGraphics.framework in Frameworks */,
B7C7807BD0D18C4CBF4BE73BE9FC043C /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
...@@ -1318,20 +1315,6 @@ ...@@ -1318,20 +1315,6 @@
path = "../Target Support Files/WechatOpenSDK"; path = "../Target Support Files/WechatOpenSDK";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
3736D86868A14FE16ED57651BF9B2B72 /* iOS */ = {
isa = PBXGroup;
children = (
E1CA666EA3FCD70A99F6F172B39680C0 /* CoreGraphics.framework */,
0A8FD7F69597452F61FAE35599930BBB /* CoreLocation.framework */,
7B5D09C3773564AA9BEC50DE29EC88D6 /* Foundation.framework */,
3A5DDFD519A2025B318498423AC30825 /* ImageIO.framework */,
A9822C128BE340EBFCF3D2B8AE3820A9 /* MapKit.framework */,
03EDB64E39288B1D313CCC17A2CCBF59 /* QuartzCore.framework */,
0904210056341D1D1487B57F4F076CD1 /* UIKit.framework */,
);
name = iOS;
sourceTree = "<group>";
};
377584C4D3CD010FFABCA479CDB79634 /* Development Pods */ = { 377584C4D3CD010FFABCA479CDB79634 /* Development Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -1401,19 +1384,6 @@ ...@@ -1401,19 +1384,6 @@
name = FDFullscreenPopGesture; name = FDFullscreenPopGesture;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
451A9081160A2BF3D0838D929E40D4CA /* Frameworks */ = {
isa = PBXGroup;
children = (
F4E8AE443F2026715324B872E5106B51 /* GMCache.framework */,
7BA61E612F5D8AC6577B205D3A0BA149 /* GMKit.framework */,
8CC374A56E6CB5C51FF247FE24218640 /* Masonry.framework */,
ACB7F284D1DFAB9AC1B364EAAD3D883E /* SDWebImage.framework */,
075862B34835ABE9A764E2614D89D838 /* TMCache.framework */,
3736D86868A14FE16ED57651BF9B2B72 /* iOS */,
);
name = Frameworks;
sourceTree = "<group>";
};
49CCE0CB3EB0754DDE53FF86AF5CBA1D /* Frameworks */ = { 49CCE0CB3EB0754DDE53FF86AF5CBA1D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -1494,6 +1464,19 @@ ...@@ -1494,6 +1464,19 @@
path = GMPhobos; path = GMPhobos;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
685195925E0D4E712149D70C3FF84579 /* Frameworks */ = {
isa = PBXGroup;
children = (
0EB58D3054EA0520E008152D439EF178 /* GMCache.framework */,
B3C1EC7383B377107A5C60600507CD3D /* GMKit.framework */,
85A103797FDC3D913E942C299211DA8B /* Masonry.framework */,
F4B7F18F4FD45A5C6A0BF3D04C2215FB /* SDWebImage.framework */,
5F3551192ADB090E6E61E2539F1C0337 /* TMCache.framework */,
959526EA8F5DB939BB4042132BEA2264 /* iOS */,
);
name = Frameworks;
sourceTree = "<group>";
};
696AC701A6B7EDBFFF36D37635649B1B /* Support Files */ = { 696AC701A6B7EDBFFF36D37635649B1B /* Support Files */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -1807,6 +1790,19 @@ ...@@ -1807,6 +1790,19 @@
path = "../Target Support Files/GMKit"; path = "../Target Support Files/GMKit";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
959526EA8F5DB939BB4042132BEA2264 /* iOS */ = {
isa = PBXGroup;
children = (
1F26493BE6C3CFB1C4542FBB9C12823A /* CoreGraphics.framework */,
86A3B519CFE97F86476384D027F3D6E2 /* CoreLocation.framework */,
D18413F648F2F15F070795A92476C563 /* Foundation.framework */,
A95276845F19156C6DFFBE2ADE99011B /* ImageIO.framework */,
B444E38C08344297E19CFB1A20A60929 /* MapKit.framework */,
7C7ADE775CBA206408B6857C67FD0757 /* UIKit.framework */,
);
name = iOS;
sourceTree = "<group>";
};
9A9DD7B93241B85C8F253CBA6259E363 /* Frameworks */ = { 9A9DD7B93241B85C8F253CBA6259E363 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -1955,7 +1951,7 @@ ...@@ -1955,7 +1951,7 @@
children = ( children = (
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
377584C4D3CD010FFABCA479CDB79634 /* Development Pods */, 377584C4D3CD010FFABCA479CDB79634 /* Development Pods */,
451A9081160A2BF3D0838D929E40D4CA /* Frameworks */, 685195925E0D4E712149D70C3FF84579 /* Frameworks */,
F8C1480D4C8B7923800E8AFF6DB0487C /* Pods */, F8C1480D4C8B7923800E8AFF6DB0487C /* Pods */,
4B514CE0E234C2A4E90105780FADE245 /* Products */, 4B514CE0E234C2A4E90105780FADE245 /* Products */,
F7A97BC05F5C64093F2138567BA9268E /* Targets Support Files */, F7A97BC05F5C64093F2138567BA9268E /* Targets Support Files */,
...@@ -2591,8 +2587,8 @@ ...@@ -2591,8 +2587,8 @@
buildConfigurationList = 4D8CD2CA184E0A2EBF87B1E744C4D9A8 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; buildConfigurationList = 4D8CD2CA184E0A2EBF87B1E744C4D9A8 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */;
buildPhases = ( buildPhases = (
6CA6FBF883526830E3C2CB4E0CC93E28 /* Headers */, 6CA6FBF883526830E3C2CB4E0CC93E28 /* Headers */,
47B2318E66F606007728AD54B224B3F5 /* Sources */, 92EC6079505E77B9A4EDE602A7D87E50 /* Sources */,
E1AE31498452F799683AE14A9217361B /* Frameworks */, FF4B225633D137B31869832F8193D9A5 /* Frameworks */,
644D42BE5CA2EA08640BA33502EF6E55 /* Resources */, 644D42BE5CA2EA08640BA33502EF6E55 /* Resources */,
); );
buildRules = ( buildRules = (
...@@ -2868,15 +2864,6 @@ ...@@ -2868,15 +2864,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
47B2318E66F606007728AD54B224B3F5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C203AD229674E164A8873CCC387C209A /* MBProgressHUD-dummy.m in Sources */,
E943A34194C2085A73A9AD0E4C8A5354 /* MBProgressHUD.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
64A2F57AB73170B523B8746EF1FD9F46 /* Sources */ = { 64A2F57AB73170B523B8746EF1FD9F46 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
...@@ -2901,6 +2888,15 @@ ...@@ -2901,6 +2888,15 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
92EC6079505E77B9A4EDE602A7D87E50 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8672FB42436891CA6F4E78638D20D0F5 /* MBProgressHUD-dummy.m in Sources */,
88B5C23CAE2D8BECBA7BA8D04F0E4E35 /* MBProgressHUD.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
967FAAD780A96FC86A3F3025EA470867 /* Sources */ = { 967FAAD780A96FC86A3F3025EA470867 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.1.0</string> <string>0.9.2</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics"
PODS_BUILD_DIR = ${BUILD_DIR} PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
......
...@@ -132,7 +132,7 @@ THE SOFTWARE. ...@@ -132,7 +132,7 @@ THE SOFTWARE.
## MBProgressHUD ## MBProgressHUD
Copyright © 2009-2016 Matej Bukovinski Copyright (c) 2009-2015 Matej Bukovinski
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
......
...@@ -191,7 +191,7 @@ THE SOFTWARE. ...@@ -191,7 +191,7 @@ THE SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Copyright © 2009-2016 Matej Bukovinski <string>Copyright (c) 2009-2015 Matej Bukovinski
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment