diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
index 589d23d..0d9bd86 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
@@ -39,7 +39,6 @@
   @VisibleForTesting public static final String DEFAULT_MACOS_SDK_VERSION = "10.10";
   @VisibleForTesting public static final String DEFAULT_TVOS_SDK_VERSION = "9.0";
 
-  private final boolean isLocal;
   private final Optional<DottedVersion> xcodeVersion;
   private final DottedVersion defaultIosSdkVersion;
   private final DottedVersion defaultWatchosSdkVersion;
@@ -63,7 +62,7 @@
    * specified.
    */
   XcodeVersionProperties(DottedVersion xcodeVersion) {
-    this(xcodeVersion, true, null, null, null, null);
+    this(xcodeVersion, null, null, null, null);
   }
 
   /**
@@ -72,14 +71,12 @@
    */
   XcodeVersionProperties(
       DottedVersion xcodeVersion,
-      boolean isLocal,
       @Nullable String defaultIosSdkVersion,
       @Nullable String defaultWatchosSdkVersion,
       @Nullable String defaultTvosSdkVersion,
       @Nullable String defaultMacosSdkVersion) {
     super(SKYLARK_CONSTRUCTOR);
     this.xcodeVersion = Optional.fromNullable(xcodeVersion);
-    this.isLocal = isLocal;
     this.defaultIosSdkVersion =
         Strings.isNullOrEmpty(defaultIosSdkVersion)
             ? DottedVersion.fromStringUnchecked(DEFAULT_IOS_SDK_VERSION)
@@ -107,7 +104,6 @@
     return null;
   }
 
-
   /** Returns the default ios sdk version to use if this xcode version is in use. */
   @Override
   public String getDefaultIosSdkVersionString() {
@@ -137,11 +133,6 @@
     return xcodeVersion;
   }
 
-  @Override
-  public boolean isLocal() {
-    return isLocal;
-  }
-
   @Nullable
   public DottedVersion getDefaultIosSdkVersion() {
     return defaultIosSdkVersion;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRule.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRule.java
index e6467f4..2f6d0af 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRule.java
@@ -15,7 +15,6 @@
 package com.google.devtools.build.lib.rules.apple;
 
 import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
 import static com.google.devtools.build.lib.packages.Type.STRING;
 import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
 
@@ -31,7 +30,6 @@
 
   static final String VERSION_ATTR_NAME = "version";
   static final String ALIASES_ATTR_NAME = "aliases";
-  static final String IS_LOCAL_ATTR_NAME = "is_local";
   static final String DEFAULT_IOS_SDK_VERSION_ATTR_NAME = "default_ios_sdk_version";
   static final String DEFAULT_WATCHOS_SDK_VERSION_ATTR_NAME = "default_watchos_sdk_version";
   static final String DEFAULT_TVOS_SDK_VERSION_ATTR_NAME = "default_tvos_sdk_version";
@@ -58,13 +56,7 @@
         .add(
             attr(ALIASES_ATTR_NAME, STRING_LIST)
                 .nonconfigurable("this rule determines configuration"))
-        /* <!-- #BLAZE_RULE(xcode_version).ATTRIBUTE(is_local) -->
-        Whether this xcode version originated locally.
-        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .add(
-            attr(IS_LOCAL_ATTR_NAME, BOOLEAN)
-                .nonconfigurable("this rule determines configuration")
-                .value(true))
+
         /* <!-- #BLAZE_RULE(xcode_version).ATTRIBUTE(default_ios_sdk_version) -->
         The ios sdk version that is used by default when this version of xcode is being used.
         The <code>ios_sdk_version</code> build flag will override the value specified here.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
index 4bffc23..4d645de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
@@ -48,7 +48,6 @@
     DottedVersion xcodeVersion =
         DottedVersion.fromStringUnchecked(
             attrMapper.get(XcodeVersionRule.VERSION_ATTR_NAME, Type.STRING));
-    boolean isLocal = attrMapper.get(XcodeVersionRule.IS_LOCAL_ATTR_NAME, Type.BOOLEAN);
     String iosSdkVersionString =
         attrMapper.get(XcodeVersionRule.DEFAULT_IOS_SDK_VERSION_ATTR_NAME, Type.STRING);
     String watchosSdkVersionString =
@@ -61,7 +60,6 @@
     this.xcodeVersionProperties =
         new XcodeVersionProperties(
             xcodeVersion,
-            isLocal,
             iosSdkVersionString,
             watchosSdkVersionString,
             tvosSdkVersionString,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/XcodePropertiesApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/XcodePropertiesApi.java
index ce99f14..3626d3d 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/XcodePropertiesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/XcodePropertiesApi.java
@@ -40,13 +40,6 @@
   public String getXcodeVersionString();
 
   @SkylarkCallable(
-      name = "is_local",
-      doc = "Whether this xcode came from the user's machine. Defaults to true (local) if unknown.",
-      structField = true,
-      allowReturnNones = true)
-  public boolean isLocal();
-
-  @SkylarkCallable(
       name = "default_ios_sdk_version",
       doc = "The default iOS sdk version for this version of xcode, or <code>None</code> if "
           + "unknown.",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeVersionTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeVersionTest.java
index 247ae04..663674d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeVersionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeVersionTest.java
@@ -15,7 +15,6 @@
 package com.google.devtools.build.lib.rules.apple;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -44,14 +43,12 @@
         "def my_rule_impl(ctx):",
         "   xcode_properties = ctx.attr.xcode[apple_common.XcodeProperties]",
         "   xcode_version = xcode_properties.xcode_version",
-        "   is_local = xcode_properties.is_local",
         "   ios_version = xcode_properties.default_ios_sdk_version",
         "   watchos_version = xcode_properties.default_watchos_sdk_version",
         "   tvos_version = xcode_properties.default_tvos_sdk_version",
         "   macos_version = xcode_properties.default_macos_sdk_version",
         "   return MyInfo(",
         "       xcode_version=xcode_version,",
-        "       is_local=is_local,",
         "       ios_version=ios_version,",
         "       watchos_version=watchos_version,",
         "       tvos_version=tvos_version,",
@@ -73,7 +70,6 @@
         "xcode_version(",
         "    name = 'my_xcode',",
         "    version = '8',",
-        "    is_local = True,",
         "    default_ios_sdk_version = '9.0',",
         "    default_watchos_sdk_version = '9.1',",
         "    default_tvos_sdk_version = '9.2',",
@@ -87,7 +83,6 @@
             Label.parseAbsolute("//examples/rule:apple_rules.bzl", ImmutableMap.of()), "MyInfo");
     StructImpl myInfo = (StructImpl) skylarkTarget.get(key);
     assertThat((String) myInfo.getValue("xcode_version")).isEqualTo("8");
-    assertThat(String.valueOf(myInfo.getValue("is_local"))).isEqualTo("true");
     assertThat((String) myInfo.getValue("ios_version")).isEqualTo("9.0");
     assertThat((String) myInfo.getValue("watchos_version")).isEqualTo("9.1");
     assertThat((String) myInfo.getValue("tvos_version")).isEqualTo("9.2");
@@ -95,57 +90,6 @@
   }
 
   @Test
-  public void testBadXcodeLocalityThrows() throws Exception {
-    scratch.file("examples/rule/BUILD");
-    scratch.file(
-        "examples/rule/apple_rules.bzl",
-        "MyInfo = provider()",
-        "def my_rule_impl(ctx):",
-        "   xcode_properties = ctx.attr.xcode[apple_common.XcodeProperties]",
-        "   xcode_version = xcode_properties.xcode_version",
-        "   is_local = xcode_properties.is_local",
-        "   ios_version = xcode_properties.default_ios_sdk_version",
-        "   watchos_version = xcode_properties.default_watchos_sdk_version",
-        "   tvos_version = xcode_properties.default_tvos_sdk_version",
-        "   macos_version = xcode_properties.default_macos_sdk_version",
-        "   return MyInfo(",
-        "       xcode_version=xcode_version,",
-        "       is_local=is_local,",
-        "       ios_version=ios_version,",
-        "       watchos_version=watchos_version,",
-        "       tvos_version=tvos_version,",
-        "       macos_version=macos_version,",
-        "   )",
-        "my_rule = rule(implementation = my_rule_impl,",
-        "   attrs = {",
-        "     'xcode': attr.label(),",
-        "   },",
-        ")");
-    scratch.file(
-        "examples/apple_skylark/BUILD",
-        "package(default_visibility = ['//visibility:public'])",
-        "load('//examples/rule:apple_rules.bzl', 'my_rule')",
-        "my_rule(",
-        "    name = 'my_target',",
-        "    xcode = ':my_xcode',",
-        ")",
-        "xcode_version(",
-        "    name = 'my_xcode',",
-        "    version = '8',",
-        "    is_local = true,",
-        "    default_ios_sdk_version = '9.0',",
-        "    default_watchos_sdk_version = '9.1',",
-        "    default_tvos_sdk_version = '9.2',",
-        "    default_macos_sdk_version = '9.3',",
-        ")");
-
-    Throwable thrown =
-        assertThrows(
-            AssertionError.class, () -> getConfiguredTarget("//examples/apple_skylark:my_target"));
-    assertThat(thrown).hasMessageThat().contains("name 'true' is not defined");
-  }
-
-  @Test
   public void testXcodeVersionCanBeReadFromNative() throws Exception {
     scratch.file(
         "examples/apple/BUILD",
@@ -153,7 +97,6 @@
         "xcode_version(",
         "    name = 'my_xcode',",
         "    version = '8',",
-        "    is_local = False,",
         "    default_ios_sdk_version = '9.0',",
         "    default_watchos_sdk_version = '9.1',",
         "    default_tvos_sdk_version = '9.2',",
@@ -164,7 +107,6 @@
     XcodeVersionProperties xcodeProperties =
         nativeTarget.get(XcodeVersionProperties.SKYLARK_CONSTRUCTOR);
     assertThat(xcodeProperties.getXcodeVersion().get().toString()).isEqualTo("8");
-    assertThat(xcodeProperties.isLocal()).isFalse();
     assertThat(xcodeProperties.getDefaultIosSdkVersion().toString()).isEqualTo("9.0");
     assertThat(xcodeProperties.getDefaultWatchosSdkVersion().toString()).isEqualTo("9.1");
     assertThat(xcodeProperties.getDefaultTvosSdkVersion().toString()).isEqualTo("9.2");
