预处理器指令可以用于为 Mac 和 iOS 导入不同的头文件吗?

发布于 2024-10-14 09:54:11 字数 466 浏览 4 评论 0原文

我正在为 Mac OS X 和 iOS 编写一个类库,并将作为 OS X 的 Cocoa 框架和 iOS 的静态库发布。为了简化问题,我打算在 Xcode 中使用多个目标。然而,Mac OS X 上的类链接到 Cocoa.h,而在 iOS 上,它们链接到 Foundation.h。

我的问题基本上是:

  • Mac OS X 框架可以链接到 Foundation.framework 吗?框架内使用的类是 NSString、NSMutableString 和 NSMutableArray。
  • 或者我可以在头文件中使用预处理器指令来控制框架包含,例如

    <前><代码>#ifdef MacOSX #import#别的 #import; #endif

I am writing a class library for Mac OS X and iOS to be released as a Cocoa Framework for OS X and a Static Library for iOS. To simplify matters, I intend to use multiple targets in Xcode. However, the classes on Mac OS X link against Cocoa.h whereas on iOS they link against Foundation.h.

My questions basically are:

  • Could the Mac OS X framework link against Foundation.framework instead? Classes used within the framework are NSString, NSMutableString, and NSMutableArray.
  • Or could I use preprocessor directives within the header files to control framework inclusion, e.g.

    #ifdef MacOSX
        #import <Cocoa/Cocoa.h>
    #else
        #import <Foundation/Foundation.h>
    #endif
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

握住我的手 2024-10-21 09:54:11

您可以使用它们来分离平台相关代码(请参阅 TargetConditionals.h):

#ifdef TARGET_OS_IPHONE 
    // iOS
#elif defined TARGET_IPHONE_SIMULATOR
    // iOS Simulator
#elif defined TARGET_OS_MAC
    // Other kinds of Mac OS
#else
    // Unsupported platform
#endif

这是一个 有用的图表

You can use these to separate platform dependent code (see TargetConditionals.h):

#ifdef TARGET_OS_IPHONE 
    // iOS
#elif defined TARGET_IPHONE_SIMULATOR
    // iOS Simulator
#elif defined TARGET_OS_MAC
    // Other kinds of Mac OS
#else
    // Unsupported platform
#endif

Here's a useful chart.

风吹过旳痕迹 2024-10-21 09:54:11

它的作用就像一个魅力:

#ifdef __APPLE__
  #include "TargetConditionals.h"

  #if TARGET_IPHONE_SIMULATOR  
  // ios simulator

  #elif TARGET_OS_IPHONE
  // ios device

  #elif TARGET_OS_MAC
  // mac os 

  #else
  // Unsupported platform
  #endif
#endif

It works like a charm:

#ifdef __APPLE__
  #include "TargetConditionals.h"

  #if TARGET_IPHONE_SIMULATOR  
  // ios simulator

  #elif TARGET_OS_IPHONE
  // ios device

  #elif TARGET_OS_MAC
  // mac os 

  #else
  // Unsupported platform
  #endif
#endif
苍暮颜 2024-10-21 09:54:11
  • Mac OS X 框架可以链接到 Foundation.framework 吗?框架内使用的类是 NSString、NSMutableString 和 NSMutableArray。

尝试一下看看。如果编译失败则不行。如果成功的话,是的。

  • 或者我可以在头文件中使用预处理器指令来控制框架包含,例如

是的,可以。事实上,我相信这是实现这一目标的唯一方法。

  • Could the Mac OS X framework link against Foundation.framework instead? Classes used within the framework are NSString, NSMutableString, and NSMutableArray.

Try it and see. If the compile fails, no. If it succeeds, yes.

  • Or could I use preprocessor directives within the header files to control framework inclusion, e.g.

Yes, you can. In fact, I believe that is the only way to do that.

柠檬色的秋千 2024-10-21 09:54:11

这对我来说非常有效:

#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
//iOS 
#else
//Mac
#endif

This works perfectly for me:

#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
//iOS 
#else
//Mac
#endif
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文