diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ebf4a8..339ea45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.0.3 + +##### Added +- Updated the Android binding from [Braze Android 30.1.0 to 30.4.0](https://github.com/braze-inc/braze-android-sdk/compare/v30.1.0...v30.4.0#diff-06572a96a58dc510037d5efa622f9bec8519bc1beab13c9f251e97e657a9d4ed). +- Updated the iOS binding from [Braze Swift SDK 8.0.1 to 8.4.0](https://github.com/braze-inc/braze-swift-sdk/compare/8.0.1...8.4.0#diff-06572a96a58dc510037d5efa622f9bec8519bc1beab13c9f251e97e657a9d4ed). + ## 4.0.2 ##### Added diff --git a/appboy-component/nuget/Braze.iOS.BrazeKit.nuspec b/appboy-component/nuget/Braze.iOS.BrazeKit.nuspec index 0b46a39..8733cfa 100644 --- a/appboy-component/nuget/Braze.iOS.BrazeKit.nuspec +++ b/appboy-component/nuget/Braze.iOS.BrazeKit.nuspec @@ -2,7 +2,7 @@ Braze.iOS.BrazeKit - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk diff --git a/appboy-component/nuget/Braze.iOS.BrazeKitCompat.nuspec b/appboy-component/nuget/Braze.iOS.BrazeKitCompat.nuspec index 56ade56..d36434b 100644 --- a/appboy-component/nuget/Braze.iOS.BrazeKitCompat.nuspec +++ b/appboy-component/nuget/Braze.iOS.BrazeKitCompat.nuspec @@ -2,7 +2,7 @@ Braze.iOS.BrazeKitCompat - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk @@ -14,8 +14,8 @@ Braze Appboy - - + + diff --git a/appboy-component/nuget/Braze.iOS.BrazeLocation.nuspec b/appboy-component/nuget/Braze.iOS.BrazeLocation.nuspec index 032d40f..03f944a 100644 --- a/appboy-component/nuget/Braze.iOS.BrazeLocation.nuspec +++ b/appboy-component/nuget/Braze.iOS.BrazeLocation.nuspec @@ -2,7 +2,7 @@ Braze.iOS.BrazeLocation - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk diff --git a/appboy-component/nuget/Braze.iOS.BrazeUI.nuspec b/appboy-component/nuget/Braze.iOS.BrazeUI.nuspec index 6fcf4bf..7b8f23c 100644 --- a/appboy-component/nuget/Braze.iOS.BrazeUI.nuspec +++ b/appboy-component/nuget/Braze.iOS.BrazeUI.nuspec @@ -2,7 +2,7 @@ Braze.iOS.BrazeUI - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk @@ -14,7 +14,7 @@ Braze Appboy - + diff --git a/appboy-component/nuget/Braze.iOS.BrazeUICompat.nuspec b/appboy-component/nuget/Braze.iOS.BrazeUICompat.nuspec index 82a308a..9d41ea5 100644 --- a/appboy-component/nuget/Braze.iOS.BrazeUICompat.nuspec +++ b/appboy-component/nuget/Braze.iOS.BrazeUICompat.nuspec @@ -2,7 +2,7 @@ Braze.iOS.BrazeUICompat - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk @@ -14,8 +14,8 @@ Braze Appboy - - + + diff --git a/appboy-component/nuget/Braze.iOS.SDWebImage.nuspec b/appboy-component/nuget/Braze.iOS.SDWebImage.nuspec index 6d407b7..e58a655 100644 --- a/appboy-component/nuget/Braze.iOS.SDWebImage.nuspec +++ b/appboy-component/nuget/Braze.iOS.SDWebImage.nuspec @@ -2,7 +2,7 @@ Braze.iOS.SDWebImage - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk diff --git a/appboy-component/nuget/BrazePlatform.BrazeAndroidBinding.nuspec b/appboy-component/nuget/BrazePlatform.BrazeAndroidBinding.nuspec index aa91c30..05cd6b0 100644 --- a/appboy-component/nuget/BrazePlatform.BrazeAndroidBinding.nuspec +++ b/appboy-component/nuget/BrazePlatform.BrazeAndroidBinding.nuspec @@ -2,7 +2,7 @@ BrazePlatform.BrazeAndroidBinding - 4.0.2 + 4.0.3 Braze Braze https://github.com/braze-inc/braze-xamarin-sdk @@ -27,8 +27,8 @@ - - + + diff --git a/appboy-component/samples/android-net-maui/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp.csproj b/appboy-component/samples/android-net-maui/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp.csproj index 26a388a..adcffed 100644 --- a/appboy-component/samples/android-net-maui/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp.csproj +++ b/appboy-component/samples/android-net-maui/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp/BrazeAndroidMauiSampleApp.csproj @@ -10,7 +10,8 @@ 1.0 -4 + 4 + true diff --git a/appboy-component/samples/legacy/android/TestApp.XamarinAndroid/TestApp.XamarinAndroid.csproj b/appboy-component/samples/legacy/android/TestApp.XamarinAndroid/TestApp.XamarinAndroid.csproj index 98f8a47..2e9cbbd 100644 --- a/appboy-component/samples/legacy/android/TestApp.XamarinAndroid/TestApp.XamarinAndroid.csproj +++ b/appboy-component/samples/legacy/android/TestApp.XamarinAndroid/TestApp.XamarinAndroid.csproj @@ -28,6 +28,7 @@ 4 None false + true full diff --git a/appboy-component/src/.swift-sdk-version b/appboy-component/src/.swift-sdk-version index cd1d2e9..a2f28f4 100644 --- a/appboy-component/src/.swift-sdk-version +++ b/appboy-component/src/.swift-sdk-version @@ -1 +1 @@ -8.0.1 +8.4.0 diff --git a/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-base-30.4.0.aar b/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-base-30.4.0.aar new file mode 100644 index 0000000..c16c5f0 Binary files /dev/null and b/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-base-30.4.0.aar differ diff --git a/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-ui-30.4.0.aar b/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-ui-30.4.0.aar new file mode 100644 index 0000000..fdeb7ca Binary files /dev/null and b/appboy-component/src/androidnet6/BrazeAndroidNet6Binding/android-sdk-ui-30.4.0.aar differ diff --git a/appboy-component/src/ios-brazekit/ApiDefinitions.cs b/appboy-component/src/ios-brazekit/ApiDefinitions.cs index 03a07c3..b132f6d 100644 --- a/appboy-component/src/ios-brazekit/ApiDefinitions.cs +++ b/appboy-component/src/ios-brazekit/ApiDefinitions.cs @@ -105,6 +105,9 @@ interface Braze [DesignatedInitializer] NativeHandle Constructor (BRZConfiguration configuration); + // -(BRZCancellable * _Nonnull)subscribeToSessionUpdates:(void (^ _Nonnull)(BRZSessionEvent * _Nonnull))update __attribute__((warn_unused_result(""))); + [Export ("subscribeToSessionUpdates:")] + BRZCancellable SubscribeToSessionUpdates (Action update); // -(void)deviceIdOnQueue:(dispatch_queue_t _Nonnull)queue completion:(void (^ _Nonnull)(NSString * _Nonnull))completion __attribute__((deprecated("", "deviceId"))); [Obsolete("renamed: 'deviceId'")] [Export ("deviceIdOnQueue:completion:")] @@ -130,6 +133,17 @@ interface Braze // -(void)_newsFeedApplyLocalCards; [Export ("_newsFeedApplyLocalCards")] void _newsFeedApplyLocalCards (); + // (copy, nonatomic, class) NSDictionary * _Nonnull acknowledgments __attribute__((deprecated("", "Braze.Resources.acknowledgments"))); + [Obsolete("renamed: 'Braze.Resources.acknowledgments'")] + [Static] + [Export ("acknowledgments", ArgumentSemantic.Copy)] + NSDictionary Acknowledgments { get; set; } + + // (copy, nonatomic, class) NSURL * _Nullable license __attribute__((deprecated("", "Braze.Resources.license"))); + [Obsolete("renamed: 'Braze.Resources.license'")] + [Static] + [NullAllowed, Export ("license", ArgumentSemantic.Copy)] + NSUrl License { get; set; } [Wrap ("WeakDelegate")] [NullAllowed] BrazeDelegate Delegate { get; set; } @@ -203,15 +217,6 @@ interface Braze // -(void)setAdTrackingEnabled:(BOOL)adTrackingEnabled; [Export ("setAdTrackingEnabled:")] void SetAdTrackingEnabled (bool adTrackingEnabled); - // (copy, nonatomic, class) NSDictionary * _Nonnull acknowledgments; - [Static] - [Export ("acknowledgments", ArgumentSemantic.Copy)] - NSDictionary Acknowledgments { get; set; } - - // (copy, nonatomic, class) NSURL * _Nullable license; - [Static] - [NullAllowed, Export ("license", ArgumentSemantic.Copy)] - NSUrl License { get; set; } // +(Braze * _Nullable)sharedInstance __attribute__((warn_unused_result(""))) __attribute__((deprecated("BrazeKit does not provide a singleton instance. You are now expected to keep a reference of the Braze instance yourself after initialization."))); [Obsolete("BrazeKit does not provide a singleton instance. You are now expected to keep a reference of the Braze instance yourself after initialization.")] [Static] @@ -373,7 +378,7 @@ interface Braze [Export ("registerApplication:didReceiveRemoteNotification:fetchCompletionHandler:")] void RegisterApplication (UIApplication application, NSDictionary notification, [NullAllowed] Action completionHandler); - // -(void)userNotificationCenter:(UNUserNotificationCenter * _Nonnull)center didReceiveNotificationResponse:(UNNotificationResponse * _Nonnull)response withCompletionHandler:(void (^ _Nullable)(void))completionHandler __attribute__((deprecated("renamed to 'notifications.handleUserNotification(response:withCompletionHandler:)'"))) __attribute__((availability(ios, introduced=10.0))); + // -(void)userNotificationCenter:(UNUserNotificationCenter * _Nonnull)center didReceiveNotificationResponse:(UNNotificationResponse * _Nonnull)response withCompletionHandler:(void (^ _Nullable)(void))completionHandler __attribute__((deprecated("renamed to 'notifications.handleUserNotification(response:withCompletionHandler:)'"))); [Obsolete("renamed to 'notifications.handleUserNotification(response:withCompletionHandler:)'")] [Export ("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")] void UserNotificationCenter (UNUserNotificationCenter center, UNNotificationResponse response, [NullAllowed] Action completionHandler); @@ -407,67 +412,161 @@ interface Braze void RequestEnableSDKOnNextAppRun (); } - // @interface BRZConfiguration : NSObject + // @interface BRZWebViewController : UIViewController + [BaseType (typeof(UIViewController))] + interface BRZWebViewController : IWKNavigationDelegate + { + // @property (copy, nonatomic) NSURL * _Nullable url; + [NullAllowed, Export ("url", ArgumentSemantic.Copy)] + NSUrl Url { get; set; } + + // @property (nonatomic) BOOL animateDismissal; + [Export ("animateDismissal")] + bool AnimateDismissal { get; set; } + + // @property (copy, nonatomic) void (^ _Nullable)(NSURL * _Nonnull) systemOpenURL; + [NullAllowed, Export ("systemOpenURL", ArgumentSemantic.Copy)] + Action SystemOpenURL { get; set; } + // -(void)webView:(WKWebView * _Nonnull)webView decidePolicyForNavigationAction:(WKNavigationAction * _Nonnull)navigationAction decisionHandler:(void (^ _Nonnull)(WKNavigationActionPolicy))decisionHandler __attribute__((swift_async("not_swift_private", 3))); + [Export ("webView:decidePolicyForNavigationAction:decisionHandler:")] + void WebView (WKWebView webView, WKNavigationAction navigationAction, Action decisionHandler); + + // -(void)webView:(WKWebView * _Nonnull)webView didFinishNavigation:(WKNavigation * _Null_unspecified)navigation; + [Export ("webView:didFinishNavigation:")] + void WebView (WKWebView webView, WKNavigation navigation); + + // -(void)webView:(WKWebView * _Nonnull)webView didFailProvisionalNavigation:(WKNavigation * _Null_unspecified)navigation withError:(NSError * _Nonnull)error; + [Export ("webView:didFailProvisionalNavigation:withError:")] + void WebView (WKWebView webView, WKNavigation navigation, NSError error); + + // -(instancetype _Nonnull)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil __attribute__((objc_designated_initializer)); + [Export ("initWithNibName:bundle:")] + [DesignatedInitializer] + NativeHandle Constructor ([NullAllowed] string nibNameOrNil, [NullAllowed] NSBundle nibBundleOrNil); + } + + // @interface BRZNotifications : NSObject [BaseType (typeof(NSObject))] - interface BRZConfiguration + [DisableDefaultCtor] + interface BRZNotifications { - // @property (nonatomic, strong) BRZConfigurationApi * _Nonnull api; - [Export ("api", ArgumentSemantic.Strong)] - BRZConfigurationApi Api { get; set; } + // @property (readonly, copy, nonatomic) NSData * _Nullable deviceToken; + [NullAllowed, Export ("deviceToken", ArgumentSemantic.Copy)] + NSData DeviceToken { get; } - // @property (nonatomic, strong) BRZConfigurationPush * _Nonnull push; - [Export ("push", ArgumentSemantic.Strong)] - BRZConfigurationPush Push { get; set; } + // -(BOOL)handleBackgroundNotificationWithUserInfo:(NSDictionary * _Nonnull)userInfo fetchCompletionHandler:(void (^ _Nonnull)(UIBackgroundFetchResult))completionHandler __attribute__((warn_unused_result(""))); + [Export ("handleBackgroundNotificationWithUserInfo:fetchCompletionHandler:")] + bool HandleBackgroundNotificationWithUserInfo (NSDictionary userInfo, Action completionHandler); - // @property (nonatomic, strong) BRZConfigurationLocation * _Nonnull location; - [Export ("location", ArgumentSemantic.Strong)] - BRZConfigurationLocation Location { get; set; } + // -(BOOL)handleUserNotificationWithResponse:(UNNotificationResponse * _Nonnull)response withCompletionHandler:(void (^ _Nonnull)(void))completionHandler __attribute__((warn_unused_result(""))); + [Export ("handleUserNotificationWithResponse:withCompletionHandler:")] + bool HandleUserNotificationWithResponse (UNNotificationResponse response, Action completionHandler); - // @property (nonatomic, strong) BRZConfigurationLogger * _Nonnull logger; - [Export ("logger", ArgumentSemantic.Strong)] - BRZConfigurationLogger Logger { get; set; } + // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(BRZNotificationsPayload * _Nonnull))update __attribute__((warn_unused_result(""))); + [Export ("subscribeToUpdates:")] + BRZCancellable SubscribeToUpdates (Action update); - // @property (nonatomic) NSTimeInterval sessionTimeout; - [Export ("sessionTimeout")] - double SessionTimeout { get; set; } + // +(BOOL)isBrazeNotification:(NSDictionary * _Nonnull)userInfo __attribute__((warn_unused_result(""))); + [Static] + [Export ("isBrazeNotification:")] + bool IsBrazeNotification (NSDictionary userInfo); - // @property (nonatomic) NSTimeInterval triggerMinimumTimeInterval; - [Export ("triggerMinimumTimeInterval")] - double TriggerMinimumTimeInterval { get; set; } + // +(BOOL)isInternalNotification:(NSDictionary * _Nonnull)userInfo __attribute__((warn_unused_result(""))); + [Static] + [Export ("isInternalNotification:")] + bool IsInternalNotification (NSDictionary userInfo); - // @property (nonatomic) BOOL useUUIDAsDeviceId; - [Export ("useUUIDAsDeviceId")] - bool UseUUIDAsDeviceId { get; set; } + // -(void)registerDeviceToken:(NSData * _Nonnull)deviceToken; + [Export ("registerDeviceToken:")] + void RegisterDeviceToken (NSData deviceToken); + // (copy, nonatomic, class) NSSet * _Nonnull categories; + [Static] + [Export ("categories", ArgumentSemantic.Copy)] + NSSet Categories { get; set; } + } - // @property (nonatomic) BOOL forwardUniversalLinks; - [Export ("forwardUniversalLinks")] - bool ForwardUniversalLinks { get; set; } + // @interface BRZFeatureFlags : NSObject + [BaseType (typeof(NSObject))] + [DisableDefaultCtor] + interface BRZFeatureFlags + { + // @property (readonly, copy, nonatomic) NSArray * _Nonnull featureFlags; + [Export ("featureFlags", ArgumentSemantic.Copy)] + BRZFeatureFlag[] FeatureFlags { get; } - // @property (nonatomic) BOOL optInWhenPushAuthorized; - [Export ("optInWhenPushAuthorized")] - bool OptInWhenPushAuthorized { get; set; } + // -(BRZFeatureFlag * _Nullable)featureFlagWithId:(NSString * _Nonnull)id __attribute__((warn_unused_result(""))); + [Export ("featureFlagWithId:")] + [return: NullAllowed] + BRZFeatureFlag FeatureFlagWithId (string id); - // @property (nonatomic) uint64_t tvOSPersistedSizeLimit; - [Export ("tvOSPersistedSizeLimit")] - ulong TvOSPersistedSizeLimit { get; set; } + // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); + [Export ("subscribeToUpdates:")] + BRZCancellable SubscribeToUpdates (Action> update); - // @property (copy, nonatomic) NSArray * _Nonnull ephemeralEvents; - [Export ("ephemeralEvents", ArgumentSemantic.Copy)] - string[] EphemeralEvents { get; set; } + // -(void)logFeatureFlagImpressionWithId:(NSString * _Nonnull)id; + [Export ("logFeatureFlagImpressionWithId:")] + void LogFeatureFlagImpressionWithId (string id); - // -(instancetype _Nonnull)initWithApiKey:(NSString * _Nonnull)apiKey endpoint:(NSString * _Nonnull)endpoint __attribute__((objc_designated_initializer)); - [Export ("initWithApiKey:endpoint:")] - [DesignatedInitializer] - NativeHandle Constructor (string apiKey, string endpoint); + // -(void)requestRefresh; + [Export ("requestRefresh")] + void RequestRefresh (); - // (copy, nonatomic) NSArray * _Nonnull devicePropertyAllowList; - [Export ("devicePropertyAllowList", ArgumentSemantic.Copy)] - BRZDeviceProperty[] DevicePropertyAllowList { get; set; } + // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; + [Export ("requestRefreshWithCompletion:")] + void RequestRefreshWithCompletion (Action, NSError> completion); } - // @interface BRZContentCardRaw : NSObject + // @interface BRZFeatureFlag : NSObject [BaseType (typeof(NSObject))] - interface BRZContentCardRaw: INativeObject + interface BRZFeatureFlag: INativeObject + { + // @property (copy, nonatomic) NSString * _Nonnull identifier; + [Export ("identifier")] + string Identifier { get; set; } + + // @property (nonatomic) BOOL enabled; + [Export ("enabled")] + bool Enabled { get; set; } + + // @property (copy, nonatomic) NSDictionary * _Nonnull properties; + [Export ("properties", ArgumentSemantic.Copy)] + NSDictionary Properties { get; set; } + + // @property (copy, nonatomic) NSString * _Nullable flagTrackingString; + [NullAllowed, Export ("flagTrackingString")] + string FlagTrackingString { get; set; } + + // -(NSString * _Nullable)stringPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); + [Export ("stringPropertyForKey:")] + [return: NullAllowed] + string StringPropertyForKey (string key); + // @property (readonly, nonatomic) NSUInteger hash; + [Export ("hash")] + nuint Hash { get; } + + // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); + [NullAllowed, Export ("json")] + NSData Json { get; } + + // +(instancetype _Nullable)decodingWithJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); + [Static] + [Export ("decodingWithJson:")] + [return: NullAllowed] + BRZFeatureFlag DecodingWithJson (NSData json); + // -(NSNumber * _Nullable)numberPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); + [Export ("numberPropertyForKey:")] + [return: NullAllowed] + NSNumber NumberPropertyForKey (string key); + + // -(NSNumber * _Nullable)boolPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); + [Export ("boolPropertyForKey:")] + [return: NullAllowed] + NSNumber BoolPropertyForKey (string key); + } + + // @interface BRZNewsFeedCard : NSObject + [BaseType (typeof(NSObject))] + interface BRZNewsFeedCard: INativeObject { // @property (copy, nonatomic) NSString * _Nonnull identifier; [Export ("identifier")] @@ -505,57 +604,25 @@ interface BRZContentCardRaw: INativeObject [Export ("viewed")] bool Viewed { get; set; } - // @property (nonatomic) BOOL dismissible; - [Export ("dismissible")] - bool Dismissible { get; set; } - - // @property (nonatomic) BOOL removed; - [Export ("removed")] - bool Removed { get; set; } - - // @property (nonatomic) BOOL pinned; - [Export ("pinned")] - bool Pinned { get; set; } - - // @property (nonatomic) BOOL clicked; - [Export ("clicked")] - bool Clicked { get; set; } - - // @property (nonatomic) BOOL test; - [Export ("test")] - bool Test { get; set; } + // @property (nonatomic) NSTimeInterval created; + [Export ("created")] + double Created { get; set; } - // @property (nonatomic) NSTimeInterval createdAt; - [Export ("createdAt")] - double CreatedAt { get; set; } + // @property (nonatomic) NSTimeInterval updated; + [Export ("updated")] + double Updated { get; set; } - // @property (nonatomic) NSTimeInterval expiresAt; - [Export ("expiresAt")] - double ExpiresAt { get; set; } + // @property (nonatomic) NSTimeInterval expires; + [Export ("expires")] + double Expires { get; set; } - // @property (nonatomic, strong) BRZContentCardContext * _Nullable context; + // @property (nonatomic, strong) BRZNewsFeedCardContext * _Nullable context; [NullAllowed, Export ("context", ArgumentSemantic.Strong)] - BRZContentCardContext Context { get; set; } - - // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); - [NullAllowed, Export ("json")] - NSData Json { get; } - - // +(instancetype _Nullable)decodingWithJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); - [Static] - [Export ("decodingWithJson:")] - [return: NullAllowed] - BRZContentCardRaw DecodingWithJson (NSData json); + BRZNewsFeedCardContext Context { get; set; } // @property (readonly, nonatomic) NSUInteger hash; [Export ("hash")] nuint Hash { get; } - // +(BRZContentCardRaw * _Nullable)fromJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); - [Static] - [Export ("fromJson:")] - [return: NullAllowed] - BRZContentCardRaw FromJson (NSData json); - // -(void)logImpressionUsing:(Braze * _Nonnull)braze; [Export ("logImpressionUsing:")] void LogImpressionUsing (Braze braze); @@ -563,162 +630,131 @@ interface BRZContentCardRaw: INativeObject // -(void)logClickUsing:(Braze * _Nonnull)braze; [Export ("logClickUsing:")] void LogClickUsing (Braze braze); + // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); + [NullAllowed, Export ("json")] + NSData Json { get; } - // -(void)logDismissedUsing:(Braze * _Nonnull)braze; - [Export ("logDismissedUsing:")] - void LogDismissedUsing (Braze braze); - // (nonatomic) enum BRZContentCardRawType type; + // +(instancetype _Nullable)decodingWithJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); + [Static] + [Export ("decodingWithJson:")] + [return: NullAllowed] + BRZNewsFeedCard DecodingWithJson (NSData json); + // (nonatomic) enum BRZNewsFeedCardType type; [Export ("type", ArgumentSemantic.Assign)] - BRZContentCardRawType Type { get; set; } + BRZNewsFeedCardType Type { get; set; } + + // (copy, nonatomic) NSArray * _Nonnull categories; + [Export ("categories", ArgumentSemantic.Copy)] + BRZNewsFeedCardCategory[] Categories { get; set; } // (nonatomic) double imageAspectRatio; [Export ("imageAspectRatio")] double ImageAspectRatio { get; set; } } - // @interface BRZURLContext : NSObject + // @interface BRZInAppMessageRaw : NSObject [BaseType (typeof(NSObject))] - [DisableDefaultCtor] - interface BRZURLContext + interface BRZInAppMessageRaw { - // @property (copy, nonatomic) NSURL * _Nonnull url; - [Export ("url", ArgumentSemantic.Copy)] + // @property (copy, nonatomic) NSURL * _Nullable url; + [NullAllowed, Export ("url", ArgumentSemantic.Copy)] NSUrl Url { get; set; } // @property (nonatomic) BOOL useWebView; [Export ("useWebView")] bool UseWebView { get; set; } - // @property (nonatomic) BOOL isUniversalLink; - [Export ("isUniversalLink")] - bool IsUniversalLink { get; set; } - - // @property (readonly, copy, nonatomic) NSDictionary * _Nonnull extras; - [Export ("extras", ArgumentSemantic.Copy)] - NSDictionary Extras { get; } - // @property (nonatomic, strong) UIViewController * _Nullable targetViewController; - [NullAllowed, Export ("targetViewController", ArgumentSemantic.Strong)] - UIViewController TargetViewController { get; set; } - - // (readonly, nonatomic) enum BRZChannel channel; - [Export ("channel")] - BRZChannel Channel { get; } - // (readonly, nonatomic) NSUInteger hash; - [Export ("hash")] - nuint Hash { get; } - } - - // @interface BRZSDKAuthenticationError : NSObject - [BaseType (typeof(NSObject))] - [DisableDefaultCtor] - interface BRZSDKAuthenticationError - { - // @property (readonly, nonatomic) NSInteger code; - [Export ("code")] - nint Code { get; } - - // @property (readonly, copy, nonatomic) NSString * _Nullable reason; - [NullAllowed, Export ("reason")] - string Reason { get; } - - // @property (readonly, copy, nonatomic) NSString * _Nullable userId; - [NullAllowed, Export ("userId")] - string UserId { get; } - - // @property (readonly, copy, nonatomic) NSString * _Nullable signature; - [NullAllowed, Export ("signature")] - string Signature { get; } + // @property (copy, nonatomic) NSString * _Nullable message; + [NullAllowed, Export ("message")] + string Message { get; set; } - } + // @property (copy, nonatomic) NSString * _Nullable header; + [NullAllowed, Export ("header")] + string Header { get; set; } - // @interface BRZContentCards : NSObject - [BaseType (typeof(NSObject))] - [DisableDefaultCtor] - interface BRZContentCards - { - // @property (readonly, copy, nonatomic) NSDate * _Nullable lastUpdate; - [NullAllowed, Export ("lastUpdate", ArgumentSemantic.Copy)] - NSDate LastUpdate { get; } + // @property (copy, nonatomic) NSURL * _Nullable imageURL; + [NullAllowed, Export ("imageURL", ArgumentSemantic.Copy)] + NSUrl ImageURL { get; set; } - // (readonly, copy, nonatomic) NSArray * _Nonnull cards; - [Export ("cards", ArgumentSemantic.Copy)] - BRZContentCardRaw[] Cards { get; } + // @property (copy, nonatomic) NSString * _Nullable icon; + [NullAllowed, Export ("icon")] + string Icon { get; set; } - // (readonly, copy, nonatomic) NSArray * _Nonnull unviewedCards; - [Export ("unviewedCards", ArgumentSemantic.Copy)] - BRZContentCardRaw[] UnviewedCards { get; } + // @property (copy, nonatomic) NSDictionary * _Nullable themes; + [NullAllowed, Export ("themes", ArgumentSemantic.Copy)] + NSDictionary Themes { get; set; } - // -(void)requestRefresh; - [Export ("requestRefresh")] - void RequestRefresh (); + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable textColor; + [NullAllowed, Export ("textColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor TextColor { get; set; } - // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; - [Export ("requestRefreshWithCompletion:")] - void RequestRefreshWithCompletion (Action, NSError> completion); + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable headerTextColor; + [NullAllowed, Export ("headerTextColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor HeaderTextColor { get; set; } - // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); - [Export ("subscribeToUpdates:")] - BRZCancellable SubscribeToUpdates (Action> update); - } + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable iconColor; + [NullAllowed, Export ("iconColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor IconColor { get; set; } - // @interface BRZNewsFeedCard : NSObject - [BaseType (typeof(NSObject))] - interface BRZNewsFeedCard: INativeObject - { - // @property (copy, nonatomic) NSString * _Nonnull identifier; - [Export ("identifier")] - string Identifier { get; set; } + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable iconBackgroundColor; + [NullAllowed, Export ("iconBackgroundColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor IconBackgroundColor { get; set; } - // @property (copy, nonatomic) NSURL * _Nullable image; - [NullAllowed, Export ("image", ArgumentSemantic.Copy)] - NSUrl Image { get; set; } + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable backgroundColor; + [NullAllowed, Export ("backgroundColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor BackgroundColor { get; set; } - // @property (copy, nonatomic) NSString * _Nullable title; - [NullAllowed, Export ("title")] - string Title { get; set; } + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable frameColor; + [NullAllowed, Export ("frameColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor FrameColor { get; set; } - // @property (copy, nonatomic) NSString * _Nullable cardDescription; - [NullAllowed, Export ("cardDescription")] - string CardDescription { get; set; } + // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable closeButtonColor; + [NullAllowed, Export ("closeButtonColor", ArgumentSemantic.Strong)] + BRZInAppMessageRawColor CloseButtonColor { get; set; } - // @property (copy, nonatomic) NSString * _Nullable domain; - [NullAllowed, Export ("domain")] - string Domain { get; set; } + // @property (copy, nonatomic) NSArray * _Nullable buttons; + [NullAllowed, Export ("buttons", ArgumentSemantic.Copy)] + BRZInAppMessageRawButton[] Buttons { get; set; } - // @property (copy, nonatomic) NSURL * _Nullable url; - [NullAllowed, Export ("url", ArgumentSemantic.Copy)] - NSUrl Url { get; set; } + // @property (nonatomic) BOOL animateIn; + [Export ("animateIn")] + bool AnimateIn { get; set; } - // @property (nonatomic) BOOL useWebView; - [Export ("useWebView")] - bool UseWebView { get; set; } + // @property (nonatomic) BOOL animateOut; + [Export ("animateOut")] + bool AnimateOut { get; set; } // @property (copy, nonatomic) NSDictionary * _Nonnull extras; [Export ("extras", ArgumentSemantic.Copy)] NSDictionary Extras { get; set; } - // @property (nonatomic) BOOL viewed; - [Export ("viewed")] - bool Viewed { get; set; } + // @property (copy, nonatomic) NSString * _Nullable messageExtras; + [NullAllowed, Export ("messageExtras")] + string MessageExtras { get; set; } - // @property (nonatomic) NSTimeInterval created; - [Export ("created")] - double Created { get; set; } + // @property (copy, nonatomic) NSURL * _Nullable baseURL; + [NullAllowed, Export ("baseURL", ArgumentSemantic.Copy)] + NSUrl BaseURL { get; set; } - // @property (nonatomic) NSTimeInterval updated; - [Export ("updated")] - double Updated { get; set; } + // @property (copy, nonatomic) NSArray * _Nullable assetURLs; + [NullAllowed, Export ("assetURLs", ArgumentSemantic.Copy)] + NSUrl[] AssetURLs { get; set; } - // @property (nonatomic) NSTimeInterval expires; - [Export ("expires")] - double Expires { get; set; } + // @property (nonatomic) BOOL isControl; + [Export ("isControl")] + bool IsControl { get; set; } - // @property (nonatomic, strong) BRZNewsFeedCardContext * _Nullable context; + // @property (readonly, nonatomic) BOOL isTestSend; + [Export ("isTestSend")] + bool IsTestSend { get; } + + // @property (copy, nonatomic) NSDictionary * _Nullable messageFields; + [NullAllowed, Export ("messageFields", ArgumentSemantic.Copy)] + NSDictionary MessageFields { get; set; } + + // @property (nonatomic, strong) BRZInAppMessageContext * _Nullable context; [NullAllowed, Export ("context", ArgumentSemantic.Strong)] - BRZNewsFeedCardContext Context { get; set; } - // @property (readonly, nonatomic) NSUInteger hash; - [Export ("hash")] - nuint Hash { get; } + BRZInAppMessageContext Context { get; set; } // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); [NullAllowed, Export ("json")] @@ -728,40 +764,130 @@ interface BRZNewsFeedCard: INativeObject [Static] [Export ("decodingWithJson:")] [return: NullAllowed] - BRZNewsFeedCard DecodingWithJson (NSData json); + BRZInAppMessageRaw DecodingWithJson (NSData json); + // @property (readonly, nonatomic) NSUInteger hash; + [Export ("hash")] + nuint Hash { get; } + // -(void)logImpressionUsing:(Braze * _Nonnull)braze; [Export ("logImpressionUsing:")] void LogImpressionUsing (Braze braze); - // -(void)logClickUsing:(Braze * _Nonnull)braze; - [Export ("logClickUsing:")] - void LogClickUsing (Braze braze); - // (nonatomic) enum BRZNewsFeedCardType type; + // -(void)logClickWithButtonId:(NSString * _Nullable)buttonId using:(Braze * _Nonnull)braze; + [Export ("logClickWithButtonId:using:")] + void LogClickWithButtonId ([NullAllowed] string buttonId, Braze braze); + // (nonatomic) BOOL _compat_hideChevron; + [Export ("_compat_hideChevron")] + bool _compat_hideChevron { get; set; } + + // (nonatomic) NSInteger _compat_overrideUserInterfaceStyle; + [Export ("_compat_overrideUserInterfaceStyle")] + nint _compat_overrideUserInterfaceStyle { get; set; } + // (nonatomic) enum BRZInAppMessageRawType type; [Export ("type", ArgumentSemantic.Assign)] - BRZNewsFeedCardType Type { get; set; } + BRZInAppMessageRawType Type { get; set; } - // (copy, nonatomic) NSArray * _Nonnull categories; - [Export ("categories", ArgumentSemantic.Copy)] - BRZNewsFeedCardCategory[] Categories { get; set; } + // (nonatomic) enum BRZInAppMessageRawClickAction clickAction; + [Export ("clickAction", ArgumentSemantic.Assign)] + BRZInAppMessageRawClickAction ClickAction { get; set; } - // (nonatomic) double imageAspectRatio; - [Export ("imageAspectRatio")] - double ImageAspectRatio { get; set; } + // (nonatomic) enum BRZInAppMessageRawClose messageClose; + [Export ("messageClose", ArgumentSemantic.Assign)] + BRZInAppMessageRawClose MessageClose { get; set; } + + // (nonatomic) enum BRZInAppMessageRawOrientation orientation; + [Export ("orientation", ArgumentSemantic.Assign)] + BRZInAppMessageRawOrientation Orientation { get; set; } + + // (nonatomic) enum BRZInAppMessageRawTextAlignment messageTextAlignment; + [Export ("messageTextAlignment", ArgumentSemantic.Assign)] + BRZInAppMessageRawTextAlignment MessageTextAlignment { get; set; } + + // (nonatomic) enum BRZInAppMessageRawTextAlignment headerTextAlignment; + [Export ("headerTextAlignment", ArgumentSemantic.Assign)] + BRZInAppMessageRawTextAlignment HeaderTextAlignment { get; set; } + + // (nonatomic) NSTimeInterval duration; + [Export ("duration")] + double Duration { get; set; } + + // (nonatomic) enum BRZInAppMessageRawImageStyle imageStyle; + [Export ("imageStyle", ArgumentSemantic.Assign)] + BRZInAppMessageRawImageStyle ImageStyle { get; set; } + + // (nonatomic) enum BRZInAppMessageRawSlideFrom slideFrom; + [Export ("slideFrom", ArgumentSemantic.Assign)] + BRZInAppMessageRawSlideFrom SlideFrom { get; set; } } - // @interface BRZCancellable : NSObject + // @interface BRZNewsFeed : NSObject [BaseType (typeof(NSObject))] [DisableDefaultCtor] - interface BRZCancellable + interface BRZNewsFeed { - // -(void)cancel; - [Export ("cancel")] - void Cancel (); + // @property (readonly, copy, nonatomic) NSArray * _Nonnull cards; + [Export ("cards", ArgumentSemantic.Copy)] + BRZNewsFeedCard[] Cards { get; } + + // @property (readonly, copy, nonatomic) NSDate * _Nullable lastUpdate; + [NullAllowed, Export ("lastUpdate", ArgumentSemantic.Copy)] + NSDate LastUpdate { get; } + + // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); + [Export ("subscribeToUpdates:")] + BRZCancellable SubscribeToUpdates (Action> update); + + // -(void)requestRefresh; + [Export ("requestRefresh")] + void RequestRefresh (); + + // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; + [Export ("requestRefreshWithCompletion:")] + void RequestRefreshWithCompletion (Action, NSError> completion); + } + + // @interface BRZModalContext : NSObject + [BaseType (typeof(NSObject))] + [DisableDefaultCtor] + interface BRZModalContext + { + // @property (nonatomic, strong) UIViewController * _Nonnull presentingViewController; + [Export ("presentingViewController", ArgumentSemantic.Strong)] + UIViewController PresentingViewController { get; set; } + + // @property (nonatomic) BOOL animatePresentation; + [Export ("animatePresentation")] + bool AnimatePresentation { get; set; } + + // @property (nonatomic) BOOL animateDismissal; + [Export ("animateDismissal")] + bool AnimateDismissal { get; set; } + + // (readonly, nonatomic) enum BRZChannel channel; + [Export ("channel")] + BRZChannel Channel { get; } + } + + // @interface BRZSDKAuthenticationError : NSObject + [BaseType (typeof(NSObject))] + [DisableDefaultCtor] + interface BRZSDKAuthenticationError + { + // @property (readonly, nonatomic) NSInteger code; + [Export ("code")] + nint Code { get; } + + // @property (readonly, copy, nonatomic) NSString * _Nullable reason; + [NullAllowed, Export ("reason")] + string Reason { get; } - // @property (readonly, nonatomic, strong, class) BRZCancellable * _Nonnull empty; - [Static] - [Export ("empty", ArgumentSemantic.Strong)] - BRZCancellable Empty { get; } + // @property (readonly, copy, nonatomic) NSString * _Nullable userId; + [NullAllowed, Export ("userId")] + string UserId { get; } + + // @property (readonly, copy, nonatomic) NSString * _Nullable signature; + [NullAllowed, Export ("signature")] + string Signature { get; } } @@ -1004,283 +1130,204 @@ interface BRZUser bool RemoveLocationCustomAttributeWithKey (string key); } - // @interface BRZNewsFeed : NSObject - [BaseType (typeof(NSObject))] - [DisableDefaultCtor] - interface BRZNewsFeed - { - // @property (readonly, copy, nonatomic) NSArray * _Nonnull cards; - [Export ("cards", ArgumentSemantic.Copy)] - BRZNewsFeedCard[] Cards { get; } - - // @property (readonly, copy, nonatomic) NSDate * _Nullable lastUpdate; - [NullAllowed, Export ("lastUpdate", ArgumentSemantic.Copy)] - NSDate LastUpdate { get; } - - // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); - [Export ("subscribeToUpdates:")] - BRZCancellable SubscribeToUpdates (Action> update); - - // -(void)requestRefresh; - [Export ("requestRefresh")] - void RequestRefresh (); - - // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; - [Export ("requestRefreshWithCompletion:")] - void RequestRefreshWithCompletion (Action, NSError> completion); - } - - // @interface BRZWebViewController : UIViewController - [BaseType (typeof(UIViewController))] - interface BRZWebViewController : IWKNavigationDelegate - { - // @property (copy, nonatomic) NSURL * _Nullable url; - [NullAllowed, Export ("url", ArgumentSemantic.Copy)] - NSUrl Url { get; set; } - - // @property (nonatomic) BOOL animateDismissal; - [Export ("animateDismissal")] - bool AnimateDismissal { get; set; } - - // @property (copy, nonatomic) void (^ _Nullable)(NSURL * _Nonnull) systemOpenURL; - [NullAllowed, Export ("systemOpenURL", ArgumentSemantic.Copy)] - Action SystemOpenURL { get; set; } - // -(void)webView:(WKWebView * _Nonnull)webView decidePolicyForNavigationAction:(WKNavigationAction * _Nonnull)navigationAction decisionHandler:(void (^ _Nonnull)(WKNavigationActionPolicy))decisionHandler __attribute__((swift_async("not_swift_private", 3))); - [Export ("webView:decidePolicyForNavigationAction:decisionHandler:")] - void WebView (WKWebView webView, WKNavigationAction navigationAction, Action decisionHandler); - - // -(void)webView:(WKWebView * _Nonnull)webView didFinishNavigation:(WKNavigation * _Null_unspecified)navigation; - [Export ("webView:didFinishNavigation:")] - void WebView (WKWebView webView, WKNavigation navigation); - - // -(void)webView:(WKWebView * _Nonnull)webView didFailProvisionalNavigation:(WKNavigation * _Null_unspecified)navigation withError:(NSError * _Nonnull)error; - [Export ("webView:didFailProvisionalNavigation:withError:")] - void WebView (WKWebView webView, WKNavigation navigation, NSError error); - - // -(instancetype _Nonnull)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil __attribute__((objc_designated_initializer)); - [Export ("initWithNibName:bundle:")] - [DesignatedInitializer] - NativeHandle Constructor ([NullAllowed] string nibNameOrNil, [NullAllowed] NSBundle nibBundleOrNil); - } - - // @interface BRZNotifications : NSObject + // @interface BRZCancellable : NSObject [BaseType (typeof(NSObject))] [DisableDefaultCtor] - interface BRZNotifications + interface BRZCancellable { - // @property (readonly, copy, nonatomic) NSData * _Nullable deviceToken; - [NullAllowed, Export ("deviceToken", ArgumentSemantic.Copy)] - NSData DeviceToken { get; } - - // -(BOOL)handleBackgroundNotificationWithUserInfo:(NSDictionary * _Nonnull)userInfo fetchCompletionHandler:(void (^ _Nonnull)(UIBackgroundFetchResult))completionHandler __attribute__((warn_unused_result(""))); - [Export ("handleBackgroundNotificationWithUserInfo:fetchCompletionHandler:")] - bool HandleBackgroundNotificationWithUserInfo (NSDictionary userInfo, Action completionHandler); - - // -(BOOL)handleUserNotificationWithResponse:(UNNotificationResponse * _Nonnull)response withCompletionHandler:(void (^ _Nonnull)(void))completionHandler __attribute__((warn_unused_result(""))); - [Export ("handleUserNotificationWithResponse:withCompletionHandler:")] - bool HandleUserNotificationWithResponse (UNNotificationResponse response, Action completionHandler); - - // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(BRZNotificationsPayload * _Nonnull))update __attribute__((warn_unused_result(""))); - [Export ("subscribeToUpdates:")] - BRZCancellable SubscribeToUpdates (Action update); - - // +(BOOL)isBrazeNotification:(NSDictionary * _Nonnull)userInfo __attribute__((warn_unused_result(""))); - [Static] - [Export ("isBrazeNotification:")] - bool IsBrazeNotification (NSDictionary userInfo); + // -(void)cancel; + [Export ("cancel")] + void Cancel (); - // +(BOOL)isInternalNotification:(NSDictionary * _Nonnull)userInfo __attribute__((warn_unused_result(""))); + // @property (readonly, nonatomic, strong, class) BRZCancellable * _Nonnull empty; [Static] - [Export ("isInternalNotification:")] - bool IsInternalNotification (NSDictionary userInfo); + [Export ("empty", ArgumentSemantic.Strong)] + BRZCancellable Empty { get; } - // -(void)registerDeviceToken:(NSData * _Nonnull)deviceToken; - [Export ("registerDeviceToken:")] - void RegisterDeviceToken (NSData deviceToken); - // (copy, nonatomic, class) NSSet * _Nonnull categories; - [Static] - [Export ("categories", ArgumentSemantic.Copy)] - NSSet Categories { get; set; } } - // @interface BRZFeatureFlags : NSObject + // @interface BRZURLContext : NSObject [BaseType (typeof(NSObject))] [DisableDefaultCtor] - interface BRZFeatureFlags + interface BRZURLContext { - // @property (readonly, copy, nonatomic) NSArray * _Nonnull featureFlags; - [Export ("featureFlags", ArgumentSemantic.Copy)] - BRZFeatureFlag[] FeatureFlags { get; } - - // -(BRZFeatureFlag * _Nullable)featureFlagWithId:(NSString * _Nonnull)id __attribute__((warn_unused_result(""))); - [Export ("featureFlagWithId:")] - [return: NullAllowed] - BRZFeatureFlag FeatureFlagWithId (string id); + // @property (copy, nonatomic) NSURL * _Nonnull url; + [Export ("url", ArgumentSemantic.Copy)] + NSUrl Url { get; set; } - // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); - [Export ("subscribeToUpdates:")] - BRZCancellable SubscribeToUpdates (Action> update); + // @property (nonatomic) BOOL useWebView; + [Export ("useWebView")] + bool UseWebView { get; set; } - // -(void)logFeatureFlagImpressionWithId:(NSString * _Nonnull)id; - [Export ("logFeatureFlagImpressionWithId:")] - void LogFeatureFlagImpressionWithId (string id); + // @property (nonatomic) BOOL isUniversalLink; + [Export ("isUniversalLink")] + bool IsUniversalLink { get; set; } - // -(void)requestRefresh; - [Export ("requestRefresh")] - void RequestRefresh (); + // @property (readonly, copy, nonatomic) NSDictionary * _Nonnull extras; + [Export ("extras", ArgumentSemantic.Copy)] + NSDictionary Extras { get; } + // @property (nonatomic, strong) UIViewController * _Nullable targetViewController; + [NullAllowed, Export ("targetViewController", ArgumentSemantic.Strong)] + UIViewController TargetViewController { get; set; } - // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; - [Export ("requestRefreshWithCompletion:")] - void RequestRefreshWithCompletion (Action, NSError> completion); + // (readonly, nonatomic) enum BRZChannel channel; + [Export ("channel")] + BRZChannel Channel { get; } + // (readonly, nonatomic) NSUInteger hash; + [Export ("hash")] + nuint Hash { get; } } - // @interface BRZFeatureFlag : NSObject + // @interface BRZConfiguration : NSObject [BaseType (typeof(NSObject))] - interface BRZFeatureFlag: INativeObject + interface BRZConfiguration { - // @property (copy, nonatomic) NSString * _Nonnull identifier; - [Export ("identifier")] - string Identifier { get; set; } - - // @property (nonatomic) BOOL enabled; - [Export ("enabled")] - bool Enabled { get; set; } - - // @property (copy, nonatomic) NSDictionary * _Nonnull properties; - [Export ("properties", ArgumentSemantic.Copy)] - NSDictionary Properties { get; set; } + // @property (nonatomic, strong) BRZConfigurationApi * _Nonnull api; + [Export ("api", ArgumentSemantic.Strong)] + BRZConfigurationApi Api { get; set; } - // @property (copy, nonatomic) NSString * _Nullable flagTrackingString; - [NullAllowed, Export ("flagTrackingString")] - string FlagTrackingString { get; set; } + // @property (nonatomic, strong) BRZConfigurationPush * _Nonnull push; + [Export ("push", ArgumentSemantic.Strong)] + BRZConfigurationPush Push { get; set; } - // -(NSString * _Nullable)stringPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); - [Export ("stringPropertyForKey:")] - [return: NullAllowed] - string StringPropertyForKey (string key); - // @property (readonly, nonatomic) NSUInteger hash; - [Export ("hash")] - nuint Hash { get; } + // @property (nonatomic, strong) BRZConfigurationLocation * _Nonnull location; + [Export ("location", ArgumentSemantic.Strong)] + BRZConfigurationLocation Location { get; set; } - // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); - [NullAllowed, Export ("json")] - NSData Json { get; } + // @property (nonatomic, strong) BRZConfigurationLogger * _Nonnull logger; + [Export ("logger", ArgumentSemantic.Strong)] + BRZConfigurationLogger Logger { get; set; } - // +(instancetype _Nullable)decodingWithJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); - [Static] - [Export ("decodingWithJson:")] - [return: NullAllowed] - BRZFeatureFlag DecodingWithJson (NSData json); - // -(NSNumber * _Nullable)numberPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); - [Export ("numberPropertyForKey:")] - [return: NullAllowed] - NSNumber NumberPropertyForKey (string key); + // @property (nonatomic) NSTimeInterval sessionTimeout; + [Export ("sessionTimeout")] + double SessionTimeout { get; set; } - // -(NSNumber * _Nullable)boolPropertyForKey:(NSString * _Nonnull)key __attribute__((warn_unused_result(""))); - [Export ("boolPropertyForKey:")] - [return: NullAllowed] - NSNumber BoolPropertyForKey (string key); - } + // @property (nonatomic) NSTimeInterval triggerMinimumTimeInterval; + [Export ("triggerMinimumTimeInterval")] + double TriggerMinimumTimeInterval { get; set; } - // @interface BRZInAppMessageRaw : NSObject - [BaseType (typeof(NSObject))] - interface BRZInAppMessageRaw - { - // @property (copy, nonatomic) NSURL * _Nullable url; - [NullAllowed, Export ("url", ArgumentSemantic.Copy)] - NSUrl Url { get; set; } + // @property (nonatomic) BOOL useUUIDAsDeviceId; + [Export ("useUUIDAsDeviceId")] + bool UseUUIDAsDeviceId { get; set; } - // @property (nonatomic) BOOL useWebView; - [Export ("useWebView")] - bool UseWebView { get; set; } + // @property (nonatomic) BOOL forwardUniversalLinks; + [Export ("forwardUniversalLinks")] + bool ForwardUniversalLinks { get; set; } - // @property (copy, nonatomic) NSString * _Nullable message; - [NullAllowed, Export ("message")] - string Message { get; set; } + // @property (nonatomic) BOOL optInWhenPushAuthorized; + [Export ("optInWhenPushAuthorized")] + bool OptInWhenPushAuthorized { get; set; } - // @property (copy, nonatomic) NSString * _Nullable header; - [NullAllowed, Export ("header")] - string Header { get; set; } + // @property (nonatomic) uint64_t tvOSPersistedSizeLimit; + [Export ("tvOSPersistedSizeLimit")] + ulong TvOSPersistedSizeLimit { get; set; } - // @property (copy, nonatomic) NSURL * _Nullable imageURL; - [NullAllowed, Export ("imageURL", ArgumentSemantic.Copy)] - NSUrl ImageURL { get; set; } + // @property (copy, nonatomic) NSArray * _Nonnull ephemeralEvents; + [Export ("ephemeralEvents", ArgumentSemantic.Copy)] + string[] EphemeralEvents { get; set; } - // @property (copy, nonatomic) NSString * _Nullable icon; - [NullAllowed, Export ("icon")] - string Icon { get; set; } + // -(instancetype _Nonnull)initWithApiKey:(NSString * _Nonnull)apiKey endpoint:(NSString * _Nonnull)endpoint __attribute__((objc_designated_initializer)); + [Export ("initWithApiKey:endpoint:")] + [DesignatedInitializer] + NativeHandle Constructor (string apiKey, string endpoint); - // @property (copy, nonatomic) NSDictionary * _Nullable themes; - [NullAllowed, Export ("themes", ArgumentSemantic.Copy)] - NSDictionary Themes { get; set; } + // (copy, nonatomic) NSArray * _Nonnull devicePropertyAllowList; + [Export ("devicePropertyAllowList", ArgumentSemantic.Copy)] + BRZDeviceProperty[] DevicePropertyAllowList { get; set; } + } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable textColor; - [NullAllowed, Export ("textColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor TextColor { get; set; } + // @interface BRZResources : NSObject + [BaseType (typeof(NSObject))] + interface BRZResources + { + // @property (readonly, nonatomic, strong, class) NSBundle * _Nullable bundle; + [Static] + [NullAllowed, Export ("bundle", ArgumentSemantic.Strong)] + NSBundle Bundle { get; } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable headerTextColor; - [NullAllowed, Export ("headerTextColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor HeaderTextColor { get; set; } + // @property (readonly, copy, nonatomic, class) NSDictionary * _Nonnull acknowledgments; + [Static] + [Export ("acknowledgments", ArgumentSemantic.Copy)] + NSDictionary Acknowledgments { get; } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable iconColor; - [NullAllowed, Export ("iconColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor IconColor { get; set; } + // @property (readonly, copy, nonatomic, class) NSURL * _Nullable license; + [Static] + [NullAllowed, Export ("license", ArgumentSemantic.Copy)] + NSUrl License { get; } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable iconBackgroundColor; - [NullAllowed, Export ("iconBackgroundColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor IconBackgroundColor { get; set; } + } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable backgroundColor; - [NullAllowed, Export ("backgroundColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor BackgroundColor { get; set; } + // @interface BRZContentCardRaw : NSObject + [BaseType (typeof(NSObject))] + interface BRZContentCardRaw: INativeObject + { + // @property (copy, nonatomic) NSString * _Nonnull identifier; + [Export ("identifier")] + string Identifier { get; set; } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable frameColor; - [NullAllowed, Export ("frameColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor FrameColor { get; set; } + // @property (copy, nonatomic) NSURL * _Nullable image; + [NullAllowed, Export ("image", ArgumentSemantic.Copy)] + NSUrl Image { get; set; } - // @property (nonatomic, strong) BRZInAppMessageRawColor * _Nullable closeButtonColor; - [NullAllowed, Export ("closeButtonColor", ArgumentSemantic.Strong)] - BRZInAppMessageRawColor CloseButtonColor { get; set; } + // @property (copy, nonatomic) NSString * _Nullable title; + [NullAllowed, Export ("title")] + string Title { get; set; } - // @property (copy, nonatomic) NSArray * _Nullable buttons; - [NullAllowed, Export ("buttons", ArgumentSemantic.Copy)] - BRZInAppMessageRawButton[] Buttons { get; set; } + // @property (copy, nonatomic) NSString * _Nullable cardDescription; + [NullAllowed, Export ("cardDescription")] + string CardDescription { get; set; } - // @property (nonatomic) BOOL animateIn; - [Export ("animateIn")] - bool AnimateIn { get; set; } + // @property (copy, nonatomic) NSString * _Nullable domain; + [NullAllowed, Export ("domain")] + string Domain { get; set; } - // @property (nonatomic) BOOL animateOut; - [Export ("animateOut")] - bool AnimateOut { get; set; } + // @property (copy, nonatomic) NSURL * _Nullable url; + [NullAllowed, Export ("url", ArgumentSemantic.Copy)] + NSUrl Url { get; set; } - // @property (readonly, nonatomic) BOOL isTestSend; - [Export ("isTestSend")] - bool IsTestSend { get; } + // @property (nonatomic) BOOL useWebView; + [Export ("useWebView")] + bool UseWebView { get; set; } // @property (copy, nonatomic) NSDictionary * _Nonnull extras; [Export ("extras", ArgumentSemantic.Copy)] NSDictionary Extras { get; set; } - // @property (copy, nonatomic) NSURL * _Nullable baseURL; - [NullAllowed, Export ("baseURL", ArgumentSemantic.Copy)] - NSUrl BaseURL { get; set; } + // @property (nonatomic) BOOL viewed; + [Export ("viewed")] + bool Viewed { get; set; } - // @property (copy, nonatomic) NSArray * _Nullable assetURLs; - [NullAllowed, Export ("assetURLs", ArgumentSemantic.Copy)] - NSUrl[] AssetURLs { get; set; } + // @property (nonatomic) BOOL dismissible; + [Export ("dismissible")] + bool Dismissible { get; set; } - // @property (nonatomic) BOOL isControl; - [Export ("isControl")] - bool IsControl { get; set; } + // @property (nonatomic) BOOL removed; + [Export ("removed")] + bool Removed { get; set; } - // @property (copy, nonatomic) NSDictionary * _Nullable messageFields; - [NullAllowed, Export ("messageFields", ArgumentSemantic.Copy)] - NSDictionary MessageFields { get; set; } + // @property (nonatomic) BOOL pinned; + [Export ("pinned")] + bool Pinned { get; set; } - // @property (nonatomic, strong) BRZInAppMessageContext * _Nullable context; + // @property (nonatomic) BOOL clicked; + [Export ("clicked")] + bool Clicked { get; set; } + + // @property (nonatomic) BOOL test; + [Export ("test")] + bool Test { get; set; } + + // @property (nonatomic) NSTimeInterval createdAt; + [Export ("createdAt")] + double CreatedAt { get; set; } + + // @property (nonatomic) NSTimeInterval expiresAt; + [Export ("expiresAt")] + double ExpiresAt { get; set; } + + // @property (nonatomic, strong) BRZContentCardContext * _Nullable context; [NullAllowed, Export ("context", ArgumentSemantic.Strong)] - BRZInAppMessageContext Context { get; set; } + BRZContentCardContext Context { get; set; } // -(NSData * _Nullable)json __attribute__((warn_unused_result(""))); [NullAllowed, Export ("json")] @@ -1290,82 +1337,65 @@ interface BRZInAppMessageRaw [Static] [Export ("decodingWithJson:")] [return: NullAllowed] - BRZInAppMessageRaw DecodingWithJson (NSData json); + BRZContentCardRaw DecodingWithJson (NSData json); // @property (readonly, nonatomic) NSUInteger hash; [Export ("hash")] nuint Hash { get; } + // +(BRZContentCardRaw * _Nullable)fromJson:(NSData * _Nonnull)json __attribute__((warn_unused_result(""))); + [Static] + [Export ("fromJson:")] + [return: NullAllowed] + BRZContentCardRaw FromJson (NSData json); + // -(void)logImpressionUsing:(Braze * _Nonnull)braze; [Export ("logImpressionUsing:")] void LogImpressionUsing (Braze braze); - // -(void)logClickWithButtonId:(NSString * _Nullable)buttonId using:(Braze * _Nonnull)braze; - [Export ("logClickWithButtonId:using:")] - void LogClickWithButtonId ([NullAllowed] string buttonId, Braze braze); - // (nonatomic) BOOL _compat_hideChevron; - [Export ("_compat_hideChevron")] - bool _compat_hideChevron { get; set; } + // -(void)logClickUsing:(Braze * _Nonnull)braze; + [Export ("logClickUsing:")] + void LogClickUsing (Braze braze); - // (nonatomic) NSInteger _compat_overrideUserInterfaceStyle; - [Export ("_compat_overrideUserInterfaceStyle")] - nint _compat_overrideUserInterfaceStyle { get; set; } - // (nonatomic) enum BRZInAppMessageRawType type; + // -(void)logDismissedUsing:(Braze * _Nonnull)braze; + [Export ("logDismissedUsing:")] + void LogDismissedUsing (Braze braze); + // (nonatomic) enum BRZContentCardRawType type; [Export ("type", ArgumentSemantic.Assign)] - BRZInAppMessageRawType Type { get; set; } - - // (nonatomic) enum BRZInAppMessageRawClickAction clickAction; - [Export ("clickAction", ArgumentSemantic.Assign)] - BRZInAppMessageRawClickAction ClickAction { get; set; } - - // (nonatomic) enum BRZInAppMessageRawClose messageClose; - [Export ("messageClose", ArgumentSemantic.Assign)] - BRZInAppMessageRawClose MessageClose { get; set; } - - // (nonatomic) enum BRZInAppMessageRawOrientation orientation; - [Export ("orientation", ArgumentSemantic.Assign)] - BRZInAppMessageRawOrientation Orientation { get; set; } - - // (nonatomic) enum BRZInAppMessageRawTextAlignment messageTextAlignment; - [Export ("messageTextAlignment", ArgumentSemantic.Assign)] - BRZInAppMessageRawTextAlignment MessageTextAlignment { get; set; } - - // (nonatomic) enum BRZInAppMessageRawTextAlignment headerTextAlignment; - [Export ("headerTextAlignment", ArgumentSemantic.Assign)] - BRZInAppMessageRawTextAlignment HeaderTextAlignment { get; set; } - - // (nonatomic) NSTimeInterval duration; - [Export ("duration")] - double Duration { get; set; } - - // (nonatomic) enum BRZInAppMessageRawImageStyle imageStyle; - [Export ("imageStyle", ArgumentSemantic.Assign)] - BRZInAppMessageRawImageStyle ImageStyle { get; set; } + BRZContentCardRawType Type { get; set; } - // (nonatomic) enum BRZInAppMessageRawSlideFrom slideFrom; - [Export ("slideFrom", ArgumentSemantic.Assign)] - BRZInAppMessageRawSlideFrom SlideFrom { get; set; } + // (nonatomic) double imageAspectRatio; + [Export ("imageAspectRatio")] + double ImageAspectRatio { get; set; } } - // @interface BRZModalContext : NSObject + // @interface BRZContentCards : NSObject [BaseType (typeof(NSObject))] [DisableDefaultCtor] - interface BRZModalContext + interface BRZContentCards { - // @property (nonatomic, strong) UIViewController * _Nonnull presentingViewController; - [Export ("presentingViewController", ArgumentSemantic.Strong)] - UIViewController PresentingViewController { get; set; } + // @property (readonly, copy, nonatomic) NSDate * _Nullable lastUpdate; + [NullAllowed, Export ("lastUpdate", ArgumentSemantic.Copy)] + NSDate LastUpdate { get; } - // @property (nonatomic) BOOL animatePresentation; - [Export ("animatePresentation")] - bool AnimatePresentation { get; set; } + // (readonly, copy, nonatomic) NSArray * _Nonnull cards; + [Export ("cards", ArgumentSemantic.Copy)] + BRZContentCardRaw[] Cards { get; } - // @property (nonatomic) BOOL animateDismissal; - [Export ("animateDismissal")] - bool AnimateDismissal { get; set; } + // (readonly, copy, nonatomic) NSArray * _Nonnull unviewedCards; + [Export ("unviewedCards", ArgumentSemantic.Copy)] + BRZContentCardRaw[] UnviewedCards { get; } - // (readonly, nonatomic) enum BRZChannel channel; - [Export ("channel")] - BRZChannel Channel { get; } + // -(void)requestRefresh; + [Export ("requestRefresh")] + void RequestRefresh (); + + // -(void)requestRefreshWithCompletion:(void (^ _Nonnull)(NSArray * _Nullable, NSError * _Nullable))completion; + [Export ("requestRefreshWithCompletion:")] + void RequestRefreshWithCompletion (Action, NSError> completion); + + // -(BRZCancellable * _Nonnull)subscribeToUpdates:(void (^ _Nonnull)(NSArray * _Nonnull))update __attribute__((warn_unused_result(""))); + [Export ("subscribeToUpdates:")] + BRZCancellable SubscribeToUpdates (Action> update); } // @protocol BrazeInAppMessageWindowType @@ -1472,20 +1502,6 @@ interface BRZConfigurationLogger } - // @interface BRZConfigurationPush : NSObject - [BaseType (typeof(NSObject))] - interface BRZConfigurationPush - { - // @property (copy, nonatomic) NSString * _Nullable appGroup; - [NullAllowed, Export ("appGroup")] - string AppGroup { get; set; } - - // @property (nonatomic, strong) BRZConfigurationPushAutomation * _Nonnull automation; - [Export ("automation", ArgumentSemantic.Strong)] - BRZConfigurationPushAutomation Automation { get; set; } - - } - // @interface BRZConfigurationLocation : NSObject [BaseType (typeof(NSObject))] interface BRZConfigurationLocation @@ -1502,12 +1518,34 @@ interface BRZConfigurationLocation [Export ("automaticGeofenceRequests")] bool AutomaticGeofenceRequests { get; set; } + // @property (nonatomic) BOOL allowBackgroundGeofenceUpdates; + [Export ("allowBackgroundGeofenceUpdates")] + bool AllowBackgroundGeofenceUpdates { get; set; } + + // @property (nonatomic) double distanceFilter; + [Export ("distanceFilter")] + double DistanceFilter { get; set; } + // @property (nonatomic, strong) id _Nullable brazeLocationProvider; [NullAllowed, Export ("brazeLocationProvider", ArgumentSemantic.Strong)] NSObject BrazeLocationProvider { get; set; } } + // @interface BRZConfigurationPush : NSObject + [BaseType (typeof(NSObject))] + interface BRZConfigurationPush + { + // @property (copy, nonatomic) NSString * _Nullable appGroup; + [NullAllowed, Export ("appGroup")] + string AppGroup { get; set; } + + // @property (nonatomic, strong) BRZConfigurationPushAutomation * _Nonnull automation; + [Export ("automation", ArgumentSemantic.Strong)] + BRZConfigurationPushAutomation Automation { get; set; } + + } + // @interface BRZDeviceProperty : NSObject [BaseType (typeof(NSObject))] [DisableDefaultCtor] @@ -2198,6 +2236,11 @@ interface BRZTrackingProperty: INativeObject [Export ("pushToken", ArgumentSemantic.Strong)] BRZTrackingProperty PushToken { get; } + // @property (readonly, nonatomic, strong, class) BRZTrackingProperty * _Nonnull pushToStartTokens; + [Static] + [Export ("pushToStartTokens", ArgumentSemantic.Strong)] + BRZTrackingProperty PushToStartTokens { get; } + // +(BRZTrackingProperty * _Nonnull)customAttributeWithAttributes:(NSSet * _Nonnull)attributes __attribute__((warn_unused_result(""))); [Static] [Export ("customAttributeWithAttributes:")] @@ -2337,4 +2380,19 @@ interface BrazeInAppMessagePresenter void PresentMessage (BRZInAppMessageRaw message); } + + // @interface BRZSessionEvent : NSObject + [BaseType (typeof(NSObject))] + [DisableDefaultCtor] + interface BRZSessionEvent + { + // @property (readonly, copy, nonatomic) NSUUID * _Nonnull sessionId; + [Export ("sessionId", ArgumentSemantic.Copy)] + NSUuid SessionId { get; } + + // @property (readonly, nonatomic) enum BRZSessionState state; + [Export ("state")] + BRZSessionState State { get; } + + } } diff --git a/appboy-component/src/ios-brazekit/StructsAndEnums.cs b/appboy-component/src/ios-brazekit/StructsAndEnums.cs index b3dad31..a57812a 100644 --- a/appboy-component/src/ios-brazekit/StructsAndEnums.cs +++ b/appboy-component/src/ios-brazekit/StructsAndEnums.cs @@ -142,6 +142,13 @@ public enum BRZUserSubscriptionState : long Unsubscribed = 2 } + [Native] + public enum BRZSessionState : long + { + Started = 0, + Ended = 1 + } + [Native] public enum BRZTriggerEvent : long { diff --git a/appboy-component/src/ios-brazelocation/ApiDefinitions.cs b/appboy-component/src/ios-brazelocation/ApiDefinitions.cs index 32f49e0..f17108f 100644 --- a/appboy-component/src/ios-brazelocation/ApiDefinitions.cs +++ b/appboy-component/src/ios-brazelocation/ApiDefinitions.cs @@ -1,4 +1,5 @@ using Foundation; +using ObjCRuntime; namespace BrazeLocation { @@ -11,4 +12,15 @@ interface BrazeLocationProvider NSObject Dependency { get; } } + + // @interface BRZLocationResources : NSObject + [BaseType (typeof(NSObject))] + interface BRZLocationResources + { + // @property (readonly, nonatomic, strong, class) NSBundle * _Nullable bundle; + [Static] + [NullAllowed, Export ("bundle", ArgumentSemantic.Strong)] + NSBundle Bundle { get; } + + } } diff --git a/appboy-component/src/ios-brazeui/ApiDefinitions.cs b/appboy-component/src/ios-brazeui/ApiDefinitions.cs index 21e998a..fb3a5ee 100644 --- a/appboy-component/src/ios-brazeui/ApiDefinitions.cs +++ b/appboy-component/src/ios-brazeui/ApiDefinitions.cs @@ -60,6 +60,22 @@ interface BrazeInAppMessageUI [Export ("dismiss")] void Dismiss (); } + + // @interface BRZUIResources : NSObject + [BaseType (typeof(NSObject))] + interface BRZUIResources + { + // @property (readonly, nonatomic, strong, class) NSBundle * _Nullable bundle; + [Static] + [NullAllowed, Export ("bundle", ArgumentSemantic.Strong)] + NSBundle Bundle { get; } + + // @property (readonly, copy, nonatomic, class) NSDictionary * _Nonnull acknowledgments; + [Static] + [Export ("acknowledgments", ArgumentSemantic.Copy)] + NSDictionary Acknowledgments { get; } + + } // @interface BRZContentCardUIModalViewController : UINavigationController [BaseType (typeof(UINavigationController))] [DisableDefaultCtor] diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/Info.plist b/appboy-component/src/ios-unified/SDWebImage.xcframework/Info.plist index 23d7ada..c848cc8 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/Info.plist +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/Info.plist @@ -5,8 +5,24 @@ AvailableLibraries + BinaryPath + SDWebImage.framework/SDWebImage LibraryIdentifier - ios-arm64_x86_64-maccatalyst + xros-arm64 + LibraryPath + SDWebImage.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + xros + + + BinaryPath + SDWebImage.framework/SDWebImage + LibraryIdentifier + ios-arm64_x86_64-simulator LibraryPath SDWebImage.framework SupportedArchitectures @@ -17,11 +33,13 @@ SupportedPlatform ios SupportedPlatformVariant - maccatalyst + simulator + BinaryPath + SDWebImage.framework/Versions/A/SDWebImage LibraryIdentifier - ios-arm64_x86_64-simulator + ios-arm64_x86_64-maccatalyst LibraryPath SDWebImage.framework SupportedArchitectures @@ -32,9 +50,11 @@ SupportedPlatform ios SupportedPlatformVariant - simulator + maccatalyst + BinaryPath + SDWebImage.framework/SDWebImage LibraryIdentifier ios-arm64 LibraryPath @@ -46,6 +66,23 @@ SupportedPlatform ios + + BinaryPath + SDWebImage.framework/SDWebImage + LibraryIdentifier + xros-arm64_x86_64-simulator + LibraryPath + SDWebImage.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + xros + SupportedPlatformVariant + simulator + CFBundlePackageType XFWK diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImage.h index 2e208cd..78739c5 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImage.h @@ -72,7 +72,8 @@ // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. // You should use these methods to create a new animated image. Use other methods just call super instead. -// Pay attention, when the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. +// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. +// @note When the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support #if __has_include() + (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support @@ -88,6 +89,8 @@ /** Current animated image format. + @note This format is only valid when `animatedImageData` not nil. + @note This actually just call `[NSData sd_imageFormatForImageData:self.animatedImageData]` */ @property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; @@ -107,8 +110,26 @@ // By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the description in `SDAnimatedImage` protocol. // After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need. +/** + Pre-load all animated image frame into memory. Then later frame image request can directly return the frame for index without decoding. + This method may be called on background thread. + + @note If one image instance is shared by lots of imageViews, the CPU performance for large animated image will drop down because the request frame index will be random (not in order) and the decoder should take extra effort to keep it re-entrant. You can use this to reduce CPU usage if need. Attention this will consume more memory usage. + */ - (void)preloadAllFrames; + +/** + Unload all animated image frame from memory if are already pre-loaded. Then later frame image request need decoding. You can use this to free up the memory usage if need. + */ - (void)unloadAllFrames; +/** + Returns a Boolean value indicating whether all animated image frames are already pre-loaded into memory. + */ @property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; +/** + Return the animated image coder if the image is created with `initWithAnimatedCoder:scale:` method. + @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. + */ +@property (nonatomic, strong, readonly, nullable) id animatedCoder; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h index e71e239..77e041a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageCoder.h" +/// Animated image playback mode typedef NS_ENUM(NSUInteger, SDAnimatedImagePlaybackMode) { /** * From first to last frame and stop or next loop. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImageRep.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImageRep.h index be52f8c..dec2fbd 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImageRep.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDAnimatedImageRep.h @@ -10,6 +10,8 @@ #if SD_MAC +#import "NSData+ImageContentType.h" + /** A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. 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. @@ -18,6 +20,14 @@ */ @interface SDAnimatedImageRep : NSBitmapImageRep +/// Current animated image format. +/// @note This format is only valid when `animatedImageData` not nil +@property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; + +/// This allows to retrive the compressed data like GIF using `sd_imageData` on parent `NSImage`, without re-encoding (waste CPU and RAM) +/// @note This is typically nonnull when you create with `initWithData:`, even it's marked as weak, because ImageIO retain it +@property (nonatomic, readonly, nullable, weak) NSData *animatedImageData; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h index 900acd7..7b185fe 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h @@ -17,11 +17,17 @@ For others (macOS/watchOS or iOS/tvOS 10-), these method use the `SDImageGraphics.h` to implements the same behavior (but without dynamic bitmap support) */ +/// A closure for drawing an image. typedef void (^SDGraphicsImageDrawingActions)(CGContextRef _Nonnull context); +/// Constants that specify the color range of the image renderer context. typedef NS_ENUM(NSInteger, SDGraphicsImageRendererFormatRange) { + /// The image renderer context doesn’t specify a color range. SDGraphicsImageRendererFormatRangeUnspecified = -1, + /// The system automatically chooses the image renderer context’s pixel format according to the color range of its content. SDGraphicsImageRendererFormatRangeAutomatic = 0, + /// The image renderer context supports wide color. SDGraphicsImageRendererFormatRangeExtended, + /// The image renderer context doesn’t support extended colors. SDGraphicsImageRendererFormatRangeStandard }; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCache.h index 9a75580..3cf9168 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCache.h @@ -37,8 +37,10 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDImageCacheAvoidDecodeImage = 1 << 4, + SDImageCacheAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 4, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. */ @@ -225,6 +227,28 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock; +/** + * Asynchronously store an image into memory and disk cache at the given key. + * + * @param image The image to store + * @param imageData The image data as returned by the server, this representation will be used for disk storage + * instead of converting the given image object into a storable/compressed image format in order + * to save quality and CPU + * @param key The unique image cache key, usually it's image absolute URL + * @param options A mask to specify options to use for this store + * @param context The context options to use. Pass `.callbackQueue` to control callback queue + * @param cacheType The image store op cache type + * @param completionBlock A block executed after the operation is finished + * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock; + /** * Synchronously store an image into memory cache at the given key. * @@ -299,6 +323,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -311,6 +336,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancellederation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -324,6 +350,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCacheDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCacheDefine.h index eb020f4..b33bada 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCacheDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCacheDefine.h @@ -81,22 +81,23 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query */ - (nullable id)queryImageForKey:(nullable NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; + completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("queryImageForKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +@optional /** Query the cached image from image cache for given key. The operation can be used to cancel the query. If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param cacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query @@ -107,21 +108,43 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; +@required +/** + Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. + + @param image The image to store + @param imageData The image data to be used for disk storage + @param key The image cache key + @param cacheType The image store op cache type + @param completionBlock A block executed after the operation is finished + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("storeImage:imageData:forKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + +@optional /** Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @param image The image to store @param imageData The image data to be used for disk storage @param key The image cache key + @param options A mask to specify options to use for this store + @param context The context options to use. Pass `.callbackQueue` to control callback queue @param cacheType The image store op cache type @param completionBlock A block executed after the operation is finished */ - (void)storeImage:(nullable UIImage *)image imageData:(nullable NSData *)imageData forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock; +#pragma mark - Deprecated because SDWebImageManager does not use these APIs /** Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -131,7 +154,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)removeImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else asynchronously. @@ -142,7 +165,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)containsImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock; + completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -151,6 +174,6 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param completionBlock A block executed after the operation is finished */ - (void)clearWithCacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoder.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoder.h index eeaeb69..c6501ea 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoder.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoder.h @@ -9,6 +9,7 @@ #import #import "SDWebImageCompat.h" #import "NSData+ImageContentType.h" +#import "SDImageFrame.h" typedef NSString * SDImageCoderOption NS_STRING_ENUM; typedef NSDictionary SDImageCoderOptions; @@ -74,6 +75,19 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeTypeIdenti */ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeUseLazyDecoding; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note You can use the logic from `+[SDImageCoder scaledSizeWithImageSize:limitBytes:bytesPerPixel:frameCount:]` + @note This option has higher priority than `.decodeThumbnailPixelSize` + */ +FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeScaleDownLimitBytes; + // These options are for image encoding /** A Boolean value indicating whether to encode the first frame only for animated image during encoding. (NSNumber). If not provide, encode animated image if need. @@ -171,7 +185,8 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext /** Encode the image to image data. - @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. + @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. But this consume time is not always reversible. In 5.15.0, we introduce `encodedDataWithFrames` API for better animated image encoding. Use that instead. + @note Which means, this just forward to `encodedDataWithFrames([SDImageFrame(image: image, duration: 0], image.sd_imageLoopCount))` @param image The image to be encoded @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible @@ -182,6 +197,21 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options; +#pragma mark - Animated Encoding +@optional +/** + Encode the animated image frames to image data. + + @param frames The animated image frames to be encoded, should be at least 1 element, or it will fallback to static image encode. + @param loopCount The final animated image loop count. 0 means infinity loop. This config ignore each frame's `sd_imageLoopCount` + @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible + @param options A dictionary containing any encoding options. Pass @{SDImageCoderEncodeCompressionQuality: @(1)} to specify compression quality. + @return The encoded image data + */ +- (nullable NSData *)encodedDataWithFrames:(nonnull NSArray*)frames + loopCount:(NSUInteger)loopCount + format:(SDImageFormat)format + options:(nullable SDImageCoderOptions *)options; @end #pragma mark - Progressive Coder diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoderHelper.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoderHelper.h index 8502b39..d0b5115 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoderHelper.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageCoderHelper.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageFrame.h" +/// The options controls how we force pre-draw the image (to avoid lazy-decoding). Which need OS's framework compatibility typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { /// automatically choose the solution based on image format, hardware, OS version. This keep balance for compatibility and performance. Default after SDWebImage 5.13.0 SDImageCoderDecodeSolutionAutomatic, @@ -19,6 +20,35 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { SDImageCoderDecodeSolutionUIKit }; +/// The policy to force-decode the origin CGImage (produced by Image Coder Plugin) +/// Some CGImage may be lazy, or not lazy, but need extra copy to render on screen +/// The force-decode step help to `pre-process` to get the best suitable CGImage to render, which can increase frame rate +/// The downside is that force-decode may consume RAM and CPU, and may loss the `lazy` support (lazy CGImage can be purged when memory warning, and re-created if need), see more: `SDImageCoderDecodeUseLazyDecoding` +typedef NS_ENUM(NSUInteger, SDImageForceDecodePolicy) { + /// Based on input CGImage's colorspace, alignment, bitmapinfo, if it may trigger `CA::copy_image` extra copy, we will force-decode, else don't + SDImageForceDecodePolicyAutomatic, + /// Never force decode input CGImage + SDImageForceDecodePolicyNever, + /// Always force decode input CGImage (only once) + SDImageForceDecodePolicyAlways +}; + +/// Byte alignment the bytes size with alignment +/// - Parameters: +/// - size: The bytes size +/// - alignment: The alignment, in bytes +static inline size_t SDByteAlign(size_t size, size_t alignment) { + return ((size + (alignment - 1)) / alignment) * alignment; +} + +/// The pixel format about the information to call `CGImageCreate` suitable for current hardware rendering +typedef struct SDImagePixelFormat { + /// Typically is pre-multiplied RGBA8888 for alpha image, RGBX8888 for non-alpha image. + CGBitmapInfo bitmapInfo; + /// Typically is 32, the 8 pixels bytesPerRow. + size_t alignment; +} SDImagePixelFormat; + /** Provide some common helper methods for building the image decoder/encoder. */ @@ -44,16 +74,31 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (NSArray * _Nullable)framesFromAnimatedImage:(UIImage * _Nullable)animatedImage NS_SWIFT_NAME(frames(from:)); +#pragma mark - Preferred Rendering Format +/// For coders who use `CGImageCreate`, use the information below to create an effient CGImage which can be render on GPU without Core Animation's extra copy (`CA::Render::copy_image`), which can be debugged using `Color Copied Image` in Xcode Instruments +/// `CGImageCreate`'s `bytesPerRow`, `space`, `bitmapInfo` params should use the information below. /** Return the shared device-dependent RGB color space. This follows The Get Rule. - On iOS, it's created with deviceRGB (if available, use sRGB). - On macOS, it's from the screen colorspace (if failed, use deviceRGB) Because it's shared, you should not retain or release this object. + Typically is sRGB for iOS, screen color space (like Color LCD) for macOS. @return The device-dependent RGB color space */ + (CGColorSpaceRef _Nonnull)colorSpaceGetDeviceRGB CF_RETURNS_NOT_RETAINED; +/** + Tthis returns the pixel format **Preferred from current hardward && OS using runtime detection** + @param containsAlpha Whether the image to render contains alpha channel + */ ++ (SDImagePixelFormat)preferredPixelFormat:(BOOL)containsAlpha; + +/** + Check whether CGImage is hardware supported to rendering on screen, without the trigger of `CA::Render::copy_image` + You can debug the copied image by using Xcode's `Color Copied Image`, the copied image will turn Cyan and occupy double RAM for bitmap buffer. + Typically, when the CGImage's using the method above (`colorspace` / `alignment` / `bitmapInfo`) can render withtout the copy. + */ ++ (BOOL)CGImageIsHardwareSupported:(_Nonnull CGImageRef)cgImage; + /** Check whether CGImage contains alpha channel. @@ -86,6 +131,8 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. It will detect whether the image size matching the scale size, if not, stretch the image to the target size. @note If you need to keep aspect ratio, you can calculate the scale size by using `scaledSizeWithImageSize` first. + @note This scale does not change bits per components (which means RGB888 in, RGB888 out), supports 8/16/32(float) bpc. But the method in UIImage+Transform does not gurantee this. + @note All supported CGImage pixel format: https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB @param cgImage The CGImage @param size The scale size in pixel. @@ -103,23 +150,50 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp; +/// Calculate the limited image size with the bytes, when using `SDImageCoderDecodeScaleDownLimitBytes`. This preserve aspect ratio and never scale up +/// @param imageSize The image size (in pixel or point defined by caller) +/// @param limitBytes The limit bytes +/// @param bytesPerPixel The bytes per pixel +/// @param frameCount The image frame count, 0 means 1 frame as well ++ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize limitBytes:(NSUInteger)limitBytes bytesPerPixel:(NSUInteger)bytesPerPixel frameCount:(NSUInteger)frameCount; /** Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. @param image The image to be decoded + @note This translate to `decodedImageWithImage:policy:` with automatic policy @return The decoded image */ + (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image; +/** + Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. + @param image The image to be decoded + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded image + */ ++ (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image policy:(SDImageForceDecodePolicy)policy; + /** Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. @param image The image to be decoded and scaled down @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @note This translate to `decodedAndScaledDownImageWithImage:limitBytes:policy:` with automatic policy @return The decoded and probably scaled down image */ + (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; +/** + Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. + @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. + + @param image The image to be decoded and scaled down + @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded and probably scaled down image + */ ++ (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes policy:(SDImageForceDecodePolicy)policy; + /** Control the default force decode solution. Available solutions in `SDImageCoderDecodeSolution`. @note Defaults to `SDImageCoderDecodeSolutionAutomatic`, which prefers to use UIKit for JPEG/HEIF, and fallback on CoreGraphics. If you want control on your hand, set the other solution. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageFrame.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageFrame.h index a93fd9c..41f3965 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageFrame.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageFrame.h @@ -24,6 +24,11 @@ */ @property (nonatomic, readonly, assign) NSTimeInterval duration; +/// Create a frame instance with specify image and duration +/// @param image current frame's image +/// @param duration current frame's duration +- (nonnull instancetype)initWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + /** Create a frame instance with specify image and duration @@ -31,6 +36,9 @@ @param duration current frame's duration @return frame instance */ -+ (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; ++ (nonnull instancetype)frameWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + +- (nonnull instancetype)init NS_UNAVAILABLE; ++ (nonnull instancetype)new NS_UNAVAILABLE; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageLoader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageLoader.h index addad83..5ecec5d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageLoader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDImageLoader.h @@ -81,7 +81,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @param url The image URL to be loaded. @return YES to continue download, NO to stop download. */ -- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED("Use canRequestImageForURL:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED_WITH_REPLACEMENT("canRequestImageForURL:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** @@ -125,7 +125,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @return Whether to block this url or not. Return YES to mark this URL as failed. */ - (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error API_DEPRECATED("Use shouldBlockFailedURLWithURL:error:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + error:(nonnull NSError *)error API_DEPRECATED_WITH_REPLACEMENT("shouldBlockFailedURLWithURL:error:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImage.h index 0e56800..6bc9de8 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImage.h @@ -18,6 +18,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import #import +#import #import #import #import @@ -39,6 +40,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; #import #import #import +#import #import #import #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageCompat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageCompat.h index f47a248..530b147 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageCompat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageCompat.h @@ -21,14 +21,6 @@ #define SD_MAC 0 #endif -// iOS and tvOS are very similar, UIKit exists on both platforms -// Note: watchOS also has UIKit, but it's very limited -#if TARGET_OS_IOS || TARGET_OS_TV - #define SD_UIKIT 1 -#else - #define SD_UIKIT 0 -#endif - #if TARGET_OS_IOS #define SD_IOS 1 #else @@ -47,6 +39,20 @@ #define SD_WATCH 0 #endif +// Supports Xcode 14 to suppress warning +#ifdef TARGET_OS_VISION +#if TARGET_OS_VISION + #define SD_VISION 1 +#endif +#endif + +// iOS/tvOS/visionOS are very similar, UIKit exists on both platforms +// Note: watchOS also has UIKit, but it's very limited +#if SD_IOS || SD_TV || SD_VISION + #define SD_UIKIT 1 +#else + #define SD_UIKIT 0 +#endif #if SD_MAC #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDefine.h index df7c7fa..f6ae2d2 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDefine.h @@ -107,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * of the placeholder image until after the image has finished loading. * @note This is used to treate placeholder as an **Error Placeholder** but not **Loading Placeholder** by defaults. if the image loading is cancelled or error, the placeholder will be always set. * @note Therefore, if you want both **Error Placeholder** and **Loading Placeholder** exist, use `SDWebImageAvoidAutoSetImage` to manually set the two placeholders and final loaded image by your hand depends on loading result. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageDelayPlaceholder = 1 << 8, @@ -120,6 +121,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, image is added to the imageView after download. But in some cases, we want to * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) * Use this flag if you want to manually set the image in the completion when success + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageAvoidAutoSetImage = 1 << 10, @@ -127,9 +129,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, images are decoded respecting their original size. * This flag will scale down the images to a size compatible with the constrained memory of devices. * To control the limit memory bytes, check `SDImageCoderHelper.defaultScaleDownLimitBytes` (Defaults to 60MB on iOS) - * This will actually translate to use context option `.imageThumbnailPixelSize` from v5.5.0 (Defaults to (3966, 3966) on iOS). Previously does not. - * This flags effect the progressive and animated images as well from v5.5.0. Previously does not. - * @note If you need detail controls, it's better to use context option `imageThumbnailPixelSize` and `imagePreserveAspectRatio` instead. + * (from 5.16.0) This will actually translate to use context option `SDWebImageContextImageScaleDownLimitBytes`, which check and calculate the thumbnail pixel size occupied small than limit bytes (including animated image) + * (from 5.5.0) This flags effect the progressive and animated images as well + * @note If you need detail controls, it's better to use context option `imageScaleDownBytes` instead. + * @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) */ SDWebImageScaleDownLargeImages = 1 << 11, @@ -164,6 +167,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { /** * By default, when you use `SDWebImageTransition` to do some view transition after the image load finished, this transition is only applied for image when the callback from manager is asynchronous (from network, or disk cache query) * This mask can force to apply view transition for any cases, like memory cache query, or sync disk cache query. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageForceTransition = 1 << 17, @@ -171,8 +175,9 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing an issue due to excessive memory consumption, This flag can prevent decode the image. * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageAvoidDecodeImage = 1 << 18, + SDWebImageAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 18, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -204,7 +209,15 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * We usually don't apply transform on vector images, because vector images supports dynamically changing to any size, rasterize to a fixed size will loss details. To modify vector images, you can process the vector data at runtime (such as modifying PDF tag / SVG element). * Use this flag to transform them anyway. */ - SDWebImageTransformVectorImage = 1 << 23 + SDWebImageTransformVectorImage = 1 << 23, + + /** + * By defaults, when you use UI-level category like `sd_setImageWithURL:` on UIImageView, it will cancel the loading image requests. + * However, some users may choose to not cancel the loading image requests and always start new pipeline. + * Use this flag to disable automatic cancel behavior. + * @note This options is UI level options, has no usage on ImageManager or other components. + */ + SDWebImageAvoidAutoCancelImage = 1 << 24, }; @@ -221,6 +234,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextSetIma */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager API_DEPRECATED("Use individual context option like .imageCache, .imageLoader and .imageTransformer instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +/** + A `SDCallbackQueue` instance which controls the `Cache`/`Manager`/`Loader`'s callback queue for their completionBlock. + This is useful for user who call these 3 components in non-main queue and want to avoid callback in main queue. + @note For UI callback (`sd_setImageWithURL`), we will still use main queue to dispatch, means if you specify a global queue, it will enqueue from the global queue to main queue. + @note This does not effect the components' working queue (for example, `Cache` still query disk on internal ioQueue, `Loader` still do network on URLSessionConfiguration.delegateQueue), change those config if you need. + Defaults to nil. Which means main queue. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCallbackQueue; + /** A id instance which conforms to `SDImageCache` protocol. It's used to override the image manager's cache during the image loading pipeline. In other word, if you just want to specify a custom cache during image loading, you don't need to re-create a dummy SDWebImageManager instance with the cache. If not provided, use the image manager's cache (id) @@ -246,6 +268,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageC */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTransformer; +#pragma mark - Force Decode Options + +/** + A NSNumber instance which store the`SDImageForceDecodePolicy` enum. This is used to control how current image loading should force-decode the decoded image (CGImage, typically). See more what's force-decode means in `SDImageForceDecodePolicy` comment. + Defaults to `SDImageForceDecodePolicyAutomatic`, which will detect the input CGImage's metadata, and only force-decode if the input CGImage can not directly render on screen (need extra CoreAnimation Copied Image and increase RAM usage). + @note If you want to always the force-decode for this image request, pass `SDImageForceDecodePolicyAlways`, for example, some WebP images which does not created by ImageIO. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageForceDecodePolicy; + #pragma mark - Image Decoder Context Options /** @@ -284,8 +315,28 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageT */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTypeIdentifierHint; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note This option has higher priority than `.imageThumbnailPixelSize` + @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageScaleDownLimitBytes; + #pragma mark - Cache Context Options +/** + A Dictionary (SDImageCoderOptions) value, which pass the extra encode options to the SDImageCoder. Introduced in SDWebImage 5.15.0 + You can pass encode options like `compressionQuality`, `maxFileSize`, `maxPixelSize` to control the encoding related thing, this is used inside `SDImageCache` during store logic. + @note For developer who use custom cache protocol (not SDImageCache instance), they need to upgrade and use these options for encoding. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageEncodeOptions; + /** A SDImageCacheType raw value which specify the source of cache to query. Specify `SDImageCacheTypeDisk` to query from disk cache only; `SDImageCacheTypeMemory` to query from memory only. And `SDImageCacheTypeAll` to query from both memory cache and disk cache. Specify `SDImageCacheTypeNone` is invalid and totally ignore the cache query. If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDownloader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDownloader.h index a2f50f4..08ae16b 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDownloader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageDownloader.h @@ -74,8 +74,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageDownloaderAvoidDecodeImage = 1 << 9, + SDWebImageDownloaderAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 9, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -95,9 +97,13 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderMatchAnimatedImageClass = 1 << 12, }; +/// Posed when URLSessionTask started (`resume` called)) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStartNotification; +/// Posed when URLSessionTask get HTTP response (`didReceiveResponse:completionHandler:` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadReceiveResponseNotification; +/// Posed when URLSessionTask stoped (`didCompleteWithError:` with error or `cancel` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStopNotification; +/// Posed when URLSessionTask finished with success (`didCompleteWithError:` without error) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadFinishNotification; typedef SDImageLoaderProgressBlock SDWebImageDownloaderProgressBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageError.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageError.h index bb91d0b..652b0d7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageError.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageError.h @@ -9,6 +9,7 @@ #import "SDWebImageCompat.h" +/// An error domain represent SDWebImage loading system with custom codes FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; /// The response instance for invalid download response (NSURLResponse *) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageIndicator.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageIndicator.h index e1165c1..522dc47 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageIndicator.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImageIndicator.h @@ -66,6 +66,7 @@ */ @interface SDWebImageActivityIndicator (Conveniences) +#if !SD_VISION /// These indicator use the fixed color without dark mode support /// gray-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *grayIndicator; @@ -75,6 +76,7 @@ @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteIndicator; /// large white-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteLargeIndicator; +#endif /// These indicator use the system style, supports dark mode if available (iOS 13+/macOS 10.14+) /// large activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *largeIndicator; @@ -107,8 +109,10 @@ /// default-style progress indicator @property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *defaultIndicator; +#if SD_UIKIT /// bar-style progress indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(macos, tvos); +@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(tvos); +#endif @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImagePrefetcher.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImagePrefetcher.h index a9b2c1f..2256cc0 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImagePrefetcher.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/SDWebImagePrefetcher.h @@ -76,20 +76,23 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, /** * The options for prefetcher. Defaults to SDWebImageLowPriority. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in manager level. */ -@property (nonatomic, assign) SDWebImageOptions options; +@property (nonatomic, assign) SDWebImageOptions options API_DEPRECATED("Use individual prefetch options param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * The context for prefetcher. Defaults to nil. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in `SDWebImageManager.optionsProcessor`. */ -@property (nonatomic, copy, nullable) SDWebImageContext *context; +@property (nonatomic, copy, nullable) SDWebImageContext *context API_DEPRECATED("Use individual prefetch context param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * Queue options for prefetcher when call the progressBlock, completionBlock and delegate methods. Defaults to Main Queue. - * @note The call is asynchronously to avoid blocking target queue. + * @deprecated 5.15.0 introduce SDCallbackQueue, use that is preferred and has higher priority. The set/get to this property will translate to that instead. + * @note The call is asynchronously to avoid blocking target queue. (see SDCallbackPolicyDispatch) * @note The delegate queue should be set before any prefetching start and may not be changed during prefetching to avoid thread-safe problem. */ -@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue; +@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue API_DEPRECATED("Use SDWebImageContextCallbackQueue context param instead, see SDCallbackQueue", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)); /** * The delegate for the prefetcher. Defaults to nil. @@ -134,6 +137,28 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; +/** + * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. + * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. + * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. + * + * @param urls list of URLs to prefetch + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + * @param progressBlock block to be called when progress updates; + * first parameter is the number of completed (successful or not) requests, + * second parameter is the total number of images originally requested to be prefetched + * @param completionBlock block to be called when the current prefetching is completed + * first param is the number of completed (successful or not) requests, + * second parameter is the number of skipped requests + * @return the token to cancel the current prefetching. + */ +- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock + completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; + /** * Remove and cancel all the prefeching for the prefetcher. */ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIButton+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIButton+WebCache.h index 89d94b4..8a898c7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIButton+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIButton+WebCache.h @@ -21,6 +21,7 @@ /** * Get the current image URL. + * This simply translate to `[self sd_imageURLForState:self.state]` from v5.18.0 */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; @@ -31,6 +32,13 @@ */ - (nullable NSURL *)sd_imageURLForState:(UIControlState)state; +/** + * Get the image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_imageOperationKeyForState:(UIControlState)state; + /** * Set the button `image` with an `url`. * @@ -202,6 +210,13 @@ */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentBackgroundImageURL; +/** + * Get the background image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_backgroundImageOperationKeyForState:(UIControlState)state; + /** * Get the background image URL for a control state. * diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+ForceDecode.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+ForceDecode.h index f368746..658659a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+ForceDecode.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+ForceDecode.h @@ -15,6 +15,12 @@ /** A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. + Force decode is used for 2 cases: + -- 1. for ImageIO created image (via `CGImageCreateWithImageSource` SPI), it's lazy and we trigger the decode before rendering + -- 2. for non-ImageIO created image (via `CGImageCreate` API), we can ensure it's alignment is suitable to render on screen without copy by CoreAnimation + @note For coder plugin developer, always use the SDImageCoderHelper's `colorSpaceGetDeviceRGB`/`preferredPixelFormat` to create CGImage. + @note For more information why force decode, see: https://github.com/path/FastImageCache#byte-alignment + @note From v5.17.0, the default value is always NO. Use `SDImageForceDecodePolicy` to control complicated policy. */ @property (nonatomic, assign) BOOL sd_isDecoded; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+MultiFormat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+MultiFormat.h index a0935b5..e495c74 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+MultiFormat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+MultiFormat.h @@ -46,6 +46,7 @@ Encode the current image to the data, the image format is unspecified @note If the receiver is `SDAnimatedImage`, this will return the animated image data if available. No more extra encoding process. + @note For macOS, if the receiver contains only `SDAnimatedImageRep`, this will return the animated image data if available. No more extra encoding process. @return The encoded data. If can't encode, return nil */ - (nullable NSData *)sd_imageData; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+Transform.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+Transform.h index 06cb66d..60b488a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+Transform.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImage+Transform.h @@ -8,9 +8,13 @@ #import "SDWebImageCompat.h" +/// The scale mode to apply when image drawing on a container with different sizes. typedef NS_ENUM(NSUInteger, SDImageScaleMode) { + /// The option to scale the content to fit the size of itself by changing the aspect ratio of the content if necessary. SDImageScaleModeFill = 0, + /// The option to scale the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. SDImageScaleModeAspectFit = 1, + /// The option to scale the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds. SDImageScaleModeAspectFill = 2 }; @@ -103,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color at specify position. The point is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The point's x/y will be converted into integer. @note The point's x/y should not be smaller than 0, or greater than or equal to width/height. @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. @@ -113,6 +118,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color array with specify rectangle. The rect is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The rect's origin and size will be converted into integer. @note The rect's width/height should not be smaller than or equal to 0. The minX/minY should not be smaller than 0. The maxX/maxY should not be greater than width/height. Attention this limit is different from `sd_colorAtPoint:` (point: (0, 0) like rect: (0, 0, 1, 1)) @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h index 6cd3ba6..80fabc6 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h @@ -17,6 +17,13 @@ */ @interface UIImageView (HighlightedWebCache) +#pragma mark - Highlighted Image + +/** + * Get the current highlighted image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentHighlightedImageURL; + /** * Set the imageView `highlightedImage` with an `url`. * @@ -124,6 +131,12 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current highlighted image load (for `UIImageView.highlighted`) + * @note For normal image, use `sd_cancelCurrentImageLoad` + */ +- (void)sd_cancelCurrentHighlightedImageLoad; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+WebCache.h index 626de9d..46b5a70 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIImageView+WebCache.h @@ -45,6 +45,15 @@ */ @interface UIImageView (WebCache) +#pragma mark - Image State + +/** + * Get the current image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; + +#pragma mark - Image Loading + /** * Set the imageView `image` with an `url`. * @@ -191,4 +200,10 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current normal image load (for `UIImageView.image`) + * @note For highlighted image, use `sd_cancelCurrentHighlightedImageLoad` + */ +- (void)sd_cancelCurrentImageLoad; + @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCache.h index 48175f1..c15edaa 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCache.h @@ -11,6 +11,8 @@ #import "SDWebImageManager.h" #import "SDWebImageTransition.h" #import "SDWebImageIndicator.h" +#import "UIView+WebCacheOperation.h" +#import "UIView+WebCacheState.h" /** The value specify that the image progress unit count cannot be determined because the progressBlock is not been called. @@ -24,27 +26,34 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima */ @interface UIView (WebCache) -/** - * Get the current image URL. - * - * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; - /** * Get the current image operation key. Operation key is used to identify the different queries for one view instance (like UIButton). * See more about this in `SDWebImageContextSetImageOperationKey`. - * If you cancel current image load, the key will be set to nil. + * * @note You can use method `UIView+WebCacheOperation` to investigate different queries' operation. + * @note For the history version compatible, when current UIView has property exactly called `image`, the operation key will use `NSStringFromClass(self.class)`. Include `UIImageView.image/NSImageView.image/NSButton.image` (without `UIButton`) + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), check their header to call correct API, like `-[UIButton sd_imageOperationKeyForState:]` */ @property (nonatomic, strong, readonly, nullable) NSString *sd_latestOperationKey; +#pragma mark - State + +/** + * Get the current image URL. + * This simply translate to `[self sd_imageLoadStateForKey:self.sd_latestOperationKey].url` from v5.18.0 + * + * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; + /** * The current image loading progress associated to the view. The unit count is the received size and excepted size of download. * The `totalUnitCount` and `completedUnitCount` will be reset to 0 after a new image loading start (change from current queue). And they will be set to `SDWebImageProgressUnitCountUnknown` if the progressBlock not been called but the image loading success to mark the progress finished (change from main queue). * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommend to use some KVO libs like KVOController because it's more safe and easy to use. * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progress instance before the loading start. The default value is nil. * @note Note that because of the limitations of categories this property can get out of sync if you update the progress directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. */ @property (nonatomic, strong, null_resettable) NSProgress *sd_imageProgress; @@ -83,6 +92,9 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** * Cancel the current image load + * This simply translate to `[self sd_cancelImageLoadOperationWithKey:self.sd_latestOperationKey]` from v5.18.0 + * + * @warning This method should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_cancelImageLoadOperationWithKey:` instead. See `UIView+WebCacheOperation.h` for more information. */ - (void)sd_cancelCurrentImageLoad; @@ -93,6 +105,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** The image transition when image load finished. See `SDWebImageTransition`. If you specify nil, do not do transition. Defaults to nil. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) SDWebImageTransition *sd_imageTransition; @@ -102,6 +115,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima The image indicator during the image loading. If you do not need indicator, specify nil. Defaults to nil The setter will remove the old indicator view and add new indicator view to current view's subview. @note Because this is UI related, you should access only from the main queue. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) id sd_imageIndicator; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCacheOperation.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCacheOperation.h index fc23508..0bc12ca 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCacheOperation.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Headers/UIView+WebCacheOperation.h @@ -20,14 +20,16 @@ * * @param key key for identifying the operations * @return the image load operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key; /** * Set the image load operation (storage in a UIView based weak map table) * - * @param operation the operation + * @param operation the operation, should not be nil or no-op will perform * @param key key for storing the operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; @@ -35,13 +37,15 @@ * Cancel the operation for the current UIView and key * * @param key key for identifying the operations + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; /** * Just remove the operation corresponding to the current UIView and key without cancelling them * - * @param key key for identifying the operations + * @param key key for identifying the operations. + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Info.plist b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Info.plist index b79371b..435fd16 100644 Binary files a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Info.plist and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Info.plist differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Modules/module.modulemap b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Modules/module.modulemap index 871087c..3eaba7d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Modules/module.modulemap +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/Modules/module.modulemap @@ -1,6 +1,6 @@ framework module SDWebImage { umbrella header "SDWebImage.h" - export * + module * { export * } } diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage index b8ca120..0038fe0 100755 Binary files a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64/SDWebImage.framework/SDWebImage differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Headers b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Modules b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Modules deleted file mode 120000 index 5736f31..0000000 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Modules +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Modules \ No newline at end of file diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Resources b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage deleted file mode 120000 index b967598..0000000 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/SDWebImage \ No newline at end of file diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage new file mode 100755 index 0000000..cbd4969 Binary files /dev/null and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/SDWebImage differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImage.h index 2e208cd..78739c5 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImage.h @@ -72,7 +72,8 @@ // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. // You should use these methods to create a new animated image. Use other methods just call super instead. -// Pay attention, when the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. +// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. +// @note When the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support #if __has_include() + (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support @@ -88,6 +89,8 @@ /** Current animated image format. + @note This format is only valid when `animatedImageData` not nil. + @note This actually just call `[NSData sd_imageFormatForImageData:self.animatedImageData]` */ @property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; @@ -107,8 +110,26 @@ // By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the description in `SDAnimatedImage` protocol. // After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need. +/** + Pre-load all animated image frame into memory. Then later frame image request can directly return the frame for index without decoding. + This method may be called on background thread. + + @note If one image instance is shared by lots of imageViews, the CPU performance for large animated image will drop down because the request frame index will be random (not in order) and the decoder should take extra effort to keep it re-entrant. You can use this to reduce CPU usage if need. Attention this will consume more memory usage. + */ - (void)preloadAllFrames; + +/** + Unload all animated image frame from memory if are already pre-loaded. Then later frame image request need decoding. You can use this to free up the memory usage if need. + */ - (void)unloadAllFrames; +/** + Returns a Boolean value indicating whether all animated image frames are already pre-loaded into memory. + */ @property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; +/** + Return the animated image coder if the image is created with `initWithAnimatedCoder:scale:` method. + @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. + */ +@property (nonatomic, strong, readonly, nullable) id animatedCoder; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImagePlayer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImagePlayer.h index e71e239..77e041a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImagePlayer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImagePlayer.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageCoder.h" +/// Animated image playback mode typedef NS_ENUM(NSUInteger, SDAnimatedImagePlaybackMode) { /** * From first to last frame and stop or next loop. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImageRep.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImageRep.h index be52f8c..dec2fbd 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImageRep.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDAnimatedImageRep.h @@ -10,6 +10,8 @@ #if SD_MAC +#import "NSData+ImageContentType.h" + /** A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. 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. @@ -18,6 +20,14 @@ */ @interface SDAnimatedImageRep : NSBitmapImageRep +/// Current animated image format. +/// @note This format is only valid when `animatedImageData` not nil +@property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; + +/// This allows to retrive the compressed data like GIF using `sd_imageData` on parent `NSImage`, without re-encoding (waste CPU and RAM) +/// @note This is typically nonnull when you create with `initWithData:`, even it's marked as weak, because ImageIO retain it +@property (nonatomic, readonly, nullable, weak) NSData *animatedImageData; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDGraphicsImageRenderer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDGraphicsImageRenderer.h index 900acd7..7b185fe 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDGraphicsImageRenderer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDGraphicsImageRenderer.h @@ -17,11 +17,17 @@ For others (macOS/watchOS or iOS/tvOS 10-), these method use the `SDImageGraphics.h` to implements the same behavior (but without dynamic bitmap support) */ +/// A closure for drawing an image. typedef void (^SDGraphicsImageDrawingActions)(CGContextRef _Nonnull context); +/// Constants that specify the color range of the image renderer context. typedef NS_ENUM(NSInteger, SDGraphicsImageRendererFormatRange) { + /// The image renderer context doesn’t specify a color range. SDGraphicsImageRendererFormatRangeUnspecified = -1, + /// The system automatically chooses the image renderer context’s pixel format according to the color range of its content. SDGraphicsImageRendererFormatRangeAutomatic = 0, + /// The image renderer context supports wide color. SDGraphicsImageRendererFormatRangeExtended, + /// The image renderer context doesn’t support extended colors. SDGraphicsImageRendererFormatRangeStandard }; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCache.h index 9a75580..3cf9168 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCache.h @@ -37,8 +37,10 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDImageCacheAvoidDecodeImage = 1 << 4, + SDImageCacheAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 4, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. */ @@ -225,6 +227,28 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock; +/** + * Asynchronously store an image into memory and disk cache at the given key. + * + * @param image The image to store + * @param imageData The image data as returned by the server, this representation will be used for disk storage + * instead of converting the given image object into a storable/compressed image format in order + * to save quality and CPU + * @param key The unique image cache key, usually it's image absolute URL + * @param options A mask to specify options to use for this store + * @param context The context options to use. Pass `.callbackQueue` to control callback queue + * @param cacheType The image store op cache type + * @param completionBlock A block executed after the operation is finished + * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock; + /** * Synchronously store an image into memory cache at the given key. * @@ -299,6 +323,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -311,6 +336,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancellederation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -324,6 +350,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCacheDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCacheDefine.h index eb020f4..b33bada 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCacheDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCacheDefine.h @@ -81,22 +81,23 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query */ - (nullable id)queryImageForKey:(nullable NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; + completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("queryImageForKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +@optional /** Query the cached image from image cache for given key. The operation can be used to cancel the query. If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param cacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query @@ -107,21 +108,43 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; +@required +/** + Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. + + @param image The image to store + @param imageData The image data to be used for disk storage + @param key The image cache key + @param cacheType The image store op cache type + @param completionBlock A block executed after the operation is finished + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("storeImage:imageData:forKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + +@optional /** Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @param image The image to store @param imageData The image data to be used for disk storage @param key The image cache key + @param options A mask to specify options to use for this store + @param context The context options to use. Pass `.callbackQueue` to control callback queue @param cacheType The image store op cache type @param completionBlock A block executed after the operation is finished */ - (void)storeImage:(nullable UIImage *)image imageData:(nullable NSData *)imageData forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock; +#pragma mark - Deprecated because SDWebImageManager does not use these APIs /** Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -131,7 +154,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)removeImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else asynchronously. @@ -142,7 +165,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)containsImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock; + completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -151,6 +174,6 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param completionBlock A block executed after the operation is finished */ - (void)clearWithCacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoder.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoder.h index eeaeb69..c6501ea 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoder.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoder.h @@ -9,6 +9,7 @@ #import #import "SDWebImageCompat.h" #import "NSData+ImageContentType.h" +#import "SDImageFrame.h" typedef NSString * SDImageCoderOption NS_STRING_ENUM; typedef NSDictionary SDImageCoderOptions; @@ -74,6 +75,19 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeTypeIdenti */ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeUseLazyDecoding; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note You can use the logic from `+[SDImageCoder scaledSizeWithImageSize:limitBytes:bytesPerPixel:frameCount:]` + @note This option has higher priority than `.decodeThumbnailPixelSize` + */ +FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeScaleDownLimitBytes; + // These options are for image encoding /** A Boolean value indicating whether to encode the first frame only for animated image during encoding. (NSNumber). If not provide, encode animated image if need. @@ -171,7 +185,8 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext /** Encode the image to image data. - @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. + @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. But this consume time is not always reversible. In 5.15.0, we introduce `encodedDataWithFrames` API for better animated image encoding. Use that instead. + @note Which means, this just forward to `encodedDataWithFrames([SDImageFrame(image: image, duration: 0], image.sd_imageLoopCount))` @param image The image to be encoded @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible @@ -182,6 +197,21 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options; +#pragma mark - Animated Encoding +@optional +/** + Encode the animated image frames to image data. + + @param frames The animated image frames to be encoded, should be at least 1 element, or it will fallback to static image encode. + @param loopCount The final animated image loop count. 0 means infinity loop. This config ignore each frame's `sd_imageLoopCount` + @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible + @param options A dictionary containing any encoding options. Pass @{SDImageCoderEncodeCompressionQuality: @(1)} to specify compression quality. + @return The encoded image data + */ +- (nullable NSData *)encodedDataWithFrames:(nonnull NSArray*)frames + loopCount:(NSUInteger)loopCount + format:(SDImageFormat)format + options:(nullable SDImageCoderOptions *)options; @end #pragma mark - Progressive Coder diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoderHelper.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoderHelper.h index 8502b39..d0b5115 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoderHelper.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageCoderHelper.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageFrame.h" +/// The options controls how we force pre-draw the image (to avoid lazy-decoding). Which need OS's framework compatibility typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { /// automatically choose the solution based on image format, hardware, OS version. This keep balance for compatibility and performance. Default after SDWebImage 5.13.0 SDImageCoderDecodeSolutionAutomatic, @@ -19,6 +20,35 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { SDImageCoderDecodeSolutionUIKit }; +/// The policy to force-decode the origin CGImage (produced by Image Coder Plugin) +/// Some CGImage may be lazy, or not lazy, but need extra copy to render on screen +/// The force-decode step help to `pre-process` to get the best suitable CGImage to render, which can increase frame rate +/// The downside is that force-decode may consume RAM and CPU, and may loss the `lazy` support (lazy CGImage can be purged when memory warning, and re-created if need), see more: `SDImageCoderDecodeUseLazyDecoding` +typedef NS_ENUM(NSUInteger, SDImageForceDecodePolicy) { + /// Based on input CGImage's colorspace, alignment, bitmapinfo, if it may trigger `CA::copy_image` extra copy, we will force-decode, else don't + SDImageForceDecodePolicyAutomatic, + /// Never force decode input CGImage + SDImageForceDecodePolicyNever, + /// Always force decode input CGImage (only once) + SDImageForceDecodePolicyAlways +}; + +/// Byte alignment the bytes size with alignment +/// - Parameters: +/// - size: The bytes size +/// - alignment: The alignment, in bytes +static inline size_t SDByteAlign(size_t size, size_t alignment) { + return ((size + (alignment - 1)) / alignment) * alignment; +} + +/// The pixel format about the information to call `CGImageCreate` suitable for current hardware rendering +typedef struct SDImagePixelFormat { + /// Typically is pre-multiplied RGBA8888 for alpha image, RGBX8888 for non-alpha image. + CGBitmapInfo bitmapInfo; + /// Typically is 32, the 8 pixels bytesPerRow. + size_t alignment; +} SDImagePixelFormat; + /** Provide some common helper methods for building the image decoder/encoder. */ @@ -44,16 +74,31 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (NSArray * _Nullable)framesFromAnimatedImage:(UIImage * _Nullable)animatedImage NS_SWIFT_NAME(frames(from:)); +#pragma mark - Preferred Rendering Format +/// For coders who use `CGImageCreate`, use the information below to create an effient CGImage which can be render on GPU without Core Animation's extra copy (`CA::Render::copy_image`), which can be debugged using `Color Copied Image` in Xcode Instruments +/// `CGImageCreate`'s `bytesPerRow`, `space`, `bitmapInfo` params should use the information below. /** Return the shared device-dependent RGB color space. This follows The Get Rule. - On iOS, it's created with deviceRGB (if available, use sRGB). - On macOS, it's from the screen colorspace (if failed, use deviceRGB) Because it's shared, you should not retain or release this object. + Typically is sRGB for iOS, screen color space (like Color LCD) for macOS. @return The device-dependent RGB color space */ + (CGColorSpaceRef _Nonnull)colorSpaceGetDeviceRGB CF_RETURNS_NOT_RETAINED; +/** + Tthis returns the pixel format **Preferred from current hardward && OS using runtime detection** + @param containsAlpha Whether the image to render contains alpha channel + */ ++ (SDImagePixelFormat)preferredPixelFormat:(BOOL)containsAlpha; + +/** + Check whether CGImage is hardware supported to rendering on screen, without the trigger of `CA::Render::copy_image` + You can debug the copied image by using Xcode's `Color Copied Image`, the copied image will turn Cyan and occupy double RAM for bitmap buffer. + Typically, when the CGImage's using the method above (`colorspace` / `alignment` / `bitmapInfo`) can render withtout the copy. + */ ++ (BOOL)CGImageIsHardwareSupported:(_Nonnull CGImageRef)cgImage; + /** Check whether CGImage contains alpha channel. @@ -86,6 +131,8 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. It will detect whether the image size matching the scale size, if not, stretch the image to the target size. @note If you need to keep aspect ratio, you can calculate the scale size by using `scaledSizeWithImageSize` first. + @note This scale does not change bits per components (which means RGB888 in, RGB888 out), supports 8/16/32(float) bpc. But the method in UIImage+Transform does not gurantee this. + @note All supported CGImage pixel format: https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB @param cgImage The CGImage @param size The scale size in pixel. @@ -103,23 +150,50 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp; +/// Calculate the limited image size with the bytes, when using `SDImageCoderDecodeScaleDownLimitBytes`. This preserve aspect ratio and never scale up +/// @param imageSize The image size (in pixel or point defined by caller) +/// @param limitBytes The limit bytes +/// @param bytesPerPixel The bytes per pixel +/// @param frameCount The image frame count, 0 means 1 frame as well ++ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize limitBytes:(NSUInteger)limitBytes bytesPerPixel:(NSUInteger)bytesPerPixel frameCount:(NSUInteger)frameCount; /** Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. @param image The image to be decoded + @note This translate to `decodedImageWithImage:policy:` with automatic policy @return The decoded image */ + (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image; +/** + Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. + @param image The image to be decoded + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded image + */ ++ (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image policy:(SDImageForceDecodePolicy)policy; + /** Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. @param image The image to be decoded and scaled down @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @note This translate to `decodedAndScaledDownImageWithImage:limitBytes:policy:` with automatic policy @return The decoded and probably scaled down image */ + (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; +/** + Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. + @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. + + @param image The image to be decoded and scaled down + @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded and probably scaled down image + */ ++ (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes policy:(SDImageForceDecodePolicy)policy; + /** Control the default force decode solution. Available solutions in `SDImageCoderDecodeSolution`. @note Defaults to `SDImageCoderDecodeSolutionAutomatic`, which prefers to use UIKit for JPEG/HEIF, and fallback on CoreGraphics. If you want control on your hand, set the other solution. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageFrame.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageFrame.h index a93fd9c..41f3965 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageFrame.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageFrame.h @@ -24,6 +24,11 @@ */ @property (nonatomic, readonly, assign) NSTimeInterval duration; +/// Create a frame instance with specify image and duration +/// @param image current frame's image +/// @param duration current frame's duration +- (nonnull instancetype)initWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + /** Create a frame instance with specify image and duration @@ -31,6 +36,9 @@ @param duration current frame's duration @return frame instance */ -+ (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; ++ (nonnull instancetype)frameWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + +- (nonnull instancetype)init NS_UNAVAILABLE; ++ (nonnull instancetype)new NS_UNAVAILABLE; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageLoader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageLoader.h index addad83..5ecec5d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageLoader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDImageLoader.h @@ -81,7 +81,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @param url The image URL to be loaded. @return YES to continue download, NO to stop download. */ -- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED("Use canRequestImageForURL:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED_WITH_REPLACEMENT("canRequestImageForURL:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** @@ -125,7 +125,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @return Whether to block this url or not. Return YES to mark this URL as failed. */ - (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error API_DEPRECATED("Use shouldBlockFailedURLWithURL:error:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + error:(nonnull NSError *)error API_DEPRECATED_WITH_REPLACEMENT("shouldBlockFailedURLWithURL:error:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImage.h index 0e56800..6bc9de8 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImage.h @@ -18,6 +18,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import #import +#import #import #import #import @@ -39,6 +40,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; #import #import #import +#import #import #import #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageCompat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageCompat.h index f47a248..530b147 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageCompat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageCompat.h @@ -21,14 +21,6 @@ #define SD_MAC 0 #endif -// iOS and tvOS are very similar, UIKit exists on both platforms -// Note: watchOS also has UIKit, but it's very limited -#if TARGET_OS_IOS || TARGET_OS_TV - #define SD_UIKIT 1 -#else - #define SD_UIKIT 0 -#endif - #if TARGET_OS_IOS #define SD_IOS 1 #else @@ -47,6 +39,20 @@ #define SD_WATCH 0 #endif +// Supports Xcode 14 to suppress warning +#ifdef TARGET_OS_VISION +#if TARGET_OS_VISION + #define SD_VISION 1 +#endif +#endif + +// iOS/tvOS/visionOS are very similar, UIKit exists on both platforms +// Note: watchOS also has UIKit, but it's very limited +#if SD_IOS || SD_TV || SD_VISION + #define SD_UIKIT 1 +#else + #define SD_UIKIT 0 +#endif #if SD_MAC #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDefine.h index df7c7fa..f6ae2d2 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDefine.h @@ -107,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * of the placeholder image until after the image has finished loading. * @note This is used to treate placeholder as an **Error Placeholder** but not **Loading Placeholder** by defaults. if the image loading is cancelled or error, the placeholder will be always set. * @note Therefore, if you want both **Error Placeholder** and **Loading Placeholder** exist, use `SDWebImageAvoidAutoSetImage` to manually set the two placeholders and final loaded image by your hand depends on loading result. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageDelayPlaceholder = 1 << 8, @@ -120,6 +121,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, image is added to the imageView after download. But in some cases, we want to * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) * Use this flag if you want to manually set the image in the completion when success + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageAvoidAutoSetImage = 1 << 10, @@ -127,9 +129,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, images are decoded respecting their original size. * This flag will scale down the images to a size compatible with the constrained memory of devices. * To control the limit memory bytes, check `SDImageCoderHelper.defaultScaleDownLimitBytes` (Defaults to 60MB on iOS) - * This will actually translate to use context option `.imageThumbnailPixelSize` from v5.5.0 (Defaults to (3966, 3966) on iOS). Previously does not. - * This flags effect the progressive and animated images as well from v5.5.0. Previously does not. - * @note If you need detail controls, it's better to use context option `imageThumbnailPixelSize` and `imagePreserveAspectRatio` instead. + * (from 5.16.0) This will actually translate to use context option `SDWebImageContextImageScaleDownLimitBytes`, which check and calculate the thumbnail pixel size occupied small than limit bytes (including animated image) + * (from 5.5.0) This flags effect the progressive and animated images as well + * @note If you need detail controls, it's better to use context option `imageScaleDownBytes` instead. + * @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) */ SDWebImageScaleDownLargeImages = 1 << 11, @@ -164,6 +167,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { /** * By default, when you use `SDWebImageTransition` to do some view transition after the image load finished, this transition is only applied for image when the callback from manager is asynchronous (from network, or disk cache query) * This mask can force to apply view transition for any cases, like memory cache query, or sync disk cache query. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageForceTransition = 1 << 17, @@ -171,8 +175,9 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing an issue due to excessive memory consumption, This flag can prevent decode the image. * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageAvoidDecodeImage = 1 << 18, + SDWebImageAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 18, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -204,7 +209,15 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * We usually don't apply transform on vector images, because vector images supports dynamically changing to any size, rasterize to a fixed size will loss details. To modify vector images, you can process the vector data at runtime (such as modifying PDF tag / SVG element). * Use this flag to transform them anyway. */ - SDWebImageTransformVectorImage = 1 << 23 + SDWebImageTransformVectorImage = 1 << 23, + + /** + * By defaults, when you use UI-level category like `sd_setImageWithURL:` on UIImageView, it will cancel the loading image requests. + * However, some users may choose to not cancel the loading image requests and always start new pipeline. + * Use this flag to disable automatic cancel behavior. + * @note This options is UI level options, has no usage on ImageManager or other components. + */ + SDWebImageAvoidAutoCancelImage = 1 << 24, }; @@ -221,6 +234,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextSetIma */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager API_DEPRECATED("Use individual context option like .imageCache, .imageLoader and .imageTransformer instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +/** + A `SDCallbackQueue` instance which controls the `Cache`/`Manager`/`Loader`'s callback queue for their completionBlock. + This is useful for user who call these 3 components in non-main queue and want to avoid callback in main queue. + @note For UI callback (`sd_setImageWithURL`), we will still use main queue to dispatch, means if you specify a global queue, it will enqueue from the global queue to main queue. + @note This does not effect the components' working queue (for example, `Cache` still query disk on internal ioQueue, `Loader` still do network on URLSessionConfiguration.delegateQueue), change those config if you need. + Defaults to nil. Which means main queue. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCallbackQueue; + /** A id instance which conforms to `SDImageCache` protocol. It's used to override the image manager's cache during the image loading pipeline. In other word, if you just want to specify a custom cache during image loading, you don't need to re-create a dummy SDWebImageManager instance with the cache. If not provided, use the image manager's cache (id) @@ -246,6 +268,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageC */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTransformer; +#pragma mark - Force Decode Options + +/** + A NSNumber instance which store the`SDImageForceDecodePolicy` enum. This is used to control how current image loading should force-decode the decoded image (CGImage, typically). See more what's force-decode means in `SDImageForceDecodePolicy` comment. + Defaults to `SDImageForceDecodePolicyAutomatic`, which will detect the input CGImage's metadata, and only force-decode if the input CGImage can not directly render on screen (need extra CoreAnimation Copied Image and increase RAM usage). + @note If you want to always the force-decode for this image request, pass `SDImageForceDecodePolicyAlways`, for example, some WebP images which does not created by ImageIO. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageForceDecodePolicy; + #pragma mark - Image Decoder Context Options /** @@ -284,8 +315,28 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageT */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTypeIdentifierHint; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note This option has higher priority than `.imageThumbnailPixelSize` + @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageScaleDownLimitBytes; + #pragma mark - Cache Context Options +/** + A Dictionary (SDImageCoderOptions) value, which pass the extra encode options to the SDImageCoder. Introduced in SDWebImage 5.15.0 + You can pass encode options like `compressionQuality`, `maxFileSize`, `maxPixelSize` to control the encoding related thing, this is used inside `SDImageCache` during store logic. + @note For developer who use custom cache protocol (not SDImageCache instance), they need to upgrade and use these options for encoding. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageEncodeOptions; + /** A SDImageCacheType raw value which specify the source of cache to query. Specify `SDImageCacheTypeDisk` to query from disk cache only; `SDImageCacheTypeMemory` to query from memory only. And `SDImageCacheTypeAll` to query from both memory cache and disk cache. Specify `SDImageCacheTypeNone` is invalid and totally ignore the cache query. If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDownloader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDownloader.h index a2f50f4..08ae16b 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDownloader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageDownloader.h @@ -74,8 +74,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageDownloaderAvoidDecodeImage = 1 << 9, + SDWebImageDownloaderAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 9, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -95,9 +97,13 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderMatchAnimatedImageClass = 1 << 12, }; +/// Posed when URLSessionTask started (`resume` called)) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStartNotification; +/// Posed when URLSessionTask get HTTP response (`didReceiveResponse:completionHandler:` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadReceiveResponseNotification; +/// Posed when URLSessionTask stoped (`didCompleteWithError:` with error or `cancel` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStopNotification; +/// Posed when URLSessionTask finished with success (`didCompleteWithError:` without error) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadFinishNotification; typedef SDImageLoaderProgressBlock SDWebImageDownloaderProgressBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageError.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageError.h index bb91d0b..652b0d7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageError.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageError.h @@ -9,6 +9,7 @@ #import "SDWebImageCompat.h" +/// An error domain represent SDWebImage loading system with custom codes FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; /// The response instance for invalid download response (NSURLResponse *) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageIndicator.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageIndicator.h index e1165c1..522dc47 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageIndicator.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImageIndicator.h @@ -66,6 +66,7 @@ */ @interface SDWebImageActivityIndicator (Conveniences) +#if !SD_VISION /// These indicator use the fixed color without dark mode support /// gray-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *grayIndicator; @@ -75,6 +76,7 @@ @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteIndicator; /// large white-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteLargeIndicator; +#endif /// These indicator use the system style, supports dark mode if available (iOS 13+/macOS 10.14+) /// large activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *largeIndicator; @@ -107,8 +109,10 @@ /// default-style progress indicator @property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *defaultIndicator; +#if SD_UIKIT /// bar-style progress indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(macos, tvos); +@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(tvos); +#endif @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImagePrefetcher.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImagePrefetcher.h index a9b2c1f..2256cc0 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImagePrefetcher.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/SDWebImagePrefetcher.h @@ -76,20 +76,23 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, /** * The options for prefetcher. Defaults to SDWebImageLowPriority. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in manager level. */ -@property (nonatomic, assign) SDWebImageOptions options; +@property (nonatomic, assign) SDWebImageOptions options API_DEPRECATED("Use individual prefetch options param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * The context for prefetcher. Defaults to nil. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in `SDWebImageManager.optionsProcessor`. */ -@property (nonatomic, copy, nullable) SDWebImageContext *context; +@property (nonatomic, copy, nullable) SDWebImageContext *context API_DEPRECATED("Use individual prefetch context param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * Queue options for prefetcher when call the progressBlock, completionBlock and delegate methods. Defaults to Main Queue. - * @note The call is asynchronously to avoid blocking target queue. + * @deprecated 5.15.0 introduce SDCallbackQueue, use that is preferred and has higher priority. The set/get to this property will translate to that instead. + * @note The call is asynchronously to avoid blocking target queue. (see SDCallbackPolicyDispatch) * @note The delegate queue should be set before any prefetching start and may not be changed during prefetching to avoid thread-safe problem. */ -@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue; +@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue API_DEPRECATED("Use SDWebImageContextCallbackQueue context param instead, see SDCallbackQueue", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)); /** * The delegate for the prefetcher. Defaults to nil. @@ -134,6 +137,28 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; +/** + * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. + * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. + * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. + * + * @param urls list of URLs to prefetch + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + * @param progressBlock block to be called when progress updates; + * first parameter is the number of completed (successful or not) requests, + * second parameter is the total number of images originally requested to be prefetched + * @param completionBlock block to be called when the current prefetching is completed + * first param is the number of completed (successful or not) requests, + * second parameter is the number of skipped requests + * @return the token to cancel the current prefetching. + */ +- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock + completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; + /** * Remove and cancel all the prefeching for the prefetcher. */ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIButton+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIButton+WebCache.h index 89d94b4..8a898c7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIButton+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIButton+WebCache.h @@ -21,6 +21,7 @@ /** * Get the current image URL. + * This simply translate to `[self sd_imageURLForState:self.state]` from v5.18.0 */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; @@ -31,6 +32,13 @@ */ - (nullable NSURL *)sd_imageURLForState:(UIControlState)state; +/** + * Get the image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_imageOperationKeyForState:(UIControlState)state; + /** * Set the button `image` with an `url`. * @@ -202,6 +210,13 @@ */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentBackgroundImageURL; +/** + * Get the background image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_backgroundImageOperationKeyForState:(UIControlState)state; + /** * Get the background image URL for a control state. * diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+ForceDecode.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+ForceDecode.h index f368746..658659a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+ForceDecode.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+ForceDecode.h @@ -15,6 +15,12 @@ /** A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. + Force decode is used for 2 cases: + -- 1. for ImageIO created image (via `CGImageCreateWithImageSource` SPI), it's lazy and we trigger the decode before rendering + -- 2. for non-ImageIO created image (via `CGImageCreate` API), we can ensure it's alignment is suitable to render on screen without copy by CoreAnimation + @note For coder plugin developer, always use the SDImageCoderHelper's `colorSpaceGetDeviceRGB`/`preferredPixelFormat` to create CGImage. + @note For more information why force decode, see: https://github.com/path/FastImageCache#byte-alignment + @note From v5.17.0, the default value is always NO. Use `SDImageForceDecodePolicy` to control complicated policy. */ @property (nonatomic, assign) BOOL sd_isDecoded; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+MultiFormat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+MultiFormat.h index a0935b5..e495c74 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+MultiFormat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+MultiFormat.h @@ -46,6 +46,7 @@ Encode the current image to the data, the image format is unspecified @note If the receiver is `SDAnimatedImage`, this will return the animated image data if available. No more extra encoding process. + @note For macOS, if the receiver contains only `SDAnimatedImageRep`, this will return the animated image data if available. No more extra encoding process. @return The encoded data. If can't encode, return nil */ - (nullable NSData *)sd_imageData; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+Transform.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+Transform.h index 06cb66d..60b488a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+Transform.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImage+Transform.h @@ -8,9 +8,13 @@ #import "SDWebImageCompat.h" +/// The scale mode to apply when image drawing on a container with different sizes. typedef NS_ENUM(NSUInteger, SDImageScaleMode) { + /// The option to scale the content to fit the size of itself by changing the aspect ratio of the content if necessary. SDImageScaleModeFill = 0, + /// The option to scale the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. SDImageScaleModeAspectFit = 1, + /// The option to scale the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds. SDImageScaleModeAspectFill = 2 }; @@ -103,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color at specify position. The point is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The point's x/y will be converted into integer. @note The point's x/y should not be smaller than 0, or greater than or equal to width/height. @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. @@ -113,6 +118,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color array with specify rectangle. The rect is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The rect's origin and size will be converted into integer. @note The rect's width/height should not be smaller than or equal to 0. The minX/minY should not be smaller than 0. The maxX/maxY should not be greater than width/height. Attention this limit is different from `sd_colorAtPoint:` (point: (0, 0) like rect: (0, 0, 1, 1)) @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+HighlightedWebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+HighlightedWebCache.h index 6cd3ba6..80fabc6 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+HighlightedWebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+HighlightedWebCache.h @@ -17,6 +17,13 @@ */ @interface UIImageView (HighlightedWebCache) +#pragma mark - Highlighted Image + +/** + * Get the current highlighted image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentHighlightedImageURL; + /** * Set the imageView `highlightedImage` with an `url`. * @@ -124,6 +131,12 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current highlighted image load (for `UIImageView.highlighted`) + * @note For normal image, use `sd_cancelCurrentImageLoad` + */ +- (void)sd_cancelCurrentHighlightedImageLoad; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+WebCache.h index 626de9d..46b5a70 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIImageView+WebCache.h @@ -45,6 +45,15 @@ */ @interface UIImageView (WebCache) +#pragma mark - Image State + +/** + * Get the current image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; + +#pragma mark - Image Loading + /** * Set the imageView `image` with an `url`. * @@ -191,4 +200,10 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current normal image load (for `UIImageView.image`) + * @note For highlighted image, use `sd_cancelCurrentHighlightedImageLoad` + */ +- (void)sd_cancelCurrentImageLoad; + @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCache.h index 48175f1..c15edaa 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCache.h @@ -11,6 +11,8 @@ #import "SDWebImageManager.h" #import "SDWebImageTransition.h" #import "SDWebImageIndicator.h" +#import "UIView+WebCacheOperation.h" +#import "UIView+WebCacheState.h" /** The value specify that the image progress unit count cannot be determined because the progressBlock is not been called. @@ -24,27 +26,34 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima */ @interface UIView (WebCache) -/** - * Get the current image URL. - * - * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; - /** * Get the current image operation key. Operation key is used to identify the different queries for one view instance (like UIButton). * See more about this in `SDWebImageContextSetImageOperationKey`. - * If you cancel current image load, the key will be set to nil. + * * @note You can use method `UIView+WebCacheOperation` to investigate different queries' operation. + * @note For the history version compatible, when current UIView has property exactly called `image`, the operation key will use `NSStringFromClass(self.class)`. Include `UIImageView.image/NSImageView.image/NSButton.image` (without `UIButton`) + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), check their header to call correct API, like `-[UIButton sd_imageOperationKeyForState:]` */ @property (nonatomic, strong, readonly, nullable) NSString *sd_latestOperationKey; +#pragma mark - State + +/** + * Get the current image URL. + * This simply translate to `[self sd_imageLoadStateForKey:self.sd_latestOperationKey].url` from v5.18.0 + * + * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; + /** * The current image loading progress associated to the view. The unit count is the received size and excepted size of download. * The `totalUnitCount` and `completedUnitCount` will be reset to 0 after a new image loading start (change from current queue). And they will be set to `SDWebImageProgressUnitCountUnknown` if the progressBlock not been called but the image loading success to mark the progress finished (change from main queue). * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommend to use some KVO libs like KVOController because it's more safe and easy to use. * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progress instance before the loading start. The default value is nil. * @note Note that because of the limitations of categories this property can get out of sync if you update the progress directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. */ @property (nonatomic, strong, null_resettable) NSProgress *sd_imageProgress; @@ -83,6 +92,9 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** * Cancel the current image load + * This simply translate to `[self sd_cancelImageLoadOperationWithKey:self.sd_latestOperationKey]` from v5.18.0 + * + * @warning This method should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_cancelImageLoadOperationWithKey:` instead. See `UIView+WebCacheOperation.h` for more information. */ - (void)sd_cancelCurrentImageLoad; @@ -93,6 +105,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** The image transition when image load finished. See `SDWebImageTransition`. If you specify nil, do not do transition. Defaults to nil. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) SDWebImageTransition *sd_imageTransition; @@ -102,6 +115,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima The image indicator during the image loading. If you do not need indicator, specify nil. Defaults to nil The setter will remove the old indicator view and add new indicator view to current view's subview. @note Because this is UI related, you should access only from the main queue. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) id sd_imageIndicator; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCacheOperation.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCacheOperation.h index fc23508..0bc12ca 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCacheOperation.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Headers/UIView+WebCacheOperation.h @@ -20,14 +20,16 @@ * * @param key key for identifying the operations * @return the image load operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key; /** * Set the image load operation (storage in a UIView based weak map table) * - * @param operation the operation + * @param operation the operation, should not be nil or no-op will perform * @param key key for storing the operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; @@ -35,13 +37,15 @@ * Cancel the operation for the current UIView and key * * @param key key for identifying the operations + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; /** * Just remove the operation corresponding to the current UIView and key without cancelling them * - * @param key key for identifying the operations + * @param key key for identifying the operations. + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Modules/module.modulemap b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Modules/module.modulemap index 871087c..3eaba7d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Modules/module.modulemap +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Modules/module.modulemap @@ -1,6 +1,6 @@ framework module SDWebImage { umbrella header "SDWebImage.h" - export * + module * { export * } } diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Resources/Info.plist b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Resources/Info.plist index 542d5bc..2f12b6c 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Resources/Info.plist +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/Resources/Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable SDWebImage CFBundleIdentifier - SDWebImage + com.dailymotion.SDWebImage CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -17,7 +17,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.0 + 5.18.11 CFBundleSignature ???? CFBundleSupportedPlatforms @@ -25,23 +25,23 @@ MacOSX CFBundleVersion - 1 + 5.18.11 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 14C18 + DTPlatformName macosx DTPlatformVersion - 13.1 + 14.2 DTSDKBuild - 22C55 + 23C53 DTSDKName - macosx13.1 + macosx14.2 DTXcode - 1420 + 1520 DTXcodeBuild - 14C18 + 15C500b LSMinimumSystemVersion 10.15 UIDeviceFamily diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/SDWebImage b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/SDWebImage index 9680207..cbd4969 100755 Binary files a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/SDWebImage and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/A/SDWebImage differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/Current b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-maccatalyst/SDWebImage.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImage.h index 2e208cd..78739c5 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImage.h @@ -72,7 +72,8 @@ // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. // You should use these methods to create a new animated image. Use other methods just call super instead. -// Pay attention, when the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. +// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. +// @note When the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support #if __has_include() + (nullable instancetype)imageNamed:(nonnull NSString *)name inBundle:(nullable NSBundle *)bundle compatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection; // Cache in memory, no Asset Catalog support @@ -88,6 +89,8 @@ /** Current animated image format. + @note This format is only valid when `animatedImageData` not nil. + @note This actually just call `[NSData sd_imageFormatForImageData:self.animatedImageData]` */ @property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; @@ -107,8 +110,26 @@ // By default, animated image frames are returned by decoding just in time without keeping into memory. But you can choose to preload them into memory as well, See the description in `SDAnimatedImage` protocol. // After preloaded, there is no huge difference on performance between this and UIImage's `animatedImageWithImages:duration:`. But UIImage's animation have some issues such like blanking and pausing during segue when using in `UIImageView`. It's recommend to use only if need. +/** + Pre-load all animated image frame into memory. Then later frame image request can directly return the frame for index without decoding. + This method may be called on background thread. + + @note If one image instance is shared by lots of imageViews, the CPU performance for large animated image will drop down because the request frame index will be random (not in order) and the decoder should take extra effort to keep it re-entrant. You can use this to reduce CPU usage if need. Attention this will consume more memory usage. + */ - (void)preloadAllFrames; + +/** + Unload all animated image frame from memory if are already pre-loaded. Then later frame image request need decoding. You can use this to free up the memory usage if need. + */ - (void)unloadAllFrames; +/** + Returns a Boolean value indicating whether all animated image frames are already pre-loaded into memory. + */ @property (nonatomic, assign, readonly, getter=isAllFramesLoaded) BOOL allFramesLoaded; +/** + Return the animated image coder if the image is created with `initWithAnimatedCoder:scale:` method. + @note We use this with animated coder which conforms to `SDProgressiveImageCoder` for progressive animation decoding. + */ +@property (nonatomic, strong, readonly, nullable) id animatedCoder; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h index e71e239..77e041a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImagePlayer.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageCoder.h" +/// Animated image playback mode typedef NS_ENUM(NSUInteger, SDAnimatedImagePlaybackMode) { /** * From first to last frame and stop or next loop. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImageRep.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImageRep.h index be52f8c..dec2fbd 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImageRep.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDAnimatedImageRep.h @@ -10,6 +10,8 @@ #if SD_MAC +#import "NSData+ImageContentType.h" + /** A subclass of `NSBitmapImageRep` to fix that GIF duration issue because `NSBitmapImageRep` will reset `NSImageCurrentFrameDuration` by using `kCGImagePropertyGIFDelayTime` but not `kCGImagePropertyGIFUnclampedDelayTime`. 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. @@ -18,6 +20,14 @@ */ @interface SDAnimatedImageRep : NSBitmapImageRep +/// Current animated image format. +/// @note This format is only valid when `animatedImageData` not nil +@property (nonatomic, assign, readonly) SDImageFormat animatedImageFormat; + +/// This allows to retrive the compressed data like GIF using `sd_imageData` on parent `NSImage`, without re-encoding (waste CPU and RAM) +/// @note This is typically nonnull when you create with `initWithData:`, even it's marked as weak, because ImageIO retain it +@property (nonatomic, readonly, nullable, weak) NSData *animatedImageData; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h index 900acd7..7b185fe 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDGraphicsImageRenderer.h @@ -17,11 +17,17 @@ For others (macOS/watchOS or iOS/tvOS 10-), these method use the `SDImageGraphics.h` to implements the same behavior (but without dynamic bitmap support) */ +/// A closure for drawing an image. typedef void (^SDGraphicsImageDrawingActions)(CGContextRef _Nonnull context); +/// Constants that specify the color range of the image renderer context. typedef NS_ENUM(NSInteger, SDGraphicsImageRendererFormatRange) { + /// The image renderer context doesn’t specify a color range. SDGraphicsImageRendererFormatRangeUnspecified = -1, + /// The system automatically chooses the image renderer context’s pixel format according to the color range of its content. SDGraphicsImageRendererFormatRangeAutomatic = 0, + /// The image renderer context supports wide color. SDGraphicsImageRendererFormatRangeExtended, + /// The image renderer context doesn’t support extended colors. SDGraphicsImageRendererFormatRangeStandard }; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCache.h index 9a75580..3cf9168 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCache.h @@ -37,8 +37,10 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDImageCacheAvoidDecodeImage = 1 << 4, + SDImageCacheAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 4, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. */ @@ -225,6 +227,28 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock; +/** + * Asynchronously store an image into memory and disk cache at the given key. + * + * @param image The image to store + * @param imageData The image data as returned by the server, this representation will be used for disk storage + * instead of converting the given image object into a storable/compressed image format in order + * to save quality and CPU + * @param key The unique image cache key, usually it's image absolute URL + * @param options A mask to specify options to use for this store + * @param context The context options to use. Pass `.callbackQueue` to control callback queue + * @param cacheType The image store op cache type + * @param completionBlock A block executed after the operation is finished + * @note If no image data is provided and encode to disk, we will try to detect the image format (using either `sd_imageFormat` or `SDAnimatedImage` protocol method) and animation status, to choose the best matched format, including GIF, JPEG or PNG. + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock; + /** * Synchronously store an image into memory cache at the given key. * @@ -299,6 +323,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -311,6 +336,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancellederation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; @@ -324,6 +350,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) { * @param doneBlock The completion block. Will not get called if the operation is cancelled * * @return a SDImageCacheToken instance containing the cache operation, will callback immediately when cancelled + * @warning If you query with thumbnail cache key, you'd better not pass the thumbnail pixel size context, which is undefined behavior. */ - (nullable SDImageCacheToken *)queryCacheOperationForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)queryCacheType done:(nullable SDImageCacheQueryCompletionBlock)doneBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCacheDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCacheDefine.h index eb020f4..b33bada 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCacheDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCacheDefine.h @@ -81,22 +81,23 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query */ - (nullable id)queryImageForKey:(nullable NSString *)key options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context - completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; + completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("queryImageForKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +@optional /** Query the cached image from image cache for given key. The operation can be used to cancel the query. If image is cached in memory, completion is called synchronously, else asynchronously and depends on the options arg (See `SDWebImageQueryDiskSync`) @param key The image cache key @param options A mask to specify options to use for this query - @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. Pass `.callbackQueue` to control callback queue @param cacheType Specify where to query the cache from. By default we use `.all`, which means both memory cache and disk cache. You can choose to query memory only or disk only as well. Pass `.none` is invalid and callback with nil immediately. @param completionBlock The completion block. Will not get called if the operation is cancelled @return The operation for this query @@ -107,21 +108,43 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N cacheType:(SDImageCacheType)cacheType completion:(nullable SDImageCacheQueryCompletionBlock)completionBlock; +@required +/** + Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. + + @param image The image to store + @param imageData The image data to be used for disk storage + @param key The image cache key + @param cacheType The image store op cache type + @param completionBlock A block executed after the operation is finished + */ +- (void)storeImage:(nullable UIImage *)image + imageData:(nullable NSData *)imageData + forKey:(nullable NSString *)key + cacheType:(SDImageCacheType)cacheType + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED_WITH_REPLACEMENT("storeImage:imageData:forKey:options:context:cacheType:completion:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + +@optional /** Store the image into image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @param image The image to store @param imageData The image data to be used for disk storage @param key The image cache key + @param options A mask to specify options to use for this store + @param context The context options to use. Pass `.callbackQueue` to control callback queue @param cacheType The image store op cache type @param completionBlock A block executed after the operation is finished */ - (void)storeImage:(nullable UIImage *)image imageData:(nullable NSData *)imageData forKey:(nullable NSString *)key + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context cacheType:(SDImageCacheType)cacheType completion:(nullable SDWebImageNoParamsBlock)completionBlock; +#pragma mark - Deprecated because SDWebImageManager does not use these APIs /** Remove the image from image cache for the given key. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -131,7 +154,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)removeImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Check if image cache contains the image for the given key (does not load the image). If image is cached in memory, completion is called synchronously, else asynchronously. @@ -142,7 +165,7 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N */ - (void)containsImageForKey:(nullable NSString *)key cacheType:(SDImageCacheType)cacheType - completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock; + completion:(nullable SDImageCacheContainsCompletionBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** Clear all the cached images for image cache. If cache type is memory only, completion is called synchronously, else asynchronously. @@ -151,6 +174,6 @@ FOUNDATION_EXPORT void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _N @param completionBlock A block executed after the operation is finished */ - (void)clearWithCacheType:(SDImageCacheType)cacheType - completion:(nullable SDWebImageNoParamsBlock)completionBlock; + completion:(nullable SDWebImageNoParamsBlock)completionBlock API_DEPRECATED("No longer use. Cast to cache instance and call its API", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoder.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoder.h index eeaeb69..c6501ea 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoder.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoder.h @@ -9,6 +9,7 @@ #import #import "SDWebImageCompat.h" #import "NSData+ImageContentType.h" +#import "SDImageFrame.h" typedef NSString * SDImageCoderOption NS_STRING_ENUM; typedef NSDictionary SDImageCoderOptions; @@ -74,6 +75,19 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeTypeIdenti */ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeUseLazyDecoding; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note You can use the logic from `+[SDImageCoder scaledSizeWithImageSize:limitBytes:bytesPerPixel:frameCount:]` + @note This option has higher priority than `.decodeThumbnailPixelSize` + */ +FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderDecodeScaleDownLimitBytes; + // These options are for image encoding /** A Boolean value indicating whether to encode the first frame only for animated image during encoding. (NSNumber). If not provide, encode animated image if need. @@ -171,7 +185,8 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext /** Encode the image to image data. - @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. + @note This protocol may supports encode animated image frames. You can use `+[SDImageCoderHelper framesFromAnimatedImage:]` to assemble an animated image with frames. But this consume time is not always reversible. In 5.15.0, we introduce `encodedDataWithFrames` API for better animated image encoding. Use that instead. + @note Which means, this just forward to `encodedDataWithFrames([SDImageFrame(image: image, duration: 0], image.sd_imageLoopCount))` @param image The image to be encoded @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible @@ -182,6 +197,21 @@ FOUNDATION_EXPORT SDImageCoderOption _Nonnull const SDImageCoderWebImageContext format:(SDImageFormat)format options:(nullable SDImageCoderOptions *)options; +#pragma mark - Animated Encoding +@optional +/** + Encode the animated image frames to image data. + + @param frames The animated image frames to be encoded, should be at least 1 element, or it will fallback to static image encode. + @param loopCount The final animated image loop count. 0 means infinity loop. This config ignore each frame's `sd_imageLoopCount` + @param format The image format to encode, you should note `SDImageFormatUndefined` format is also possible + @param options A dictionary containing any encoding options. Pass @{SDImageCoderEncodeCompressionQuality: @(1)} to specify compression quality. + @return The encoded image data + */ +- (nullable NSData *)encodedDataWithFrames:(nonnull NSArray*)frames + loopCount:(NSUInteger)loopCount + format:(SDImageFormat)format + options:(nullable SDImageCoderOptions *)options; @end #pragma mark - Progressive Coder diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoderHelper.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoderHelper.h index 8502b39..d0b5115 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoderHelper.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageCoderHelper.h @@ -10,6 +10,7 @@ #import "SDWebImageCompat.h" #import "SDImageFrame.h" +/// The options controls how we force pre-draw the image (to avoid lazy-decoding). Which need OS's framework compatibility typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { /// automatically choose the solution based on image format, hardware, OS version. This keep balance for compatibility and performance. Default after SDWebImage 5.13.0 SDImageCoderDecodeSolutionAutomatic, @@ -19,6 +20,35 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { SDImageCoderDecodeSolutionUIKit }; +/// The policy to force-decode the origin CGImage (produced by Image Coder Plugin) +/// Some CGImage may be lazy, or not lazy, but need extra copy to render on screen +/// The force-decode step help to `pre-process` to get the best suitable CGImage to render, which can increase frame rate +/// The downside is that force-decode may consume RAM and CPU, and may loss the `lazy` support (lazy CGImage can be purged when memory warning, and re-created if need), see more: `SDImageCoderDecodeUseLazyDecoding` +typedef NS_ENUM(NSUInteger, SDImageForceDecodePolicy) { + /// Based on input CGImage's colorspace, alignment, bitmapinfo, if it may trigger `CA::copy_image` extra copy, we will force-decode, else don't + SDImageForceDecodePolicyAutomatic, + /// Never force decode input CGImage + SDImageForceDecodePolicyNever, + /// Always force decode input CGImage (only once) + SDImageForceDecodePolicyAlways +}; + +/// Byte alignment the bytes size with alignment +/// - Parameters: +/// - size: The bytes size +/// - alignment: The alignment, in bytes +static inline size_t SDByteAlign(size_t size, size_t alignment) { + return ((size + (alignment - 1)) / alignment) * alignment; +} + +/// The pixel format about the information to call `CGImageCreate` suitable for current hardware rendering +typedef struct SDImagePixelFormat { + /// Typically is pre-multiplied RGBA8888 for alpha image, RGBX8888 for non-alpha image. + CGBitmapInfo bitmapInfo; + /// Typically is 32, the 8 pixels bytesPerRow. + size_t alignment; +} SDImagePixelFormat; + /** Provide some common helper methods for building the image decoder/encoder. */ @@ -44,16 +74,31 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (NSArray * _Nullable)framesFromAnimatedImage:(UIImage * _Nullable)animatedImage NS_SWIFT_NAME(frames(from:)); +#pragma mark - Preferred Rendering Format +/// For coders who use `CGImageCreate`, use the information below to create an effient CGImage which can be render on GPU without Core Animation's extra copy (`CA::Render::copy_image`), which can be debugged using `Color Copied Image` in Xcode Instruments +/// `CGImageCreate`'s `bytesPerRow`, `space`, `bitmapInfo` params should use the information below. /** Return the shared device-dependent RGB color space. This follows The Get Rule. - On iOS, it's created with deviceRGB (if available, use sRGB). - On macOS, it's from the screen colorspace (if failed, use deviceRGB) Because it's shared, you should not retain or release this object. + Typically is sRGB for iOS, screen color space (like Color LCD) for macOS. @return The device-dependent RGB color space */ + (CGColorSpaceRef _Nonnull)colorSpaceGetDeviceRGB CF_RETURNS_NOT_RETAINED; +/** + Tthis returns the pixel format **Preferred from current hardward && OS using runtime detection** + @param containsAlpha Whether the image to render contains alpha channel + */ ++ (SDImagePixelFormat)preferredPixelFormat:(BOOL)containsAlpha; + +/** + Check whether CGImage is hardware supported to rendering on screen, without the trigger of `CA::Render::copy_image` + You can debug the copied image by using Xcode's `Color Copied Image`, the copied image will turn Cyan and occupy double RAM for bitmap buffer. + Typically, when the CGImage's using the method above (`colorspace` / `alignment` / `bitmapInfo`) can render withtout the copy. + */ ++ (BOOL)CGImageIsHardwareSupported:(_Nonnull CGImageRef)cgImage; + /** Check whether CGImage contains alpha channel. @@ -86,6 +131,8 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { Create a scaled CGImage by the provided CGImage and size. This follows The Create Rule and you are response to call release after usage. It will detect whether the image size matching the scale size, if not, stretch the image to the target size. @note If you need to keep aspect ratio, you can calculate the scale size by using `scaledSizeWithImageSize` first. + @note This scale does not change bits per components (which means RGB888 in, RGB888 out), supports 8/16/32(float) bpc. But the method in UIImage+Transform does not gurantee this. + @note All supported CGImage pixel format: https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB @param cgImage The CGImage @param size The scale size in pixel. @@ -103,23 +150,50 @@ typedef NS_ENUM(NSUInteger, SDImageCoderDecodeSolution) { */ + (CGSize)scaledSizeWithImageSize:(CGSize)imageSize scaleSize:(CGSize)scaleSize preserveAspectRatio:(BOOL)preserveAspectRatio shouldScaleUp:(BOOL)shouldScaleUp; +/// Calculate the limited image size with the bytes, when using `SDImageCoderDecodeScaleDownLimitBytes`. This preserve aspect ratio and never scale up +/// @param imageSize The image size (in pixel or point defined by caller) +/// @param limitBytes The limit bytes +/// @param bytesPerPixel The bytes per pixel +/// @param frameCount The image frame count, 0 means 1 frame as well ++ (CGSize)scaledSizeWithImageSize:(CGSize)imageSize limitBytes:(NSUInteger)limitBytes bytesPerPixel:(NSUInteger)bytesPerPixel frameCount:(NSUInteger)frameCount; /** Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. @param image The image to be decoded + @note This translate to `decodedImageWithImage:policy:` with automatic policy @return The decoded image */ + (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image; +/** + Return the decoded image by the provided image. This one unlike `CGImageCreateDecoded:`, will not decode the image which contains alpha channel or animated image. On iOS 15+, this may use `UIImage.preparingForDisplay()` to use CMPhoto for better performance than the old solution. + @param image The image to be decoded + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded image + */ ++ (UIImage * _Nullable)decodedImageWithImage:(UIImage * _Nullable)image policy:(SDImageForceDecodePolicy)policy; + /** Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. @param image The image to be decoded and scaled down @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @note This translate to `decodedAndScaledDownImageWithImage:limitBytes:policy:` with automatic policy @return The decoded and probably scaled down image */ + (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes; +/** + Return the decoded and probably scaled down image by the provided image. If the image pixels bytes size large than the limit bytes, will try to scale down. Or just works as `decodedImageWithImage:`, never scale up. + @warning You should not pass too small bytes, the suggestion value should be larger than 1MB. Even we use Tile Decoding to avoid OOM, however, small bytes will consume much more CPU time because we need to iterate more times to draw each tile. + + @param image The image to be decoded and scaled down + @param bytes The limit bytes size. Provide 0 to use the build-in limit. + @param policy The force decode policy to decode image, will effect the check whether input image need decode + @return The decoded and probably scaled down image + */ ++ (UIImage * _Nullable)decodedAndScaledDownImageWithImage:(UIImage * _Nullable)image limitBytes:(NSUInteger)bytes policy:(SDImageForceDecodePolicy)policy; + /** Control the default force decode solution. Available solutions in `SDImageCoderDecodeSolution`. @note Defaults to `SDImageCoderDecodeSolutionAutomatic`, which prefers to use UIKit for JPEG/HEIF, and fallback on CoreGraphics. If you want control on your hand, set the other solution. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageFrame.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageFrame.h index a93fd9c..41f3965 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageFrame.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageFrame.h @@ -24,6 +24,11 @@ */ @property (nonatomic, readonly, assign) NSTimeInterval duration; +/// Create a frame instance with specify image and duration +/// @param image current frame's image +/// @param duration current frame's duration +- (nonnull instancetype)initWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + /** Create a frame instance with specify image and duration @@ -31,6 +36,9 @@ @param duration current frame's duration @return frame instance */ -+ (instancetype _Nonnull)frameWithImage:(UIImage * _Nonnull)image duration:(NSTimeInterval)duration; ++ (nonnull instancetype)frameWithImage:(nonnull UIImage *)image duration:(NSTimeInterval)duration; + +- (nonnull instancetype)init NS_UNAVAILABLE; ++ (nonnull instancetype)new NS_UNAVAILABLE; @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageLoader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageLoader.h index addad83..5ecec5d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageLoader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDImageLoader.h @@ -81,7 +81,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @param url The image URL to be loaded. @return YES to continue download, NO to stop download. */ -- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED("Use canRequestImageForURL:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +- (BOOL)canRequestImageForURL:(nullable NSURL *)url API_DEPRECATED_WITH_REPLACEMENT("canRequestImageForURL:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** @@ -125,7 +125,7 @@ FOUNDATION_EXPORT void SDImageLoaderSetProgressiveCoder(id @return Whether to block this url or not. Return YES to mark this URL as failed. */ - (BOOL)shouldBlockFailedURLWithURL:(nonnull NSURL *)url - error:(nonnull NSError *)error API_DEPRECATED("Use shouldBlockFailedURLWithURL:error:options:context: instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); + error:(nonnull NSError *)error API_DEPRECATED_WITH_REPLACEMENT("shouldBlockFailedURLWithURL:error:options:context:", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); @optional /** diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImage.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImage.h index 0e56800..6bc9de8 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImage.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImage.h @@ -18,6 +18,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import #import +#import #import #import #import @@ -39,6 +40,7 @@ FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; #import #import #import +#import #import #import #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageCompat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageCompat.h index f47a248..530b147 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageCompat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageCompat.h @@ -21,14 +21,6 @@ #define SD_MAC 0 #endif -// iOS and tvOS are very similar, UIKit exists on both platforms -// Note: watchOS also has UIKit, but it's very limited -#if TARGET_OS_IOS || TARGET_OS_TV - #define SD_UIKIT 1 -#else - #define SD_UIKIT 0 -#endif - #if TARGET_OS_IOS #define SD_IOS 1 #else @@ -47,6 +39,20 @@ #define SD_WATCH 0 #endif +// Supports Xcode 14 to suppress warning +#ifdef TARGET_OS_VISION +#if TARGET_OS_VISION + #define SD_VISION 1 +#endif +#endif + +// iOS/tvOS/visionOS are very similar, UIKit exists on both platforms +// Note: watchOS also has UIKit, but it's very limited +#if SD_IOS || SD_TV || SD_VISION + #define SD_UIKIT 1 +#else + #define SD_UIKIT 0 +#endif #if SD_MAC #import diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDefine.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDefine.h index df7c7fa..f6ae2d2 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDefine.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDefine.h @@ -107,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * of the placeholder image until after the image has finished loading. * @note This is used to treate placeholder as an **Error Placeholder** but not **Loading Placeholder** by defaults. if the image loading is cancelled or error, the placeholder will be always set. * @note Therefore, if you want both **Error Placeholder** and **Loading Placeholder** exist, use `SDWebImageAvoidAutoSetImage` to manually set the two placeholders and final loaded image by your hand depends on loading result. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageDelayPlaceholder = 1 << 8, @@ -120,6 +121,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, image is added to the imageView after download. But in some cases, we want to * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) * Use this flag if you want to manually set the image in the completion when success + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageAvoidAutoSetImage = 1 << 10, @@ -127,9 +129,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, images are decoded respecting their original size. * This flag will scale down the images to a size compatible with the constrained memory of devices. * To control the limit memory bytes, check `SDImageCoderHelper.defaultScaleDownLimitBytes` (Defaults to 60MB on iOS) - * This will actually translate to use context option `.imageThumbnailPixelSize` from v5.5.0 (Defaults to (3966, 3966) on iOS). Previously does not. - * This flags effect the progressive and animated images as well from v5.5.0. Previously does not. - * @note If you need detail controls, it's better to use context option `imageThumbnailPixelSize` and `imagePreserveAspectRatio` instead. + * (from 5.16.0) This will actually translate to use context option `SDWebImageContextImageScaleDownLimitBytes`, which check and calculate the thumbnail pixel size occupied small than limit bytes (including animated image) + * (from 5.5.0) This flags effect the progressive and animated images as well + * @note If you need detail controls, it's better to use context option `imageScaleDownBytes` instead. + * @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) */ SDWebImageScaleDownLargeImages = 1 << 11, @@ -164,6 +167,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { /** * By default, when you use `SDWebImageTransition` to do some view transition after the image load finished, this transition is only applied for image when the callback from manager is asynchronous (from network, or disk cache query) * This mask can force to apply view transition for any cases, like memory cache query, or sync disk cache query. + * @note This options is UI level options, has no usage on ImageManager or other components. */ SDWebImageForceTransition = 1 << 17, @@ -171,8 +175,9 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing an issue due to excessive memory consumption, This flag can prevent decode the image. * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageAvoidDecodeImage = 1 << 18, + SDWebImageAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 18, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -204,7 +209,15 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { * We usually don't apply transform on vector images, because vector images supports dynamically changing to any size, rasterize to a fixed size will loss details. To modify vector images, you can process the vector data at runtime (such as modifying PDF tag / SVG element). * Use this flag to transform them anyway. */ - SDWebImageTransformVectorImage = 1 << 23 + SDWebImageTransformVectorImage = 1 << 23, + + /** + * By defaults, when you use UI-level category like `sd_setImageWithURL:` on UIImageView, it will cancel the loading image requests. + * However, some users may choose to not cancel the loading image requests and always start new pipeline. + * Use this flag to disable automatic cancel behavior. + * @note This options is UI level options, has no usage on ImageManager or other components. + */ + SDWebImageAvoidAutoCancelImage = 1 << 24, }; @@ -221,6 +234,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextSetIma */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager API_DEPRECATED("Use individual context option like .imageCache, .imageLoader and .imageTransformer instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); +/** + A `SDCallbackQueue` instance which controls the `Cache`/`Manager`/`Loader`'s callback queue for their completionBlock. + This is useful for user who call these 3 components in non-main queue and want to avoid callback in main queue. + @note For UI callback (`sd_setImageWithURL`), we will still use main queue to dispatch, means if you specify a global queue, it will enqueue from the global queue to main queue. + @note This does not effect the components' working queue (for example, `Cache` still query disk on internal ioQueue, `Loader` still do network on URLSessionConfiguration.delegateQueue), change those config if you need. + Defaults to nil. Which means main queue. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCallbackQueue; + /** A id instance which conforms to `SDImageCache` protocol. It's used to override the image manager's cache during the image loading pipeline. In other word, if you just want to specify a custom cache during image loading, you don't need to re-create a dummy SDWebImageManager instance with the cache. If not provided, use the image manager's cache (id) @@ -246,6 +268,15 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageC */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTransformer; +#pragma mark - Force Decode Options + +/** + A NSNumber instance which store the`SDImageForceDecodePolicy` enum. This is used to control how current image loading should force-decode the decoded image (CGImage, typically). See more what's force-decode means in `SDImageForceDecodePolicy` comment. + Defaults to `SDImageForceDecodePolicyAutomatic`, which will detect the input CGImage's metadata, and only force-decode if the input CGImage can not directly render on screen (need extra CoreAnimation Copied Image and increase RAM usage). + @note If you want to always the force-decode for this image request, pass `SDImageForceDecodePolicyAlways`, for example, some WebP images which does not created by ImageIO. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageForceDecodePolicy; + #pragma mark - Image Decoder Context Options /** @@ -284,8 +315,28 @@ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageT */ FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageTypeIdentifierHint; +/** + A NSUInteger value to provide the limit bytes during decoding. This can help to avoid OOM on large frame count animated image or large pixel static image when you don't know how much RAM it occupied before decoding + The decoder will do these logic based on limit bytes: + 1. Get the total frame count (static image means 1) + 2. Calculate the `framePixelSize` width/height to `sqrt(limitBytes / frameCount / bytesPerPixel)`, keeping aspect ratio (at least 1x1) + 3. If the `framePixelSize < originalImagePixelSize`, then do thumbnail decoding (see `SDImageCoderDecodeThumbnailPixelSize`) use the `framePixelSize` and `preseveAspectRatio = YES` + 4. Else, use the full pixel decoding (small than limit bytes) + 5. Whatever result, this does not effect the animated/static behavior of image. So even if you set `limitBytes = 1 && frameCount = 100`, we will stll create animated image with each frame `1x1` pixel size. + @note This option has higher priority than `.imageThumbnailPixelSize` + @warning This does not effect the cache key. So which means, this will effect the global cache even next time you query without this option. Pay attention when you use this on global options (It's always recommended to use request-level option for different pipeline) + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageScaleDownLimitBytes; + #pragma mark - Cache Context Options +/** + A Dictionary (SDImageCoderOptions) value, which pass the extra encode options to the SDImageCoder. Introduced in SDWebImage 5.15.0 + You can pass encode options like `compressionQuality`, `maxFileSize`, `maxPixelSize` to control the encoding related thing, this is used inside `SDImageCache` during store logic. + @note For developer who use custom cache protocol (not SDImageCache instance), they need to upgrade and use these options for encoding. + */ +FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextImageEncodeOptions; + /** A SDImageCacheType raw value which specify the source of cache to query. Specify `SDImageCacheTypeDisk` to query from disk cache only; `SDImageCacheTypeMemory` to query from memory only. And `SDImageCacheTypeAll` to query from both memory cache and disk cache. Specify `SDImageCacheTypeNone` is invalid and totally ignore the cache query. If not provide or the value is invalid, we will use `SDImageCacheTypeAll`. (NSNumber) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDownloader.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDownloader.h index a2f50f4..08ae16b 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDownloader.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageDownloader.h @@ -74,8 +74,10 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { /** * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation. * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image. + * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not) + * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option */ - SDWebImageDownloaderAvoidDecodeImage = 1 << 9, + SDWebImageDownloaderAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 9, /** * By default, we decode the animated image. This flag can force decode the first frame only and produce the static image. @@ -95,9 +97,13 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { SDWebImageDownloaderMatchAnimatedImageClass = 1 << 12, }; +/// Posed when URLSessionTask started (`resume` called)) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStartNotification; +/// Posed when URLSessionTask get HTTP response (`didReceiveResponse:completionHandler:` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadReceiveResponseNotification; +/// Posed when URLSessionTask stoped (`didCompleteWithError:` with error or `cancel` called) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadStopNotification; +/// Posed when URLSessionTask finished with success (`didCompleteWithError:` without error) FOUNDATION_EXPORT NSNotificationName _Nonnull const SDWebImageDownloadFinishNotification; typedef SDImageLoaderProgressBlock SDWebImageDownloaderProgressBlock; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageError.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageError.h index bb91d0b..652b0d7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageError.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageError.h @@ -9,6 +9,7 @@ #import "SDWebImageCompat.h" +/// An error domain represent SDWebImage loading system with custom codes FOUNDATION_EXPORT NSErrorDomain const _Nonnull SDWebImageErrorDomain; /// The response instance for invalid download response (NSURLResponse *) diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageIndicator.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageIndicator.h index e1165c1..522dc47 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageIndicator.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImageIndicator.h @@ -66,6 +66,7 @@ */ @interface SDWebImageActivityIndicator (Conveniences) +#if !SD_VISION /// These indicator use the fixed color without dark mode support /// gray-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *grayIndicator; @@ -75,6 +76,7 @@ @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteIndicator; /// large white-style activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *whiteLargeIndicator; +#endif /// These indicator use the system style, supports dark mode if available (iOS 13+/macOS 10.14+) /// large activity indicator @property (nonatomic, class, nonnull, readonly) SDWebImageActivityIndicator *largeIndicator; @@ -107,8 +109,10 @@ /// default-style progress indicator @property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *defaultIndicator; +#if SD_UIKIT /// bar-style progress indicator -@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(macos, tvos); +@property (nonatomic, class, nonnull, readonly) SDWebImageProgressIndicator *barIndicator API_UNAVAILABLE(tvos); +#endif @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImagePrefetcher.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImagePrefetcher.h index a9b2c1f..2256cc0 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImagePrefetcher.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/SDWebImagePrefetcher.h @@ -76,20 +76,23 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, /** * The options for prefetcher. Defaults to SDWebImageLowPriority. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in manager level. */ -@property (nonatomic, assign) SDWebImageOptions options; +@property (nonatomic, assign) SDWebImageOptions options API_DEPRECATED("Use individual prefetch options param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * The context for prefetcher. Defaults to nil. + * @deprecated Prefetcher is designed to be used shared and should not effect others. So in 5.15.0 we added API `prefetchURLs:options:context:`. If you want global control, try to use `SDWebImageOptionsProcessor` in `SDWebImageManager.optionsProcessor`. */ -@property (nonatomic, copy, nullable) SDWebImageContext *context; +@property (nonatomic, copy, nullable) SDWebImageContext *context API_DEPRECATED("Use individual prefetch context param instead", macos(10.10, API_TO_BE_DEPRECATED), ios(8.0, API_TO_BE_DEPRECATED), tvos(9.0, API_TO_BE_DEPRECATED), watchos(2.0, API_TO_BE_DEPRECATED)); /** * Queue options for prefetcher when call the progressBlock, completionBlock and delegate methods. Defaults to Main Queue. - * @note The call is asynchronously to avoid blocking target queue. + * @deprecated 5.15.0 introduce SDCallbackQueue, use that is preferred and has higher priority. The set/get to this property will translate to that instead. + * @note The call is asynchronously to avoid blocking target queue. (see SDCallbackPolicyDispatch) * @note The delegate queue should be set before any prefetching start and may not be changed during prefetching to avoid thread-safe problem. */ -@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue; +@property (strong, nonatomic, nonnull) dispatch_queue_t delegateQueue API_DEPRECATED("Use SDWebImageContextCallbackQueue context param instead, see SDCallbackQueue", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)); /** * The delegate for the prefetcher. Defaults to nil. @@ -134,6 +137,28 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; +/** + * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching. It based on the image manager so the image may from the cache and network according to the `options` property. + * Prefetching is separate to each other, which means the progressBlock and completionBlock you provide is bind to the prefetching for the list of urls. + * Attention that call this will not cancel previous fetched urls. You should keep the token return by this to cancel or cancel all the prefetch. + * + * @param urls list of URLs to prefetch + * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. + * @param context A context contains different options to perform specify changes or processes, see `SDWebImageContextOption`. This hold the extra objects which `options` enum can not hold. + * @param progressBlock block to be called when progress updates; + * first parameter is the number of completed (successful or not) requests, + * second parameter is the total number of images originally requested to be prefetched + * @param completionBlock block to be called when the current prefetching is completed + * first param is the number of completed (successful or not) requests, + * second parameter is the number of skipped requests + * @return the token to cancel the current prefetching. + */ +- (nullable SDWebImagePrefetchToken *)prefetchURLs:(nullable NSArray *)urls + options:(SDWebImageOptions)options + context:(nullable SDWebImageContext *)context + progress:(nullable SDWebImagePrefetcherProgressBlock)progressBlock + completed:(nullable SDWebImagePrefetcherCompletionBlock)completionBlock; + /** * Remove and cancel all the prefeching for the prefetcher. */ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIButton+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIButton+WebCache.h index 89d94b4..8a898c7 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIButton+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIButton+WebCache.h @@ -21,6 +21,7 @@ /** * Get the current image URL. + * This simply translate to `[self sd_imageURLForState:self.state]` from v5.18.0 */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; @@ -31,6 +32,13 @@ */ - (nullable NSURL *)sd_imageURLForState:(UIControlState)state; +/** + * Get the image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_imageOperationKeyForState:(UIControlState)state; + /** * Set the button `image` with an `url`. * @@ -202,6 +210,13 @@ */ @property (nonatomic, strong, readonly, nullable) NSURL *sd_currentBackgroundImageURL; +/** + * Get the background image operation key for a control state. + * + * @param state Which state you want to know the URL for. The values are described in UIControlState. + */ +- (nonnull NSString *)sd_backgroundImageOperationKeyForState:(UIControlState)state; + /** * Get the background image URL for a control state. * diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+ForceDecode.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+ForceDecode.h index f368746..658659a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+ForceDecode.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+ForceDecode.h @@ -15,6 +15,12 @@ /** A bool value indicating whether the image has already been decoded. This can help to avoid extra force decode. + Force decode is used for 2 cases: + -- 1. for ImageIO created image (via `CGImageCreateWithImageSource` SPI), it's lazy and we trigger the decode before rendering + -- 2. for non-ImageIO created image (via `CGImageCreate` API), we can ensure it's alignment is suitable to render on screen without copy by CoreAnimation + @note For coder plugin developer, always use the SDImageCoderHelper's `colorSpaceGetDeviceRGB`/`preferredPixelFormat` to create CGImage. + @note For more information why force decode, see: https://github.com/path/FastImageCache#byte-alignment + @note From v5.17.0, the default value is always NO. Use `SDImageForceDecodePolicy` to control complicated policy. */ @property (nonatomic, assign) BOOL sd_isDecoded; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+MultiFormat.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+MultiFormat.h index a0935b5..e495c74 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+MultiFormat.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+MultiFormat.h @@ -46,6 +46,7 @@ Encode the current image to the data, the image format is unspecified @note If the receiver is `SDAnimatedImage`, this will return the animated image data if available. No more extra encoding process. + @note For macOS, if the receiver contains only `SDAnimatedImageRep`, this will return the animated image data if available. No more extra encoding process. @return The encoded data. If can't encode, return nil */ - (nullable NSData *)sd_imageData; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+Transform.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+Transform.h index 06cb66d..60b488a 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+Transform.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImage+Transform.h @@ -8,9 +8,13 @@ #import "SDWebImageCompat.h" +/// The scale mode to apply when image drawing on a container with different sizes. typedef NS_ENUM(NSUInteger, SDImageScaleMode) { + /// The option to scale the content to fit the size of itself by changing the aspect ratio of the content if necessary. SDImageScaleModeFill = 0, + /// The option to scale the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. SDImageScaleModeAspectFit = 1, + /// The option to scale the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds. SDImageScaleModeAspectFill = 2 }; @@ -103,6 +107,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color at specify position. The point is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The point's x/y will be converted into integer. @note The point's x/y should not be smaller than 0, or greater than or equal to width/height. @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. @@ -113,6 +118,7 @@ typedef NS_OPTIONS(NSUInteger, SDRectCorner) { /** Return the pixel color array with specify rectangle. The rect is from the top-left to the bottom-right and 0-based. The returned the color is always be RGBA format. The image must be CG-based. + @note The rect's origin and size will be converted into integer. @note The rect's width/height should not be smaller than or equal to 0. The minX/minY should not be smaller than 0. The maxX/maxY should not be greater than width/height. Attention this limit is different from `sd_colorAtPoint:` (point: (0, 0) like rect: (0, 0, 1, 1)) @note The overhead of object creation means this method is best suited for infrequent color sampling. For heavy image processing, grab the raw bitmap data and process yourself. diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h index 6cd3ba6..80fabc6 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+HighlightedWebCache.h @@ -17,6 +17,13 @@ */ @interface UIImageView (HighlightedWebCache) +#pragma mark - Highlighted Image + +/** + * Get the current highlighted image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentHighlightedImageURL; + /** * Set the imageView `highlightedImage` with an `url`. * @@ -124,6 +131,12 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current highlighted image load (for `UIImageView.highlighted`) + * @note For normal image, use `sd_cancelCurrentImageLoad` + */ +- (void)sd_cancelCurrentHighlightedImageLoad; + @end #endif diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+WebCache.h index 626de9d..46b5a70 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIImageView+WebCache.h @@ -45,6 +45,15 @@ */ @interface UIImageView (WebCache) +#pragma mark - Image State + +/** + * Get the current image URL. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_currentImageURL; + +#pragma mark - Image Loading + /** * Set the imageView `image` with an `url`. * @@ -191,4 +200,10 @@ progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock; +/** + * Cancel the current normal image load (for `UIImageView.image`) + * @note For highlighted image, use `sd_cancelCurrentHighlightedImageLoad` + */ +- (void)sd_cancelCurrentImageLoad; + @end diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCache.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCache.h index 48175f1..c15edaa 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCache.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCache.h @@ -11,6 +11,8 @@ #import "SDWebImageManager.h" #import "SDWebImageTransition.h" #import "SDWebImageIndicator.h" +#import "UIView+WebCacheOperation.h" +#import "UIView+WebCacheState.h" /** The value specify that the image progress unit count cannot be determined because the progressBlock is not been called. @@ -24,27 +26,34 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima */ @interface UIView (WebCache) -/** - * Get the current image URL. - * - * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. - */ -@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; - /** * Get the current image operation key. Operation key is used to identify the different queries for one view instance (like UIButton). * See more about this in `SDWebImageContextSetImageOperationKey`. - * If you cancel current image load, the key will be set to nil. + * * @note You can use method `UIView+WebCacheOperation` to investigate different queries' operation. + * @note For the history version compatible, when current UIView has property exactly called `image`, the operation key will use `NSStringFromClass(self.class)`. Include `UIImageView.image/NSImageView.image/NSButton.image` (without `UIButton`) + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), check their header to call correct API, like `-[UIButton sd_imageOperationKeyForState:]` */ @property (nonatomic, strong, readonly, nullable) NSString *sd_latestOperationKey; +#pragma mark - State + +/** + * Get the current image URL. + * This simply translate to `[self sd_imageLoadStateForKey:self.sd_latestOperationKey].url` from v5.18.0 + * + * @note Note that because of the limitations of categories this property can get out of sync if you use setImage: directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. + */ +@property (nonatomic, strong, readonly, nullable) NSURL *sd_imageURL; + /** * The current image loading progress associated to the view. The unit count is the received size and excepted size of download. * The `totalUnitCount` and `completedUnitCount` will be reset to 0 after a new image loading start (change from current queue). And they will be set to `SDWebImageProgressUnitCountUnknown` if the progressBlock not been called but the image loading success to mark the progress finished (change from main queue). * @note You can use Key-Value Observing on the progress, but you should take care that the change to progress is from a background queue during download(the same as progressBlock). If you want to using KVO and update the UI, make sure to dispatch on the main queue. And it's recommend to use some KVO libs like KVOController because it's more safe and easy to use. * @note The getter will create a progress instance if the value is nil. But by default, we don't create one. If you need to use Key-Value Observing, you must trigger the getter or set a custom progress instance before the loading start. The default value is nil. * @note Note that because of the limitations of categories this property can get out of sync if you update the progress directly. + * @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_imageLoadStateForKey:` instead. See `UIView+WebCacheState.h` for more information. */ @property (nonatomic, strong, null_resettable) NSProgress *sd_imageProgress; @@ -83,6 +92,9 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** * Cancel the current image load + * This simply translate to `[self sd_cancelImageLoadOperationWithKey:self.sd_latestOperationKey]` from v5.18.0 + * + * @warning This method should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), use `sd_cancelImageLoadOperationWithKey:` instead. See `UIView+WebCacheOperation.h` for more information. */ - (void)sd_cancelCurrentImageLoad; @@ -93,6 +105,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima /** The image transition when image load finished. See `SDWebImageTransition`. If you specify nil, do not do transition. Defaults to nil. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) SDWebImageTransition *sd_imageTransition; @@ -102,6 +115,7 @@ typedef void(^SDSetImageBlock)(UIImage * _Nullable image, NSData * _Nullable ima The image indicator during the image loading. If you do not need indicator, specify nil. Defaults to nil The setter will remove the old indicator view and add new indicator view to current view's subview. @note Because this is UI related, you should access only from the main queue. + @warning This property should be only used for single state view, like `UIImageView` without highlighted state. For stateful view like `UIBUtton` (one view can have multiple images loading), write your own implementation in `setImageBlock:`, and check current stateful view's state to render the UI. */ @property (nonatomic, strong, nullable) id sd_imageIndicator; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCacheOperation.h b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCacheOperation.h index fc23508..0bc12ca 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCacheOperation.h +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Headers/UIView+WebCacheOperation.h @@ -20,14 +20,16 @@ * * @param key key for identifying the operations * @return the image load operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (nullable id)sd_imageLoadOperationForKey:(nullable NSString *)key; /** * Set the image load operation (storage in a UIView based weak map table) * - * @param operation the operation + * @param operation the operation, should not be nil or no-op will perform * @param key key for storing the operation + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_setImageLoadOperation:(nullable id)operation forKey:(nullable NSString *)key; @@ -35,13 +37,15 @@ * Cancel the operation for the current UIView and key * * @param key key for identifying the operations + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_cancelImageLoadOperationWithKey:(nullable NSString *)key; /** * Just remove the operation corresponding to the current UIView and key without cancelling them * - * @param key key for identifying the operations + * @param key key for identifying the operations. + * @note If key is nil, means using the NSStringFromClass(self.class) instead, match the behavior of `operation key` */ - (void)sd_removeImageLoadOperationWithKey:(nullable NSString *)key; diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Info.plist b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Info.plist index 06853af..2fdd90a 100644 Binary files a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Info.plist and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Info.plist differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Modules/module.modulemap b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Modules/module.modulemap index 871087c..3eaba7d 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Modules/module.modulemap +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/Modules/module.modulemap @@ -1,6 +1,6 @@ framework module SDWebImage { umbrella header "SDWebImage.h" - export * + module * { export * } } diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/SDWebImage b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/SDWebImage index 19a28c2..35f90a0 100755 Binary files a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/SDWebImage and b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/SDWebImage differ diff --git a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/_CodeSignature/CodeResources b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/_CodeSignature/CodeResources index e634583..a0704c5 100644 --- a/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/_CodeSignature/CodeResources +++ b/appboy-component/src/ios-unified/SDWebImage.xcframework/ios-arm64_x86_64-simulator/SDWebImage.framework/_CodeSignature/CodeResources @@ -18,15 +18,15 @@ Headers/SDAnimatedImage.h - nlov45z+hzYZWy5dRC2qtQ0U+fI= + aUkut1lxjGOJsttYLnmmp7kTOdY= Headers/SDAnimatedImagePlayer.h - kW7bga65ryLPhHA0SbmDn8W/2Gw= + umuBgniyctLvENMsQ/M26tordQ8= Headers/SDAnimatedImageRep.h - /REOBNa5W15NHvbgmeHbZQ8I+Uc= + Yt8eKC+fpPiSOgGyGc6xQqnu3KM= Headers/SDAnimatedImageView+WebCache.h @@ -36,13 +36,17 @@ faC1Sd6iV/oLYO7wRz72DXEhf1A= + Headers/SDCallbackQueue.h + + ZJo6Sa5JwSHFftUrot6e7AqEPQ4= + Headers/SDDiskCache.h 2IvuQFBIJHsEUVLlR+28rQQe2lw= Headers/SDGraphicsImageRenderer.h - CsVkrqarROomM8BXgwErJcaW734= + WxIcdQdoEjM/hX0EarbegAppBek= Headers/SDImageAPNGCoder.h @@ -54,7 +58,7 @@ Headers/SDImageCache.h - thcqD7uY+UQ82F2hMPkMX+Lijqg= + B5j7SZgEs+9aqolcz79aMmcsagU= Headers/SDImageCacheConfig.h @@ -62,7 +66,7 @@ Headers/SDImageCacheDefine.h - 79W2UbaeHGIcd5ev4VkeAiaMIvM= + JGUeQAVQAzsI5AM0JZDIgYUQJg0= Headers/SDImageCachesManager.h @@ -70,11 +74,11 @@ Headers/SDImageCoder.h - fJHHcPc0Ubm22taxs+DdZ399bks= + pIV1EiWRxQJGthu51MKJ2lV23fM= Headers/SDImageCoderHelper.h - 8bMWi8sDuZ1oEIXRM2R8KKMQnOI= + d3gidjjzjyCstk53zXYRMctZ96s= Headers/SDImageCodersManager.h @@ -82,7 +86,7 @@ Headers/SDImageFrame.h - Z78zM0iFgLkBD5xHuromHb7Bowg= + OMHYfH8iLCcQLgZ4YyiDJ9W9S7c= Headers/SDImageGIFCoder.h @@ -106,7 +110,7 @@ Headers/SDImageLoader.h - KaMJXtaQu+946SxQAvMGlmFuBwI= + 5BXL40fPBJ5oGsP1iM0QnGdbcPs= Headers/SDImageLoadersManager.h @@ -122,7 +126,7 @@ Headers/SDWebImage.h - q5g0f0LbHdNSaWHKMhgEtgmYBVQ= + HCkBNG4f+fSdK4HG8fGozZdNiL0= Headers/SDWebImageCacheKeyFilter.h @@ -134,15 +138,15 @@ Headers/SDWebImageCompat.h - 8k1IfpvObMYxnuQUloXtqWQY2uc= + AEa8pdBFXYJRKh92y2N/4tJEeo8= Headers/SDWebImageDefine.h - AVBrf4lHISREe46rdfe/yKIPP7k= + bMl/fJM5uZkjw85XN62keykoTBE= Headers/SDWebImageDownloader.h - obAS71G7ETHNoP0UR28bodW7Lu4= + khKUbxR/J53pscnFW+5BDVFgO90= Headers/SDWebImageDownloaderConfig.h @@ -166,11 +170,11 @@ Headers/SDWebImageError.h - UO2SxsVTSkKV1Y9/9KmY8Aqtz4k= + FC3IAo7pR4h93t6QeXlmtOHdZvI= Headers/SDWebImageIndicator.h - pqszQD9HMA8YgyEgd9RmZmQhb00= + d4goT+IzohYDq38BvPeR7BTc5iw= Headers/SDWebImageManager.h @@ -186,7 +190,7 @@ Headers/SDWebImagePrefetcher.h - J0rUnDm07NCgpAu1iHZcbv2hQm8= + xMh1Gu+HBzvb1MOuMY5Vt7zYm0M= Headers/SDWebImageTransition.h @@ -194,7 +198,7 @@ Headers/UIButton+WebCache.h - bsN5t9jKiRqJu6rv6GNIWSE6IgM= + CQ/r9KIZ4rC9OLCgZ8IlI6yO1C0= Headers/UIImage+ExtendedCacheData.h @@ -202,7 +206,7 @@ Headers/UIImage+ForceDecode.h - iYqs6+Du/88j9Z460/HztcSIZmc= + U2UQq4eLIdNIW/q4Txp2/bD4Now= Headers/UIImage+GIF.h @@ -218,35 +222,103 @@ Headers/UIImage+MultiFormat.h - R0Yf/KuEiGuleHY4ygPGWo6AroQ= + tJOSxpAbfgpEkLSjOKDTQBvpAGI= Headers/UIImage+Transform.h - WsYmHSwrP8L/LCau8ywYaZe/oZ0= + a5vrPV939HvOTGW2feEDV92Hypg= Headers/UIImageView+HighlightedWebCache.h - 0qlPDMJ9i4aXFrkkxKH3Kjvu5VY= + V4leacX4kIZjjFmKNWTOcxEWbRI= Headers/UIImageView+WebCache.h - hE5lfRwyZ3RBIVRZsXyfS4as2rs= + kJScMN4XyKqi6oIV8vdvgX9QKs0= Headers/UIView+WebCache.h - huX2ZUt9NkNqHg7AaFnbz0/orfE= + /orPm16a/8AeZaHQzu6cgc9pivk= Headers/UIView+WebCacheOperation.h - z/SzMOPyGv5l3tpRQbSZ0TPgqgY= + gWoTb4BsM6UfrNyXSanUM+AQLbU= + + Headers/UIView+WebCacheState.h + + 771hZgr2q0NJeFs0oox1EMSX4mM= Info.plist - RUCgqqDFXt9rxoEzG/zksmSHBfU= + 1lIwDu1tEFQ1MGo/rNfoYkjqm8w= Modules/module.modulemap - S964ooaM4CpcZr/xZHjkJvHu5io= + DCDzAF1C1qsuicpmkZhe6IrGwkA= + + PrivacyInfo.xcprivacy + + PFHYbs0V3eUFDWQyYQcwEetuqEk= + + PrivateHeaders/NSBezierPath+SDRoundedCorners.h + + hVf10BOSXAmUGUC+yd0ztOAH4BY= + + PrivateHeaders/SDAssociatedObject.h + + vGTBkYhQJTlD6ZChh2vQXaWhC0U= + + PrivateHeaders/SDAsyncBlockOperation.h + + snzjaBGyE/z0cdUS9+aJRKrxDnI= + + PrivateHeaders/SDDeviceHelper.h + + /JSjyySMNJYdu/u8oS3wwS+0FCQ= + + PrivateHeaders/SDDisplayLink.h + + ylFFSzJbR+eq7L+qXMeezb4OXSs= + + PrivateHeaders/SDFileAttributeHelper.h + + sb2CUGqQfxIv2pbTDH1eH9Tx/lc= + + PrivateHeaders/SDImageAssetManager.h + + 8EwarZm30x7czN6Nn9NHYxVbepY= + + PrivateHeaders/SDImageCachesManagerOperation.h + + FO5aLhjBQ2flj+39N/ihTId+Yx4= + + PrivateHeaders/SDImageFramePool.h + + p4Uj8gNLlVyG4aMmYvdqi2/YJHI= + + PrivateHeaders/SDImageIOAnimatedCoderInternal.h + + yRyBajzOGKtZVLxl+zfgBTI0FnA= + + PrivateHeaders/SDInternalMacros.h + + Lns/aWnsokOaPUSXXvUqGIetRr4= + + PrivateHeaders/SDWeakProxy.h + + sDlUvBrJYVMQKR39qPnbjcghuhk= + + PrivateHeaders/SDWebImageTransitionInternal.h + + IofQDwABOOMR5dycmLjaLz5cOnU= + + PrivateHeaders/SDmetamacros.h + + /UCzmRZdtlxqZdIiubMLZeAL5oo= + + PrivateHeaders/UIColor+SDHexString.h + + bvb2vO3YtXbNaIvieoIZQFZg/Vs= files2 @@ -276,21 +348,21 @@ hash2 - gIKSdZflZOlYu8y9RcrLCaTSmvL0fCnxsigzcLXTNQY= + 6nRXhiYC5dibllmm1uNU+wdG0VMzbpILNENwg7zo+fI= Headers/SDAnimatedImagePlayer.h hash2 - BXinVrfF4TU7Z6yk1/5ZCz2LDUYOel4HHjr8FZUzZ8w= + 7SD/R/rOdLs8EBPo0GzFBDVndbMTDD4KBvlIa8hx3j4= Headers/SDAnimatedImageRep.h hash2 - RbO69GQkW7bisdpwLoOXWsjSyG2G0yoLbWS5OapxSIk= + rXU1YmGNqrf7EJd5bPGvA+zM9K0tcThTsVuSPob0hdU= Headers/SDAnimatedImageView+WebCache.h @@ -307,6 +379,13 @@ ok+G85pM/oCXb/Lax+296KCgGobASRtD26WsxWDvdAw= + Headers/SDCallbackQueue.h + + hash2 + + +uUJ5lhcN6LJArk11wb8jXWrxoonLilauKr0jN2cHz0= + + Headers/SDDiskCache.h hash2 @@ -318,7 +397,7 @@ hash2 - aBvkcz8/QLKKOXSB+I4eeECOSErCy+avciZBU9Cc9XU= + AHMv5IVi08vkKDNKtz7n7er1fURexQKAfW8TGofit+I= Headers/SDImageAPNGCoder.h @@ -339,7 +418,7 @@ hash2 - A3J8X3MR0h5dSv28J/Dc9Dz0O9hxMLH0Ou2uQWgctwY= + +2pdUFHHLLNQ/3oY3rJeZ1xYz422AHCX1k75DjoGLFQ= Headers/SDImageCacheConfig.h @@ -353,7 +432,7 @@ hash2 - jvZu36by+5XbCfDH9IlYpM7E4c/G1RLGelo3Em4An8Y= + Wi1D/1DYt5p7FAdtmQg44ZTZyyGPZMYkbKKpooE4bZE= Headers/SDImageCachesManager.h @@ -367,14 +446,14 @@ hash2 - lyJUqx8/8qTfrgbEIFDlF2qfaA0sLdC5188A1K0NJiU= + 8W+yN3a28biW91X18DWE7LNOWWFRkzWM2LEV6sMQuC4= Headers/SDImageCoderHelper.h hash2 - D5cgc9LJD868XlHfHQVivglcpJ75YDndtA4aDJ3pfVE= + dSRg/oUqYWnir123Jyo/adyHMIetJqeBODqlRBPWD9E= Headers/SDImageCodersManager.h @@ -388,7 +467,7 @@ hash2 - 4vfyB68RHcBZY46zgEn9bcn60wx6jsG+j+DX6BIXWGE= + 6q5axlkCIoLdNPTgEtPNPyw1DF+5l8zfFPUqljPimsk= Headers/SDImageGIFCoder.h @@ -430,7 +509,7 @@ hash2 - UCVVBHetaPMe4/pJbMxBg/4W5nhSKeY3N0z7qCWEYZ0= + k5s0BDpNxMcrxoMLndIa1xMYjYlsMPJXhI0DyN3DAvM= Headers/SDImageLoadersManager.h @@ -458,7 +537,7 @@ hash2 - ndBW5ZKz5+Ru5bnN012wVfEyazvxCeEi5BBsoaQnrRM= + RzW3faycWKnFoi8a02SG2OFaUS3A1bYy4WPXRdprCKA= Headers/SDWebImageCacheKeyFilter.h @@ -479,21 +558,21 @@ hash2 - oy7BDKkwybTbtk/klvWlFbJHRmY27gUXF/pNXlwcVsk= + +jMrw1mIVyVZYOm/Cx/Em4elpiJxcBqFi68x9ummGhw= Headers/SDWebImageDefine.h hash2 - I/eM8o+yqmGuXFf5mPet6js6pDNOx+QK2TxHrt0jV18= + H8fiqK/C8BHHm9U8bu2YGp+wyQqpOEorb5+RnHgbAdE= Headers/SDWebImageDownloader.h hash2 - pLzBuD8rm5k6yot9HLPot33EgBXBcJ4X4zMTI+6oUQg= + jcHXBHxw8XhtNaNxmvmK9yRV7cOMfWJMVqTGbSm1tVM= Headers/SDWebImageDownloaderConfig.h @@ -535,14 +614,14 @@ hash2 - y39AgTezn9F0jNhvwtzpS42uk/NPfzDANK+OK+LGPMQ= + v000vZmWuZTD6mW0rNs0pqbTyKzZryRFBzb9H0sEzS4= Headers/SDWebImageIndicator.h hash2 - K13+77jJWYSBgqKjV5ABm77wZuNX4LNRG+cVqBGaNQI= + MDKI/ZSjy+r9C2ncvk/1ZwGZ+c5AK5eakmNXS/wWA8Y= Headers/SDWebImageManager.h @@ -570,7 +649,7 @@ hash2 - j8leEfltC8L6AU4ZTZhKJISPZO5md3ijzDzo8COSa/I= + brr5Y7kpCqKbUrsltKgIobZ4Xankz12/Op9BRFEWtzo= Headers/SDWebImageTransition.h @@ -584,7 +663,7 @@ hash2 - UMoIutHZLiWds7lOuLC1U0+eCaUeuCj6neZbyRIoljA= + C1ctCpMMEySE7HPIZFSv6EPFGboSKWUTJn6yiQqTxBc= Headers/UIImage+ExtendedCacheData.h @@ -598,7 +677,7 @@ hash2 - cwt3nDt1WxYc+jwvrLutYZh1kbpDgqchmOK2+DtM9aU= + Z8wk8GiXpqzZl1iobdbm5nIgRZAbn/ZWxUHM7wMYRBQ= Headers/UIImage+GIF.h @@ -626,49 +705,168 @@ hash2 - cTbgGLa53CrXYIC3v+szzSEbFyw5dwStuZAcEzggk5g= + MmLcD/FrFSkkfHdDcztp8LrJWG5U3pfcp7ny41PxeLk= Headers/UIImage+Transform.h hash2 - Z6zrLryfb2PGXE6lQSCCB/qjAcAhaCnHcNGmMH4ApE0= + yKpUIJIQv6hO1fio77hVZkYnLROQHvtQOKUriliR+7o= Headers/UIImageView+HighlightedWebCache.h hash2 - p95bLIOEX7PYfFlrVqUYwHfdIqOPvtAaYRpV9Pmd+Qk= + EPJRLMV/bmuW4OGFh41msEopuK9PgANZXKVZNFosf40= Headers/UIImageView+WebCache.h hash2 - VrS2sLMjZBnlQA6l8/tK/klmuT696wvMcHenYSpTetU= + a1RXtDV4geqEDqM64e29H8eliaeTMJHQouZTzmt3f0Q= Headers/UIView+WebCache.h hash2 - brAMwkZZsNd5gR0ERTUSnpfhDETsQ40BOX7OtMuwdZM= + xRg+T5NcbiX9ME77ty9lhnZNDVN3wycynD6HB/ROKTg= Headers/UIView+WebCacheOperation.h hash2 - oZlA15jDJYyNdXlOhL8jp8z2EB/aAodQOFoegLTYOYc= + meaO3k2BE7QmtJ0v6cEEmGv76UODAt0bbR3Irp23TxI= + + + Headers/UIView+WebCacheState.h + + hash2 + + hDI+hQNqT+BmJWioRTwhS7xCtZFxHSy4PwALr4slTeE= Modules/module.modulemap hash2 - PS3NI5IJkI5c3alhjyLh6ZF+tTURPCejzV0qnzYCZ90= + VHLkXAEViq4tW4o3AM/NplEzMQMKoe4D5BqNuKnnq5M= + + + PrivacyInfo.xcprivacy + + hash2 + + A7LHCDOjMaKx79Ef8WjtAqjq39Xn0fvzDuzHUJpK6kc= + + + PrivateHeaders/NSBezierPath+SDRoundedCorners.h + + hash2 + + 125iXezXazuk0bBlzjX97k56M5HND0POvD1P26UXQvQ= + + + PrivateHeaders/SDAssociatedObject.h + + hash2 + + SxKYYCAzWltASk9/E4T+WJihZuqMEf6TbrBis4zVZEE= + + + PrivateHeaders/SDAsyncBlockOperation.h + + hash2 + + HPaaPMjj0fdrwSzEf++FQXpOIK7j880TYegbK3JnETo= + + + PrivateHeaders/SDDeviceHelper.h + + hash2 + + 41xMJVcy5UekYPA2oE1z1w2kkt7DHSJ7LUSsQJPMBKM= + + + PrivateHeaders/SDDisplayLink.h + + hash2 + + ck/YSP9JmZtonYX1YfoXENrBGq3YSnTL7L/2ZZn98d0= + + + PrivateHeaders/SDFileAttributeHelper.h + + hash2 + + zB3IKhQyk1zD3DyxhRPeN6d64/vK8mZe0PddbeHnzsE= + + + PrivateHeaders/SDImageAssetManager.h + + hash2 + + 9y6khxuRX1WIQMj6J8AJ/2tByFNlAqTDD/hhD5qBoUE= + + + PrivateHeaders/SDImageCachesManagerOperation.h + + hash2 + + AEyIv1rLeiXGp4mxbe8dolUaev33aJwaA6/pvRLy244= + + + PrivateHeaders/SDImageFramePool.h + + hash2 + + d0xW0Xh/bXttI34nV1E8wZ4dTeSr8WmCLzItU5jo3Ng= + + + PrivateHeaders/SDImageIOAnimatedCoderInternal.h + + hash2 + + 7TVc0l/vY0GUH88kK/o1Ta2L2tE3E3okbQ7aLvUC01Q= + + + PrivateHeaders/SDInternalMacros.h + + hash2 + + CcLqNsDNmKb4N09owp1EFqkqzeMHeb8Q3v92YNX4hDA= + + + PrivateHeaders/SDWeakProxy.h + + hash2 + + sOFO2j8398Rj63PfofP+WM3UpONhTV+g8dtNiB7OlGk= + + + PrivateHeaders/SDWebImageTransitionInternal.h + + hash2 + + typy3BLrrUyGQLZ0rgfRtqOXQsJbVQp1VyqAZuAN+9M= + + + PrivateHeaders/SDmetamacros.h + + hash2 + + woZuhByGlpU1DSRGoXvfFNTGkSSvobL7ky23jPzEDxY= + + + PrivateHeaders/UIColor+SDHexString.h + + hash2 + + +mdUXWt+Qmy2a2ZiqxrK4pGY+Abw0T8/u8uTluVAKpA=