mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-21 00:52:43 +02:00
App extension - Improvement: Reduce memory consumption.
Force the ShareExtensionManager to release the primary view controller when the action is completed. We observed that `dealloc` is called for this view controller when the request is cancelled with error (`cancelRequestWithError`), but it is not called when the request is completed (`completeRequestReturningItems`).
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#import "ShareExtensionManager.h"
|
||||
#import "SharePresentingViewController.h"
|
||||
#import "MXKPieChartHUD.h"
|
||||
@import MobileCoreServices;
|
||||
|
||||
@@ -60,8 +61,12 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
[[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(checkUserAccount) name:NSExtensionHostWillEnterForegroundNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:sharedInstance selector:@selector(suspendSession) name:NSExtensionHostDidEnterBackgroundNotification object:nil];
|
||||
|
||||
MXSDKOptions *sdkOptions = [MXSDKOptions sharedInstance];
|
||||
|
||||
// Apply the application group
|
||||
[MXSDKOptions sharedInstance].applicationGroupIdentifier = @"group.im.vector";
|
||||
sdkOptions.applicationGroupIdentifier = @"group.im.vector";
|
||||
// Disable identicon use
|
||||
sdkOptions.disableIdenticonUseForUserAvatar = YES;
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
@@ -293,10 +298,23 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
{
|
||||
[self.shareExtensionContext cancelRequestWithError:[NSError errorWithDomain:@"MXFailureErrorDomain" code:500 userInfo:nil]];
|
||||
}
|
||||
|
||||
[self.primaryViewController destroy];
|
||||
self.primaryViewController = nil;
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (void)completeRequestReturningItems:(nullable NSArray *)items completionHandler:(void(^ __nullable)(BOOL expired))completionHandler;
|
||||
{
|
||||
[self suspendSession];
|
||||
|
||||
[self.shareExtensionContext completeRequestReturningItems:items completionHandler:completionHandler];
|
||||
|
||||
[self.primaryViewController destroy];
|
||||
self.primaryViewController = nil;
|
||||
}
|
||||
|
||||
- (UIAlertController *)compressionPromptForImage:(UIImage *)image shareBlock:(void(^)())shareBlock
|
||||
{
|
||||
UIAlertController *compressionPrompt;
|
||||
@@ -484,8 +502,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self suspendSession];
|
||||
[self.shareExtensionContext completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
[self completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[ShareExtensionManager] sendTextMessage failed.");
|
||||
@@ -520,8 +537,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self suspendSession];
|
||||
[self.shareExtensionContext completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
[self completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[ShareExtensionManager] sendFile failed.");
|
||||
@@ -594,8 +610,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self suspendSession];
|
||||
[self.shareExtensionContext completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
[self completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[ShareExtensionManager] sendImage failed.");
|
||||
@@ -635,8 +650,7 @@ typedef NS_ENUM(NSInteger, ImageCompressionMode)
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self suspendSession];
|
||||
[self.shareExtensionContext completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
[self completeRequestReturningItems:@[extensionItem] completionHandler:nil];
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
NSLog(@"[ShareExtensionManager] sendVideo failed.");
|
||||
|
||||
Reference in New Issue
Block a user