在 macOS Sierra 上使用 clang 编译 Objective-C

Compile Objective-C with clang on macOS Sierra

我想知道如何在 macOS Sierra 上编译这段代码。

#import <Foundation/Foundation.h>

int main() {
    NSLog(@"Hello World");
    return 0;
}

在 El Capitan 上,我可以用这个命令编译。

clang -x objective-c -framework Foundation main.m

但是,当我在 Sierra 上尝试该命令时,我看到了这些错误。

In file included from main.m:1:
In file included from /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:10:
In file included from /System/Library/Frameworks/Foundation.framework/Headers/NSArray.h:5:
/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:44:12: error: unknown property attribute 'class'
@property (class, readonly) BOOL supportsSecureCoding;

这是我正在使用的 clang 版本。

$ clang -v
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin16.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

我安装了 Xcode 版本 7.3.1 (7D1014) 和 Xcode 版本 8.0 beta 4 (8S188o)。我拥有的 Sierra 版本是 10.12 beta (16A254g)。

注意:我想在 clang 的终端中编译它,而不是在 Xcode.

Objective-C 在新版本的 Clang 和 Xcode 中获得了对 class 属性的支持。在这篇文章中,您可能会找到一些有用的信息:Objective-C Class Properties.

要解决此问题,您只需安装 Xcode 8.

UPD

忘了说:

安装后确保您已将命令行工具切换到最近的 Xcode:

$ clang --version
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer
$ sudo xcode-select -switch /Applications/Xcode-beta.app/Contents/Developer/
$ xcode-select -print-path
/Applications/Xcode-beta.app/Contents/Developer
$ clang --version
Apple LLVM version 8.0.0 (clang-800.0.33.1)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

确保您选择了 Xcode 8 版本的命令行工具。