1import { ConfigPlugin, createRunOncePlugin } from 'expo/config-plugins';
2
3const pkg = require('expo-tracking-transparency/package.json');
4
5export const DEFAULT_NSUserTrackingUsageDescription =
6  'Allow this app to collect app-related data that can be used for tracking you or your device.';
7
8const withTrackingTransparency: ConfigPlugin<
9  {
10    /**
11     * Sets the iOS `NSUserTrackingUsageDescription` permission message in `Info.plist`. Omitting a
12     * description will result in using the default permission message.
13     * @default 'Allow this app to collect app-related data that can be used for tracking you or your
14     * device.'
15     */
16    userTrackingPermission?: string;
17  } | void
18> = (config, props) => {
19  config = withUserTrackingPermission(config, props);
20  return config;
21};
22
23export const withUserTrackingPermission: ConfigPlugin<
24  {
25    userTrackingPermission?: string;
26  } | void
27> = (config, { userTrackingPermission } = {}) => {
28  if (!config.ios) config.ios = {};
29  if (!config.ios.infoPlist) config.ios.infoPlist = {};
30  config.ios.infoPlist.NSUserTrackingUsageDescription =
31    userTrackingPermission ||
32    config.ios.infoPlist.NSUserTrackingUsageDescription ||
33    DEFAULT_NSUserTrackingUsageDescription;
34
35  return config;
36};
37
38export default createRunOncePlugin(withTrackingTransparency, pkg.name, pkg.version);
39