在Windows平台上编写Objective-C的最佳方法是什么?

Cygwin和gcc?有没有办法我可以以某种方式将它集成到Visual Studio?

沿着这条线-关于如何链接和使用Windows SDK来做这样的事情有什么建议吗?这是一个不同的野兽,但我知道我可以在Windows dll中编写汇编和链接,让我可以访问这些调用,但我不知道如何做到这一点,除非谷歌和得到零碎的方向。

有人知道有好的网络或书籍资源来做或解释这些事情吗?


当前回答

截至2021年,GNUstep Windows MSVC工具链允许在任何Windows应用程序中集成Objective-C代码,包括使用LLVM/Clang的Visual Studio项目。这包括对自动引用计数(ARC)和Objective-C 2.0特性的支持,比如块。

该项目包括来自GNUstep的Foundation、CoreFoundation和libdispatch库。它目前不包括任何UI框架,如AppKit或UIKit,但它可以用来编写特定于windows的UI,使用Objective-C编写的跨平台业务逻辑。

其他回答

首先,忘记GNUStep工具。ProjectManager和ProjectCenter都不能被称为IDE。恕我直言,GNUStep项目的人似乎还停留在80年代末(那是NeXTSTEP首次出现的时候)。

Vim

ctags从r771开始就支持Objective-C(请务必选择预发布的5.9版本,并在命令行中添加——langmap=ObjectiveC:.m.h,见这里),因此您将拥有良好的代码完成/标记导航。

下面是一个简短的如何将Objective-C支持添加到Vim标记栏插件。

Emacs

这同样适用于现代Emacsen附带的标签,所以您可以从Emacs Objective C Mode开始。YASnippet将提供有用的模板:

如果您想要比基本的基于标记的代码补全更智能的方法,可以看看这个问题。

Eclipse

CDT支持基于makefile的项目:

从技术上讲,你可以开箱即用地构建你的Objective-C项目(在Windows上,你需要Cygwin或MinGW工具链)。唯一的问题是代码编辑器会报告大量错误,而不是它认为的纯C代码(动态代码检查可以关闭,但仍然……)如果希望正确地突出显示语法,可以将Eclim添加到Eclipse中,并享受Eclipse和Vim的所有优秀特性(参见上面)。

另一个很有前途的Eclipse插件是colororer,但它目前还不支持Objective-C。您可以随意提交功能请求。

光滑编辑

SlickEdit,在一个优秀IDE的其他特性中,确实支持Objective-C。虽然它学习起来相当复杂(虽然没有Emacs复杂),但我相信这是您最好的选择,前提是您不介意购买它(价格相当合理)。

此外,它还有一个Eclipse插件,可以作为独立编辑器的替代品。

KDevelop

有传言说存在一个KDevelop补丁(15年了,但谁在乎呢?)我个人并不认为KDevelop在功能上优于Emacsen,所以我不会费心去尝试它。


以上也适用于Linux上的Objective-C开发,因为所有提到的工具或多或少都是可移植的。

最近一个将Objective C 2.0移植到Windows的尝试是Subjective项目。

自述:

Subjective is an attempt to bring Objective C 2.0 with ARC support to Windows. This project is a fork of objc4-532.2, the Objective C runtime that ships with OS X 10.8.5. The port can be cross-compiled on OS X using llvm-clang combined with the MinGW linker. There are certain limitations many of which are a matter of extra work, while others, such as exceptions and blocks, depend on more serious work in 3rd party projects. The limitations are: • 32-bit only - 64-bit is underway • Static linking only - dynamic linking is underway • No closures/blocks - until libdispatch supports them on Windows • No exceptions - until clang supports them on Windows • No old style GC - until someone cares... • Internals: no vtables, no gdb support, just plain malloc, no preoptimizations - some of these things will be available under the 64-bit build. • Currently a patched clang compiler is required; the patch adds -fobjc-runtime=subj flag

该项目可在Github上使用,在Cocotron Group上也有一个线程概述了一些进展和遇到的问题。

你可以在这里得到一个objective - c编译器,它可以在Windows上工作,并且在Visual Studio 2008\2010上运行良好。

open-c争吵

只需下载最新的源代码。你不需要构建所有的CF-Lite有一个解决方案叫做objc.sln。您将需要修复一些包括路径,但它将构建良好。甚至还包含了一个测试项目,这样你就可以看到一些objective-c .m文件正在visual studio中编译和工作。可悲的是,它只适用于Win32而不是x64。需要为x64编写一些汇编代码来支持它。

在这里获取GNUStep

点击这里获取MINGW

安装MINGW 安装GNUStep 然后测试

我知道这是一个非常老的帖子,但我已经找到了一个解决方案,它是最近才可用的,并且可以在Windows平台上实现几乎所有Objective-C 2.0功能。

随着gcc 4.6的出现,对Objective-C 2.0语言特性(块、点语法、合成属性等)的支持被添加到Objective-C编译器中(详见发行说明)。它们的运行时也经过了更新,几乎与苹果自己的Objective-C 2.0运行时完全相同。简而言之,这意味着(几乎)任何可以在Mac上合法地使用Clang编译的程序也可以不经修改地使用gcc 4.6编译。

作为旁注,一个不可用的功能是字典/数组/等字面量,因为它们都是硬编码到Clang中使用苹果的NSDictionary, NSArray, NSNumber等类。

然而,如果你愿意在没有苹果广泛框架的情况下生活,你也可以。 正如在其他回答中提到的,GNUStep和Cocotron提供了苹果类库的修改版本,或者你也可以编写自己的类库(我的首选)。

MinGW是在Windows平台上获得GCC 4.6的一种方式,可以从MinGW网站下载。确保在安装时包含了C, c++, Objective-C和objective - c++的安装。虽然是可选的,但我也建议安装MSYS环境。

一旦安装,Objective-C 2.0源代码可以编译:

gcc MyFile。M -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname(等,其他标志,见文档)

MinGW还支持使用-mwindows标记编译本地GUI Windows应用程序。例如:

g++ -mwindows MyFile.cpp

我还没有尝试过,但我想如果你在尽可能高的层用objective - c++包装你的Objective-C类,你应该能够成功地在一个Windows应用程序中交织本机Windows GUI c++和Objective-C。