320
votes

I want to create a category on UIColor in my app using Xcode 6. But the thing is that in Xcode 6 there is no Objective-C category file template.

Is there any option to create a category in Xcode 6?

8
how did you do it before Xcode 6?holex
Just type it out in a source file: @interface UIColor(MyCategory) ... etcJeremyP
Why not select an answer?? Not doing so wastes time for other users looking for the solution.Tommie C.
If you are using Swift, then you would create an Extension rather than a Category. See this answer for how to do it.Suragch

8 Answers

746
votes

They didn't forget. They just moved it without telling anyone.

  1. Click File -> New -> File

  2. Select Objective-C file under Sources in iOS or Mac OS respectively and Click Next

  3. Now under File Type: choose either Category, Protocol, or Extension

PS. Under File Name: whatever you type here will be either the Category, Protocol, or Extension Name.

78
votes

To create CategoryBaseClass+CategoryName.m/.h:

  1. File → New → File... or use ⌘N.
  2. Select Objective-C File.

enter image description here

  1. Type in category name, select File Type: Category, and then select the base class.

enter image description here

  1. Complete the flow to create the category.
37
votes

Here's a visual demonstration:

creating a category file

19
votes

Xcode6-Beta5 update

The interface has now changed and it's possible to add a Category directly from the New > File window.

See unmircea's answer.


I was surprised myself, and I guess because of Swift they forgot about good old Objective-C.

You have two options:

  1. Create an Objective-C class with the category name, example UIView+Powerups, then manually change the interface to match the one of category. Note that the snippet for the category interface and implementation is still working, so that's extra easy: type @interface-category and @implementation-category.

  2. Import it from Xcode 5! Use this command:

    cp -r /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Cocoa\ Touch/Objective-C\ category.xctemplate /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File\ Templates/Source/
    

    Close and reopen Xcode 6 and you'll find "Objective-C Category" in the wizard for the new file.

12
votes

There is no predefined template to create category in Xcode 6 beta(for time being),they may add this option later. As a work around you can create a Cocoa Touch Class(its not proper i know but no other way) named UIImage+Additions(ClassName+CategoryName) and override its interface and implementation some thing like

UIImage+Additions.h

#import <UIKit/UIKit.h>

@interface UIImage(Additions)

+(void)testMethod;

@end 

UIImage+Additions.m

#import "UIImage+Additions.h"

@implementation UIImage (Additions)

+(void)testMethod
{

}

@end

Edit
This answer was written before finding a way of creating category in the Xcode 6 beta. Check unmircea's answer for the right way of creating category

6
votes

Extending unmircea's fantastic answer re: how to create a custom category to implement a custom UIColor palette, you could create a category.

Once you've created your category (in this example, it's a category called ColorPalette of class UIColor), you'll have a header and an implementation file.

UIColor+ColorPalette.h

#import <UIKit/UIKit.h>

@interface UIColor (ColorPalette)

// Your custom colors

+ (UIColor *) customRedButtonColor;
+ (UIColor *) customGreenButtonColor;

@end

UIColor+ColorPalette.m

#import "UIColor+ColorPalette.h"

@implementation UIColor (ColorPalette)

// Button Colors

+ (UIColor *) customRedButtonColor {
    return [UIColor colorWithRed:178.0/255.0 green:25.0/255.0 blue:0.0/255.0 alpha:1.0];
}

+ (UIColor *) customGreenButtonColor {
    return [UIColor colorWithRed:20.0/255.0 green:158.0/255.0 blue:96.0/255.0 alpha:1.0];
}

To use your custom color palette, just import the header into the class where you'd like to implement your custom colors:

#import "UIColor+ColorPalette.h"

and call the color as you would a standard color like redColor, greenColor, or blueColor.

Here's a link to a slightly more in-depth discussion of creating a custom palette.

Additionally, here is a tool to help you select the custom color values

3
votes

You could just copy the templates you want from an older version of Xcode, I made a shell script for this:https://github.com/cDigger/AddMissingTemplates

1
votes

You can create "extension" file like NSString+Helper:

1: File → New → File... or use ⌘N.

2: Name NSString+Helper (For example)

3: create the file

4: Remove the code from file

5: add 

extension NSString {


}

Done. enjoy coding