创建iOS/OS X跨平台类

创建iOS/OS X跨平台类,ios,objective-c,macos,cocoa-touch,cocoa,Ios,Objective C,Macos,Cocoa Touch,Cocoa,我读了很多关于为这两个系统创建跨平台库的问题。每个答案都指向静态库作为解决方案 我不想以一个静态库结束,我想创建一个包含iOS方法和OSX对应方法的类 -(void)createColor:(NSColor*); -(void)createColor:(UIColor*); 我遇到的第一个问题是,我找不到一种方法来使用仅在特定系统中可用的类。例如,我如何管理一个在iOS中使用UIColor和在OSX中使用NSColor的函数 如果我为iOS创建一个项目,当我查看基础。h,我在标题列表中找不到N

我读了很多关于为这两个系统创建跨平台库的问题。每个答案都指向静态库作为解决方案

我不想以一个静态库结束,我想创建一个包含iOS方法和OSX对应方法的类

-(void)createColor:(NSColor*);
-(void)createColor:(UIColor*);
我遇到的第一个问题是,我找不到一种方法来使用仅在特定系统中可用的类。例如,我如何管理一个在iOS中使用UIColor和在OSX中使用NSColor的函数

如果我为iOS创建一个项目,当我查看基础。h,我在标题列表中找不到NSCOLL.H。 我想用TARGET_OS_MAC和TARGET_OS_IPHONE的定义来区分这两个系统。。。我走对了吗

编辑以添加更多信息:

目前我有两个目标:iOSTestApp和OSxTestApp。对于这些目标,我已经根据系统包括了所需的框架

使用TARGET_OS_MAC和TARGET_OS_IPHONE只有在我选择OSXTestApp作为活动目标时才起作用。当我选择iOSAppTest时,Xcode返回OSX数据类型的错误,即NSColor

下面是产生这些错误的代码示例:

#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;    

#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#endif
#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;

#endif
而如果我颠倒定义,它会起作用。。。 下面是产生这些错误的代码示例:

#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;    

#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#endif
#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;

#endif

您谈论的两个定义被设置为1或0,这取决于您编译的目的!在汇编时

我想你在这条路上是对的

e、 g


你所看到的问题源于这样一个事实,即TARGET_OS_IPHONE被定义为TARGET_OS_MAC的变体。换句话说,TARGET_OS_IPHONE是TARGET_OS_MAC的一个更具体的例子。或者TARGET_OS_MAC是矩形,就像TARGET_OS_IPHONE是正方形一样

因此,以下代码在为iOS编译时出错,因为iOS将匹配这两个条件,但没有为iOS定义NSColor

#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;    

#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#endif
以下代码适用于这两种情况,因为对于iOS,它与第一种情况匹配;对于Mac OS X,它与第一种情况不匹配,但与第二种情况匹配

#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;

#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;

#endif

对于UIColor/NSColor,我的处理方式如下:

#if TARGET_OS_IPHONE
#define ImageClassName UIImage
#else
#define ImageClassName NSImage
#endif
然后,在头文件中,如果只是传递实例,则可以使用例如ImageClassName*


当您需要使用UIColor/NSColor API时,在代码中重复if块。

回答您需要IOS的静态库-您的问题的其余部分我不明白,我无法理解否决票。无论如何,我不想创建一个动态库。。。如果我告诉你我想创建一个Helper类多平台,这听起来会更好吗?因为这个问题对我来说真的不清楚,你的评论也没有帮助:D标题是创建一个非静态库,而你说我不想要动态库:D你想过改用CGColor吗?如果您只是编写类似的方法,那么为每个目标编写和维护单独的文件可能会更容易。@PaulArmstrong no help^^^这只是一个示例!