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
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
|