天天看点

《企业级ios应用开发实战》一导读

《企业级ios应用开发实战》一导读

为什么写这本书

随着我国3g网络和移动互联网的兴起,许多传统的企业应用正在从桌面向移动终端扩展,移动办公、移动营销、移动作业等需求日渐强烈。

有迹象表明,传统的互联网正在向移动互联网发展。根据摩根士丹利发布的全球互联网发展趋势报告(mary meeker 2010)显示:全球互联网发展趋势正在由pc-internet向mobile-internet转变,手机在某种意义上已经主导着互联网的发展,新兴的下一代互联网,即mobile 2.0正在崛起,这完全得益于移动通信技术的迅猛发展。这不仅仅是一场由最新数码科技与网络技术导致的变革,还是传统企业应用从internet向移动互联网转移的前提和诱因。

与pc相比,移动终端的这种全新用户体验是不可替代的,在一定程度上吸引了人们从桌面向移动终端的转移。而且,移动互联网也凭借着其出色的业务吸引力和资费吸引力,成为人们生活中不可或缺的一部分。

然而,机遇与挑战并存。对于企业而言,能否将自己的企业应用向移动互联网扩展,仍然存在着巨大的风险。诸如:用户体验改变、企业信息安全和企业机密泄露、移动应用开发中存在的技术风险等。

以苹果ios为代表的移动应用开发正方兴未艾。iphone和ipad正式进入中国的时间其实还不到3年(iphone于2010年7月正式在中国香港上市),国内开发者在苹果商店上淘金的时间比这要早些,但绝对不会超过4年。实际上,app store 拥有的历史还不到5年(app store正式上线时间是2008年7月11日)。所以说,iphone 应用开发仍然有着无限的潜力,称为“历史”恐怕为时尚早。因此,作者选择了以ios为目标平台的企业移动应用开发作为本书讲述的主题。

作者于2009年起开始接触ios开发。对于一个多年奋战在企业应用开发第一线的开发人员来说,ios企业开发是一个全新的领域。完全陌生的mac os x操作系统,别扭的xcode ide和interface builder,古怪的ios……由于不知道什么是开发证书和代码签名,甚至在第一次调试我的3.5英寸屏幕的itouch时,都是充满了坎坷。

当我历尽千辛万苦,终于逐渐步入ios开发这座大门。然而,却又面临新的问题:“企业应用是否能向ios平台进行迁移?”

从我第一天接到任务起,这样的怀疑就在我心中存在。ios实在是太封闭了,相对于android这样的开放平台,ios 平台对企业开发人员的限制实在是太多。而且,app商店始终只是游戏开发者的天堂,90%以上的个人开发者把自己的目光盯在了游戏、娱乐等个人应用领域,企业应用根本无法登上app商店的大雅之堂。原因也很好理解,企业应用不会为苹果公司带来可观的利润分成,app商店的盈利模式是基于应用下载量的。一个企业应用会有多少用户?几百万?几千万?不,大多数企业应用的用户量不会超过5位数。没有庞大的用户群,就不会给app商店带来丰厚的利润分成。实际上,我第一次向app商店提交一个企业应用时,被无情地拒绝了。苹果公司给的理由很直白:“你的应用只针对有限的用户群”,换句话说“苹果将无利可图”。

幸好苹果公司提供了“企业开发程序”(企业版idp),虽然购买“企业开发程序”需要299美金一年,但对于一个真正决心将企业应用向ios 移动终端扩展的企业来说,还是负担得起的。“企业开发程序”不需要苹果公司审核,使用“企业开发程序”部署应用不需要经过app商店,企业可以任意分发给自己的用户,苹果公司也不会找你要一分钱。

可以预料,在将来一段时间内,国内的ios个人应用开发者将不断向企业开发领域转移。实际上,苹果商店中个人应用的数量已经饱和,开发者的生存空间将逐渐变得狭小。大量的同质竞争直接导致了app商店的生态环境恶化,同类应用竞争激烈。为了保持 app 商店的竞争力和盈利模式不趋于低质化,苹果公司今后对商店应用的审核将越来越趋于严格,开发者想在商店中获利和生存的难度将越来越高。国内的公司及个人开发者会逐渐将目光转移到位于app商店生态圈之外的企业应用,ios企业应用将成为今后新的利润增长点。

最近,企业移动应用开发出现了一些新的趋势。最新的企业移动应用,有从 native app(即本地代码)向云发展的趋势,比如 html5、虚拟桌面。html 5 充分利用移动终端的浏览器(如safari或ie)和网络连接能力,来访问企业服务,并实现“一次开发,跨平台共享”的目的。而虚拟桌面则利用“数据中心”进行桌面的扩展,将客户端的数据、资源和图像放到了“云”上,ios 客户端则通过网络访问个人桌面。虚拟桌面一般作为企业的“云计算”解决方案进行实施,市场上比较成熟的产品主要来自vmware、citrix、microsoft和oracle等几大厂商,它跟开发人员没有太大的关系。还有一种趋势就是“服务器配置+中间代码+本地代码”。开发人员在服务器上以配置的方式产生出中间代码,然后服务器将中间代码编译为多个平台的本地代码(ios、android、sybian、windows),然后分别部署,以此实现跨平台的目的。

这些趋势的出现,从一定程度上试图解决当前本地代码开发(ios开发、android开发)的弊端,但效果还难以令人满意,比如都有性能下降、用户体验差、网络带宽占用大等缺点。因此,就目前来说,移动应用开发仍然是以本书介绍的本地代码开发为主流。

本书是作者多年开发经验的总结,很多内容来自作者在csdn上的博客,书中不少内容是经验之谈。本书根据ios操作系统更新频繁的实际情况,针对新的sdk版本进行了内容上的调整(本书内容适用于sdk 4.0~5.0,本书所有代码在xcode4.3下编译通过)。在介绍每一种sdk框架的同时,注重扩展,在继承的基础上进行创新,而不是一味复制、粘贴代码。

主题明确,以“ios”和“企业开发”为主题, 但并没有将二者割裂开来,而是将二者紧密联系、互相呼应。首先由浅入深介绍了整个sdk框架层次,包括objective-c语言简介、sdk的构成、foundation框架、uikit框架、quartzcore、coreanimation以及其他第三方扩展框架,然后对在企业应用中一些需要特别讨论的方面(如安全、网络、apn、多线程等内容)进行专门的论述。撇开企业开发的特色不谈,本书也完全可以作为一本ios开发的经典教材。

理论和技术兼顾。许多ios开发书籍,轻理论,重技术,往往只告诉你怎么做,而不告诉你为什么要这样做,难以让读者在理解的基础上加深记忆。而本书以理论为纲,以技术为体,从基本理论到具体使用的技术都一一道来,不仅告诉你怎么做,而且将每一种技术的来龙去脉阐述清楚。在讲解具体技术的同时,不时穿插着小的知识点,让读者进一步拓宽相关的背景知识。

详细分析代码,实用性强。作为编程类书籍,免不了有大量的代码。但本书对多数代码都进行了阐释,重点内容还会有专门的标注,如“提示”、“注意”等,以提醒读者注意,或者及时回顾前面的知识点。本书中的每一个示例程序,都收录到本书的随书光盘中。所有的程序都经过作者认真调试,可以直接运行。

本书适用于以下读者:

从未接触过objective-c、从其他语言转向ios开发、有一定面向对象编程基础的程序员。

正准备转向企业移动应用开发的 ios 应用程序开发人员 。

这是一本讲述ios和企业应用开发相结合的书,介绍如何在ios上进行企业应用的开发及分发、部署。本书从一个企业应用开发者的角度出发,以实现企业移动办公和3g应用为宗旨,介绍如何充分发挥苹果新一代操作系统ios的优势和iphone手机的软、硬件特性将企业应用扩展到ios平台。在最后一章以step by step的形式介绍了一个实战项目,以达到理论与实践结合的目的。本书也对苹果cocoa框架和其他第三方开源框架进行了深入介绍。

针对本书面对的两种主要读者,我们建议如下:

对于本书第一类读者,即“从未接触过objective-c、从其他语言转向ios开发、有一定面向对象编程基础的程序员”,本书提供了一个快捷的objective -c语言入门,以及一个简单易读而又务实详尽的ios sdk入门教程;本书的全部章节都将有助于读者尽快对objective -c及ios sdk有一个全面的了解,并迅速跨入ios开发的大门。

对于本书第二类读者,即“正准备转向企业移动应用开发的 ios 应用程序开发人员”,可以省略阅读本书部分章节,例如第2、3、4、5、6各章,但本书其他一些章节具备了良好的参考价值,例如:第10章以后的各章,在这些章节中,有部分内容是其他参考书中难以见到的,可以有选择地阅读相应章节。

基础篇

第1章介绍了企业应用的概念,什么是ios企业应用,ios企业应用的框架及构成,特别是对于苹果ios企业证书申请和ios企业应用程序的部署方式(in-house、ad-hoc、ota)进行了详细的介绍。

第2章介绍ios sdk,包括其框架和构成。ios sdk是ios开发中最为重要的工具和武器,每个ios开发人员都必须熟悉并深刻理解它。

第3章介绍ios开发语言objective-c。对于没有接触过这种语言的读者,将在本章对objective-c有一个全面的理解。本章从两个方面对objective-c进行了介绍,即objective-c的c语言特性和面向对象特性。也对objective-c的一些现代语言特性,如块编程(函数式编程中的主要内容)、反射(运行时支持)和可变参数也进行了介绍,这些内容在其他书籍中是比较罕见的。

第4章介绍xcode ide。从xcode 4.0开始,苹果对其功能和界面进行了全新的设计,把interface builder完全整合到xcode中,使程序员的开发效率更高。

第5章单独对xcode中的interface builder 进行了进一步介绍,特别是assistant editor的出现,与之前的版本相比,大大简化了开发人员进行各种连接(iboutlet和ibaction)的操作。

第6章介绍uikit以及uikit中包含的一系列最基本的ui组件,此外,介绍了如何在uikit的基础上进行扩充,创建自己的自定义组件库。

企业应用篇

第7章到第10章,依次从网络、xml/json、数据存储、安全这几个方面进行介绍。这些内容中,有相当一部分是企业开发人员早已熟知的领域(如网络、xml/json、数据存储和安全)。这些章节结合ios自身的特点进行详细的阐述,包含安全沙箱、嵌入式数据库以及ios安全框架等内容。

第11章介绍cocoa的多媒体、quartz 2d和core animation框架。

第12章介绍cocoa touch 特有的多点触摸和手势识别。

第13章介绍如何利用iphone的多语言支持实现应用程序的国际化。

第14章涉及两个方面:传统的线程编程和并行编程gcd(grand central dispatch)。在企业应用中,免不了要使用多线程。前者是传统的异步编程技术,直接与操作系统底层的线程打交道;后者是ios 4.0以后新的异步编程技术,以一种函数式编程的方式,达到让系统自动进行线程管理的目的,从而避开了线程编程的复杂性。

第15章介绍通知、本地通知和远程通知。通知是多个对象间进行对话的机制,但耦合性低于直接的方法调用。本地通知和远程通知是两种不同的进程唤醒技术,前者由系统来唤醒,后者通过rpc(remote process calling)唤醒。

第16章介绍开源框架core plot。core plot是著名的2d图形框架,用于绘制散点图、柱状图和饼图等图表。

第17章针对ios特有的硬件特性进行介绍,如通讯簿、相机、加速计和gps。

实战篇

第18章,介绍“企业apn”在企业中的应用,以及使用“企业apn”网络对ios客户端的一些特殊要求。该章实际上包含了一个实战项目,即一个简单的apn切换工具(同时也提供了简单的网络状态检测)。在这个实战项目中,涉及了广泛的内容和前面诸多章节中介绍的知识,诸如后台任务、配置描述文件、bsd socket编程、网络检测、safari阻塞和并行编程gcd。

第19章以案例导航的方式介绍了一个实战项目,指导读者从用户的实际需求出发,结合本书中讲述过的理论知识和技术,开发一个完整的ios邮件客户端,使读者对企业应用的开发有直观的认识。

<a href="https://yq.aliyun.com/articles/173486">第1章 企业应用的话题</a>

<a href="https://yq.aliyun.com/articles/173490">1.1 什么是企业应用</a>

1.1.1 传统意义的企业应用

1.1.2 ios 企业应用

<a href="https://yq.aliyun.com/articles/173493">1.2 ios企业应用程序的架构</a>

1.2.1 服务端

1.2.2 ios 客户端

<a href="https://yq.aliyun.com/articles/173548">1.3 ios企业应用程序的发布</a>

1.3.1 ios应用程序发布与app store

1.3.2 ad-hoc与in-house发布

1.3.3 ota无线部署

<a href="https://yq.aliyun.com/articles/173555">第2章 ios开发框架简介</a>

<a href="https://yq.aliyun.com/articles/173557">2.1 苹果ios 简介</a>

<a href="https://yq.aliyun.com/articles/173562">2.2 ios框架介绍</a>

<a href="https://yq.aliyun.com/articles/173564">2.3 cocoa touch 框架简介</a>

<a href="https://yq.aliyun.com/articles/173576">2.4 搭建ios开发环境</a>

2.4.1 安装mac os x操作系统

2.4.2 下载安装sdk

<a href="https://yq.aliyun.com/articles/173590">2.5 写一个iphone程序</a>

<a href="https://yq.aliyun.com/articles/173600">2.6 在模拟器上运行应用程序</a>

<a href="https://yq.aliyun.com/articles/173602">2.7 在 iphone 上运行应用程序</a>

<a href="https://yq.aliyun.com/articles/173657">第3章 objective-c 语法简介</a>

<a href="https://yq.aliyun.com/articles/173662">3.1 objective-c的c语言特性</a>

3.1.1 一个简单的 hello world

3.1.2 objetive-c是另一种c

3.1.3 数据类型

3.1.4 常量、变量和宏

3.1.5 #include和#import

3.1.6 函数

3.1.7 分支和循环

<a href="https://yq.aliyun.com/articles/173680">3.2 面向对象的c</a>

3.2.1 类和对象

3.2.2 消息机制

3.2.3 objective-c 的内存管理

3.2.4 类别和协议

3.2.5 反射机制

3.2.6 谓词

<a href="https://yq.aliyun.com/articles/173682">3.3 mvc模式</a>

<a href="https://yq.aliyun.com/articles/173689">3.4 kvo模型</a>

3.4.1 注册kvo

3.4.2 接收变更通知

3.4.3 发送变更通知

<a href="https://yq.aliyun.com/articles/173691">3.5 块编程</a>

3.5.1 块的特点

3.5.2 objective-c 中的块

<a href="https://yq.aliyun.com/articles/173694">3.6 可变参数</a>

<a href="https://yq.aliyun.com/articles/173696">3.7 本章小结</a>

第4章 xcode集成开发环境

4.1 创建第一个xcode应用程序

4.2 构成应用程序的那些东西

4.2.1 info.plist 和 pch 文件

4.2.2 xib 文件

4.2.3 资源文件

4.2.4 源代码文件

4.2.5 项目和目标

4.2.6 frameworks

4.2.7 应用程序的文档目录和临时文件夹

4.3 了解xcode为我们做了些什么

4.3.1 main.m

4.3.2 应用程序委托

4.4 在xcode中添加view controller

4.5 在xcode中添加框架

4.6 xcode 使用技巧

4.6.1 自动完成

4.6.2 查找和替换

4.6.3 快速帮助

4.6.4 快照

4.6.5 书签

4.6.6 使用导航条

4.7 本章小结