From 0cfbcb3484850a269b9b9790d64c5b0b8053aa10 Mon Sep 17 00:00:00 2001 From: Jeff Forbes Date: Tue, 23 Mar 2021 22:43:52 -0400 Subject: [PATCH] [apple] project: Add apple.skip_appex_copy_frameworks_in_xcode. --- src/com/facebook/buck/apple/AppleConfig.java | 8 ++++++++ .../features/apple/project/ProjectGenerator.java | 12 +++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/com/facebook/buck/apple/AppleConfig.java b/src/com/facebook/buck/apple/AppleConfig.java index a6660c85499..ce251c433a2 100644 --- a/src/com/facebook/buck/apple/AppleConfig.java +++ b/src/com/facebook/buck/apple/AppleConfig.java @@ -323,6 +323,14 @@ public boolean shouldGenerateMissingUmbrellaHeaders() { return delegate.getBooleanValue(APPLE_SECTION, "generate_missing_umbrella_headers", false); } + /** + * If true, project generation will skip embedding transitive frameworks within the extension + * binary. This can be a significant disk-usage savings for many projects. + */ + public boolean shouldSkipAppexCopyFrameworksInXcodeProject() { + return delegate.getBooleanValue(APPLE_SECTION, "skip_appex_copy_frameworks_in_xcode", false); + } + public boolean shouldUseSwiftDelegate() { // TODO(mgd): Remove Swift delegation from Apple rules return delegate.getBooleanValue(APPLE_SECTION, "use_swift_delegate", true); diff --git a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java index 2c45d06e334..cb7b56b1e46 100644 --- a/src/com/facebook/buck/features/apple/project/ProjectGenerator.java +++ b/src/com/facebook/buck/features/apple/project/ProjectGenerator.java @@ -830,7 +830,7 @@ private PBXNativeTarget generateAppleBundleTarget( : AppleBuildRules.RecursiveDependenciesMode.COPYING, targetNode, Optional.of(xcodeDescriptions.getXCodeDescriptions())); - if (bundleRequiresRemovalOfAllTransitiveFrameworks(targetNode)) { + if (bundleRequiresRemovalOfAllTransitiveFrameworks(targetNode, appleConfig)) { copiedRules = rulesWithoutFrameworkBundles(copiedRules); } else if (bundleRequiresAllTransitiveFrameworks(binaryNode, bundleLoaderNode)) { copiedRules = @@ -4750,6 +4750,10 @@ private static boolean isApp(HasAppleBundleFields arg) { return hasExtension(arg, AppleBundleExtension.APP); } + private static boolean isAppExtension(HasAppleBundleFields arg) { + return hasExtension(arg, AppleBundleExtension.APPEX); + } + private static boolean hasExtension(HasAppleBundleFields arg, AppleBundleExtension extension) { return arg.getExtension().isLeft() && arg.getExtension().getLeft().equals(extension); } @@ -4766,8 +4770,10 @@ private static boolean isModularAppleLibrary(TargetNode libraryNode) { } private static boolean bundleRequiresRemovalOfAllTransitiveFrameworks( - TargetNode targetNode) { - return isFrameworkBundle(targetNode.getConstructorArg()); + TargetNode targetNode, AppleConfig config) { + return isFrameworkBundle(targetNode.getConstructorArg()) || + (config.shouldSkipAppexCopyFrameworksInXcodeProject() && + isAppExtension(targetNode.getConstructorArg())); } private static boolean bundleRequiresAllTransitiveFrameworks(