private Artifact registerBundleSigningActions(Artifact ipaOutput) throws InterruptedException {
    IntermediateArtifacts intermediateArtifacts =
        ObjcRuleClasses.intermediateArtifacts(ruleContext);
    Artifact teamPrefixFile =
        intermediateArtifacts.appendExtensionForEntitlementArtifact(".team_prefix_file");
    registerExtractTeamPrefixAction(teamPrefixFile);

    Artifact entitlementsNeedingSubstitution = attributes.entitlements();
    if (entitlementsNeedingSubstitution == null) {
      entitlementsNeedingSubstitution =
          intermediateArtifacts.appendExtensionForEntitlementArtifact(
              ".entitlements_with_variables");
      registerExtractEntitlementsAction(entitlementsNeedingSubstitution);
    }
    Artifact entitlements =
        intermediateArtifacts.appendExtensionForEntitlementArtifact(".entitlements");
    registerEntitlementsVariableSubstitutionAction(
        entitlementsNeedingSubstitution, entitlements, teamPrefixFile);
    Artifact ipaUnsigned = ruleContext.getImplicitOutputArtifact(IPA_UNSIGNED);
    registerSignBundleAction(entitlements, ipaOutput, ipaUnsigned);
    return ipaUnsigned;
  }
  /** Returns this target's Xcode build settings. */
  private Iterable<XcodeprojBuildSetting> buildSettings() {
    ImmutableList.Builder<XcodeprojBuildSetting> buildSettings = new ImmutableList.Builder<>();
    if (attributes.appIcon() != null) {
      buildSettings.add(
          XcodeprojBuildSetting.newBuilder()
              .setName("ASSETCATALOG_COMPILER_APPICON_NAME")
              .setValue(attributes.appIcon())
              .build());
    }
    if (attributes.launchImage() != null) {
      buildSettings.add(
          XcodeprojBuildSetting.newBuilder()
              .setName("ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME")
              .setValue(attributes.launchImage())
              .build());
    }

    // Convert names to a sequence containing "1" and/or "2" for iPhone and iPad, respectively.
    ImmutableSet<TargetDeviceFamily> families = bundleSupport.targetDeviceFamilies();
    Iterable<Integer> familyIndexes =
        families.isEmpty() ? ImmutableList.<Integer>of() : UI_DEVICE_FAMILY_VALUES.get(families);
    buildSettings.add(
        XcodeprojBuildSetting.newBuilder()
            .setName("TARGETED_DEVICE_FAMILY")
            .setValue(Joiner.on(',').join(familyIndexes))
            .build());

    Artifact entitlements = attributes.entitlements();
    if (entitlements != null) {
      buildSettings.add(
          XcodeprojBuildSetting.newBuilder()
              .setName("CODE_SIGN_ENTITLEMENTS")
              .setValue("$(WORKSPACE_ROOT)/" + entitlements.getExecPathString())
              .build());
    }

    return buildSettings.build();
  }