or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

android-config.mdandroid-plugins.mdcore-plugin-system.mdindex.mdios-config.mdios-plugins.mdmod-system.mdutilities.md
tile.json

ios-config.mddocs/

iOS Configuration API

Comprehensive configuration utilities for iOS platform development including Info.plist manipulation, entitlements management, Xcode project configuration, and native file handling. The IOSConfig namespace provides fine-grained control over iOS project files.

Info.plist Configuration

IOSConfig.Paths

Utilities for getting paths to iOS project files.

namespace IOSConfig.Paths {
  function getInfoPlistPath(projectRoot: string): string;
  function getEntitlementsPath(projectRoot: string): string | null;
}

Usage:

const plistPath = IOSConfig.Paths.getInfoPlistPath(projectRoot);
const entitlementsPath = IOSConfig.Paths.getEntitlementsPath(projectRoot);

console.log('Info.plist path:', plistPath);
console.log('Entitlements path:', entitlementsPath);

Entitlements Management

IOSConfig.Entitlements

Utilities for managing app entitlements and capabilities.

namespace IOSConfig.Entitlements {
  function setAssociatedDomains(
    entitlements: Plist,
    domains: string[]
  ): Plist;
}

Usage:

const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(projectRoot);
if (entitlementsPath) {
  const entitlements = await readPlistAsync(entitlementsPath);
  
  // Enable associated domains
  IOSConfig.Entitlements.setCustomEntitlement(
    entitlements,
    "com.apple.developer.associated-domains",
    ["applinks:example.com", "webcredentials:example.com"]
  );
  
  await writePlistAsync(entitlementsPath, entitlements);
}

Project Structure

IOSConfig.Paths

Utilities for locating and working with iOS project file paths.

namespace IOSConfig.Paths {
  function getInfoPlistPath(projectRoot: string): string;
  function getAppDelegateFilePath(projectRoot: string): string;
  function getPodfilePath(projectRoot: string): string;
  
  function getXcodeProjectPath(projectRoot: string): string;
  function findXcodeProject(projectRoot: string): { name: string; path: string };
  function getAllXcodeProjectPaths(projectRoot: string): string[];
  function getAllPBXProjectPaths(projectRoot: string): string[];
  
  interface AppDelegateProjectFile {
    path: string;
    contents: string;
    language: "objc" | "swift";
  }
}

Bundle Configuration

IOSConfig.BundleIdentifier

Utilities for managing bundle identifier configuration.

namespace IOSConfig.BundleIdentifier {
  function getBundleIdentifier(infoPlist: InfoPlist): string | null;
  function setBundleIdentifier(infoPlist: InfoPlist, bundleId: string): InfoPlist;
  function updateIdFromConfig(config: ExpoConfig, infoPlist: InfoPlist): InfoPlist;
}

IOSConfig.Name

Utilities for managing app name configuration.

namespace IOSConfig.Name {
  function setDisplayName(infoPlist: InfoPlist, displayName: string): InfoPlist;
  function getDisplayName(infoPlist: InfoPlist): string | null;
  
  function setBundleName(infoPlist: InfoPlist, bundleName: string): InfoPlist;
  function getBundleName(infoPlist: InfoPlist): string | null;
}

IOSConfig.Version

Utilities for managing app version configuration.

namespace IOSConfig.Version {
  function getVersion(infoPlist: InfoPlist): string | null;
  function setVersion(infoPlist: InfoPlist, version: string): InfoPlist;
  
  function getBuildNumber(infoPlist: InfoPlist): string | null;
  function setBuildNumber(infoPlist: InfoPlist, buildNumber: string): InfoPlist;
}

Device and UI Configuration

IOSConfig.DeviceFamily

Utilities for managing supported device families.

namespace IOSConfig.DeviceFamily {
  function getSupportsTablet(infoPlist: InfoPlist): boolean;
  function setSupportsTablet(infoPlist: InfoPlist, supportsTablet: boolean): InfoPlist;
  function getDeviceFamily(infoPlist: InfoPlist): number[];
}

IOSConfig.Orientation

Utilities for managing supported interface orientations.

namespace IOSConfig.Orientation {
  function getOrientation(infoPlist: InfoPlist): {
    UIInterfaceOrientationPortrait?: boolean;
    UIInterfaceOrientationPortraitUpsideDown?: boolean;
    UIInterfaceOrientationLandscapeLeft?: boolean;
    UIInterfaceOrientationLandscapeRight?: boolean;
  };
  
  function setOrientation(
    infoPlist: InfoPlist,
    orientations: {
      portrait?: boolean;
      portraitUpsideDown?: boolean;
      landscapeLeft?: boolean;
      landscapeRight?: boolean;
    }
  ): InfoPlist;
}

IOSConfig.RequiresFullScreen

Utilities for managing full screen requirements.

namespace IOSConfig.RequiresFullScreen {
  function setRequiresFullScreen(infoPlist: InfoPlist, requiresFullScreen: boolean): InfoPlist;
  function getRequiresFullScreen(infoPlist: InfoPlist): boolean;
}

URL Schemes and Deep Linking

IOSConfig.Scheme

Utilities for managing URL schemes and deep linking.

namespace IOSConfig.Scheme {
  function getSchemesFromPlist(infoPlist: InfoPlist): string[];
  function setSchemesInPlist(infoPlist: InfoPlist, schemes: string[]): InfoPlist;
  
  function appendScheme(infoPlist: InfoPlist, scheme: string): InfoPlist;
  function removeScheme(infoPlist: InfoPlist, scheme: string): InfoPlist;
  
  function withScheme(config: ExpoConfig): ExpoConfig;
}

Usage:

// Add custom URL scheme
IOSConfig.Scheme.appendScheme(infoPlist, "myapp");

// Add multiple schemes
IOSConfig.Scheme.setSchemesInPlist(infoPlist, ["myapp", "mycustomscheme"]);

Xcode Configuration

IOSConfig.Target

Utilities for working with Xcode targets and build configurations.

namespace IOSConfig.Target {
  function findFirstNativeTarget(project: XcodeProject): any;
  function getNativeTargets(project: XcodeProject): any[];
  
  function getXCBuildConfigurationFromPbxproj(
    project: XcodeProject,
    configName: string
  ): any;
  
  function getProductName(project: XcodeProject): string;
}

IOSConfig.XcodeProjectFile

Utilities for manipulating Xcode project structure.

namespace IOSConfig.XcodeProjectFile {
  function resolvePathOrProject(projectRootOrProject: string | XcodeProject): {
    project: XcodeProject;
    projectRoot: string;
  };
  
  function ensureGroupRecursively(
    project: XcodeProject,
    groupPath: string
  ): any;
  
  function addFileToGroup(
    project: XcodeProject,
    filePath: string,
    groupPath: string
  ): XcodeProject;
}

IOSConfig.XcodeUtils

Advanced Xcode project manipulation utilities.

namespace IOSConfig.XcodeUtils {
  function getPbxproj(projectRoot: string): XcodeProject;
  function writePbxproj(projectRoot: string, project: XcodeProject): void;
  
  function getXCConfigurationListEntries(project: XcodeProject): any[];
  function getBuildConfigurationForId(project: XcodeProject, configId: string): any;
}

Build Configuration

IOSConfig.BuildProperties

Utilities for managing iOS build properties and settings.

namespace IOSConfig.BuildProperties {
  function withBuildProperties(config: ExpoConfig): ExpoConfig;
}

IOSConfig.BuildScheme

Utilities for managing Xcode build schemes.

namespace IOSConfig.BuildScheme {
  function getSchemePaths(projectRoot: string): string[];
  function setSchemeConfiguration(
    schemePath: string,
    configuration: string
  ): void;
  
  function createBuildSchemeAsync(
    projectRoot: string,
    options: {
      name: string;
      buildConfiguration: string;
    }
  ): Promise<void>;
}

IOSConfig.DevelopmentTeam

Utilities for managing development team configuration.

namespace IOSConfig.DevelopmentTeam {
  function setDevelopmentTeam(project: XcodeProject, teamId: string): XcodeProject;
  function getDevelopmentTeam(project: XcodeProject): string | null;
}

IOSConfig.ProvisioningProfile

Utilities for managing provisioning profiles.

namespace IOSConfig.ProvisioningProfile {
  function setProvisioningProfile(
    project: XcodeProject,
    profileName: string
  ): XcodeProject;
  
  function getProvisioningProfile(project: XcodeProject): string | null;
}

Privacy and Security

IOSConfig.PrivacyInfo

Utilities for managing app privacy information.

namespace IOSConfig.PrivacyInfo {
  function setPrivacyInfo(
    infoPlist: InfoPlist,
    privacyInfo: {
      NSLocationWhenInUseUsageDescription?: string;
      NSLocationAlwaysAndWhenInUseUsageDescription?: string;
      NSCameraUsageDescription?: string;
      NSMicrophoneUsageDescription?: string;
      NSPhotoLibraryUsageDescription?: string;
      NSContactsUsageDescription?: string;
    }
  ): InfoPlist;
  
  function withPrivacyInfo(config: ExpoConfig): ExpoConfig;
}

IOSConfig.UsesNonExemptEncryption

Utilities for managing encryption exemption flag.

namespace IOSConfig.UsesNonExemptEncryption {
  function setUsesNonExemptEncryption(
    infoPlist: InfoPlist,
    usesEncryption: boolean
  ): InfoPlist;
  
  function getUsesNonExemptEncryption(infoPlist: InfoPlist): boolean;
}

SDK Integration

IOSConfig.Google

Utilities for Google SDK integration.

namespace IOSConfig.Google {
  function setGoogleMapsApiKey(infoPlist: InfoPlist, apiKey: string): InfoPlist;
  function setGoogleSignIn(infoPlist: InfoPlist, config: {
    clientId: string;
    reversedClientId: string;
  }): InfoPlist;
}

IOSConfig.Maps

Utilities for Maps framework integration.

namespace IOSConfig.Maps {
  function setMapsApiKey(infoPlist: InfoPlist, apiKey: string): InfoPlist;
}

Advanced Features

IOSConfig.Bitcode

Utilities for managing bitcode settings.

namespace IOSConfig.Bitcode {
  function setBitcodeEnabled(project: XcodeProject, enabled: boolean): XcodeProject;
  function isBitcodeEnabled(project: XcodeProject): boolean;
}

IOSConfig.Updates

Utilities for Expo Updates configuration.

namespace IOSConfig.Updates {
  function withUpdates(config: ExpoConfig): ExpoConfig;
  function setUpdatesConfig(
    expoPlist: Plist,
    updatesConfig: {
      updateUrl?: string;
      releaseChannel?: string;
      runtimeVersion?: string;
    }
  ): Plist;
}

Usage Examples

Complete iOS App Configuration

import { IOSConfig } from "@expo/config-plugins";

async function configureiOSApp(projectRoot: string, config: {
  appName: string;
  bundleId: string;
  version: string;
  buildNumber: string;
  urlSchemes: string[];
  privacyDescriptions: {
    camera?: string;
    location?: string;
    microphone?: string;
  };
}) {
  // Get Info.plist path and read it
  const plistPath = IOSConfig.InfoPlist.getInfoPlistPath(projectRoot);
  const infoPlist = await IOSConfig.InfoPlist.readInfoPlistAsync(plistPath);
  
  // Set basic app info
  IOSConfig.Name.setDisplayName(infoPlist, config.appName);
  IOSConfig.BundleIdentifier.setBundleIdentifier(infoPlist, config.bundleId);
  IOSConfig.Version.setVersion(infoPlist, config.version);
  IOSConfig.Version.setBuildNumber(infoPlist, config.buildNumber);
  
  // Set URL schemes
  IOSConfig.Scheme.setSchemesInPlist(infoPlist, config.urlSchemes);
  
  // Set privacy descriptions
  if (config.privacyDescriptions.camera) {
    infoPlist.NSCameraUsageDescription = config.privacyDescriptions.camera;
  }
  if (config.privacyDescriptions.location) {
    infoPlist.NSLocationWhenInUseUsageDescription = config.privacyDescriptions.location;
  }
  if (config.privacyDescriptions.microphone) {
    infoPlist.NSMicrophoneUsageDescription = config.privacyDescriptions.microphone;
  }
  
  // Write Info.plist back
  await IOSConfig.InfoPlist.writeInfoPlistAsync(plistPath, infoPlist);
  
  // Configure Xcode project
  const project = IOSConfig.XcodeUtils.getPbxproj(projectRoot);
  
  // Set development team (if available)
  IOSConfig.DevelopmentTeam.setDevelopmentTeam(project, "YOUR_TEAM_ID");
  
  // Write project back
  IOSConfig.XcodeUtils.writePbxproj(projectRoot, project);
}

Advanced Xcode Configuration

async function advancedXcodeSetup(projectRoot: string) {
  const project = IOSConfig.XcodeUtils.getPbxproj(projectRoot);
  
  // Find native target
  const target = IOSConfig.Target.findFirstNativeTarget(project);
  
  // Get build configurations
  const configurations = IOSConfig.XcodeUtils.getXCConfigurationListEntries(project);
  
  configurations.forEach(config => {
    if (config.buildSettings) {
      // Set deployment target
      config.buildSettings.IPHONEOS_DEPLOYMENT_TARGET = "12.0";
      
      // Enable bitcode
      config.buildSettings.ENABLE_BITCODE = "YES";
      
      // Add custom build flags
      config.buildSettings.OTHER_CFLAGS = [
        "$(inherited)",
        "-DCUSTOM_FLAG=1"
      ];
    }
  });
  
  // Add framework
  IOSConfig.XcodeProjectFile.addFileToGroup(
    project,
    "Frameworks/CustomFramework.framework",
    "Frameworks"
  );
  
  IOSConfig.XcodeUtils.writePbxproj(projectRoot, project);
}