You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

503 lines
13 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getIosModFileProviders = getIosModFileProviders;
exports.withIosBaseMods = withIosBaseMods;
function _jsonFile() {
const data = _interopRequireDefault(require("@expo/json-file"));
_jsonFile = function () {
return data;
};
return data;
}
function _plist() {
const data = _interopRequireDefault(require("@expo/plist"));
_plist = function () {
return data;
};
return data;
}
function _assert() {
const data = _interopRequireDefault(require("assert"));
_assert = function () {
return data;
};
return data;
}
function _fs() {
const data = _interopRequireWildcard(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _xcode() {
const data = _interopRequireDefault(require("xcode"));
_xcode = function () {
return data;
};
return data;
}
function _ios() {
const data = require("../ios");
_ios = function () {
return data;
};
return data;
}
function _Entitlements() {
const data = require("../ios/Entitlements");
_Entitlements = function () {
return data;
};
return data;
}
function _Xcodeproj() {
const data = require("../ios/utils/Xcodeproj");
_Xcodeproj = function () {
return data;
};
return data;
}
function _getInfoPlistPath() {
const data = require("../ios/utils/getInfoPlistPath");
_getInfoPlistPath = function () {
return data;
};
return data;
}
function _modules() {
const data = require("../utils/modules");
_modules = function () {
return data;
};
return data;
}
function _sortObject() {
const data = require("../utils/sortObject");
_sortObject = function () {
return data;
};
return data;
}
function _warnings() {
const data = require("../utils/warnings");
_warnings = function () {
return data;
};
return data;
}
function _createBaseMod() {
const data = require("./createBaseMod");
_createBaseMod = function () {
return data;
};
return data;
}
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const {
readFile,
writeFile
} = _fs().promises;
function getEntitlementsPlistTemplate() {
// TODO: Fetch the versioned template file if possible
return {};
}
function getInfoPlistTemplate() {
// TODO: Fetch the versioned template file if possible
return {
CFBundleDevelopmentRegion: '$(DEVELOPMENT_LANGUAGE)',
CFBundleExecutable: '$(EXECUTABLE_NAME)',
CFBundleIdentifier: '$(PRODUCT_BUNDLE_IDENTIFIER)',
CFBundleName: '$(PRODUCT_NAME)',
CFBundlePackageType: '$(PRODUCT_BUNDLE_PACKAGE_TYPE)',
CFBundleInfoDictionaryVersion: '6.0',
CFBundleSignature: '????',
LSRequiresIPhoneOS: true,
NSAppTransportSecurity: {
NSAllowsArbitraryLoads: true,
NSExceptionDomains: {
localhost: {
NSExceptionAllowsInsecureHTTPLoads: true
}
}
},
UILaunchStoryboardName: 'SplashScreen',
UIRequiredDeviceCapabilities: ['armv7'],
UIViewControllerBasedStatusBarAppearance: false,
UIStatusBarStyle: 'UIStatusBarStyleDefault'
};
}
const defaultProviders = {
dangerous: (0, _createBaseMod().provider)({
getFilePath() {
return '';
},
async read() {
return {};
},
async write() {}
}),
// Append a rule to supply AppDelegate data to mods on `mods.ios.appDelegate`
appDelegate: (0, _createBaseMod().provider)({
getFilePath({
modRequest: {
projectRoot
}
}) {
return _ios().Paths.getAppDelegateFilePath(projectRoot);
},
async read(filePath) {
return _ios().Paths.getFileInfo(filePath);
},
async write(filePath, {
modResults: {
contents
}
}) {
await writeFile(filePath, contents);
}
}),
// Append a rule to supply Expo.plist data to mods on `mods.ios.expoPlist`
expoPlist: (0, _createBaseMod().provider)({
isIntrospective: true,
getFilePath({
modRequest: {
platformProjectRoot,
projectName
}
}) {
const supportingDirectory = _path().default.join(platformProjectRoot, projectName, 'Supporting');
return _path().default.resolve(supportingDirectory, 'Expo.plist');
},
async read(filePath, {
modRequest: {
introspect
}
}) {
try {
return _plist().default.parse(await readFile(filePath, 'utf8'));
} catch (error) {
if (introspect) {
return {};
}
throw error;
}
},
async write(filePath, {
modResults,
modRequest: {
introspect
}
}) {
if (introspect) {
return;
}
await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(modResults)));
}
}),
// Append a rule to supply .xcodeproj data to mods on `mods.ios.xcodeproj`
xcodeproj: (0, _createBaseMod().provider)({
getFilePath({
modRequest: {
projectRoot
}
}) {
return _ios().Paths.getPBXProjectPath(projectRoot);
},
async read(filePath) {
const project = _xcode().default.project(filePath);
project.parseSync();
return project;
},
async write(filePath, {
modResults
}) {
await writeFile(filePath, modResults.writeSync());
}
}),
// Append a rule to supply Info.plist data to mods on `mods.ios.infoPlist`
infoPlist: (0, _createBaseMod().provider)({
isIntrospective: true,
async getFilePath(config) {
let project = null;
try {
project = (0, _Xcodeproj().getPbxproj)(config.modRequest.projectRoot);
} catch {// noop
} // Only check / warn if a project actually exists, this'll provide
// more accurate warning messages for users in managed projects.
if (project) {
const infoPlistBuildProperty = (0, _getInfoPlistPath().getInfoPlistPathFromPbxproj)(project);
if (infoPlistBuildProperty) {
//: [root]/myapp/ios/MyApp/Info.plist
const infoPlistPath = _path().default.join( //: myapp/ios
config.modRequest.platformProjectRoot, //: MyApp/Info.plist
infoPlistBuildProperty);
if ((0, _modules().fileExists)(infoPlistPath)) {
return infoPlistPath;
}
(0, _warnings().addWarningIOS)('mods.ios.infoPlist', `Info.plist file linked to Xcode project does not exist: ${infoPlistPath}`);
} else {
(0, _warnings().addWarningIOS)('mods.ios.infoPlist', 'Failed to find Info.plist linked to Xcode project.');
}
}
try {
// Fallback on glob...
return await _ios().Paths.getInfoPlistPath(config.modRequest.projectRoot);
} catch (error) {
if (config.modRequest.introspect) {
// fallback to an empty string in introspection mode.
return '';
}
throw error;
}
},
async read(filePath, config) {
// Apply all of the Info.plist values to the expo.ios.infoPlist object
// TODO: Remove this in favor of just overwriting the Info.plist with the Expo object. This will enable people to actually remove values.
if (!config.ios) config.ios = {};
if (!config.ios.infoPlist) config.ios.infoPlist = {};
let modResults;
try {
const contents = await readFile(filePath, 'utf8');
(0, _assert().default)(contents, 'Info.plist is empty');
modResults = _plist().default.parse(contents);
} catch (error) {
// Throw errors in introspection mode.
if (!config.modRequest.introspect) {
throw error;
} // Fallback to using the infoPlist object from the Expo config.
modResults = getInfoPlistTemplate();
}
config.ios.infoPlist = { ...(modResults || {}),
...config.ios.infoPlist
};
return config.ios.infoPlist;
},
async write(filePath, config) {
// Update the contents of the static infoPlist object
if (!config.ios) {
config.ios = {};
}
config.ios.infoPlist = config.modResults; // Return early without writing, in introspection mode.
if (config.modRequest.introspect) {
return;
}
await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(config.modResults)));
}
}),
// Append a rule to supply .entitlements data to mods on `mods.ios.entitlements`
entitlements: (0, _createBaseMod().provider)({
isIntrospective: true,
async getFilePath(config) {
try {
var _Entitlements$getEnti;
(0, _Entitlements().ensureApplicationTargetEntitlementsFileConfigured)(config.modRequest.projectRoot);
return (_Entitlements$getEnti = _ios().Entitlements.getEntitlementsPath(config.modRequest.projectRoot)) !== null && _Entitlements$getEnti !== void 0 ? _Entitlements$getEnti : '';
} catch (error) {
if (config.modRequest.introspect) {
// fallback to an empty string in introspection mode.
return '';
}
throw error;
}
},
async read(filePath, config) {
let modResults;
try {
if (_fs().default.existsSync(filePath)) {
const contents = await readFile(filePath, 'utf8');
(0, _assert().default)(contents, 'Entitlements plist is empty');
modResults = _plist().default.parse(contents);
} else {
modResults = getEntitlementsPlistTemplate();
}
} catch (error) {
// Throw errors in introspection mode.
if (!config.modRequest.introspect) {
throw error;
} // Fallback to using the template file.
modResults = getEntitlementsPlistTemplate();
} // Apply all of the .entitlements values to the expo.ios.entitlements object
// TODO: Remove this in favor of just overwriting the .entitlements with the Expo object. This will enable people to actually remove values.
if (!config.ios) config.ios = {};
if (!config.ios.entitlements) config.ios.entitlements = {};
config.ios.entitlements = { ...(modResults || {}),
...config.ios.entitlements
};
return config.ios.entitlements;
},
async write(filePath, config) {
// Update the contents of the static entitlements object
if (!config.ios) {
config.ios = {};
}
config.ios.entitlements = config.modResults; // Return early without writing, in introspection mode.
if (config.modRequest.introspect) {
return;
}
await writeFile(filePath, _plist().default.build((0, _sortObject().sortObject)(config.modResults)));
}
}),
// Append a rule to supply Podfile.properties.json data to mods on `mods.ios.podfileProperties`
podfileProperties: (0, _createBaseMod().provider)({
isIntrospective: true,
getFilePath({
modRequest: {
platformProjectRoot
}
}) {
return _path().default.resolve(platformProjectRoot, 'Podfile.properties.json');
},
async read(filePath) {
let results = {};
try {
results = await _jsonFile().default.readAsync(filePath);
} catch {}
return results;
},
async write(filePath, {
modResults,
modRequest: {
introspect
}
}) {
if (introspect) {
return;
}
await _jsonFile().default.writeAsync(filePath, modResults);
}
})
};
function withIosBaseMods(config, {
providers,
...props
} = {}) {
return (0, _createBaseMod().withGeneratedBaseMods)(config, { ...props,
platform: 'ios',
providers: providers !== null && providers !== void 0 ? providers : getIosModFileProviders()
});
}
function getIosModFileProviders() {
return defaultProviders;
}
//# sourceMappingURL=withIosBaseMods.js.map