Carefully drop the StoreKit and Kvitto dependencies for ProductManager
to be testable.
Rebuild test target completely to start writing meaningful tests in
general.
Going forward, persist profiles encrypted to the CloudKit container.
Conversely, read from the encrypted field if any, falling back to the
plain JSON field.
WARNING: the change is NOT backward compatible, as it would defeat the
purpose. That is, once the profile is stored encrypted, the old plain
profile is erased and its content won't be readable by older versions of
the app.
Relying on Core Data for context retention is fragile, better to keep a
reference of the *Persistence objects ourselves.
Also, remove any CloudKit reference from CoreContext.
The Mac `#if` block must come first because in Catalyst builds, `#if
os(iOS)` holds true, and this is not the condition we want to validate
on Catalyst.
Xcode has been quite obnoxious recently with this issue. Start the app
with the most restrictive type (.undefined), relax restrictions after
looking up sandbox and app receipt.
As the only link to "Diagnostics" appears in the profile screen, when
there are no profiles the screen is unreachable. Replicate the same
entry in Settings.
There may be a mismatch between profiles and profile headers. For
example, some profiles may appear in the main list, but the same ones
may not appear in the existing profile names when adding a new profile
(and vice versa). That's because they are being fetched from different
sources. Unify that.
In #333, the non-optional field `disconnectsIfNotMatching` was removed
completely. Therefore, downgrading from 2.2.0 may lose profiles due to
the missing required field.
Mitigate the issue by restoring the field as optional, even if it's
unused, for the sake of not breaking profile serialization until the
2.2.0 release. Remove the deprecated field after that.
Extend the feature by also providing a complementary "include" policy,
i.e. activate the VPN _only_ on the specified networks. "Trusted
networks" was only providing the "exclude" counterpart, i.e. _except_
the specified networks.
Closes#119