diff --git a/PassepartoutLibrary/Sources/PassepartoutVPN/Domain/Profile+OnDemand.swift b/PassepartoutLibrary/Sources/PassepartoutVPN/Domain/Profile+OnDemand.swift index 38c45e8d..32cfcb7f 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPN/Domain/Profile+OnDemand.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPN/Domain/Profile+OnDemand.swift @@ -49,6 +49,9 @@ extension Profile { public var withOtherNetworks: Set = [] + @available(*, deprecated, message: "Drop field after releasing as optional to the App Store") + public var disconnectsIfNotMatching: Bool? = true + public init() { } } diff --git a/PassepartoutLibrary/Sources/PassepartoutVPNImpl/Strategies/CDProfileRepository.swift b/PassepartoutLibrary/Sources/PassepartoutVPNImpl/Strategies/CDProfileRepository.swift index ce457aec..6557bd56 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPNImpl/Strategies/CDProfileRepository.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPNImpl/Strategies/CDProfileRepository.swift @@ -98,7 +98,12 @@ final class CDProfileRepository: ProfileRepository { existing.forEach(context.delete) try profiles.forEach { - _ = try ProfileMapper(context).toDTO($0) + + // FIXME: on-demand, workaround to retain profiles on downgrade (field is required before 2.2.0) + var copy = $0 + copy.onDemand.disconnectsIfNotMatching = true + + _ = try ProfileMapper(context).toDTO(copy) } try context.save() } catch {