iOS移动开发从入门到精通
出版时间: 2018
内容简介
本书由资深iOS开发工程师精心编撰,系统地介绍了使用iOS 10+Swift 3+Xcode 8开发移动应用的关键技术。本书共分三篇,*篇为基础篇,主要介绍了iOS开发基础知识,包括iOS系统的历史、Swift 3.0语言、UI界面构建技术、视图控制器、常用的控件、表和集合视图、视图和层、声音、视频、动画等。第二篇为进阶篇,主要介绍了Alamofire网络服务、数据的持久化、多线程、CoreText、CoreImage、Storyboard、自动化测试、性能分析、本地化、加密与安全等实用技术。第三篇为实例篇,通过对实体层、表现层和逻辑层三层相关技术的讲解,向读者详细展示了MVC设计模式在项目开发中的应用方式,并*终创建一个成熟的商业项目。本书采用丰富的实例,直观的代码展示,向读者形象地讲解了在创建一款优秀的iOS应用程序时,所需要的大部分技巧,帮助读者轻松掌握并高效开发iOS程序。本书适合iOS开发新手、iOS程序员、iPhone开发人员、iPad开发人员使用,也可以作为相关培训机构和大专院校相关专业的教学用书。
目录
目 录 第1章 开发准备 11.1 iOS移动开发现状 21.1.1 iOS的历史 21.1.2 iOS 10的十大变化 41.1.3 iOS应用开发的八个特点 51.2 iOS 10的新功能 51.2.1 SiriKit 61.2.2 Proactive Suggestions(预建议) 61.2.3 Integrating with the Messages App 71.2.4 User Notifications 71.2.5 Speech Recognition 81.2.6 Wide Color 91.2.7 Adapting to the True Tone Display 91.2.8 Widget Enhancements 91.2.9 Security and Privacy Enhancements 91.3 成为一名iOS开发者 111.3.1 硬件上的需求 111.3.2 加入Apple开发者计划 111.3.3 下载安装Xcode和模拟器 131.3.4 创建开发和发布配置文件Provisioning Profile 141.4 创建一个基本的iOS项目 171.4.1 项目的创建 171.4.2 设置项目的信息 191.4.3 设置应用的Icon图标 191.4.4 设置应用的Launch图片 201.4.5 编译并运行项目 221.5 iOS应用的生命周期 231.5.1 iOS应用程序的状态 241.5.2 演示iOS应用程序的各种状态 251.6 小结 26第2章 Xcode 8 IDE和iOS模拟器 272.1 Xcode 8的使用 282.1.1 工具栏的使用 282.1.2 导航器的功能介绍 292.1.3 项目导航器中的内容 302.1.4 创建一个组和Swift文件 302.1.5 在项目中搜索文件 332.1.6 代码的查找和替换 362.1.7 代码的Debug调试 362.2 iOS模拟器的使用 392.2.1 使用多种iOS模拟器 392.2.2 iOS模拟器方向的切换 402.2.3 iOS模拟器语言的切换 402.2.4 截取模拟器屏幕 412.2.5 应用程序的退出和删除 412.3 小结 42第3章 Swift 3.0的基础知识 433.1 Swift的基本概念 443.1.1 Swift语言的特点 443.1.2 Swift常量和变量的定义 453.1.3 常量和变量的输出 463.1.4 注释 473.1.5 Playground 473.2 数据类型与运算 493.2.1 布尔类型 493.2.2 Int类型及实例属性 503.2.3 浮点类型及实例属性 513.2.4 字符和字符串 513.2.5 元组类型 543.2.6 一元、二元和三元运算符 553.2.7 比较运算符 563.3 循环语句和条件判断语句573.3.1 for循环 573.3.2 while循环语句 583.3.3 repeat-while循环语句 593.3.4 if条件判断语句 603.3.5 switch条件判断语句 603.3.6 continue语句和forthrough语句 613.4 数组和字典 623.4.1 数组 623.4.2 多维数组 643.4.3 数组的遍历 653.4.4 字典 663.5 小结 68第4章 Swift 3.0的进阶内容 694.1 函数 704.1.1 函数的定义和调用 704.1.2 为参数设置默认值 714.1.3 设置可变的函数参数数量 714.1.4 函数作为参数和返回类型 724.1.5 元组作为函数的返回类型,实现多个返回值 744.1.6 使用函数类型 744.1.7 函数的输入输出参数 754.1.8 函数的嵌套 764.1.9 函数的递归用法 764.1.10 常用的内置函数 774.2 枚举和结构体 794.2.1 枚举 794.2.2 结构体 834.3 类 854.3.1 类的创建 854.3.2 类属性的set和get方法 884.3.3 类属性的willSet和didSet方法 894.3.4 类的静态方法 904.3.5 类的析构 914.3.6 类的继承 924.3.7 类的延迟加载属性lazy 934.3.8 类的引用特征 954.3.9 类型检查 954.3.10 Any和Anyobject 984.4 扩展、协议和其他 994.4.1 扩展 994.4.2 协议 1014.4.3 问号和感叹号! 1034.5 小结 105第5章 视图UIView和层CALayer 1065.1 视图UIView 1075.1.1 UIView概述 1075.1.2 UIView的外观属性 1095.1.3 UIView的几何属性 1125.1.4 UIView的嵌套和层次关系 1145.1.5 UIView的交互属性 1165.1.6 UIView的变形操作 1185.1.7 自定义UIView视图 1205.2 CALayer层 1245.2.1 CALayer边框 1245.2.2 CALayer阴影 1255.2.3 CALayer圆角 1265.2.4 CALayer渐变 1275.3 小结 129第6章 视图控制器UIViewController1306.1 UIViewController视图控制器概述 1316.1.1 视图控制器与MVC 1316.1.2 创建一个视图控制器 1326.1.3 以模态方式弹出视图控制器 1366.1.4 视图控制器的生命周期 1396.1.5 视图控制器和UIScrollView 141 6.2 UITabBarController 1456.2.1 创建一个UITabBarController 1456.2.2 改变Tab bar的位置 1476.2.3 改变UITabBarController索引 1496.2.4 在Tab图标上显示角标 1496.3 UINavigationController 1506.3.1 创建一个UINavigationController 1516.3.2 UINavigationController视图入栈和出栈 1536.3.3 导航栏和工具栏的显示和隐藏 1576.3.4 导航栏样式的修改 1576.4 导航控制器和标签控制器1586.5 小结 161第7章 常用经典控件 1627.1 控件概述 1637.1.1 何为Target-Action机制 1637.1.2 UIControl类的方法和属性 1657.1.3 让我们一起动手来实现一个UIControl吧 1677.2 UIButton的概述 1687.3 UILabel文本视图 1717.3.1 UILabel的创建和文案显示 1727.3.2 UILabel处理过长的文案 1737.3.3 UILabel的阴影 1747.4 UISwitch开关视图 1757.4.1 UISwitch的创建 1757.4.2 UISwitch的开关使用 1767.5 UIRefreshControl 刷新控件 1767.6 UITextField文本框控件 1787.6.1 UITextField的创建和基本应用 1797.6.2 UITextField的背景图 180 7.6.3 UITextField的浮动视图(Overlay view) 1817.6.4 UITextField的代理UITextFieldDelegate 1837.7 小结 185第8章 UITableView和UICollectionView 1868.1 UITableView概述 1878.1.1 UITableViewCell单元格 1878.1.2 创建一个简单的表格 1898.1.3 自定义单元格UITableViewCell 1938.1.4 自定义单元格的高度 1968.1.5 给表格添加章节和索引 1988.1.6 单元格的选择与取消选择 2018.1.7 单元格的插入和删除 2048.1.8 移动单元格的位置 2098.1.9 表格之间的嵌套 2138.2 UICollectionView概述 2198.2.1 UICollectionView的实现原理 2208.2.2 创建一个 UICollectionView对象并添加点击事件 2218.3 小结 225第9章 触屏事件和触摸手势 2269.1 触摸事件的监测 2279.1.1 对触摸事件阶段的监测 2279.1.2 监测是否触摸到某个视图 2299.1.3 实现图像视图的拖动 2319.2 触摸手势的使用 2329.2.1 实现单点触摸手势 2339.2.2 实现双击触摸手势 2359.2.3 实现长按手势的监测 2369.2.4 捏合手势的监测 2389.3 3D Touch的使用 2399.4 小结 242第10章 动画、声音与视频 24310.1 制作动画 24410.1.1 UIView的动画 24410.1.2 使用UIImageView播放帧动画 24910.1.3 位移关键帧动画的制作 25110.2 音频的播放 25410.2.1 使用System Sound Services播放简短声音 25510.2.2 使用AVAudioPlayer播放音乐 25610.3 视频的播放 26010.3.1 使用AVPlayer播放影片 26010.3.2 实现影片的画中画功能 26210.4 小结 265第11章 Alamofire网络请求框架 26611.1 Alamofire的前世今生 26711.1.1 Alamofire的手动集成 26711.1.2 Alamofire的网络是否联通和连接方式 26911.1.3 Alamofire的GET和POST请求 27211.1.4 Alamofire的文件上传及进度显示 27411.1.5 Alamofire的文件下载及进度显示 27811.2 小结 279第12章 UIWebView与HTML 5技术 28012.1 UIWebView的使用 28112.1.1 使用UIWebView加载网页 28112.1.2 使用UIWebView加载HTML字符串和GIF动画 28312.1.3 使用UIWebView加载本地网页 28612.1.4 使用Javascript回调原生程序 28912.2 创建一个简单的笔记本 29212.2.1 创建一个可编辑的div 29212.2.2 设置网页的CSS样式 29312.2.3 添加插入笔记图片的方法 29412.2.4 添加删除图片和获得笔记的方法 29512.2.5 实现笔记本的用户界面 29612.3 小结 298第13章 数据的持久化 29913.1 解析plist文件 30013.1.1 创建和解析plist文件 30013.1.2 将信息写入plist文件 30313.2 使用CoreData进行数据的持久化 30413.2.1 创建Core Data实体并插入数据 30613.2.2 检索Core Data中的数据 30813.2.3 修改和删除Core Data数据 31013.3 小结 312第14章 多线程技术 31314.1 多线程的概念 31414.1.1 任务、进程和线程 31414.1.2 线程的Stack space 31514.1.3 线程的优先级 31514.1.4 线程的生命周期 31514.1.5 线程和Run loop 31614.2 使用Thread 31614.2.1 创建Thread下载图片 31714.2.2 给Thread加锁使线程同步 31914.3 Operation技术的使用 32214.4 Grand Central Dispatch的使用 32514.4.1 使用GCD查询IP地址信息 32614.4.2 DispatchGroup调度组的使用 32814.5 小结 329第15章 MapKit地图 33015.1 Map Kit的概念 33115.1.1 MKMapView的显示区域 33115.1.2 MKMapView的跟踪和定位 33215.1.3 MKMapView的交互选项和装饰物 33315.1.4 创建一个MKMapView地图 33315.1.5 MKMapView代理的使用 33515.1.6 自定义annotationView和calloutView 33715.1.7 Camera相机的使用 34115.2 小结 342第16章 iOS的图文混排技术 34316.1 Core Text的使用 34416.1.1 文字排版方面的一些基本概念 34416.1.2 列出设备中的所有字体 34616.1.3 富文本的创建 34716.1.4 图文混排的实现 35016.2 Text Kit的使用 35416.2.1 使用Text Kit对文字进行分栏 35416.2.2 使用Text Kit制作图文混排效果 35716.3 小结 359第17章 iOS的图像和视频处理技术36017.1 Core Image概述 36117.1.1 使用Core Image的三个类制作单色调效果 36217.1.2 使用Core Image给图片添加马赛克 36317.1.3 使用Core Image处理视频画面 36417.1.4 输出Core Image的所有滤镜 36917.1.5 使用CIDetector和CIFeature进行人脸检测 37017.2 UIBlurEffect和CGBlendMode 37217.2.1 使用UIBlurEffect实现毛玻璃效果 37217.2.2 使用CGBlendMode实现颜色混合效果 37317.3 小结 376第18章 iOS常用设备的使用 37718.1 Photos和Camera的使用 37818.1.1 读取Photos中的图片 37818.1.2 调用相机拍摄照片 38218.2 定位设备的使用 38418.2.1 使用定位设备获取设备地理位置 38518.2.2 将地理坐标转换为实际地名 38818.3 陀螺仪和加速计设备的使用 39018.3.1 陀螺仪的原理和应用 39018.3.2 加速计的原理和应用 39018.3.3 检测iOS设备的晃动 39118.4 小结 393第19章 Storyboard故事板的使用 39419.1 Storyboard概述 39519.1.1 Storyboard的优缺点 39519.1.2 故事板的组织形式 39619.1.3 创建一个Storyboard 39719.1.4 更改故事板的初始视图控制器 39819.2 在Storyboard中使用标准控件 40019.2.1 添加三个控件 40019.2.2 对控件进行连接 40219.3 在Storyboard中使用表格控件 40519.3.1 在故事板中添加Table View 40519.3.2 添加Table View Cell 40519.3.3 设置Table View的数据源 40719.3.4 修改ViewController.swift文件 40819.4 在Storyboard中使用集合控件 40919.4.1 添加Collection View 40919.4.2 设置Collection View Cell 40919.4.3 设置Collection View的数据源和代理 41119.4.4 修改ViewController.swift文件 41219.5 Storyboard常见的层次结构 41319.6 Storyboard之间的页面跳转和参数传递 41719.6.1 单个Storyboard中页面间的参数传递 41719.6.2 多个Storyboard中的页面跳转及参数传递 42019.7 使用约束功能适配多分辨率 42419.7.1 打开并运行示例项目 42419.7.2 给父视图MainView添加约束 42619.7.3 给三个分隔线添加约束 42819.7.4 给两个小箭头添加约束 42919.7.5 给添加新会员按钮添加约束 43119.7.6 给无数据图标添加约束 43219.8 小结 433第20章 界面测试和自动化测试43420.1 单元测试概述 43520.1.1 Xocde的XCTest框架 43520.1.2 对其他类的方法进行单元测试 43820.1.3 使用XCTest框架进行性能测试 44120.2 UI Testing界面测试 44220.2.1 往项目中插入UI Testing 44320.2.2 制作UI测试的程序 44420.2.3 录制UI Testing步骤 44620.2.4 播放UI Testing的录制步骤 44620.3 使用UIAutomation进行自动化测试 44720.3.1 使用UIAutomation录制自动化测试代码 44720.3.2 测试脚本的保存和加载 44920.4 小结 449第21章 iOS应用程序内存泄露的检测45121.1 Allocations工具的使用 45221.2 Leaks工具的使用 45821.3 小结 461第22章 iOS应用程序的本地化 46222.1 应用程序的本地化 46322.1.1 应用程序名称的本地化 46322.1.2 应用程序文字内容的本地化 46822.1.3 Storyboard的本地化 47122.1.4 图片素材的本地化 47422.2 小结 477第23章 加密与安全 47823.1 加密与安全 47923.1.1 对称加密和非对称加密 47923.1.2 3DES加密 48023.1.3 SHA1加密 48523.1.4 MD5加密 48723.1.5 越狱情况的判断 49023.2 小结 492第24章 开源框架CocoaPods49324.1 CocoaPods、SPM和Carthage简介 49424.1.1 为什么使用CocoaPods 49424.1.2 CocoaPods的安装及淘宝的镜像使用 49524.1.3 Podspec的镜像使用 49624.1.4 CocoaPods的实践 49724.1.5 pod install 和 pod update 的使用 49724.1.6 CocoaPods 的卸载 49824.2 CocoaPods-app的使用 49824.2.1 为新项目加入CocoaPods 49924.2.2 对Podfile的pod install和pod update 50024.2.3 删除工程中的CocoaPods 50124.2.4 安装命令行 50224.3 小结 502第25章 Git版本控制及GitHub社会化编程实践 50325.1 Git前奏曲 50425.1.1 什么是版本控制 50425.1.2 版本控制简史 50425.1.3 Git原理 50625.1.4 Git的安装、配置、别名和帮助 50825.2 Git基础曲 51025.2.1 创建本地仓库和关联远程仓库 51025.2.2 文件在工作区、暂存区和Git本地仓库中的操作 51325.2.3 查看提交历史 51525.2.4 撤销操作 51525.2.5 标签 51625.3 小结 519第26章 项目案例的架构搭建 52026.1 多人协作的工作流程 52126.2 技术选型 52226.3 MVC及工程结构 52326.4 UITabbarController、UINavigationController和Assets.xcassets的搭建 52526.4.1 UITabbarController和UINavigationController 52526.4.2 Assets.xcassets管理 52726.5 小结 529第27章 Model层相关框架 53027.1 XML、Plist、JSON数据格式 53127.2 开启ATS 53227.3 AlamofireObjectMapper 53327.3.1 AlamofireObjectMapper的安装 53327.3.2 AlamofireObjectMapper的使用 53327.4 ObjectMapper 53527.4.1 ObjectMapper的安装 53527.4.2 ObjectMapper中Model与JSON的转换 53627.5 Moya 53627.5.1 Moya的安装 53727.5.2 Moya的使用 53727.6 小结 540第28章 与众平台联姻 54128.1 ShareSDK 联合登录 54228.1.1 获取AppKey 54228.1.2 下载SDK 54228.1.3 快速集成 54228.1.4 新建Header File并建立桥接 54328.1.5 打开桥接文件(Bridging-Header.h) 54428.1.6 添加URL Types 54628.1.7 查看open.qq.com应用的审核进度 54628.2 ShareSDK分享 54828.2.1 增加QQ平台分享支持 54828.2.2 增加微信平台分享支持 54828.2.3 QQ和微信平台分享的代码实现 54928.3 聚合数据和LeanCloud 55028.3.1 聚合数据 55028.3.2 LeanCloud 55128.4 TalkingData统计 55128.5 小结 554第29章 开发SwiftNews新闻客户端App 55529.1 SwiftNews App概述 55629.1.1 修改App Name 55629.1.2 修改App ICON 55729.1.3 欢迎页面 55829.1.4 启动页面 55929.1.5 Debug模式下的print 56129.1.6 桥联SVProgressHUD 56229.1.7 自定义Cell 56329.1.8 国内和国际新闻模块 56429.1.9 图片加圆角和助手类 56729.2 小结 569第30章 应用程序的打包和发布57030.1 iOS应用商店概述 57130.1.1 App Store的重大更新 57130.1.2 在iTunes Connect创建一个App 57330.1.3 打包App为IPA文件 57630.1.4 自动化打包App 57730.1.5 上传App至App Store 58030.1.6 配置构建版本并提交审核 58030.2 小结 582