A Guide for Creating your own Library for Cocoa(touch) development A Guide for Creating your own Library for Cocoa(touch) development xcode xcode

A Guide for Creating your own Library for Cocoa(touch) development


FYI Xcode 3.2 has a new project template called Cocoa Touch Static Library. You might want to go that route.


If you were doing this for a Mac, you'd create a framework. However, you mention UIView, so obviously you're working with the iPhone. Apple doesn't allow iPhone applications to dynamically link against other libraries at runtime, so your only option is to create a static library. A static library is linked into the application executable when it's built.

To my knowledge, there's no static library project template in Xcode. What you'll likely have to do is start with a different iPhone Xcode template and add a Static Library target. Hang on to the default application target; you can use that to build a simple test application to make sure the library actually works.

To actually use the library in an application, you'll need two things: the compiled library (it has a .a extension) and all the header files. In your finished application, you'll link against your static library, and you'll need to #import the header files so that the compiler understands what classes, functions, etc. are available to it. (A common technique is to create one header file that imports all the others. That way, you only need to import a single file in your source files.)

As for creating your own custom templates, there's a simple tutorial here that should get you started: http://www.macresearch.org/custom_xcode_templates You can probably copy the default templates and just customize them to suit your purposes.

The struct syntax looks like this:

typedef struct _MyPoint {    CGFloat x;    CGFloat y;} MyPoint;

Structs are are declared in header files, so you can (I believe) Command+Double Click on the name of a struct to see how it's declared.

Another little trick for creating structs is to do something like this:

MyPoint aPoint = (MyPoint){ 1.5f, 0.25f };

Because the compiler knows the order of fields in the struct, it can very easily match up the values you provide in the curly braces to the appropriate fields. Of course, it's more convenient to have a function like MyPointMake, so you can write that like this:

MyPoint MyPointMake(CGFloat x, CGFloat y)     return (MyPoint){ x, y };}

Note that this is a function, not a method, so it lives outside of any @interface or @implementation context. Although I don't think the compiler complains if you define it in an @implementation context.

CGPointMake is defined as what's known as an inline function. You can see the definition for that in the Cocoa header files, too. (The difference between an inline function and a normal function is that the compiler can replace a call to CGPointMake with a copy of CGPointMake, which avoids the overhead of making a function call. It's a pretty minor optimization, but for a function that simple, it makes sense.)


The 320 project is a good example of an iPhone class library. You basically compile your project down into a .a library and then statically link against this in your client projects.