跨平台iOS/Mac OS X Objective-C开发?

7

我将很快开始一个中等大小的iOS项目,这是一个文档为中心的应用程序。

后来,软件可能会被移植到Mac OS X。当然,整个用户界面都需要更改;这不是我的问题。

是否有可能以跨平台(仅Mac/iOS)或更易于移植的方式编写核心逻辑?有人以前做过这样的事情吗?还是通常的做法是为两个平台编写不同的代码?

关于此事,无论是代码、框架、版本控制还是任何其他方面,我都非常感谢任何技巧和建议。我不想在事后意识到自己陷入了困境,所以我希望开始得尽可能好。


请查看此帖子:http://stackoverflow.com/questions/1939/how-to-articles-for-iphone-development-objective-c - Dave Everitt
4
你是否真正“阅读”了问题 - 那完全不相关。 - John Parker
4个回答

9
第一步是坚持MVC模式。正如您所说,视图经常需要在iOS和OS X之间进行重写,但模型层和某些控制器的部分可以被重用。
Foundation(NSArray等)和Core Data在iOS和OS X之间共享,因此编写管理模型层的通用Objective-C代码应该没有问题,例如将数据保存到磁盘,从网络检索数据等。
一个重要的点是抵制冲动,在您的视图控制器中直接处理模型层的长代码片段。那个长代码片段可以被抽象成一个仅作用于模型层的方法;然后您可以在稍后的OS X应用程序中重用该代码。
例如,假设我创建了一个管理显示文档的视图控制器。然后在与编辑操作对应的视图控制器中定义的操作方法中,我可能会直接编写进入模型层细节并实现编辑操作的代码。然后当视图控制器移植到窗口控制器(或NSDocument子类)时,我需要执行相当大的源代码更改。相反,我会在文档对象本身内实现一个特定的编辑操作方法,以便我可以在iOS应用程序中的视图控制器和OS X应用程序中的窗口控制器中都调用该方法。

嗨,你能分享一些关于这个主题的链接或者示例代码吗? - Alexander Yakovlev

3
任何纯逻辑和“模型”级别的类,只要你坚持使用Cocoa类和SQLite/Core Data等两个系统都通用的方法,就可以在iOS和Mac OS X上运行。尽管如此,iOS文件系统受到严格限制,而这并不是OS X所具有的限制,这也是你在“文档为中心”的应用程序中需要处理的问题。
然而,正如您所述,UI级别的类在两个系统上完全不同,iOS使用各种UIKit类,而OS X使用各种NS类。因此,在那个级别上,您可能无法共享太多内容。
在两个项目之间共享代码方面,您可以创建一个“通用”项目,包括低级对象等,将其作为参考添加到iOS和Mac OS X项目中,但如果事情发生分歧(我认为可能会),这可能会变得相当痛苦。无论如何,关于这个主题有一篇很好的博客文章,叫做“Easy, Modular Code Sharing Across iPhone Apps: Static Libraries and Cross-Project References”,值得一读,虽然它主要侧重于iOS方面。

2

你可以先用C语言编写代码,然后将其移植到iOS、OSX、Java、Android等平台。


1
我已经在我的一个应用程序的模型(MVC)部分完全做到了这一点。纯C在Mac Classic、OS X、iOS上运行在UI包装器内,在Android下的NDK中,在PalmOS上,在webOS上的PDK中,在Linux的命令行中等等。 - hotpaw2

2

我对此并不了解,其他人可能会知道更多。但是,如果你曾经想要将项目从iOS移植到Mac上,那么UMEKit可能会帮助你。


有趣的链接,谢谢。但是这个概念对我来说似乎是错误的:iOS触摸设备的界面限制和要求(以及可能性)以及使用案例与桌面设备如此之不同,以至于这似乎只对小型实用程序才真正合理。编辑:UMEKit解决了大多数跨平台软件的最大问题:忽视平台的本地UI。对于非常小的工具来说还可以,但超出范围就会有害了。 - fzwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接