FLEXUtility.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // FLEXUtility.h
  3. // Flipboard
  4. //
  5. // Created by Ryan Olson on 4/18/14.
  6. // Copyright (c) 2014 Flipboard. All rights reserved.
  7. //
  8. #import <Availability.h>
  9. #import <AvailabilityInternal.h>
  10. #import <Foundation/Foundation.h>
  11. #import <UIKit/UIKit.h>
  12. #import <objc/runtime.h>
  13. #import "FLEXTypeEncodingParser.h"
  14. #import "FLEXAlert.h"
  15. #import "NSArray+Functional.h"
  16. #import "UIFont+FLEX.h"
  17. #import "NSMapTable+FLEX_Subscripting.h"
  18. #import "FLEXMacros.h"
  19. #if !FLEX_AT_LEAST_IOS13_SDK
  20. @class UIWindowScene;
  21. #endif
  22. @interface FLEXUtility : NSObject
  23. /// The key window of the app, if it is not a \c FLEXWindow.
  24. /// If it is, then \c FLEXWindow.previousKeyWindow is returned.
  25. @property (nonatomic, readonly, class) UIWindow *appKeyWindow;
  26. /// @return the result of +[UIWindow allWindowsIncludingInternalWindows:onlyVisibleWindows:]
  27. @property (nonatomic, readonly, class) NSArray<UIWindow *> *allWindows;
  28. /// The first active \c UIWindowScene of the app.
  29. @property (nonatomic, readonly, class) UIWindowScene *activeScene API_AVAILABLE(ios(13.0));
  30. /// @return top-most view controller of the given window
  31. + (UIViewController *)topViewControllerInWindow:(UIWindow *)window;
  32. + (UIColor *)consistentRandomColorForObject:(id)object;
  33. + (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame;
  34. + (NSString *)stringForCGRect:(CGRect)rect;
  35. + (UIViewController *)viewControllerForView:(UIView *)view;
  36. + (UIViewController *)viewControllerForAncestralView:(UIView *)view;
  37. + (UIImage *)previewImageForView:(UIView *)view;
  38. + (UIImage *)previewImageForLayer:(CALayer *)layer;
  39. + (NSString *)detailDescriptionForView:(UIView *)view;
  40. + (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius;
  41. + (UIColor *)hierarchyIndentPatternColor;
  42. + (NSString *)pointerToString:(void *)ptr;
  43. + (NSString *)addressOfObject:(id)object;
  44. + (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString;
  45. + (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask;
  46. + (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data;
  47. + (NSString *)stringFromRequestDuration:(NSTimeInterval)duration;
  48. + (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response;
  49. + (BOOL)isErrorStatusCodeFromURLResponse:(NSURLResponse *)response;
  50. + (NSArray<NSURLQueryItem *> *)itemsFromQueryString:(NSString *)query;
  51. + (NSString *)prettyJSONStringFromData:(NSData *)data;
  52. + (BOOL)isValidJSONData:(NSData *)data;
  53. + (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData;
  54. // Swizzling utilities
  55. + (SEL)swizzledSelectorForSelector:(SEL)selector;
  56. + (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls;
  57. + (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Class)class withBlock:(id)block swizzledSelector:(SEL)swizzledSelector;
  58. + (void)replaceImplementationOfSelector:(SEL)selector withSelector:(SEL)swizzledSelector forClass:(Class)cls withMethodDescription:(struct objc_method_description)methodDescription implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock;
  59. @end