首先,我不是Mac开发人员,也不是非常随意的Mac用户,所以请关注我的问题。
我有一个相当大的RCP应用程序,主要针对Windows和Linux,适用于两者。现在,我试图在OSX(碳x86)上运行它,我发现它看起来很丑陋,没有任何像Mac一样,使用起来很笨拙。例如,这是一个我不能直视的最简单的事情,无论我做什么,这些按钮都不会按照我希望的方式进行:这就是它在windows上的样子用于比较(相同的代码库):
。
它会削减按钮的高度,不会将它们放在正确的位置,对齐是一团糟等等。
这些只是冰山一角,可能存在更大的问题。
所以,我有两个问题:
1)我是否应该为使用RCP应用的MAC存在而烦恼?可能是死路一条,没有人真正做到了吗?毕竟苹果和java混合不多。
2)如果我这样做,我应该针对碳还是可可?对于最新的mac开发,我想展望未来。我认为中心只会选择其中一个,你会选哪一个?标准是什么?
更新
我为可可创建了分发版,所有这些奇怪的渲染问题都消失了。使用eclispe rcp 3.7。一切看起来都很完美。
答案 0 :(得分:6)
这是一个主观问题。其他人这样做吗?当然,有不同程度的投资和关怀。你应该这样做吗?我会说这取决于用户的期望和期望。
使用Cocoa。 Carbon是旧的Mac OS 9兼容API,而Cocoa是新的Mac OS X API(以前称为NextStep API。)从历史上看,Eclipse(以及SWT和RCP应用程序)仅支持Carbon,但是Eclipse 3.4中添加了Cocoa支持。 (事实证明Cocoa事件循环和SWT事件循环很难整合,但Apple邀请SWT团队到库比蒂诺坐下来让它发挥作用。)
那就是说,如果您的应用程序在两个平台之间看起来非常不同,我会感到惊讶。在一些小部件周围肯定存在一些微小的UI差异 - 特别是焦点环看起来略有不同 - 但总的来说,你应该真实地能够在Carbon或Cocoa中进行测试。但作为一种释放载体,我会使用Cocoa。
作为Eclipse插件(以及之前的RCP应用程序)上的“Mac人”,如果您决定投入一些时间来改善Mac OS体验,我可以提供一些指示:
可能值得一读Mac Human Interface Guidelines。实际上,没有人(包括Apple)将此文档视为不可破解的法律,但将Mac应用程序视为 Mac应用程序是一个良好的开端。我怀疑HIG是这么说的,但在按钮上放置图标并不是一件特别的Mac-ish事情。 (它更可能出现在工具栏中。)
Eclipse bugzilla是你的朋友。当你发现自己正在桌子上敲打着想知道Button
SWT.ARROW
IDialogConstants
为什么在Carbon上看起来不正确时,最好知道bug评论中可能有一个解决方法。此外,您有时会让人们发布可以集成的修补程序(因为作为RCP应用程序,您可以发送自己的SWT版本。)例如,Mac OS中use the proper window toolbar的功能首先出现在bugzilla中。
Mac OS应用程序倾向于使用比Windows或GTK应用程序更多的空白。如果您只是针对Windows和Linux进行开发,那么在布局中,填充和边距的大量像素只会引人注目。当您在Mac OS上运行此应用程序时,它往往看起来很奇怪并且蜷缩起来。最好根据系统建议设置边距和填充。您可以使用int marginW = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.HORIZONTAL_MARGIN);
int marginH = Dialog.convertVerticalDLUsToPixels(fontMetrics, IDialogConstants.VERTICAL_MARGIN);
int hSpacing = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.HORIZONTAL_SPACING);
int vSpacing = Dialog.convertVerticalDLUsToPixels(fontMetrics, IDialogConstants.VERTICAL_SPACING);
获取这些默认值(在DLU中),然后转换为像素。例如:
Dialog
您可能希望使用Dialog和Composite基类为您提供此功能,以便您拥有简单的访问器。
回想一下,Windows上的“确定”和“取消”按钮是从Mac OS和GTK向后退的。 M1
类处理将默认(OK,Yes,Accept等)按钮放在正确的位置。如果您开始在对话框按钮栏中添加奇怪的按钮,请务必注意SWT可能会为您重新排序。
在连接关键侦听器或加速器时,不要假设Control键。在这种情况下,Apple用户可能希望使用Command键(也就是Apple键)。对于加速器,只需使用CTRL
代替.app
。
发布时,将您的应用程序重新打包到.app
。 Mac用户希望单个.app
内有资源,他们不希望文件夹中包含plugins
和其他一些不必要的文件夹。来自Mac的PDE构建的输出看起来就像其他平台一样 - 内部有启动器的文件夹,位于features
和plugins
目录旁边。作为构建后步骤,您可以移动features
目录中的.app
和{{1}}目录,然后编辑启动程序以反映更改。 (有一个perl脚本浮动在互联网上,我想,如果不是,我可以发布一个。)