UNPKG

@bacons/apple-targets

Version:
759 lines (758 loc) 31.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAuxiliaryTargets = exports.getMainAppTarget = exports.isNativeTargetOfType = exports.getTargetInfoPlistForType = exports.getFrameworksForType = exports.needsEmbeddedSwift = exports.productTypeForType = exports.SHOULD_USE_APP_GROUPS_BY_DEFAULT = exports.KNOWN_EXTENSION_POINT_IDENTIFIERS = exports.TARGET_GENERATED_DIR = exports.TARGET_REGISTRY = void 0; exports.TARGET_REGISTRY = { widget: { extensionPointIdentifier: "com.apple.widgetkit-extension", frameworks: ["WidgetKit", "SwiftUI", "ActivityKit", "AppIntents"], appGroupsByDefault: true, displayName: "Widget", description: "Home screen widget", }, "notification-content": { extensionPointIdentifier: "com.apple.usernotifications.content-extension", frameworks: ["UserNotifications", "UserNotificationsUI"], displayName: "Notification Content", }, "notification-service": { extensionPointIdentifier: "com.apple.usernotifications.service", displayName: "Notification Service", }, share: { extensionPointIdentifier: "com.apple.share-services", needsEmbeddedSwift: true, appGroupsByDefault: true, displayName: "Share Extension", }, intent: { extensionPointIdentifier: "com.apple.intents-service", needsEmbeddedSwift: true, frameworks: ["Intents"], displayName: "Siri Intent", }, "bg-download": { extensionPointIdentifier: "com.apple.background-asset-downloader-extension", needsEmbeddedSwift: true, appGroupsByDefault: true, displayName: "Background Download", }, "intent-ui": { extensionPointIdentifier: "com.apple.intents-ui-service", needsEmbeddedSwift: true, frameworks: ["IntentsUI"], displayName: "Siri Intent UI", }, spotlight: { extensionPointIdentifier: "com.apple.spotlight.import", needsEmbeddedSwift: true, displayName: "Spotlight", }, matter: { extensionPointIdentifier: "com.apple.matter.support.extension.device-setup", needsEmbeddedSwift: true, displayName: "Matter", }, "quicklook-thumbnail": { extensionPointIdentifier: "com.apple.quicklook.thumbnail", needsEmbeddedSwift: true, frameworks: ["QuickLookThumbnailing"], displayName: "Quicklook Thumbnail", }, imessage: { extensionPointIdentifier: "com.apple.message-payload-provider", hasNoTemplate: true, displayName: "iMessage", }, clip: { productType: "com.apple.product-type.application.on-demand-install-capable", needsEmbeddedSwift: true, appGroupsByDefault: true, displayName: "App Clip", description: "Instantly open your app without installing", }, watch: { productType: "com.apple.product-type.application", needsEmbeddedSwift: true, displayName: "Watch", }, "watch-widget": { // extensionPointIdentifier intentionally omitted to avoid collision // with "widget" in KNOWN_EXTENSION_POINT_IDENTIFIERS. The Info.plist // is handled explicitly in getTargetInfoPlistForType(). frameworks: ["WidgetKit", "SwiftUI"], appGroupsByDefault: true, displayName: "Watch Widget", description: "Watch face complication using WidgetKit", }, "location-push": { extensionPointIdentifier: "com.apple.location.push.service", displayName: "Location Push", }, "credentials-provider": { extensionPointIdentifier: "com.apple.authentication-services-credential-provider-ui", displayName: "Credentials Provider", }, "account-auth": { extensionPointIdentifier: "com.apple.authentication-services-account-authentication-modification-ui", displayName: "Account Auth", }, action: { extensionPointIdentifier: "com.apple.services", displayName: "Action", description: "Headless action that appears in share sheets", }, safari: { extensionPointIdentifier: "com.apple.Safari.web-extension", displayName: "Safari Extension", }, "app-intent": { extensionPointIdentifier: "com.apple.appintents-extension", productType: "com.apple.product-type.extensionkit-extension", frameworks: ["AppIntents"], displayName: "App Intent", }, "device-activity-monitor": { extensionPointIdentifier: "com.apple.deviceactivity.monitor-extension", frameworks: ["DeviceActivity"], displayName: "Device Activity Monitor", }, "network-packet-tunnel": { extensionPointIdentifier: "com.apple.networkextension.packet-tunnel", needsEmbeddedSwift: true, frameworks: ["NetworkExtension"], displayName: "Network Extension: Packet Tunnel Provider", }, "network-app-proxy": { extensionPointIdentifier: "com.apple.networkextension.app-proxy", needsEmbeddedSwift: true, frameworks: ["NetworkExtension"], displayName: "Network Extension: App Proxy", }, "network-filter-data": { extensionPointIdentifier: "com.apple.networkextension.filter-data", needsEmbeddedSwift: true, frameworks: ["NetworkExtension"], displayName: "Network Extension: Filter Data", }, "network-dns-proxy": { extensionPointIdentifier: "com.apple.networkextension.dns-proxy", needsEmbeddedSwift: true, frameworks: ["NetworkExtension"], displayName: "Network Extension: DNS Proxy", }, keyboard: { extensionPointIdentifier: "com.apple.keyboard-service", needsEmbeddedSwift: true, appGroupsByDefault: true, displayName: "Keyboard Extension", description: "Custom system keyboard", }, "content-blocker": { extensionPointIdentifier: "com.apple.Safari.content-blocker", displayName: "Content Blocker", description: "Safari content blocker extension", }, "file-provider": { extensionPointIdentifier: "com.apple.fileprovider-nonui", frameworks: ["UniformTypeIdentifiers"], appGroupsByDefault: true, displayName: "File Provider", }, "broadcast-upload": { extensionPointIdentifier: "com.apple.broadcast-services-upload", frameworks: ["ReplayKit"], displayName: "Broadcast Upload", }, "call-directory": { extensionPointIdentifier: "com.apple.callkit.call-directory", frameworks: ["CallKit"], displayName: "Call Directory", }, "message-filter": { extensionPointIdentifier: "com.apple.identitylookup.message-filter", frameworks: ["IdentityLookup"], displayName: "Message Filter", }, "file-provider-ui": { extensionPointIdentifier: "com.apple.fileprovider-actionsui", frameworks: ["FileProviderUI"], displayName: "File Provider UI", }, "broadcast-setup-ui": { extensionPointIdentifier: "com.apple.broadcast-services-setupui", frameworks: ["ReplayKit"], displayName: "Broadcast Setup UI", }, "classkit-context": { extensionPointIdentifier: "com.apple.classkit.context-provider", frameworks: ["ClassKit"], displayName: "ClassKit Context Provider", }, "unwanted-communication": { extensionPointIdentifier: "com.apple.identitylookup.classification-ui", frameworks: ["IdentityLookup", "IdentityLookupUI"], displayName: "Unwanted Communication Reporting", }, "photo-editing": { extensionPointIdentifier: "com.apple.photo-editing", frameworks: ["Photos", "PhotosUI"], displayName: "Photo Editing", }, "quicklook-preview": { extensionPointIdentifier: "com.apple.quicklook.preview", needsEmbeddedSwift: true, frameworks: ["QuickLook"], displayName: "Quick Look Preview", }, "spotlight-delegate": { extensionPointIdentifier: "com.apple.spotlight.index", frameworks: ["CoreSpotlight"], displayName: "CoreSpotlight Delegate", }, "virtual-conference": { extensionPointIdentifier: "com.apple.calendar.virtualconference", displayName: "Virtual Conference Provider", }, "shield-action": { extensionPointIdentifier: "com.apple.ManagedSettings.shield-action-service", frameworks: ["ManagedSettings"], displayName: "Shield Action", }, "shield-config": { extensionPointIdentifier: "com.apple.ManagedSettingsUI.shield-configuration-service", frameworks: ["ManagedSettings", "ManagedSettingsUI"], displayName: "Shield Configuration", }, "print-service": { extensionPointIdentifier: "com.apple.printing.discovery", displayName: "Print Service", }, "smart-card": { extensionPointIdentifier: "com.apple.ctk-tokens", frameworks: ["CryptoTokenKit"], displayName: "Smart Card", description: "Persistent token / smart card extension", }, "authentication-services": { extensionPointIdentifier: "com.apple.AppSSO.idp-extension", frameworks: ["AuthenticationServices"], displayName: "Authentication Services", description: "Single sign-on extension", }, wallet: { extensionPointIdentifier: "com.apple.PassKit.issuer-provisioning", frameworks: ["PassKit"], appGroupsByDefault: true, displayName: "Apple Wallet (Non-UI)", description: "In-App Provisioning Extension (Non-UI) for adding payment passes to Apple Wallet", }, "wallet-ui": { extensionPointIdentifier: "com.apple.PassKit.issuer-provisioning.authorization", frameworks: ["PassKit", "UIKit"], appGroupsByDefault: true, displayName: "Apple Wallet (UI)", description: "In-App Provisioning Authorization UI Extension for Apple Wallet", }, }; /** * Directory under `ios/` where this plugin writes derived target files (e.g. * `generated.entitlements`) during prebuild. The leading-dot `.targets` name * makes it obvious on disk that the contents are generated and should not be * edited by hand, while avoiding a colon in the path (which is risky for Xcode * build-setting paths). Files live at `ios/<TARGET_GENERATED_DIR>/<productName>/`. */ exports.TARGET_GENERATED_DIR = ".targets"; // --------------------------------------------------------------------------- // Derived maps — kept as exports for backward compatibility. All sourced // from TARGET_REGISTRY so they never go out of sync. // --------------------------------------------------------------------------- /** Maps Apple extension point identifiers to ExtensionType values. */ exports.KNOWN_EXTENSION_POINT_IDENTIFIERS = Object.fromEntries(Object.entries(exports.TARGET_REGISTRY) .filter(([, def]) => def.extensionPointIdentifier) .map(([type, def]) => [def.extensionPointIdentifier, type])); /** Whether app groups should sync from the main target by default. */ exports.SHOULD_USE_APP_GROUPS_BY_DEFAULT = Object.fromEntries(Object.keys(exports.TARGET_REGISTRY).map((type) => { var _a; return [ type, (_a = getEntry(type).appGroupsByDefault) !== null && _a !== void 0 ? _a : false, ]; })); // --------------------------------------------------------------------------- // Helper functions — signatures unchanged for backward compatibility. // --------------------------------------------------------------------------- function getEntry(type) { return exports.TARGET_REGISTRY[type]; } function productTypeForType(type) { var _a; return (_a = getEntry(type).productType) !== null && _a !== void 0 ? _a : "com.apple.product-type.app-extension"; } exports.productTypeForType = productTypeForType; function needsEmbeddedSwift(type) { var _a; return (_a = getEntry(type).needsEmbeddedSwift) !== null && _a !== void 0 ? _a : false; } exports.needsEmbeddedSwift = needsEmbeddedSwift; function getFrameworksForType(type) { var _a; return [...((_a = getEntry(type).frameworks) !== null && _a !== void 0 ? _a : [])]; } exports.getFrameworksForType = getFrameworksForType; // --------------------------------------------------------------------------- // Info.plist generation — stays as a switch because each type has a unique // plist shape that can't be reasonably data-driven. // --------------------------------------------------------------------------- // TODO: Maybe we can replace `NSExtensionPrincipalClass` with the `@main` annotation that newer extensions use? function getTargetInfoPlistForType(type) { const NSExtensionPointIdentifier = getEntry(type).extensionPointIdentifier; switch (type) { case "watch": return {}; case "watch-widget": return { NSExtension: { NSExtensionPointIdentifier: "com.apple.widgetkit-extension", }, }; case "action": return { NSExtension: { NSExtensionAttributes: { NSExtensionActivationRule: { NSExtensionActivationSupportsFileWithMaxCount: 0, NSExtensionActivationSupportsImageWithMaxCount: 0, NSExtensionActivationSupportsMovieWithMaxCount: 0, NSExtensionActivationSupportsText: false, NSExtensionActivationSupportsWebURLWithMaxCount: 1, }, NSExtensionJavaScriptPreprocessingFile: "assets/index", NSExtensionServiceAllowsFinderPreviewItem: true, NSExtensionServiceAllowsTouchBarItem: true, NSExtensionServiceFinderPreviewIconName: "NSActionTemplate", NSExtensionServiceTouchBarBezelColorName: "TouchBarBezel", NSExtensionServiceTouchBarIconName: "NSActionTemplate", }, NSExtensionPointIdentifier: "com.apple.services", NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ActionRequestHandler", }, }; case "app-intent": return { EXAppExtensionAttributes: { EXExtensionPointIdentifier: "com.apple.appintents-extension", }, }; case "clip": return { CFBundleName: "$(PRODUCT_NAME)", CFBundleIdentifier: "$(PRODUCT_BUNDLE_IDENTIFIER)", CFBundleVersion: "$(CURRENT_PROJECT_VERSION)", CFBundleExecutable: "$(EXECUTABLE_NAME)", CFBundlePackageType: "$(PRODUCT_BUNDLE_PACKAGE_TYPE)", CFBundleShortVersionString: "$(MARKETING_VERSION)", UIApplicationSupportsIndirectInputEvents: true, NSAppClip: { NSAppClipRequestEphemeralUserNotification: false, NSAppClipRequestLocationConfirmation: false, }, NSAppTransportSecurity: { NSAllowsArbitraryLoads: false, NSAllowsLocalNetworking: true, }, UILaunchStoryboardName: "SplashScreen", UIUserInterfaceStyle: "Automatic", UIViewControllerBasedStatusBarAppearance: false, }; case "imessage": return { NSExtension: { NSExtensionPointIdentifier, // This is hardcoded as there is no Swift code in the imessage extension. NSExtensionPrincipalClass: "StickerBrowserViewController", }, }; case "account-auth": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).AccountAuthViewController", NSExtensionAttributes: { ASAccountAuthenticationModificationSupportsStrongPasswordChange: true, ASAccountAuthenticationModificationSupportsUpgradeToSignInWithApple: true, }, }, }; case "credentials-provider": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).CredentialProviderViewController", }, }; case "keyboard": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).KeyboardViewController", NSExtensionAttributes: { RequestsOpenAccess: false, IsASCIICapable: false, PrefersRightToLeft: false, PrimaryLanguage: "en-US", }, }, }; case "content-blocker": return { NSExtension: { NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ContentBlockerRequestHandler", NSExtensionPointIdentifier, }, }; case "notification-service": return { NSExtension: { NSExtensionAttributes: { NSExtensionActivationRule: "TRUEPREDICATE", }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).NotificationService", NSExtensionPointIdentifier, }, }; case "quicklook-thumbnail": return { NSExtension: { NSExtensionAttributes: { QLSupportedContentTypes: [], QLThumbnailMinimumDimension: 0, }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ThumbnailProvider", NSExtensionPointIdentifier, }, }; case "spotlight": return { CSExtensionLabel: "myImporter", NSExtension: { NSExtensionAttributes: { CSSupportedContentTypes: ["com.example.plain-text"], }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ImportExtension", NSExtensionPointIdentifier, }, }; case "share": return { NSExtension: { NSExtensionAttributes: { NSExtensionActivationRule: "TRUEPREDICATE", }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ShareViewController", NSExtensionPointIdentifier, }, }; case "intent-ui": return { NSExtension: { NSExtensionAttributes: { IntentsSupported: ["INSendMessageIntent"], }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).IntentViewController", NSExtensionPointIdentifier, }, }; case "intent": return { NSExtension: { NSExtensionAttributes: { IntentsRestrictedWhileLocked: [], IntentsSupported: [ "INSendMessageIntent", "INSearchForMessagesIntent", "INSetMessageAttributeIntent", ], }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).IntentHandler", NSExtensionPointIdentifier, }, }; case "matter": return { NSExtension: { NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).RequestHandler", NSExtensionPointIdentifier, }, }; case "location-push": return { NSExtension: { NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).LocationPushService", NSExtensionPointIdentifier, }, }; case "safari": return { NSExtension: { NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).SafariWebExtensionHandler", NSExtensionPointIdentifier, }, }; case "notification-content": return { NSExtension: { NSExtensionAttributes: { UNNotificationExtensionCategory: "myNotificationCategory", UNNotificationExtensionInitialContentSizeRatio: 1, }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).NotificationViewController", NSExtensionPointIdentifier, }, }; case "network-packet-tunnel": return { NSExtension: { NSExtensionPointIdentifier: "com.apple.networkextension.packet-tunnel", NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).PacketTunnelProvider", }, }; case "network-app-proxy": return { NSExtension: { NSExtensionPointIdentifier: "com.apple.networkextension.app-proxy", NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).AppProxyProvider", }, }; case "network-dns-proxy": return { NSExtension: { NSExtensionPointIdentifier: "com.apple.networkextension.dns-proxy", NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).DNSProxyProvider", }, }; case "network-filter-data": return { NSExtension: { NSExtensionPointIdentifier: "com.apple.networkextension.filter-data", NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).FilterDataProvider", }, }; case "file-provider": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).FileProviderExtension", NSExtensionFileProviderSupportsEnumeration: true, }, }; case "broadcast-upload": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).SampleHandler", RPBroadcastProcessMode: "RPBroadcastProcessModeSampleBuffer", }, }; case "call-directory": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).CallDirectoryHandler", }, }; case "message-filter": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).MessageFilterExtension", }, }; case "file-provider-ui": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).FileProviderUIController", }, }; case "broadcast-setup-ui": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).BroadcastSetupViewController", }, }; case "classkit-context": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ContextProvider", }, }; case "unwanted-communication": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ClassificationViewController", }, }; case "photo-editing": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).PhotoEditingViewController", NSExtensionAttributes: { PHSupportedMediaTypes: ["Image"], }, }, }; case "quicklook-preview": return { NSExtension: { NSExtensionAttributes: { QLSupportedContentTypes: [], }, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).PreviewViewController", NSExtensionPointIdentifier, }, }; case "spotlight-delegate": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).IndexRequestHandler", }, }; case "virtual-conference": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).VirtualConferenceProvider", }, }; case "shield-action": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ShieldActionExtension", }, }; case "shield-config": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).ShieldConfigurationExtension", }, }; case "device-activity-monitor": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).DeviceActivityMonitorExtension", }, }; case "print-service": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).PrintServiceExtension", }, }; case "smart-card": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).TokenExtension", }, }; case "authentication-services": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).AuthenticationExtension", }, }; case "wallet": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).IssuerProvisioningHandler", }, }; case "wallet-ui": return { NSExtension: { NSExtensionPointIdentifier, NSExtensionPrincipalClass: "$(PRODUCT_MODULE_NAME).IssuerProvisioningAuthorizationViewController", }, }; default: // Default: used for widget and bg-download return { NSExtension: { NSExtensionPointIdentifier, }, }; } } exports.getTargetInfoPlistForType = getTargetInfoPlistForType; // --------------------------------------------------------------------------- // Target detection & utilities // --------------------------------------------------------------------------- function isNativeTargetOfType(target, type) { var _a, _b; if (type === "watch" && target.props.productType === "com.apple.product-type.application") { return ("WATCHOS_DEPLOYMENT_TARGET" in target.getDefaultConfiguration().props.buildSettings); } if (type === "clip" && target.props.productType === "com.apple.product-type.application.on-demand-install-capable") { return true; } const hasWatchOS = "WATCHOS_DEPLOYMENT_TARGET" in target.getDefaultConfiguration().props.buildSettings; if (type === "watch-widget" && target.props.productType === "com.apple.product-type.app-extension") { if (!hasWatchOS) return false; const infoPlist = target.getDefaultConfiguration().getInfoPlist(); return (((_a = infoPlist.NSExtension) === null || _a === void 0 ? void 0 : _a.NSExtensionPointIdentifier) === "com.apple.widgetkit-extension"); } // For iOS widget type, exclude watchOS targets that share the same extension point ID if (type === "widget" && target.props.productType === "com.apple.product-type.app-extension" && hasWatchOS) { return false; } if (target.props.productType !== "com.apple.product-type.app-extension") { return false; } // Could be a Today Extension, Share Extension, etc. const infoPlist = target.getDefaultConfiguration().getInfoPlist(); if (!((_b = infoPlist.NSExtension) === null || _b === void 0 ? void 0 : _b.NSExtensionPointIdentifier)) { console.error("No NSExtensionPointIdentifier found in extension Info.plist for target: " + target.getDisplayName()); return false; } const identifier = infoPlist.NSExtension.NSExtensionPointIdentifier; const mappedType = exports.KNOWN_EXTENSION_POINT_IDENTIFIERS[identifier]; return mappedType === type; } exports.isNativeTargetOfType = isNativeTargetOfType; function getMainAppTarget(project) { const target = project.rootObject.getMainAppTarget("ios"); if (!target) { throw new Error("No main app target found"); } return target; } exports.getMainAppTarget = getMainAppTarget; function getAuxiliaryTargets(project) { const mainTarget = project.rootObject.getMainAppTarget("ios"); return project.rootObject.props.targets.filter((target) => { return target.uuid !== (mainTarget === null || mainTarget === void 0 ? void 0 : mainTarget.uuid); }); } exports.getAuxiliaryTargets = getAuxiliaryTargets;