@bacons/apple-targets
Version:
Generate Apple Targets with Expo Prebuild
759 lines (758 loc) • 31.4 kB
JavaScript
"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;