Stabilization--稳定期
Stabilization is the process of working out the bugs in your app. Not just from a functional standpoint, e.g.: "It
crashes when I click this button,” but also Usability and Performance. It’s best to start stabilization very early
within the development process so that course corrections can occur before they become costly. Typically,
applications go into Prototype,Alpha, Beta, and Release Candidate stages. Different people define these
differently, but they generally follow the following pattern:
稳定期是找出应用的Bug的过程,不只是来自功能方面,比如:“当我点击这个按钮就崩溃”,也来自可用性和性能。最好在开发期就启动稳定启,这样错误能在产生严重后果之前得到修正。通常,应用要经历雏型、内部测试版、公测版、候选发布版等阶段,不同的人定义的方法不同,但他们通常遵循下列的模式:
1. Prototype – The app is still in proof-of-concept phase and only core functionality, or specific parts of the
application are working. Major bugs are present.
雏型--应用只处于概念验证阶段,应用还只是最核心的功能,或者是特定的部分,主要Bug还没有处理。
2. Alpha – Core functionality is generally code-complete (built, but not fully tested). Major bugs are still present,
outlying functionality may still not be present.
内部测试版--核心功能通常完成了代码编写或构建,但没有全面测试,主要Bug仍然存在,外围功能可能仍没有形成。
3. Beta – Most functionality is now complete and has had at least light testing and bug fixing. Major known
issues may still be present.
公测版--大部分功能已完成,至少已经有了一些测试和Bug修复。已知的主要问题仍然存在。
4. Release Candidate – All functionality is complete and tested. Barring new bugs, the app is a candidate for
release to the wild.
候选发布版--所有功能已完成且经测试通过。排除了新的Bug,应用候选向外发布。
It’s never too early to begin testing an application. For example, if a major issue is found in the prototype stage,
the UX of the app can still be modified to accommodate it. If a performance issue is found in the alpha stage,
it’s early enough to modify the architecture before a lot of code has been built on top of false assumptions.
开始测试应用从来不会显得太早,比如,如果在雏形期就发现一个主要的问题,应用UX仍能修改。如果一个性能问题在内部测试期被发现,还来得及在大量代码在不能实现的设想的基础上被创建之前改变体系结构。
Typically, as an application moves further along in the lifecycle, it’s opened to more people to try it out, test it,
provide feedback, etc. For instance, prototype applications may only be shown or made available to key
stakeholders, whereas release candidate applications may be distributed to customers that sign up for early
access.
通常,当应用沿着生命周向前移动时,它被开放给更多的人来试验、测试、提供反馈,等等。举个例子,雏形应用可能仅提供给相关关键人员,相反,候选发布版可能提供给想提前访问的报名客户。
For early testing and deployment to relatively few devices, usually deploying straight from a development
machine is sufficient. However, as the audience widens, this can quickly become cumbersome. As such,
there are a number of test deployment options out there that make this process much easier by allowing you
to invite people to a testing pool, release builds over the web, and provide tools that allow for user feedback.
对于早期的测试和部署到相对较少的设备上,通常从一台发布机器上直接进行部署是能满足需要的。然而,随着使用者的增加,这将很快变得不堪重负。因此,外边有一定数量的测试部署选择可使这个过程变得十分容易,这可使你邀请人们到一个测试池,也可使你将你构建的应用发布到互联网上,并提供允许用户反馈的工具。
Some of the most popular ones are:
最流行的有:
1. Testflight (testflightapp.com) – This is an iOS product that allows you to distribute apps for testing as well as
receive crash reports and usage information from your customers.
Testflight(testflightapp.com)--这是一个iOS产品,既允许你分发应用进行测试又能收到来自你的客户的崩溃报告和使用信息。
2. LaunchPad (launchpadapp.com) – Designed for Android, this service is very similar to TestFlight.
LaunchPad (launchpadapp.com) --为Android设计,此服务与Testflight非常相似。
3. Vessel (vessel.io) – A service for iOS and Android that lets you monitor usage, track customers and even do
A/B testing from inside your app.
Vessel (vessel.io) --为iOS和Android服务,让你监视使用、跟踪客户甚至从应用内部做A/B测试。
4. Hockeyapp.com -- provides a similar service for iOS, Android and Windows Phone.
Hockeyapp.com--为iOS、Android 和 Windows Phone应用提供类似服务。
Distribution--分发期
Once you’ve stabilized your application, it’s time to get it out into the wild. There are a number of different
distribution options, depending on the platform.Xamarin.iOS and Objective-C apps are distributed in exactly
the same way:
一旦完成了应用的稳定期,就该将它发布出去了。有一些不同的依赖于平台的分发方式。Xamarin iOS和Object-C应用的分发方式非常相似:
1. Apple App Store – Apple’s App Store is a globally available online application repository that is built into Mac
OS X via iTunes. It’s by far the most popular distribution method for applications and it allows developers to
market and distribute their apps online with very little effort.
Apple 应用商店--Apple的应用商店是一个全球性的在线应用仓库,它通过iTunes内置于Mac OS X。它是迄今为止最流行的应用程序分发方法,允许开发者通过很小的努力就能交易和分发他们应用。
2. Enterprise Deployment – Enterprise deployment is meant for internal distribution of corporate applications
that aren’t available publicly via the App Store.
企业部署--企业部署是公司应用的内部分发,不是通过App商店对公众有效。
3. Ad-Hoc Deployment – Ad-hoc deployment is intended primarily for development and testing and allows you
to deploy to a limited number of properly provisioned devices. When you deploy to a device via Xcode or
Xamarin Studio, it is known as ad-hoc deployment.
Ad-Hoc部署--点对点部署主要被用来开发和测试,允许你将应用部署到数量有限的专用设备上。当你通过Xcode或Xamarin Studio将应用部署到一个设备上时,就是用点对点部署。
Android--安卓
All Android applications must be signed before being distributed. Developers sign their applications by using
their own certificate protected by a private key. This certificate can provide a chain of authenticity that ties an
application developer to the applications that developer has built and released. It must be noted that while a
development certificate for Android can be signed by a recognized certificate authority, most developers do not
opt to utilize these services, and self-sign their certificates. The main purpose for certificates is to differentiate
between different developers and applications. Android uses this information to assist with enforcement of
delegation of permissions between applications and components running within the Android OS.
所有的Android应用在分发之前必须被签名,开发者通过使用他们自己的被一个私有密钥保护的证书对自己的应用进行签名。这个证书能提供一个真实性的链,该链将应用的开发者连接到开发者已经构建和发布的应用程序上。必须注意的是,虽然一个Android开发证书能被一个被承认的证书权威签名,大部分开发却不愿使用这些服务,并自己对他们的证书进行签名。证书的主要目的是区分不同的开发者和应用程序。安卓使用此信息在运行于Andoid操作系统下的应用程序和组件之间帮助执行许可的授权。
Unlike other popular mobile platforms, Android takes a very open approach to app distribution. Devices are
not locked to a single, approved app store. Instead, anyone is free to create an app store, and most Android
phones allow apps to be installed from these third party stores.
与其他流行的移动平台不同,Android采取了一种非常开放的方法来实现app分发。设备没有被死锁在单一的被批准的app商店,相反,任何人都可以自由地创建一个app商店,而且大部分Android手机允许app从这些三方商店来安装。
This allows developers a potentially larger yet more complex distribution channel for their applications.
Google Play is Google’s official app store, but there are many others. A few popular ones are:
这给了开发者一个潜在的更大而且更复杂的通道来分发他们的应用。Google Play是谷歌的官方app商店,但有许多其他的商店,其中流行的有:
1. AppBrain
2. Amazon App Store for Android
3. Handango
4. GetJar
Windows Phone
Windows Phone applications are distributed to users via the Windows Store.
Windows Phone应用通过Windows商店进行分发。
Developers submit their apps to the Windows Phone Dev Center for approval, after which they appear in the Store.
开发将他们的app提交到Windows Phone Dev Center,他们的app得到批准后出现在Windows 商店。
Microsoft provides detailed instructinos for deploying Windows Phone apps during development.
微软为 部署Windows Phone 应用提供了详细的说明。
Follow these steps to publish apps for beta testing and release to the store. Developers can submit their apps
and then provide an install link to testers, before the app is reviewed and published.
随着 这些步骤 可将app作为公测发行到Windows 商店 或将app发布到 Windows 商店。在app被复审和发布之前,开发者可提交我们的app并接着提供一个安装连接给测试者。
Mobile Development Considerations--移动开发考虑
While developing mobile applications isn’t fundamentally different that traditional web/desktop development
in terms of process or architecture, there are some considerations to be aware of.
Let’s take a look at common considerations and then we’ll examine platform specific considerations.
虽然开发移动应用与传统的网页或桌面应用的过程或体系结构没有根本性的区别,但仍应知道一些考虑。
Common Considerations--共同的考虑
Multitasking--多任务
There are two significant challenges to multitasking (having multiple applications running at once) on a
mobile device. First, given the limited screen real estate, it is difficult to display multiple applications
simultaneously. Therefore, on mobile devices only one app can be in the foreground at one time. Second,
having multiple applications open and performing tasks can quickly eat battery power.
Each platform handles multitasking differently, which we’ll explore in a bit.
对于在一个移动设备上的多任务(多个应用同时运行),有两个重要的挑战,第一,只有有限的屏幕空间,难以同时显示多个应用程序,所以,对移动设备上,同一时间只能有一个应用处于前台。第二,多个应用程序打开和执行任务会很快地消耗电池能量。
各平台处理多任务是有差异的,我们将略微探究一下这些差异。
Form Factor --外形尺寸
Mobile devices generally fall into two categories, phones and tablets, with a few crossover devices in between.
Developing for these form factors is generally very similar, however, designing applications for them can be
very different. Phones have very limited screen space, and tablets, while bigger, are still mobile devices with
less screen space than even most laptops. Because of this, mobile platform UI controls have been designed
specifically to be effective on smaller form factors.
移动设备通常分成两大类,手机和平板,也有少数介乎两者之间的设备。针对这些外形尺寸的开发通常是非常相似的,然而,为它们设计应用却差异很大。手机有非常有限的屏幕,而平板,虽然大些,但仍然是屏幕空间小于大部分手提电脑的移动设备,所以,移动平台UI控件是根据较小的外形尺寸来设计的。
Device and OS Fragmentation--设备和操作系统分化
It’s important to take into account different devices throughout the entire software development lifecycle:
在整个软件开发生命周期始终重视不同的设备是非常重要的。
1. Conceptualization and Planning – Because different devices can have different hardware and device
features, you must keep in mind that anapplication that relies on certain features may not work properly
on certain devices. For example, not all devices have cameras, so if you’re building a video messaging
application, some devices may be able to play videos, but not take them.
概念化和计划--因为不同的设备可能拥有不同的硬件和设备功能,你必须记住,一个依赖于某个特定功能应用程序可能在某些特定的设备上无法正常运行。比如,并非所有设备都有摄像头,则如果你生成了一个视频消息的应用,则有些可能支持播放视频,却无法获得视频。
2. Design – When designing an application’s User Experience (UX), different screen ratios and sizes
should be kept in mind. Additionally, when designing an application’s User Interface (UI), different
screen resolutions should be considered.
设计--设计一个应用的用户体验(UX)时,要记住不同的屏幕高宽比和尺寸。另外,当设计一个应用的用户界面(UI)时,不同的屏幕分辨率应该被考虑。
3. Development – When using a feature from code, the presence of that feature should always be tested first.
For example, before using a device feature, such as a camera, always query the OS for the presence of tha
t feature first. Then, when initializing the feature/device, make sure to request currently supported from the OS
about that device and then use those configuration settings.
当用代码使用一个功能时,应总是先测试该功能是否有效。比如,在使用一个设备功能前,如摄像头,应总是首先向操作系统查询该功能是否可用。再者,当初始化功能或设备时,确保向OS查询设备是否支持并使用那些配置。
4. Testing – It’s incredibly important to test your application early and often on actual devices. Even devices
with the same hardware specs can vary widely in their behavior.
测试--及早测试应用并且在实际的设备上测试极为重要。带着相同硬件规格的设备的表现可能有很大的差异。
Limited Resources--有限的资源
Mobile devices get more and more powerful all the time, but they are still mobile devices that have limited
capabilities in comparison to desktop or notebook computers. For instance, desktop developers generally
don’t worry about memory capacities; they’re used to having both physical and virtual memory in copious
quantities, whereas on mobile devices you can quickly consume all available memory just by loading a
handful of high-quality pictures.
移动设备一直都在变得越来越强大,但他们仍旧是比桌面电脑和笔记本电脑拥有更少的性能的移动设备。比如,桌面开发者通常不用担心内存的容量,他们一直使用大量的物理和虚拟内存,相反,在移动设备上,装载几张高品质的图像,就可以很快将内存用完。
Additionally, processor-intensive applications such as games or text recognition can really tax the mobile CPU
and adversely affect device performance.
另外,诸如游戏或文本识别等处理器密集型应用能加重CPU的负担,并对设备的性能产生影响。
Because of considerations like these, it’s important to code smartly and to deploy early and often to actual
devices in order to validate responsiveness.
因为上述这些考虑,机敏地编码,及早的部署到真实的设备以求得到响应证实是非常重要的。
iOS Considerations --iOS 考虑
Multitasking--多任务
Multitasking is very tightly controlled in iOS, and there are a number of rules and behaviors that your application
must conform to when another application comes to the foreground, otherwise your application will be
terminated by iOS.
在iOS中,多任务受到严格的限制,当另外的应用来到前台时,你的应用必须验证遵照一些规则和行为,否则就会被iOS中止。
Device-Specific Resources--设备专用资源
Within a particular form factor, hardware can vary greatly between different models. For instance, some devices
have a rear-facing camera, some also have a front-facing camera, and some have none.
Some older devices (iPhone 3G and older) don’t even allow multitasking.
Because of these differences between device models, it’s important to check for the presence of a feature before
attempting to use it.
在一个特定的外观尺寸范围内,在不同的模型之间,硬件的变化非常巨大,比如,有些设备带有一个后置摄像头,有些还带有前置摄像头,而有些则不带。
有些更旧的设备(如iPhone 3G和更老的)甚至不允许多任务。
因为设备模型之间的这些差异,在试图使用一个功能之前先检查该功能是否存在或可用是非常重要的。
OS Specific Constraints--OS特别约束
In order to make sure that applications are responsive and secure, iOS enforces a number of rules that
applications must abide by. In addition to the rules regarding multitasking, there are a number of event
methods out of which your app must return in a certain amount of time, otherwise it will get terminated by iOS.
Also worth noting, apps run in what’s known as a Sandbox, an environment that enforces security
constraints that restrict what your app can access. For instance, an app can read from and write to its own
directory, but if it attempts to write to another app directory, it will be terminated.
为了确保应用的响应和安全,iOS强制执行一些应用程序必须遵守的规则。除了这些关于多任务的规则外,还有一些来自app的事件方法必须在某一时间范围内返回结果,否则该app就会被iOS中止。
值得注意的是,应用运行在一个限制应用访问范围的强制安全约束且被认为是“沙盒”的环境内,比如,一个应用能在自己的目录内读和写,但如果它试图去写到另外应用的目录,则会被中止。
Android Considerations--安卓考虑
Multitasking--多任务
Multitasking in Android has two components; the first is the activity lifecycle. Each screen in an Android
application is represented by an Activity, and there is a specific set of events that occur when an
application is placed in the background or comes to the foreground. Applications must adhere to this
lifecycle in order to create responsive, well-behaved applications. For more information, see the
Activity Lifecycle guide.
Android中的多任务有两个部分,第一部分是“活动”的生命周期。Android应用中的每一“屏”都被一个“活动”所响应,而且当应用被移到后台或来到前台时,就会产生有一些明确的事件。应用程序必须遵循它的生命周期以产生响应的、有好的行为的应用。更多信息, 见 活动动生命周期 指南.
The second component to multitasking in Android is the use of Services. Services are long-running processes that exist independent of an application and are used to execute processes while the
application is in the background. For more information see theCreating Services guide.
Android中的多任务的第二部分是服务的使用,服务是一些长时运行的进程,这些进程独立于应用而存在,哪怕应用在后台,服务仍可执行这些进程。更多信息,见创建服务 指南。
Many Devices & Many Form Factors
Unlike iOS, which has a small set of devices, or even Windows Phone, which only runs on approved devices
that meet a minimum set of platform requirements, Google doesn’t impose any limits on which devices can
run the Android OS. This open paradigm results in a product environment populated by a myriad of different
devices with very different hardware, screen resolutions and ratios, device features, and capabilities.
Because of the extreme fragmentation of Android devices, most people choose the most popular 5 or 6 devices
to design and test for, and prioritize those.
iOS拥有的设备不并多,Windows Pone只能运行在经核准的设备上,这些设备需要满足很少的平台需求,Google则不同,Google不对能运行Android OS的设备强加任何限制。这种开放的范例导致了一个产品环境,无数不同的设备带着差异极大的硬件、屏幕分辨率和长宽比、设备功能和性落户其中。
由于Android设备分化极端,大部分人选择最流行的5至6种设备来用于设计和测试,并按优先级进行选择。
Security Considerations--安全考虑
Applications in the Android OS all run under a distinct, isolated identity with limited permissions. By default,
applications can do very little. For example, without special permissions, an application cannot send a text
message, determine the phone state, or even access the Internet! In order to access these features,
applications must specify in their application manifest file which permissions they would like, and when
they’re being installed; the OS reads those permissions, notifies the user that the application is requesting
those permissions, and then allows the user to continue or cancel the installation. This is an essential step
in the Android distribution model, because of the open application store model, since applications are not
curated the way they are for iOS, for instance. For a list of application permissions, see the
Manifest Permissions reference article in the Android Documentation.
Android OS 中的应用均运行在一个确切的、被隔离的、带着有限许可的身份识别之下,缺少情况下,应用能做的很少。比如,没有特殊许可,一个应用就不能改善文本信息、决定电话状态或者甚至不能访问互联网。为了访问这些功能,应用必须在它们的manifest文件中指定需要哪些许可和何时这些许可被安装。OS读取这些功能,通知用户应用正申请这些许可,并允许用户继续或取消安装。这是Android分发模型中的一个基本步骤,因为其开放的应用存储模式,因为应用不是按IOS那样被组织起来。对于应用许可列表,见Android 文献编集中的 表明许可 参考文章。
Windows Phone Considerations--Wndows Phone 考虑
Multitasking--多任务
Multitasking in Windows Phone also has two parts: the lifecycle for pages and applications, and background
processes. Each screen in an application is an instance of a Page class, which has events associated with
being made active or inactive (with special rules for handling the inactive state, or being "tombstoned”). For
more information see the Execution Model Overview for Windows Phone documentation.
Windows Phone中的多任务也有两个部分,页和应用的生命周期和后台进程,应用中每一“屏”是一个Page类的实例,Page类拥有各种事件,这些事件与被置于活动或不活动(用特殊的规则以处理非活动状态,或被墓碑化)关联起来。更多信息见 Windnows Phone 执行模型概述Phone 文档。
The second part is providing background agents for processing tasks even when the application is not running
in the foreground. More information on scheduling periodic tasks or creating resource intensive background
tasks can be found in the Background Agents Overview.
第二部分是为处理任务提供后台代理,甚至当应用没有正运行在前台时。更多关于安排周期的任务或创建资源加强后台任务的信息可后台代理概述在中发现。
DEVICE Capabilities--设备的能力
Although Windows Phone hardware is fairly homogeneous due to the strict guidelines provided by Microsoft,
there are still components that are optional and therefore require special considering while coding. Optional
hardware capabilities include the camera, compass and gyroscope. There is also a special class of low-memory (256MB) that requires special consideration, or developers can opt-out of low-memory support.
尽管由于微软提供了严格的指导原则,Windows Phone 硬件都非常一致,但仍有一些组件是可选的,所以写代码时必须予以考虑,可选硬件的性能包括摄像机、罗盘、陀螺仪。还有一种特殊的低内存(256M)类型也需要特别考虑,当然开发者也可单方选择不支持低内存。
Database--数据库
Both iOS and Android include the SQLite database engine that allows for sophisticated data storage that
also works cross-platform. Windows Phone 7 did not include a database, while Windows Phone 7.1 and
8 include a local database engine that can only be queried with LINQ to SQL and does not support
Transact-SQL queries. There is an open-source port of SQLite available that can be added to Windows
Phone applications to provide familiar Transact-SQL support and cross-platform compatibility.
iOS和Android 都包含SQLite数据引擎,该引擎允许复杂的数据储存并可工作于跨平台。Windows Phone 7不包含数据库,而Windows Phone 7.1 和8包含一个本地数据引擎,该引擎只能被LINQ to SQL查询,而且不支持Transact-SQL查询。有一个可用的 SQLite开源接口 能被加入到Windows Phone应用中来提供熟悉的Transact-SQL支持和跨平台兼容。
Security Considerations-安全考虑
Windows Phone applications are run with a restricted set of permissions that isolates them from one another
and limits the operations they can perform. Network access must be performed via specific APIs and inter-application communication can only be done via controlled mechanisms. Access to the file-system is also
restricted; the Isolated Storage API provides key-value pair storage and the ability to create files and folders
in a controlled fashion (refer to the Isolated Storage Overview for more information).
Windows Phone 应用在一组受限的许可下运行,这些许可将它们彼此隔离开来并限制它们可以执行的操作。网络访问必须通过指导的API才能执行,应用间的通讯只能通过受限的机制才能完成。访问文件系统也是受限的。独立存储API提供键值对存储和在一个受限的方法中创建文件和文件夹的能力(更多参考 独立存储概述)
An application’s access to hardware and operating system features is controlled by the capabilities listed in
its manifest file (similar to Android). The manifest must declare the features required by the application,
so that users can see and agree to those permissions and also so that the operating system allows access
to the APIs. Applications must request access to features like the contacts or appointments data, camera,
location, media library and more. See Microsoft’s Application Manifest File documentation for additiona
l information.
一个应用访问硬件和操作系统功能是受到manifest文件(类似于Android)中的性能表的限制的。Manifest必须声明应用所需的功能,这样,用户可以看见并同意那些许可,接可操作系统才允许访问对应的API。应用必须请求访问的功能类似联系人或约会数据、摄像机、本地、媒体库或更多。见微软的 应用 Manifest 文件 文档 获得更多的信息。
Summary-总结
This guide gave an introduction to the SDLC as it relates to mobile development. It introduced general
considerations for building mobile applications and examined a number of platform-specific considerations
including design, testing, and deployment.
本指南给出了SDLC的一个介绍,这是因为这涉及到移动开发。介绍了构建移动应用的通用考虑并剖析了一些指定平台的考虑,包括设计、测试和部署。