UNPKG

react-native-test-app

Version:

react-native-test-app provides a test app for all supported platforms as a package

71 lines (61 loc) 1.81 kB
// @ts-check import * as nodefs from "node:fs"; import * as path from "node:path"; import { isObject, plistFromJSON } from "./utils.mjs"; /** @import { ApplePlatform, JSONObject } from "../scripts/types.js"; */ const DEFAULT_IOS_ENTITLEMENTS = { "keychain-access-groups": ["$(AppIdentifierPrefix)com.microsoft.adalcache"], }; const DEFAULT_MACOS_ENTITLEMENTS = { "com.apple.security.app-sandbox": true, "com.apple.security.files.user-selected.read-only": true, "com.apple.security.network.client": true, }; /** * @param {JSONObject} appConfig * @param {ApplePlatform} targetPlatform * @returns {string | JSONObject | undefined} */ function getCodeSignEntitlements(appConfig, targetPlatform) { const platformConfig = appConfig[targetPlatform]; if (!isObject(platformConfig)) { return; } const codeSignEntitlements = platformConfig["codeSignEntitlements"]; if ( typeof codeSignEntitlements !== "string" && !isObject(codeSignEntitlements) ) { return; } return codeSignEntitlements; } /** * @param {JSONObject} appConfig * @param {ApplePlatform} targetPlatform * @param {string} destination * @returns {void} */ export function generateEntitlements( appConfig, targetPlatform, destination, fs = nodefs ) { // If `codeSignEntitlements` is a string, set `CODE_SIGN_ENTITLEMENTS` instead const userEntitlements = getCodeSignEntitlements(appConfig, targetPlatform); if (typeof userEntitlements === "string") { return; } const filename = "App.entitlements"; const entitlements = plistFromJSON( { ...(targetPlatform === "macos" ? DEFAULT_MACOS_ENTITLEMENTS : DEFAULT_IOS_ENTITLEMENTS), ...userEntitlements, }, filename ); fs.writeFileSync(path.join(destination, filename), entitlements); }