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

前端 未结 6 734
谎友^
谎友^ 2020-12-12 18:12

I\'m currently using a lot of the same subclassed objects with custom methods. It would be more convenient to create my own library which I can use for several proje

相关标签:
6条回答
  • 2020-12-12 19:01

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

    0 讨论(0)
  • 2020-12-12 19:03

    The 320 project seems like a good starting point indeed. But it lacks (I think) in:

    • having the library available in new projects right away
    • having the new classes available under 'new file'

    Those are project and file templates. For more information, ask the Google.

    0 讨论(0)
  • 2020-12-12 19:06

    If you plan on releasing this on the app store, you wont be able to use your library in the way that you would like. As mentioned above, linking to 3rd party libraries is not supported on the phone. I think there is a 'hack' way to make it work, but you'll lose distribution.

    The best I could come up with was putting all the relevant code in a directory and sharing it that way. I know its not as elegant, but its their limitation ie. out of our control.

    0 讨论(0)
  • 2020-12-12 19:10

    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.)

    0 讨论(0)
  • 2020-12-12 19:13

    Since this is a community wiki now, I thought it will be helpful to link some resources and tutorials:

    http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html

    http://www.clintharris.net/2009/iphone-app-shared-libraries/

    Enjoy!

    0 讨论(0)
  • 2020-12-12 19:14

    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.

    0 讨论(0)
提交回复
热议问题