How do I create a category in Xcode 6 or higher?
Asked Answered
H

8

320

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?

Heritage answered 20/6, 2014 at 9:25 Comment(4)
how did you do it before Xcode 6?Eggnog
Just type it out in a source file: @interface UIColor(MyCategory) ... etcExtraversion
Why not select an answer?? Not doing so wastes time for other users looking for the solution.Specs
If you are using Swift, then you would create an Extension rather than a Category. See this answer for how to do it.Sixtyfourmo
S
746

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.

Shovelhead answered 31/7, 2014 at 8:45 Comment(10)
This is so confusing.Angrist
They just accommodated to adding Swift and hidden everything under Objective-C or I think that they did. I personally don't get why Swift was added, Objective-C is such a beautiful and expressive language once you get to know it... It's Objects on top of C... PerrrfectShovelhead
Heh, the description given for Objective-C File by XCode 6 is "An Empty Objective-C file.", rather than my description which would be, "one of the old, not at all empty, Objective-C files that you're used to", which threw me off fairly nicely!Dulosis
@unmircea Thanks for posting such useful information. To Apple: This is stupid!Surrejoinder
They didn't forget. They just moved it without telling anyone. what is typical, considering the crappy level of Apple documentations in general and most frequently the total lack of documentation.Transformer
What are you missing on the Documentation level? It's true they always change things but the documentation is very good, although written in a style that is a little different from what other software companies.Shovelhead
Thanks! I was stumped on this and could not find where they moved it.Rickrack
Stack Exchange should change theirs algorithms to bring these kind of answers to the top !!Requite
This should be the preferred answerUproot
@unmircea, I don't remember now, but I did stumble upon public methods not documented too.Sanchez
T
78

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.
Tann answered 18/12, 2014 at 21:5 Comment(0)
T
37

Here's a visual demonstration:

creating a category file

Tachograph answered 3/4, 2016 at 2:26 Comment(0)
C
19

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.

Cita answered 20/6, 2014 at 9:54 Comment(2)
FYI: if you're on a later beta, just change Xcode-beta.app in the line to Xcode6-betaX.app where X is the beta number.Austral
Wrong! Check out the answer by unmircea below for the correct answer - it's not gone, it has just moved..Chickabiddy
S
12

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

Scoville answered 20/6, 2014 at 9:46 Comment(4)
Apple forgot to add Objective-c Category, Objective-c class extension, Objective-c Protocols templates....Heritage
I created a bug report #17627118 if you want to duplicate it.Metamorphosis
No need for the workaround now since final version of XCode 6 has category support built-in.Tann
@Tann It was answered before the final Xcode 6 version and the work around is not wrong also. Don't simply down vote.Scoville
F
6

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

Finial answered 28/7, 2015 at 12:44 Comment(1)
Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference.Amazon
J
3

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

Journalist answered 26/7, 2014 at 18:53 Comment(1)
Although this might be a working solution, it's probably a better idea to use the category support built into Xcode - this way, the templates will always be up to date.Tann
N
1

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

Nel answered 11/10, 2017 at 9:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.