8

I'm building a static library that will be used in multiple iOS apps. In parallel i'm working on one of those apps using my library.

During development I get at least once a day an annoying error about header files from the library not being found (in my app project). I learned that when building a static library, headers can be either Public, Private or Project

I'm guessing that every header that I want to expose in my library should be Public.

My question is, what is the best way to manage these public headers? should I create one main public header file with #import to all my public headers? Can Xcode generate such file for me?

Another major question is what is the recommended value for Public Header Folder Path setting?

My major goal is that future projects that will use this library, will be able to do so with as less configurations as possible (Adding linker flags, changing User Header Search Path etc.)

Thank you very much.

Avi Shukron
  • 6,088
  • 8
  • 50
  • 84

1 Answers1

-1

About public/private/project headers, here is a previous answer just in case => https://stackoverflow.com/a/8016333/1075192

Most of the time, C/C++/Obj-C libraries and frameworks have one main header including all the other ones. Cocoa frameworks follow this path for example.

To declare a CAAnimation with QuartzCore framework for example you could do this:

#import "QuartzCore/CAAnimation.h"

or

#import "QuartzCore/Quartzcore.h"

"QuartzCore.h" is actually only composed of a header guard and includes of all the other headers of the library.

In my opinion, It's actually better to use the first one as it doesn't include all the declarations you don't need. But most of the time we choose the lazy solution of including everything at once.

I have no idea if you can generate this directly with xCode, anyway it's easy enough to do it by yourself as it's just a bunch of includes or imports.

The public header folder path is generally "MyLibraryOrFramework/Headers" (just look inside any Cocoa's framework for example).

And last, if you want something really reusable and seamless, I suggest you use frameworks instead of static library (which is nearly similar).

Look at this fine answer to understand why it fits perfectly what you need: => https://stackoverflow.com/a/6389802/1075192

Voilà, hope this answer helped a bit.

Community
  • 1
  • 1
nsarno
  • 164
  • 6
  • 6
    This answer ignores all the difficult questions (e.g. whether headers must be public/project etc, what the right output locations are, how to tell Xcode to do this), and answers the trivial ones that don't matter anyway since Xcode handles that near automatically. – Adam May 14 '13 at 16:14
  • 3
    @Adam I admit I probably misunderstood the important points of this question. It would be nice if you could actually provide a better answer. – nsarno Nov 14 '14 at 17:22