适用于Windows的Objective-C

Objective-C for Windows

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

Cygwin和gcc? 有没有办法可以将它集成到Visual Studio中?

沿着这些方向 - 是否有任何关于如何链接和使用Windows SDK的建议。 它是一个不同的野兽,但我知道我可以在Windows DLL中编写汇编和链接,让我可以访问这些调用,但我不知道如何做到这一点,没有谷歌搜索和零碎的方向。

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


扩展前两个答案,如果您只想要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许可的。


您可以在Windows环境中使用Objective C.如果你按照这些步骤,它应该工作得很好:

  • 访问GNUstep网站并下载GNUstep MSYS Subsystem(MSYS for GNUstep),GNUstep Core(GNUstep的库)和GNUstep Devel
  • 下载这些文件后,按顺序安装,否则您将遇到配置问题
  • 导航到C:\GNUstep\GNUstep\System\Library\Headers\Foundation 1并确保Foundation.h存在
  • 打开命令提示符并运行gcc -v以检查GNUstep MSYS是否已正确安装(如果找不到文件错误,请确保GNUstep MSYSbin文件夹位于PATH中)
  • 使用这个简单的"Hello World"程序来测试GNUstep的功能:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <Foundation/Foundation.h>

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

    1
    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
  • 最后,在命令提示符下键入helloworld以运行它

  • 一切顺利,与Objective-C玩得开心!

    笔记:

  • 我使用了默认安装路径 - 相应地调整命令行
  • 确保您的文件夹路径与我的相似,否则您将收到错误

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

    Windows Bridge for iOS(也称为WinObjC)是一个Microsoft开源项目,为Visual Studio / Windows提供Objective-C开发环境。此外,WinObjC还支持iOS API兼容性。虽然最终版本将在今年秋季晚些时候发布(允许桥接器利用随即将推出的Visual Studio 2015更新提供的新工具功能),

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

    Salmaan Ahmed在Windows Bridge for iOS上有一篇深入的帖子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支持,从而增加了移动支持。


    也:

    The Cocotron is an open source project which aims to implement a cross-platform Objective-C API similar to that described by Apple Inc.'s Cocoa documentation. This includes the AppKit, Foundation, Objective-C runtime and support APIs such as CoreGraphics and CoreFoundation.

    http://www.cocotron.org/


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

    例子。
    Apple已将源代码发布到objective-c运行时,其中包括属性和垃圾收集。然而,Cocotron项目有自己的objective-c运行时实现。为什么要费心去复制呢?甚至还有一个Visual Studio Project文件可用于构建objc.dll文件。或者,如果你真的很懒,你可以从Windows上的Safari安装中复制DLL文件。

    他们也没有费心去利用CoreFoundation,后者也是Apple开源的。我发布了一个关于此的问题,但没有得到答案。

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


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

    随着gcc 4.6的出现,Objective-C 2.0编译器中添加了对Objective-C 2.0语言功能(块,点语法,合成属性等)的支持(有关完整详细信息,请参阅发行说明)。他们的运行时也已更新,几乎与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交织在一起。


    查看WinObjC:

    https://github.com/Microsoft/WinObjC

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


    如果您只是想进行实验,那么这里有一个针对.NET(Windows)的Objective-C编译器:qckapp


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

    open-c flite

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


    最近将Objective C 2.0移植到Windows的尝试是主观项目。

    从自述文件:

    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也有一个主题,概述了一些进展和遇到的问题。


    在这里获取GNUStep

    MINGW在这里

    安装MINGW
    安装GNUStep
    然后测试


    首先,忘掉GNUStep工具。 ProjectManager和ProjectCenter都不能称为IDE。尽管如此,看起来GNUStep项目的人们仍然坚持在80年代后期(这是NeXTSTEP首次出现时)。

    VIM

    ctags自r771起支持Objective-C(一定要选择预发行5.9版本并将--langmap=ObjectiveC:.m.h添加到命令行,请参见此处),这样您就可以获得不错的代码完成/标记导航。

    这是关于向Vim tagbar插件添加Objective-C支持的简短说明。

    Emacs的

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

    YASnippet objc-mode

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

    日食

    CDT支持基于Makefile的项目:

    enter image description here

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

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

    SlickEdit的

    SlickEdit,以及一个出色的IDE的其他功能,支持Objective-C。虽然学习起来相当复杂(虽然不像Emacs那么复杂),但我相信这是你最好的选择,只要你不介意购买它(价格相当实惠)。

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

    KDevelop的

    有传言说有一个KDevelop补丁(15岁,但谁在乎?)。我个人认为KDevelop与Emacsen相比功能更优越,所以我不打算尝试它。

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


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

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

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


    推荐阅读