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

时间:2011-01-22 12:14:08

标签: objective-c cocoa macos ios cross-platform

我将很快启动中型iOS项目,这是一个以文档为中心的应用程序。

稍后,该软件可能会移植到Mac OS X.当然,整个UI都需要更改;那不是我要问的。

是否有可能以跨平台(仅限Mac / iOS)或更容易移植的方式编写核心逻辑?有没有人以前做过这个,或者是为两个平台编写不同代码的常用方法?

我很感谢有关此的任何提示,无论是代码,框架,版本控制 - 任何事情。我不愿意意识到我只是在事后才把自己画成一个角落,所以我想尽可能地开始。

4 个答案:

答案 0 :(得分:9)

第一步是坚持MVC模式。如您所说,视图通常需要在iOS和OS X之间进行重写,但模型层和控制器的某些部分可以重复使用。

基础(NSArray等)和核心数据在iOS和OS X之间共享,因此编写管理模型层的通用Objective-C代码应该没有问题,例如将数据保存到磁盘,从网络中检索它们等。

重要的一点是要抵制编写长代码段的冲动,该代码段主要直接在视图控制器中处理模型层。这个长期代码段可以被抽象为一个独立地作用于模型层的方法;然后您可以稍后在OS X应用程序中重用该代码。

例如,假设我创建了一个管理所显示文档的视图控制器。然后在对应于编辑操作的视图控制器中定义的动作方法中,我可以编写直接深入到模型层细节的代码并实现编辑操作。然后,当视图控制器移植到窗口控制器(或NSDocument子类)时,我需要对源代码执行相当大的更改。相反,我会在文档对象本身内部为该特定编辑操作实现一个方法,这样我就可以从iOS应用程序中的视图控制器和OS X应用程序中的窗口控制器调用该方法。

答案 1 :(得分:3)

您创建的任何纯逻辑和“模型”级别主要适用于iOS和Mac OS X,只要您坚持使用Cocoa类和SQLite / Core Data等方法即可。这两个系统都很常见。也就是说,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 Reference s”,Clint Harris值得一读,尽管它确实主要关注iOS方面的事情。

答案 2 :(得分:2)

你可以用C语言编写,然后将其移植到ios,osx,java,android,......

答案 3 :(得分:2)

我对此并不了解,其他人可能知道的更多,但如果您想将项目从iOS移植到Mac,那么UMEKit可能会帮助您......