linking objective-c categories in a static library

Check out Building Objective-C static libraries with categories:

Objective-C does not define linker symbols for each function (or
method, in Objective-C) – instead, linker symbols are only generated
for each class. If you extend a pre-existing class with categories,
the linker does not know to associate the object code of the core
class implementation and the category implementation. This prevents
objects created in the resulting application from responding to a
selector that is defined in the category.

To resolve this issue, the target linking against the static library
must pass the -ObjC option to the linker.
This flag causes the linker
to load every object file in the library that defines an Objective-C
class or category. While this option will typically result in a larger
executable (due to additional object code loaded into the
application), it will allow the successful creation of effective
Objective-C static libraries that contain categories on existing
classes.


Important: For 64-bit and iPhone OS applications, there is a
linker bug that prevents -ObjC from loading objects files from static
libraries that contain only categories and no classes. The workaround
is to use the -all_load or -force_load flags.

Source: @albertamg (linking objective-c categories in a static library)

Leave a Comment