5

如何将 Cocoa/Mac 应用程序移植到 Windows?我的意思是你会怎么做?假设应用程序是用 Objective-C 和 Cocoa 编写的,没有什么花哨的东西,没有可以分解的“引擎”等等。

从头重写?我认为 Mac 和 Windows 代码库之间不会有很大的重叠,对吧?

4

4 回答 4

5

我对cocotron有疑问。从 cocotron 网站上并不清楚 cocotron 实际上已经准备好生产了。我怀疑有可能开始新的应用程序开发并不断使用 cocotron 来随时维护和测试 windows 构建。但是将其改造成现有项目可能是一项更大的任务。除了 gnustep 之外,cocotron 也没有其他选择。

跨平台开发的实用方法包括一次性使用 C 或 C++ 开发应用程序的非 gui 组件。然后使用像 QT 这样的跨平台 GUI 库——它非常擅长在可能的情况下生成和使用本机 UI,或者在没有的情况下伪造它。请务必访问 qt.nokia.com 并下载适用于 windows 和 mac 的 QTCreator 的最新版本 - 查看相同的 QT 应用程序在两个平台上的外观和感觉如何非常令人信服。

如果 QT 没有提供足够原生的解决方案,那么您需要开发您的 GUI 两次:一次在 Cocoa 中,一次在 Win32 中。cocoa GUI 当然是在目标 C 中,Win32 GUI 在 C/C++ 中。

您的非 gui 应用程序代码将 - 用 c++ 编写 - 无法直接调用 Objective-C,但编写 shim 类,在 .mm 文件中实现并不难 - 提供 c++ 接口,并包装对目标 c 对象的访问或班级。

您还必须在 Windows 上想出一个 CoreData 的替代方案——也许是 sqlite?鉴于 XCode 已经集成了对 sqlite 框架的支持,并且测试多个代码路径是更多的工作 - 也许放弃 CoreData 以支持公共层是更好的方法?

于 2010-01-14T10:48:18.087 回答
2

Objective C 的问题是它在任何非 OS X 平台上的支持都很差。你可以尝试使用Cocotron,但我认为它还没有准备好生产。

为了便携性,重写是为了。明智地使用标准 C 或 C++ 作为应用程序的“核心”,您仍然可以实现特定于平台的 GUI 代码。如果你不喜欢维护两个 GUI,你也可以试试Qt之类的工具包

于 2010-01-14T06:29:28.050 回答
2

根据您为可可应用程序使用的对象和框架,您可能能够摆脱使用gnustep,尽管最终结果对于 Windows 用户来说可能看起来很奇怪,并且开发环境可能有点难以设置第一的。

于 2010-01-14T06:37:53.920 回答
1

你知道Cocotron吗?看起来这个项目可能已经过时了,但无论如何这是一个很好的起点。这是一个移植核心 API 的项目。

如果您的应用程序没有完全分离(即:la MVC),那么我认为唯一的解决方案是重写。

于 2010-01-14T06:28:40.380 回答