6

我计划为我们的在线 webapps 创建一个 iPhone 应用程序版本。我还是 iPhone 应用程序开发的新手,所以我不知道是选择 iPhone 原生还是在 iPhone 浏览器上运行的 webapps。

这个要求实际上是非常基本的。iPhone 应用程序需要提交数据并从 Web 应用程序也使用的数据库中获取数据。用户将拥有对 webapps 的相同访问权限,只是我希望这特定于 iPhone,因为使用 webapps 和 iPhone 应用程序的用户体验会有所不同。我也有兴趣在 Apple Store 上销售该应用程序。

根据您的经验,对于这种需求,iPhone 原生或 web 应用程序哪个更好?构建在 iPhone 浏览器上运行的原生 iPhone 应用程序和 Web 应用程序有哪些缺点?另外,我是否仅限于 Objective-C 来构建原生 iPhone 应用程序?或者有没有其他框架呢?

请对我温柔一点,我不是在发动一场激烈的战争。

4

3 回答 3

6

你可以吃蛋糕也可以吃。

您可以通过使用实例轻松地混合 Web 和原生应用程序UIWebView,例如在 Cocoa/Objective-C 代码中实现对性能敏感的部分,并将 WebKit 视图插入到将过于耗时而无法重写为原生应用程序的部分中。

如果您想要 App Store 分发,您甚至可以将整个 Web 应用程序包装在本机包中 - 请参阅PhoneGap

如果用户将您的页面添加到他的主屏幕,您还可以开发看起来不像是通过 Safari 启动的纯 Web 应用程序- 请参阅jQTouch

缺点:

Web 应用程序可能没有原生应用程序那么快,尽管借助 HTML5 离线支持和 WebKit 特定的扩展(如过渡和动画),您可以走得更远。确保使用触摸事件- Safari 延迟onclick

很难让纯 Web 应用程序感觉像适当的原生应用程序。例如,移动 WebKit 不支持position:fixed需要复制顶部导航栏,并且 Web 视图的滚动速度与表格视图不同。它是可修复的,但需要大量的 JavaScript。

好处:

快速发展。当我不得不在UIViews 中复制应用程序时,我真的很欣赏 CSS/HTML 对复杂布局的有用性(InterfaceBuilder 仅适用于半固定布局)。

你可以避免苹果突然讨厌和禁止另一件事。如果他们从 AppStore 中删除您的应用,您可以让用户通过网络访问它(谷歌通过 Voice 和 Latitude 应用做到了这一点)。

将网络应用程序移植到 Android 和其他(WinMo、HP Pre、最新的 BlackBerries 等)更容易。Apple 排名第一,但其思想份额与市场份额不成正比。其他人正在迎头赶上。

如果你选择原生

你必须按照 Apple 的方式来做:Objective-C 和 Cocoa(你可以用纯 C 或 C++ 来做部分应用程序)。有很多关于这个主题的教程和书籍,所以我不会在这里重复它们。只是一些随机的建议:

  • plists,尽管是“本机”iPhone 格式,但并不是客户端-服务器通信的最佳选择。即使按照 XML 标准,XML plist 也有很高的开销,并且二进制 plist 可能很难生成和调试。JSON实际上更快,通常更容易使用。

  • 如果您只获取少量信息,NSConnection只会使事情复杂化。您可以简单地使用[NSData dataWithContentsOfURL:]in 方法启动 via performSelectorInBackground:

  • UITableView滚动时不发送通知。如果您想在表格中延迟加载图片,请使用回调加载和设置它们。

于 2010-05-16T00:51:30.810 回答
1

Noah 提到的PhoneGap绝对是您可以进行 HTML+javascript 开发并仍将其打包以进行分发的途径,同时还可以利用 iPhone 的许多出色的原生功能。

其余的都取决于您尚未共享的一些元素。您希望 UI/搜索的响应速度和流畅度如何?这是一个 Web 应用程序延迟的地方,即使超过 3G,也可能会鼓励您寻找一种替代方案来更快地在本地呈现它(使用所有本地,甚至是 Objective-C)。

其他地方,听起来不像他们在你的道路上,寻找你可能想要直接做 Objective-C 的地方是围绕动画的更重的图形和操作(尽管 javascript + Canvas 和 HTML5 是关于让我成为骗子那里),使用相机和/或麦克风录制多媒体,或需要相当大量的密集处理的东西。最后一个问题是你可以在哪里完成这项工作?在服务器上(典型的 Google 风格选择)还是在设备上?

于 2010-05-16T01:05:21.547 回答
1

如果你想在 iTunes App Store 上有一个应用程序,你必须用 Objective-C 编写应用程序。这是来自Daring Fireball的 iPhone OS 4.0 开发者协议的引述。我已经强调了最相关的部分。

3.3.1 — 应用程序只能以 Apple 规定的方式使用文档化 API,不得使用或调用任何私有 API。应用程序必须最初是用 iPhone OS WebKit 引擎执行的 Objective-C、C、C++ 或 JavaScript 编写的,并且只有用 C、C++ 和 Objective-C 编写的代码才能编译并直接链接到文档化 API(例如,禁止通过中间翻译或兼容层或工具链接到文档化 API 的应用程序)。

这当然不适用于 OS 3.1 或 3.2,目前尚不清楚一旦 OS 4.0 发布,Apple 是否会追溯删除任何使用此类工具的现有应用程序。从理论上讲,如果您设法在 4.0 发布之前将应用程序推出,并且您很幸运,那么也许您可以使用 PhoneGap 之类的东西,但是在这一点上花时间使用这些工具似乎是一场非常大的赌博.

也就是说,Objective-C 真的不难学,它的主要语法是[someObject doSomething];或者[someObject doSomethingWith:thisObject];我对 Web 开发知之甚少,所以我无法谈论它的优点或缺点,但是你在 Web 应用程序中设置了所有内容您可能希望倾向于上述混合选项或纯粹基于 Web。

于 2010-05-16T01:40:22.223 回答