MonoTouch是否是iPhone开发的可行平台?

17

MonoTouch似乎是iPhone开发的绝佳平台,但我担心将其部署到Apple Store。目前有哪些使用它构建的应用程序可在iTunes上使用的示例吗?

我们正在为iPhone启动一个新项目,保持整个堆栈在C#中会很棒,但我们不想因为MonoTouch而被苹果商店拒绝。

我已经阅读了关于几款使用mono(不是MonoTouch)进行3D图形的游戏,但找不到任何关于MonoTouch的信息。


似乎是重复的问题:https://dev59.com/L3I-5IYBdhLWcg3w-9wK - David Webb
似乎该问题的主要焦点是比较拥有Monotouch和学习Obj-C的成本。我的重点在于Monotouch的实际应用。我理解它们的相似之处,但我认为答案会有所不同。 - Eduardo Scoz
关于这个的坏消息:https://dev59.com/jnE85IYBdhLWcg3wzW3M - Mauricio Scheffer
3个回答

55

我用手机输入,所以表达可能有些简略 - 对此表示歉意。

总之:

- 如前面的回答所述,已经有MonoTouch应用发行到应用商店。不管是两个还是很多,都不太重要。1和0之间的差别是无限的 - 答案毫不含糊:是的,苹果将批准MonoTouch应用。

- MonoTouch遵守苹果的规则。它生成本地二进制文件。代码没有任何解释或JIT编译。你的MonoTouch应用程序像其他任何捆绑包一样,并且包含本机二进制文件。

- 与使用Apple的堆栈编写的应用程序相比,MonoTouch应用程序更大。这是因为你的MonoTouch应用程序依赖于Mono/.Net框架的一个子集。但就这方面而言,一旦降至实际交付的内容,MonoTouch应用程序并没有什么特别之处。我曾在一家公司工作过,在那里我们使用自定义框架构建应用程序(使用苹果的堆栈进行开发)。尽管这会增加应用程序的大小,但同时也大大缩短了生产时间(这通常是一个权衡考虑)。而且,编译后的应用程序捆绑包的大小可能是具有误导性的。因为App Store将捆绑包压缩,所以大小会大幅度减小 - 你可以轻松地编写一个MonoTouch应用程序,其大小远远在OTA交付的应用程序的可接受大小限制之内(我提出这个问题是因为MT n0obs通常会问到这个问题,这是正确的)。因此,苹果没有任何真正的理由基于大小拒绝审核。

- 无论是MonoTouch还是像我曾经使用/开发的自定义内部框架,当与你的应用程序一起发布时,MonoTouch的东西只是可以用Objective-C编写的另一个框架而已。

如果你关心使用整个MonoTouch堆栈配置应用程序并且担心这会影响你的批准机会,那么你可以告诉MonoDevelop(或者从命令行使用mtouch实用程序)输出Xcode项目。你会发现你的代码已经被转换 - 你将看到本地汇编代码(而不是某种IL语言的变体)。你可以从Xcode中构建和运行你使用MonoTouch生成的应用程序,此时MonoTouch基本上已经退出了画面(除了作为你正在构建的框架之一(例如MapKit))。

由于某种原因,所有这些都让一小部分声音很大的iPhone开发人员感到困扰,他们无法忍受他们不认识的人使用不同的工具来构建应用程序的想法。但是他们的仇恨并不能改变这个简单的事实,即苹果公司已经接受了MonoTouch应用程序(在此之前还有Unity应用程序)。

你将看到MT应用程序被拒绝的最大原因是,在我的经验中,MT开发人员(我与很多人交流过 - 在发表演讲、发布论坛帖子、邮件列表、这里等等之后...)还没有学会如何开发一个iPhone应用程序。这是所有iPhone开发人员必须做的,无论他们如何编写他们的应用程序。MonoTouch并不是障碍 - 知道苹果公司想要您的应用程序看起来某种方式并且按照某种方式工作 - 它应该看起来、感觉和行为像其他(好的)iPhone应用程序,并且不应该是尝试为电话编写桌面应用程序的示例(这是平均开发人员在过渡到移动开发时犯的第一个错误)。

最终,只要你的选择工具创建的位符合苹果公司的规则(如MonoTouch),你选择的工具并不重要。真正的障碍是学习iPhone应用程序的设计方式。

.Net应用程序开发人员,无论是在Windows、Windows Mobile还是Mono(而不是MonoTouch)运行的任何地方,都习惯于根据自己的口味开发应用程序。但在iPhone世界中,这种做法是不被允许的。

你可以放心使用MonoTouch。正如已经显示的那样,苹果公司批准MT应用程序。

无论选择哪种开发技术,你都需要做的事情是阅读苹果关于iPhone应用设计和指南的文档(read Apple's docs on iPhone app design and their guidelines)。很多开发者把他们的应用被苹果拒绝归咎于苹果的恶意行为(或其他无知的借口),但事实上,他们的应用很差并且很明显这些开发者没有遵守规则(甚至没有读过规则)。

在很多情况下,使用MonoTouch会写更少的代码,而代价是一个更大的应用程序包(当然,一旦将其压缩以进行分发,大小就会非常合理)。

这不是什么大问题。对于3g用户来说,下载大小在2-3MB左右的应用程序已经很正常了。如果足够小可以通过OTA发送,那就没什么问题了。而在应用程序超过限制的情况下,很可能是嵌入资源(媒体-图像、视频等-这是导致应用程序包膨胀到仅支持Wifi的大小的常见原因),这也是Objective-C开发者必须处理的问题,所以这不是MonoTouch的问题。

因此,请忽略那些(从未尝试过MonoTouch或没有费心学习它如何工作的)批评者,并确保只要你的应用符合苹果的指南,他们就没有理由拒绝它。no这并不意味着只要你设计得正确就能保证你的应用被接受(许多应用程序因无法解释的原因被拒绝),但你可以认为自己与使用苹果工具的开发者处于同等地位。

希望这有所帮助 :)


Rory,非常感谢你的回答!对我来说这太完美了:对于Monotouch现状的良好分析以及平台方面的权衡。 - Eduardo Scoz
6
关于您对构建一个“好”的iPhone应用程序的评论,我想说,与使用Monotouch构建的应用程序一样,有很多可怕的Obj-c iPhone应用程序。只是当创建出漂亮的应用程序时,这些糟糕的应用程序通常会被遗忘。目前为止,还没有一个漂亮的Monotouch应用程序的例子,因此人们批评它,并责怪.Net团队不理解平台(无论这是否属实)。我相信,只要人们花更多时间用Monotouch开发美观的应用程序,那么Monotouch就会吸引更多人的兴趣。 - chrisntr
Chirsntr,完全同意您的评论。一个担忧是,Monotouch可能不允许进行与obj-c相同的定制(而无需跳转到obj-c),但从我目前所见,似乎并非如此。 如果您在这方面有更多经验,我很想知道。 - Eduardo Scoz
@bpapa - 我已经回复了你的另一个评论。在这里,我想建议你在发表意见之前先学习一下MonoTouch及其工作原理。胡扯是没有问题的 - 谈论技术很有趣,而极客们以自己为专家而闻名(我也包括在内)。然而,你显然有偏见,而且是无知的。如果StackOverflow的目的是回答问题,那么像你这样的评论是适得其反的,会让问题更加混乱。如果你个人不喜欢MT(似乎是这种情况),那么你至少应该在发表意见之前了解一下它。 - Rory Blyth
15
你称这为简洁?哇,你的拇指真强 :-) - Torben Gundtofte-Bruun
显示剩余2条评论

10

MonoTouch社区正在维护一个使用MonoTouch编写并可在Apple Store上下载的应用程序列表


4
自框架发布不到两个月就有两款应用获得了AppStore的批准。你再说一遍你的观点是什么? - Yann Schwartz
3
你的意思是指"可行"是指"发布一个月后他们没有在应用商店上拥有数百万个应用程序,这是怎么敢的"还是指"苹果是否会禁止Monotouch应用程序?",就像问题所暗示的那样?你知道,在回答问题之前实际阅读问题。 - Yann Schwartz
3
即使只有一款应用程序证实了苹果会批准 MonoTouch 应用程序,而第二个应用程序的出现使得这则消息好处加倍。至于你提出的 Hasbro 问题 - 显然与技术无关。是的,网球游戏似乎没有充分利用手机的功能,但是看起来已经快要发布的 ArtNotes 则更多地利用了该平台。考虑到前8000个使用 Objective-C 的 iPhone 应用程序都是“手电筒”,我认为这不是一个坏的开始。 - Rory Blyth
1
@bpapa - 这 确实 证实了 Apple 接受 MonoTouch 应用程序。他们 已经 接受了,这是证实的。你所争论的是 MT 应用程序可能会被拒绝,这是正确的 - 就像其他遵循规则的应用程序一样,MT 应用程序也有可能被拒绝 - 还包括(事实上几乎全部)由苹果自己创建的每个开发堆栈创建的应用程序。基于你对 PhoneGap 的比较,称其为“类似产品”,我可以告诉你,你不理解 MT 的工作原理。PhoneGap 基本上只是生成加强版书签 (在 iPhone 的情况下是封装在 Xcode 项目中的 Web 应用程序)。 - Rory Blyth
1
@bpapa - 很容易得出结论,你不理解MonoTouch(如果你好奇的话,是完全缺乏实质性批评让我想到了这一点(还有你将其与PhoneGap进行比较,这表明你对MonoTouch(或者也许是PhoneGap(或两者都不懂))并不了解)。如果你说的不是(我在这里是在转述)“应用程序有时会被拒绝”,那么你的论点可能会……嗯,成为一个论点。虽然我在我的四个评论中浪费了很多网络资源,但如果你没有带着毫无意义的回答出现,我也不会发表这些评论。 - Rory Blyth
显示剩余16条评论

3

游戏开发平台 Unity 使用了相同的 Mono Touch 代码库来支持 C#(并为项目做出了贡献)。


没错,这就是我所说的“单声道游戏”。我忘记了平台的名称。 我想这证明了苹果对于单声道编译器没有问题,但这并不能说明它对触摸界面的绑定是否有问题。 - Eduardo Scoz
它们不会编译成CL,因为这是苹果不允许的。根据Monotouch文档,它们会绑定到所有iPhone API。 - Oded
@Oded - 绑定非常全面,您可以轻松创建新的绑定(包括对您自己的库的绑定,这非常酷,并显示了MT的灵活性)。他们尚未绑定的一件事是CoreData,但这是一个超出简单绑定范围的挑战。要做好CoreData,您还需要与Apple的CoreData工具一起使用。一个普遍的问题是混合.Net和ObjC类型。我有一些想法,但这仍然是一个相当复杂的任务。否则,是的:MT带有大量绑定和手动或使用工具创建您自己的绑定的方法 :) - Rory Blyth

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