@react-native-firebase/app
Version:
A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Sto
56 lines (49 loc) • 1.73 kB
text/typescript
import { ConfigPlugin, IOSConfig, withXcodeProject, XcodeProject } from '@expo/config-plugins';
import fs from 'fs';
import path from 'path';
export const withIosGoogleServicesFile: ConfigPlugin = config => {
return withXcodeProject(config, config => {
if (!config.ios?.googleServicesFile) {
throw new Error(
'Path to GoogleService-Info.plist is not defined. Please specify the `expo.ios.googleServicesFile` field in app.json.',
);
}
config.modResults = setGoogleServicesFile({
projectRoot: config.modRequest.projectRoot,
project: config.modResults,
googleServicesFileRelativePath: config.ios.googleServicesFile,
});
return config;
});
};
export function setGoogleServicesFile({
projectRoot,
project,
googleServicesFileRelativePath,
}: {
project: XcodeProject;
projectRoot: string;
googleServicesFileRelativePath: string;
}): XcodeProject {
const googleServiceFilePath = path.resolve(projectRoot, googleServicesFileRelativePath);
if (!fs.existsSync(googleServiceFilePath)) {
throw new Error(
`GoogleService-Info.plist doesn't exist in ${googleServiceFilePath}. Place it there or configure the path in app.json`,
);
}
fs.copyFileSync(
googleServiceFilePath,
path.join(IOSConfig.Paths.getSourceRoot(projectRoot), 'GoogleService-Info.plist'),
);
const projectName = IOSConfig.XcodeUtils.getProjectName(projectRoot);
const plistFilePath = `${projectName}/GoogleService-Info.plist`;
if (!project.hasFile(plistFilePath)) {
project = IOSConfig.XcodeUtils.addResourceFileToGroup({
filepath: plistFilePath,
groupName: projectName,
project,
isBuildFile: true,
});
}
return project;
}