diff --git a/src/expo-plugin/types/index.ts b/src/expo-plugin/types/index.ts index 8759fa1..116aed8 100644 --- a/src/expo-plugin/types/index.ts +++ b/src/expo-plugin/types/index.ts @@ -3,4 +3,8 @@ export interface RNCloudStorageConfigPluginOptions { * The iCloud container environment to use. Defaults to 'Production'. */ iCloudContainerEnvironment?: 'Production' | 'Development'; + /** + * The iCloud container identifier to use. Defaults to `iCloud.{appBundleIdentifier}` + */ + iCloudContainerIdentifier?: string; } diff --git a/src/expo-plugin/withRNCloudStorageIos.ts b/src/expo-plugin/withRNCloudStorageIos.ts index 80b26f9..42670d7 100644 --- a/src/expo-plugin/withRNCloudStorageIos.ts +++ b/src/expo-plugin/withRNCloudStorageIos.ts @@ -1,14 +1,19 @@ import { withEntitlementsPlist, withInfoPlist, withPlugins, type ConfigPlugin } from '@expo/config-plugins'; +import { type ExpoConfig } from '@expo/config-types'; import type { RNCloudStorageConfigPluginOptions } from './types'; -const withRNCloudStorageInfoPlist: ConfigPlugin = (config) => +const getICloudContainerIdentifier = (config: ExpoConfig, options: RNCloudStorageConfigPluginOptions) => { + if (options.iCloudContainerIdentifier) return options.iCloudContainerIdentifier; + + if (!config?.ios?.bundleIdentifier) throw new Error('Missing iOS bundle identifier'); + return `iCloud.${config.ios.bundleIdentifier}`; +}; + +const withRNCloudStorageInfoPlist: ConfigPlugin = (config, options) => withInfoPlist(config, async (newConfig) => { - if (!config.ios?.bundleIdentifier) { - throw new Error('Missing iOS bundle identifier'); - } const infoPlist = newConfig.modResults; infoPlist.NSUbiquitousContainers = { - [`iCloud.${config.ios.bundleIdentifier}`]: { + [getICloudContainerIdentifier(config, options)]: { NSUbiquitousContainerIsDocumentScopePublic: true, NSUbiquitousContainerSupportedFolderLevels: 'Any', NSUbiquitousContainerName: config.slug, @@ -24,19 +29,23 @@ const withRNCloudStorageEntitlementsPlist: ConfigPlugin = (config, options) => - withPlugins(config, [withRNCloudStorageInfoPlist, [withRNCloudStorageEntitlementsPlist, options]]); + withPlugins(config, [ + [withRNCloudStorageInfoPlist, options], + [withRNCloudStorageEntitlementsPlist, options], + ]); export default withRNCloudStorageIos;