231

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

Cygwin和gcc?有没有办法以某种方式将其集成到 Visual Studio 中?

沿着这些思路 - 是否有任何关于如何链接和使用 Windows SDK 的建议。它是一个不同的野兽,但我知道我可以在 Windows DLL 中编写程序集和链接,让我可以访问这些调用,但我不知道如何在没有谷歌搜索和获取零碎指示的情况下做到这一点。

有没有人知道一个很好的在线或书籍资源来做或解释这些事情?

4

14 回答 14

146

扩展前两个答案,如果您只想要 Objective-C 而不是任何 Cocoa 框架,那么 gcc 将在任何平台上工作。您可以通过 Cygwin 使用它或获取 MinGW。然而,如果你想要 Cocoa 框架,或者至少是其中一个合理的子集,那么 GNUStep 和 Cocotron 是你最好的选择。

Cocotron 实现了很多 GNUStep 没有的东西,例如 CoreGraphics 和 CoreData,尽管我不能保证它们在特定框架上的实现有多完整。他们的目标是让 Cocotron 与最新版本的 OS X 保持同步,以便任何可行的 OS X 程序都可以在 Windows 上运行。因为 GNUStep 通常使用最新版本的 gcc,它们还添加了对 Objective-C++ 和许多 Objective-C 2.0 特性的支持。

我没有用 GNUStep 测试过这些特性,但是如果你使用足够新的 gcc 版本,你也许可以使用它们。几年前我无法在 GNUStep 中使用 Objective-C++。然而,GNUStep 几乎可以从任何平台编译。Cocotron 是一个非常以 mac 为中心的项目。虽然可能可以在其他平台上编译它,但它带有 XCode 项目文件,而不是 makefile,因此您只能在 OS X 上开箱即用地编译它的框架。它还带有在 XCode 上编译 Windows 应用程序的说明,但不是任何其他平台。基本上,为 Cocotron 设置一个 Windows 开发环境可能是可能的,但它不像为 GNUStep 设置一个那样容易,而且你将独自一人,所以如果你正在开发的话,GNUStep 绝对是要走的路Windows 而不是仅适用于 Windows。

值得一提的是,Cocotron 获得了 MIT 许可,而 GNUStep 获得了 LGPL 许可。

于 2008-09-26T18:42:43.120 回答
89

可以在 Windows 环境中使用 Objective C。如果您按照以下步骤操作,它应该可以正常工作:

  1. 访问GNUstep 网站并下载GNUstep MSYS Subsystem(用于 GNUstep 的 MSYS)、GNUstep Core(用于 GNUstep 的库)和GNUstep Devel
  2. 下载完这些文件后,按顺序安装,不然配置会有问题
  3. 导航到C:\GNUstep\GNUstep\System\Library\Headers\Foundation1并确保Foundation.h存在
  4. 打开命令提示符并运行gcc -v以检查是否GNUstep MSYS已正确安装(如果您收到文件未找到错误,请确保该bin文件夹GNUstep MSYS在您的PATH.
  5. 使用这个简单的“Hello World”程序来测试 GNUstep 的功能:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
    
  6. 返回到命令提示符并返回cd到您保存“Hello World”程序的位置,然后编译它:2

    gcc -o helloworld.exe <HELLOWORLD>.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
    
  7. 最后,在命令提示符下,键入helloworld以运行它

祝一切顺利,享受 Objective-C 的乐趣!


注意事项

  1. 我使用了默认安装路径 - 相应地调整你的命令行
  2. 确保你的文件夹路径和我的相似,否则会报错
于 2012-03-24T05:04:13.457 回答
13

还:

Cocotron 是一个开源项目,旨在实现类似于 Apple Inc. 的 Cocoa 文档中描述的跨平台 Objective-C API。这包括 AppKit、Foundation、Objective-C 运行时和支持 API,例如 CoreGraphics 和 CoreFoundation。

http://www.cocotron.org/

于 2008-09-11T18:26:08.377 回答
13

WinObjC?适用于 iOS 的 Windows Bridge(以前称为“Project Islandwood”)。

适用于 iOS 的 Windows Bridge(也称为 WinObjC)是一个 Microsoft 开源项目,它为 Visual Studio/Windows 提供了一个 Objective-C 开发环境。此外,WinObjC 提供了对 iOS API 兼容性的支持。虽然最终版本将在今年秋天晚些时候发布(允许桥利用即将到来的 Visual Studio 2015 更新附带的新工具功能),

该桥现在以当前状态可供开源社区使用。从现在到秋天。iOS 桥作为 MIT 许可下的开源项目。鉴于该项目的雄心壮志,让 iOS 开发人员可以轻松地在 Windows 上构建和运行应用程序。

Salmaan Ahmed 有一篇关于 iOS 版 Windows 桥的深入文章http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/讨论了编译器、运行时、IDE 集成以及桥是什么和不是什么。最重要的是,iOS 桥的源代码现在在 GitHub 上。

iOS 桥支持为 x86 和 x64 处理器架构构建的 Windows 8.1 和 Windows 10 应用程序,很快我们将添加编译器优化和对 ARM 的支持,从而增加移动支持。

于 2015-08-10T21:12:24.233 回答
9

我对 Cocotron 项目的感受很复杂。我很高兴他们发布源代码和共享,但我不觉得他们做事的方式最简单。

例子。
Apple 已经发布了Objective-C 运行时的源代码,其中包括属性和垃圾回收。然而,Cocotron 项目有自己的 Objective-C 运行时实现。为什么要重复努力?甚至还有一个可用于构建 objc.dll 文件的 Visual Studio 项目文件。或者,如果您真的很懒,您可以从 Windows 上安装的 Safari 复制 DLL 文件。

他们也没有费心利用同样由 Apple 开源的 CoreFoundation。我发布了一个关于此的问题,但没有收到答案。

我认为目前最好的解决方案是从多个来源(Apple、CocoTron、GnuStep)获取源代码并将其合并到您需要的地方。您将不得不阅读大量源代码,但最终结果将是值得的。

于 2009-11-05T20:01:51.487 回答
8

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

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

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

但是,如果您愿意在没有 Apple 广泛的框架的情况下生活,那么您可以。如其他答案所述,GNUStep 和 Cocotron 提供了 Apple 类库的修改版本,或者您可以编写自己的(我的首选)。

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 (etc, additional flags, see documentation)

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

g++ -mwindows MyFile.cpp

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

于 2012-10-12T03:48:44.343 回答
7

查看WinObjC

https://github.com/Microsoft/WinObjC

这是 Microsoft 的一个官方开源项目,与 Visual Studio + Windows 集成。

于 2015-11-03T16:24:23.883 回答
6

如果你只是想试验一下,这里有一个用于 .NET (Windows) 的 Objective-C 编译器:qckapp

于 2010-07-20T23:08:26.783 回答
5

您可以在此处获得一个可与 Windows 配合使用并与 Visual Studio 2008\2010 配合使用的目标 c 编译器。

开放-c flite

只需下载最新的源代码。您不需要构建所有的 CF-Lite,有一个名为 objc.sln 的解决方案。您将需要修复一些包含路径,但它会构建得很好。甚至还包括一个测试项目,因此您可以看到一些 Objective-c .m 文件正在编译并在 Visual Studio 中工作。一件可悲的事情是它只适用于 Win32 而不是 x64。需要为 x64 编写一些汇编代码才能支持它。

于 2011-08-27T22:48:54.773 回答
3

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

从自述文件:

主观是试图将具有 ARC 支持的 Objective C 2.0 引入 Windows。

该项目是 objc4-532.2 的一个分支,objc4-532.2 是 OS X 10.8.5 附带的 Objective C 运行时。该端口可以在 OS X 上使用 llvm-clang 与 MinGW 链接器进行交叉编译。

存在某些限制,其中许多是额外工作的问题,而其他一些限制,例如异常和块,则取决于 3rd 方项目中更严肃的工作。限制是:

• 仅 32 位 - 64 位正在进行中

• 仅静态链接 - 动态链接正在进行中

• 没有闭包/阻塞——直到 libdispatch 在 Windows 上支持它们

• 没有例外 - 直到 clang 在 Windows 上支持它们

• 没有老式 GC - 直到有人关心...

• 内部:没有 vtables,没有 gdb 支持,只有普通的 malloc,没有预优化——其中一些东西将在 64 位构建下可用。

• 目前需要修补的clang 编译器。该补丁添加了 -fobjc-runtime=subj 标志

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

于 2014-06-01T15:23:36.810 回答
2

在此处获取 GNUStep

在这里获取 MINGW

安装 MINGW 安装 GNUStep 然后测试

于 2014-12-20T13:53:42.777 回答
0

如果您对 Visual Studio 环境感到满意,

小项目:jGRASP 和 gcc 大项目:Cocotron

我听说有模拟器,但我只能找到 Apple II Emulator http://virtualapple.org/。看起来仅限于游戏。

于 2016-02-28T01:34:28.813 回答
0

首先,忘记GNUStep工具。ProjectManagerProjectCenter都不能称为 IDE。恕我直言,来自GNUStep项目的人似乎被困在 80 年代后期(那是NeXTSTEP首次出现的时候)。

维姆

ctags从r771开始支持 Objective-C (一定要选择预发布的 5.9 版本并添加--langmap=ObjectiveC:.m.h到命令行,请参见此处),因此您将拥有不错的代码完成/标签导航。

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

Emacs

这同样适用于etags现代 Emacsen,因此您可以从 Emacs Objective C Mode开始。YASnippet将提供有用的模板:

YASnippet objc 模式

如果你想要比基本的基于标签的代码完成更智能的东西,看看这个问题

CDT支持Makefile基于 - 的项目:

在此处输入图像描述

-- 所以从技术上讲,您可以开箱即用地构建您的 Objective-C 项目(在 Windows 上,您需要CygwinMinGW工具链)。唯一的问题是代码编辑器会针对它认为是纯C代码的内容报告大量错误(可以关闭动态代码检查,但仍然......)。如果您想要正确的语法突出显示,您可以将Eclim添加到您的Eclipse中,并享受EclipseVim的所有优秀特性(见上文)。

另一个有前途的Eclipse插件是Colorer,但它还不支持 Objective-C。不过,请随时提交功能请求。

光滑编辑

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

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

KDevelop

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


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

于 2016-03-01T10:51:02.550 回答
0

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

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

于 2022-02-21T14:50:40.623 回答