/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2022 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 7 End-User License Agreement and JUCE Privacy Policy. End User License Agreement: www.juce.com/juce-7-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce:: build_tools { String EntitlementOptions::getEntitlementsFileContent() const { String content = "\n" "\n" "\n" "\n"; const auto entitlements = getEntitlements(); for (auto& key : entitlements.getAllKeys()) content += "\t" + key + "\n\t" + entitlements[key] + "\n"; return content + "\n\n"; } StringPairArray EntitlementOptions::getEntitlements() const { StringPairArray entitlements; if (isiOS) { // The Inter-App Audio entitlement is currently deprecated, but it // also "provides access to Audio Unit extensions". Without the // entitlement iOS apps are unable to access AUv3 plug-ins. if ((isAudioPluginProject && shouldEnableIAA) || isAUPluginHost) entitlements.set ("inter-app-audio", ""); if (isiCloudPermissionsEnabled) { entitlements.set ("com.apple.developer.icloud-container-identifiers", "\n" " iCloud.$(CFBundleIdentifier)\n" " "); entitlements.set ("com.apple.developer.icloud-services", "\n" " CloudDocuments\n" " "); entitlements.set ("com.apple.developer.ubiquity-container-identifiers", "\n" " iCloud.$(CFBundleIdentifier)\n" " "); } } if (isPushNotificationsEnabled) entitlements.set (isiOS ? "aps-environment" : "com.apple.developer.aps-environment", "development"); if (isAppGroupsEnabled) { auto appGroups = StringArray::fromTokens (appGroupIdString, ";", {}); String groups = ""; for (auto group : appGroups) groups += "\n\t\t" + group.trim() + ""; groups += "\n\t"; entitlements.set ("com.apple.security.application-groups", groups); } if (isHardenedRuntimeEnabled) for (auto& option : hardenedRuntimeOptions) entitlements.set (option, ""); if (isAppSandboxEnabled || (! isiOS && isAudioPluginProject && type == ProjectType::Target::AudioUnitv3PlugIn)) { entitlements.set ("com.apple.security.app-sandbox", ""); if (isAppSandboxInhertianceEnabled) { // no other sandbox options can be specified if sandbox inheritance is enabled! jassert (appSandboxOptions.isEmpty()); jassert (appSandboxTemporaryPaths.empty()); entitlements.set ("com.apple.security.inherit", ""); } if (isAppSandboxEnabled) { for (auto& option : appSandboxOptions) entitlements.set (option, ""); for (auto& option : appSandboxTemporaryPaths) { String paths = ""; for (const auto& path : option.values) paths += "\n\t\t" + path + ""; paths += "\n\t"; entitlements.set (option.key, paths); } } } if (isNetworkingMulticastEnabled) entitlements.set ("com.apple.developer.networking.multicast", ""); return entitlements; } } // namespace juce::build_tools