MonoTouch似乎是iPhone开发的绝佳平台,但我担心将其部署到Apple Store。目前有哪些使用它构建的应用程序可在iTunes上使用的示例吗?
我们正在为iPhone启动一个新项目,保持整个堆栈在C#中会很棒,但我们不想因为MonoTouch而被苹果商店拒绝。
我已经阅读了关于几款使用mono(不是MonoTouch)进行3D图形的游戏,但找不到任何关于MonoTouch的信息。
MonoTouch似乎是iPhone开发的绝佳平台,但我担心将其部署到Apple Store。目前有哪些使用它构建的应用程序可在iTunes上使用的示例吗?
我们正在为iPhone启动一个新项目,保持整个堆栈在C#中会很棒,但我们不想因为MonoTouch而被苹果商店拒绝。
我已经阅读了关于几款使用mono(不是MonoTouch)进行3D图形的游戏,但找不到任何关于MonoTouch的信息。
我用手机输入,所以表达可能有些简略 - 对此表示歉意。
总之:
- 如前面的回答所述,已经有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这并不意味着只要你设计得正确就能保证你的应用被接受(许多应用程序因无法解释的原因被拒绝),但你可以认为自己与使用苹果工具的开发者处于同等地位。
希望这有所帮助 :)
游戏开发平台 Unity 使用了相同的 Mono Touch 代码库来支持 C#(并为项目做出了贡献)。