原文:Getting Started with Sencha Touch 2: Build a Weather Utility App (Part 3)

作者:Lee Boonstra
Lee is a technical trainer at Sencha. She’s located in Amsterdam and has experience in both front-end and back-end development. Lee spends her spare time developing web and mobile apps. She is writing a cookbook for O'Reilly about Sencha Touch.

在三部分的Sencha Touch教程中,将创建“需要带伞吗”这个简单的而实用的应用程序,该应用将 从worldweatheronline.com提供的Web服务中加载天气信息。基于天气代码,该应用程序可以预测需要不需要带伞。

在本教程的最后一部分,将讨论生成,而这 需要使用Sencha Cmd和PhoneGap/Cordova。

对于原生应用程序,可是有原生API来检索设备的位置,还可以使用PhoneGap/Cordova将应用程序发布为iOS、Android、BlackBerry10或Windows Phone的原生移动应用程序。

注意:如果希望在iOS、BlackBerry或Windows Phone设备上 测试应用程序,需要授权密钥和开发人员账号。此外,如果是使用Cordova,还不能在Windows操作系统上生成iOS的应用程序 ,也不能在Mac OS X上生成Windows的应用程序。

为了参照,可以查看本教程的第部分。

可以在本教程第二部分下载解决方案代码——完整的解决方案

本教程的要求:

  • Sencha Touch 2.3或更高版本
  • Sencha Cmd 4.x
  • 最高版本Ruby中的Compass和Sass
  • 一个现代浏览器
  • 一个编辑器
  • PhoneGap 3.3 / Cordova 3.3
  • Node.js v.0.10.23

还可以选择安装以下软件来生成本地应用程序:

  • XCode 5 (用来生产iOS本地应用程序,只适用于Mac OS X用户)
  • Android开发人员工具(版本为13以上,用来生成安卓本地应用程序)
  • 在Windows 8 Pro中的Visual Studio 2012 Pro/Ultimate (用来生成本地Windows Phone应用程序,只适用于windows用户)
  • Blackberry 10 Native SDK (用来生成BlackBerry 10的本地应用程序)

创建一个用于生产的生成

使用Sencha Cmd,看可以创建用于生产或测试的生产包。生产用的生成包将Sass样式表编译成为生产准备的CSS(精简包)。它还会复制静态图片以及将JavaScript(Sencha Touch框架类加上自己定义的类)生成为一个单一的精简、连接的文件,以便于文件下载和缓存。生产生成还将包括要启用本地缓存的缓存清单文件。

测试包则不包含这文件。在测试生成,在测试包中的Javascript和CSS文件将不会被精简且是可读的。

下面先来创建天气应用程序的生产生成。现在做的并不是创建本地生成。如果要将天气应用程序部署到自己的服务器上,就需要将生产生成的文件夹复制到web服务器上。

在命令中输入以下命令就可创建一个生产生成:

sencha app build production

或者

sencha app build testing

查看一下文件夹结构,会发现,如果决定通过在线URL访问移动应用程序,这是一个可以直接在Web服务器上使用的文件夹结构。

可能你已经发现,字体并没有被复制到build文件夹,这可以通过手动复制或通过可以编辑生成过程来实现。下面来看看如何去实现。

Sencha Cmd会使用了Apache的ANT来执行生成过程。在隐藏的.sencha文件夹内,可以找到所有使用的任务。

如果希望自己修改生成过程,可以打开位于应用程序文件夹根目录的build.xml文件,并在文件结尾添加以下Ant任务:

<target name="-after-build"/>
<target name="build"
depends="init,-before-build,-build,-after-build"
description="Copy over the font/dinmu folder and remove temp files"/> <copy todir="${basedir}/resources/css/stylesheets/fonts/dinmu" overwrite="true">
<fileset dir="${basedir}/resources/sass/stylesheets/fonts/dinmu">
<include name="**/*" />
</fileset>
</copy>
<copy todir="${build.dir}/resources/css/stylesheets/fonts/dinmu" overwrite="true">
<fileset dir="${basedir}/resources/sass/stylesheets/fonts/dinmu">
<include name="**/*" />
</fileset>
</copy>
<delete dir="${basedir}/${build.dir}"/>

现在再次生成应用程序:

sencha app build

可以在使用以下地址来测试生产生成:http://localhost/dinmu/production/Dinmu/

本地设备API

有想过在设备上将应用程序作为原生应用程序来执行吗?使用诸如Adobe PhoneGap或Apache Cordova,就可以将应用程序发布为混合应用程序。

一旦有了混合应用程序,就可以使用设备API,如地理定位。地理定位会基于设备的GPS传感器或网络信号的推断提供定位数据访问。

在编辑器打开app\utils\Functions.js,并查看101行:

Ext.device.Geolocation.getCurrentPosition({
timeout: 5000,
maximumAge: 10000,
success: function(position) {
var place = position.coords.latitude + "," + position.coords.longitude;
Dinmu.utils.Functions.getWeather(place);
Ext.Viewport.unmask();
},
failure: function() {
Ext.Viewport.unmask();
Ext.Msg.alert('Timeout', 'Can not retrieve position, please retry.');
}
});

当应用程序在设备运行的时候,Sencha Touch类Ext.device的Geolocation方法可访问原生的地理定位API,该API包含以下三个实现:

  • Sencha移动包
  • PhoneGap/Cordova
  • 浏览器

当应用程序运行时,该类会根据设备自动选择正确的实现。

在生成需要带伞吗(Dinmu)应用程序之前,需要做以下两个检查:

  • 使用http协议访问api.worldweatheronline.com的请求的前缀,可以在app/utils/Functions.js文件的125行找到这个请求。
  • 确保输入了有效的worldweatheronline.com的Web服务器的API Key。这个可以通过注册http://www.worldweatheronline.com来获取到API Key。

都设置好了吧?真棒!现在只剩下使用PhoneGap或Cordova来生成一个原生应用程序了。

生成一个混合应用程序

基于Sencha Touch的代码,有三种产品可以使用来创建原生应用程序:Sencha移动包、Adobe PhoneGap和Apache Cordova。所有这些产品都支持通过Sencha设备API来访问设备的硬件资源。

下面来了解一下这三个解决方案之间的差异:

Sencha移动包

使用packager.json来生成iOS或安卓生成本地包,可以通过安卓市场或苹果App Store进行分发。

Adobe PhoneGap

可以使用PhoneGap Build云服务来(远程)打包应用程序并通过安卓市场、黑莓App World、Windows Phone Store或者苹果App Store来分发。它是最简单的解决方案,可以通过扫描QR代码在设备上测试应用程序。还可以生成本地应用程序。它是一个商业产品,免费版本只限于一个专用的应用程序。

Apache Cordova

Apache Cordova是阿帕奇软件基金会的一个顶层项目。Cordova是免费的、开源的、社区驱动的Adobe PhoneGap版本。Cordova可以打包本地应用程序,并通过安卓市场、黑莓App World、Windows Phone Store或者苹果App Store来分发。

通过命令行生成本地包需要安装XCode、安卓开发工具、BlackBerry 10 SDK或带有Visual Studio的Windows 8 Pro。

通过PhoneGap来生成包需要(免费)Adobe(PhoneGap Build)账号:https://build.phonegap.com/apps。

注意:本教程将使用PhoneGap Build。如果更喜欢使用Cordova,可以使用在本教程使用的相同的命令,不过需要在命令行将将phonegap替换为ccordova。

初始化一个PhoneGap项目

生成混合应用程序的第一步是在项目目录使用以下命令来启用它:

sencha phonegap init <APP-ID> <APP-NAME>

  • App ID要遵循以下模式: <REVERSED-DOMAIN>.<APP-NAME>
  • 应用程序的名称应该和app.json文件中指定的name属性的值相同。

注意:如果希望发布iOS应用程序,需要确保app Id是在苹果门户网站注册的哪个。

以下是用来启用PhoneGap支持的命令:

sencha phonegap init com.sencha.dinmu Dinmu

注意:Mac OS X用户可能需要使用sudo前缀来获取管理权限。

以下是创建的文件和结构:

  • PhoneGap文件夹结构
  • phonegap.local.properties
  • config.xml

MyApp/phonegap

MyApp/phonegap包含了完整的PhoneGap文件结构。如果使用Cordova来初始化项目,文件夹会被命名为cordova。

phonegap.local.properties

文件phonegap.local.properties包含了生成本地应用程序所期望的平台的名称。默认情况下,它将采用本地安装的SDK,例如:

phonegap.platforms=ios android blackberry10 wp8

当运行phonegap的init命令,属性文件还为Adobe PhoneGap远程包提供设置。如果有一个PhoneGap Build账号,就可以设置这些额外的设置。

phonegap.build.remote=true

# Username for PhoneGap Build
phonegap.build.remote.username={username}
# Password for PhoneGap Build
phonegap.build.remote.password={password}

当将phonegap.build.remote属性设置为false,那就必须在机器上安装一个SDK(XCode, 安卓开发人员工具, BlackBerry 10 SDK 或带Visual Studio的Windows 8 Pro)。

config.xml

默认的Cordova/PhoneGap的config.xml文件包含了应用程序的元数据,下面来修改这个文件。

修改应用程序名称、应用程序说明和作者信息:

<name>Dinmu</name>
<description>
Do I need my Umbrella today?
</description>
<author email="myemail@addres.com" href="http://www.mydomain.com">
Your name
</author>

下一步是在启动时启用地理定位差距,以便通过设备检索位置:

<preference name="EnableLocation" value="true" />

禁用全屏模式,以便显示状态栏(电池指示器和时间):

<preference name="fullscreen" value="false" />

要确保应用程序支持连接到外部url。天气应用程序要连接到http://www.worldweatheronline.com。隐藏,需要授予此URL或所以外部URL的访问权限。可以使用通配符来允许所有外部连接:

<access origin="*" />

最后腰修改的是图标和要加载的图片的路径。默认情况下,Sencha Touch会创建iOS图标和启动图像。他们可以在MyApp/resources文件夹下诏到。

当为视网膜显示(iphone 5+)的iphone生成应用程序时,最重要的是要根据所要求的屏幕尺寸提供正确的启动屏幕。如果不是这样,就可能会不正确的调整可视区域。对于本示例,将坚持使用PhoneGap的启动屏幕。可以随意使用自己的启动屏幕来替换他们。

<icon src="icon.png" />
<icon src="resources/icons/Icon.png" />
<icon gap:platform="ios" height="57" src="resources/icons/Icon.png" width="57" />
<icon gap:platform="ios" height="72" src="resources/icons/Icon~ipad.png" width="72" />
<icon gap:platform="ios" height="114" src="resources/icons/Icon@2x.png" width="114" />
<icon gap:platform="ios" height="144" src="resources/icons/Icon~ipad@2x.png" width="144" /> <gap:splash gap:platform="ios" height="480" src="res/screen/ios/screen-iphone-portrait.png" width="320" />
<gap:splash gap:platform="ios" height="960" src="res/screen/ios/screen-iphone-portrait-2x.png" width="640" />
<gap:splash gap:platform="ios" height="1024" src="res/screen/ios/screen-ipad-portrait.png" width="768" />
<gap:splash gap:platform="ios" height="768" src="res/screen/ios/screen-ipad-landscape.png" width="1024" />

如果想了解更多有关config.xml的设置,可查阅PhoneGap文档

创建本地生成包

使用PhoneGap或Cordova初始化应用程序后,就可以在命令行运行以下命令来创建一个本地生成了:

sencha app build -run native

注意:run参数可确保应用程序在机器上安装的仿真器中加载。重复一遍,Mac OS X用户需要使用sudo前缀来获取管理权限。

生成的应用程序位于MyApp/cordova或MyApp/phonegap目录下:

  • platforms/android/bin - Android的.apk文件
  • platforms/ios/build/ - iOS的.app文件
  • platforms/blackberry10/build/simulator - BlackBerry 10的.bar文件
  • platforms/wp8/Bin/Debug - Windows Phone的.xap文件

测试本地生成

如果使用PhoneGap Build,在安卓设备上测试应用程序会相当容易。只需要扫描QR代码或下载、拖放.apk文件到手机的内存卡就行了。

对于iOS,需要配置和代码签名,从而保证应用程序来源于已知用户以及自从最后一次签名后没再修改过。Windows Phone开发人员和iOS开发人员需要一个付费的开发着账号。

一旦拥有一个iOS开发者账号,就需要设置证书、标识符和配置文件。要了解更多相关信息,请参阅苹果开发人员工具和Sencha Touch文档中的《 Packaging Native iOS Applications》。

当所有都设置好以后,就可以使用PhoneGap在命令行生成应用程序:

sencha app build native

当为iOS生成应用程序时,可能会碰到一个生成错误,因为iOS应用程序需要代码签名。使用PhoneGap Build,需要商城*.p12证书和*.mobileprovisioning移动配置文件。当上传者两个关键文件后,就可以解锁按键比ing重新生成。

如果正在生成本地应用程序(PhoneGap remote=false或使用Cordova),可以在phonegap或cordova文件夹打开platforms/ios/Dinmu.xcodeproj文件来设置应用程序的代码签名。开发者标识符要添加到代码签名标识符列表。如果没有,则需要再次执行整个本地配置处理。

要确保电话已连接到Mac OS X,以及在XCode生成和运行。

恭喜你,已经从零开始完成了一个Sencha Touch实用应用程序的构建。如果跟随本系列三个教程,就已经使用Sencha Cmd创建了应用程序,并为需要带伞吗应用程序创建所有的视图、模型、存储和控制器。还是用Sass创建了自定义主题,且创建了一个生产生成来发布到Web服务器或使用Adobe PhoneGap/Cordova生成一个混合应用程序。按照这个流程,就可以创建任何自己喜欢的应用程序了。

喜欢这一系列教程吗?参加培训吧……

【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之三的更多相关文章

  1. MVVM之旅(1)创建一个最简单的MVVM程序

    这是MVVM之旅系列文章的第一篇,许多文章和书喜欢在开篇介绍某种技术的诞生背景和意义,但是我觉得对于程序员来说,一个能直接运行起来的程序或许能够更直观的让他们了解这种技术.在这篇文章里,我将带领大家一 ...

  2. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  3. 在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  4. 创建一个Orchard Core CMS 应用程序

    开始使用Orchard Core作为NuGet软件包 在本文中,我们将看到使用Orchard Core提供的NuGet包创建CMS Web应用程序是多么容易. 你可以在这里找到Chris Payne写 ...

  5. Sencha Touch快速入门(译)

    翻译自:http://www.sencha.com/learn/sencha-touch-quick-start/ 1.下载Sencha Touch SDK——下载链接 2.安装Safari或Chro ...

  6. 【webGL】threejs入门 ---创建一个简单立方体

    开发环境 Three.js是一个JavaScript库,所以,你可以使用平时开发JavaScript应用的环境开发Three.js应用.如果你没什么偏好的话,我会推荐Komodo IDE. 调试建议使 ...

  7. WCF入门, 到创建一个简单的WCF应用程序

    什么是WCF?  WCF, 英文全称(windows Communication Foundation) , 即为windows通讯平台. windows想到这里大家都知道了 , WCF也正是由微软公 ...

  8. SharePoint入门——创建一个网站

    1.首先安装SP相关环境,可以百度到具体操作步骤: (以下步骤基于本人环境:本人用的Win10自带的Hyper-V虚拟机.Windows Server2012R2.SQL2014以及SharePoin ...

  9. 如何在HoloLens中创建一个2D的Hello World程序

    注:本文提及到的代码示例下载地址 > How to build an "Hello World" 2D app in HololLens. HoloLens 是微软的一款MR ...

随机推荐

  1. Chrome 内存和CPU消耗量双料冠军

    今天统计了下某个时刻各进程的内存和CPU使用概况.结果发现,Chrome消耗量真是不一般的大.比Windows主进程都还猛! 另外发现百度安全卫士占用CPU也比较猛. powershell下输入: p ...

  2. Linux & Windows 计时函数

    直接上代码: #if defined(_WIN32) && defined(_MSC_VER) #include <windows.h> double abtic() { ...

  3. Java 单元测试 JUnit4 快速入门

    JUnit最佳实践 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class CardServiceTest {     /**      * 最佳 ...

  4. 使用std::vector优化点云动画显示一例

    1. 准备 使用std::vector应该知道几点: (1)内存连续的容器,有点像数组 (2)与std::list相比,插入和删除元素比较慢- 因为数据迁移 (3)添加元素可能会引发内存分配和数据迁移 ...

  5. Struts 2 之拦截器

    拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Progr ...

  6. 剑指Offer——巧妙使用sort(List<T>,Comparator<? super T>)比较器

    剑指Offer--巧妙使用sort(List<T>,Comparator<? super T>)比较器 先入为主 package cn.edu.ujn.offersword; ...

  7. Android之使用参数改变ProgressDialog的位置、大小、背景透明度、屏幕透明度

    废话不多说,这个改变ProgressDialog的一些配置属性和前面我讲的AlertDialog的设置参数方法一模一样,这里就为了更直观,直接贴实现代码吧: ProgressDialog mProgr ...

  8. 如何使用excel画甘特图

    甘特图小伙伴们都非常的熟悉,首先小编简单的向各位小伙伴介绍一下什么是甘特图,甘特图内在思想简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间.基本是一条线条图,横轴 ...

  9. 03一些View总结

    第三天 一  TextView    父类 : View     >概念:文本控件 :文本内容的显示   默认配置不可编辑  子类EditText可以编辑          >属性:    ...

  10. Beanstalkd 一个高性能分布式内存队列系统

    需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...