在Windows平台上编写Objective-C的最佳方法是什么?
Cygwin和gcc?有没有办法我可以以某种方式将它集成到Visual Studio?
沿着这条线-关于如何链接和使用Windows SDK来做这样的事情有什么建议吗?这是一个不同的野兽,但我知道我可以在Windows dll中编写汇编和链接,让我可以访问这些调用,但我不知道如何做到这一点,除非谷歌和得到零碎的方向。
有人知道有好的网络或书籍资源来做或解释这些事情吗?
在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。