将iOS(iPhone)应用程序移植到Mac?

37

有什么首选的方法吗?

这个应用程序不是太大……是我在几个月内编写的单人游戏。

编辑:我应该补充一下,我没有任何Mac开发经验……除了作为iOS开发人员自然而然掌握的内容。

编辑:游戏中广泛使用的类包括NSObject、UIView和UIViewController的子类。我不太了解NSView,但是我相当确定所有UIView相关的内容都可以在那个类中使用。还有一些使用UITableViewController的地方。我也有Game Center,但现在可以先不管它。没有多点触控。

编辑:我的图形都在QuartzCore和CoreGraphics框架中。我有一个适度的视图层次结构。

编辑:如果您正在进行此类移植,您可能还会对内存管理问题感兴趣。


1
你使用了哪些技术来编写游戏?你在多大程度上依赖于UIKit类/对象? - John Parker
1
请记住,尽管触摸板很方便,但触摸已不再是主要的输入方式。 - BoltClock
5个回答

25
  1. 没有捷径。简单来说,你只能努力学好Mac编程。

  2. "我很确定所有UIView的东西都会在那个类中起作用" - 不幸的是,并不是这样的。一切都有足够的不同之处,需要你付出很大的努力。

这不是一项有趣的工作。确保你认真考虑过它是否物有所值。

除此之外,如果你在iOS应用程序中堆叠了许多视图,要注意"兄弟视图在OSX上不起作用"的问题。基本上,如果你在手机上依赖嵌套视图层次结构,就必须改用图层(而不仅仅是视图)在Mac上进行更改!

点击此链接:Is there a proper way to handle overlapping NSView siblings? 了解有关该特定问题的详细信息!


是的,有时候我会忘记UIKit为你如此清晰地桥接UIView和CALayer的美妙之处。在OSX上当事情开始出问题时将视图转换为层并不好玩。 - Dave R
“兄弟视图在OSX上无法工作的问题”是什么?我做了一些谷歌搜索,但没有帮助。 - William Jockusch
好的,我猜你指的是这个问题中提到的问题。 - William Jockusch

14

4
您可能需要做很多工作。纯算法类可以不经修改就能移植,但任何涉及 UIKit 的内容都可能需要重新编写或进行大量调整。在 macOS 上,UI 类设计模式是视图之间的关系,您的代码负责管理控制器;而在 iOS 上,它是视图控制器之间的关系,其中视图管理是隐含的。
当然,正如 BoltClock 提到的那样,您还有交互问题。由于触摸不再起作用,您可能需要先处理交互模型,甚至在开始移植之前就这样做。

2

存在一个开源(BSD)UMEKit库,可以帮助移植一些UI类,但是您可能需要重写大量UI以更好地处理鼠标/键盘/多窗口/菜单GUI环境。基本的NSObjects和一些Open GL和Quartz图形渲染可能只需要进行轻微的修补即可移植。


2

就像其他人所说,移植可能会很麻烦。尽管如此,通常的技术是行得通的。您需要在Interface Builder中重新设计界面(如果适用),并检查不同控件的名称(CocoaTouch仅有少量典型的桌面控件)。UI*通常变为NS*。Tableview委托类似,因此可能很容易。

像往常一样,我要推荐Aaron Hillegass的书。这是一个非常好的Mac开发入门书籍,了解iOS开发可以让您更具优势。

由于这是一款游戏,您可能需要考虑如何进行全屏模式。游戏现在不一定再占据整个屏幕,您也不应该勉强让它占据整个屏幕。现在需要一整套新的偏好设置。当然,现在使用Snow Leopard有一些新的方法可以处理分辨率列表/更改(以前的方法会给出弃用警告),也有一些“有趣”的问题。

请接受这样一个事实:直到所有事情“无缝衔接”,可能会有一个漫长的过渡期 :)


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