UNPKG

@react-native-tvos/config-tv

Version:

Config plugin to reconfigure native directories for Apple TV and Android TV development if needed

59 lines (58 loc) 2.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.withTVSplashScreen = void 0; exports.addTVSplashScreenModifications = addTVSplashScreenModifications; const config_plugins_1 = require("expo/config-plugins"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const utils_1 = require("./utils"); /** Dangerously makes changes needed for TV in SplashScreen.storyboard. */ const withTVSplashScreen = (config, params = {}) => { return (0, config_plugins_1.withDangerousMod)(config, [ "ios", // eslint-disable-next-line @typescript-eslint/explicit-function-return-type async (config) => { if (!config.modRequest.projectName) { throw new Error(`The ${utils_1.packageNameAndVersion} plugin requires a configured project name.`); } const file = path_1.default.join(config.modRequest.platformProjectRoot, config.modRequest.projectName, "SplashScreen.storyboard"); const contents = await fs_1.promises.readFile(file, "utf8"); const modifiedContents = addTVSplashScreenModifications(contents); (0, utils_1.verboseLog)("modifying SplashScreen.storyboard for tvOS", { params, platform: "ios", property: "splashscreen", }); await fs_1.promises.writeFile(file, modifiedContents, "utf-8"); return config; }, ]); }; exports.withTVSplashScreen = withTVSplashScreen; const splashScreenStringsForPhone = [ "com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB", 'targetRuntime="iOS.CocoaTouch"', 'id="retina5_5"', '<deployment identifier="iOS"/>', ]; const splashScreenStringsForTV = [ "com.apple.InterfaceBuilder.AppleTV.Storyboard", 'targetRuntime="AppleTV"', 'id="appleTV"', '<deployment identifier="tvOS"/>', ]; function modifySource(src, originalStrings, replacementStrings) { let modifiedSource = src; originalStrings.forEach((s, i) => { const original = new RegExp(`${s}`, "g"); const replacement = replacementStrings[i]; modifiedSource = modifiedSource.replace(original, replacement); }); return modifiedSource; } function addTVSplashScreenModifications(src) { return modifySource(src, splashScreenStringsForPhone, splashScreenStringsForTV); }