├── Podfile ├── Podfile.lock ├── Pods ├── BlocksKit │ ├── BlocksKit │ │ ├── BlocksKit+MessageUI.h │ │ ├── BlocksKit+UIKit.h │ │ ├── BlocksKit.h │ │ ├── Core │ │ │ ├── BKMacros.h │ │ │ ├── NSArray+BlocksKit.h │ │ │ ├── NSArray+BlocksKit.m │ │ │ ├── NSDictionary+BlocksKit.h │ │ │ ├── NSDictionary+BlocksKit.m │ │ │ ├── NSIndexSet+BlocksKit.h │ │ │ ├── NSIndexSet+BlocksKit.m │ │ │ ├── NSInvocation+BlocksKit.h │ │ │ ├── NSInvocation+BlocksKit.m │ │ │ ├── NSMutableArray+BlocksKit.h │ │ │ ├── NSMutableArray+BlocksKit.m │ │ │ ├── NSMutableDictionary+BlocksKit.h │ │ │ ├── NSMutableDictionary+BlocksKit.m │ │ │ ├── NSMutableIndexSet+BlocksKit.h │ │ │ ├── NSMutableIndexSet+BlocksKit.m │ │ │ ├── NSMutableOrderedSet+BlocksKit.h │ │ │ ├── NSMutableOrderedSet+BlocksKit.m │ │ │ ├── NSMutableSet+BlocksKit.h │ │ │ ├── NSMutableSet+BlocksKit.m │ │ │ ├── NSObject+BKAssociatedObjects.h │ │ │ ├── NSObject+BKAssociatedObjects.m │ │ │ ├── NSObject+BKBlockExecution.h │ │ │ ├── NSObject+BKBlockExecution.m │ │ │ ├── NSObject+BKBlockObservation.h │ │ │ ├── NSObject+BKBlockObservation.m │ │ │ ├── NSOrderedSet+BlocksKit.h │ │ │ ├── NSOrderedSet+BlocksKit.m │ │ │ ├── NSSet+BlocksKit.h │ │ │ ├── NSSet+BlocksKit.m │ │ │ ├── NSTimer+BlocksKit.h │ │ │ └── NSTimer+BlocksKit.m │ │ ├── DynamicDelegate │ │ │ ├── A2BlockInvocation.h │ │ │ ├── A2BlockInvocation.m │ │ │ ├── A2DynamicDelegate.h │ │ │ ├── A2DynamicDelegate.m │ │ │ ├── Foundation │ │ │ │ ├── NSCache+BlocksKit.h │ │ │ │ ├── NSCache+BlocksKit.m │ │ │ │ ├── NSURLConnection+BlocksKit.h │ │ │ │ └── NSURLConnection+BlocksKit.m │ │ │ ├── NSObject+A2BlockDelegate.h │ │ │ ├── NSObject+A2BlockDelegate.m │ │ │ ├── NSObject+A2DynamicDelegate.h │ │ │ └── NSObject+A2DynamicDelegate.m │ │ ├── MessageUI │ │ │ ├── MFMailComposeViewController+BlocksKit.h │ │ │ ├── MFMailComposeViewController+BlocksKit.m │ │ │ ├── MFMessageComposeViewController+BlocksKit.h │ │ │ └── MFMessageComposeViewController+BlocksKit.m │ │ └── UIKit │ │ │ ├── UIActionSheet+BlocksKit.h │ │ │ ├── UIActionSheet+BlocksKit.m │ │ │ ├── UIAlertView+BlocksKit.h │ │ │ ├── UIAlertView+BlocksKit.m │ │ │ ├── UIBarButtonItem+BlocksKit.h │ │ │ ├── UIBarButtonItem+BlocksKit.m │ │ │ ├── UIControl+BlocksKit.h │ │ │ ├── UIControl+BlocksKit.m │ │ │ ├── UIGestureRecognizer+BlocksKit.h │ │ │ ├── UIGestureRecognizer+BlocksKit.m │ │ │ ├── UIImagePickerController+BlocksKit.h │ │ │ ├── UIImagePickerController+BlocksKit.m │ │ │ ├── UIPopoverController+BlocksKit.h │ │ │ ├── UIPopoverController+BlocksKit.m │ │ │ ├── UITextField+BlocksKit.h │ │ │ ├── UITextField+BlocksKit.m │ │ │ ├── UIView+BlocksKit.h │ │ │ ├── UIView+BlocksKit.m │ │ │ ├── UIWebView+BlocksKit.h │ │ │ └── UIWebView+BlocksKit.m │ ├── LICENSE │ └── README.md ├── Headers │ ├── Private │ │ ├── BlocksKit │ │ │ ├── A2BlockInvocation.h │ │ │ ├── A2DynamicDelegate.h │ │ │ ├── BKMacros.h │ │ │ ├── BlocksKit+MessageUI.h │ │ │ ├── BlocksKit+UIKit.h │ │ │ ├── BlocksKit.h │ │ │ ├── MFMailComposeViewController+BlocksKit.h │ │ │ ├── MFMessageComposeViewController+BlocksKit.h │ │ │ ├── NSArray+BlocksKit.h │ │ │ ├── NSCache+BlocksKit.h │ │ │ ├── NSDictionary+BlocksKit.h │ │ │ ├── NSIndexSet+BlocksKit.h │ │ │ ├── NSInvocation+BlocksKit.h │ │ │ ├── NSMutableArray+BlocksKit.h │ │ │ ├── NSMutableDictionary+BlocksKit.h │ │ │ ├── NSMutableIndexSet+BlocksKit.h │ │ │ ├── NSMutableOrderedSet+BlocksKit.h │ │ │ ├── NSMutableSet+BlocksKit.h │ │ │ ├── NSObject+A2BlockDelegate.h │ │ │ ├── NSObject+A2DynamicDelegate.h │ │ │ ├── NSObject+BKAssociatedObjects.h │ │ │ ├── NSObject+BKBlockExecution.h │ │ │ ├── NSObject+BKBlockObservation.h │ │ │ ├── NSOrderedSet+BlocksKit.h │ │ │ ├── NSSet+BlocksKit.h │ │ │ ├── NSTimer+BlocksKit.h │ │ │ ├── NSURLConnection+BlocksKit.h │ │ │ ├── UIActionSheet+BlocksKit.h │ │ │ ├── UIAlertView+BlocksKit.h │ │ │ ├── UIBarButtonItem+BlocksKit.h │ │ │ ├── UIControl+BlocksKit.h │ │ │ ├── UIGestureRecognizer+BlocksKit.h │ │ │ ├── UIImagePickerController+BlocksKit.h │ │ │ ├── UIPopoverController+BlocksKit.h │ │ │ ├── UITextField+BlocksKit.h │ │ │ ├── UIView+BlocksKit.h │ │ │ └── UIWebView+BlocksKit.h │ │ ├── PureLayout │ │ │ ├── ALView+PureLayout.h │ │ │ ├── NSArray+PureLayout.h │ │ │ ├── NSLayoutConstraint+PureLayout.h │ │ │ ├── PureLayout+Internal.h │ │ │ ├── PureLayout.h │ │ │ └── PureLayoutDefines.h │ │ ├── SDWebImage │ │ │ ├── NSBezierPath+RoundedCorners.h │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSImage+Compatibility.h │ │ │ ├── SDAnimatedImage.h │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageView+WebCache.h │ │ │ ├── SDAnimatedImageView.h │ │ │ ├── SDAsyncBlockOperation.h │ │ │ ├── SDDiskCache.h │ │ │ ├── SDImageAPNGCoder.h │ │ │ ├── SDImageAssetManager.h │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheDefine.h │ │ │ ├── SDImageCachesManager.h │ │ │ ├── SDImageCachesManagerOperation.h │ │ │ ├── SDImageCoder.h │ │ │ ├── SDImageCoderHelper.h │ │ │ ├── SDImageCodersManager.h │ │ │ ├── SDImageFrame.h │ │ │ ├── SDImageGIFCoder.h │ │ │ ├── SDImageGraphics.h │ │ │ ├── SDImageHEICCoder.h │ │ │ ├── SDImageHEICCoderInternal.h │ │ │ ├── SDImageIOAnimatedCoder.h │ │ │ ├── SDImageIOAnimatedCoderInternal.h │ │ │ ├── SDImageIOCoder.h │ │ │ ├── SDImageLoader.h │ │ │ ├── SDImageLoadersManager.h │ │ │ ├── SDImageTransformer.h │ │ │ ├── SDInternalMacros.h │ │ │ ├── SDMemoryCache.h │ │ │ ├── SDWeakProxy.h │ │ │ ├── SDWebImage.h │ │ │ ├── SDWebImageCacheKeyFilter.h │ │ │ ├── SDWebImageCacheSerializer.h │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageDefine.h │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloaderConfig.h │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ │ ├── SDWebImageError.h │ │ │ ├── SDWebImageIndicator.h │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImageOptionsProcessor.h │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDmetamacros.h │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIColor+HexString.h │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+MemoryCacheCost.h │ │ │ ├── UIImage+Metadata.h │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+Transform.h │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIView+WebCache.h │ │ │ └── UIView+WebCacheOperation.h │ │ └── SVProgressHUD │ │ │ ├── SVIndefiniteAnimatedView.h │ │ │ ├── SVProgressAnimatedView.h │ │ │ ├── SVProgressHUD.h │ │ │ └── SVRadialGradientLayer.h │ └── Public │ │ ├── BlocksKit │ │ ├── A2BlockInvocation.h │ │ ├── A2DynamicDelegate.h │ │ ├── BKMacros.h │ │ ├── BlocksKit+MessageUI.h │ │ ├── BlocksKit+UIKit.h │ │ ├── BlocksKit.h │ │ ├── MFMailComposeViewController+BlocksKit.h │ │ ├── MFMessageComposeViewController+BlocksKit.h │ │ ├── NSArray+BlocksKit.h │ │ ├── NSCache+BlocksKit.h │ │ ├── NSDictionary+BlocksKit.h │ │ ├── NSIndexSet+BlocksKit.h │ │ ├── NSInvocation+BlocksKit.h │ │ ├── NSMutableArray+BlocksKit.h │ │ ├── NSMutableDictionary+BlocksKit.h │ │ ├── NSMutableIndexSet+BlocksKit.h │ │ ├── NSMutableOrderedSet+BlocksKit.h │ │ ├── NSMutableSet+BlocksKit.h │ │ ├── NSObject+A2BlockDelegate.h │ │ ├── NSObject+A2DynamicDelegate.h │ │ ├── NSObject+BKAssociatedObjects.h │ │ ├── NSObject+BKBlockExecution.h │ │ ├── NSObject+BKBlockObservation.h │ │ ├── NSOrderedSet+BlocksKit.h │ │ ├── NSSet+BlocksKit.h │ │ ├── NSTimer+BlocksKit.h │ │ ├── NSURLConnection+BlocksKit.h │ │ ├── UIActionSheet+BlocksKit.h │ │ ├── UIAlertView+BlocksKit.h │ │ ├── UIBarButtonItem+BlocksKit.h │ │ ├── UIControl+BlocksKit.h │ │ ├── UIGestureRecognizer+BlocksKit.h │ │ ├── UIImagePickerController+BlocksKit.h │ │ ├── UIPopoverController+BlocksKit.h │ │ ├── UITextField+BlocksKit.h │ │ ├── UIView+BlocksKit.h │ │ └── UIWebView+BlocksKit.h │ │ ├── PureLayout │ │ ├── ALView+PureLayout.h │ │ ├── NSArray+PureLayout.h │ │ ├── NSLayoutConstraint+PureLayout.h │ │ ├── PureLayout+Internal.h │ │ ├── PureLayout.h │ │ └── PureLayoutDefines.h │ │ ├── SDWebImage │ │ ├── NSButton+WebCache.h │ │ ├── NSData+ImageContentType.h │ │ ├── NSImage+Compatibility.h │ │ ├── SDAnimatedImage.h │ │ ├── SDAnimatedImageRep.h │ │ ├── SDAnimatedImageView+WebCache.h │ │ ├── SDAnimatedImageView.h │ │ ├── SDDiskCache.h │ │ ├── SDImageAPNGCoder.h │ │ ├── SDImageCache.h │ │ ├── SDImageCacheConfig.h │ │ ├── SDImageCacheDefine.h │ │ ├── SDImageCachesManager.h │ │ ├── SDImageCoder.h │ │ ├── SDImageCoderHelper.h │ │ ├── SDImageCodersManager.h │ │ ├── SDImageFrame.h │ │ ├── SDImageGIFCoder.h │ │ ├── SDImageGraphics.h │ │ ├── SDImageHEICCoder.h │ │ ├── SDImageIOAnimatedCoder.h │ │ ├── SDImageIOCoder.h │ │ ├── SDImageLoader.h │ │ ├── SDImageLoadersManager.h │ │ ├── SDImageTransformer.h │ │ ├── SDMemoryCache.h │ │ ├── SDWebImage.h │ │ ├── SDWebImageCacheKeyFilter.h │ │ ├── SDWebImageCacheSerializer.h │ │ ├── SDWebImageCompat.h │ │ ├── SDWebImageDefine.h │ │ ├── SDWebImageDownloader.h │ │ ├── SDWebImageDownloaderConfig.h │ │ ├── SDWebImageDownloaderOperation.h │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ ├── SDWebImageError.h │ │ ├── SDWebImageIndicator.h │ │ ├── SDWebImageManager.h │ │ ├── SDWebImageOperation.h │ │ ├── SDWebImageOptionsProcessor.h │ │ ├── SDWebImagePrefetcher.h │ │ ├── SDWebImageTransition.h │ │ ├── UIButton+WebCache.h │ │ ├── UIImage+ForceDecode.h │ │ ├── UIImage+GIF.h │ │ ├── UIImage+MemoryCacheCost.h │ │ ├── UIImage+Metadata.h │ │ ├── UIImage+MultiFormat.h │ │ ├── UIImage+Transform.h │ │ ├── UIImageView+HighlightedWebCache.h │ │ ├── UIImageView+WebCache.h │ │ ├── UIView+WebCache.h │ │ └── UIView+WebCacheOperation.h │ │ └── SVProgressHUD │ │ ├── SVIndefiniteAnimatedView.h │ │ ├── SVProgressAnimatedView.h │ │ ├── SVProgressHUD.h │ │ └── SVRadialGradientLayer.h ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── zhn.xcuserdatad │ │ └── xcschemes │ │ ├── BlocksKit.xcscheme │ │ ├── Pods-ZHNOCParser.xcscheme │ │ ├── PureLayout.xcscheme │ │ ├── SDWebImage.xcscheme │ │ ├── SVProgressHUD.xcscheme │ │ └── xcschememanagement.plist ├── PureLayout │ ├── LICENSE │ ├── PureLayout │ │ └── PureLayout │ │ │ ├── ALView+PureLayout.h │ │ │ ├── ALView+PureLayout.m │ │ │ ├── NSArray+PureLayout.h │ │ │ ├── NSArray+PureLayout.m │ │ │ ├── NSLayoutConstraint+PureLayout.h │ │ │ ├── NSLayoutConstraint+PureLayout.m │ │ │ ├── PureLayout+Internal.h │ │ │ ├── PureLayout.h │ │ │ └── PureLayoutDefines.h │ └── README.md ├── SDWebImage │ ├── LICENSE │ ├── README.md │ ├── SDWebImage │ │ ├── Core │ │ │ ├── NSButton+WebCache.h │ │ │ ├── NSButton+WebCache.m │ │ │ ├── NSData+ImageContentType.h │ │ │ ├── NSData+ImageContentType.m │ │ │ ├── NSImage+Compatibility.h │ │ │ ├── NSImage+Compatibility.m │ │ │ ├── SDAnimatedImage.h │ │ │ ├── SDAnimatedImage.m │ │ │ ├── SDAnimatedImageRep.h │ │ │ ├── SDAnimatedImageRep.m │ │ │ ├── SDAnimatedImageView+WebCache.h │ │ │ ├── SDAnimatedImageView+WebCache.m │ │ │ ├── SDAnimatedImageView.h │ │ │ ├── SDAnimatedImageView.m │ │ │ ├── SDDiskCache.h │ │ │ ├── SDDiskCache.m │ │ │ ├── SDImageAPNGCoder.h │ │ │ ├── SDImageAPNGCoder.m │ │ │ ├── SDImageCache.h │ │ │ ├── SDImageCache.m │ │ │ ├── SDImageCacheConfig.h │ │ │ ├── SDImageCacheConfig.m │ │ │ ├── SDImageCacheDefine.h │ │ │ ├── SDImageCacheDefine.m │ │ │ ├── SDImageCachesManager.h │ │ │ ├── SDImageCachesManager.m │ │ │ ├── SDImageCoder.h │ │ │ ├── SDImageCoder.m │ │ │ ├── SDImageCoderHelper.h │ │ │ ├── SDImageCoderHelper.m │ │ │ ├── SDImageCodersManager.h │ │ │ ├── SDImageCodersManager.m │ │ │ ├── SDImageFrame.h │ │ │ ├── SDImageFrame.m │ │ │ ├── SDImageGIFCoder.h │ │ │ ├── SDImageGIFCoder.m │ │ │ ├── SDImageGraphics.h │ │ │ ├── SDImageGraphics.m │ │ │ ├── SDImageHEICCoder.h │ │ │ ├── SDImageHEICCoder.m │ │ │ ├── SDImageIOAnimatedCoder.h │ │ │ ├── SDImageIOAnimatedCoder.m │ │ │ ├── SDImageIOCoder.h │ │ │ ├── SDImageIOCoder.m │ │ │ ├── SDImageLoader.h │ │ │ ├── SDImageLoader.m │ │ │ ├── SDImageLoadersManager.h │ │ │ ├── SDImageLoadersManager.m │ │ │ ├── SDImageTransformer.h │ │ │ ├── SDImageTransformer.m │ │ │ ├── SDMemoryCache.h │ │ │ ├── SDMemoryCache.m │ │ │ ├── SDWebImageCacheKeyFilter.h │ │ │ ├── SDWebImageCacheKeyFilter.m │ │ │ ├── SDWebImageCacheSerializer.h │ │ │ ├── SDWebImageCacheSerializer.m │ │ │ ├── SDWebImageCompat.h │ │ │ ├── SDWebImageCompat.m │ │ │ ├── SDWebImageDefine.h │ │ │ ├── SDWebImageDefine.m │ │ │ ├── SDWebImageDownloader.h │ │ │ ├── SDWebImageDownloader.m │ │ │ ├── SDWebImageDownloaderConfig.h │ │ │ ├── SDWebImageDownloaderConfig.m │ │ │ ├── SDWebImageDownloaderOperation.h │ │ │ ├── SDWebImageDownloaderOperation.m │ │ │ ├── SDWebImageDownloaderRequestModifier.h │ │ │ ├── SDWebImageDownloaderRequestModifier.m │ │ │ ├── SDWebImageError.h │ │ │ ├── SDWebImageError.m │ │ │ ├── SDWebImageIndicator.h │ │ │ ├── SDWebImageIndicator.m │ │ │ ├── SDWebImageManager.h │ │ │ ├── SDWebImageManager.m │ │ │ ├── SDWebImageOperation.h │ │ │ ├── SDWebImageOptionsProcessor.h │ │ │ ├── SDWebImageOptionsProcessor.m │ │ │ ├── SDWebImagePrefetcher.h │ │ │ ├── SDWebImagePrefetcher.m │ │ │ ├── SDWebImageTransition.h │ │ │ ├── SDWebImageTransition.m │ │ │ ├── UIButton+WebCache.h │ │ │ ├── UIButton+WebCache.m │ │ │ ├── UIImage+ForceDecode.h │ │ │ ├── UIImage+ForceDecode.m │ │ │ ├── UIImage+GIF.h │ │ │ ├── UIImage+GIF.m │ │ │ ├── UIImage+MemoryCacheCost.h │ │ │ ├── UIImage+MemoryCacheCost.m │ │ │ ├── UIImage+Metadata.h │ │ │ ├── UIImage+Metadata.m │ │ │ ├── UIImage+MultiFormat.h │ │ │ ├── UIImage+MultiFormat.m │ │ │ ├── UIImage+Transform.h │ │ │ ├── UIImage+Transform.m │ │ │ ├── UIImageView+HighlightedWebCache.h │ │ │ ├── UIImageView+HighlightedWebCache.m │ │ │ ├── UIImageView+WebCache.h │ │ │ ├── UIImageView+WebCache.m │ │ │ ├── UIView+WebCache.h │ │ │ ├── UIView+WebCache.m │ │ │ ├── UIView+WebCacheOperation.h │ │ │ └── UIView+WebCacheOperation.m │ │ └── Private │ │ │ ├── NSBezierPath+RoundedCorners.h │ │ │ ├── NSBezierPath+RoundedCorners.m │ │ │ ├── SDAsyncBlockOperation.h │ │ │ ├── SDAsyncBlockOperation.m │ │ │ ├── SDImageAssetManager.h │ │ │ ├── SDImageAssetManager.m │ │ │ ├── SDImageCachesManagerOperation.h │ │ │ ├── SDImageCachesManagerOperation.m │ │ │ ├── SDImageHEICCoderInternal.h │ │ │ ├── SDImageIOAnimatedCoderInternal.h │ │ │ ├── SDInternalMacros.h │ │ │ ├── SDInternalMacros.m │ │ │ ├── SDWeakProxy.h │ │ │ ├── SDWeakProxy.m │ │ │ ├── SDmetamacros.h │ │ │ ├── UIColor+HexString.h │ │ │ └── UIColor+HexString.m │ └── WebImage │ │ └── SDWebImage.h ├── SVProgressHUD │ ├── LICENSE │ ├── README.md │ └── SVProgressHUD │ │ ├── SVIndefiniteAnimatedView.h │ │ ├── SVIndefiniteAnimatedView.m │ │ ├── SVProgressAnimatedView.h │ │ ├── SVProgressAnimatedView.m │ │ ├── SVProgressHUD.bundle │ │ ├── angle-mask.png │ │ ├── angle-mask@2x.png │ │ ├── angle-mask@3x.png │ │ ├── error.png │ │ ├── error@2x.png │ │ ├── error@3x.png │ │ ├── info.png │ │ ├── info@2x.png │ │ ├── info@3x.png │ │ ├── success.png │ │ ├── success@2x.png │ │ └── success@3x.png │ │ ├── SVProgressHUD.h │ │ ├── SVProgressHUD.m │ │ ├── SVRadialGradientLayer.h │ │ └── SVRadialGradientLayer.m └── Target Support Files │ ├── BlocksKit │ ├── BlocksKit-dummy.m │ ├── BlocksKit-prefix.pch │ └── BlocksKit.xcconfig │ ├── Pods-ZHNOCParser │ ├── Pods-ZHNOCParser-acknowledgements.markdown │ ├── Pods-ZHNOCParser-acknowledgements.plist │ ├── Pods-ZHNOCParser-dummy.m │ ├── Pods-ZHNOCParser-resources-Debug-input-files.xcfilelist │ ├── Pods-ZHNOCParser-resources-Debug-output-files.xcfilelist │ ├── Pods-ZHNOCParser-resources-Release-input-files.xcfilelist │ ├── Pods-ZHNOCParser-resources-Release-output-files.xcfilelist │ ├── Pods-ZHNOCParser-resources.sh │ ├── Pods-ZHNOCParser.debug.xcconfig │ └── Pods-ZHNOCParser.release.xcconfig │ ├── PureLayout │ ├── PureLayout-dummy.m │ ├── PureLayout-prefix.pch │ └── PureLayout.xcconfig │ ├── SDWebImage │ ├── SDWebImage-dummy.m │ ├── SDWebImage-prefix.pch │ └── SDWebImage.xcconfig │ └── SVProgressHUD │ ├── SVProgressHUD-dummy.m │ ├── SVProgressHUD-prefix.pch │ └── SVProgressHUD.xcconfig ├── README.md ├── ZHNOCParser.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── zhn.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── ZHNOCParser.xcscheme └── xcuserdata │ └── zhn.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ └── xcschememanagement.plist ├── ZHNOCParser.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── zhn.xcuserdatad │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── ZHNOCParser ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist ├── OCParser │ ├── ZHNOCMethodCaller.h │ ├── ZHNOCMethodCaller.m │ ├── ZHNOCParser.h │ ├── ZHNOCParser.m │ ├── ZHNOCParseredNodeManager.h │ ├── ZHNOCParseredNodeManager.m │ ├── ZHNTypeEncodingTransManager.h │ ├── ZHNTypeEncodingTransManager.m │ ├── node │ │ ├── ZHNConditionNode.h │ │ ├── ZHNConditionNode.m │ │ ├── ZHNOCASTContextManager.h │ │ ├── ZHNOCASTContextManager.m │ │ ├── ZHNOCAssembleNode.h │ │ ├── ZHNOCAssembleNode.m │ │ ├── ZHNOCAssignmentNode.h │ │ ├── ZHNOCAssignmentNode.m │ │ ├── ZHNOCBlockNode.h │ │ ├── ZHNOCBlockNode.m │ │ ├── ZHNOCEnumInitManager.h │ │ ├── ZHNOCEnumInitManager.m │ │ ├── ZHNOCForCycleNode.h │ │ ├── ZHNOCForCycleNode.m │ │ ├── ZHNOCForInCycleNode.h │ │ ├── ZHNOCForInCycleNode.m │ │ ├── ZHNOCGetSetNode.h │ │ ├── ZHNOCGetSetNode.m │ │ ├── ZHNOCIfElseCondition.h │ │ ├── ZHNOCIfElseCondition.m │ │ ├── ZHNOCIfElseListNode.h │ │ ├── ZHNOCIfElseListNode.m │ │ ├── ZHNOCIfElseNode.h │ │ ├── ZHNOCIfElseNode.m │ │ ├── ZHNOCMethodNode.h │ │ ├── ZHNOCMethodNode.m │ │ ├── ZHNOCNode.h │ │ ├── ZHNOCNode.m │ │ ├── ZHNOCPPMMNode.h │ │ ├── ZHNOCPPMMNode.m │ │ ├── ZHNOCPointerWordNode.h │ │ ├── ZHNOCPointerWordNode.m │ │ ├── ZHNOCReturnNode.h │ │ ├── ZHNOCReturnNode.m │ │ ├── ZHNOCStructNode.h │ │ ├── ZHNOCStructNode.m │ │ ├── ZHNPatchNode.h │ │ └── ZHNPatchNode.m │ ├── parser.ym │ └── tokenizer.lm ├── Patch │ ├── ZHNOCPatcher.h │ └── ZHNOCPatcher.m ├── ViewController.h ├── ViewController.m ├── hotPatch.text ├── libffi │ ├── ffi.h │ ├── ffi_arm.h │ ├── ffi_arm64.h │ ├── ffi_i386.h │ ├── ffi_x86_64.h │ ├── ffitarget.h │ ├── ffitarget_arm.h │ ├── ffitarget_arm64.h │ ├── ffitarget_i386.h │ ├── ffitarget_x86_64.h │ └── libffi.a ├── loadView.text └── main.m ├── ZHNOCParserTests ├── Info.plist └── ZHNOCParserTests.m └── ZHNOCParserUITests ├── Info.plist └── ZHNOCParserUITests.m /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '8.0' 2 | 3 | target 'ZHNOCParser' do 4 | pod 'SDWebImage' 5 | pod 'SVProgressHUD' 6 | pod 'PureLayout' 7 | pod 'BlocksKit' 8 | end -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BlocksKit (2.2.5): 3 | - BlocksKit/All (= 2.2.5) 4 | - BlocksKit/All (2.2.5): 5 | - BlocksKit/Core 6 | - BlocksKit/DynamicDelegate 7 | - BlocksKit/MessageUI 8 | - BlocksKit/UIKit 9 | - BlocksKit/Core (2.2.5) 10 | - BlocksKit/DynamicDelegate (2.2.5) 11 | - BlocksKit/MessageUI (2.2.5): 12 | - BlocksKit/Core 13 | - BlocksKit/DynamicDelegate 14 | - BlocksKit/UIKit (2.2.5): 15 | - BlocksKit/Core 16 | - BlocksKit/DynamicDelegate 17 | - PureLayout (3.1.5) 18 | - SDWebImage (5.2.3): 19 | - SDWebImage/Core (= 5.2.3) 20 | - SDWebImage/Core (5.2.3) 21 | - SVProgressHUD (2.2.5) 22 | 23 | DEPENDENCIES: 24 | - BlocksKit 25 | - PureLayout 26 | - SDWebImage 27 | - SVProgressHUD 28 | 29 | SPEC REPOS: 30 | https://github.com/cocoapods/specs.git: 31 | - BlocksKit 32 | - PureLayout 33 | - SDWebImage 34 | - SVProgressHUD 35 | 36 | SPEC CHECKSUMS: 37 | BlocksKit: 7f422b971407001178d181a43b99014ea2591fe6 38 | PureLayout: 9b4ad47b2f0388c84ff534af23d96e720c1b875a 39 | SDWebImage: 46a7f73228f84ce80990c786e4372cf4db5875ce 40 | SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 41 | 42 | PODFILE CHECKSUM: 837279d33325d07020e6e3551c0b9bd26b2106a9 43 | 44 | COCOAPODS: 1.7.5 45 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/BlocksKit+MessageUI.h: -------------------------------------------------------------------------------- 1 | // 2 | // BlocksKit+MessageUI 3 | // 4 | // The Objective-C block utilities you always wish you had. 5 | // 6 | // Copyright (c) 2011-2012, 2013-2014 Zachary Waldowski 7 | // Copyright (c) 2012-2013 Pandamonia LLC 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | // 27 | 28 | #import 29 | #import 30 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/BlocksKit+UIKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // BlocksKit+UIKit 3 | // 4 | // The Objective-C block utilities you always wish you had. 5 | // 6 | // Copyright (c) 2011-2012, 2013-2014 Zachary Waldowski 7 | // Copyright (c) 2012-2013 Pandamonia LLC 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | // 27 | 28 | #import 29 | #import 30 | #import 31 | #import 32 | #import 33 | #import 34 | #import 35 | #import 36 | #import 37 | #import 38 | #import 39 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSInvocation+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** BlocksKit extensions for NSInvocation. */ 9 | @interface NSInvocation (BlocksKit) 10 | 11 | /** Generates a forwarding `NSInvocation` instance for a given method call 12 | encapsulated by the given block. 13 | 14 | NSInvocation *invocation = [NSInvocation invocationWithTarget:target block:^(id myObject) { 15 | [myObject someMethodWithArg:42.0]; 16 | }]; 17 | 18 | This returns an invocation with the appropriate target, selector, and arguments 19 | without creating the buffers yourself. It is only recommended to call a method 20 | on the argument to the block only once. More complicated forwarding machinery 21 | can be accomplished by the A2DynamicDelegate family of classes included in 22 | BlocksKit. 23 | 24 | Created by [Jonathan Rentzch](https://github.com/rentzsch) as 25 | `NSInvocation-blocks`. 26 | 27 | @param target The object to "grab" the block invocation from. 28 | @param block A code block. 29 | @return A fully-prepared instance of NSInvocation ready to be invoked. 30 | */ 31 | + (NSInvocation *)bk_invocationWithTarget:(id)target block:(void (^)(id target))block; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSInvocation+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSInvocation+BlocksKit.h" 7 | 8 | @interface BKInvocationGrabber : NSProxy 9 | 10 | + (BKInvocationGrabber *)grabberWithTarget:(id)target; 11 | 12 | @property (nonatomic, strong) id target; 13 | @property (nonatomic, strong) NSInvocation *invocation; 14 | 15 | @end 16 | 17 | @implementation BKInvocationGrabber 18 | 19 | + (BKInvocationGrabber *)grabberWithTarget:(id)target { 20 | BKInvocationGrabber *instance = [BKInvocationGrabber alloc]; 21 | instance.target = target; 22 | return instance; 23 | } 24 | 25 | - (NSMethodSignature*)methodSignatureForSelector:(SEL)selector { 26 | return [self.target methodSignatureForSelector:selector]; 27 | } 28 | 29 | - (void)forwardInvocation:(NSInvocation*)invocation { 30 | [invocation setTarget:self.target]; 31 | NSParameterAssert(self.invocation == nil); 32 | self.invocation = invocation; 33 | } 34 | 35 | @end 36 | 37 | 38 | @implementation NSInvocation (BlocksKit) 39 | 40 | + (NSInvocation *)bk_invocationWithTarget:(id)target block:(void (^)(id target))block 41 | { 42 | NSParameterAssert(block != nil); 43 | BKInvocationGrabber *grabber = [BKInvocationGrabber grabberWithTarget:target]; 44 | block(grabber); 45 | return grabber.invocation; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block extensions for NSMutableArray. 9 | 10 | These utilities expound upon the BlocksKit additions to the immutable 11 | superclass by allowing certain utilities to work on an instance of the mutable 12 | class, saving memory by not creating an immutable copy of the results. 13 | 14 | Includes code by the following: 15 | 16 | - [Martin Schürrer](https://github.com/MSch) 17 | - [Zach Waldowski](https://github.com/zwaldowski) 18 | 19 | @see NSArray(BlocksKit) 20 | */ 21 | @interface NSMutableArray (BlocksKit) 22 | 23 | /** Filters a mutable array to the objects matching the block. 24 | 25 | @param block A single-argument, BOOL-returning code block. 26 | @see bk_reject: 27 | */ 28 | - (void)bk_performSelect:(BOOL (^)(id obj))block; 29 | 30 | /** Filters a mutable array to all objects but the ones matching the block, 31 | the logical inverse to bk_select:. 32 | 33 | @param block A single-argument, BOOL-returning code block. 34 | @see bk_select: 35 | */ 36 | - (void)bk_performReject:(BOOL (^)(id obj))block; 37 | 38 | /** Transform the objects in the array to the results of the block. 39 | 40 | This is sometimes referred to as a transform, mutating one of each object: 41 | [foo bk_performMap:^id(id obj) { 42 | return [dateTransformer dateFromString:obj]; 43 | }]; 44 | 45 | @param block A single-argument, object-returning code block. 46 | @see bk_map: 47 | */ 48 | - (void)bk_performMap:(id (^)(id obj))block; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSMutableArray+BlocksKit.h" 7 | 8 | @implementation NSMutableArray (BlocksKit) 9 | 10 | - (void)bk_performSelect:(BOOL (^)(id obj))block { 11 | NSParameterAssert(block != nil); 12 | 13 | NSIndexSet *list = [self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 14 | return !block(obj); 15 | }]; 16 | 17 | if (!list.count) return; 18 | [self removeObjectsAtIndexes:list]; 19 | } 20 | 21 | - (void)bk_performReject:(BOOL (^)(id obj))block { 22 | NSParameterAssert(block != nil); 23 | return [self bk_performSelect:^BOOL(id obj) { 24 | return !block(obj); 25 | }]; 26 | } 27 | 28 | - (void)bk_performMap:(id (^)(id obj))block { 29 | NSParameterAssert(block != nil); 30 | 31 | NSMutableArray *new = [self mutableCopy]; 32 | 33 | [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 34 | id value = block(obj) ?: [NSNull null]; 35 | if ([value isEqual:obj]) return; 36 | new[idx] = value; 37 | }]; 38 | 39 | [self setArray:new]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableDictionary+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block extensions for NSMutableDictionary. 9 | 10 | These utilities expound upon the BlocksKit additions to the immutable 11 | superclass by allowing certain utilities to work on an instance of the mutable 12 | class, saving memory by not creating an immutable copy of the results. 13 | 14 | Includes code by the following: 15 | 16 | - [Martin Schürrer](https://github.com/MSch) 17 | - [Zach Waldowski](https://github.com/zwaldowski) 18 | 19 | @see NSDictionary(BlocksKit) 20 | */ 21 | @interface NSMutableDictionary (BlocksKit) 22 | 23 | /** Filters a mutable dictionary to the key/value pairs matching the block. 24 | 25 | @param block A BOOL-returning code block for a key/value pair. 26 | @see bk_reject: 27 | */ 28 | - (void)bk_performSelect:(BOOL (^)(id key, id obj))block; 29 | 30 | /** Filters a mutable dictionary to the key/value pairs not matching the block, 31 | the logical inverse to bk_select:. 32 | 33 | @param block A BOOL-returning code block for a key/value pair. 34 | @see bk_select: 35 | */ 36 | - (void)bk_performReject:(BOOL (^)(id key, id obj))block; 37 | 38 | /** Transform each value of the dictionary to a new value, as returned by the 39 | block. 40 | 41 | @param block A block that returns a new value for a given key/value pair. 42 | @see bk_map: 43 | */ 44 | - (void)bk_performMap:(id (^)(id key, id obj))block; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableDictionary+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSMutableDictionary+BlocksKit.h" 7 | 8 | @implementation NSMutableDictionary (BlocksKit) 9 | 10 | - (void)bk_performSelect:(BOOL (^)(id key, id obj))block 11 | { 12 | NSParameterAssert(block != nil); 13 | 14 | NSArray *keys = [[self keysOfEntriesWithOptions:NSEnumerationConcurrent passingTest:^BOOL(id key, id obj, BOOL *stop) { 15 | return !block(key, obj); 16 | }] allObjects]; 17 | 18 | [self removeObjectsForKeys:keys]; 19 | } 20 | 21 | - (void)bk_performReject:(BOOL (^)(id key, id obj))block 22 | { 23 | NSParameterAssert(block != nil); 24 | [self bk_performSelect:^BOOL(id key, id obj) { 25 | return !block(key, obj); 26 | }]; 27 | } 28 | 29 | - (void)bk_performMap:(id (^)(id key, id obj))block 30 | { 31 | NSParameterAssert(block != nil); 32 | 33 | NSMutableDictionary *new = [self mutableCopy]; 34 | 35 | [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 36 | id value = block(key, obj) ?: [NSNull null]; 37 | if ([value isEqual:obj]) return; 38 | new[key] = value; 39 | }]; 40 | 41 | [self setDictionary:new]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableIndexSet+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block extensions for NSMutableIndexSet. 9 | 10 | These utilities expound upon the BlocksKit additions to the immutable 11 | superclass by allowing certain utilities to work on an instance of the mutable 12 | class, saving memory by not creating an immutable copy of the results. 13 | 14 | @see NSIndexSet(BlocksKit) 15 | */ 16 | @interface NSMutableIndexSet (BlocksKit) 17 | 18 | /** Filters a mutable index set to the indexes matching the block. 19 | 20 | @param block A single-argument, BOOL-returning code block. 21 | @see bk_reject: 22 | */ 23 | - (void)bk_performSelect:(BOOL (^)(NSUInteger index))block; 24 | 25 | /** Filters a mutable index set to all indexes but the ones matching the block, 26 | the logical inverse to bk_select:. 27 | 28 | @param block A single-argument, BOOL-returning code block. 29 | @see bk_select: 30 | */ 31 | - (void)bk_performReject:(BOOL (^)(NSUInteger index))block; 32 | 33 | /** Transform each index of the index set to a new index, as returned by the 34 | block. 35 | 36 | @param block A block that returns a new index for a index. 37 | @see bk_map: 38 | */ 39 | - (void)bk_performMap:(NSUInteger (^)(NSUInteger index))block; 40 | 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableIndexSet+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSMutableIndexSet+BlocksKit.h" 7 | 8 | @implementation NSMutableIndexSet (BlocksKit) 9 | 10 | - (void)bk_performSelect:(BOOL (^)(NSUInteger index))block 11 | { 12 | NSParameterAssert(block != nil); 13 | 14 | NSIndexSet *list = [self indexesPassingTest:^BOOL(NSUInteger idx, BOOL *stop) { 15 | return !block(idx); 16 | }]; 17 | 18 | if (!list.count) return; 19 | [self removeIndexes:list]; 20 | } 21 | 22 | - (void)bk_performReject:(BOOL (^)(NSUInteger index))block 23 | { 24 | NSParameterAssert(block != nil); 25 | return [self bk_performSelect:^BOOL(NSUInteger idx) { 26 | return !block(idx); 27 | }]; 28 | } 29 | 30 | - (void)bk_performMap:(NSUInteger (^)(NSUInteger index))block 31 | { 32 | NSParameterAssert(block != nil); 33 | 34 | NSMutableIndexSet *new = [self mutableCopy]; 35 | 36 | [self enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 37 | [new addIndex:block(idx)]; 38 | }]; 39 | 40 | [self removeAllIndexes]; 41 | [self addIndexes:new]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableOrderedSet+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block extensions for NSMutableOrderedSet. 9 | 10 | These utilities expound upon the BlocksKit additions to the immutable 11 | superclass by allowing certain utilities to work on an instance of the mutable 12 | class, saving memory by not creating an immutable copy of the results. 13 | 14 | Includes code by the following: 15 | 16 | - [Martin Schürrer](https://github.com/MSch) 17 | - [Zach Waldowski](https://github.com/zwaldowski) 18 | 19 | @see NSOrderedSet(BlocksKit) 20 | */ 21 | @interface NSMutableOrderedSet (BlocksKit) 22 | 23 | /** Filters a mutable ordered set to the objects matching the block. 24 | 25 | @param block A single-argument, BOOL-returning code block. 26 | @see bk_reject: 27 | */ 28 | - (void)bk_performSelect:(BOOL (^)(id obj))block; 29 | 30 | /** Filters a mutable ordered set to all objects but the ones matching the 31 | block, the logical inverse to bk_select:. 32 | 33 | @param block A single-argument, BOOL-returning code block. 34 | @see bk_select: 35 | */ 36 | - (void)bk_performReject:(BOOL (^)(id obj))block; 37 | 38 | /** Transform the objects in the ordered set to the results of the block. 39 | 40 | This is sometimes referred to as a transform, mutating one of each object: 41 | [foo bk_performMap:^id(id obj) { 42 | return [dateTransformer dateFromString:obj]; 43 | }]; 44 | 45 | @param block A single-argument, object-returning code block. 46 | @see bk_map: 47 | */ 48 | - (void)bk_performMap:(id (^)(id obj))block; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableOrderedSet+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSMutableOrderedSet+BlocksKit.h" 7 | 8 | @implementation NSMutableOrderedSet (BlocksKit) 9 | 10 | - (void)bk_performSelect:(BOOL (^)(id obj))block { 11 | NSParameterAssert(block != nil); 12 | 13 | NSIndexSet *list = [self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 14 | return !block(obj); 15 | }]; 16 | 17 | if (!list.count) return; 18 | [self removeObjectsAtIndexes:list]; 19 | } 20 | 21 | - (void)bk_performReject:(BOOL (^)(id obj))block { 22 | NSParameterAssert(block != nil); 23 | return [self bk_performSelect:^BOOL(id obj) { 24 | return !block(obj); 25 | }]; 26 | } 27 | 28 | - (void)bk_performMap:(id (^)(id obj))block { 29 | NSParameterAssert(block != nil); 30 | 31 | NSMutableIndexSet *newIndexes = [NSMutableIndexSet indexSet]; 32 | NSMutableArray *newObjects = [NSMutableArray arrayWithCapacity:self.count]; 33 | 34 | [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 35 | id value = block(obj) ?: [NSNull null]; 36 | if ([value isEqual:obj]) return; 37 | [newIndexes addIndex:idx]; 38 | [newObjects addObject:obj]; 39 | }]; 40 | 41 | [self replaceObjectsAtIndexes:newIndexes withObjects:newObjects]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableSet+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block extensions for NSMutableSet. 9 | 10 | These utilities expound upon the BlocksKit additions to the immutable 11 | superclass by allowing certain utilities to work on an instance of the mutable 12 | class, saving memory by not creating an immutable copy of the results. 13 | 14 | Includes code by the following: 15 | 16 | - [Martin Schürrer](https://github.com/MSch) 17 | - [Zach Waldowski](https://github.com/zwaldowski) 18 | 19 | @see NSSet(BlocksKit) 20 | */ 21 | @interface NSMutableSet (BlocksKit) 22 | 23 | /** Filters a mutable set to the objects matching the block. 24 | 25 | @param block A single-argument, BOOL-returning code block. 26 | @see bk_reject: 27 | */ 28 | - (void)bk_performSelect:(BOOL (^)(id obj))block; 29 | 30 | /** Filters a mutable set to all objects but the ones matching the block, 31 | the logical inverse to bk_select:. 32 | 33 | @param block A single-argument, BOOL-returning code block. 34 | @see bk_select: 35 | */ 36 | - (void)bk_performReject:(BOOL (^)(id obj))block; 37 | 38 | /** Transform the objects in the set to the results of the block. 39 | 40 | This is sometimes referred to as a transform, mutating one of each object: 41 | [controllers bk_map:^id(id obj) { 42 | return [obj view]; 43 | }]; 44 | 45 | @param block A single-argument, object-returning code block. 46 | @see bk_map: 47 | */ 48 | - (void)bk_performMap:(id (^)(id obj))block; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableSet+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSMutableSet+BlocksKit.h" 7 | 8 | @implementation NSMutableSet (BlocksKit) 9 | 10 | - (void)bk_performSelect:(BOOL (^)(id obj))block { 11 | NSParameterAssert(block != nil); 12 | 13 | NSSet *list = [self objectsPassingTest:^BOOL(id obj, BOOL *stop) { 14 | return block(obj); 15 | }]; 16 | 17 | [self setSet:list]; 18 | } 19 | 20 | - (void)bk_performReject:(BOOL (^)(id obj))block { 21 | NSParameterAssert(block != nil); 22 | [self bk_performSelect:^BOOL(id obj) { 23 | return !block(obj); 24 | }]; 25 | } 26 | 27 | - (void)bk_performMap:(id (^)(id obj))block { 28 | NSParameterAssert(block != nil); 29 | 30 | NSMutableSet *new = [NSMutableSet setWithCapacity:self.count]; 31 | 32 | [self enumerateObjectsUsingBlock:^(id obj, BOOL *stop) { 33 | id value = block(obj); 34 | if (!value) return; 35 | [new addObject:value]; 36 | }]; 37 | 38 | [self setSet:new]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimer+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Simple category on NSTimer to give it blocks capability. 9 | 10 | Created by [Jiva DeVoe](https://github.com/jivadevoe) as `NSTimer-Blocks`. 11 | */ 12 | @interface NSTimer (BlocksKit) 13 | 14 | /** Creates and returns a block-based NSTimer object and schedules it on the current run loop. 15 | 16 | @param inTimeInterval The number of seconds between firings of the timer. 17 | @param inBlock The block that the NSTimer fires. 18 | @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. 19 | @return A new NSTimer object, configured according to the specified parameters. 20 | */ 21 | + (NSTimer *)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats; 22 | 23 | /** Creates and returns a block-based NSTimer initialized with the specified block. 24 | 25 | You must add the new timer to a run loop, using `-addTimer:forMode:`. Then, 26 | after seconds seconds have elapsed, the timer fires the block. If the timer 27 | is configured to repeat, there is no need to subsequently re-add the timer. 28 | 29 | @param inTimeInterval The number of seconds between firings of the timer. 30 | @param inBlock The block that the NSTimer fires. 31 | @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. 32 | @return A new NSTimer object, configured according to the specified parameters. 33 | */ 34 | + (NSTimer *)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimer+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "NSTimer+BlocksKit.h" 7 | 8 | @interface NSTimer (BlocksKitPrivate) 9 | 10 | + (void)bk_executeBlockFromTimer:(NSTimer *)aTimer; 11 | 12 | @end 13 | 14 | @implementation NSTimer (BlocksKit) 15 | 16 | + (id)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats 17 | { 18 | NSParameterAssert(block != nil); 19 | return [self scheduledTimerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats]; 20 | } 21 | 22 | + (id)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats 23 | { 24 | NSParameterAssert(block != nil); 25 | return [self timerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats]; 26 | } 27 | 28 | + (void)bk_executeBlockFromTimer:(NSTimer *)aTimer { 29 | void (^block)(NSTimer *) = [aTimer userInfo]; 30 | if (block) block(aTimer); 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSCache+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** NSCache with block adding of objects 9 | 10 | This category allows you to conditionally add objects to 11 | an instance of NSCache using blocks. Both the normal 12 | delegation pattern and a block callback for NSCache's one 13 | delegate method are allowed. 14 | 15 | These methods emulate Rails caching behavior. 16 | 17 | Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to BlocksKit. 18 | */ 19 | 20 | @interface NSCache (BlocksKit) 21 | 22 | /** Returns the value associated with a given key. If there is no 23 | object for that key, it uses the result of the block, saves 24 | that to the cache, and returns it. 25 | 26 | This mimics the cache behavior of Ruby on Rails. The following code: 27 | 28 | @products = Rails.cache.fetch('products') do 29 | Product.all 30 | end 31 | 32 | becomes: 33 | 34 | NSMutableArray *products = [cache objectForKey:@"products" withGetter:^id{ 35 | return [Product all]; 36 | }]; 37 | 38 | @return The value associated with *key*, or the object returned 39 | by the block if no value is associated with *key*. 40 | @param key An object identifying the value. 41 | @param getterBlock A block used to get an object if there is no 42 | value in the cache. 43 | */ 44 | - (id)bk_objectForKey:(id)key withGetter:(id (^)(void))getterBlock; 45 | 46 | /** Called when an object is about to be evicted from the cache. 47 | 48 | This block callback is an analog for the cache:willEviceObject: 49 | method of NSCacheDelegate. 50 | */ 51 | @property (nonatomic, copy, setter = bk_setWillEvictBlock:) void (^bk_willEvictBlock)(NSCache *cache, id obj); 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSCache+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "A2DynamicDelegate.h" 7 | #import "NSCache+BlocksKit.h" 8 | #import "NSObject+A2BlockDelegate.h" 9 | 10 | #pragma mark Custom delegate 11 | 12 | @interface A2DynamicNSCacheDelegate : A2DynamicDelegate 13 | 14 | @end 15 | 16 | @implementation A2DynamicNSCacheDelegate 17 | 18 | - (void)cache:(NSCache *)cache willEvictObject:(id)obj 19 | { 20 | id realDelegate = self.realDelegate; 21 | if (realDelegate && [realDelegate respondsToSelector:@selector(cache:willEvictObject:)]) 22 | [realDelegate cache:cache willEvictObject:obj]; 23 | 24 | void (^orig)(NSCache *, id) = [self blockImplementationForMethod:_cmd]; 25 | if (orig) orig(cache, obj); 26 | } 27 | 28 | @end 29 | 30 | #pragma mark Category 31 | 32 | @implementation NSCache (BlocksKit) 33 | 34 | @dynamic bk_willEvictBlock; 35 | 36 | + (void)load 37 | { 38 | @autoreleasepool { 39 | [self bk_registerDynamicDelegate]; 40 | [self bk_linkDelegateMethods:@{ @"bk_willEvictBlock": @"cache:willEvictObject:" }]; 41 | } 42 | } 43 | 44 | #pragma mark Methods 45 | 46 | - (id)bk_objectForKey:(id)key withGetter:(id (^)(void))block 47 | { 48 | id object = [self objectForKey:key]; 49 | if (object) return object; 50 | 51 | if (block) { 52 | object = block(); 53 | [self setObject:object forKey:key]; 54 | } 55 | 56 | return object; 57 | } 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFMailComposeViewController+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** MFMailComposeViewController with block callbacks. 9 | 10 | If you provide a completion handler to an instance of 11 | MFMailComposeViewController but do not implement a delegate callback for 12 | mailComposeController:didFinishWithResult:error:, the mail compose view 13 | controller will automatically be dismissed if it was launched modally. 14 | 15 | Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to 16 | BlocksKit. 17 | 18 | @warning MFMailComposeViewController is only available on a platform with MessageUI. 19 | */ 20 | @interface MFMailComposeViewController (BlocksKit) 21 | 22 | /** The block fired on the dismissal of the mail composition interface. 23 | 24 | This block callback is an analog for the 25 | mailComposeController:didFinishWithResult:error:method 26 | of MFMailComposeViewControllerDelegate. 27 | */ 28 | @property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMailComposeViewController *controller, MFMailComposeResult result, NSError *error); 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // MFMessageComposeViewController+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** MFMessageComposeViewController with block callback in addition to delegation. 9 | 10 | If you provide a completion handler to an instance of 11 | MFMessageComposeViewController but do not implement a delegate callback for 12 | messageComposeViewController:didFinishWithResult:error:, the message compose 13 | view controller will automatically be dismissed if it was launched modally. 14 | 15 | Created by [Igor Evsukov](https://github.com/evsukov89) and contributed to 16 | BlocksKit. 17 | 18 | @warning MFMessageComposeViewController is only available on a platform with MessageUI. 19 | */ 20 | @interface MFMessageComposeViewController (BlocksKit) 21 | 22 | /** The block fired on the dismissal of the SMS composition interface. 23 | 24 | This block callback is an analog for the 25 | messageComposeViewController:didFinishWithResult: method 26 | of MFMessageComposeViewControllerDelegate. 27 | */ 28 | @property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMessageComposeViewController *controller, MessageComposeResult result); 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIControl+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIControl+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block control event handling for UIControl. 9 | 10 | Includes code by the following: 11 | 12 | - [Kevin O'Neill](https://github.com/kevinoneill) 13 | - [Zach Waldowski](https://github.com/zwaldowski) 14 | 15 | @warning UIControl is only available on a platform with UIKit. 16 | */ 17 | @interface UIControl (BlocksKit) 18 | 19 | ///----------------------------------- 20 | /// @name Block event handling 21 | ///----------------------------------- 22 | 23 | /** Adds a block for a particular event to an internal dispatch table. 24 | 25 | @param handler A block representing an action message, with an argument for the sender. 26 | @param controlEvents A bitmask specifying the control events for which the action message is sent. 27 | @see removeEventHandlersForControlEvents: 28 | */ 29 | - (void)bk_addEventHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents; 30 | 31 | /** Removes all blocks for a particular event combination. 32 | @param controlEvents A bitmask specifying the control events for which the block will be removed. 33 | @see addEventHandler:forControlEvents: 34 | */ 35 | - (void)bk_removeEventHandlersForControlEvents:(UIControlEvents)controlEvents; 36 | 37 | /** Checks to see if the control has any blocks for a particular event combination. 38 | @param controlEvents A bitmask specifying the control events for which to check for blocks. 39 | @see addEventHandler:forControlEvents: 40 | @return Returns YES if there are blocks for these control events, NO otherwise. 41 | */ 42 | - (BOOL)bk_hasEventHandlersForControlEvents:(UIControlEvents)controlEvents; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImagePickerController+BlocksKit.h 3 | // BlocksKit 4 | // 5 | // Contributed by Yas Kuraishi. 6 | // 7 | 8 | #import 9 | 10 | /** UIImagePickerController with block callback. 11 | 12 | Created by [Yas Kuraishi](https://github.com/YasKuraishi) and contributed to 13 | BlocksKit. 14 | 15 | @warning UIImagePickerController is only available on a platform with 16 | UIKit. 17 | */ 18 | @interface UIImagePickerController (BlocksKit) 19 | 20 | /** 21 | * The block that fires after the receiver finished picking up an image 22 | */ 23 | @property (nonatomic, copy) void(^bk_didFinishPickingMediaBlock)(UIImagePickerController *, NSDictionary *); 24 | 25 | /** 26 | * The block that fires after the user cancels out of picker 27 | */ 28 | @property (nonatomic, copy) void(^bk_didCancelBlock)(UIImagePickerController *); 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIPopoverController+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block functionality for UIPopoverController. 9 | 10 | Created by [Alexsander Akers](https://github.com/a2) and contributed to BlocksKit. 11 | 12 | @warning UIPopovercontroller is only available on a platform with UIKit. 13 | */ 14 | @interface UIPopoverController (BlocksKit) 15 | 16 | /** The block to be called when the popover controller will dismiss the popover. Return NO to prevent the dismissal of the view. */ 17 | @property (nonatomic, copy, setter = bk_setShouldDismissBlock:) BOOL (^bk_shouldDismissBlock)(UIPopoverController *popoverController); 18 | 19 | /** The block to be called when the user has taken action to dismiss the popover. This is not called when -dismissPopoverAnimated: is called directly. */ 20 | @property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIPopoverController *popoverController); 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIPopoverController+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "A2DynamicDelegate.h" 7 | #import "NSObject+A2BlockDelegate.h" 8 | #import "UIPopoverController+BlocksKit.h" 9 | 10 | #pragma mark - Delegate 11 | 12 | @interface A2DynamicUIPopoverControllerDelegate : A2DynamicDelegate 13 | 14 | @end 15 | 16 | @implementation A2DynamicUIPopoverControllerDelegate 17 | 18 | - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 19 | { 20 | BOOL should = YES; 21 | 22 | id realDelegate = self.realDelegate; 23 | if (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerShouldDismissPopover:)]) 24 | should &= [realDelegate popoverControllerShouldDismissPopover:popoverController]; 25 | 26 | BOOL (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd]; 27 | if (block) should &= block(popoverController); 28 | 29 | return should; 30 | } 31 | 32 | - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 33 | { 34 | id realDelegate = self.realDelegate; 35 | if (realDelegate && [realDelegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)]) 36 | [realDelegate popoverControllerDidDismissPopover:popoverController]; 37 | 38 | void (^block)(UIPopoverController *) = [self blockImplementationForMethod:_cmd]; 39 | if (block) block(popoverController); 40 | } 41 | 42 | @end 43 | 44 | #pragma mark - Category 45 | 46 | @implementation UIPopoverController (BlocksKit) 47 | 48 | @dynamic bk_didDismissBlock, bk_shouldDismissBlock; 49 | 50 | + (void)load 51 | { 52 | @autoreleasepool { 53 | [self bk_registerDynamicDelegate]; 54 | [self bk_linkDelegateMethods:@{ @"bk_didDismissBlock": @"popoverControllerDidDismissPopover:", @"bk_shouldDismissBlock": @"popoverControllerShouldDismissPopover:" }]; 55 | } 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIView+BlocksKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BlocksKit.m 3 | // BlocksKit 4 | // 5 | 6 | #import "UIGestureRecognizer+BlocksKit.h" 7 | #import "UIView+BlocksKit.h" 8 | 9 | @implementation UIView (BlocksKit) 10 | 11 | - (void)bk_whenTouches:(NSUInteger)numberOfTouches tapped:(NSUInteger)numberOfTaps handler:(void (^)(void))block 12 | { 13 | if (!block) return; 14 | 15 | UITapGestureRecognizer *gesture = [UITapGestureRecognizer bk_recognizerWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) { 16 | if (state == UIGestureRecognizerStateRecognized) block(); 17 | }]; 18 | 19 | gesture.numberOfTouchesRequired = numberOfTouches; 20 | gesture.numberOfTapsRequired = numberOfTaps; 21 | 22 | [self.gestureRecognizers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 23 | if (![obj isKindOfClass:[UITapGestureRecognizer class]]) return; 24 | 25 | UITapGestureRecognizer *tap = obj; 26 | BOOL rightTouches = (tap.numberOfTouchesRequired == numberOfTouches); 27 | BOOL rightTaps = (tap.numberOfTapsRequired == numberOfTaps); 28 | if (rightTouches && rightTaps) { 29 | [gesture requireGestureRecognizerToFail:tap]; 30 | } 31 | }]; 32 | 33 | [self addGestureRecognizer:gesture]; 34 | } 35 | 36 | - (void)bk_whenTapped:(void (^)(void))block 37 | { 38 | [self bk_whenTouches:1 tapped:1 handler:block]; 39 | } 40 | 41 | - (void)bk_whenDoubleTapped:(void (^)(void))block 42 | { 43 | [self bk_whenTouches:2 tapped:1 handler:block]; 44 | } 45 | 46 | - (void)bk_eachSubview:(void (^)(UIView *subview))block 47 | { 48 | NSParameterAssert(block != nil); 49 | 50 | [self.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) { 51 | block(subview); 52 | }]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Pods/BlocksKit/BlocksKit/UIKit/UIWebView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIWebView+BlocksKit.h 3 | // BlocksKit 4 | // 5 | 6 | #import 7 | 8 | /** Block callbacks for UIWebView. 9 | 10 | @warning UIWebView is only available on a platform with UIKit. 11 | */ 12 | 13 | @interface UIWebView (BlocksKit) 14 | 15 | /** The block to be decide whether a URL will be loaded. 16 | 17 | @warning If the delegate implements webView:shouldStartLoadWithRequest:navigationType:, 18 | the return values of both the delegate method and the block will be considered. 19 | */ 20 | @property (nonatomic, copy, setter = bk_setShouldStartLoadBlock:) BOOL (^bk_shouldStartLoadBlock)(UIWebView *webView, NSURLRequest *request, UIWebViewNavigationType navigationType); 21 | 22 | /** The block that is fired when the web view starts loading. */ 23 | @property (nonatomic, copy, setter = bk_setDidStartLoadBlock:) void (^bk_didStartLoadBlock)(UIWebView *webView); 24 | 25 | /** The block that is fired when the web view finishes loading. */ 26 | @property (nonatomic, copy, setter = bk_setDidFinishLoadBlock:) void (^bk_didFinishLoadBlock)(UIWebView *webView); 27 | 28 | /** The block that is fired when the web view stops loading due to an error. */ 29 | @property (nonatomic, copy, setter = bk_setDidFinishWithErrorBlock:) void (^bk_didFinishWithErrorBlock)(UIWebView *webView, NSError *error); 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Pods/BlocksKit/LICENSE: -------------------------------------------------------------------------------- 1 | // 2 | // LICENSE 3 | // BlocksKit 4 | // 5 | 6 | Copyright (c) 2011-2014 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 13 | -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/A2BlockInvocation.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/A2BlockInvocation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/A2DynamicDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/A2DynamicDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/BKMacros.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/BKMacros.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/BlocksKit+MessageUI.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit+MessageUI.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/BlocksKit+UIKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit+UIKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/MFMailComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/MFMessageComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSArray+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSArray+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSCache+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSDictionary+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSDictionary+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSIndexSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSIndexSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSInvocation+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSMutableArray+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSMutableDictionary+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSMutableIndexSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSMutableOrderedSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSMutableSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSObject+A2BlockDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSObject+A2DynamicDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSObject+BKAssociatedObjects.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKAssociatedObjects.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSObject+BKBlockExecution.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKBlockExecution.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSObject+BKBlockObservation.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKBlockObservation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSOrderedSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSOrderedSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSTimer+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/NSURLConnection+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIActionSheet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIActionSheet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIAlertView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIAlertView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIBarButtonItem+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIControl+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIControl+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIGestureRecognizer+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIImagePickerController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIPopoverController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UITextField+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BlocksKit/UIWebView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIWebView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/ALView+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/ALView+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/NSArray+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/NSLayoutConstraint+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/PureLayout+Internal.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayout+Internal.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Private/PureLayout/PureLayoutDefines.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayoutDefines.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSBezierPath+RoundedCorners.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/NSBezierPath+RoundedCorners.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/NSImage+Compatibility.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSImage+Compatibility.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImage.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAnimatedImageView.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDAsyncBlockOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDDiskCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDDiskCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageAssetManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageAssetManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCacheConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCacheDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCachesManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCachesManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCachesManagerOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCoderHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoderHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageCodersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCodersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageFrame.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGIFCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGraphics.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageHEICCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageHEICCoderInternal.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageHEICCoderInternal.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOAnimatedCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOAnimatedCoderInternal.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageLoader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoader.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoadersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDImageTransformer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageTransformer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDInternalMacros.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDInternalMacros.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDMemoryCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDMemoryCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWeakProxy.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDWeakProxy.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/WebImage/SDWebImage.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageDownloaderRequestModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageError.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageError.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageIndicator.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageIndicator.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageOptionsProcessor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDWebImageTransition.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageTransition.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/SDmetamacros.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/SDmetamacros.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIColor+HexString.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Private/UIColor+HexString.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+Metadata.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Metadata.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImage+Transform.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Transform.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SVProgressHUD/SVIndefiniteAnimatedView.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SVProgressHUD/SVProgressAnimatedView.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SVProgressHUD/SVProgressHUD.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVProgressHUD.h -------------------------------------------------------------------------------- /Pods/Headers/Private/SVProgressHUD/SVRadialGradientLayer.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/A2BlockInvocation.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/A2BlockInvocation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/A2DynamicDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/A2DynamicDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/BKMacros.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/BKMacros.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/BlocksKit+MessageUI.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit+MessageUI.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/BlocksKit+UIKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit+UIKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/MFMailComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/MFMessageComposeViewController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSArray+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSArray+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSCache+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSDictionary+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSDictionary+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSIndexSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSIndexSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSInvocation+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSInvocation+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSMutableArray+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableArray+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSMutableDictionary+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableDictionary+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSMutableIndexSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSMutableOrderedSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSMutableSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSMutableSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSObject+A2BlockDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSObject+A2DynamicDelegate.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSObject+BKAssociatedObjects.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKAssociatedObjects.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSObject+BKBlockExecution.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKBlockExecution.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSObject+BKBlockObservation.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSObject+BKBlockObservation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSOrderedSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSOrderedSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSSet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSSet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSTimer+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/Core/NSTimer+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/NSURLConnection+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIActionSheet+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIActionSheet+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIAlertView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIAlertView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIBarButtonItem+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIControl+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIControl+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIGestureRecognizer+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIImagePickerController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIPopoverController+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIPopoverController+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UITextField+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UITextField+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BlocksKit/UIWebView+BlocksKit.h: -------------------------------------------------------------------------------- 1 | ../../../BlocksKit/BlocksKit/UIKit/UIWebView+BlocksKit.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/ALView+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/ALView+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/NSArray+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/NSLayoutConstraint+PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/PureLayout+Internal.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayout+Internal.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/PureLayout.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayout.h -------------------------------------------------------------------------------- /Pods/Headers/Public/PureLayout/PureLayoutDefines.h: -------------------------------------------------------------------------------- 1 | ../../../PureLayout/PureLayout/PureLayout/PureLayoutDefines.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSData+ImageContentType.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/NSImage+Compatibility.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/NSImage+Compatibility.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImage.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDAnimatedImageView.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDAnimatedImageView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDDiskCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDDiskCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCacheConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCacheDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCacheDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCachesManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCachesManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCoderHelper.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCoderHelper.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageCodersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageCodersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageFrame.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGIFCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageGraphics.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageHEICCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageIOAnimatedCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageIOCoder.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageLoader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoader.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageLoadersManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDImageTransformer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDImageTransformer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDMemoryCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDMemoryCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImage.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/WebImage/SDWebImage.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageCompat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageCompat.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDefine.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDefine.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloader.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderConfig.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageDownloaderRequestModifier.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageError.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageError.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageIndicator.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageIndicator.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageManager.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageOptionsProcessor.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/SDWebImageTransition.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/SDWebImageTransition.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIButton+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIButton+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+GIF.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+Metadata.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Metadata.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImage+Transform.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImage+Transform.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIImageView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIView+WebCache.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCache.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | ../../../SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SVProgressHUD/SVIndefiniteAnimatedView.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SVProgressHUD/SVProgressAnimatedView.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SVProgressHUD/SVProgressHUD.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVProgressHUD.h -------------------------------------------------------------------------------- /Pods/Headers/Public/SVProgressHUD/SVRadialGradientLayer.h: -------------------------------------------------------------------------------- 1 | ../../../SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BlocksKit (2.2.5): 3 | - BlocksKit/All (= 2.2.5) 4 | - BlocksKit/All (2.2.5): 5 | - BlocksKit/Core 6 | - BlocksKit/DynamicDelegate 7 | - BlocksKit/MessageUI 8 | - BlocksKit/UIKit 9 | - BlocksKit/Core (2.2.5) 10 | - BlocksKit/DynamicDelegate (2.2.5) 11 | - BlocksKit/MessageUI (2.2.5): 12 | - BlocksKit/Core 13 | - BlocksKit/DynamicDelegate 14 | - BlocksKit/UIKit (2.2.5): 15 | - BlocksKit/Core 16 | - BlocksKit/DynamicDelegate 17 | - PureLayout (3.1.5) 18 | - SDWebImage (5.2.3): 19 | - SDWebImage/Core (= 5.2.3) 20 | - SDWebImage/Core (5.2.3) 21 | - SVProgressHUD (2.2.5) 22 | 23 | DEPENDENCIES: 24 | - BlocksKit 25 | - PureLayout 26 | - SDWebImage 27 | - SVProgressHUD 28 | 29 | SPEC REPOS: 30 | https://github.com/cocoapods/specs.git: 31 | - BlocksKit 32 | - PureLayout 33 | - SDWebImage 34 | - SVProgressHUD 35 | 36 | SPEC CHECKSUMS: 37 | BlocksKit: 7f422b971407001178d181a43b99014ea2591fe6 38 | PureLayout: 9b4ad47b2f0388c84ff534af23d96e720c1b875a 39 | SDWebImage: 46a7f73228f84ce80990c786e4372cf4db5875ce 40 | SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 41 | 42 | PODFILE CHECKSUM: 837279d33325d07020e6e3551c0b9bd26b2106a9 43 | 44 | COCOAPODS: 1.7.5 45 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/zhn.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BlocksKit.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Pods-ZHNOCParser.xcscheme 13 | 14 | isShown 15 | 16 | 17 | PureLayout.xcscheme 18 | 19 | isShown 20 | 21 | 22 | SDWebImage.xcscheme 23 | 24 | isShown 25 | 26 | 27 | SVProgressHUD.xcscheme 28 | 29 | isShown 30 | 31 | 32 | 33 | SuppressBuildableAutocreation 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Pods/PureLayout/LICENSE: -------------------------------------------------------------------------------- 1 | This code is distributed under the terms and conditions of the MIT license. 2 | 3 | Copyright (c) 2014-2015 Tyler Fox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Pods/PureLayout/PureLayout/PureLayout/PureLayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // PureLayout.h 3 | // https://github.com/PureLayout/PureLayout 4 | // 5 | // Copyright (c) 2014-2015 Tyler Fox 6 | // 7 | // This code is distributed under the terms and conditions of the MIT license. 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to 11 | // deal in the Software without restriction, including without limitation the 12 | // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 13 | // sell copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 25 | // IN THE SOFTWARE. 26 | // 27 | 28 | #ifndef PureLayout_h 29 | #define PureLayout_h 30 | 31 | #import 32 | 33 | //! Project version number for PureLayout. 34 | FOUNDATION_EXPORT double PureLayoutVersionNumber; 35 | 36 | //! Project version string for PureLayout. 37 | FOUNDATION_EXPORT const unsigned char PureLayoutVersionString[]; 38 | 39 | #import "ALView+PureLayout.h" 40 | #import "NSArray+PureLayout.h" 41 | #import "NSLayoutConstraint+PureLayout.h" 42 | 43 | #endif /* PureLayout_h */ 44 | -------------------------------------------------------------------------------- /Pods/SDWebImage/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2018 Olivier Poitrey rs@dailymotion.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | /** 14 | A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. 15 | This also fix the GIF loop count issue, which will use the Netscape standard (See http://www6.uniovi.es/gifanim/gifabout.htm) to only place once when the `kCGImagePropertyGIFLoopCount` is nil. This is what modern browser's behavior. 16 | Built in GIF coder use this instead of `NSBitmapImageRep` for better GIF rendering. If you do not want this, only enable `SDImageIOCoder`, which just call `NSImage` API and actually use `NSBitmapImageRep` for GIF image. 17 | This also support APNG format using `SDImageAPNGCoder`. Which provide full alpha-channel support and the correct duration match the `kCGImagePropertyAPNGUnclampedDelayTime`. 18 | */ 19 | @interface SDAnimatedImageRep : NSBitmapImageRep 20 | 21 | @end 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | Built in coder using ImageIO that supports APNG encoding/decoding 14 | */ 15 | @interface SDImageAPNGCoder : SDImageIOAnimatedCoder 16 | 17 | @property (nonatomic, class, readonly, nonnull) SDImageAPNGCoder *sharedCoder; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDImageCoder.h" 10 | 11 | SDImageCoderOption const SDImageCoderDecodeFirstFrameOnly = @"decodeFirstFrameOnly"; 12 | SDImageCoderOption const SDImageCoderDecodeScaleFactor = @"decodeScaleFactor"; 13 | 14 | SDImageCoderOption const SDImageCoderEncodeFirstFrameOnly = @"encodeFirstFrameOnly"; 15 | SDImageCoderOption const SDImageCoderEncodeCompressionQuality = @"encodeCompressionQuality"; 16 | 17 | SDImageCoderOption const SDImageCoderWebImageContext = @"webImageContext"; 18 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | /** 13 | This class is used for creating animated images via `animatedImageWithFrames` in `SDImageCoderHelper`. 14 | @note If you need to specify animated images loop count, use `sd_imageLoopCount` property in `UIImage+Metadata.h`. 15 | */ 16 | @interface SDImageFrame : NSObject 17 | 18 | /** 19 | The image of current frame. You should not set an animated image. 20 | */ 21 | @property (nonatomic, strong, readonly, nonnull) UIImage *image; 22 | /** 23 | The duration of current frame to be displayed. The number is seconds but not milliseconds. You should not set this to zero. 24 | */ 25 | @property (nonatomic, readonly, assign) NSTimeInterval duration; 26 | 27 | /** 28 | Create a frame instance with specify image and duration 29 | 30 | @param image current frame's image 31 | @param duration current frame's duration 32 | @return frame instance 33 | */ 34 | + (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDImageFrame.h" 10 | 11 | @interface SDImageFrame () 12 | 13 | @property (nonatomic, strong, readwrite, nonnull) UIImage *image; 14 | @property (nonatomic, readwrite, assign) NSTimeInterval duration; 15 | 16 | @end 17 | 18 | @implementation SDImageFrame 19 | 20 | + (instancetype)frameWithImage:(UIImage *)image duration:(NSTimeInterval)duration { 21 | SDImageFrame *frame = [[SDImageFrame alloc] init]; 22 | frame.image = image; 23 | frame.duration = duration; 24 | 25 | return frame; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | Built in coder using ImageIO that supports animated GIF encoding/decoding 14 | @note `SDImageIOCoder` supports GIF but only as static (will use the 1st frame). 15 | @note Use `SDImageGIFCoder` for fully animated GIFs. For `UIImageView`, it will produce animated `UIImage`(`NSImage` on macOS) for rendering. For `SDAnimatedImageView`, it will use `SDAnimatedImage` for rendering. 16 | @note The recommended approach for animated GIFs is using `SDAnimatedImage` with `SDAnimatedImageView`. It's more performant than `UIImageView` for GIF displaying(especially on memory usage) 17 | */ 18 | @interface SDImageGIFCoder : SDImageIOAnimatedCoder 19 | 20 | @property (nonatomic, class, readonly, nonnull) SDImageGIFCoder *sharedCoder; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDImageGIFCoder.h" 10 | #if SD_MAC 11 | #import 12 | #else 13 | #import 14 | #endif 15 | 16 | @implementation SDImageGIFCoder 17 | 18 | + (instancetype)sharedCoder { 19 | static SDImageGIFCoder *coder; 20 | static dispatch_once_t onceToken; 21 | dispatch_once(&onceToken, ^{ 22 | coder = [[SDImageGIFCoder alloc] init]; 23 | }); 24 | return coder; 25 | } 26 | 27 | #pragma mark - Subclass Override 28 | 29 | + (SDImageFormat)imageFormat { 30 | return SDImageFormatGIF; 31 | } 32 | 33 | + (NSString *)imageUTType { 34 | return (__bridge NSString *)kUTTypeGIF; 35 | } 36 | 37 | + (NSString *)dictionaryProperty { 38 | return (__bridge NSString *)kCGImagePropertyGIFDictionary; 39 | } 40 | 41 | + (NSString *)unclampedDelayTimeProperty { 42 | return (__bridge NSString *)kCGImagePropertyGIFUnclampedDelayTime; 43 | } 44 | 45 | + (NSString *)delayTimeProperty { 46 | return (__bridge NSString *)kCGImagePropertyGIFDelayTime; 47 | } 48 | 49 | + (NSString *)loopCountProperty { 50 | return (__bridge NSString *)kCGImagePropertyGIFLoopCount; 51 | } 52 | 53 | + (NSUInteger)defaultLoopCount { 54 | return 1; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | #import 11 | 12 | /** 13 | These following graphics context method are provided to easily write cross-platform(AppKit/UIKit) code. 14 | For UIKit, these methods just call the same method in `UIGraphics.h`. See the documentation for usage. 15 | For AppKit, these methods use `NSGraphicsContext` to create image context and match the behavior like UIKit. 16 | */ 17 | 18 | /// Returns the current graphics context. 19 | FOUNDATION_EXPORT CGContextRef __nullable SDGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED; 20 | /// Creates a bitmap-based graphics context and makes it the current context. 21 | FOUNDATION_EXPORT void SDGraphicsBeginImageContext(CGSize size); 22 | /// Creates a bitmap-based graphics context with the specified options. 23 | FOUNDATION_EXPORT void SDGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); 24 | /// Removes the current bitmap-based graphics context from the top of the stack. 25 | FOUNDATION_EXPORT void SDGraphicsEndImageContext(void); 26 | /// Returns an image based on the contents of the current bitmap-based graphics context. 27 | FOUNDATION_EXPORT UIImage * __nullable SDGraphicsGetImageFromCurrentImageContext(void); 28 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | /** 13 | This coder is used for HEIC (HEIF with HEVC container codec) image format. 14 | Image/IO provide the static HEIC (.heic) support in iOS 11/macOS 10.13/tvOS 11/watchOS 4+. 15 | Image/IO provide the animated HEIC (.heics) support in iOS 13/macOS 10.15/tvOS 13/watchOS 6+. 16 | See https://nokiatech.github.io/heif/technical.html for the standard. 17 | @note This coder is not in the default coder list for now, since HEIC animated image is really rare, and Apple's implementation still contains performance issues. You can enable if you need this. 18 | @note If you need to support lower firmware version for HEIF, you can have a try at https://github.com/SDWebImage/SDWebImageHEIFCoder 19 | */ 20 | @interface SDImageHEICCoder : SDImageIOAnimatedCoder 21 | 22 | @property (nonatomic, class, readonly, nonnull) SDImageHEICCoder *sharedCoder; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageCoder.h" 11 | 12 | /** 13 | Built in coder that supports PNG, JPEG, TIFF, includes support for progressive decoding. 14 | 15 | GIF 16 | Also supports static GIF (meaning will only handle the 1st frame). 17 | For a full GIF support, we recommend `SDAnimatedImageView` to keep both CPU and memory balanced. 18 | 19 | HEIC 20 | This coder also supports HEIC format because ImageIO supports it natively. But it depends on the system capabilities, so it won't work on all devices, see: https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf 21 | Decode(Software): !Simulator && (iOS 11 || tvOS 11 || macOS 10.13) 22 | Decode(Hardware): !Simulator && ((iOS 11 && A9Chip) || (macOS 10.13 && 6thGenerationIntelCPU)) 23 | Encode(Software): macOS 10.13 24 | Encode(Hardware): !Simulator && ((iOS 11 && A10FusionChip) || (macOS 10.13 && 6thGenerationIntelCPU)) 25 | */ 26 | @interface SDImageIOCoder : NSObject 27 | 28 | @property (nonatomic, class, readonly, nonnull) SDImageIOCoder *sharedCoder; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDImageLoader.h" 10 | 11 | /** 12 | A loaders manager to manage multiple loaders 13 | */ 14 | @interface SDImageLoadersManager : NSObject 15 | 16 | /** 17 | Returns the global shared loaders manager instance. By default we will set [`SDWebImageDownloader.sharedDownloader`] into the loaders array. 18 | */ 19 | @property (nonatomic, class, readonly, nonnull) SDImageLoadersManager *sharedManager; 20 | 21 | /** 22 | All image loaders in manager. The loaders array is a priority queue, which means the later added loader will have the highest priority 23 | */ 24 | @property (nonatomic, copy, nullable) NSArray>* loaders; 25 | 26 | /** 27 | Add a new image loader to the end of loaders array. Which has the highest priority. 28 | 29 | @param loader loader 30 | */ 31 | - (void)addLoader:(nonnull id)loader; 32 | 33 | /** 34 | Remove a image loader in the loaders array. 35 | 36 | @param loader loader 37 | */ 38 | - (void)removeLoader:(nonnull id)loader; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _Nonnull url); 13 | 14 | /** 15 | This is the protocol for cache key filter. 16 | We can use a block to specify the cache key filter. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. 17 | */ 18 | @protocol SDWebImageCacheKeyFilter 19 | 20 | - (nullable NSString *)cacheKeyForURL:(nonnull NSURL *)url; 21 | 22 | @end 23 | 24 | /** 25 | A cache key filter class with block. 26 | */ 27 | @interface SDWebImageCacheKeyFilter : NSObject 28 | 29 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; 30 | + (nonnull instancetype)cacheKeyFilterWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCacheKeyFilter.h" 10 | 11 | @interface SDWebImageCacheKeyFilter () 12 | 13 | @property (nonatomic, copy, nonnull) SDWebImageCacheKeyFilterBlock block; 14 | 15 | @end 16 | 17 | @implementation SDWebImageCacheKeyFilter 18 | 19 | - (instancetype)initWithBlock:(SDWebImageCacheKeyFilterBlock)block { 20 | self = [super init]; 21 | if (self) { 22 | self.block = block; 23 | } 24 | return self; 25 | } 26 | 27 | + (instancetype)cacheKeyFilterWithBlock:(SDWebImageCacheKeyFilterBlock)block { 28 | SDWebImageCacheKeyFilter *cacheKeyFilter = [[SDWebImageCacheKeyFilter alloc] initWithBlock:block]; 29 | return cacheKeyFilter; 30 | } 31 | 32 | - (NSString *)cacheKeyForURL:(NSURL *)url { 33 | if (!self.block) { 34 | return nil; 35 | } 36 | return self.block(url); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull image, NSData * _Nullable data, NSURL * _Nullable imageURL); 13 | 14 | /** 15 | This is the protocol for cache serializer. 16 | We can use a block to specify the cache serializer. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. 17 | */ 18 | @protocol SDWebImageCacheSerializer 19 | 20 | - (nullable NSData *)cacheDataWithImage:(nonnull UIImage *)image originalData:(nullable NSData *)data imageURL:(nullable NSURL *)imageURL; 21 | 22 | @end 23 | 24 | /** 25 | A cache serializer class with block. 26 | */ 27 | @interface SDWebImageCacheSerializer : NSObject 28 | 29 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; 30 | + (nonnull instancetype)cacheSerializerWithBlock:(nonnull SDWebImageCacheSerializerBlock)block; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCacheSerializer.h" 10 | 11 | @interface SDWebImageCacheSerializer () 12 | 13 | @property (nonatomic, copy, nonnull) SDWebImageCacheSerializerBlock block; 14 | 15 | @end 16 | 17 | @implementation SDWebImageCacheSerializer 18 | 19 | - (instancetype)initWithBlock:(SDWebImageCacheSerializerBlock)block { 20 | self = [super init]; 21 | if (self) { 22 | self.block = block; 23 | } 24 | return self; 25 | } 26 | 27 | + (instancetype)cacheSerializerWithBlock:(SDWebImageCacheSerializerBlock)block { 28 | SDWebImageCacheSerializer *cacheSerializer = [[SDWebImageCacheSerializer alloc] initWithBlock:block]; 29 | return cacheSerializer; 30 | } 31 | 32 | - (NSData *)cacheDataWithImage:(UIImage *)image originalData:(NSData *)data imageURL:(nullable NSURL *)imageURL { 33 | if (!self.block) { 34 | return nil; 35 | } 36 | return self.block(image, data, imageURL); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if !__has_feature(objc_arc) 12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag 13 | #endif 14 | 15 | #if !OS_OBJECT_USE_OBJC 16 | #error SDWebImage need ARC for dispatch object 17 | #endif 18 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageDownloaderConfig.h" 10 | 11 | static SDWebImageDownloaderConfig * _defaultDownloaderConfig; 12 | 13 | @implementation SDWebImageDownloaderConfig 14 | 15 | + (SDWebImageDownloaderConfig *)defaultDownloaderConfig { 16 | static dispatch_once_t onceToken; 17 | dispatch_once(&onceToken, ^{ 18 | _defaultDownloaderConfig = [SDWebImageDownloaderConfig new]; 19 | }); 20 | return _defaultDownloaderConfig; 21 | } 22 | 23 | - (instancetype)init { 24 | self = [super init]; 25 | if (self) { 26 | _maxConcurrentDownloads = 6; 27 | _downloadTimeout = 15.0; 28 | _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; 29 | } 30 | return self; 31 | } 32 | 33 | - (id)copyWithZone:(NSZone *)zone { 34 | SDWebImageDownloaderConfig *config = [[[self class] allocWithZone:zone] init]; 35 | config.maxConcurrentDownloads = self.maxConcurrentDownloads; 36 | config.downloadTimeout = self.downloadTimeout; 37 | config.minimumProgressInterval = self.minimumProgressInterval; 38 | config.sessionConfiguration = [self.sessionConfiguration copyWithZone:zone]; 39 | config.operationClass = self.operationClass; 40 | config.executionOrder = self.executionOrder; 41 | config.urlCredential = self.urlCredential; 42 | config.username = self.username; 43 | config.password = self.password; 44 | 45 | return config; 46 | } 47 | 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBlock)(NSURLRequest * _Nonnull request); 13 | 14 | /** 15 | This is the protocol for downloader request modifier. 16 | We can use a block to specify the downloader request modifier. But Using protocol can make this extensible, and allow Swift user to use it easily instead of using `@convention(block)` to store a block into context options. 17 | */ 18 | @protocol SDWebImageDownloaderRequestModifier 19 | 20 | - (nullable NSURLRequest *)modifiedRequestWithRequest:(nonnull NSURLRequest *)request; 21 | 22 | @end 23 | 24 | /** 25 | A downloader request modifier class with block. 26 | */ 27 | @interface SDWebImageDownloaderRequestModifier : NSObject 28 | 29 | - (nonnull instancetype)initWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; 30 | + (nonnull instancetype)requestModifierWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageDownloaderRequestModifier.h" 10 | 11 | @interface SDWebImageDownloaderRequestModifier () 12 | 13 | @property (nonatomic, copy, nonnull) SDWebImageDownloaderRequestModifierBlock block; 14 | 15 | @end 16 | 17 | @implementation SDWebImageDownloaderRequestModifier 18 | 19 | - (instancetype)initWithBlock:(SDWebImageDownloaderRequestModifierBlock)block { 20 | self = [super init]; 21 | if (self) { 22 | self.block = block; 23 | } 24 | return self; 25 | } 26 | 27 | + (instancetype)requestModifierWithBlock:(SDWebImageDownloaderRequestModifierBlock)block { 28 | SDWebImageDownloaderRequestModifier *requestModifier = [[SDWebImageDownloaderRequestModifier alloc] initWithBlock:block]; 29 | return requestModifier; 30 | } 31 | 32 | - (NSURLRequest *)modifiedRequestWithRequest:(NSURLRequest *)request { 33 | if (!self.block) { 34 | return nil; 35 | } 36 | return self.block(request); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Jamie Pinkham 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageCompat.h" 11 | 12 | FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; 13 | 14 | /// The HTTP status code for invalid download response (NSNumber *) 15 | FOUNDATION_EXPORT NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey; 16 | 17 | /// SDWebImage error domain and codes 18 | typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) { 19 | SDWebImageErrorInvalidURL = 1000, // The URL is invalid, such as nil URL or corrupted URL 20 | SDWebImageErrorBadImageData = 1001, // The image data can not be decoded to image, or the image data is empty 21 | SDWebImageErrorCacheNotModified = 1002, // The remote location specify that the cached image is not modified, such as the HTTP response 304 code. It's useful for `SDWebImageRefreshCached` 22 | SDWebImageErrorInvalidDownloadOperation = 2000, // The image download operation is invalid, such as nil operation or unexpected error occur when operation initialized 23 | SDWebImageErrorInvalidDownloadStatusCode = 2001, // The image download response a invalid status code. You can check the status code in error's userInfo under `SDWebImageErrorDownloadStatusCodeKey` 24 | SDWebImageErrorCancelled = 2002, // The image loading operation is cancelled before finished, during either async disk cache query, or waiting before actual network request. For actual network request error, check `NSURLErrorDomain` error domain and code. 25 | }; 26 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Jamie Pinkham 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageError.h" 11 | 12 | NSErrorDomain const _Nonnull SDWebImageErrorDomain = @"SDWebImageErrorDomain"; 13 | NSErrorUserInfoKey const _Nonnull SDWebImageErrorDownloadStatusCodeKey = @"SDWebImageErrorDownloadStatusCodeKey"; 14 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | 11 | /// A protocol represents cancelable operation. 12 | @protocol SDWebImageOperation 13 | 14 | - (void)cancel; 15 | 16 | @end 17 | 18 | /// NSOperation conform to `SDWebImageOperation`. 19 | @interface NSOperation (SDWebImageOperation) 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageOptionsProcessor.h" 10 | 11 | @interface SDWebImageOptionsResult () 12 | 13 | @property (nonatomic, assign) SDWebImageOptions options; 14 | @property (nonatomic, copy, nullable) SDWebImageContext *context; 15 | 16 | @end 17 | 18 | @implementation SDWebImageOptionsResult 19 | 20 | - (instancetype)initWithOptions:(SDWebImageOptions)options context:(SDWebImageContext *)context { 21 | self = [super init]; 22 | if (self) { 23 | self.options = options; 24 | self.context = context; 25 | } 26 | return self; 27 | } 28 | 29 | @end 30 | 31 | @interface SDWebImageOptionsProcessor () 32 | 33 | @property (nonatomic, copy, nonnull) SDWebImageOptionsProcessorBlock block; 34 | 35 | @end 36 | 37 | @implementation SDWebImageOptionsProcessor 38 | 39 | - (instancetype)initWithBlock:(SDWebImageOptionsProcessorBlock)block { 40 | self = [super init]; 41 | if (self) { 42 | self.block = block; 43 | } 44 | return self; 45 | } 46 | 47 | + (instancetype)optionsProcessorWithBlock:(SDWebImageOptionsProcessorBlock)block { 48 | SDWebImageOptionsProcessor *optionsProcessor = [[SDWebImageOptionsProcessor alloc] initWithBlock:block]; 49 | return optionsProcessor; 50 | } 51 | 52 | - (SDWebImageOptionsResult *)processedResultForURL:(NSURL *)url options:(SDWebImageOptions)options context:(SDWebImageContext *)context { 53 | if (!self.block) { 54 | return nil; 55 | } 56 | return self.block(url, options, context); 57 | } 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | /** 12 | UIImage category about force decode feature (avoid Image/IO's lazy decoding during rendering behavior). 13 | */ 14 | @interface UIImage (ForceDecode) 15 | 16 | /** 17 | A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. 18 | */ 19 | @property (nonatomic, assign) BOOL sd_isDecoded; 20 | 21 | /** 22 | Decode the provided image. This is useful if you want to force decode the image before rendering to improve performance. 23 | 24 | @param image The image to be decoded 25 | @return The decoded image 26 | */ 27 | + (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image; 28 | 29 | /** 30 | Decode and scale down the provided image 31 | 32 | @param image The image to be decoded 33 | @return The decoded and scaled down image 34 | */ 35 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image; 36 | 37 | /** 38 | Decode and scale down the provided image with limit bytes 39 | 40 | @param image The image to be decoded 41 | @param bytes The limit bytes size. Provide 0 to use the build-in limit. 42 | @return The decoded and scaled down image 43 | */ 44 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIImage+ForceDecode.h" 10 | #import "SDImageCoderHelper.h" 11 | #import "objc/runtime.h" 12 | 13 | @implementation UIImage (ForceDecode) 14 | 15 | - (BOOL)sd_isDecoded { 16 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_isDecoded)); 17 | return value.boolValue; 18 | } 19 | 20 | - (void)setSd_isDecoded:(BOOL)sd_isDecoded { 21 | objc_setAssociatedObject(self, @selector(sd_isDecoded), @(sd_isDecoded), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 22 | } 23 | 24 | + (nullable UIImage *)sd_decodedImageWithImage:(nullable UIImage *)image { 25 | if (!image) { 26 | return nil; 27 | } 28 | return [SDImageCoderHelper decodedImageWithImage:image]; 29 | } 30 | 31 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image { 32 | return [self sd_decodedAndScaledDownImageWithImage:image limitBytes:0]; 33 | } 34 | 35 | + (nullable UIImage *)sd_decodedAndScaledDownImageWithImage:(nullable UIImage *)image limitBytes:(NSUInteger)bytes { 36 | if (!image) { 37 | return nil; 38 | } 39 | return [SDImageCoderHelper decodedAndScaledDownImageWithImage:image limitBytes:bytes]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "SDWebImageCompat.h" 11 | 12 | /** 13 | This category is just use as a convenience method. For more detail control, use methods in `UIImage+MultiFormat.h` or directlly use `SDImageCoder`. 14 | */ 15 | @interface UIImage (GIF) 16 | 17 | /** 18 | Creates an animated UIImage from an NSData. 19 | This will create animated image if the data is Animated GIF. And will create a static image is the data is Static GIF. 20 | 21 | @param data The GIF data 22 | @return The created image 23 | */ 24 | + (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * (c) Laurin Brandner 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | 10 | #import "UIImage+GIF.h" 11 | #import "SDImageGIFCoder.h" 12 | 13 | @implementation UIImage (GIF) 14 | 15 | + (nullable UIImage *)sd_imageWithGIFData:(nullable NSData *)data { 16 | if (!data) { 17 | return nil; 18 | } 19 | return [[SDImageGIFCoder sharedCoder] decodedImageWithData:data options:0]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | /** 12 | UIImage category for memory cache cost. 13 | */ 14 | @interface UIImage (MemoryCacheCost) 15 | 16 | /** 17 | The memory cache cost for specify image used by image cache. The cost function is the bytes size held in memory. 18 | If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost. 19 | 20 | For `UIImage`, this method return the single frame bytes size when `image.images` is nil for static image. Retuen full frame bytes size when `image.images` is not nil for animated image. 21 | For `NSImage`, this method return the single frame bytes size because `NSImage` does not store all frames in memory. 22 | @note Note that because of the limitations of category this property can get out of sync if you create another instance with CGImage or other methods. 23 | @note For custom animated class conforms to `SDAnimatedImage`, you can override this getter method in your subclass to return a more proper value instead, which representing the current frame's total bytes. 24 | */ 25 | @property (assign, nonatomic) NSUInteger sd_memoryCost; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIImage+MemoryCacheCost.h" 10 | #import "objc/runtime.h" 11 | #import "NSImage+Compatibility.h" 12 | 13 | FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) { 14 | CGImageRef imageRef = image.CGImage; 15 | if (!imageRef) { 16 | return 0; 17 | } 18 | NSUInteger bytesPerFrame = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef); 19 | NSUInteger frameCount; 20 | #if SD_MAC 21 | frameCount = 1; 22 | #elif SD_UIKIT || SD_WATCH 23 | frameCount = image.images.count > 0 ? image.images.count : 1; 24 | #endif 25 | NSUInteger cost = bytesPerFrame * frameCount; 26 | return cost; 27 | } 28 | 29 | @implementation UIImage (MemoryCacheCost) 30 | 31 | - (NSUInteger)sd_memoryCost { 32 | NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost)); 33 | NSUInteger memoryCost; 34 | if (value != nil) { 35 | memoryCost = [value unsignedIntegerValue]; 36 | } else { 37 | memoryCost = SDMemoryCacheCostForImage(self); 38 | } 39 | return memoryCost; 40 | } 41 | 42 | - (void)setSd_memoryCost:(NSUInteger)sd_memoryCost { 43 | objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | #import "SDWebImageOperation.h" 11 | 12 | /** 13 | These methods are used to support canceling for UIView image loading, it's designed to be used internal but not external. 14 | All the stored operations are weak, so it will be dalloced after image loading finished. If you need to store operations, use your own class to keep a strong reference for them. 15 | */ 16 | @interface UIView (WebCacheOperation) 17 | 18 | /** 19 | * Get the image load operation for key 20 | * 21 | * @param key key for identifying the operations 22 | * @return the image load operation 23 | */ 24 | - (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key; 25 | 26 | /** 27 | * Set the image load operation (storage in a UIView based weak map table) 28 | * 29 | * @param operation the operation 30 | * @param key key for storing the operation 31 | */ 32 | - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; 33 | 34 | /** 35 | * Cancel all operations for the current UIView and key 36 | * 37 | * @param key key for identifying the operations 38 | */ 39 | - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; 40 | 41 | /** 42 | * Just remove the operations corresponding to the current UIView and key without cancelling them 43 | * 44 | * @param key key for identifying the operations 45 | */ 46 | - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/NSBezierPath+RoundedCorners.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | #if SD_MAC 12 | 13 | #import "UIImage+Transform.h" 14 | 15 | @interface NSBezierPath (RoundedCorners) 16 | 17 | /** 18 | Convenience way to create a bezier path with the specify rounding corners on macOS. Same as the one on `UIBezierPath`. 19 | */ 20 | + (nonnull instancetype)sd_bezierPathWithRoundedRect:(NSRect)rect byRoundingCorners:(SDRectCorner)corners cornerRadius:(CGFloat)cornerRadius; 21 | 22 | @end 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | @class SDAsyncBlockOperation; 12 | typedef void (^SDAsyncBlock)(SDAsyncBlockOperation * __nonnull asyncOperation); 13 | 14 | @interface SDAsyncBlockOperation : NSOperation 15 | 16 | - (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block; 17 | + (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block; 18 | - (void)complete; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDAsyncBlockOperation.h" 10 | 11 | @interface SDAsyncBlockOperation () 12 | 13 | @property (assign, nonatomic, getter = isExecuting) BOOL executing; 14 | @property (assign, nonatomic, getter = isFinished) BOOL finished; 15 | @property (nonatomic, copy, nonnull) SDAsyncBlock executionBlock; 16 | 17 | @end 18 | 19 | @implementation SDAsyncBlockOperation 20 | 21 | @synthesize executing = _executing; 22 | @synthesize finished = _finished; 23 | 24 | - (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block { 25 | self = [super init]; 26 | if (self) { 27 | self.executionBlock = block; 28 | } 29 | return self; 30 | } 31 | 32 | + (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block { 33 | SDAsyncBlockOperation *operation = [[SDAsyncBlockOperation alloc] initWithBlock:block]; 34 | return operation; 35 | } 36 | 37 | - (void)start { 38 | if (self.isCancelled) { 39 | return; 40 | } 41 | 42 | [self willChangeValueForKey:@"isExecuting"]; 43 | self.executing = YES; 44 | [self didChangeValueForKey:@"isExecuting"]; 45 | 46 | if (self.executionBlock) { 47 | self.executionBlock(self); 48 | } else { 49 | [self complete]; 50 | } 51 | } 52 | 53 | - (void)cancel { 54 | [super cancel]; 55 | [self complete]; 56 | } 57 | 58 | - (void)complete { 59 | [self willChangeValueForKey:@"isExecuting"]; 60 | [self willChangeValueForKey:@"isFinished"]; 61 | self.executing = NO; 62 | self.finished = YES; 63 | [self didChangeValueForKey:@"isExecuting"]; 64 | [self didChangeValueForKey:@"isFinished"]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | // Apple parse the Asset Catalog compiled file(`Assets.car`) by CoreUI.framework, however it's a private framework and there are no other ways to directly get the data. So we just process the normal bundle files :) 13 | 14 | @interface SDImageAssetManager : NSObject 15 | 16 | @property (nonatomic, strong, nonnull) NSMapTable *imageTable; 17 | 18 | + (nonnull instancetype)sharedAssetManager; 19 | - (nullable NSString *)getPathForName:(nonnull NSString *)name bundle:(nonnull NSBundle *)bundle preferredScale:(nonnull CGFloat *)scale; 20 | - (nullable UIImage *)imageForName:(nonnull NSString *)name; 21 | - (void)storeImage:(nonnull UIImage *)image forName:(nonnull NSString *)name; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | // This is used for operation management, but not for operation queue execute 13 | @interface SDImageCachesManagerOperation : NSOperation 14 | 15 | @property (nonatomic, assign, readonly) NSUInteger pendingCount; 16 | 17 | - (void)beginWithTotalCount:(NSUInteger)totalCount; 18 | - (void)completeOne; 19 | - (void)done; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageHEICCoderInternal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageHEICCoder.h" 11 | 12 | // AVFileTypeHEIC/AVFileTypeHEIF is defined in AVFoundation via iOS 11, we use this without import AVFoundation 13 | #define kSDUTTypeHEIC ((__bridge CFStringRef)@"public.heic") 14 | #define kSDUTTypeHEIF ((__bridge CFStringRef)@"public.heif") 15 | // HEIC Sequence (Animated Image) 16 | #define kSDUTTypeHEICS ((__bridge CFStringRef)@"public.heics") 17 | 18 | @interface SDImageHEICCoder () 19 | 20 | + (BOOL)canDecodeFromHEICFormat; 21 | + (BOOL)canDecodeFromHEIFFormat; 22 | + (BOOL)canEncodeToHEICFormat; 23 | + (BOOL)canEncodeToHEIFFormat; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDImageIOAnimatedCoder.h" 11 | 12 | @interface SDImageIOAnimatedCoder () 13 | 14 | + (NSTimeInterval)frameDurationAtIndex:(NSUInteger)index source:(nonnull CGImageSourceRef)source; 15 | + (NSUInteger)imageLoopCountWithSource:(nonnull CGImageSourceRef)source; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDmetamacros.h" 11 | 12 | #ifndef SD_LOCK 13 | #define SD_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER); 14 | #endif 15 | 16 | #ifndef SD_UNLOCK 17 | #define SD_UNLOCK(lock) dispatch_semaphore_signal(lock); 18 | #endif 19 | 20 | #ifndef SD_OPTIONS_CONTAINS 21 | #define SD_OPTIONS_CONTAINS(options, value) (((options) & (value)) == (value)) 22 | #endif 23 | 24 | #ifndef weakify 25 | #define weakify(...) \ 26 | sd_keywordify \ 27 | metamacro_foreach_cxt(sd_weakify_,, __weak, __VA_ARGS__) 28 | #endif 29 | 30 | #ifndef strongify 31 | #define strongify(...) \ 32 | sd_keywordify \ 33 | _Pragma("clang diagnostic push") \ 34 | _Pragma("clang diagnostic ignored \"-Wshadow\"") \ 35 | metamacro_foreach(sd_strongify_,, __VA_ARGS__) \ 36 | _Pragma("clang diagnostic pop") 37 | #endif 38 | 39 | #define sd_weakify_(INDEX, CONTEXT, VAR) \ 40 | CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR); 41 | 42 | #define sd_strongify_(INDEX, VAR) \ 43 | __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_); 44 | 45 | #if DEBUG 46 | #define sd_keywordify autoreleasepool {} 47 | #else 48 | #define sd_keywordify try {} @catch (...) {} 49 | #endif 50 | 51 | #ifndef onExit 52 | #define onExit \ 53 | sd_keywordify \ 54 | __strong sd_cleanupBlock_t metamacro_concat(sd_exitBlock_, __LINE__) __attribute__((cleanup(sd_executeCleanupBlock), unused)) = ^ 55 | #endif 56 | 57 | typedef void (^sd_cleanupBlock_t)(void); 58 | 59 | #if defined(__cplusplus) 60 | extern "C" { 61 | #endif 62 | void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block); 63 | #if defined(__cplusplus) 64 | } 65 | #endif 66 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDInternalMacros.h" 10 | 11 | void sd_executeCleanupBlock (__strong sd_cleanupBlock_t *block) { 12 | (*block)(); 13 | } 14 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import 10 | #import "SDWebImageCompat.h" 11 | 12 | @interface SDWeakProxy : NSProxy 13 | 14 | @property (nonatomic, weak, readonly, nullable) id target; 15 | 16 | - (nonnull instancetype)initWithTarget:(nonnull id)target; 17 | + (nonnull instancetype)proxyWithTarget:(nonnull id)target; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/UIColor+HexString.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "SDWebImageCompat.h" 10 | 11 | @interface UIColor (HexString) 12 | 13 | /** 14 | Convenience way to get hex string from color. The output should always be 32-bit RGBA hex string like `#00000000`. 15 | */ 16 | @property (nonatomic, copy, readonly, nonnull) NSString *sd_hexString; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/SDWebImage/SDWebImage/Private/UIColor+HexString.m: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the SDWebImage package. 3 | * (c) Olivier Poitrey 4 | * 5 | * For the full copyright and license information, please view the LICENSE 6 | * file that was distributed with this source code. 7 | */ 8 | 9 | #import "UIColor+HexString.h" 10 | 11 | @implementation UIColor (HexString) 12 | 13 | - (NSString *)sd_hexString { 14 | CGFloat red, green, blue, alpha; 15 | #if SD_UIKIT 16 | if (![self getRed:&red green:&green blue:&blue alpha:&alpha]) { 17 | [self getWhite:&red alpha:&alpha]; 18 | green = red; 19 | blue = red; 20 | } 21 | #else 22 | @try { 23 | [self getRed:&red green:&green blue:&blue alpha:&alpha]; 24 | } 25 | @catch (NSException *exception) { 26 | [self getWhite:&red alpha:&alpha]; 27 | green = red; 28 | blue = red; 29 | } 30 | #endif 31 | 32 | red = roundf(red * 255.f); 33 | green = roundf(green * 255.f); 34 | blue = roundf(blue * 255.f); 35 | alpha = roundf(alpha * 255.f); 36 | 37 | uint hex = ((uint)alpha << 24) | ((uint)red << 16) | ((uint)green << 8) | ((uint)blue); 38 | 39 | return [NSString stringWithFormat:@"#%08x", hex]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Pods/SVProgressHUD/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2011-2018 Sam Vermette, Tobias Tiemerding and contributors. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVIndefiniteAnimatedView.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Guillaume Campagna. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVIndefiniteAnimatedView : UIView 11 | 12 | @property (nonatomic, assign) CGFloat strokeThickness; 13 | @property (nonatomic, assign) CGFloat radius; 14 | @property (nonatomic, strong) UIColor *strokeColor; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVProgressAnimatedView.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2017-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVProgressAnimatedView : UIView 11 | 12 | @property (nonatomic, assign) CGFloat radius; 13 | @property (nonatomic, assign) CGFloat strokeThickness; 14 | @property (nonatomic, strong) UIColor *strokeColor; 15 | @property (nonatomic, assign) CGFloat strokeEnd; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVRadialGradientLayer.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVRadialGradientLayer : CALayer 11 | 12 | @property (nonatomic) CGPoint gradientCenter; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m: -------------------------------------------------------------------------------- 1 | // 2 | // SVRadialGradientLayer.m 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import "SVRadialGradientLayer.h" 9 | 10 | @implementation SVRadialGradientLayer 11 | 12 | - (void)drawInContext:(CGContextRef)context { 13 | size_t locationsCount = 2; 14 | CGFloat locations[2] = {0.0f, 1.0f}; 15 | CGFloat colors[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.75f}; 16 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 17 | CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount); 18 | CGColorSpaceRelease(colorSpace); 19 | 20 | float radius = MIN(self.bounds.size.width , self.bounds.size.height); 21 | CGContextDrawRadialGradient (context, gradient, self.gradientCenter, 0, self.gradientCenter, radius, kCGGradientDrawsAfterEndLocation); 22 | CGGradientRelease(gradient); 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BlocksKit/BlocksKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_BlocksKit : NSObject 3 | @end 4 | @implementation PodsDummy_BlocksKit 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BlocksKit/BlocksKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BlocksKit/BlocksKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BlocksKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/BlocksKit 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ZHNOCParser : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ZHNOCParser 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources.sh 2 | ${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SVProgressHUD.bundle -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources.sh 2 | ${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser-resources-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SVProgressHUD.bundle -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"PureLayout" -l"SDWebImage" -l"SVProgressHUD" -framework "ImageIO" -framework "MessageUI" -framework "QuartzCore" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-ZHNOCParser/Pods-ZHNOCParser.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BlocksKit" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BlocksKit" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"BlocksKit" -l"PureLayout" -l"SDWebImage" -l"SVProgressHUD" -framework "ImageIO" -framework "MessageUI" -framework "QuartzCore" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Pods/Target Support Files/PureLayout/PureLayout-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_PureLayout : NSObject 3 | @end 4 | @implementation PodsDummy_PureLayout 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/PureLayout/PureLayout-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/PureLayout/PureLayout.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PureLayout 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PureLayout" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/PureLayout" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/PureLayout 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SDWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_SDWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage 2 | DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SDWebImage" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | SUPPORTS_MACCATALYST = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SVProgressHUD : NSObject 3 | @end 4 | @implementation PodsDummy_SVProgressHUD 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SVProgressHUD/SVProgressHUD.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SVProgressHUD" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SVProgressHUD 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /ZHNOCParser.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ZHNOCParser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ZHNOCParser.xcodeproj/project.xcworkspace/xcuserdata/zhn.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/ZHNOCParser.xcodeproj/project.xcworkspace/xcuserdata/zhn.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ZHNOCParser.xcodeproj/xcuserdata/zhn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 16 | 17 | 18 | 20 | 27 | 28 | 29 | 31 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /ZHNOCParser.xcodeproj/xcuserdata/zhn.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ZHNOCParser.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | ZHNOCParser.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | CD8B690E231FACB00037EA8D 21 | 22 | primary 23 | 24 | 25 | CD8B6926231FACB10037EA8D 26 | 27 | primary 28 | 29 | 30 | CD8B6931231FACB20037EA8D 31 | 32 | primary 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ZHNOCParser.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ZHNOCParser.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ZHNOCParser.xcworkspace/xcuserdata/zhn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /ZHNOCParser/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /ZHNOCParser/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ZHNOCParser/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ZHNOCParser/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ZHNOCParser/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | NSAppTransportSecurity 24 | 25 | NSAllowsArbitraryLoads 26 | 27 | 28 | UILaunchStoryboardName 29 | LaunchScreen 30 | UIMainStoryboardFile 31 | Main 32 | UIRequiredDeviceCapabilities 33 | 34 | armv7 35 | 36 | UISupportedInterfaceOrientations 37 | 38 | UIInterfaceOrientationPortrait 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UISupportedInterfaceOrientations~ipad 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNOCMethodCaller.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCMethodCaller.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/6. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZHNOCMethodCaller : NSObject 12 | + (id)zhn_callMethodWithObj:(id)obj isClass:(BOOL)isClass selector:(SEL)selector params:(NSArray *)params; 13 | @end 14 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNOCParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParser.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ZHNOCNode.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ZHNOCParser : NSObject 15 | + (id)parseText:(NSString *)text; 16 | + (id)parseText:(NSString *)text withContext:(NSDictionary *)context; 17 | + (id)performRootNode:(ZHNOCNode *)node; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNOCParser.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParser.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCParser.h" 10 | #import "ZHNOCParseredNodeManager.h" 11 | #import "ZHNOCASTContextManager.h" 12 | 13 | #ifndef FLEXINT_H 14 | typedef struct yy_buffer_state *YY_BUFFER_STATE; 15 | void yy_delete_buffer(YY_BUFFER_STATE buf); 16 | YY_BUFFER_STATE yy_scan_string(const char *s); 17 | int yyparse(void); 18 | #endif 19 | 20 | @implementation ZHNOCParser 21 | + (id)parseText:(NSString *)text { 22 | ZHNOCParserLock 23 | YY_BUFFER_STATE buf; 24 | buf = yy_scan_string([text cStringUsingEncoding:NSUTF8StringEncoding]); 25 | yyparse(); 26 | yy_delete_buffer(buf); 27 | 28 | ZHNOCParseredNodeManager *manager = [ZHNOCParseredNodeManager sharedManager]; 29 | id obj = [manager.rootNode nodePerform]; 30 | manager.rootNode = nil; 31 | ZHNOCParserUnlock 32 | return obj; 33 | } 34 | 35 | + (id)parseText:(NSString *)text withContext:(NSDictionary *)context { 36 | [ZHNASTContext pushLatestContext]; 37 | for (NSString *key in context) { 38 | id value = [context valueForKey:key]; 39 | [ZHNASTContext assignmentObj:value forKey:key]; 40 | } 41 | id obj = [self parseText:text]; 42 | [ZHNASTContext popLatestContext]; 43 | return obj; 44 | } 45 | 46 | + (id)performRootNode:(ZHNOCNode *)node { 47 | [ZHNASTContext pushLatestContext]; 48 | node.isRoot = YES; 49 | id obj = [node nodePerform]; 50 | [ZHNASTContext popLatestContext]; 51 | return obj; 52 | } 53 | @end 54 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNOCParseredNodeManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParseredNodeManager.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/26. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ZHNOCNode.h" 11 | 12 | #define ZHNOCParserLock [[ZHNOCParseredNodeManager sharedManager].lock lock]; 13 | #define ZHNOCParserUnlock [[ZHNOCParseredNodeManager sharedManager].lock unlock]; 14 | 15 | @interface ZHNOCParseredNodeManager : NSObject 16 | + (instancetype)sharedManager; 17 | @property (nonatomic, strong) ZHNOCNode *rootNode; 18 | @property (nonatomic, strong) NSLock *lock; 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNOCParseredNodeManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParseredNodeManager.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/26. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCParseredNodeManager.h" 10 | 11 | @implementation ZHNOCParseredNodeManager 12 | + (instancetype)sharedManager { 13 | static dispatch_once_t onceToken; 14 | static ZHNOCParseredNodeManager *manager = nil; 15 | dispatch_once(&onceToken, ^{ 16 | manager = [[ZHNOCParseredNodeManager alloc] init]; 17 | manager.lock = [[NSLock alloc] init]; 18 | }); 19 | return manager; 20 | } 21 | @end 22 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/ZHNTypeEncodingTransManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNTypeOCTransToLibffiManager.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/15. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ffi.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ZHNTypeEncodingTransManager : NSObject 15 | // oc参数签名转lbiffi签名 16 | + (ffi_type *)ffiTypeWithType:(NSString *)type; 17 | // c值转oc对象 18 | + (id)transCValueToOCObject:(void *)src typeString:(const char *)typeString; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNConditionNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNConditionNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/19. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCAssembleNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | typedef NS_ENUM(NSInteger,ZHNConditionNodeType) { 14 | ZHNConditionNodeType_equal, 15 | ZHNConditionNodeType_notEqual, 16 | ZHNConditionNodeType_greaterOrEqual, 17 | ZHNConditionNodeType_lessOrEqual, 18 | ZHNConditionNodeType_greater, 19 | ZHNConditionNodeType_less, 20 | 21 | ZHNConditionNodeType_and, // && 22 | ZHNConditionNodeType_or, // || 23 | }; 24 | 25 | @interface ZHNConditionNode : ZHNOCNode 26 | @property (nonatomic, strong) id value1; 27 | @property (nonatomic, strong) id value2; 28 | @property (nonatomic, assign) ZHNConditionNodeType conditionType; 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCASTContextManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCASTContextManager.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/24. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | #define ZHNASTContext [ZHNOCASTContextManager sharedInstance] 14 | 15 | @interface ZHNOCASTContextManager : NSObject 16 | + (instancetype)sharedInstance; 17 | 18 | @property (nonatomic, strong) NSMutableArray *contexts; 19 | 20 | - (void)pushLatestContext; 21 | - (void)popLatestContext; 22 | 23 | - (void)assignmentObj:(id)obj forKey:(NSString *)key; 24 | - (void)updateObj:(id)obj inLatestContextForKey:(NSString *)key; 25 | - (id)getObjInLatestContextForKey:(NSString *)key; 26 | @end 27 | 28 | NS_ASSUME_NONNULL_END 29 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCAssembleNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCAssembleNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCAssembleNode : ZHNOCNode 14 | - (void)addNode:(ZHNOCNode *)node; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCAssignmentNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCAssignmentNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCAssignmentNode : ZHNOCNode 14 | @property (nonatomic, strong) id value; 15 | @property (nonatomic, copy) NSString *name; 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCAssignmentNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCAssignmentNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCAssignmentNode.h" 10 | #import "ZHNOCASTContextManager.h" 11 | 12 | @implementation ZHNOCAssignmentNode 13 | - (id)nodePerform { 14 | if (self.value && self.name.length > 0) { 15 | id obj = self.value; 16 | if ([self.value isKindOfClass:ZHNOCNode.class]) { 17 | obj = [self.value nodePerform]; 18 | } 19 | [ZHNASTContext assignmentObj:obj forKey:self.name]; 20 | } 21 | return nil; 22 | } 23 | @end 24 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCBlockNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCBlockNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/8. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | #import "ZHNOCAssembleNode.h" 11 | 12 | @class ZHNOCBlockParam; 13 | @interface ZHNOCBlockNode : ZHNOCNode 14 | - (void)addBlockParams:(NSArray *)params; 15 | @property (nonatomic, strong) ZHNOCAssembleNode *assembleNode; 16 | @property (nonatomic, copy) NSString *returnType;// char int ... 17 | @end 18 | 19 | 20 | ///////////////////// 21 | @interface ZHNOCBlockParam : NSObject 22 | @property (nonatomic, copy) NSString *typeName;// char int ... 23 | @property (nonatomic, copy) NSString *name; 24 | @end 25 | 26 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCEnumInitManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCEnumInitManager.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/18. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCEnumInitManager : NSObject 14 | + (void)initOCEnumForContext:(NSDictionary *)context; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCEnumInitManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCEnumInitManager.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/18. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCEnumInitManager.h" 10 | 11 | @implementation ZHNOCEnumInitManager 12 | + (void)initOCEnumForContext:(NSDictionary *)context { 13 | [context setValue:@(1) forKey:@"ALEdgeLeft"]; 14 | [context setValue:@(2) forKey:@"ALEdgeRight"]; 15 | [context setValue:@(3) forKey:@"ALEdgeTop"]; 16 | [context setValue:@(4) forKey:@"ALEdgeBottom"]; 17 | [context setValue:@(5) forKey:@"ALEdgeLeading"]; 18 | [context setValue:@(6) forKey:@"ALEdgeTrailing"]; 19 | [context setValue:@(7) forKey:@"ALDimensionWidth"]; 20 | [context setValue:@(8) forKey:@"ALDimensionHeight"]; 21 | [context setValue:@(9) forKey:@"ALAxisVertical"]; 22 | [context setValue:@(10) forKey:@"ALAxisHorizontal"]; 23 | [context setValue:@(11) forKey:@"ALAxisBaseline"]; 24 | [context setValue:@(12) forKey:@"ALAxisLastBaseline"]; 25 | [context setValue:@(13) forKey:@"ALAxisFirstBaseline"]; 26 | 27 | [context setValue:@(0) forKey:@"UIControlStateNormal"]; 28 | [context setValue:@(1) forKey:@"UIControlStateHighlighted"]; 29 | [context setValue:@(2) forKey:@"UIControlStateDisabled"]; 30 | [context setValue:@(4) forKey:@"UIControlStateSelected"]; 31 | 32 | // TODO 一些基础enum初始化 33 | } 34 | @end 35 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCForCycleNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCForCycleNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/10. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | #import "ZHNOCAssembleNode.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ZHNOCForCycleNode : ZHNOCNode 15 | @property (nonatomic, strong) ZHNOCAssembleNode *assembleNode; 16 | @property (nonatomic, strong) ZHNOCNode *defineNode; 17 | @property (nonatomic, strong) ZHNOCNode *conditionNode; 18 | @property (nonatomic, strong) ZHNOCNode *operationNode; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCForCycleNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCForCycleNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/10. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCForCycleNode.h" 10 | #import "ZHNOCASTContextManager.h" 11 | #import "ZHNOCIfElseCondition.h" 12 | #import "ZHNOCReturnNode.h" 13 | 14 | @implementation ZHNOCForCycleNode 15 | - (id)nodePerform { 16 | [ZHNASTContext pushLatestContext]; 17 | [self.defineNode nodePerform]; 18 | while (1) { 19 | ZHNOCIfElseCondition *success = [self.conditionNode nodePerform]; 20 | if (success.success) { 21 | id result = [self.assembleNode nodePerform]; 22 | if ([result isKindOfClass:ZHNOCReturnNode.class]) { 23 | [ZHNASTContext popLatestContext]; 24 | return result; 25 | } 26 | [self.operationNode nodePerform]; 27 | } 28 | else { 29 | break; 30 | } 31 | } 32 | 33 | [ZHNASTContext popLatestContext]; 34 | return nil; 35 | } 36 | @end 37 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCForInCycleNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCForInCycleNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/11. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | #import "ZHNOCAssembleNode.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ZHNOCForInCycleNode : ZHNOCNode 15 | @property (nonatomic, strong) ZHNOCAssembleNode *assembleNode; 16 | @property (nonatomic, copy) NSString *name; 17 | @property (nonatomic, strong) ZHNOCNode *valuesNode; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCForInCycleNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCForInCycleNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/11. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCForInCycleNode.h" 10 | #import "ZHNOCASTContextManager.h" 11 | #import "ZHNOCReturnNode.h" 12 | 13 | @implementation ZHNOCForInCycleNode 14 | - (id)nodePerform { 15 | [ZHNASTContext pushLatestContext]; 16 | id value = [self.valuesNode nodePerform]; 17 | if ([value isKindOfClass:NSArray.class]) { 18 | for (id obj in (NSArray *)value) { 19 | [ZHNASTContext updateObj:obj inLatestContextForKey:self.name]; 20 | id ret = [self.assembleNode nodePerform]; 21 | if ([ret isKindOfClass:ZHNOCReturnNode.class]) { 22 | [ZHNASTContext popLatestContext]; 23 | return ret; 24 | } 25 | } 26 | } 27 | return nil; 28 | } 29 | @end 30 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCGetSetNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCGetSetNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/25. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | typedef NS_ENUM(NSInteger,ZHNOCGetSetNodeType) { 14 | ZHNOCGetSetNodeType_get, 15 | ZHNOCGetSetNodeType_set, 16 | }; 17 | 18 | @interface ZHNOCGetSetNode : ZHNOCNode 19 | @property (nonatomic, assign) ZHNOCGetSetNodeType type; 20 | @property (nonatomic, strong) id value; 21 | @property (nonatomic, strong) NSMutableArray *names; 22 | @end 23 | 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCIfElseCondition.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCIfElseCondition.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/17. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCIfElseCondition : NSObject 14 | + (instancetype)instance; 15 | @property (nonatomic, assign) BOOL success; 16 | @property (nonatomic, strong) id value; 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCIfElseCondition.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCIfElseCondition.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/17. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCIfElseCondition.h" 10 | 11 | @implementation ZHNOCIfElseCondition 12 | + (instancetype)instance { 13 | ZHNOCIfElseCondition *v = [[ZHNOCIfElseCondition alloc] init]; 14 | return v; 15 | } 16 | @end 17 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCIfElseListNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCIfElseListNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCAssembleNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCIfElseListNode : ZHNOCNode 14 | - (void)addNodesFromArray:(NSArray *)ary; 15 | - (void)addNode:(ZHNOCNode *)node; 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCIfElseNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCIfElseNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ZHNOCAssembleNode.h" 11 | #import "ZHNOCIfElseCondition.h" 12 | 13 | typedef NS_ENUM(NSInteger,ZHNOCIfElseNodeType) { 14 | ZHNOCIfElseNodeType_if, 15 | ZHNOCIfElseNodeType_elseif, 16 | ZHNOCIfElseNodeType_else, 17 | }; 18 | 19 | @interface ZHNOCIfElseNode : ZHNOCNode 20 | @property (nonatomic, strong) id condition; 21 | @property (nonatomic, assign) ZHNOCIfElseNodeType type; 22 | @property (nonatomic, strong) ZHNOCAssembleNode *AssembleNode; 23 | 24 | + (instancetype)nodeWithCondition:(id)condition type:(ZHNOCIfElseNodeType)type assemble:(ZHNOCAssembleNode *)node; 25 | @end 26 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCIfElseNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCIfElseNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/16. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCIfElseNode.h" 10 | 11 | @implementation ZHNOCIfElseNode 12 | + (instancetype)nodeWithCondition:(id)condition type:(ZHNOCIfElseNodeType)type assemble:(ZHNOCAssembleNode *)node { 13 | ZHNOCIfElseNode *ifelseNode = [[ZHNOCIfElseNode alloc] init]; 14 | ifelseNode.condition = condition; 15 | ifelseNode.type = type; 16 | ifelseNode.AssembleNode = node; 17 | return ifelseNode; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCMethodNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCMethodNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/12. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | @class ZHNOCMethodParamNode,ZHNOCMethodTargetNode; 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface ZHNOCMethodNode : ZHNOCNode 15 | @property (nonatomic, strong) ZHNOCMethodTargetNode *targetNode; 16 | @property (nonatomic, copy) NSString *noParamSelectorName; 17 | - (void)addParamNode:(ZHNOCMethodParamNode *)node; 18 | @end 19 | 20 | //////////////////////////// 21 | @interface ZHNOCMethodParamNode : ZHNOCNode 22 | @property (nonatomic, copy) NSString *name; 23 | @property (nonatomic, strong) id value; 24 | @end 25 | 26 | /////////////////////////// 27 | @interface ZHNOCMethodTargetNode : ZHNOCNode 28 | @property (nonatomic, strong) ZHNOCNode *node; 29 | @property (nonatomic, copy) NSString *targetName; 30 | @property (nonatomic, assign, readonly) BOOL isClass; 31 | 32 | @end 33 | 34 | 35 | NS_ASSUME_NONNULL_END 36 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/12. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCNode : NSObject 14 | @property (nonatomic, assign) BOOL isRoot; 15 | + (instancetype)ocnode; 16 | - (id)nodePerform; 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/12. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | @implementation ZHNOCNode 12 | + (instancetype)ocnode { 13 | return [[self alloc] init]; 14 | } 15 | 16 | - (id)nodePerform { 17 | return nil; 18 | } 19 | @end 20 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCPPMMNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCPPMMNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/10. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | typedef NS_ENUM(NSInteger,ZHNOCPPMMType) { 12 | ZHNOCPPMMType_plusplus, 13 | ZHNOCPPMMType_minusminus 14 | }; 15 | 16 | NS_ASSUME_NONNULL_BEGIN 17 | 18 | @interface ZHNOCPPMMNode : ZHNOCNode 19 | @property (nonatomic, assign) ZHNOCPPMMType type; 20 | @property (nonatomic, copy) NSString *name; 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCPPMMNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCPPMMNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/10. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCPPMMNode.h" 10 | #import "ZHNOCASTContextManager.h" 11 | 12 | @implementation ZHNOCPPMMNode 13 | - (id)nodePerform { 14 | id value = [ZHNASTContext getObjInLatestContextForKey:self.name]; 15 | if ([value isKindOfClass:NSNumber.class]) { 16 | NSInteger iValue = [value integerValue]; 17 | switch (self.type) { 18 | case ZHNOCPPMMType_plusplus: 19 | iValue = iValue + 1; 20 | [ZHNASTContext updateObj:[NSNumber numberWithInteger:iValue] inLatestContextForKey:self.name]; 21 | break; 22 | case ZHNOCPPMMType_minusminus: 23 | iValue = iValue - 1; 24 | [ZHNASTContext updateObj:[NSNumber numberWithInteger:iValue] inLatestContextForKey:self.name]; 25 | break; 26 | } 27 | } 28 | return nil; 29 | } 30 | @end 31 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCPointerWordNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCPointerWordNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/24. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCPointerWordNode : ZHNOCNode 14 | @property (nonatomic, copy) NSString *name; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCPointerWordNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCPointerWordNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/24. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCPointerWordNode.h" 10 | #import "ZHNOCASTContextManager.h" 11 | 12 | @implementation ZHNOCPointerWordNode 13 | - (id)nodePerform { 14 | return [ZHNASTContext getObjInLatestContextForKey:self.name]; 15 | } 16 | @end 17 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCReturnNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCReturnNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/26. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface ZHNOCReturnNode : ZHNOCNode 14 | @property (nonatomic, strong) id value; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCReturnNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCReturnNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/26. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCReturnNode.h" 10 | #import "ZHNOCStructNode.h" 11 | 12 | @implementation ZHNOCReturnNode 13 | - (id)nodePerform { 14 | id ret = self.value; 15 | if ([self.value isKindOfClass:ZHNOCNode.class]) { 16 | ret = [(ZHNOCNode *)self.value nodePerform]; 17 | } 18 | if ([ret isKindOfClass:ZHNOCStruct.class]) { 19 | return [(ZHNOCStruct *)ret value]; 20 | } 21 | return ret; 22 | } 23 | @end 24 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNOCStructNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCStructNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/29. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | @interface ZHNOCStructNode : ZHNOCNode 12 | @property (nonatomic, copy) NSString *cFuncName; 13 | @property (nonatomic, strong) NSMutableArray *values; 14 | @end 15 | 16 | ///////////////////////////// 17 | typedef NS_ENUM(NSInteger,ZHNOCStructType) { 18 | ZHNOCStructType_CGRect, 19 | ZHNOCStructType_CGSize, 20 | ZHNOCStructType_CGPoint, 21 | ZHNOCStructType_CGAffineTransform, 22 | ZHNOCStructType_UIEdgeInsets, 23 | ZHNOCStructType_UIOffset 24 | }; 25 | 26 | @interface ZHNOCStruct : NSObject 27 | @property (nonatomic, strong) id value; 28 | @property (nonatomic, assign) ZHNOCStructType type; 29 | + (instancetype)instanceWithTypeString:(NSString *)typeStr value:(void *)value; 30 | + (instancetype)instanceWithValue:(id)value type:(ZHNOCStructType)type; 31 | - (void)toCValue:(void *)obj; 32 | @end 33 | 34 | 35 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNPatchNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNPatchNode.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/17. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNOCNode.h" 10 | 11 | @class ZHNPatchMethod; 12 | 13 | @interface ZHNPatchNode : ZHNOCNode 14 | @property (nonatomic, strong) ZHNPatchMethod *method; 15 | @property (nonatomic, copy) NSString *className; 16 | @end 17 | 18 | //////////////// 19 | @interface ZHNPatchMethod : NSObject 20 | @property (nonatomic, assign) BOOL isClassMethod; 21 | @property (nonatomic, strong) NSArray *items; 22 | @property (nonatomic, strong) ZHNOCNode *assembleNode; 23 | @end 24 | 25 | //////////////// 26 | @interface ZHNPatchMethodItem : NSObject 27 | @property (nonatomic, copy) NSString *methodName; 28 | @property (nonatomic, copy) NSString *paramName; 29 | @end 30 | -------------------------------------------------------------------------------- /ZHNOCParser/OCParser/node/ZHNPatchNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNPatchNode.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/17. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import "ZHNPatchNode.h" 10 | #import "ZHNOCPatcher.h" 11 | 12 | @implementation ZHNPatchNode 13 | - (id)nodePerform { 14 | Class hookedCls = NSClassFromString(self.className); 15 | NSMutableArray *paramNames = [NSMutableArray array]; 16 | NSString *methodName = @""; 17 | 18 | ZHNPatchMethodItem *item = [self.method.items firstObject]; 19 | if (self.method.items.count == 1 && !item.paramName) { 20 | // 不带参数的情况 21 | methodName = item.methodName; 22 | } 23 | else { 24 | for (ZHNPatchMethodItem *item in self.method.items) { 25 | [paramNames addObject:item.paramName]; 26 | if (item.paramName) { 27 | methodName = [NSString stringWithFormat:@"%@%@:",methodName,item.methodName]; 28 | } 29 | } 30 | } 31 | SEL sel = NSSelectorFromString(methodName); 32 | 33 | ZHNOCPatchItem *patchItem = [[ZHNOCPatcher sharedInstance] zhn_patchClass:hookedCls selector:sel isClassMethod:self.method.isClassMethod node:self.method.assembleNode]; 34 | patchItem.paramNames = paramNames; 35 | 36 | return nil; 37 | } 38 | @end 39 | 40 | //////////////// 41 | @implementation ZHNPatchMethod 42 | @end 43 | 44 | //////////////// 45 | @implementation ZHNPatchMethodItem 46 | @end 47 | -------------------------------------------------------------------------------- /ZHNOCParser/Patch/ZHNOCPatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCPatcher.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/10/15. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ZHNOCNode.h" 11 | 12 | @class ZHNOCPatchItem; 13 | @interface ZHNOCPatcher : NSObject 14 | + (instancetype)sharedInstance; 15 | - (ZHNOCPatchItem *)zhn_patchClass:(Class)cls selector:(SEL)sel isClassMethod:(BOOL)isClassMethod blockString:(NSString *)blockString; 16 | - (ZHNOCPatchItem *)zhn_patchClass:(Class)cls selector:(SEL)sel isClassMethod:(BOOL)isClassMethod node:(ZHNOCNode *)node; 17 | 18 | // TODO remove patch 19 | @end 20 | 21 | //////////////////// 22 | @interface ZHNOCPatchItem : NSObject 23 | @property (nonatomic) Class cls; 24 | @property (nonatomic) SEL sel; 25 | @property (nonatomic, assign) BOOL isClassMethod; 26 | @property (nonatomic, copy) NSString *blockString; 27 | @property (nonatomic, strong) ZHNOCNode *node; 28 | @property (nonatomic, strong) NSArray *typeStrings; 29 | @property (nonatomic, strong) NSArray *paramNames; 30 | 31 | + (instancetype)instancePatchItemWithClass:(Class)cls selector:(SEL)sel isClassMethod:(BOOL)isClassMethod blockString:(NSString *)blockString; 32 | + (instancetype)instancePatchItemWithClass:(Class)cls selector:(SEL)sel isClassMethod:(BOOL)isClassMethod node:(ZHNOCNode *)node; 33 | - (void)patch; 34 | @end 35 | -------------------------------------------------------------------------------- /ZHNOCParser/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /ZHNOCParser/hotPatch.text: -------------------------------------------------------------------------------- 1 | PATCH(ViewController,{ 2 | - (void)logTitleWithIndex:(NSInteger)index { 3 | if (index > self.titleStrs.count) { 4 | [SVProgressHUD showErrorWithStatus:@"index太大啦"]; 5 | return; 6 | } else { 7 | NSString *str = [self.titleStrs objectAtIndex:index]; 8 | [SVProgressHUD showSuccessWithStatus:str]; 9 | } 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /ZHNOCParser/libffi/ffi.h: -------------------------------------------------------------------------------- 1 | #ifdef __arm64__ 2 | 3 | #include "ffi_arm64.h" 4 | 5 | 6 | #endif 7 | #ifdef __i386__ 8 | 9 | #include "ffi_i386.h" 10 | 11 | 12 | #endif 13 | #ifdef __arm__ 14 | 15 | #include "ffi_arm.h" 16 | 17 | 18 | #endif 19 | #ifdef __x86_64__ 20 | 21 | #include "ffi_x86_64.h" 22 | 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /ZHNOCParser/libffi/ffitarget.h: -------------------------------------------------------------------------------- 1 | #ifdef __arm64__ 2 | 3 | #include "ffitarget_arm64.h" 4 | 5 | 6 | #endif 7 | #ifdef __i386__ 8 | 9 | #include "ffitarget_i386.h" 10 | 11 | 12 | #endif 13 | #ifdef __arm__ 14 | 15 | #include "ffitarget_arm.h" 16 | 17 | 18 | #endif 19 | #ifdef __x86_64__ 20 | 21 | #include "ffitarget_x86_64.h" 22 | 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /ZHNOCParser/libffi/libffi.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhnnnnn/ZHNOCParser/7424c8163d2144f11ae5475fe56ef81863f739f6/ZHNOCParser/libffi/libffi.a -------------------------------------------------------------------------------- /ZHNOCParser/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ZHNOCParser 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ZHNOCParserTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ZHNOCParserTests/ZHNOCParserTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParserTests.m 3 | // ZHNOCParserTests 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZHNOCParserTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation ZHNOCParserTests 16 | 17 | - (void)setUp { 18 | // Put setup code here. This method is called before the invocation of each test method in the class. 19 | } 20 | 21 | - (void)tearDown { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | - (void)testExample { 26 | // This is an example of a functional test case. 27 | // Use XCTAssert and related functions to verify your tests produce the correct results. 28 | } 29 | 30 | - (void)testPerformanceExample { 31 | // This is an example of a performance test case. 32 | [self measureBlock:^{ 33 | // Put the code you want to measure the time of here. 34 | }]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ZHNOCParserUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /ZHNOCParserUITests/ZHNOCParserUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ZHNOCParserUITests.m 3 | // ZHNOCParserUITests 4 | // 5 | // Created by zhn on 2019/9/4. 6 | // Copyright © 2019 zhn. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ZHNOCParserUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation ZHNOCParserUITests 16 | 17 | - (void)setUp { 18 | // Put setup code here. This method is called before the invocation of each test method in the class. 19 | 20 | // In UI tests it is usually best to stop immediately when a failure occurs. 21 | self.continueAfterFailure = NO; 22 | 23 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 24 | [[[XCUIApplication alloc] init] launch]; 25 | 26 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 27 | } 28 | 29 | - (void)tearDown { 30 | // Put teardown code here. This method is called after the invocation of each test method in the class. 31 | } 32 | 33 | - (void)testExample { 34 | // Use recording to get started writing UI tests. 35 | // Use XCTAssert and related functions to verify your tests produce the correct results. 36 | } 37 | 38 | @end 39 | --------------------------------------------------------------------------------