• Split into `entitlements` and `privacy` sections
• `entitlements` is an array of entitlement keys
• `privacy` is a dictionary mapping UsageDescription keys to their descriptions
Before, appPermissions was one array containing all permissions of different types.
Now, we split entitlement and privacy permissions into separate “entitlements” and “privacy” child arrays.
AltStore will now consider an update available if either:
* The source’s marketing version doesn’t match installed app’s version
* The source declares a build version AND it doesn’t match the install app’s build version
The installed app matches an app version if both maketing versions match, and the build versions match (if provided by the source).
We now store the latest supported version as a relationship on StoreApp, rather than the latest available version. This allows us to reference the latest supported version in predicates and sort descriptors.
However, we kept the underlying Core Data property name the same to avoid extra migration.