jww*_*jww 12 preprocessor ios c-preprocessor watchkit watchos-2
我正在看Apple的Lister(Apple Watch,iOS和OS X)样本.该示例对iOS和OS X执行测试:
#import <TargetConditionals.h>
#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
@import ListerKit;
#elif TARGET_OS_MAC
@import ListerKitOSX;
#endif
Run Code Online (Sandbox Code Playgroud)
但是,没有测试TARGET_OS_WATCH或类似.Grepping for watchin TargetConditionals.h不会发出命中:
$ cat /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
/SDKs/iPhoneOS7.1.sdk/usr/include/TargetConditionals.h | grep -i watch
$
Run Code Online (Sandbox Code Playgroud)
从TargetConditionals.h,我知道有:
These conditionals specify in which Operating System the generated code will
run. The MAC/WIN32/UNIX conditionals are mutually exclusive. The EMBEDDED/IPHONE
conditionals are variants of TARGET_OS_MAC.
TARGET_OS_MAC - Generate code will run under Mac OS
TARGET_OS_WIN32 - Generate code will run under 32-bit Windows
TARGET_OS_UNIX - Generate code will run under some non Mac OS X unix
TARGET_OS_EMBEDDED - Generate code will run under an embedded OS variant
of TARGET_OS_MAC
TARGET_OS_IPHONE - Generate code will run under iPhone OS which
is a variant of TARGET_OS_MAC.
TARGET_IPHONE_SIMULATOR - Generate code for running under iPhone Simulator
问题:Apple手表有预处理器吗?
我正在使用ios进行标记,但我不确定这个问题的操作系统是否正确.
下面的列表是从iPhone编译的TargetConditionals.h.模拟器和OS X类似(它们只有不同的位设置为1):
#define TARGET_OS_MAC 1
#define TARGET_OS_WIN32 0
#define TARGET_OS_UNIX 0
#define TARGET_OS_EMBEDDED 1
#define TARGET_OS_IPHONE 1
#define TARGET_IPHONE_SIMULATOR 0
Run Code Online (Sandbox Code Playgroud)
问题:手表是否使用TARGET_OS_EMBEDDED?手表是否省略 TARGET_OS_IPHONE?
ler*_*mjs 20
从watchOS 2.0开始,您可以在手表上运行本机代码,因此这是一个更相关的问题.
我正在使用watchOS 2的第一个早期测试版,所以这可能会改变,但是现在,TARGET_OS_WATCH在watchOS上设置为1.
(另外,注意:TARGET_OS_IPHONEwatchOS上也设置为1,但是TARGET_OS_IOS为0.)
Sar*_*den 17
您可以在TargetConditionals.h中找到所有类型的目标条件(cmd + shift + o并键入TargetConditionals.h).
在此列表中,您可以找到这样的列表以及更多有用的定义.目前它确实包含自WatchOS 2以来的TARGET_OS_WATCH.对于WatchOS 1,无法在手表上运行自定义代码,因此当时所有内容都在手机上运行.
#define TARGET_OS_MAC 1
#define TARGET_OS_WIN32 0
#define TARGET_OS_UNIX 0
#define TARGET_OS_IPHONE 1
#define TARGET_OS_IOS 0
#define TARGET_OS_WATCH 1
#define TARGET_OS_TV 0
#define TARGET_OS_SIMULATOR 0
#define TARGET_OS_EMBEDDED 1
Run Code Online (Sandbox Code Playgroud)
迅捷加法
#if os(watchOS)
[Watch code]
#else
[Code for iOS, appleTV, or any else clause]
#endif
Run Code Online (Sandbox Code Playgroud)
其他一些有效值:iOS,OSX,tvOS
关于这个和更多的一个小解释http://nshipster.com/swift-system-version-checking/
在本文档的底部 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_15#Build配置下的在"构建配置"部分,您可以找到(希望)最新列表,其中包含当前可用的所有这些值
没有WatchKit或app扩展目标条件.但是您可以以相同的方式创建自己的每个目标条件.
如果您查看任何目标的"构建设置"部分,则会出现一个名为"其他C标志"的部分.添加WatchKit目标的条目.如果你添加类似的东西-DMY_WATCHKIT_FLAG=1,你可以#if MY_WATCHKIT_FLAG在代码中做.
自定义标志,自定义.苹果可能会在未来添加一个标志,TARGET_WATCH_APP或类似的东西,这并非不可能.在标志名称上使用前缀使其特定于您.
| 归档时间: |
|
| 查看次数: |
7242 次 |
| 最近记录: |