aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
diff options
context:
space:
mode:
authorGravatar Dmitry Shevchenko <dmishe@google.com>2016-07-28 16:16:54 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-07-29 10:09:50 +0000
commit80f635a1bcd86ab08c14d5af4b2f56185d4825f1 (patch)
tree33e4a6e2835eb3e4aef8be0afe796d9d07a71dcf /src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
parentee8b7aaff277b913d50f3083768564c1d7124c87 (diff)
Include SwiftSupport directory into the IPA when an app contains Swift. * To pass App Store validation, an app that contains Swift code must have a SwiftSupport directory at the root of the IPA. -- MOS_MIGRATED_REVID=128706028
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java47
1 files changed, 37 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
index d52dad9ed1..39e6d2ce13 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
@@ -22,6 +22,9 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.ReleaseBu
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.ReleaseBundlingRule.EXTRA_ENTITLEMENTS_ATTR;
import static com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.UI_DEVICE_FAMILY_VALUES;
+import com.dd.plist.NSArray;
+import com.dd.plist.NSDictionary;
+import com.dd.plist.NSObject;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
@@ -63,14 +66,8 @@ import com.google.devtools.build.lib.rules.objc.BundleSupport.ExtraActoolArgs;
import com.google.devtools.build.lib.rules.objc.Bundling.Builder;
import com.google.devtools.build.lib.shell.ShellUtils;
import com.google.devtools.build.xcode.xcodegen.proto.XcodeGenProtos.XcodeprojBuildSetting;
-
-import com.dd.plist.NSArray;
-import com.dd.plist.NSDictionary;
-import com.dd.plist.NSObject;
-
import java.util.List;
import java.util.Map.Entry;
-
import javax.annotation.Nullable;
/**
@@ -299,6 +296,7 @@ public final class ReleaseBundlingSupport {
registerCopyDsymPlistAction(dsymOutputType);
registerCopyLinkmapFilesAction();
registerSwiftStdlibActionsIfNecessary();
+ registerSwiftSupportActionsIfNecessary();
registerEmbedLabelPlistAction();
registerEnvironmentPlistAction();
@@ -1051,10 +1049,13 @@ public final class ReleaseBundlingSupport {
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
- CustomCommandLine.Builder commandLine = CustomCommandLine.builder()
- .addPath(intermediateArtifacts.swiftFrameworksFileZip().getExecPath())
- .add("--platform").add(AppleToolchain.swiftPlatform(appleConfiguration))
- .addExecPath("--scan-executable", intermediateArtifacts.combinedArchitectureBinary());
+ CustomCommandLine.Builder commandLine =
+ CustomCommandLine.builder()
+ .addPath(intermediateArtifacts.swiftFrameworksFileZip().getExecPath())
+ .add("Frameworks")
+ .add("--platform")
+ .add(AppleToolchain.swiftPlatform(appleConfiguration))
+ .addExecPath("--scan-executable", intermediateArtifacts.combinedArchitectureBinary());
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
@@ -1066,6 +1067,32 @@ public final class ReleaseBundlingSupport {
.build(ruleContext));
}
+ /** Registers an action to copy Swift standard library dylibs into SwiftSupport root directory. */
+ private void registerSwiftSupportActionsIfNecessary() {
+ if (!objcProvider.is(USES_SWIFT)) {
+ return;
+ }
+
+ AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
+
+ CustomCommandLine.Builder commandLine =
+ CustomCommandLine.builder()
+ .addPath(intermediateArtifacts.swiftSupportZip().getExecPath())
+ .add("SwiftSupport/" + AppleToolchain.swiftPlatform(appleConfiguration))
+ .add("--platform")
+ .add(AppleToolchain.swiftPlatform(appleConfiguration))
+ .addExecPath("--scan-executable", intermediateArtifacts.combinedArchitectureBinary());
+
+ ruleContext.registerAction(
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext)
+ .setMnemonic("SwiftCopySwiftSupport")
+ .setExecutable(attributes.swiftStdlibToolWrapper())
+ .setCommandLine(commandLine.build())
+ .addOutput(intermediateArtifacts.swiftSupportZip())
+ .addInput(intermediateArtifacts.combinedArchitectureBinary())
+ .build(ruleContext));
+ }
+
private String extractPlistCommand(Artifact provisioningProfile) {
return "security cms -D -i " + ShellUtils.shellEscape(provisioningProfile.getExecPathString());
}