Skip to content

Commit bb7810b

Browse files
committed
v0.12.3 (611)
1 parent fd690a1 commit bb7810b

File tree

569 files changed

+22793
-5854
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

569 files changed

+22793
-5854
lines changed

CHANGELOG.en.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Changelog
22

3+
## [0.12.3 (611)] - 2023-01-11
4+
5+
- Introducing a long awaited feature! You can now create as many (independent) profiles as you want! For example, you can create one for family and friends and another for work.
6+
- A profile can be "hidden": showing it back requires a specific password. For an extra layer of privacy!
7+
- If a profile is allowed to make secure outgoing calls, all other profiles are as well.
8+
- Certain notifications were received twice, this is fixed.
9+
- iPad users with a physical keyboard can send messages by simply tapping Command + Return.
10+
- You can now clone any group, even if you are not administrator of the group.
11+
- Improved experience when sharing with Olvid: a list of all selected discussions now appears on top of the available discussions.
12+
- When forwarding a previously sent message, the forwarded message does not show the "forward" sign anymore.
13+
- Improves the virtual keyboard dismissal under iOS 15.5+.
14+
- It was not possible to have a white space when specifying a first name or a last name. This is fixed.
15+
- Certain link previews could "spin" forever. This is fixed.
16+
- Many minor bugfixes for iOS 13 and iPadOS.
17+
- Fixes animation issues of the composition view.
18+
- Other minor bugfixes.
19+
320
## [0.12.2 (602)] - 2022-11-29
421

522
- New redesigned (and more efficient!) list of recent discussions under iOS 16!

CHANGELOG.fr.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Changelog
22

3+
## [0.12.3 (611)] - 2023-01-11
4+
5+
- Vous l'attendiez tous... Vous pouvez maintenant créer autant de profils (indépendants) que vous voulez ! Par exemple, vous pouvez créer un profil pour la famille et les amis et un autre pour vos activités professionnelles.
6+
- Un profil peut être « masqué » : pour l'afficher, il vous faudra entrer un mot de passe.
7+
- Si un profil a le droit de passer des appels sécurisés, tous les profils ont automatiquement ce droit.
8+
- Certaines notifications étaient affichées deux fois, c'est corrigé.
9+
- Les utilisateurs iPad avec un clavier physique peuvent envoyer un message en appuyant sur Command + Entrée.
10+
- Vous pouvez maintenant cloner n'importe quel groupe, même si vous n'en êtes pas l'administrateur.
11+
- Amélioration de l'expérience de partage via Olvid : une liste des discussions sélectionnées s'affiche au dessus des discussions disponibles.
12+
- Si vous transférez un message que vous aviez écrit vous-même, le message transféré n'indiquera plus la mention « Transféré ».
13+
- Améliore le comportement du clavier virtuel sous iOS 15.5+
14+
- Il n'était pas possible d'avoir d'espace dans son nom ou prénom, c'est corrigé.
15+
- Certaines pré-visualisations de lien pouvaient échouer. C'est corrigé.
16+
- Corrections mineures pour iOS 13 et pour iPadOS.
17+
- Corrige des bugs d'animation de la zone de composition de message.
18+
- Autres corrections mineures.
19+
320
## [0.12.2 (602)] - 2022-11-29
421

522
- Refonte complète de la liste des discussions récentes sous iOS 16 !

CoreDataStack/CoreDataStack.xcodeproj/xcshareddata/xcschemes/CoreDataStack.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1400"
3+
LastUpgradeVersion = "1420"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

Engine/BigInt/BigInt/BigInt.xcodeproj/xcshareddata/xcschemes/BigInt.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1400"
3+
LastUpgradeVersion = "1420"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

Engine/ObvBackupManager/ObvBackupManager/ObvBackupManagerImplementation.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -509,13 +509,9 @@ extension ObvBackupManagerImplementation: ObvBackupDelegate {
509509

510510
try await restoreBackupableManagerObjects(backupableManagerObjects: backupableManagerObjects, fullBackup: fullBackup, backupRequestIdentifier: backupRequestIdentifier)
511511

512-
// Restore the app object
512+
// Restore the app object (the internalJson may be nil for very old backups, made at a time when the app did not provide backup data).
513513

514-
guard let internalJson = fullBackup.allInternalJsonAndIdentifier[backupableAppObject.backupSource]?[backupableAppObject.backupIdentifier] else {
515-
os_log("Could not recover the internal backup of the app (identified by key %{public}@)", log: log, type: .default, backupableAppObject.backupIdentifier)
516-
throw Self.makeError(message: "Could not recover the internal backup of the app")
517-
}
518-
514+
let internalJson = fullBackup.allInternalJsonAndIdentifier[backupableAppObject.backupSource]?[backupableAppObject.backupIdentifier]
519515
try await backupableAppObject.restoreBackup(backupRequestIdentifier: backupRequestIdentifier, internalJson: internalJson)
520516

521517
// If we reach this point, the full backup was restored

Engine/ObvChannelManager/ObvChannelManager/ChannelTypes/ObvLocalChannel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ final class ObvLocalChannel: ObvChannel {
8282
receptionChannelInfo: .Local,
8383
encodedElements: message.encodedElements)
8484

85-
try protocolDelegate.process(receivedMessage, within: obvContext)
85+
os_log("Processing a posted protocol message with a (just created) messageId %{public}@", log: log, type: .info, messageId.debugDescription)
86+
try protocolDelegate.processProtocolReceivedMessage(receivedMessage, within: obvContext)
8687

8788
return messageId
8889

Engine/ObvChannelManager/ObvChannelManager/Coordinators/NetworkReceivedMessageDecryptor.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,19 @@ extension NetworkReceivedMessageDecryptor {
117117
let log = OSLog(subsystem: delegateManager.logSubsystem, category: NetworkReceivedMessageDecryptor.logCategory)
118118

119119
guard let protocolDelegate = delegateManager.protocolDelegate else {
120+
assertionFailure()
120121
os_log("The protocol delegate is not set", log: log, type: .fault)
121122
return
122123
}
123124

125+
guard let notificationDelegate = delegateManager.notificationDelegate else {
126+
assertionFailure()
127+
os_log("The notification delegate is not set", log: log, type: .fault)
128+
return
129+
}
130+
124131
guard let networkFetchDelegate = delegateManager.networkFetchDelegate else {
132+
assertionFailure()
125133
os_log("The network fetch delegate is not set", log: log, type: .fault)
126134
return
127135
}
@@ -136,10 +144,13 @@ extension NetworkReceivedMessageDecryptor {
136144

137145
case .ProtocolMessage:
138146
os_log("🔑 New protocol message with id %{public}@", log: log, type: .info, receivedMessage.messageId.debugDescription)
147+
ObvChannelNotification.protocolMessageDecrypted(protocolMessageId: receivedMessage.messageId, flowId: obvContext.flowId)
148+
.postOnBackgroundQueue(within: notificationDelegate)
139149
if let receivedProtocolMessage = ReceivedProtocolMessage(with: obvChannelReceivedMessage) {
140150
let protocolReceivedMessage = receivedProtocolMessage.protocolReceivedMessage
141151
do {
142-
try protocolDelegate.process(protocolReceivedMessage, within: obvContext)
152+
os_log("Processing a decrypted received protocol message with messageId %{public}@", log: log, type: .info, protocolReceivedMessage.messageId.debugDescription)
153+
try protocolDelegate.processProtocolReceivedMessage(protocolReceivedMessage, within: obvContext)
143154
} catch {
144155
os_log("A received protocol message could not be processed", log: log, type: .error)
145156
}
@@ -152,6 +163,7 @@ extension NetworkReceivedMessageDecryptor {
152163

153164
case .ApplicationMessage:
154165
os_log("🔑🌊 New application message within flow %{public}@ with id %{public}@", log: log, type: .info, obvContext.flowId.debugDescription, receivedMessage.messageId.debugDescription)
166+
// We do not post an applicationMessageDecrypted notification, this is done by the Network Fetch Manager.
155167
if let receivedApplicationMessage = ReceivedApplicationMessage(with: obvChannelReceivedMessage) {
156168
do {
157169
// At this point, we expect the `knownAttachmentCount` of the `obvChannelReceivedMessage` to be set and equal to `receivedApplicationMessage.attachmentsInfos`

Engine/ObvChannelManager/ObvChannelManager/Core Data/ObvObliviousChannel.swift

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,14 @@ final class ObvObliviousChannel: NSManagedObject, ObvManagedObject, ObvNetworkCh
190190
self.timestampOfLastFullRatchetSentMessage = now
191191

192192
// Using the seed, we derive the seedForNextSendKey and compute the first provision (which contains the seedForNextProvisionedReceiveKey).
193-
guard let sendSeed = seed.diversify(with: currentDeviceUid, withCryptoSuite: cryptoSuiteVersion) else { return nil }
193+
guard let sendSeed = seed.diversify(with: currentDeviceUid, withCryptoSuite: cryptoSuiteVersion) else { assertionFailure(); return nil }
194194
self.seedForNextSendKey = sendSeed
195-
guard let recvSeed = seed.diversify(with: remoteDeviceUid, withCryptoSuite: cryptoSuiteVersion) else { return nil }
195+
guard let recvSeed = seed.diversify(with: remoteDeviceUid, withCryptoSuite: cryptoSuiteVersion) else { assertionFailure(); return nil }
196196

197197
self.provisions = Set<Provision>()
198198
guard let provision = Provision(fullRatchetingCount: 0,
199199
obliviousChannel: self,
200-
seedForNextProvisionedReceiveKey: recvSeed) else { return nil }
200+
seedForNextProvisionedReceiveKey: recvSeed) else { assertionFailure(); return nil }
201201
self.provisions.insert(provision)
202202
}
203203

@@ -460,11 +460,11 @@ extension ObvObliviousChannel {
460460
currentDeviceUidKey, currentDeviceUid,
461461
remoteDeviceUidKey, remoteDeviceUid,
462462
remoteCryptoIdentityKey, remoteIdentity)
463-
guard let channel = try obvContext.fetch(request).first else {
464-
return
463+
let channels = try obvContext.fetch(request)
464+
for channel in channels {
465+
channel.obvContext = obvContext
466+
obvContext.delete(channel)
465467
}
466-
channel.obvContext = obvContext
467-
obvContext.delete(channel)
468468
}
469469

470470

@@ -480,14 +480,26 @@ extension ObvObliviousChannel {
480480
return Set(identities)
481481
}
482482

483-
483+
484484
static func getAllKnownRemoteDeviceUids(within obvContext: ObvContext) throws -> Set<ObliviousChannelIdentifier> {
485485
let request: NSFetchRequest<ObvObliviousChannel> = ObvObliviousChannel.fetchRequest()
486486
let items = try obvContext.fetch(request)
487487
_ = items.map { $0.obvContext = obvContext }
488488
let values = Set(items.map { ObliviousChannelIdentifier(currentDeviceUid: $0.currentDeviceUid, remoteCryptoIdentity: $0.remoteCryptoIdentity, remoteDeviceUid: $0.remoteDeviceUid) })
489489
return values
490-
490+
}
491+
492+
493+
static func deleteAllObliviousChannelsForCurrentDeviceUid(_ currentDeviceUid: UID, within obvContext: ObvContext) throws {
494+
let request: NSFetchRequest<ObvObliviousChannel> = ObvObliviousChannel.fetchRequest()
495+
request.fetchBatchSize = 500
496+
request.predicate = NSPredicate(format: "%K == %@", currentDeviceUidKey, currentDeviceUid)
497+
request.propertiesToFetch = []
498+
let channels = try obvContext.fetch(request)
499+
for channel in channels {
500+
channel.obvContext = obvContext
501+
obvContext.delete(channel)
502+
}
491503
}
492504

493505
}

Engine/ObvChannelManager/ObvChannelManager/ObvChannelManagerImplementation.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,18 +267,21 @@ extension ObvChannelManagerImplementation {
267267
// MARK: Oblivious Channels management
268268

269269
public func deleteObliviousChannelBetweenTheCurrentDeviceOf(ownedIdentity: ObvCryptoIdentity, andTheRemoteDeviceWithUid remoteDeviceUid: UID, ofRemoteIdentity remoteIdentity: ObvCryptoIdentity, within obvContext: ObvContext) throws {
270+
os_log("🚗 deleteObliviousChannelBetweenTheCurrentDeviceOf", log: log, type: .info)
270271
try gateKeeper.waitUntilSlotIsAvailableForObvContext(obvContext)
271272
try delegateManager.obliviousChannelLifeDelegate.deleteObliviousChannelBetweenTheCurrentDeviceOf(ownedIdentity: ownedIdentity, andTheRemoteDeviceWithUid: remoteDeviceUid, ofRemoteIdentity: remoteIdentity, within: obvContext)
272273
}
273274

274275

275276
public func deleteObliviousChannelBetweenCurentDeviceWithUid(currentDeviceUid: UID, andTheRemoteDeviceWithUid remoteDeviceUid: UID, ofRemoteIdentity remoteIdentity: ObvCryptoIdentity, within obvContext: ObvContext) throws {
277+
os_log("🚗 deleteObliviousChannelBetweenCurentDeviceWithUid", log: log, type: .info)
276278
try gateKeeper.waitUntilSlotIsAvailableForObvContext(obvContext)
277279
try delegateManager.obliviousChannelLifeDelegate.deleteObliviousChannelBetweenCurentDeviceWithUid(currentDeviceUid: currentDeviceUid, andTheRemoteDeviceWithUid: remoteDeviceUid, ofRemoteIdentity: remoteIdentity, within: obvContext)
278280
}
279281

280282

281283
public func deleteAllObliviousChannelsBetweenTheCurrentDeviceOf(ownedIdentity: ObvCryptoIdentity, andTheDevicesOfContactIdentity contactIdentity: ObvCryptoIdentity, within obvContext: ObvContext) throws {
284+
os_log("🚗 deleteAllObliviousChannelsBetweenTheCurrentDeviceOf", log: log, type: .info)
282285
try gateKeeper.waitUntilSlotIsAvailableForObvContext(obvContext)
283286
try delegateManager.obliviousChannelLifeDelegate.deleteAllObliviousChannelsBetweenTheCurrentDeviceOf(ownedIdentity: ownedIdentity, andTheDevicesOfContactIdentity: contactIdentity, within: obvContext)
284287
}
@@ -348,6 +351,12 @@ extension ObvChannelManagerImplementation {
348351
return try ObvObliviousChannel.getAllKnownRemoteDeviceUids(within: obvContext)
349352
}
350353

354+
355+
public func deleteAllObliviousChannelsWithTheCurrentDeviceUid(_ currentDeviceUid: UID, within obvContext: ObvContext) throws {
356+
try gateKeeper.waitUntilSlotIsAvailableForObvContext(obvContext)
357+
try ObvObliviousChannel.deleteAllObliviousChannelsForCurrentDeviceUid(currentDeviceUid, within: obvContext)
358+
}
359+
351360
}
352361

353362

Engine/ObvCrypto/ObvCrypto.xcodeproj/xcshareddata/xcschemes/ObvCrypto.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1400"
3+
LastUpgradeVersion = "1420"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

0 commit comments

Comments
 (0)