iPhone高级编程—使用Mono Touch和.NET/C#

更多详情


内容简介: 《iPhone高级编程—使用Mono Touch和.NET/C#》从基本的概念入手,全面地介绍了基于MonoTouch使用C#/.NET进行iPhone应用程序开发。从MonoTouch和.NET开发环境到Objective-C和C#开发语言,从基于MonoTouch进行iPhone开发的编程方法到应用程序的发布和销售等,本书涵盖了基于MonoTouch进行iPhone应用程序开发涉及的方方面面。
《iPhone高级编程—使用Mono Touch和.NET/C#》的主要内容分为两大部分:第Ⅰ部分包括第1-4章,这一部分介绍iPhone和MonoDevelop IDE开发的基本知识,主要包括iPhone、.NET Framework和MonoTouch的相关背景和概念、MonoTouch使用方法、iPhone用户界面和数据控件方面的内容:第Ⅱ部分包括第5-15章,这一部分的内容相对独立,可以根据需要选择性地阅读:第5章介绍在iPhone中检索和存储数据,包括本地数据和远程数据;第6章介绍表的使用,包括表内容显示、表导航和表编辑等;第7章介绍基于CoreLocation和Mapkit实现地图功能:第8章系统介绍应用程序设置:第9章介绍面向设备硬件编程;第10章介绍多媒体编程;第11章介绍利用第三方应用程序的编程;第12章介绍应用程序本地化和国际化编程;第13章介绍如何面向iPad编程:第14章介绍Objective-C代码的阅读方法;第15章介绍将应用程序提交到应用程序商店涉及的所有过程和工作,还包括应用程序的推销途径与方法。
《iPhone高级编程—使用Mono Touch和.NET/C#》专门针对具有C#/.NET开发经验并希望转到面向iPhone进行编程的人员。他们可以通过MonoTouch,利用已有的C#/.NET知识编写能够直接在iPhone中运行的应用程序。因此,阅读本书的读者需要具有一定的C#/.NET开发经验,并希望面向iPhone编程。

目录: 《iPhone高级编程—使用Mono Touch和.NET/C#》
第1章 C#开发人员基于MonoTouch进行iPhone开发概述 1
1.1 产品对比 2
1.1.1 .NET Framework 2
1.1.2 Mono 2
1.1.3 MonoTouch 3
1.1.4 MonoDevelop 5
1.1.5 iPhone 5
1.2 移动开发 7
1.3 苹果公司的iPhone SDK工具 8
1.3.1 工具 8
1.3.2 许可 9
1.4 本章小结 9
第2章 MonoTouch介绍 11
2.1 开发前的准备 11
2.2 MonoTouch的组件 12
2.2.1 Mono概述 12
2.2.2 MonoTouch的名称空间和类 13
2.3 使用MonoDevelop 15
2.4 使用Interface Builder 18
2.4.1 使用库中的控件 20
2.4.2 设置插座变量 21
2.4.3 设置动作 23
2.5 基于Interface Builder实现的Hello World 24
2.6 基于代码实现的Hello World 27
2.7 调试 28
2.7.1 在模拟器上调试 28
2.7.2 在设备上调试 29
2.8 理解链接器 30
2.9 部署应用程序 31
2.10 本章小结 32
第3章 设计应用程序用户界面:探讨屏幕控件 33
3.1 创建iPhone(y)用户界面和应用程序交互模式 34
3.1.1 命令界面 34
3.1.2 单选界面 35
3.1.3 导航界面 35
3.1.4 模态界面 36
3.1.5 组合界面 37
3.2 UILabel 37
3.3 UIButton 38
3.4 UITextField 40
3.5 UISwitch 41
3.6 UISlider 41
3.7 UIActivityIndicatorView 42
3.8 UISegmentedControl 43
3.9 UIPageControl 44
3.10 本章小结 45
第4章 数据控件 47
4.1 窗口与视图 48
4.1.1 UIWindow 48
4.1.2 UIView 49
4.2 数据视图控件 50
4.2.1 UIWebView 50
4.2.2 UIScrollView 57
4.2.3 UITextView 59
4.2.4 UIPickerView 63
4.2.5 UIDatePicker 68
4.3 控制器与栏 70
4.3.1 UIViewController 70
4.3.2 UIToolBar 71
4.3.3 UITabBarController 74
4.3.4 UINavigationController 81
4.4 本章小结 84
第5章 在iPhone上使用数据 85
5.1 使用SQLite 85
5.1.1 使用Mono.Data.Sqlite 86
5.1.2 建立数据库 86
5.1.3 建立表 87
5.1.4 使用SQL语句 88
5.1.5 升级策略 91
5.2 处理远程数据 92
5.2.1 使用SOAP 92
5.2.2 使用基于REST的Web服务 97
5.2.3 检索数据 99
5.2.4 使用POST提交数据 103
5.2.5 可靠地使用Web服务 105
5.3 本章小结 106
第6章 使用表显示数据 107
6.1 在表中显示数据 108
6.1.1 选择单元格 111
6.1.2 改变单元格布局 112
6.1.3 展示分组数据 114
6.1.4 添加索引 117
6.1.5 分组表的样式 118
6.1.6 定制单元格布局 119
6.2 使用表导航 122
6.2.1 使用UINavigationController 123
6.2.2 实现第二层导航 125
6.2.3 创建静态行内容 127
6.3 编辑表行 130
6.3.1 添加划过删除 130
6.3.2 启用编辑“模式” 131
6.3.3 重新排序单元格 132
6.3.4 创建插入图标 133
6.3.5 添加新行 135
6.4 在表中添加搜索栏 137
6.4.1 启用搜索栏 138
6.4.2 定制搜索外观 140
6.5 本章小结 141
第7章 地图功能 143
7.1 地图基础知识 144
7.1.1 MapKit功能简介 144
7.1.2 CoreLocation功能简介 144
7.2 使用CoreLocation 146
7.2.1 确定设备位置 147
7.2.2 跟踪设备移动 153
7.3 使用MapKit 158
7.3.1 显示地图 159
7.3.2 标注地图 161
7.3.3 使用地理编码功能 171
7.4 本章小结 175
第8章 应用程序设置 177
8.1 探讨Info.plist 177
8.1.1 UIStatusBarHidden 178
8.1.2 UIInterfaceOrientation 179
8.1.3 UIRequiresPersistentWiFi 179
8.1.4 UIPrerenderedIcon 179
8.2 了解设置包 179
8.2.1 Settings应用程序 179
8.2.2 将应用程序添加到Settings应用程序中 180
8.2.3 读取设置 191
8.2.4 更新设置 192
8.3 本章小结 193
第9章 面向设备的硬件编程 195
9.1 响应加速度 196
9.1.1 加速度计 196
9.1.2 使用XYZ坐标系统 196
9.1.3 针对加速度计编程 197
9.1.4 使用加速度作为UI输入 198
9.2 确定设备方向 200
9.2.1 启用通知 200
9.2.2 确定静态设备方向 201
9.2.3 基于事件确定方向 201
9.3 读取接近传感器 202
9.4 联网 203
9.5 考虑电池电量 204
9.5.1 确定静态电池状态 204
9.5.2 使用电池改变事件 205
9.6 访问系统信息 206
9.7 移动开发 207
9.8 本章小结 207
第10章 多媒体编程 209
10.1 图像 209
10.1.1 显示图像 209
10.1.2 选取图像 212
10.1.3 处理选取的图像 214
10.1.4 由摄像头创建图像 215
10.1.5 编辑图像 216
10.1.6 定制摄像头 217
10.1.7 将图像保存到相册 219
10.2 视频 220
10.2.1 播放视频 220
10.2.2 定制视频播放器 222
10.2.3 选取视频 225
10.2.4 记录视频 226
10.2.5 编辑视频 228
10.2.6 将视频保存到相册 230
10.3 音频 231
10.3.1 播放音频 231
10.3.2 记录音频 233
10.4 动画 235
10.4.1 创建基本动画 235
10.4.2 使用UIView动画 237
10.5 本章小结 239
第11章 与其他应用程序通信 241
11.1 集成苹果公司应用程序 241
11.1.1 打开Safari浏览器 241
11.1.2 打开电子邮件 242
11.1.3 拨打电话 242
11.1.4 发送文本/SMS消息 243
11.1.5 在Maps应用程序中打开位置 243
11.1.6 打开YouTube视频 243
11.1.7 打开iTunes商店和应用程序商店 244
11.2 集成第三方应用程序 244
11.2.1 简单集成Google Earth 244
11.2.2 与Skype深度集成 245
11.3 接受来自其他应用程序的调用 245
11.3.1 配置Info.plist文件 245
11.3.2 实现OpenURL架构 248
11.4 集成地址簿 249
11.4.1 ABPersonViewController 250
11.4.2 ABPersonPickerNavigationController 251
11.4.3 ABNewPersonViewController 252
11.4.4 ABUnknownPersonViewController 253
11.4.5 处理属性选择 255
11.5 集成iPod音乐集 256
11.6 集成Objective-C 261
11.6.1 MonoTouch.Foundation 261
11.6.2 MonoTouch.Obj-CRuntime 261
11.6.3 使用btouch自动绑定到Objective-C 261
11.7 本章小结 265
第12章 面向国际用户进行本地化 267
12.1 国际化应用程序 268
12.2 改变语言和地区设置 269
12.3 显示多种语言 270
12.3.1 显示翻译文本 272
12.3.2 显示图像 277
12.3.3 本地化应用程序图标和名称 278
12.3.4 显示“双字节”字符 279
12.3.5 格式化日期、时间、数值和货币 279
12.4 管理实际应用程序中的Localizable.strings 281
12.4.1 genstrings 281
12.4.2 ngenstrings 281
12.5 本章小结 284
第13章 面向iPad编程 285
13.1 iPad设备 285
13.2 iPad应用程序的组成 287
13.2.1 设备方向支持 287
13.2.2 启动图像 290
13.3 iPad的新功能 291
13.3.1 使用UISplitView-Controller 292
13.3.2 创建自定义UIPopover 295
13.3.3 显示模态视图 298
13.3.4 手势识别 299
13.4 构建通用应用程序 304
13.5 本章小结 309
第14章 必要的Objective-C知识 311
14.1 如何使用本章内容 312
14.2 简单了解Objective-C和Cocoa 313
14.3 学术方式与实用方式 315
14.4 基本语法和概念 316
14.4.1 初始化 317
14.4.2 消息与方法 319
14.4.3 内存管理 321
14.5 备忘录 322
14.5.1 术语 322
14.5.2 编译器指令 324
14.5.3 数据类型 326
14.6 本章小结 327
第15章 应用程序商店:提交和销售应用程序 329
15.1 使用多样性生成版进行预提交测试 329
15.1.1 从测试人员获得UDID 330
15.1.2 创建多样性安装配置文件 332
15.1.3 生成应用程序的多样性测试版 333
15.1.4 将多样性生成版打包 334
15.2 准备提交 337
15.2.1 建立应用程序的发布版 337
15.2.2 为发布版添加新配置 337
15.2.3 针对配置改变签名选项 338
15.2.4 浏览包设置 338
15.2.5 生成项目 338
15.2.6 预提交核查清单 338
15.2.7 通过iTunes连接提交 339
15.3 推销应用程序 341
15.3.1 支持应用程序推销 341
15.3.2 关键的应用程序推销技术 342
15.4 本章小结 345

译者序: 如果您是一位.NET开发人员,并希望使用现有的.NET/C#知识直接创建iPhone应用程序,那么本书正适合您。本书涉及到两个非常热门的事物,即C#/.NET和iPhone,这两者都是各自领域的佼佼者,将两者联系在一起的粘合剂就是MonoTouch。MonoTouch解决的问题就是,它使得当前最流行的编程语言C#/.NET的开发人员能够直接利用现有的知识,在当前最流行的移动设备上开发应用程序。这样,这些开发人员也就同时拥有了这两种非常热门的技术。
本书涉及到基于MonoTouch使用C#面向iPhone编程的方方面面,从基本概念到编程,再到测试、部署和推销的所有环节,真所谓是“一书在手,与MonoTouch相关的事情不用愁”。
本书具有几个显著的特征:完整性、实用性和参考性。如前所述,本书自成一体,非常完整,介绍了基于MonoTouch进行iPhone开发的各个方面,因此具有很好的完整性。另外,本书还介绍了很多非编程方面的知识,包括应用程序配置、部署、测试、获取证书、提交到应用程序商店、应用程序营销等方面的内容,具有很好的实用性。最后,为了方便C#/.NET开发人员阅读和利用现有的Obiective-C代码和资源,本书还特地给出了Objective-C和C#/.NET相关概念的对照转换表,便于读者参阅,因此具有相当好的参考性。
本书是由国防科学技术大学的田尊华翻译,译者长期从事计算机科学中大型系统的研究与开发工作,具有丰富的程序设计经验和大型系统开发经验。本书涉及的内容非常丰富,而且基于MonoTouch进行iPhone开发是一项新技术,加之译者的水平和学识有限,译文中翻译的不妥之处在所难免,恳请读者批评指正。读者可将反馈发送到wkservice@vip.163.com。

前言: 在目前的移动设备市场上,iPhone是最令人激动的一款智能手机。在3年时间内,其用户数量已经由0发展到了8千万的规模。随之增长的是人们对于编写能够在该设备上原生执行的应用程序的兴趣。在苹果公司最初发布iPhone时,人们还无法编写在这种设备上运行的应用程序。苹果公司倾听开发市场的声音,并增加了在该设备上运行原生应用程序的能力。一开始,这些应用程序都是使用Objective-C编写的。随着时间的推移,出现了很多其他的框架,这些框架使得开发人员不需要熟悉旨在开发iPhone应用程序的Objective-C。
自从2002年1月.NET Framework发布以来,其应用范围的增长令人印象深刻。目前,.NET Framework已经成为最为流行的开发框架。由于.NET Framework的流行,Ximian(后来被Novell公司收购)公司宣布启动Mono项目。Mono项目旨在构建.NET Framework的一种实现,这种.NET Framework实现要能够在多个非Windows平台上运行。在2009年夏季,Novell发布了MonoTouch。MonoTouch使得.NET开发人员(主要是编写C#应用程序的开发人员)可以创建能够在iPhone上运行的原生C#应用程序。
对于.NET开发人员来讲,能够编写直接在iPhone上运行的应用程序是一种令人惊奇和激动的事情,因为这向他们和他们的技能开启了进入iPhone的大门。.NET开发人员不必花时间和精力来学习Objective-C。我们感到激动,因为我们有能力使用.NET/C#为iPhone编写原生应用程序。MonoTouch为很多开发人员开辟了一个全新的领域。
本书读者对象
本书针对有兴趣使用.NET/C#创建原生iPhone应用程序的.NET开发人员,这些开发人员希望使用他们现有的知识。当然,.NET开发人员总是抱有浓厚的学习兴趣,而且他们也认识到,学习Objective-C和iPhone规范可能也是必需的。对MonoTouch感兴趣的开发人员会认识到,学习MonoTouch的付出是很容易获得回报的,因为他们使用自己已经熟悉的一种语言能够很快针对iPhone进行开发。
本书在设计上针对面向iPhone进行开发的.NET开发人员,帮助这些开发人员快速掌握iPhone应用程序开发,而非真正讲述.NET Framework或C#语言,因为我们假定您已经很熟悉这些内容。
本书的第1~4章是介绍性的内容,您应该按照顺序来阅读这4章。这几章介绍了MonoTouch产品以及使用MonoTouch和MonoDevelop进行开发的基础知识,最后还介绍了一些其他的基础知识,包括向用户展示数据的屏幕和数据控件,以及如何为iPhone开发用户界面。一旦熟悉了这些概念,在后续各章中通常就能够从一章直接跳到另一章,而无须按照顺序阅读。
本书主要内容
本书讲述的是基于MonoTouch进行.NET、C#开发。MonoTouch的目标平台是iPhone、iPod touch和iPad。如果没有特别指出,讨论的内容对iPhone和iPod touch就同样适用。第13章将专门讨论iPad。
本书的组织结构
与前面提到的一样,从本质上讲,本书分为两部分内容。本书的第Ⅰ部分包括第1~4章。这一部分是对iPhone和MonoDevelop IDE开发经验的介绍,其中内容需要从头到尾按顺序阅读。一旦感觉熟悉了这部分内容,就可以进入本书的第Ⅱ部分,这部分包含的内容都是独立的章,可以选择性地进行阅读。
使用本书所需的条件
要有效地使用本书,读者需要具备一些硬件和软件,包括:
● 一部iPhone、iPod或iPad。
● Apple Macintosh 需要Apple Macintosh在iPhone设备上构建和部署应用程序。
● Apple iPhone SDK 需要下载和安装Apple SDK。iPhone SDK只能在Apple Macintosh上运行。
● Mono Framework 需要下载和安装面向Apple Macintosh的Mono框架。可以从Mono的网站(www.mono-project.com/)上下载Mono框架。
● MonoTouch 可以从MonoTouch的网站(http://monotouch.net/)上下载MonoTouch。使用免费版的MonoTouch,开发人员可以在模拟器上创建、构建和运行应用程序。为了将应用程序部署到设备上,开发人员必须购买MonoTouch的专业版或企业版副本。
● MonoDevelop 可以从MonoDevelop的网站(http://monodevelop.com/)上下载MonoDevelop IDE。
源代码
在读者学习本书中的示例时,可以手工输入所有代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/或www.tupwk.com.cn/downpage上下载。登录到站点http://www.wrox.com/,使用Search工具或使用书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有的源代码。
注释:
由于许多图书的标题都很类似,所以按ISBN搜索是最简单的,本书英文版的ISBN是978-0-470-63782-1。
在下载了代码后,只需要使用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。
勘误表
尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。
请给wkservice@vip.163.com发电子邮件,我们就会检查您的反馈信息,如果是正确的,我们将在本书的后续版本中采用。
要在网站上找到本书英文版的勘误表,可以登录http://www.wrox.com,通过Search框或书名列表查找本书,然后在本书的细目页面上单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。
P2P.WROX.COM
要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这个论坛是一个基于Web的系统,便于您张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以通过电子邮件给您传送感兴趣的论题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。
在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:
(1) 进入p2p.wrox.com,单击Register链接。
(2) 阅读使用协议,并单击Agree按钮。
(3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击Submit按钮。
(4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。
注释:
不加入P2P也可以阅读论坛上的消息,但要张贴自己的消息,就必须加入该论坛。
加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。
关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。

序言: MonoTouch是由两个具有巨大吸引力而又极其令人愉悦的领域混合而成:C#语言和iPhone。我们设计MonoTouch将这两者有机地结合起来,通过倾注了设计和实现语言、API和绑定的数年经验来实现这种结合。
我们对于iPhone的激情解释起来非常简单:与其他所有人一样,我们迷恋其漂亮的用户界面、深思熟虑的设计和强大的开发平台。这种集众多优点于一身的特点是令人难以抗拒的。
我们对C#的喜爱要回溯至2000年,当时微软向世界推出了他们的新语言。C#不仅震惊了Windows领域,它同时也震惊了我们的世界。到2000年的时候,我已经在Linux上的GNOMEDesktop和Evolution邮件客户端领域工作了数年,并且已经了解了开发桌面应用程序的经验教训。
我们一直都是在一种竞争的环境下进行软件开发,需要使用更少的开发人员来更快地生产软件。一种选择就是付出更大的努力和花费更长的时间进行工作。与此相反,我们选择了提高程序设计的水平:我们一直使用C来编写高性能要求的代码,针对开发人员可以采用的高级语言建立C代码的绑定。
在微软推出C#和.NET Framework之后,这种语言对于提升程序设计水平起到了立竿见影的效果。另一方面,.NET语言不仅确保了我们不再受限于某种单一的语言,而且确保了我们可以继续重用之前使用C和C++编写的现有代码。C#使我们和我们所处的世界变得更加高效。
在这些年中,Mono在所有可能的方向上都在成长。Mono离开了桌面系统这个安乐窝(Mono起源于桌面系统),已经用于从嵌入式控制器到MP3播放器、服务器、视频游戏和工业控制的所有方面。
iPhone上的Mono是我们根据用户的需求创建的。在2008年至2009年期间,我们的mono@novell.com电子邮件地址接收到了无数的请求,请求将Mono带到iPhone中。到2009年夏天的时候,我们已经具有了准备在9月份发布的所有产品。
本书的作者们都是MonoTouch早期测试版的测试人员:在MonoTouch发布的首日,他们都在现场,在那里与我们探讨初始的API设计,并帮助我们规范最终的产品。现在,他们还在继续帮助我们优先考虑iPhone的开发人员面临的问题。
您可能已经知道本书其中的某些作者。Wally以创纪录的速度推出了第一本关于MonoTouch的电子书,这本电子书帮助数百名程序员在MonoTouch产品发布的数月内就已经能够熟练使用它。
Chris和Rory在Windows/ASP.NET领域都是响当当的人物,并且都是MonoTouch社区非常积极的成员:在我们的IRC聊天室、Stackoverflow和论坛上,他们都回答过新手开发人员提出的问题,帮助开发人员开发更优良的应用程序。
Chirs是带着激情投身MonoTouch的,这种激情只有来自曼彻斯特市的摇滚歌手才能展示,他发起了开源的Scott Hanselman“Hanselminutes”MonoTouch iPhone应用程厅。
Rory对该领域具有独特的见解;他广泛地使用.NET和Objective-C进行工作。他是.NET领域的明星,也是Bames和Noble iPhone应用程序的幕后人物,正是Rory将这些经过实践检验的知识带入了MonoTouch社区。在进行MonoTouch开发的过程中,这样的知识是再好不过的精神导师。
您很可能已经通过其一系列优秀博客知道Craig,这些博客不仅让新手能够开始使用MonoTouch,而且在需要解决自己的iPhone应用程序中的问题时,它们也能够成为可以求助的参考资料。Craig面向iPhone应用程序提出了一个最有用的想法:会议应用程序。有一段时间,对于如何创建有用的会议应用程序,他利用博客来探讨相关的思想,并由此产生了两个开源会议应用程序:MonoSpace应用程序和PDC应用程序。
到Mix2010会议召开的时候,Craig和Chris编写了MIX2010应用程序,MIX会议的参加者都可以使用它。当看到人们在每次会谈之前都在他们的电话上使用这个应用程序的时候,您就知道这是一个非常优秀的想法。
自从启动MonoTouch以来,Martin就是MonoTouch的早期采用者。他为社会化网站DailyBooth启动了第一个iPhone应用程序,并且是各种开源MonoTouch项目的贡献者。
使用C#和iPhone构建应用程序对于两个领域来说都是极佳的事情。您能够使用一种强类型的、类型安全的、垃圾回收的、具有最热门API的语言来开发移动应用程序,同时还能够在Obiective-C中使用面向iPhone创建的最优秀的库,以及在.NET中使用面向C#创建的最优秀的库。
下面开始学习Wally、Martin、Craig、Chris和Rory创作的这本佳作。
——Miguel de Icaza
VP开发人员平台
Novell