I read a lot of questions about creating a cross-platform library for these 2 systems. Every answer points to static library as the solution.
I don\'t want to end up
The problems you're seeing arise from the fact that TARGET_OS_IPHONE is defined as a variant of TARGET_OS_MAC. (In other words, TARGET_OS_IPHONE is a more-specific case of TARGET_OS_MAC. Or TARGET_OS_MAC is to a rectangle as TARGET_OS_IPHONE is to a square).
So the following code errors out when compiling for iOS because iOS would match both of those conditions, but NSColor is not defined for iOS.
#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#endif
The following code works properly for both because for iOS, it matches the first case, and for Mac OS X, it doesn't match the first but does match the second.
#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#endif