#include "entitlements.h"
static void transferEntitlement(CFMutableDictionaryRef entitlements, CFStringRef originalEntitlement, CFStringRef targetEntitlement)
{
CFTypeRef value = (CFStringRef)CFDictionaryGetValue(entitlements, originalEntitlement);
CFDictionaryAddValue(entitlements, targetEntitlement, value);
}
static bool entitlementNeedsFixup(CFDictionaryRef entitlements, CFStringRef originalEntitlement, CFStringRef targetEntitlement)
{
#if TARGET_OS_OSX && TARGET_CPU_ARM64
CFTypeRef originalValue = (CFStringRef)CFDictionaryGetValue(entitlements, originalEntitlement);
CFTypeRef newValue = (CFStringRef)CFDictionaryGetValue(entitlements, targetEntitlement);
if (originalValue != NULL && newValue == NULL) {
return true;
}
#endif
return false;
}
bool needsCatalystEntitlementFixup(CFDictionaryRef entitlements)
{
return entitlementNeedsFixup(entitlements, CFSTR("application-identifier"), CFSTR("com.apple.application-identifier")) ||
entitlementNeedsFixup(entitlements, CFSTR("aps-environment"), CFSTR("com.apple.developer.aps-environment"));
}
bool updateCatalystEntitlements(CFMutableDictionaryRef entitlements)
{
bool updated = false;
if (entitlementNeedsFixup(entitlements, CFSTR("application-identifier"), CFSTR("com.apple.application-identifier"))) {
transferEntitlement(entitlements, CFSTR("application-identifier"), CFSTR("com.apple.application-identifier"));
updated = true;
}
if (entitlementNeedsFixup(entitlements, CFSTR("aps-environment"), CFSTR("com.apple.developer.aps-environment"))) {
transferEntitlement(entitlements, CFSTR("aps-environment"), CFSTR("com.apple.developer.aps-environment"));
updated = true;
}
return updated;
}