• 为什么写这本书随着我国3G网络和移动互联网的兴起,许多传统的企业应用正在从桌面向移动终端扩展,移动办公、移动营销、移动作业等需求日渐强烈。有迹象表明,传统的互联网正在向移动互联网发展。根据摩根士丹利发布...

    6e9087a6e4d9a22d0badf1a26e25044c77763c66

    前 言

    为什么写这本书
    随着我国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章以后的各章,在这些章节中,有部分内容是其他参考书中难以见到的,可以有选择地阅读相应章节。

    本书共分19章,主要内容如下:

    基础篇
    第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邮件客户端,使读者对企业应用的开发有直观的认识。

    目 录

    第1章 企业应用的话题
    1.1 什么是企业应用
    1.1.1 传统意义的企业应用
    1.1.2 iOS 企业应用
    1.2 iOS企业应用程序的架构
    1.2.1 服务端
    1.2.2 iOS 客户端
    1.3 iOS企业应用程序的发布
    1.3.1 iOS应用程序发布与App Store
    1.3.2 Ad-Hoc与In-House发布
    1.3.3 OTA无线部署

    第2章 iOS开发框架简介
    2.1 苹果iOS 简介
    2.2 iOS框架介绍
    2.3 Cocoa Touch 框架简介
    2.4 搭建iOS开发环境
    2.4.1 安装Mac OS X操作系统
    2.4.2 下载安装SDK
    2.5 写一个iPhone程序
    2.6 在模拟器上运行应用程序
    2.7 在 iPhone 上运行应用程序

    第3章 Objective-C 语法简介
    3.1 Objective-C的C语言特性
    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 分支和循环
    3.2 面向对象的C
    3.2.1 类和对象
    3.2.2 消息机制
    3.2.3 Objective-C 的内存管理
    3.2.4 类别和协议
    3.2.5 反射机制
    3.2.6 谓词
    3.3 MVC模式
    3.4 KVO模型
    3.4.1 注册KVO
    3.4.2 接收变更通知
    3.4.3 发送变更通知
    3.5 块编程
    3.5.1 块的特点
    3.5.2 Objective-C 中的块
    3.6 可变参数
    3.7 本章小结

    第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 本章小结

    展开全文
  • 1.2 iOS企业应用程序的架构 本书把iOS企业应用定义为传统企业应用iOS手机终端的顺延和扩张。在此定义下,iOS企业应用由服务端和iOS客户端构成,二者间通过3G移动互联网(CDMA/TD/WCDMA)连接或通信。 1.2.1 服务端...

    1.2 iOS企业应用程序的架构

    本书把iOS企业应用定义为传统企业应用向iOS手机终端的顺延和扩张。在此定义下,iOS企业应用由服务端和iOS客户端构成,二者间通过3G移动互联网(CDMA/TD/WCDMA)连接或通信。

    1.2.1 服务端

    服务端(企业网络或Web服务)实际上为iOS企业应用提供企业数据和服务。如果把iOS客户端看做是前端应用,则服务端就是后台服务。服务端向前端提供一系列访问传统企业应用的接口,也可以为前端提供企业数据库和业务系统的访问。因此,iOS企业应用的服务端可能有两层或多层:接口、企业应用、企业数据库。
    本书的核心内容是介绍iOS开发技术,不会对企业开发技术做过多的介绍。因此服务端代码(企业应用和企业数据库)的开发细节不会在本书中出现,但对于本书中涉及的接口,会提供必要的代码给读者学习。此外,本书中的接口代码是以Java编写的,需要读者对Java语言有一定的了解。

    1.2.2 iOS 客户端

    iOS客户端是一个标准的iOS应用,当然它也具备一些企业应用所特有的特点。但无论如何,它不应当是在浏览器中运行的Web网页。如果你想找一本介绍如何开发在iPhone浏览器上运行的Web网页应用程序的书,那么不应该是本书。
    本书大部分内容旨在教你开发标准的iOS应用程序,这与市面上大部分介绍iPhone开发的书籍是一致的,但有一些例外。
    首先,作为运行在手机上的iOS企业应用来说,安全是尤其需要注意的问题。因为iPhone等手持式移动终端所特有的一些特点,比如随身携带、随处可用,不需要登录,容易丢失等等,稍有不慎,就有可能导致企业机密的泄漏。
    其次,对于企业应用来说,访问网络的需要,尤其是访问企业网络内部资源,如服务器、数据库等,永远是必不可少的重要内容。无论在任何情况下,网络带宽永远是企业的稀缺资源,对于企业应用尤其如此,因此,必须在节省带宽和提高用户体验中进行平衡。本书使用了很大的篇幅来介绍网络访问技术,此外,企业网络的类型(例如APN网络)会给iOS访问企业数据带来麻烦。由于iOS本身的限制,iPhone在切换APN网络时显得不太灵活——iPhone只能通过.mobileconfig描述文件切换APN。你可以在App Store上找到一堆的应用,专门用于给iPhone提供APN切换的功能。因此,本书也会介绍如何在自己的项目中实现一个简单APN切换器。
    另外,与App Store中占据主要份额的游戏应用不同,iOS企业应用有使用数据库技术的迫切需要——作为企业开发人员,习惯于把业务数据保存在关系数据库中的这一顽疾早已根深蒂固——哪怕我们在客户端使用数据库的目的仅仅是出于把服务端数据缓存到本地的需要。
    最后,还需要介绍一下文档和报表的显示。企业办公环境中离不开各种文档:文本、图片、视频和声音,尤其Microsoft 的Office文档俨然已成为了企业办公中公文流转的标准格式。如果在iPhone手机上竟然无法打开这些最为常见的企业办公文档,这绝对是一场悲剧。而报表和图表,是企业管理中最为常见的数据表现形式和数据分析手段,把企业运营数据以报表图表的形式进行展示,显然是iOS企业应用中应该提供的基本功能。
    综上所述,企业开发人员必须充分认识到iOS企业应用的特点,结合企业的实际需要,才能开发出一个优秀的iOS企业应用。

    展开全文
  • 这里借用了传统意义上的企业应用概念,试图阐述清楚如何区分iOS企业应用,以及iOS企业应用的定义。 1.1.1 传统意义的企业应用 据IDC统计,在过去的10年中,全球企业在信息系统上一共投资18万亿美元。巨大的投资为...

    1.1 什么是企业应用

    iPhone开发是一个新兴的话题,对于“企业应用”和“非企业应用”,它并没有很清晰的划分。这里借用了传统意义上的企业应用概念,试图阐述清楚如何区分iOS企业应用,以及iOS企业应用的定义。

    1.1.1 传统意义的企业应用

    据IDC统计,在过去的10年中,全球企业在信息系统上一共投资18万亿美元。巨大的投资为企业建立了众多信息系统,以帮助企业进行内外部业务的处理和管理工作。根据METAGroup的统计,一家典型的大型企业平均拥有49个应用系统。虽然迄今为止,“企业应用”都没有一个明确的定义,笔者认为企业应用是企业环境中的特定系统,例如:
    ECS(电子商务系统),企业通过实施电子商务实现企业经营目标,电子商务系统提供了网上交易和管理等全过程的服务,如网上订购、网上支付、电子账户、服务传递、意见征询、业务管理等各项功能。
    ERP(企业资源规划)系统,指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。企业通过企业资源规划系统能实现企业供应链管理、精益制造、敏捷制造以及整个生产过程的计划、控制、采购、销售、成本核算的管理目标。
    CRM(客户关系管理)系统,企业利用信息技术(IT)和互联网技术实现对客户的整合营销,是以客户为核心的企业营销的技术实现和管理实现。客户关系管理注重的是与客户的交流,企业的经营是以客户为中心,而不是传统的以产品或以市场为中心。
    OA(办公自动化)系统,它是利用计算机技术提高办公效率,实现办公自动化处理的系统。它采用Internet/Intranet技术,和工作流的概念,使企业内部人员能方便快捷地共享信息,协同工作,提升日常办公的工作效率,并为企业的管理和决策提供帮助。
    DBS(数据库系统),是企业信息化的核心,负责整个企业在经营过程中的数据储存、共享和处理,为其他信息系统提供支撑。
    DW(数据仓库)是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而建设的数据仓库。数据仓库系统是一个信息处理平台,它从业务处理系统获得数据,并处理数据,从而获得战略信息。
    由此可见,只要是在企业信息化环境中运行的应用软件,都可以称为企业应用。

    1.1.2 iOS 企业应用

    根据摩根士丹利发布的全球互联网发展趋势报告(Mary Meeker 2010)显示:全球互联网发展趋势正在由PC-Internet向Mobile-Internet转变,手机在某种意义上已经主导着互联网的发展,移动互联网将带来很多新的商业机会。新兴的下一代互联网,即Mobile 2.0正在崛起,同样带来令人刺激的软件行业商业机会。
    此外,2008年底中国3G牌照正式发放,标志着移动通信3G时代终于来临。移动通信网络由2G/2.5G向3G的过渡,为移动互联网绑上了高速发展的助推器。对国内软件开发商而言,这意味着新的机遇和挑战产生了。
    根据工业和信息化部网站发布的数据(中国工业和信息化部 2010),随着中国电信3G用户数达到1000万、TD用户数达到1698万、中国联通3G用户数达到1166万,目前我国三家电信企业的3G用户数均过千万。截至10月底,我国3G用户数累计达到3864万,环比增长10.4%,同比增长295.7%,比2009年年底增长2538万,10月新增用户364.6万户。TD用户在3G用户中的占比达到43.9%。
    与传统的2G和2.5G网络相比,3G 网络带宽已高达300~600kb/s,比之512kb/s的ADSL也相差无几,因此诸多应用不再受到带宽限制,诸如:移动办公、个人应用、移动金融、GPS导航、视频通话,甚至是传统的企业应用CRM、ERP,也可能运行在手机上。
    2007年1月的Macworld年度大会上,苹果公司发布了令人期待已久的iPhone手机。iPhone将创新的移动电话、可触摸宽屏iPod以及具有桌面级电子邮件、网页浏览、搜索和地图功能的突破性因特网通信设备这三种产品完美地融为一体,引入了基于大型多触点显示屏和领先性新软件的全新用户界面,让用户用手指即可控制iPhone。iPhone还开创了移动设备软件尖端功能的新纪元,重新定义了移动电话的功能。
    全球互联网向移动互联网的迁移,3G网络的兴起,新一代智能手机产品尤其是 iPhone 在全球市场中受到热烈追捧,导致企业应用正呈现由传统internet/intranet 向移动网络/手机终端扩张的趋势。iOS 正是苹果公司为其创新性产品 iPhone 开发的新一代手机操作系统,iOS 企业应用的概念,也因此衍生而来。

    展开全文
  • 第2章 iOS开发框架简介 本章首先介绍苹果操作系统iOS的起源、发展及构成,然后对iOS开发框架Cocoa Touch进行介绍。Cocoa Touch(或Cocoa)是多个开发框架的集合,由多个层级的子框架构成。最后介绍苹果开发工具包iOS...

    第2章 iOS开发框架简介

    本章首先介绍苹果操作系统iOS的起源、发展及构成,然后对iOS开发框架Cocoa Touch进行介绍。Cocoa Touch(或Cocoa)是多个开发框架的集合,由多个层级的子框架构成。最后介绍苹果开发工具包iOS SDK及开发环境的搭建。

    展开全文
  • 1.3 iOS企业应用程序的发布 除了上述特点,iOS企业应用还有一个显著的特点,就是应用程序的发布方式。iOS企业应用具有两种发布方式:In-House和Ad-Hoc,它们并不经过苹果...1.3.1 iOS应用程序发布与App Store 2008...

    1.3 iOS企业应用程序的发布

    除了上述特点,iOS企业应用还有一个显著的特点,就是应用程序的发布方式。iOS企业应用具有两种发布方式:In-House和Ad-Hoc,它们并不经过苹果公司的App Store进行发布,而只是在企业内部进行发布。换句话说,不经过苹果商店的应用程序审核程序。

    1.3.1 iOS应用程序发布与App Store

    2008年3月6日苹果公司推出了iPhone的应用程序开发包(iPhone SDK),吸引了全世界的开发者。2008年7月11日,App Store正式上线,从而开辟了一种前所未有的应用程序销售模式。起初,只有少数的开发者(主要是大型程序开发商)掌握iPhone的开发语言,应用程序商店出现的都是一些精品程序。例如,在2008年TIOBE发布的全球编程语言排名中,iPhone等使用的Objective C一直都在40位左右徘徊,使用率为0.134%;排名第一的为Java,使用率约为19%。《连线》杂志评出的2008年最佳iPhone程序中,排名第一的是来自谷歌的地图程序Google Earth,Twitter的iPhone手机客户端排名第七。
    然而,随着更多开发者尤其是个人开发者的进入,一些开发者开始从App Store中获益,并被媒体大肆报道。例如, Freeverse公司开发的《Skee-ball》游戏在一个月内就赚得18.1万美元,而Freeverse开发和部署该游戏仅花费了两个月的时间。国内开发者139.ME团队的水族箱程序第一天的下载就实现了300美元的收入。
    此后,App Store中应用程序的数量呈现出爆炸性增长。2010年8月,Objective-C已经进入了TIOBE的前十大编程语言排行榜,使用率达到3.15%,并且是增长率最快的语言。App Store中应用程序的数量,也从2008年底的1万个,增加到2009年底的10万个。截至2010年10月,App Store已经增加到30万个应用程序,下载量更是突破50亿。
    这些惊人的数字,只能用奇迹来形容,这也让人不难理解:为什么iPhone开发会这样火爆。
    然而,如果你现在正准备成为或者已经是一个iPhone开发人员,你也许知道,要想下载iPhone SDK,必须注册成为苹果公司的iPhone Developer(iPhone 开发人员)——这并不是免费的,你需要购买苹果公司的iPhone Development Program;否则你只能下载一个功能有限的iPhone SDK。
    除此之外,由于苹果公司一贯坚持的“精品应用”策略,苹果公司没有开放iPhone的操作系统。实际上,在App Store上线以前,人们甚至无法在iPhone上安装程序——苹果公司通过App Store控制着iPhone应用程序的发布。如果你想让自己开发的程序安装在iPhone上,你必须购买iPhone Developer Program。
    iPhone Development Program有两个版本:标准版和企业版。
    标准版程序价格为99美元/年,它提供大量开发工具、资源和技术支持,支持可以通过苹果公司App Store发布应用程序。同时也支持在iPhone/iPod Touch/iPad(不仅仅是在模拟器)上调试代码。
    企业版程序价格为299美元/年,支持开发企业专用的,在内部发布的企业应用程序。它不支持在苹果公司App Store销售和发布应用程序,但它支持不经苹果公司审核的应用程序发布方式。
    标准版和企业版这两者的区别很像是IT界中“做产品”和“做项目”的提法。做产品依靠销售产品拷贝盈利,卖的拷贝数越多则赚的就越多,标准版程序也是如此,依靠下载数量盈利。而做项目并不需要销售产品拷贝,它为企业提供解决方案,做的企业越多则赚的越多,即企业版程序,不管有多少用户在下载(安装)和使用,每做一个项目(企业)收取的开发费用总是相对固定的。
    网络资料中,介绍标准版IDP比较多,介绍企业版IDP相对较少,而iOS企业应用是本书的主题,与企业版程序有着直接关系,因此接下来详细介绍企业版程序(企业版IDP)。

    1.3.2 Ad-Hoc与In-House发布

    企业版IDP只支持两种应用程序发布方式,Ad-Hoc和In-House发布。尤其是In-House发布,是企业版IDP所独有的。它使用一种叫做“In House Distribution Provisioning Profile”的文件进行发布,不能发布到App商店进行销售,也不需要Apple的评审。你可以把In-House应用通过任何方式发布给你的企业员工、用户及你认可的其他任何人,尤其适合于企业应用的开发。
    1.申请企业版IDP
    首先,你需要有一个Apple ID,如果没有则需要事先申请一个。其次,你的企业需要拥有邓白氏编码。如果没有则需要进行注册。
    邓白氏编码是美国联邦政府推荐使用的企业机构编码。可以看成是美国版的“组织机构代码”,只不过已经得到了联合国、澳大利亚政府、欧盟及美国政府的承认,成为了全球企业标准。
    申请邓白氏编码在D&B公司的网站(英文)或者“华夏邓白氏”网站(中文)申请,在网站上提交注册申请后,等待1~2天,对方人员会跟你联系(Email)。如果英文沟通有问题,你可以在华夏邓白氏进行申请,他们会安排中籍文员跟你联系。
    邓白氏注册服务有几个版本,收费情况也不一样。笔者一开始收到的邮件是“实地核实”的版本,报价15200/2年。后来经与北京苹果公司联系,只需要购买最基本的“标准版”即可,报价8600元/2年,有网友说2000~3000元/年,现在看来是不可能的。联系时一定要强调是购买标准版服务(最便宜),否则你可能会花冤枉钱。
    收到邮件后,把申请表、协议打印出来,填好并加盖公章,然后加上企业营业执照副本、扫描为电子的,发给对方邮箱。其实还有一个就是汇款水单(小票),需要发送给对方——这一步其实可以省略,笔者申请时并没有Email汇款水单 ,只要对方确认汇款到账即可。
    大约5~7天后,对方发来第2封邮件,告诉你贵公司的编码。此外还可以在你的公司网站上安装一个邓白氏电子标识——在网页上嵌入指定脚本,则会在页面上显示一个D&B图标,点击图标自动链接到D&B的网站并呈现你们公司的电子注册信息。
    现在,可以申请企业版IDP了。登录苹果公司开发者网站,申请Apple Developer Program,注意要选择iOS Enterprise Program链接(在页面底部)。
    点击Apply Now按钮,进入下一页,点击Continue按钮,再进入下一页,选择“Use an existing Apple ID”,点击Continue。进入下一页,输入你的Apple ID、密码,登录。
    后面就是确认注册协议和填写你的公司资料了(英文)。内容最好同邓白氏申请时一样,否则对方会打电话来确认,要你更改。填写完公司资料,还要填写委托人联系资料。注意委托人应该有权代表公司签字(需要贵公司认可,他们会在电话里确认)。
    提交资料后,会在注册的联系邮箱里收到苹果公司的邮件,内容大概是感谢你提交了申请,申请的编号是多少,公司名称、邮箱地址等,如果你想看评审流程,可以登录Member Center。接下来就是等待苹果公司的电话了。这个过程大概要2~3天,对方会安排懂中文的人员来电话,如果没什么问题,接下来(电话之后几分钟)会收到苹果公司的第2封邮件,大意是要你点击邮件中的链接,查看一个协议。
    同意协议后,显示一个页面,大意是你所申请的国家不支持在线购买苹果公司产品(在线支付),需要你下载一个PDF格式的Purchase Form(见图1-1)。
    将它打印出来,根据要求填好,然后传真给苹果公司。
    注意,国内信用卡支持美元支付的一般是Visa卡(如招行)和Master卡(如交行),一定要找那种卡上印有“Visa”或“Master”标志的信用卡。
    Cvc2 code是指信用卡背面的那串数字(7位)的末3位。
    信用卡地址写申请信用卡时登记的地址。
    如果传真机发送国际传真有麻烦,可将Purchase Form扫描后用Email发给亚洲苹果公司chinadev@asia.apple.com,请其转交给 Billing 团队。亚洲苹果公司几分钟后自动回复了一封邮件,并在信中附了一个业务流水号: Follow-Up: 149653xxx。下次再给亚洲苹果公司联系时,可以附上这个业务流水号。
    然后3~5个工作日后,如果信用卡办理了账户余额变动短信提醒功能,则会收到扣费成功短信(注意美国和中国有时差,很可能是在半夜发送的)。登录邮箱后,果然收到了苹果公司的2封Email,1封是发票,上面有你的发票号码,单位报账的时候把这封邮件内容打印出来就可以了。另1封是激活邮件,告诉你现在你的IDP账号已经生效了,你点击那个login now按钮可以登录到member center,这时可以看到你的developer program overview的状态已经改变。同时,Peoples中会包含一个成员,这个成员就是你注册IDP时所绑定的开发者账号(Apple ID),同时也是该IDP的Agent(超级管理员,具有发布权限)。
    screenshot

    2.制作开发者证书
    (1)在本机生成证书请求CSR
    从Dock栏的“应用程序”→“实用工具”中,打开“钥匙串”应用程序,修改偏好设置如图1-2所示。
    screenshot

    选择菜单“钥匙串访问→证书助理→从证书颁发机构求证书”,如图1-3所示。
    注意,如果此时密钥中的某个私钥处于选中状态,则菜单会变为“钥匙串访问→证书助理→用<私钥>从证书颁发机构求证书”,这样制作出来的CSR是无效的。
    screenshot

    输入你的Email地址和名字,确保Email地址和名字与你注册为iOS开发者时登记的相一致。
    选中Saved to Disk(保存到磁盘)单选按钮并勾选Let me specify key pair information(指定密钥对信息)复选框,然后点击Continue按钮,如图1-4所示。
    screenshot

    当选择了Let me specify key pair复选框之后,会要求你指定文件保存位置。接下来按图1-5所示指定密钥对信息。
    点击Continue按钮,即可生成CSR文件。一旦生成CSR,在“登录”钥匙串中会生成一对密钥对(一个私钥,一个公钥)。你可以在钥匙串的密钥栏中查看。
    screenshot

    (2)提交CSR文件
    用企业版IDP绑定的Apple ID( 跟制作CSR时要求输的可能不一致,这里是注册企业版时绑定的iOS开发者账号,即Agent)登录iOS Provision Portal 。
    在Provision Portal页面中,依次点击“Certificates→Development中的Add Certificate”,进入图1-6所示的页面。
    screenshot

    接下来点击左下角的Choose File按钮,选择所生成的CSR文件,然后点击Submit按钮。如果密钥长度未设置为2048,Portal会拒绝CSR。
    提交CSR后,Team管理员(Agent)会收到一封提醒邮件,主题为 Certificate Request Requires Your Approval,提示你需要去同意该CSR。此时Agent需要登录Portal去同意该CSR。但实际上,Agent也可能根本不需要点击“同意”按钮,Portal几秒钟后就自动同意了——笔者遇到的情况就是这样的(可能笔者是用Agent提交CSR的)。
    (3)下载并安装开发者证书
    用提交CSR的Apple账号登录Portal。如果机器上未安装WWDR证书,请点击“Certificate →Distribution”中的链接“Saved Linked File to Downloads”,以下载WWDR证书,并通过双击WWDR证书文件进行安装。
    在“Certificate→Development”中, 在Your Certificate下会列出当前有效的开发者证书。 点击Download按钮,即可下载到本机。下载后双击,即可安装到本机。可以在钥匙串“证书”一栏中查看到导入的开发证书。
    Team 成员只能下载自己的iOS开发证书。Team管理员有权下载所有成员的公有证书。苹果公司不接受CSR中的私钥。私钥仅对创建者有效,并且必须存储在系统钥匙串里。
    (4)保存私钥并迁移到其他系统
    如果你在多台电脑上进行开发或者重装系统,那么把私钥存储在安全的地方是件很重要的事情。如果没有私钥,你无法在Xcode中签名代码并进行真机调试。
    钥匙串在生成操作系统CSR时,就会在“登录”钥匙串中创建一个私钥。该私钥和你的用户账号绑定,如果重装操作系统导致该私钥遗失,则该私钥无法再次生成。如果你想在多台电脑上开发和调试,你必须将私钥导入到每一台机器上:
    在钥匙串访问程序中,选择登录钥匙串的“密钥”。可以看到有许多密钥对,选择与你的开发者证书相对应的私钥(还记得创建CSR时要你输入的邮箱地址和名字吗?那个名字会显示在私钥的名字上)。然后选择菜单“文件→导出项目…”,将私钥保存为.p12格式(Personal Information Exchange)。当提示输入密码时,设置一个密码并记住它,它会在导入.p12文件时使用。现住,你可以把.p12文件拷贝到其他机器上并双击它进行安装,这时会提示你输入导出私钥时设置的密码。
    这个私钥是重要的。如果你机器重装系统了(或者你想把开发环境迁移到另一台机器上),那么很可能需要重新安装开发环境,包括导入开发者证书。每个开发者证书都是和申请证书(提交CSR)时的私钥(私钥可以保存在.p12文件中)是绑定的。如果仅仅是导入了开发者证书文件而机器上没有对应的私钥,则这个开发者证书对这台机器是无效的。
    3.设备ID
    所谓设备ID(device ID又称UDID)是Apple 设备上的40位十六进制码,每台Apple设备的设备ID都是唯一的,Apple以此来识别每一台iOS设备。
    我们通过在Provision Portal中录入设备的设备ID,可以允许开发者在指定真实设备上进行调试。在Provision Portal中最多允许输入100个设备ID。
    因此,录入设备ID是后续制作Provision Profile的必需步骤(而Provision Profile又是真机调试的必需步骤)。
    (1)获取设备ID
    有两种获取设备ID的方式:
    把Apple 设备(iPhone或iPod)连接电脑,打开Xcode(以4.2版本为例)的Organizer,如图1-7所示。
    screenshot

    或者,把Apple 设备(iPhone或iPod)连接电脑,打开iTunes,如图1-8所示。
    screenshot

    那个40位16进制的数字就是设备ID。
    (2)添加设备ID
    以Team管理员登录Provision Portal,点击Devices页面中的“Add Device”按钮,如图1-9所示,在其中进行以下设置:
    Device Name:设备名称,输入一个描述该设备的名字。
    UD ID:即设备ID。
    点击Submit按钮即可。
    screenshot

    4.创建App ID
    App ID是识别不同应用程序的唯一编码。如果你的程序要连接Apple Push Notification服务(一种push通知),需要用到App ID。如果应用程序之间要共享钥匙串数据,也会用到App ID。总之,App ID在iOS开发中很重要。在这里App ID的最大用处是制作真机调试用的Provision Profile(对代码进行签名,它需要提供一个App ID)。
    一个App ID由两部分构成:一个10位字符的Bundle Seed ID前缀,这个Bundle Seed ID由Apple分配,全球唯一,保证不会重复;一个Bundle Identifier后缀,这个Bundle Identifier由Team管理员指派,Apple建议用反域名规则命名这个Bundle Identifier。例如:8E549T7128. com.apple.AddressBook。其中,8E549T7128是Bundle Seed ID,com.apple.AddressBook是Bundle Identifier。
    如果你写了一系列应用程序,它们共用相同的钥匙串(如共用密码),或者根本就不使用钥匙串访问,你可以只创建一个App ID,所有的应用程序都使用以星号结尾的App ID。这个星号就是通配符,只能用于App ID最后一个字符。例如,这个App ID可以是:R2T24EVAEE.com. domainname. 或者 R2T24EVAEE.
    以Agent或Team 管理员登录Provision Portal,点击“App ID”页面中的“New App ID”按钮。如图1-10所示,在其中修改如下信息:
    Description:给这个App ID一个名字。如果存在多个App ID,每个App ID需要一个易于识别的名称。
    Bundle ldentifier:如前面所述,Bundle Seed ID是Apple分配的,其实这里只需要你输入Bundle Identifier。可以使用统配符*。
    screenshot

    5.制作开发者Provisioning Profile
    拥有了开发者证书(Development Certificate),只是表明你有权利在电脑上进行开发,在模拟器上运行程序,但你还不能在iPhone上运行你开发的程序。其实如果你只是在模拟器上调试程序的话,要不要开发者证书都无所谓,因为证书只是用来代码签名(Code Sign)的,如果在模拟器上运行的话,你可以选择不签名(don’t code sign)。
    如果要在真机上调试就不一样了,没有这个Provision Profile,苹果设备无法安装、运行你开发的程序(这个Provision Profile也将随程序一同安装到iPhone上)。这个Provision Profile中记录了一些信息:开发者证书、开发者Apple ID、一系列设备ID(开发者可以使用哪几部设备进行调试——这些设备的设备ID要登录到Portal上)。
    (1)创建开发者Provision Profile
    登录Provision Portal,点击“Provisioning→Development”,点击New Profile按钮,修改以下信息:
    Profile Name:输入Profile的名字,随意。
    Certificate:选择开发者证书。
    App ID:选择一个App ID。
    Devices:设备ID列表。
    点击Submit按钮,即会生成Development Provisioning Profile,如图1-11所示。
    screenshot

    (2)安装Development Provision Profile
    所有Team成员都可以下载Development Provision Profile。但只有Profile中记录了设备ID的设备以及iOS开发者证书所指定的开发者能够使用这个Profile。
    在Portal的“Provisioning→Development”中,点击某个profile右边的“download”按钮。下载profile后,将下载到的文件拖曳到桌面Dock面板的Xcode图标上(或者直接拖到Xcode的Organizer中)。这会将profile文件拷贝到~/Library/MobileDevice/Provisioning Profiles目录。
    (3)签名并调试
    这需要用到两个文件:证书用于给代码签名,Provisioning Profile用于真机调试。
    在Xcode (以4.2版本为例)中打开项目,选中 Target,打开info窗口,在Build Settings面板中找到“Code Signing Identify”,打开并点击“Debug”下面的“Any iOS Device”将弹出一个签名文档(即Provisioning Profile)选择列表,如图1-12所示。
    screenshot

    提示:除了可以对“Debug”进行签名,我们还可以对“Release”、“Distribution”等进行签名。这里“Debug”、“Release”、“Distribution”指的是不同的编译版本,在Xcode里也叫做Schema。一个Schema是一种编译方案,代表了一个项目在编译时所采用的编译选项,包括编译器选项参数、环境变量、签名文档和编译脚本等。默认情况下,一个Xcode项目只有“Debug”和“Release”两种Schema,分别代表了调试时和发布时的不同编译选项。在Xcode里,这两种Schema是不一样的。因为程序员在开发调试过程中,对代码进行编译是非常频繁的,这种情况下,应该对编译速度进行一些优化,以节省编译时间,但同时运行效率就会较差一些。但对于发布版本就相反了,这时的编译器应当优先考虑在运行速度上进行优化,而编译速度就会有所下降。此外,你也可以自己加入一些定制的Schema,比如“Distribution”,从而对编译选项进行一些调优。
    在弹出菜单中选择你要用于签名的Provision Profile(即先前在Portal中制作的Provision Profile),该签名应当和一个开发者证书对应。这个Profile就是前面安装的Development Provision Profile。
    注意,有时候Xcode会自动根据当前连接的设备的设备ID选择一个有该设备调试权限的签名,比如一般是位于Automatic Profile Selector(灰色)条目下面的iPhone Developer项。这在大部分时候是适用的,但有时候Xcode的选择并不符合你的意愿。此时就需要手动修改签名。
    例如,在图1-12中,Xcode自动选择了“Automatic Profile Selector”下面的“iPhone Developer(current matches 'iPhone Developer:Hongyan Yang...')”进行签名。这表明将用iPhone Developer“Hongyan Yang”的数字证书进行签名。一个证书可以绑定多个Provision Profile。在图1-12的例子中,“Hongyan Yang”的证书就会存在于许多Provision Profile中:My Development Profile、iOS Team Provisioning Profile 。在图1-12中,有的证书是灰色的,表明不能用于当前签名(可能是Provision Profile的IDs列表中没有包含调试设备,或者App ID不匹配,或者证书和私钥不匹配等原因)。
    在Target的info面板(其实就是info.plist中的内容)中,还需要设置的Bundle Identifier。如果你的 App ID 是 A1B2C3D4E5.com.domainname. applicationname(我们在前面创建的App ID),那么Bundle Identifier可以是 com.domainname.applicationname(不需要填写Bundle Seed ID)。如果App ID使用了通配符,比如A1B2C3D4E5.com.domainname.*,则Bundle Identifier可以是com.domainname.<任意字符>。如图1-13所示(以Xcode 4.2为例)。
    签名完成,你就可以在真机上运行程序了。点击Xcode工具栏左上角Scheme下拉按钮,从中选择Device→Debug,然后点击Build and Debug按钮,编译并在真机上运行程序。
    (4)发布应用程序
    发布应用程序需要使用发布证书(Distribution Certificate)。发布证书的制作,跟制作开发者证书的步骤是一样的,只不过使用的是Provision Portal的“Certificates→Distribution”功能。
    把制作好的发布证书下载、安装到本机。
    screenshot

    发布应用程序时使用的是“发布证书”,就如同开发时要使用“开发证书”一样。同理,发布时用的签名文档(即Provision Profile)也与开发时使用的不太一样。
    企业版IDP有两种发布方式:In-House和Ad-Hoc。两种Profile制作步骤稍有区别。而前者(In-House方式发布)正是企业版IDP真正区别于其他版本的IDP所在。我们重点介绍In-House方式的发布。
    6.制作In-House发布的签名文档
    以Team Admin(Agent)登录Provision Portal,打开“Provisioning Distribution”页面,如图1-14所示。
    screenshot

    进行如下配置:
    Distribution Method:发布方式,选择In House。
    Profile Name:Profile名称,用于区别多个Profile。
    Distribution Certificate:选择要在Profile中绑定的发布证书。
    App ID:指定一个已有的AppID。
    Devices(optional):要绑定的device ID。因为In-House方式可以在任何Apple设备上发布,所以不需要设定Devices,这一项不可用。
    点击Submit按钮,生成Profile。将Profile下载到本地进行安装。方法:把Profile文件拖曳到Dock上的Xcode图标。
    7.制作Ad-Hoc发布的签名文档
    以Admin或Agent登录Provision Portal。打开“Provisioning Distribution”页面,如图1-15所示。
    screenshot

    与In-House方式大同小异,只不过发布方式选择Ad-Hoc,同时在Devices(optional)栏勾选要绑定的device ID,最多可选择100个。
    点击Submit按钮,生成Profile,将Profile下载到本地进行安装。
    8.编译发布版本
    打开你的项目。在Target的Builder Settings面板中,找到Code Signing Identity下面的Release项。将Any iOS SDK指定为你的发布证书(Distribution Certificate),如图1-16所示。
    screenshot

    切换到Info面板,在Identifier栏输入Bundle Identifier。该Bundle Identifier应根据App ID填写。
    选择菜单“Project→Edit Scheme”,在Profile的Info窗口中,将Build Configuration选择为Release,如图1-17所示。
    在菜单栏选择“Product→Archive”。
    如果Archive是灰色的,请连接设备,在Scheme按钮中选择所连接的iPhone,如图1-18所示。
    screenshot

    这时再次选择“Product→Archive”,Archive就变成可用的了。
    点击“Product→Archive”,编译成功后,会弹出Organizer窗口,如图1-19所示。
    screenshot

    点击Share按钮,又会弹出另一个窗口,如图1-20所示。
    screenshot

    然后,点击Next按钮,会弹出新窗口选择Archive保存路径,如图1-21所示。注意,不要勾选“Save for Enterprise Distribution”选项。
    screenshot

    填入文件名,选择保存路径,点击Save按钮,文件会保存在指定地方。打开Finder,你可以在指定目录下看到生成的.ipa文件。
    9.安装应用程序
    以Ad-Hoc或In-House方式发布的应用程序,可以将.ipa文件直接发送给用户。用户可以用两种方式安装:使用iTunes,或者使用iPhone配置实用工具。
    (1)使用iTunes
    用户将压缩包中的.ipa文件拖到iTunes的“资料库→应用程序”下,然后和iPhone/iPod进行同步。
    (2)使用iPhone配置实用工具
    iPhone配置工具是完全免费的,你可以从这里下载:
    http://support.apple.com/kb/DL926?viewlocale=zh_CN
    安装后会在“应用程序/实用工具”中生成一个快捷方式“iPhone配置实用工具”。
    同样,将iPhone/iPod连上电脑,打开“iPhone配置实用工具”,将.ipa文件拖放到“iPhone配置实用工具”的“资料库→应用程序”下,然后选中你的iPhone/iPod,在右边“安装或删除应用程序列表”中,点击某个应用程序右边的“安装”按钮进行安装。
    10.问题及错误
    如果Xcode出现Code sign错误:
    Code Sign Errors: profile doesn’t match any valid certificate/private key pair in the default keychain
    同时在Organizer中出现下列提示:
    A valid signing identity matching this profile could not be found in your keychain
    则需要把钥匙串中的所有证书和密钥删除,然后重新请求证书、修复provision profile、下载并安装,一般可以得到解决。

    1.3.3 OTA无线部署

    所谓OTA(Over The Air),是苹果公司在iOS 4.0中加入的一种新的企业部署方式,即iOS 4的无线部署。无线部署是完全脱离iTunes的发布程序的一种方式。 苹果公司扩展了iOS的Safari的功能,使得iOS企业应用可以通过Safari浏览器进行部署。Safari对URL地址中的特殊协议itms-services进行识别并自动下载ipa安装包,并在下载完成后调用iOS操作系统的应用程序安装界面(iTunes)进行安装。
    “无线部署”专用于企业部署,包括Ad-Hoc和In-House部署,所以这里你必须使用这两种provision profile 文件。下面介绍如何在Xcode(以4.2版本为例)中进行OTA部署。
    OTA部署仍然使用“Product→Archive”菜单的功能(正如1.3.2节下面的“8. 编译发布版本”节所描述)。但在选择保存路径这一步(如图1-21所示步骤),注意勾选“Save for Enterprise Distribution”选项。这样将出现OTA部署选项,如图1-22所示。
    screenshot

    需要填写的各项设置意义如下:
    Application URL:你的.ipa文件将部署到服务器的哪个位置。当用户通过Safari安装你的企业应用时,这个URL应指向.ipa文件所在的地址,必填。
    Title:企业应用名称,必填。
    Subtitle:子标题,可选。
    Large Image URL:大图标(512512)所在的URL。大图标用于在iPad上安装时显示应用程序图标,可选。
    Small Image URL:小图标(5757)所在的URL。大图标用于在iPhone上安装时显示应用程序图标,可选。
    Add Shine Effect to Image:会在大/小图标上加上一个光照效果,可选。
    填写完后,点击Save按钮。Xcode会在硬盘上产生一个.ipa文件和一个.plist文件。这两个文件都OTA部署所必需的。其中.plist文件是一个XML文件,保存了你刚才填入的那些配置选项。
    将上述两个文件和图标文件(如果有的话),放到Web服务器上。注意,.ipa文件和图标文件所放的位置应该和你在图1-22界面中配置的内容一致。至于.plist文件,你可以让它和.ipa文件放在一起,也可以单独放在另外一个地方。
    另外制作一个html文件,如install.html,内容如下:

    <html>
    <head><title>TextGlowDemo</title></head>
    <body>
    <ul>
        <li>
    <a href="http://10.180.120.235:8080/AnyMail/InHouseProvisionProfile. 
             mobileprovision"> Provisioning File</a>
    </li>
        <li>
    <a href="itms-services://?action=download-manifest&url=http://10.180.120.235:8080/ 
             AnyMail/GlowDemo.plist">
                    install GlowDemo</a>
    </li>
    </ul>
    </body>
    </html>

    主要是两个标签。第一个标签是Provision Profile文件的超级链接,因为在iPhone上安装应用程序之前,必须先安装Provision Profile文件,所以这个链接是有必要的。第二个是.plist的超级链接。
    注意:在第2个
    标签中,href属性的“itms-services://?action=download-manifest&url=”是固定的(后面的跟着.plist文件的真实URL地址)。“itms-services://?action=download- manifest&url=”不能改成其他内容,否则Safari不会调用安装程序。
    把这个HTML文件放在Web服务器上,然后在iPhone上用Safari访问这个HTML文件地址,你将看到如图1-23所示的页面。
    screenshot

    首先点击Provisioning File链接,iOS提示你要安装该预置描述文件,根据提示安装就可。
    然后点击install GlowDemo链接,Safari会开始下载.ipa包,当下载完成会立即启动系统安装程序进行安装。
    注意:如果iPhone上已经安装有该应用程序,则会进行覆盖安装。
    这样,通过OTA部署,不再需要用户将iPhone和 PC同步的繁琐步骤(利用iTunes)。OTA部署直接利用iPhone的无线通信功能(WiFi网络或移动网络)进行应用程序部署(或者在线更新),显得更加灵活和方便。

    展开全文
  • 第1章 企业应用的话题本书是一本关于iOS企业应用开发的书。在本书开篇,首先讨论一下企业应用的话题。包括:什么是企业应用、iOS企业应用、iOS企业应用中所使用的应用程序发布方式Ad-Hoc和In-House,以及iOS 4.0以后...
  • 2.4 搭建iOS开发环境 迄今为止,iOS只支持在苹果的Mac OSX操作系统下进行开发。因此,对于大部分开发者而言,一台基于Intel的苹果电脑仍然是必需的——无论是Mac Book还是Mac Mini都能满足开发的需要。当然,也可以...
  • 2.6 在模拟器上运行应用程序 在Xcode 4.2的顶部工具栏中,找到Scheme按钮。从该按钮的下拉菜单中选择“iPhone 5.0 Simulator”,如图2-27所示。 提示:如果Xcode 4.2的工具栏未显示,请选择菜单“view→Show Toolbar...
  • 2.1 苹果iOS 简介 苹果iPhone手机自发布之日以来就给人们带来了全新的感觉和...iOS即iPhone OS,是苹果公司针对其iPhone、iPod Touch和iPad产品开发的基于UNIX架构的苹果专属操作系统。原本这个系统名为iPhone OS,...
  • 2.2 iOS框架介绍 iOS衍生自Mac OS X的成熟内核,但iOS操作系统更紧凑和高效,支持iPhone和iPod Touch的硬件。iOS继承了Mac OS X的风格,包括:统一的OS X 内核,针对网络的BSD套接字,以及Objective-C和C/C++编译器...
  • 2.7 在 iPhone 上运行应用程序 如果要在iPhone手机上运行程序则没有那么容易了。正如第1章所述,在开始开发iPhone应用程序之前,你需要注册成为iPhone开发人员。只有这样,苹果公司才会允许你使用“完全的”的SDK,...
  • 网络 1、使用... (1)最简单的情况下  NSURL可以引用网络或本地资源,是URL的一个包装,使用URL,需要创建一个NSURL对象,然后从NSURL获得数据: NSURL *url = [NSURL URLWithString:urlString]; NSData
  • MVC模式把应用程序GUI代码根据功能拆分为不同的类或组件:“模型”:用于封装应用程序的数据;“视图”:负责显示和编辑数据:“控制器”:负责处理前两者之间的逻辑关系。它们之间的逻辑关系参考第2章的图2-3...
  • 可能就在年前吧,机工出版,欢迎关注。这是封面:查看大图
  • 3.5 块编程 C语言的运行时特性中包括了块,标准C工作组的 N1370...作为C语言的扩展,Objective-C在OSX 10.6及iOS 4.0以后支持块语法。块运行时也会被集成到LLVM的compiler-rt子项目存储库中。 3.5.1 块的特点 一些面...
  • Cocoa Touch框架是进行iPhone应用程序开发工作的主要框架,主要包括UIKit和Foundation(NS)框架,这些库统称为Cocoa Touch框架。该框架完全是面向对象的,它是Cocoa框架的子集。注意:Cocoa框架早先是用于Mac OS X...
  • 3.4 KVO模型 KVO(key-value observer,“键-值”观察)模型是Cocoa绑定技术中常用的一种编程模型,它可以使一个对象在属性值发生变化时主动通知另一个对象并触发相应的方法。与NSNotification 不同,KVO没有所谓的...
  • 活动地址请看http://www.cocoachina.com/bbs/read.php?tid=134485&page=1&toread=1,回答问题可获赠书!活动时间为期一周,在本周内,作者也会在论坛回答网友们的问题。
  • 2.5 写一个iPhone程序 ...选择菜单“File→New Project”,显示新建...在左边栏中列出了Xcode支持的两种项目类型:iOS和Mac OS X项目,选择iOS下方的Application,然后选择Empty Application类型的项目。点击Next按钮,...
  • 3.2 面向对象的C 从现在开始,我们开始介绍期待已久的Objective-C的面向对象特性。 3.2.1 类和对象 面向对象最重要的概念就是类。通过类,我们可以实现面向对象的两个主要特性:继承和聚合。在Cocoa框架中,NSObject...
1 2 3 4 5 ... 20
收藏数 3,997
精华内容 1,598
关键字:

企业级ios应用开发实战