iPhone应用程序:Web应用程序还是本地应用程序?

6
我计划为我们的在线Web应用程序创建iPhone应用程序版本。我对iPhone应用程序开发还很陌生,所以我不知道是选择iPhone本地应用程序还是在iPhone浏览器上运行的Web应用程序。
实际上,要求非常基本。 iPhone应用程序需要向数据库提交数据并从中获取数据,该数据库也由Web应用程序使用。用户将拥有与Web应用程序相同的访问权限,只是我希望这个特定的应用程序适用于iPhone,因为使用Web应用程序和iPhone应用程序的用户体验会有所不同。我还有兴趣在Apple商店出售应用程序。
根据您的经验,对于这种需求,iPhone本地应用程序或Web应用程序哪个更好?构建本地iPhone应用程序和在iPhone浏览器上运行的Web应用程序有什么缺点?此外,我只能使用Objective-C来构建本地iPhone应用程序吗?还是有其他框架可以使用?
请温柔一点,我不想引发争论。
3个回答

6
你可以拥有蛋糕并吃掉它。
你可以使用UIWebView实例轻松地混合Web和本机应用程序,例如在Cocoa/Objective-C代码中实现性能敏感的部分,并在需要重写为本机的部分中插入WebKit视图。
如果您想要App Store分发,甚至可以将整个Web应用程序封装在本机包中,请参见PhoneGap
如果用户将您的页面添加到主屏幕,则还可以开发纯Web应用程序,该应用程序不会像通过Safari启动一样,如果用户将您的页面添加到主屏幕,则不会像通过Safari启动一样,jQTouch
缺点:
Web应用程序可能不如本机应用程序快,但是通过HTML5离线支持和WebKit特定扩展(如过渡和动画),您可以走得更远。确保使用触摸事件 - Safari会延迟onclick
很难使纯Web应用程序感觉像真正的本机应用程序。例如,移动WebKit不支持position:fixed,这是复制顶部导航栏所需的,而Web视图的滚动速度与表视图不同。它是可修复的,但需要大量的JavaScript
优点:
快速开发。当我不得不在UIView中复制应用程序时,我真的很感激CSS/HTML在复杂布局方面的实用性(InterfaceBuilder仅适用于半固定布局)。
您可以确保Apple突然讨厌和禁止另一个东西。如果他们从AppStore中删除您的应用程序,则可以让用户通过web访问它(Google使用Voice和Latitude应用程序执行此操作)。
将Web应用程序移植到Android等其他平台更容易(WinMo、HP Pre、最新的BlackBerries等)。 Apple排名第一,但其市场份额与其思维份额不成比例。其他人正在追赶。
如果选择本机应用程序:
您必须按照Apple的方式进行:Objective-C和Cocoa(您可以在纯C或C++中完成应用程序的部分)。关于此主题有很多教程和书籍,因此我不会在此重复它们。只是一些随机的建议:
  • 尽管plist格式是iPhone的原生格式,但在客户端和服务器之间进行通信时不是最好的选择。XML格式的plist甚至按照XML标准来看也具有很高的开销,而二进制格式的plist可能会很难生成和调试。事实上,JSON更快且通常更易于使用。

  • 如果只获取少量信息,则使用NSConnection会使事情变得更加复杂。您可以简单地使用通过performSelectorInBackground:启动的方法中的[NSData dataWithContentsOfURL:]

  • UITableView滚动时,不会传递通知。如果您希望在表格中加载延迟加载的图片,请使用回调函数加载并设置它们。


纯Web应用的一个显著缺点是,你无法在应用商店中销售它(除非你将其包装在Phonegap或类似工具中)。 - ceejayoz
@chpwn 已经修复了。 @ceejayoz:将纯Web应用包装成本地应用很容易,并且这样的应用可以在应用商店出售。 - Kornel

1

PhoneGap,正如Noah所提及的那样,是一种可行的途径,您可以通过它进行HTML+Javascript开发,并将其打包以便于分发,同时还可以利用iPhone的许多优秀本地功能。

其余事项都取决于您没有分享的一些元素。您希望从UI/Search获得多快和流畅的响应?这是一个地方,在这里,即使是在3G网络上,Web应用程序的延迟也可能鼓励您寻找替代方案以便更快地本地呈现它(使用所有本地或甚至Objective-C)。

其他几个位置,听起来似乎不是您要走的路线,您可能需要直接使用Objective-C完成较重的图形和动画操作(尽管javascript + Canvas和HTML5正在让我说谎),使用相机和/或麦克风记录多媒体内容,或者需要大量的密集处理。最后一个问题实际上是要看您在哪里以及是否希望完成这项工作?在服务器上(典型的Google风格选择)还是在设备上?


1

如果你想要在iTunes应用商店上发布应用程序,你必须使用Objective-C编写应用程序。 以下是从Daring Fireball引用的 iPhone OS 4.0 开发者协议中摘录的一段话。我已经突出了最相关的部分。

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

当然,这并不适用于OS 3.1或3.2,目前还不清楚一旦OS 4.0推出后,苹果是否会追溯删除任何已经使用此类工具的现有应用程序。理论上,如果您在4.0推出之前成功发布应用程序并且运气好的话,也许您可以利用像PhoneGap这样的工具,但是在这一点上使用这些工具似乎是一个非常大的赌博。

话虽如此,Objective-C真的不难学,它的主要语法是[someObject doSomething];[someObject doSomethingWith:thisObject];我对Web开发知之甚少,所以无法评价其优缺点,但是如果您已经将所有设置放在Web应用程序中,则可能希望倾向于上述混合选项或纯粹基于Web。


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