diff --git a/submodules/MtProtoKit/PublicHeaders/MtProtoKit/MTContext.h b/submodules/MtProtoKit/PublicHeaders/MtProtoKit/MTContext.h index 9f687b8774..415f4f974f 100644 --- a/submodules/MtProtoKit/PublicHeaders/MtProtoKit/MTContext.h +++ b/submodules/MtProtoKit/PublicHeaders/MtProtoKit/MTContext.h @@ -56,6 +56,8 @@ + (MTQueue * _Nonnull)contextQueue; ++ (void)performWithObjCTry:(dispatch_block_t _Nonnull)block; + - (instancetype _Nonnull)initWithSerialization:(id _Nonnull)serialization encryptionProvider:(id _Nonnull)encryptionProvider apiEnvironment:(MTApiEnvironment * _Nonnull)apiEnvironment isTestingEnvironment:(bool)isTestingEnvironment useTempAuthKeys:(bool)useTempAuthKeys; - (void)performBatchUpdates:(void (^ _Nonnull)())block; diff --git a/submodules/MtProtoKit/Sources/MTContext.m b/submodules/MtProtoKit/Sources/MTContext.m index 8216fe97b7..7810572886 100644 --- a/submodules/MtProtoKit/Sources/MTContext.m +++ b/submodules/MtProtoKit/Sources/MTContext.m @@ -283,6 +283,13 @@ static int32_t fixedTimeDifferenceValue = 0; return queue; } ++ (void)performWithObjCTry:(dispatch_block_t _Nonnull)block { + @try { + block(); + } @finally { + } +} + - (void)cleanup { NSDictionary *datacenterAuthActions = _datacenterAuthActions; diff --git a/submodules/TelegramCore/Sources/Network/Network.swift b/submodules/TelegramCore/Sources/Network/Network.swift index 62b4749b69..d374004222 100644 --- a/submodules/TelegramCore/Sources/Network/Network.swift +++ b/submodules/TelegramCore/Sources/Network/Network.swift @@ -1093,13 +1093,25 @@ class Keychain: NSObject, MTKeychain { } func setObject(_ object: Any!, forKey aKey: String!, group: String!) { - let data = NSKeyedArchiver.archivedData(withRootObject: object) - self.set(group + ":" + aKey, data) + guard let object = object else { + return + } + MTContext.perform(objCTry: { + let data = NSKeyedArchiver.archivedData(withRootObject: object) + self.set(group + ":" + aKey, data) + }) } func object(forKey aKey: String!, group: String!) -> Any! { + guard let aKey = aKey, let group = group else { + return nil + } if let data = self.get(group + ":" + aKey) { - return NSKeyedUnarchiver.unarchiveObject(with: data as Data) + var result: Any? + MTContext.perform(objCTry: { + result = NSKeyedUnarchiver.unarchiveObject(with: data as Data) + }) + return result } return nil }