内容简介
第1章 引言
1.1 我为什么要写本书
1.1.1 我的构思
1.1.2 内容导读
1.1.3 目标读者
1.1.4 随书示例代码和勘误
1.1.5 致谢
1.2 如何提高iOS开发技能
1.2.1 阅读博客
1.2.2 读书
1.2.3 看WWDC视频
1.2.4 看苹果的官方文档
1.2.5 看开源项目的代码
1.2.6 多写代码,多思考
1.2.7 多和同行交流
1.2.8 分享
第一部分:iOS开发工具
第2章 使用CocoaPods做依赖管理
2.1 CocoaPods简介
2.2 CocoaPods的安装和使用
2.2.1 CocoaPods的安装
2.2.2 使用CocoaPods的镜像索引
2.2.3 使用CocoaPods
2.2.4 查找第三方库
2.3 注意事项
2.3.1 关于.gitignore
2.3.2 为自己的项目创建podspec文件
2.3.3 使用私有的pods
2.3.4 不更新podspec
2.3.5 生成第三方库的帮助文档
2.3.6 原理
第3章 网络封包分析工具Charles
3.1 Charles简介
3.2 Charles的安装和使用
3.2.1 安装Charles
3.2.2 安装SSL证书
3.2.3 将Charles设置成系统代理
3.2.4 Charles主界面介绍
3.2.5 过滤网络请求
3.3 使用Charles协助iOS开发
3.3.1 截取iPhone上的网络封包
3.3.2 模拟慢速网络
3.4 高级功能
3.4.1 截取SSL信息
3.4.2 修改网络请求内容
3.4.3 修改服务器返回内容
3.5 Map功能
3.6 Rewrite功能
3.7 Breakpoints功能
3.8 总结
3.9 参考链接
第4章 界面调试工具Reveal
4.1 Reveal简介
4.2 Reveal的使用
4.2.1 用Reveal连接模拟器调试
4.2.2 用Reveal连接真机调试
4.2.3 用Reveal调试其他应用界面
4.2.4 总结
4.2.5 参考资料
第5章 移动统计工具Flurry
5.1 Flurry简介
5.2 Flurry的基本使用
5.2.1 注册和下载对应SDK
5.2.2 集成SDK
5.2.3 自定义统计项
5.2.4 查看统计结果
5.2.5 统计Crashlog
5.3 对比和总结
5.3.1 和其他统计分析平台的对比
5.3.2 总结
第6章 崩溃日志记录工具Crashlytics
6.1 Crashlytics简介
6.2 Crashlytics的使用
6.3 实现原理和使用体会
第7章 App Store统计工具App Annie
7.1 App Annie简介
7.2 App Annie的使用
7.3 App Annie账号的注册及配置
7.4 和其他工具的对比
7.4.1 官方的命令行工具
7.4.2 其他类似服务
7.4.3 功能对比
第8章 Xcode插件
8.1 Xcode插件管理工具Alcatraz
8.1.1 简介
8.1.2 安装和删除
8.1.3 使用
8.1.4 插件路径
8.2 关于Xcode的插件机制
8.3 常用Xcode插件
8.3.1 KSImageNamed
8.3.2 XVim
8.3.3 FuzzyAutocompletePlugin
8.3.4 XToDo
8.3.5 BBUDebuggerTuckAway
8.3.6 SCXcodeSwitchExpander
8.3.7 deriveddata-exterminator
8.3.8 VVDocumenter
8.3.9 ClangFormat
8.3.10 ColorSense
8.3.11 XcodeBoost
第9章 其他工具介绍
9.1 取色工具:数码测色计(DigitalColor Meter)
9.1.1 前言
9.1.2 使用介绍
9.1.3 其他类似工具:xScope
9.2 其他图形工具
9.2.1 ImageOptim
9.2.2 马克鳗
9.2.3 Dash
9.2.4 蒲公英
9.3 命令行工具
9.3.1 nomad
9.3.2 xctool
9.3.3 appledoc
第二部分:iOS开发实践
第10章 理解内存管理
10.1 引用计数
10.1.1 什么是引用计数,原理是什么
10.1.2 我们为什么需要引用计数
10.1.3 不要向已经释放的对象发送消息
10.1.4 循环引用(reference cycles)问题
10.1.5 使用Xcode检测循环引用
10.2 使用ARC
10.2.1 Automatic Reference Count
10.2.2 Core Foundation对象的内存管理
第11章 掌握GCD
11.1 GCD简介
11.2 使用GCD
11.2.1 block的定义
11.2.2 系统提供的dispatch方法
11.2.3 修改block之外的变量
11.2.4 后台运行
11.2.5 总结
第12章 使用UIWindow
12.1 UIWindow简介
12.2 为UIWindow增加UIView
12.3 系统对UIWindow的使用
12.3.1 WindowLevel
12.3.2 手工创建UIWindow
12.3.3 不要滥用UIWindow
12.3.4 参考资料
第13章 动态下载系统提供的多种中文字体
13.1 功能简介
13.1.1 前言
13.1.2 功能介绍
13.1.3 字体列表
13.2 使用教程
13.2.1 相关API介绍
13.2.2 总结
第14章 使用应用内支付
14.1 后台设置
14.2 iOS端开发
14.3 服务端开发
14.4 注意事项
第15章 基于UIWebView的混合编程
15.1 混合编程简介
15.2 使用模板引擎渲染HTML界面
15.3 Objective-C语言和JavaScript语言相互调用
15.4 如何传递参数
15.5 同步和异步
15.6 注意事项
15.6.1 线程阻塞问题
15.6.2 主线程的问题
15.6.3 键盘控制
15.6.4 CommonJS规范
15.7 使用Safari进行调试
第16章 安全性问题
16.1 前言
16.2 网络安全
16.2.1 安全地传输用户密码
16.2.2 防止通讯协议被轻易破解
16.2.3 验证应用内支付的凭证
16.3 本地文件和数据安全
16.3.1 程序文件的安全
16.3.2 本地数据安全
16.4 源代码安全
16.5 总结
第17章 基于CoreText的排版引擎
17.1 CoreText简介
17.2 基于CoreText的基础排版引擎
第18章 实战技巧
18.1 App Store与审核
18.1.1 撤销正在审核的应用
18.1.2 申请加急审核
18.1.3 应用在市场的名字
18.1.4 测试设备数的限制
18.1.5 如何将应用下架
18.1.6 如何举报别的应用侵权
18.1.7 iTunes Connect后台操作出错
18.1.8 Metadata Reject
18.2 开发技巧
18.2.1 UILabel内容模糊
18.2.2 收起键盘
18.2.3 NSJSONSerialization比NSKeyedArchiver更好
18.2.4 设置应用内的系统控件语言
18.2.5 为什么viewDidUnload被废弃
18.2.6 多人协作慎用Storyboard
18.2.7 避免滥用block
18.2.8 合并工程文件的冲突
18.2.9 忽略编译警告
18.3 Xcode使用技巧
18.3.1 Xcode快捷键
18.3.2 查找技巧
18.3.3 JavaScript文件设置调整
18.3.4 清除DerivedData
18.3.5 target信息异常
18.3.6 下载Xcode
18.4 调试技巧
18.4.1 模拟器快捷键
18.4.2 覆盖安装注意事项
18.4.3 给模拟器相册增加图片
18.4.4 获得模拟器中的程序数据
18.4.5 安装旧版本的模拟器
18.4.6 模拟慢速网络
18.4.7 异常断点与符号断点
18.5 ipa文件格式
18.5.1 查看ipa的内容
18.5.2 查看ipa中的图片
18.6 为工程增加Daily Build
18.6.1 前言
18.6.2 步骤
18.6.3 遇到的问题
18.6.4 总结
18.7 使用脚本提高开发效率
18.7.1 删除未使用的图片资源
18.7.2 用脚本自动生成小尺寸的图片
18.7.3 检查图片
18.8 管理代码片段
18.8.1 代码片段介绍
18.8.2 定义自己的代码片段
18.8.3 使用Git管理代码片段
18.8.4 其他代码片段管理工具
第三部分:iOS开发底层原理
第19章 Objective-C对象模型
19.1 简介
19.2 isa指针
19.3 类的成员变量
19.4 对象模型的应用
19.4.1 动态创建对象
19.4.2 系统相关API及应用
19.4.3 参考文献
第20章 Tagged Pointer对象
20.1 原有系统的问题
20.2 Tagged Pointer介绍
20.2.1 Tagged Pointer
20.2.2 特点
20.3 注意事项和实现细节
20.3.1 isa指针
20.3.2 64位下的isa指针优化
20.3.3 isa的 bit位含义
20.3.4 总结
20.3.5 参考文献
第21章 block对象模型
21.1 block的内部数据结构定义
21.2 用clang分析block实现
21.2.1 NSConcreteMallocBlock类型的block的实现
21.2.2 变量的复制
21.3 注意事项
21.3.1 避免循环引用
21.3.2 ARC对block类型的影响