├── .gitignore ├── example.png ├── IgnoreXcodeImageCompletions ├── IgnoreXcodeImageCompletions.h ├── IgnoreXcodeImageCompletions.m └── Info.plist ├── IgnoreXcodeImageCompletions.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── Makefile ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | IgnoreXcodeImageCompletions.tar.gz 2 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keith/IgnoreXcodeImageCompletions/HEAD/example.png -------------------------------------------------------------------------------- /IgnoreXcodeImageCompletions/IgnoreXcodeImageCompletions.h: -------------------------------------------------------------------------------- 1 | @import Foundation; 2 | 3 | @interface IgnoreXcodeImageCompletions : NSObject 4 | @end 5 | -------------------------------------------------------------------------------- /IgnoreXcodeImageCompletions.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ARCHIVE_PATH = IgnoreXcodeImageCompletions.tar.gz 2 | INSTALL_PATH = $(HOME)/Library/Application Support/Developer/Shared/Xcode/Plug-ins/IgnoreXcodeImageCompletions.xcplugin 3 | 4 | install: uninstall 5 | xcodebuild -configuration Release 6 | 7 | uninstall: 8 | rm -rf "$(INSTALL_PATH)" 9 | 10 | archive: install 11 | tar -pvczf $(ARCHIVE_PATH) "$(INSTALL_PATH)" 12 | shasum -a 256 $(ARCHIVE_PATH) 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IgnoreXcodeImageCompletions 2 | 3 | IgnoreXcodeImageCompletions is an "old style" Xcode plugin for disabling 4 | image autocompletion. Just in case you've ever been annoyed by this: 5 | 6 | ![example](example.png) 7 | 8 | ## Installation 9 | 10 | 1. [Un-sign Xcode][unsign] 11 | 1. Copy `IgnoreXcodeImageCompletions.xcplugin` to `~/Library/Application 12 | Support/Developer/Shared/Xcode/Plug-ins` 13 | 1. Celebrate 14 | 15 | OR: 16 | 17 | 1. [Un-sign Xcode][unsign] 18 | 1. Clone the repo 19 | 1. Run `make install` 20 | 21 | If you don't want to do this you should [dup my radar][radar] on this 22 | silly autocompletion behavior. 23 | 24 | ### Compatibility 25 | 26 | Currently this plugin has been tested with (and has the UUIDs for): 27 | 28 | - Xcode 9.3 beta 4 (9Q127n) 29 | - Xcode 9.2 (9C40b) 30 | - Xcode 9.0 (9A235) 31 | - Xcode 8.3.3 (8E3004b) 32 | 33 | [radar]: http://www.openradar.me/33506212 34 | [unsign]: https://github.com/XVimProject/XVim/blob/master/INSTALL_Xcode8.md 35 | -------------------------------------------------------------------------------- /IgnoreXcodeImageCompletions/IgnoreXcodeImageCompletions.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import "IgnoreXcodeImageCompletions.h" 3 | 4 | @implementation IgnoreXcodeImageCompletions 5 | 6 | + (void)load { 7 | NSLog(@"IgnoreXcodeImageCompletions: Loading!"); 8 | 9 | Class class = objc_getClass("IDEMediaLibraryCompletionStrategy"); 10 | IMP fakeInitializer = imp_implementationWithBlock((id)^{ 11 | NSLog(@"IgnoreXcodeImageCompletions: Fake initializer was called!"); 12 | return nil; 13 | }); 14 | 15 | Method objectInit = class_getInstanceMethod(objc_getClass("NSObject"), @selector(init)); 16 | const char *encoding = method_getTypeEncoding(objectInit); 17 | 18 | BOOL added = class_addMethod(class, @selector(init), fakeInitializer, encoding); 19 | if (!added) { 20 | NSLog(@"IgnoreXcodeImageCompletions: Failed to add method :("); 21 | return; 22 | } 23 | 24 | NSLog(@"IgnoreXcodeImageCompletions: Swizzled selector!"); 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Keith Smiley (http://keith.so) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the 'Software'), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /IgnoreXcodeImageCompletions/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleVersion 20 | 1 21 | DVTPlugInCompatibilityUUIDs 22 | 23 | DF11C142-1584-4A99-87AC-1925D5F5652A 24 | DFFB3951-EB0A-4C09-9DAC-5F2D28CC839C 25 | B395D63E-9166-4CD6-9287-6889D507AD6A 26 | 8CC8AD71-C38D-4C1A-A34B-DC78BCE76F57 27 | 28 | NSHumanReadableCopyright 29 | Copyright © 2017 SmileyKeith. All rights reserved. 30 | XC4Compatible 31 | 32 | XCGCReady 33 | 34 | XCPluginHasUI 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /IgnoreXcodeImageCompletions.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C2C637221F272BCA00772DE9 /* IgnoreXcodeImageCompletions.xcplugin in Install Plugin */ = {isa = PBXBuildFile; fileRef = C2C637181F272B4200772DE9 /* IgnoreXcodeImageCompletions.xcplugin */; }; 11 | C2C637251F272BDB00772DE9 /* IgnoreXcodeImageCompletions.m in Sources */ = {isa = PBXBuildFile; fileRef = C2C637241F272BDB00772DE9 /* IgnoreXcodeImageCompletions.m */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXCopyFilesBuildPhase section */ 15 | C2C637211F272BBB00772DE9 /* Install Plugin */ = { 16 | isa = PBXCopyFilesBuildPhase; 17 | buildActionMask = 2147483647; 18 | dstPath = "~/Library/Application Support/Developer/Shared/Xcode/Plug-ins"; 19 | dstSubfolderSpec = 0; 20 | files = ( 21 | C2C637221F272BCA00772DE9 /* IgnoreXcodeImageCompletions.xcplugin in Install Plugin */, 22 | ); 23 | name = "Install Plugin"; 24 | runOnlyForDeploymentPostprocessing = 0; 25 | }; 26 | /* End PBXCopyFilesBuildPhase section */ 27 | 28 | /* Begin PBXFileReference section */ 29 | C2C637181F272B4200772DE9 /* IgnoreXcodeImageCompletions.xcplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IgnoreXcodeImageCompletions.xcplugin; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | C2C6371B1F272B4200772DE9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 31 | C2C637231F272BDB00772DE9 /* IgnoreXcodeImageCompletions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IgnoreXcodeImageCompletions.h; sourceTree = ""; }; 32 | C2C637241F272BDB00772DE9 /* IgnoreXcodeImageCompletions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IgnoreXcodeImageCompletions.m; sourceTree = ""; }; 33 | /* End PBXFileReference section */ 34 | 35 | /* Begin PBXGroup section */ 36 | C2C6370F1F272B4200772DE9 = { 37 | isa = PBXGroup; 38 | children = ( 39 | C2C6371A1F272B4200772DE9 /* IgnoreXcodeImageCompletions */, 40 | C2C637191F272B4200772DE9 /* Products */, 41 | ); 42 | sourceTree = ""; 43 | }; 44 | C2C637191F272B4200772DE9 /* Products */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | C2C637181F272B4200772DE9 /* IgnoreXcodeImageCompletions.xcplugin */, 48 | ); 49 | name = Products; 50 | sourceTree = ""; 51 | }; 52 | C2C6371A1F272B4200772DE9 /* IgnoreXcodeImageCompletions */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | C2C6371B1F272B4200772DE9 /* Info.plist */, 56 | C2C637231F272BDB00772DE9 /* IgnoreXcodeImageCompletions.h */, 57 | C2C637241F272BDB00772DE9 /* IgnoreXcodeImageCompletions.m */, 58 | ); 59 | path = IgnoreXcodeImageCompletions; 60 | sourceTree = ""; 61 | }; 62 | /* End PBXGroup section */ 63 | 64 | /* Begin PBXNativeTarget section */ 65 | C2C637171F272B4200772DE9 /* IgnoreXcodeImageCompletions */ = { 66 | isa = PBXNativeTarget; 67 | buildConfigurationList = C2C6371E1F272B4200772DE9 /* Build configuration list for PBXNativeTarget "IgnoreXcodeImageCompletions" */; 68 | buildPhases = ( 69 | C2C637141F272B4200772DE9 /* Sources */, 70 | C2C637211F272BBB00772DE9 /* Install Plugin */, 71 | ); 72 | buildRules = ( 73 | ); 74 | dependencies = ( 75 | ); 76 | name = IgnoreXcodeImageCompletions; 77 | productName = IgnoreXcodeImageCompletions; 78 | productReference = C2C637181F272B4200772DE9 /* IgnoreXcodeImageCompletions.xcplugin */; 79 | productType = "com.apple.product-type.bundle"; 80 | }; 81 | /* End PBXNativeTarget section */ 82 | 83 | /* Begin PBXProject section */ 84 | C2C637101F272B4200772DE9 /* Project object */ = { 85 | isa = PBXProject; 86 | attributes = { 87 | LastUpgradeCheck = 0900; 88 | ORGANIZATIONNAME = SmileyKeith; 89 | TargetAttributes = { 90 | C2C637171F272B4200772DE9 = { 91 | CreatedOnToolsVersion = 8.3.3; 92 | ProvisioningStyle = Automatic; 93 | }; 94 | }; 95 | }; 96 | buildConfigurationList = C2C637131F272B4200772DE9 /* Build configuration list for PBXProject "IgnoreXcodeImageCompletions" */; 97 | compatibilityVersion = "Xcode 3.2"; 98 | developmentRegion = English; 99 | hasScannedForEncodings = 0; 100 | knownRegions = ( 101 | en, 102 | ); 103 | mainGroup = C2C6370F1F272B4200772DE9; 104 | productRefGroup = C2C637191F272B4200772DE9 /* Products */; 105 | projectDirPath = ""; 106 | projectRoot = ""; 107 | targets = ( 108 | C2C637171F272B4200772DE9 /* IgnoreXcodeImageCompletions */, 109 | ); 110 | }; 111 | /* End PBXProject section */ 112 | 113 | /* Begin PBXSourcesBuildPhase section */ 114 | C2C637141F272B4200772DE9 /* Sources */ = { 115 | isa = PBXSourcesBuildPhase; 116 | buildActionMask = 2147483647; 117 | files = ( 118 | C2C637251F272BDB00772DE9 /* IgnoreXcodeImageCompletions.m in Sources */, 119 | ); 120 | runOnlyForDeploymentPostprocessing = 0; 121 | }; 122 | /* End PBXSourcesBuildPhase section */ 123 | 124 | /* Begin XCBuildConfiguration section */ 125 | C2C6371C1F272B4200772DE9 /* Debug */ = { 126 | isa = XCBuildConfiguration; 127 | buildSettings = { 128 | ALWAYS_SEARCH_USER_PATHS = NO; 129 | CLANG_ANALYZER_NONNULL = YES; 130 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 131 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 132 | CLANG_CXX_LIBRARY = "libc++"; 133 | CLANG_ENABLE_MODULES = YES; 134 | CLANG_ENABLE_OBJC_ARC = YES; 135 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 136 | CLANG_WARN_BOOL_CONVERSION = YES; 137 | CLANG_WARN_COMMA = YES; 138 | CLANG_WARN_CONSTANT_CONVERSION = YES; 139 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 140 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 141 | CLANG_WARN_EMPTY_BODY = YES; 142 | CLANG_WARN_ENUM_CONVERSION = YES; 143 | CLANG_WARN_INFINITE_RECURSION = YES; 144 | CLANG_WARN_INT_CONVERSION = YES; 145 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 146 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 147 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 148 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 149 | CLANG_WARN_STRICT_PROTOTYPES = YES; 150 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 151 | CLANG_WARN_UNREACHABLE_CODE = YES; 152 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 153 | CODE_SIGN_IDENTITY = "-"; 154 | COPY_PHASE_STRIP = NO; 155 | DEBUG_INFORMATION_FORMAT = dwarf; 156 | ENABLE_STRICT_OBJC_MSGSEND = YES; 157 | ENABLE_TESTABILITY = YES; 158 | GCC_C_LANGUAGE_STANDARD = gnu99; 159 | GCC_DYNAMIC_NO_PIC = NO; 160 | GCC_NO_COMMON_BLOCKS = YES; 161 | GCC_OPTIMIZATION_LEVEL = 0; 162 | GCC_PREPROCESSOR_DEFINITIONS = ( 163 | "DEBUG=1", 164 | "$(inherited)", 165 | ); 166 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 167 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 168 | GCC_WARN_UNDECLARED_SELECTOR = YES; 169 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 170 | GCC_WARN_UNUSED_FUNCTION = YES; 171 | GCC_WARN_UNUSED_VARIABLE = YES; 172 | MACOSX_DEPLOYMENT_TARGET = 10.12; 173 | MTL_ENABLE_DEBUG_INFO = YES; 174 | ONLY_ACTIVE_ARCH = YES; 175 | SDKROOT = macosx; 176 | }; 177 | name = Debug; 178 | }; 179 | C2C6371D1F272B4200772DE9 /* Release */ = { 180 | isa = XCBuildConfiguration; 181 | buildSettings = { 182 | ALWAYS_SEARCH_USER_PATHS = NO; 183 | CLANG_ANALYZER_NONNULL = YES; 184 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 185 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 186 | CLANG_CXX_LIBRARY = "libc++"; 187 | CLANG_ENABLE_MODULES = YES; 188 | CLANG_ENABLE_OBJC_ARC = YES; 189 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 190 | CLANG_WARN_BOOL_CONVERSION = YES; 191 | CLANG_WARN_COMMA = YES; 192 | CLANG_WARN_CONSTANT_CONVERSION = YES; 193 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 194 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 195 | CLANG_WARN_EMPTY_BODY = YES; 196 | CLANG_WARN_ENUM_CONVERSION = YES; 197 | CLANG_WARN_INFINITE_RECURSION = YES; 198 | CLANG_WARN_INT_CONVERSION = YES; 199 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 200 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 201 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 202 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 203 | CLANG_WARN_STRICT_PROTOTYPES = YES; 204 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 205 | CLANG_WARN_UNREACHABLE_CODE = YES; 206 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 207 | CODE_SIGN_IDENTITY = "-"; 208 | COPY_PHASE_STRIP = NO; 209 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 210 | ENABLE_NS_ASSERTIONS = NO; 211 | ENABLE_STRICT_OBJC_MSGSEND = YES; 212 | GCC_C_LANGUAGE_STANDARD = gnu99; 213 | GCC_NO_COMMON_BLOCKS = YES; 214 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 215 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 216 | GCC_WARN_UNDECLARED_SELECTOR = YES; 217 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 218 | GCC_WARN_UNUSED_FUNCTION = YES; 219 | GCC_WARN_UNUSED_VARIABLE = YES; 220 | MACOSX_DEPLOYMENT_TARGET = 10.12; 221 | MTL_ENABLE_DEBUG_INFO = NO; 222 | SDKROOT = macosx; 223 | }; 224 | name = Release; 225 | }; 226 | C2C6371F1F272B4200772DE9 /* Debug */ = { 227 | isa = XCBuildConfiguration; 228 | buildSettings = { 229 | INFOPLIST_FILE = IgnoreXcodeImageCompletions/Info.plist; 230 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 231 | PRODUCT_BUNDLE_IDENTIFIER = com.smileykeith.IgnoreXcodeImageCompletions; 232 | PRODUCT_NAME = "$(TARGET_NAME)"; 233 | SKIP_INSTALL = YES; 234 | WRAPPER_EXTENSION = xcplugin; 235 | }; 236 | name = Debug; 237 | }; 238 | C2C637201F272B4200772DE9 /* Release */ = { 239 | isa = XCBuildConfiguration; 240 | buildSettings = { 241 | INFOPLIST_FILE = IgnoreXcodeImageCompletions/Info.plist; 242 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; 243 | PRODUCT_BUNDLE_IDENTIFIER = com.smileykeith.IgnoreXcodeImageCompletions; 244 | PRODUCT_NAME = "$(TARGET_NAME)"; 245 | SKIP_INSTALL = YES; 246 | WRAPPER_EXTENSION = xcplugin; 247 | }; 248 | name = Release; 249 | }; 250 | /* End XCBuildConfiguration section */ 251 | 252 | /* Begin XCConfigurationList section */ 253 | C2C637131F272B4200772DE9 /* Build configuration list for PBXProject "IgnoreXcodeImageCompletions" */ = { 254 | isa = XCConfigurationList; 255 | buildConfigurations = ( 256 | C2C6371C1F272B4200772DE9 /* Debug */, 257 | C2C6371D1F272B4200772DE9 /* Release */, 258 | ); 259 | defaultConfigurationIsVisible = 0; 260 | defaultConfigurationName = Release; 261 | }; 262 | C2C6371E1F272B4200772DE9 /* Build configuration list for PBXNativeTarget "IgnoreXcodeImageCompletions" */ = { 263 | isa = XCConfigurationList; 264 | buildConfigurations = ( 265 | C2C6371F1F272B4200772DE9 /* Debug */, 266 | C2C637201F272B4200772DE9 /* Release */, 267 | ); 268 | defaultConfigurationIsVisible = 0; 269 | defaultConfigurationName = Release; 270 | }; 271 | /* End XCConfigurationList section */ 272 | }; 273 | rootObject = C2C637101F272B4200772DE9 /* Project object */; 274 | } 275 | --------------------------------------------------------------------------------