# 问题记下来，思路留下来。

语言：zh-CN
原文：[问题记下来，思路留下来。](<https://allluckly.cn/journal/>)
中文：[中文 HTML](<https://allluckly.cn/journal/>)
English: [English HTML](<https://allluckly.cn/en/journal/>)

DEVELOPMENT NOTES · 2015–2017

从界面动画到音视频，把 128 篇旧笔记按主题重新整理。原始发布日期、文章地址和技术代码保留，方便沿着一个问题继续找下去。

这些文章记录的是当时的开发环境；本次整理未重新运行验证示例。每篇文章单独标明署名、出处和需要留意的版本信息。

## 先选一个主题

[01 48 篇

### UIKit 与图形动画

布局、列表、手势、富文本，以及 UIView、Core Animation 与图形绘制。

进入主题](<https://allluckly.cn/journal/topics/uikit-graphics/>)[02 15 篇

### Swift 与运行时

Swift 语言实践、Objective-C 消息机制、KVO、Block 与代码组织。

进入主题](<https://allluckly.cn/journal/topics/swift-runtime/>)[03 7 篇

### 并发与性能

多线程、RunLoop、线程保活、界面卡顿与性能排查。

进入主题](<https://allluckly.cn/journal/topics/concurrency-performance/>)[04 24 篇

### 数据与网络

Core Data、缓存、网络请求、即时通讯、推送与系统服务接入。

进入主题](<https://allluckly.cn/journal/topics/data-network/>)[05 20 篇

### 工程工具与发布

CocoaPods、Git、静态库、Xcode、测试、适配与应用发布记录。

进入主题](<https://allluckly.cn/journal/topics/tooling-release/>)[06 5 篇

### 音视频开发

FFmpeg 编译、H.264 解码、音视频采集、推流与播放器集成。

进入主题](<https://allluckly.cn/journal/topics/audio-video/>)[07 9 篇

### Web 与开发随笔

WebView、JavaScript 交互、小程序、博客维护、源码整理与开发随笔。

进入主题](<https://allluckly.cn/journal/topics/web-notes/>)

## 全部文章

128 篇 · 按主题归档

### UIKit 与图形动画

[导读与完整目录](<https://allluckly.cn/journal/topics/uikit-graphics/>)

- 2016-11-14 

  #### [iOS 两行代码实现自定义转场动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao70>)

  介绍 WTKTransitionAnimate 的调用方式，通过导航代理和工厂方法选择转场，再结合拖动手势与百分比进度控制实现交互式返回动画，说明封装内部的组织思路。

  逆流丶而上 WTKTransitionAnimate · 导航转场 · 交互式动画
- 2016-10-09 

  #### [iOS开发之UITextField的那点事](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao64>)

  针对文本输入长度、数字和金额限制、中文联想及键盘遮挡等问题，利用分类与运行时组织可扩展的输入规则，再通过键盘通知调整界面位置。

  Sindri UITextField · 输入限制 · 中文输入
- 2016-09-20 

  #### [iOS开发之按钮动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao59>)

  承接 Core Animation 基础，用 CALayer、CABasicAnimation 与动画组实现按钮的渐变和形变，说明图层属性、时间设置以及多个动画配合时的组织方式。

  Sindri Core Animation · CABasicAnimation · CAAnimationGroup
- 2016-09-09 

  #### [iOS开发之百度外卖APP个人中心头像\<浪\>起来的动画效果](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao58>)

  拆解个人中心头像周围的波浪效果，利用 CADisplayLink 驱动刷新、三角函数生成曲线，再交给 CAShapeLayer 绘制，说明连续波形动画所需的组成部分。

  乔同X CADisplayLink · CAShapeLayer · 波浪动画
- 2016-07-12 

  #### [iOS游戏开发没有你想的那么难--Hardest](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao54>)

  介绍用 Objective-C 与 UIKit 实现 Hardest 小游戏的整体结构，覆盖关卡选择、游戏状态、分数结算、音效和存档，并说明专用游戏引擎与此示例的适用差别。

  维尼的小熊 UIKit · 小游戏 · 关卡管理
- 2016-07-04 

  #### [iOS开发之复杂动画之抽丝剥茧(Objective-C & Swift)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao52>)

  将一个欢迎页复杂动画拆成圆形缩放、椭圆挤压、边缘凸起、旋转和波浪填充等阶段，逐步安排图层与路径变化，展示如何把视觉效果转换为可实现的动画步骤。

  HenryCheng CAShapeLayer · 路径动画 · 关键帧动画
- 2016-06-19 

  #### [iOS动画CoreAnimation浅谈](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao49>)

  围绕 CALayer、CAAnimation 与 CAAction 介绍 Core Animation，解释图层和动画对象的关系、时间控制与动作查找，再通过示例理解隐式和显式动画的组织方式。

  Sindri Core Animation · CALayer · CAAnimation
- 2016-06-12 

  #### [分分钟解决iOS开发中App启动广告的功能](<https://allluckly.cn/lblaunchimagead/LBLaunchImageAd>)

  封装启动广告视图，支持全屏或底部保留标志的两种布局，通过 SDWebImage 获取广告图片，再用透明度动画与 block 回调处理显示、点击和关闭等事件。

  Bison LBLaunchImageAd · 开屏广告 · SDWebImage
- 2016-05-12 

  #### [iOS开发之动画篇-碎片动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao45>)

  通过 UIView 的 maskView 解释遮罩如何影响内容显示，再把遮罩拆分成多个区域并分别安排动画，逐步构建碎片化展示与图片轮播过渡效果。

  Sindri maskView · 碎片动画 · UIView
- 2016-04-29 

  #### [iOS开发之超链接富文本](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao42>)

  利用 Core Text 绘制属性字符串，在预留的文字位置插入图片并实现超链接交互，再比较 TextKit 的处理方式，串起聊天表情与富文本排版所需的基本流程。

  Sindri Core Text · NSAttributedString · 图文混排
- 2016-04-15 

  #### [iOS开发之如何制作番茄钟App](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao37>)

  围绕番茄钟应用串起定时、通知提醒、音乐播放和 Today Widget，并整理卡片布局、转场、xib 与 URL Scheme 等实现入口，适合结合工程了解功能如何组合。

  威權在B612等着那阵温柔的风 番茄钟 · NSTimer · Today Widget
- 2016-03-23 

  #### [iOS开发动画篇之layout动画深入](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao34>)

  通过登录页的账号列表展开与按钮收缩，演示调整顶部、高度和左右边距约束后触发布局动画，进一步说明视图层级与约束变化如何配合形成连续过渡。

  Sindri Auto Layout · layoutIfNeeded · 登录动画
- 2016-03-17 

  #### [Swift之实现类似于格瓦拉启动页中的放大转场动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao33>)

  从普通导航 push 过渡到圆形放大转场，利用 CALayer 遮罩控制页面显露范围，再加入手势驱动动画；正文以 Swift 展开，并提供 Objective-C 示例参照。

  HenryCheng 自定义转场 · CALayer mask · Swift
- 2016-03-15 

  #### [iOS开发仿微信(WeChat)系列(七)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao31>)

  拆解聊天输入栏与消息单元格，用 block 将发送和显隐事件交给控制器，再根据消息归属配置头像、拉伸气泡背景，并在模型中计算尺寸以适配不同长度的消息。

  WzxJiang 聊天界面 · UITableViewCell · 气泡布局
- 2016-03-04 

  #### [学习Swift你应该懂点Core Graphics (长篇高能)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao29>)

  从获取绘图上下文和建立路径开始，以 Swift 演示矩形、圆、曲线、文字和图片绘制，再扩展线性与径向渐变、混合模式、坐标变换以及位图和 PDF 输出。

  大石头布 Core Graphics · Quartz 2D · 贝塞尔曲线
- 2016-02-28 

  #### [iOS开发之Layout动画初体验](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao25>)

  从横竖屏下的文本布局说明约束的作用，再拆解随列表滚动变化的界面动画，通过调整约束值控制元素位置和尺寸，演示 Auto Layout 与动画结合的基本过程。

  SindriLin Auto Layout · NSLayoutConstraint · 约束动画
- 2016-02-22 

  #### [Github源码推荐:(02.22):高仿小日子Swift2.0,高仿爱鲜蜂Swift2.0](<https://allluckly.cn/%E6%BA%90%E7%A0%81%E6%8E%A8%E8%8D%90/yuanma03>)

  选编 Swift 2.0 实现的小日子和爱鲜蜂两个仿制项目，提供 SmallDay、LoveFreshBeen 仓库及作者介绍入口，便于结合完整工程观察页面组织与界面实现。

  Bison Swift 2.0 · SmallDay · LoveFreshBeen
- 2016-02-17 

  #### [iOS开发Swift自定义下拉刷新如此简单](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao22>)

  使用 xib 创建文字视图覆盖 UIRefreshControl 的默认样式，分阶段旋转、变色和缩放文字，再模拟数据加载与插入，串起自定义下拉刷新从开始到结束的流程。

  威權在B612等着那阵温柔的风 Swift · UIRefreshControl · xib
- 2016-02-15 

  #### [iOS开发自定义转场动画实战讲解](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao20>)

  从转场中 from、to 与 presenting 的角色区别出发，逐步实现自定义模态和导航转场，再扩展交互式动画与转场协调器，解释复用动画逻辑的组织方式。

  bestswifter UIViewController转场 · 交互式动画 · UINavigationController
- 2016-02-15 

  #### [iOS开发动画篇之Transform和KeyFrame动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao19>)

  通过季节文字变化和落叶动画说明仿射变换与关键帧动画，逐步组合缩放、平移和旋转，讨论形变参数及动画阶段安排对最终运动轨迹的影响。

  SindriLin CGAffineTransform · 关键帧动画 · UIView
- 2016-02-05 

  #### [Swift2.0之CoreText排版神器(续)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao17>)

  在 Core Text 基础排版之上，分析基线、上升部和下降部等字体度量，逐行绘制统一中文与 emoji 的行高，再扩展链接与提及识别等富文本交互。

  大石头布 Core Text · CTLineDraw · 字体度量
- 2016-02-01 

  #### [iOS开发仿微信(WeChat)系列(三)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao15>)

  继续完成仿微信主界面，记录从 xib 暴露约束并按屏幕调整 constant、微调导航栏按钮位置，以及使用 SDWebImage 占位图加载图片的具体做法。

  WzxJiang Auto Layout · xib · UIBarButtonItem
- 2016-01-31 

  #### [Swift2.0之CoreText排版神器(长篇高能)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao14>)

  从富文本属性设置进入 Core Text，介绍字体、颜色与文本范围，再结合底层排版和绘制步骤实现图文混排，帮助理解复杂文本界面所需的基本对象。

  大石头布 Swift 2.0 · Core Text · NSAttributedString
- 2016-01-30 

  #### [iOS开发仿微信(WeChat)系列(二)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao13>)

  搭建仿微信的通讯录、发现和个人页面，复用分组 UITableView 与自定义个人信息 Cell，并用排序和分组数据组织联系人列表，展示多个页面的初始界面结构。

  WzxJiang UITableView · 通讯录 · 分组列表
- 2016-01-29 

  #### [iOS开发仿微信(WeChat)系列(-)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao12>)

  仿微信系列的开篇先整理工程与 MVC 文件夹，建立公共控制器，再创建各功能页和 UITabBarController，重点说明后续页面共享的导航骨架如何搭建。

  WzxJiang 仿微信 · MVC · UITabBarController
- 2016-01-28 

  #### [Cell特效之图片随着TableView的滑动上下移动](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao11>)

  根据单元格中心与父视图中心的偏移调整图片位置，使图片随 UITableView 滚动形成视差，并记录自定义 Cell 与可见项更新方式，附改编代码和原项目链接。

  WzxJiang UITableView · 视差效果 · 单元格复用
- 2016-01-22 

  #### [iOS开发动画篇之从UIView动画说起](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao09>)

  以输入框进入和按钮出现的登录动画为例，介绍 UIView 可动画属性、时间与选项参数，再加入弹簧动画，帮助理解位置、透明度与形变如何组合成连续效果。

  SindriLin UIView动画 · 可动画属性 · 弹簧动画
- 2016-01-22 

  #### [iOS开发之视觉差动画效果详解](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao08>)

  把视差效果拆成多层视图的位置关系，通过拖动中间层、补偿文字层偏移和裁剪越界内容，让文字相对底层保持不动，解释遮挡与位移如何共同形成视觉差。

  WzxJiang 视差动画 · clipsToBounds · 视图层级
- 2016-01-19 

  #### [iOS开发之CollectionViewFlowLayout实现LOL皮肤选择动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao07>)

  通过自定义 UICollectionViewFlowLayout 实现英雄皮肤卡片选择效果，说明如何调整布局属性和滚动停止位置，再将布局子类接入列表以完成居中切换动画。

  WzxJiang UICollectionViewFlowLayout · 卡片布局 · 滚动定位
- 2016-01-17 

  #### [iOS开发仿简书、淘宝等等App的View弹出效果](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao06>)

  将仿简书和淘宝的弹出效果拆成内容、遮罩与弹出层，结合两阶段图层形变和收起动画实现背景后退的视觉感受，并说明视图添加到 window 的层级关系。

  WzxJiang 弹出视图 · CATransform3D · 遮罩
- 2016-01-14 

  #### [iOS开发仿美国国家地理App的一个炫酷的动画](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao04>)

  拆解仿国家地理应用的弹出页面动画，逐项处理状态栏隐藏、视图拖动与回弹、导航栏衔接和返回按钮变色，展示多层界面联动效果的实现过程。

  WzxJiang UIView动画 · 拖动手势 · 导航栏
- 2016-01-13 

  #### [iOS实现自定义炫酷的弹出视图（popView）](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao03>)

  介绍 HWPopTool 自定义弹出视图的接入，通过配置内容视图、背景遮罩和关闭按钮控制展示效果，并说明关闭回调由代理改为 block 后的使用方式。

  HenryCheng HWPopTool · 弹出视图 · 遮罩
- 2016-01-13 

  #### [iOS开发之事件传递响应链](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao02>)

  从 UIResponder、UIEvent 与 UITouch 说明触摸事件如何交给视图处理，结合多个自定义视图观察响应链和手势的关系，并讨论事件传递机制在界面中的应用。

  SindriLin UIResponder · 响应链 · UITouch
- 2016-01-04 

  #### [仿window阿里旺旺登陆界面,打印机吐纸动画效果](<https://allluckly.cn/sdk/aliww>)

  模仿 Windows 阿里旺旺的打印机吐纸登录动画，通过保持视图横向位置与宽度不变、逐步调整高度实现展开效果，并提供 LBPrinterPaper 示例工程。

  Bison UIView动画 · frame · 登录界面
- 2015-12-07 

  #### [Github源码推荐:(12.25):手势解锁,个人SDK集成,无限循环图片轮播](<https://allluckly.cn/%E6%BA%90%E7%A0%81%E6%8E%A8%E8%8D%90/yuanma01>)

  选编手势解锁、个人中心与无限图片轮播三个开源项目，列出下载入口和部分集成代码，便于按界面需求了解对应组件及其使用方式。

  Bison PCGestureUnlock · LBPersonalPage · SDCycleScrollView
- 2015-11-23 

  #### [Mac OS开发系列之NSImageView](<https://allluckly.cn/mac/Mac-OS01>)

  以 macOS 图片视图为例，展示 NSImageView 的创建、图片赋值及添加到界面的过程，再通过启用图层、设置圆角与边框完成圆形头像样式。

  Bison macOS · NSImageView · NSImage
- 2015-10-24 

  #### [Bison教你1分钟集成3D无限翻转的Banner](<https://allluckly.cn/%E5%B9%BF%E5%91%8A%E8%BD%AE%E6%92%AD/Private>)

  通过左右滑动手势切换广告图片，并结合转场动画实现三维翻转轮播，介绍组件导入与点击代理。原文同时指出该效果使用私有动画接口，保留为技术实验。

  Bison Banner · CATransition · 手势交互
- 2015-10-19 

  #### [iOS9新特性之实现3D Touch就是So easy（更新Swift版）](<https://allluckly.cn/3d%20touch/3D-Touch>)

  围绕 iOS 9 的主屏快捷操作，说明在 Info.plist 中配置图标、标题与类型，再由 AppDelegate 分发点击事件，并给出 Objective-C 与 Swift 两种写法。

  Bison 3D Touch · UIApplicationShortcutItem · AppDelegate
- 2015-09-19 

  #### [Swift纯代码走进UICollectionView](<https://allluckly.cn/ios%E4%B9%8Bswift%E5%88%9D%E6%8E%A2/Swift%E7%BA%AF%E4%BB%A3%E7%A0%81%E8%B5%B0%E8%BF%9BUICollectionView>)

  从数据源和代理配置开始，用 Swift 创建 UICollectionView，逐步实现单元格、网络数据加载与可复用头视图，串起一个纯代码列表界面的完整结构。

  Bison UICollectionView · Swift · Alamofire
- 2015-09-07 

  #### [Swift超炫的个人界面依旧如此简单](<https://allluckly.cn/swift/Swift%E7%89%88%E8%B6%85%E7%82%AB%E7%9A%84%E4%B8%AA%E4%BA%BA%E7%95%8C%E9%9D%A2%E4%BE%9D%E6%97%A7%E5%A6%82%E6%AD%A4%E7%AE%80%E5%8D%95>)

  展示 Swift 版本个人中心组件的接入方式，说明如何导入 LBSwift\_PersonalPage 并通过继承复用界面，配合示例代码理解页面封装与调用关系。

  Bison Swift · LBSwift\_PersonalPage · 个人中心
- 2015-08-31 

  #### [iOS开发之1分钟做出超炫的个人界面](<https://allluckly.cn/uitabview/1%E5%88%86%E9%92%9F%E5%81%9A%E5%87%BA%E8%B6%85%E7%82%AB%E7%9A%84%E4%B8%AA%E4%BA%BA%E7%95%8C%E9%9D%A2%E4%B8%8D%E5%86%8D%E6%98%AF%E6%A2%A6>)

  介绍 LBPersonalPage\_VC 个人中心界面的集成方法，通过导入文件、继承基础控制器并补充配置来复用页面效果，同时提供对应示例供查看具体实现。

  Bison LBPersonalPage · 个人中心 · UITableView
- 2015-08-25 

  #### [Swift初探之纯代码写tabBar](<https://allluckly.cn/swift/Swift%E5%88%9D%E6%8E%A2%E4%B9%8B%E7%BA%AF%E4%BB%A3%E7%A0%81%E5%86%99tabBar>)

  用早期 Swift 代码构建仿折800的标签栏，演示创建多个子控制器、配置标题与图标并加入系统 TabBar 的过程，适合对照理解纯代码组织导航结构。

  Bison Swift · UITabBarController · 子控制器
- 2015-08-17 

  #### [iOS开发禁止使用系统自带手势滑动返回功能](<https://allluckly.cn/%E7%A6%81%E6%AD%A2%E4%BD%BF%E7%94%A8%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%B8%A6%E6%89%8B%E5%8A%BF%E6%BB%91%E5%8A%A8%E8%BF%94%E5%9B%9E%E5%8A%9F%E8%83%BD>)

  针对嵌入游戏左滑时意外露出导航栏和标签栏的问题，展示如何控制导航控制器自带的滑动返回手势，记录局部界面禁用系统交互的代码位置。

  Bison UINavigationController · 返回手势 · interactivePopGestureRecognizer
- 2015-07-29 

  #### [iOS开发动画之绕View旋转的View](<https://allluckly.cn/ios%E5%8A%A8%E7%94%BB/iOS%E5%BC%80%E5%8F%91%E5%8A%A8%E7%94%BB%E4%B9%8B%E7%BB%95View%E6%97%8B%E8%BD%AC%E7%9A%84View>)

  为视图围绕图片中心运动的需求给出实现思路，利用三角函数计算圆周上的位置并更新视图坐标，展示不依赖复杂动画框架的环绕运动代码。

  Bison UIView · 圆周运动 · 三角函数
- 2015-07-15 

  #### [iOS开发如何实现长微博的功能](<https://allluckly.cn/iOS%E5%BC%80%E5%8F%91%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E9%95%BF%E5%BE%AE%E5%8D%9A>)

  把长文字转为图片来实现长微博展示，代码围绕文本宽度、字号、所需高度与图像绘制展开，适合了解固定宽度下生成长图的早期 UIKit 做法。

  Bison 长图 · 文本绘制 · UIKit
- 2015-06-21 

  #### [iOS使用Google地图Api创建的地图显示标注及轨迹回放](<https://allluckly.cn/%E5%9C%B0%E5%9B%BE/iOS%E8%B0%83%E7%94%A8Google-%E5%9C%B0%E5%9B%BE>)

  记录为 iOS 与 Android 统一地图效果而接入 Google Maps 的过程，给出地图初始化、标注与轨迹线的主要代码，并说明申请地图 API Key 的配置入口。

  Bison Google Maps · GMSMapView · 地图标注
- 2015-06-15 

  #### [iOS开发类似折800功能中的一个小Demo](<https://allluckly.cn/uiscrollview/%E7%B1%BB%E4%BC%BC%E6%8A%98800%E5%8A%9F%E8%83%BD%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8FDemo>)

  以仿折800的滚动交互为例，记录拖动开始时的 contentOffset，并在滚动回调中比较偏移量来判断方向，附示例工程供对照查看界面的联动效果。

  UIScrollView · contentOffset · 滚动方向
- 2015-05-17 

  #### [iOS开发自动计算tabview中label的高度](<https://allluckly.cn/uitabview/%E8%87%AA%E5%8A%A8%E8%AE%A1%E7%AE%97tabview%E4%B8%ADlabel%E7%9A%84%E9%AB%98%E5%BA%A6>)

  通过字体、限制宽度与文本测量计算标签所需高度，再在 UITableView 行高回调中增加留白，展示手动处理多行文字与列表单元格高度的代码思路。

  UITableView · UILabel · 文本测量

### Swift 与运行时

[导读与完整目录](<https://allluckly.cn/journal/topics/swift-runtime/>)

- 2016-11-07 

  #### [iOS开发之位运算](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao69>)

  从按位与、或、异或和取反讲起，以 RGBA 颜色打包及状态标志为例展示位运算用途，再说明如何用枚举与掩码保存和查询多个状态。

  Sindri 位运算 · 位掩码 · RGBA
- 2016-10-27 

  #### [iOS开发之均衡代码职责浅谈](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao68>)

  围绕 MVC 中控制器过于庞大的问题，用项目示例讨论视图、模型和控制器的职责分配，提取重复逻辑并调整功能归属，强调在更换架构名称之前先理清代码责任。

  Sindri MVC · 职责划分 · 重构
- 2016-10-13 

  #### [Swift3.0学习系列之Swift实战-单例模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao67>)

  介绍 Swift 单例的用途与代价，通过类内静态常量和全局常量两种形式创建共享实例，说明私有构造器、跨模块访问，以及共享可变状态仍需考虑线程安全。

  Sindri Swift 3.0 · 单例模式 · static let
- 2016-10-13 

  #### [Swift3.0学习系列之Swift实战-享元模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao66>)

  以共享本地数据管理对象为例介绍享元模式，使用字典复用已加载的数据并记录使用次数，在无人使用时保存和释放，讨论它与始终保留单例对象的差别。

  Sindri Swift 3.0 · 享元模式 · 对象复用
- 2016-09-01 

  #### [iOS开发之协议代理](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao57>)

  以 UITableView 和自定义控件为例区分协议与委托，比较 delegate 和 block 回调的使用场景，再讨论数据源与协议抽象如何帮助对象之间减少耦合。

  Sindri protocol · delegate · block
- 2016-08-16 

  #### [菜鸟进化史之RunTime实战字典转模型](<https://allluckly.cn/runtime/runtime>)

  从逐项赋值、KVC 和第三方模型库的使用经历出发，编写 NSObject 分类遍历运行时信息，把字典映射为模型，并说明示例对两层嵌套数据的处理范围。

  Bison Objective-C Runtime · 字典转模型 · KVC
- 2016-07-28 

  #### [iOS开发之去model化开发](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao56>)

  面对字段不同但展示相近的多种票券数据，使用字典承载数据并通过协议暴露统一展示属性，让 Cell 与控制器减少对具体模型类型的依赖，讨论数据转换职责的放置。

  Sindri 协议 · 去model化 · MVC
- 2016-06-29 

  #### [iOS开发Swift实战之模板模式](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao51>)

  以商品数据和计算逻辑为例，分析代码对元组结构的依赖，再用类型与协议组织可复用的处理方式，讨论如何通过抽象减少参数形式和业务方法之间的耦合。

  Sindri Swift · 模板模式 · 协议
- 2016-05-20 

  #### [iOS开发之从源代码看OC的消息机制runtime](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao47>)

  从 unrecognized selector 错误切入 Objective-C 消息机制，结合源码讨论方法查找、缓存与消息转发，再通过运行时相关示例理解方法调用如何在执行阶段完成。

  Sindri Objective-C Runtime · 消息发送 · 方法缓存
- 2016-05-04 

  #### [runtime实战之一键改变字体](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao43>)

  从注册自定义字体和查找字体名称开始，利用 Objective-C 运行时方法处理界面字体替换，并讨论代码创建控件与 storyboard 控件在统一设置时的差别。

  HenryCheng Objective-C Runtime · 自定义字体 · UIFont
- 2016-04-06 

  #### [iOS开发之学习block深入浅出](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao36>)

  从 block 的声明和调用方式讲起，讨论捕获外部变量与回调封装，再通过模仿 Swift 高阶函数的例子展示 block 在 Objective-C 数据处理中的用法。

  Sindri block · 变量捕获 · Objective-C
- 2016-03-01 

  #### [iOS开发之重构笔记-Extra Method](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao26>)

  结合《重构》的提炼函数方法，把冗长代码按意图拆成独立函数，逐步处理参数、局部变量和返回值，并用实际示例讨论如何降低重复逻辑和提升可读性。

  SindriLin 重构 · Extract Method · 函数提炼
- 2016-02-16 

  #### [详解Swift中的七个陷阱以及避免方法](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao21>)

  通过具体代码讨论 Swift 协议扩展、可选链赋值和函数式处理中的易错行为，比较值类型与引用类型的分派差异，并总结如何避免编译通过却不符合预期的结果。

  bestswifter Swift · 协议扩展 · 可选链
- 2016-01-16 

  #### [iOS开发黑魔法KVO的奥秘](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao05>)

  以监听列表滚动偏移为入口介绍 KVO，分析观察者注册后动态子类与 isa 指针的变化，并借助运行时函数尝试实现相似机制，串起使用方式和底层原理。

  SindriLin KVO · isa · 动态子类
- 2016-01-10 

  #### [黑魔法runtime基础之属性与变量](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao01>)

  区分 Objective-C 属性与成员变量，结合运行时结构、地址偏移和 synthesize 分析属性的生成方式，再通过示例说明动态检查与操作对象结构的用途。

  SindriLin Objective-C Runtime · property · ivar

### 并发与性能

[导读与完整目录](<https://allluckly.cn/journal/topics/concurrency-performance/>)

- 2017-03-27 

  #### [iOS开发优化篇之卡顿检测](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao73>)

  通过监控主线程 RunLoop 状态和等待超时检测卡顿，并介绍获取线程栈帧、遍历调用栈与符号化的过程，说明如何在应用运行期间留下可排查的上下文。

  SindriLin RunLoop · 卡顿检测 · 调用栈
- 2016-07-26 

  #### [iOS开发深入研究Runloop与线程保活](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao55>)

  结合 AFNetworking 2.x 的网络线程分析 RunLoop 保活方式，说明照搬循环运行代码可能造成的对象持有与线程退出问题，再用示例验证更可控的生命周期处理。

  bestswifter RunLoop · NSThread · AFNetworking
- 2016-04-25 

  #### [Swift之优化UITableViewCell高度计算](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao40>)

  围绕 UITableView 重复计算单元格高度的问题，结合 FDTemplateLayoutCell 的思路介绍模板测量与高度缓存，并用 Swift 封装接口来减少滚动过程中的重复工作。

  大石头布 UITableViewCell · 行高缓存 · FDTemplateLayoutCell
- 2016-03-02 

  #### [iOS开发之UIKit性能调优实战讲解](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao27>)

  以列表界面为实验对象，结合 Instruments 的 Core Animation 工具观察图层混合、图片尺寸、颜色格式和离屏渲染，解释常见滚动性能问题与针对性的调整思路。

  bestswifter Instruments · Core Animation · 离屏渲染
- 2016-02-29 

  #### [Bison眼中的iOS开发多线程是这样的（三）](<https://allluckly.cn/%E5%A4%9A%E7%BA%BF%E7%A8%8B/duoxiancheng03>)

  围绕 GCD 的任务与队列展开，比较主队列、全局队列、自建串行和并发队列，并用图片下载、重复执行和一次性初始化示例说明常见任务提交方式。

  Bison GCD · dispatch\_async · dispatch\_sync
- 2016-01-18 

  #### [Bison眼中的iOS开发多线程是这样的（二）](<https://allluckly.cn/%E5%A4%9A%E7%BA%BF%E7%A8%8B/duoxiancheng02>)

  围绕共享数据被多个线程访问的情形，介绍 synchronized 同步代码块和 NSLock 的加解锁方式，再用 NSCondition 的等待、唤醒与广播解释线程之间的协调。

  Bison 线程安全 · synchronized · NSLock
- 2016-01-13 

  #### [Bison眼中的iOS开发多线程是这样的（一）](<https://allluckly.cn/%E5%A4%9A%E7%BA%BF%E7%A8%8B/duoxiancheng01>)

  从进程与线程的区别引入 iOS 多线程，比较 NSThread、NSOperationQueue 与 GCD，再具体演示线程创建、执行、终止和优先级，结合日志观察调度现象。

  Bison NSThread · 多线程 · 线程调度

### 数据与网络

[导读与完整目录](<https://allluckly.cn/journal/topics/data-network/>)

- 2017-05-03 

  #### [iOS开发之DNS劫持](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao75>)

  从域名解析异常引出 DNS 劫持问题，介绍通过 NSURLProtocol 调整请求和解析流程，并讨论 IPv6、WebKit 与 NSURLSession 的适配边界，保留相关实现与参考资料。

  SindriLin DNS · NSURLProtocol · IPv6
- 2017-03-09 

  #### [iOS即时通讯进阶之CocoaAsyncSocket源码解析(Connect终)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao72>)

  继续追踪 CocoaAsyncSocket 的连接过程，从本机地址绑定走向连接建立与后续回调，结合底层 Socket 操作解释异步连接的执行顺序及相关配置的作用。

  涂耀辉 CocoaAsyncSocket · GCDAsyncSocket · bind
- 2017-02-17 

  #### [iOS即时通讯进阶 - CocoaAsyncSocket源码解析(Connect篇)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao71>)

  沿 GCDAsyncSocket 初始化与连接入口阅读 CocoaAsyncSocket 源码，依次梳理参数检查、本机与服务端地址创建、Socket 配置等连接前准备工作，配合注释说明调用关系。

  涂耀辉 CocoaAsyncSocket · GCDAsyncSocket · Socket
- 2016-10-12 

  #### [iOS开发之iOS10推送必看(高阶2)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao65>)

  介绍 Notification Service Extension 在通知展示前处理内容的流程，说明创建扩展目标、修改文字和加载附件的方式，以及处理超时后回退原始通知的行为。

  徐不同 UNNotificationServiceExtension · 通知附件 · 远程通知
- 2016-09-28 

  #### [iOS开发之iOS10推送必看(高阶1)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao63>)

  通过创建本地通知说明 UNNotificationRequest、触发器和通知中心的关系，利用 identifier 管理添加、更新和删除，并介绍附件所需的有效文件路径与配置。

  徐不同 UNNotificationRequest · UNUserNotificationCenter · 本地通知
- 2016-09-27 

  #### [iOS开发之iOS10推送必看(基础篇)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao62>)

  从现有工程开启推送能力与检查环境配置入手，介绍 iOS 10 通知注册、中心代理和回调处理，再结合第三方推送解释旧代码迁移时需要关注的接口变化。

  徐不同 iOS 10 · UserNotifications · 推送注册
- 2016-06-02 

  #### [iOS开发之封装一个自动归、解档的类](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao48>)

  从 NSCoding 的归档与解档入手，利用运行时遍历对象成员变量并组织编码，逐步封装 WZXArchiver，讨论包含子对象时的处理方式及自动化存储的限制。

  WzxJiang NSCoding · WZXArchiver · 对象归档
- 2016-05-09 

  #### [iOS开发之Swift初体验PhotoKit](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao44>)

  以照片多选组件介绍 PhotoKit 的基本使用，说明最大选择数量、PHAsset 数组回传和闭包调用方式，并提供相册项目及学习资料，记录从 AssetsLibrary 迁移的尝试。

  大石头布 PhotoKit · PHAsset · 照片多选
- 2016-04-26 

  #### [谈谈MVVM和链式网络请求架构](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao41>)

  从控制器业务代码膨胀出发，用登录判断展示 Model、ViewModel 与 ViewController 的职责拆分，再介绍 ReactiveCocoa 和链式网络请求封装如何组织业务调用。

  WzxJiang MVVM · ReactiveCocoa · ViewModel
- 2016-03-30 

  #### [iOS开发之AES+Base64数据混合加密与解密](<https://allluckly.cn/aes/AES>)

  分别为 NSData 和 NSString 编写分类，展示 AES 加解密与 Base64 编码组合的调用流程，并强调客户端和后台需要约定一致的密钥，附完整演示项目。

  Bison AES · Base64 · CommonCrypto
- 2016-03-16 

  #### [一步一步带你封装一个Swift本地缓存库](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao32>)

  先区分 Documents、Caches、Preferences 与临时目录，再封装按类型保存对象、图片和语音的本地文件缓存，结合离线浏览场景说明目录管理和缓存读写思路。

  大石头布 Swift · 文件缓存 · 应用沙盒
- 2016-03-14 

  #### [iOS开发仿微信(WeChat)系列(六)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao30>)

  记录仿微信聊天功能接入后的三个问题：同步键盘动画参数、处理应用进出后台时的观察者，以及保存登录状态。文章展示当时的处理代码并注明自动登录示例的简化范围。

  WzxJiang 键盘通知 · 即时通信 · 应用生命周期
- 2016-03-03 

  #### [史上最全远程推送详解之极光推送](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao28>)

  按 App ID、推送能力与证书申请顺序准备远程通知，再接入极光推送 SDK，说明开发和生产配置、证书导出及客户端回调代码，记录早期推送接入流程。

  WzxJiang APNs · 极光推送 · 推送证书
- 2016-02-14 

  #### [iOS开发仿微信(WeChat)系列(五)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao18>)

  继续仿微信的个人资料与朋友圈界面，使用 AVUser 简化注册登录、AVFile 上传头像，并通过压缩图片减少传输量，同时记录下拉头图与刷新组件的实现问题。

  WzxJiang AVUser · AVFile · 头像上传
- 2016-02-03 

  #### [iOS开发仿微信(WeChat)系列(四)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao16>)

  仿微信项目开始接入云端存储与即时通信依赖，封装登录和注册方法，并记录查询用户数据时的排错过程。正文包含早期密码字段试验，适合作为历史开发记录。

  WzxJiang 仿微信 · 云端存储 · 用户登录
- 2016-01-25 

  #### [也许你根本不需要Alamofire,何不尝试下NSURLSession?](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao10>)

  从最简单的数据请求开始介绍 NSURLSession，区分数据、下载和上传任务，并比较默认、临时与后台配置，说明缓存、Cookie 和网络任务组织之间的关系。

  大石头布 NSURLSession · NSURLSessionConfiguration · 下载任务
- 2016-01-20 

  #### [iOS开发之详解连连支付集成](<https://allluckly.cn/ios%E6%94%AF%E4%BB%98/lianlianzhifu>)

  整理连连支付 SDK 接入时的链接参数、资源样式和业务字段，说明用户编号、绑卡协议与服务端回调的含义，并记录签名、界面定制等容易混淆的配置点。

  Bison 连连支付 · 支付SDK · 服务端签名
- 2016-01-10 

  #### [详解持久化Core Data框架的原理以及使用](<https://allluckly.cn/%E6%8C%81%E4%B9%85%E5%8C%96/chijiuhua01>)

  从托管对象、上下文和持久化协调器的关系讲起，手动搭建 Core Data 环境与实体模型，再通过新增、查询、修改和删除示例说明数据保存的主要流程。

  Bison Core Data · NSManagedObjectContext · 实体模型
- 2016-01-04 

  #### [Github源码推荐:(01.04):iOS开发蓝牙,启动动画,自定义Tabbar](<https://allluckly.cn/%E6%BA%90%E7%A0%81%E6%8E%A8%E8%8D%90/yuanma02>)

  选编 BabyBluetooth 蓝牙框架、CLClipImageView 启动动画和 CYLTabBarController 标签栏，提供项目入口及部分用法，并区分蓝牙中心与外设两种工作模式。

  Bison BabyBluetooth · CoreBluetooth · CLClipImageView
- 2015-12-07 

  #### [iOS开发之OCR光学识别储蓄卡以及信用卡](<https://allluckly.cn/ocr/back>)

  围绕扫描卡号的需求介绍 card.io SDK 的导入、链接参数、代理设置和识别回调，并给出 Objective-C 与 Swift 示例；正文说明此次选用的是信用卡识别方案。

  Bison card.io · OCR · 信用卡识别
- 2015-11-09 

  #### [Swift2.0后Alamofire的使用方法](<https://allluckly.cn/swift/Alamofire>)

  展示 Swift 2.0 环境下手动导入 Alamofire、配置项目依赖并发起网络请求的步骤，配合截图说明工程链接位置，适合回顾早期框架接入和调用方式。

  Bison Swift 2.0 · Alamofire · 网络请求
- 2015-10-21 

  #### [Bison教你3分钟集成支付宝好友分享](<https://allluckly.cn/%E6%94%AF%E4%BB%98%E5%AE%9D/ZFB>)

  按应用注册、SDK 导入、URL Scheme 配置与回调处理介绍支付宝好友分享，区分文本、图片和网页消息的数据对象，并记录安装检测及鉴权失败的排查点。

  Bison 支付宝分享 · SocialSDK · URL Scheme
- 2015-09-23 

  #### [一点一滴慢慢的揭开XMPP的神秘面纱](<https://allluckly.cn/ios%E4%B9%8Bxmpp/%E4%B8%80%E7%82%B9%E4%B8%80%E6%BB%B4%E6%85%A2%E6%85%A2%E7%9A%84%E6%8F%AD%E5%BC%80XMPP%E7%9A%84%E7%A5%9E%E7%A7%98%E9%9D%A2%E7%BA%B1>)

  记录 XMPP 聊天接入的初步流程，包括导入依赖、使用用户信息连接 Openfire、处理注册与登录验证，以及消息收发相关回调，提供客户端集成代码。

  Bison XMPP · Openfire · 即时通信
- 2015-06-16 

  #### [iOS开发获取通讯录并发短信给联系人](<https://allluckly.cn/%E9%80%9A%E8%AE%AF%E5%BD%95/%E8%8E%B7%E5%8F%96%E9%80%9A%E8%AE%AF%E5%BD%95%E5%B9%B6%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%E8%81%94%E7%B3%BB%E4%BA%BA>)

  围绕邀请好友的需求，介绍读取手机联系人并调起短信发送的简单封装，列出 AddressBook、AddressBookUI 与 MessageUI 依赖，并提供 LBContacts 示例工程。

  Bison 通讯录 · AddressBook · MessageUI

### 工程工具与发布

[导读与完整目录](<https://allluckly.cn/journal/topics/tooling-release/>)

- 2017-04-05 

  #### [iOS开发之自动化测试的那些干货](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao74>)

  比较单元测试和 UI 自动化的用途，介绍 XCTest、Quick、Nimble、KIF 与 Appium，讨论等待、Stub/Mock、命令行运行和可测试代码结构，帮助组织可维护的测试。

  黄文臣 XCTest · Quick · Nimble
- 2016-09-22 

  #### [iOS开发之Xcode8兼容适配iOS 10资料整理笔记](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao61>)

  汇总 Xcode 8 与 iOS 10 迁移中的通知、ATS、隐私权限和界面变化，记录日志、字体、列表性能、插件及 xib 警告等问题，并附相应官方资料入口。

  判若两人丶 iOS 10 · Xcode 8 · ATS
- 2016-09-21 

  #### [Xcode8开发iOS10推送通知过程](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tougao60>)

  记录在 Xcode 8 为现有应用接入 iOS 10 通知扩展的过程，集中讨论推送能力、签名、Swift 版本和架构设置，以及 Service、Content 扩展的调试与提交问题。

  zhao0 iOS 10 · Xcode 8 · 通知扩展
- 2016-06-19 

  #### [iOS10新特性之SiriKit](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao50>)

  介绍 WWDC 2016 后的 SiriKit 接入，从创建 Intents Extension 到实现意图处理和事件界面，说明语音请求如何被解析并交给应用扩展提供相应内容。

  Sindri SiriKit · Intents Extension · INExtension
- 2016-05-03 

  #### [iOS开发之诱导用户为自己的App评论](<https://allluckly.cn/aso/GoToAppStore>)

  介绍 LBToAppStore 评价提醒封装，使用应用版本、间隔天数与用户上次选择控制弹窗时机，再根据选择跳转到商店或推迟提醒，展示早期评价入口的实现思路。

  Bison LBToAppStore · App Store · UIAlertController
- 2016-04-15 

  #### [iOS开发之Xcode测试苹果官方文档翻译（下）](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao39>)

  接续 Apple 测试文档译文，介绍代码覆盖率、命令行测试、Xcode Server 持续集成和 UI 测试录制，并讨论可测试代码的组织及从 OCUnit 迁移到 XCTest。

  许漠颜 代码覆盖率 · Xcode Server · 持续集成
- 2016-04-15 

  #### [iOS开发之Xcode测试苹果官方文档翻译（上）](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao38>)

  翻译早期 Apple 测试文档，介绍 XCTest 的工程配置、测试类与方法、生命周期以及性能和界面测试，结合测试导航器说明如何运行用例和查看结果。

  许漠颜 XCTest · XCTestCase · 单元测试
- 2016-04-04 

  #### [提交代码到CocoaPods看我就够了](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao35>)

  记录将开源库发布到 CocoaPods 的步骤，包括准备 GitHub 工程、注册 trunk、编写 podspec、核对版本与标签、执行校验和提交，并解释常用配置字段。

  WzxJiang CocoaPods · podspec · trunk
- 2016-02-26 

  #### [SwiftGG交流分享Xcode开发使用技巧](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao24>)

  整理一次 SwiftGG 交流中的 Xcode 使用技巧，介绍异常、符号和测试失败断点，演示调试时查看或修改变量、使用 Quick Look，以及创建可复用代码片段。

  bestswifter Xcode · 断点 · Quick Look
- 2016-02-19 

  #### [Xcode版本更新插件失灵批量解决法](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao23>)

  针对旧版 Xcode 更新后插件无法加载，以及误选 Skip Bundles 的情况，介绍检查兼容 UUID、修改插件 Info.plist 和重置加载选择的历史处理步骤。

  许漠颜 Xcode插件 · DVTPlugInCompatibilityUUIDs · Info.plist
- 2016-02-18 

  #### [Apple Pay强势来袭，开发者应做的事情](<https://allluckly.cn/ios%E6%94%AF%E4%BB%98/Applepay>)

  记录 Apple Pay 的早期工程配置，包括开启能力、创建 Merchant ID 和设置支付请求属性，并列出国家与货币代码等疑问；演示效果来自原文注明的模拟器。

  Bison Apple Pay · Merchant ID · 支付请求
- 2015-12-28 

  #### [Biosn收集的Git常见的错误解决方式](<https://allluckly.cn/sdk/git01>)

  汇总使用 Git 时遇到的索引锁和 push 默认行为警告，列出报错画面及当时采用的配置命令。适合按错误类型回顾排查过程，执行前需确认现场状态。

  Bison Git · index.lock · push.default
- 2015-12-26 

  #### [Bison教你1分钟集成百度移动SSP启动广告](<https://allluckly.cn/sdk/baidu01>)

  记录百度移动 SSP 开屏广告的历史接入过程，从平台注册和 SDK 导入，到系统依赖、编译参数与启动代理回调，展示在应用启动阶段加载广告的主要步骤。

  Bison 百度SSP · 开屏广告 · BaiduMobAdSplash
- 2015-09-29 

  #### [iOS开发之多国语言国际化经验浅谈](<https://allluckly.cn/ios%E4%B9%8B%E5%9B%BD%E9%99%85%E5%8C%96/On-the-experience-of-the-international-experience-of-iOS>)

  总结多语言项目中翻译文件整理、按钮文字长度、语言地区代码和本地化图片命名的实际问题，重点记录 iOS 9 语言标识变化对中文判断逻辑的影响。

  Bison 国际化 · 本地化 · 语言地区代码
- 2015-07-31 

  #### [iOS开发之检测设备锁屏](<https://allluckly.cn/iOS%E5%BC%80%E5%8F%91%E4%B9%8B%E6%A3%80%E6%B5%8B%E8%AE%BE%E5%A4%87%E9%94%81%E5%B1%8F>)

  针对嵌入游戏在锁屏时出现异常的场景，记录监听 SpringBoard 锁屏通知的代码与回调处理。文章保留当时的排障思路，接口使用条件需要单独核实。

  Bison 锁屏通知 · SpringBoard · CFNotificationCenter
- 2015-06-10 

  #### [【iOS开发】打包静态库.a文件](<https://allluckly.cn/%E9%9D%99%E6%80%81%E5%BA%93/iOS%E5%BC%80%E5%8F%91%E6%89%93%E5%8C%85%E9%9D%99%E6%80%81%E5%BA%93.a%E6%96%87%E4%BB%B6>)

  记录在 Xcode 中分别构建设备和模拟器静态库，再用 lipo 查看架构并合并 .a 文件的流程，解释为何测试时需要匹配目标平台及如何检查生成结果。

  Bison 静态库 · lipo · Xcode
- 2015-06-04 

  #### [iOS开发内购全套图文教程](<https://allluckly.cn/ios%E6%94%AF%E4%BB%98/iOS%E5%BC%80%E5%8F%912015%E5%B9%B4%E6%9C%80%E6%96%B0%E5%86%85%E8%B4%AD%E6%95%99%E7%A8%8B>)

  按协议填写、内购商品创建、沙盒账号配置与客户端代码展开，展示 StoreKit 商品请求、支付队列、交易状态处理及收据验证的早期完整接入过程。

  Bison StoreKit · IAP · 沙盒测试
- 2015-05-22 

  #### [【iOS开发】iOS被拒解决方案--持续更新](<https://allluckly.cn/%E4%B8%8A%E6%9E%B6/iOS%E8%A2%AB%E6%8B%92%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0>)

  汇集应用审核中遇到的崩溃、后台模式、第三方登录、内购和用户内容等问题，并附当时的处理记录。内容反映旧审核条款与具体案例，可用于回顾问题类型。

  App Store · 应用审核 · 后台模式
- 2015-05-20 

  #### [iOS开发CocoaPods安装及使用](<https://allluckly.cn/cocoapods/CocoaPods%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8>)

  从安装 Ruby 与 CocoaPods 开始，说明如何搜索依赖、编写 Podfile、执行安装并使用生成的工作区，还记录头文件补全的处理方法，适合理解早期 iOS 依赖管理流程。

  Bison CocoaPods · Podfile · Ruby
- 2015-05-18 

  #### [iOS开发第三方登录没安装对应的APP时，图标禁止点击且颜色变灰](<https://allluckly.cn/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E9%99%86/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E5%BD%95>)

  以 QQ 和微信登录按钮为例，检测设备是否安装对应应用，再决定隐藏按钮或禁用点击并置灰，记录当时第三方登录入口随安装状态调整的界面处理方式。

  第三方登录 · QQ · 微信

### 音视频开发

[导读与完整目录](<https://allluckly.cn/journal/topics/audio-video/>)

- 2017-07-20 

  #### [FFmpeg-iOS获取摄像头麦克风](<https://allluckly.cn/ffmpeg/ffmpeg4>)

  先使用 FFmpeg 的设备输入能力列出摄像头和麦克风，再给出 iOS 原生摄像头采集的实现示例，对照展示媒体设备枚举与系统采集会话的基本配置过程。

  Bison FFmpeg · AVFoundation · 摄像头
- 2017-07-12 

  #### [FFmpeg-iOS推流器的简单封装](<https://allluckly.cn/ffmpeg/ffmpeg3>)

  在前两篇 FFmpeg 基础上搭建本地 nginx 推流测试环境，给出服务器配置与客户端推流封装，再使用 VLC 打开流地址检查结果，串起编码数据发送与播放验证。

  Bison FFmpeg · nginx · RTMP
- 2017-07-11 

  #### [FFmpeg-iOS的H.264解码](<https://allluckly.cn/ffmpeg/ffmpeg2>)

  从导入 FFmpeg-iOS 与配置头文件搜索路径开始，梳理打开媒体、查找视频流、初始化解码器、读取数据包和释放资源的 H.264 解码流程，并提供封装示例。

  Bison FFmpeg · H.264 · avcodec
- 2017-07-11 

  #### [Mac编译ffmpeg获取FFmpeg-iOS](<https://allluckly.cn/ffmpeg/ffmpeg1>)

  记录在 Mac 上准备 gas-preprocessor 与 yasm，再运行 FFmpeg-iOS 构建脚本的流程，说明脚本位置、依赖安装和最终生成目录，为后续解码示例准备库文件。

  Bison FFmpeg · gas-preprocessor · yasm
- 2016-05-13 

  #### [iOS开发之集成ijkplayer视频直播](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao46>)

  按照下载源码、初始化依赖、编译 FFmpeg、打包 IJKMediaFramework 与工程集成的顺序，记录 iOS 接入 ijkplayer 的过程，重点解释各目录和构建步骤的作用。

  jianshu\_wl ijkplayer · FFmpeg · IJKMediaFramework

### Web 与开发随笔

[导读与完整目录](<https://allluckly.cn/journal/topics/web-notes/>)

- 2016-10-19 

  #### [微信小程序开发教程-从零开始（3）](<https://allluckly.cn/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/weixinxiaochengxu02>)

  为小程序文章列表接入网络请求，读取返回数据并通过 setData 更新页面，再调整 WXML 的字段绑定；同时记录图片地址和 H5 详情展示在当时遇到的限制。

  Bison 微信小程序 · wx.request · setData
- 2016-10-18 

  #### [微信小程序开发教程-从零开始（2）](<https://allluckly.cn/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/weixinxiaochengxu01>)

  在文章列表基础上新增详情页，使用 navigator 配置跳转与参数，再调整 WXSS 中的留白、图片位置和文字布局，逐步把列表样式整理为预期的页面效果。

  Bison 微信小程序 · navigator · WXSS
- 2016-10-17 

  #### [微信小程序开发教程-从零开始（1）](<https://allluckly.cn/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/weixinxiaochengxu>)

  以 iOS 开发者的视角搭建 IT Blog 小程序，说明 app.json、app.js、WXML 和 WXSS 的分工，配置 TabBar 并使用模板和列表渲染展示文章数据。

  Bison 微信小程序 · WXML · WXSS
- 2016-07-27 

  #### [React Native在Mac上部署iOS开发环境](<https://allluckly.cn/react%20native/React-Native01>)

  记录 Mac 上的 React Native 环境搭建，安装 Homebrew、Node.js、watchman 与 flow 后创建项目，再打开 iOS 工程并在模拟器中刷新代码。

  Bison React Native · Node.js · watchman
- 2016-07-05 

  #### [iOS开发之javaScript交互(JS调用原生的方法)](<https://allluckly.cn/%E6%8A%95%E7%A8%BF/tuogao53>)

  比较早期 UIWebView 拦截链接的交互方式与 JavaScriptCore，围绕 JSContext 说明原生执行 JavaScript、注册方法和互相传递数据的基本过程。

  Sindri JavaScriptCore · JSContext · UIWebView
- 2016-02-01 

  #### [菜鸟程序员2015年年终总结](<https://allluckly.cn/%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/zongjie2015>)

  回顾作者在 2015 年的求职、项目开发与自学经历，记录建立技术博客、学习 Swift、发布开源界面组件和结识同行的过程，呈现早期开发成长的个人背景。

  Bison 开发者成长 · 技术博客 · Swift
- 2015-12-27 

  #### [Bison教你怎么让百度收录你的Github空间博客](<https://allluckly.cn/mac/blog02>)

  记录将 GitHub Pages 博客同步到 GitCafe Pages 的历史做法，涵盖 SourceTree 克隆、分支提交、域名绑定与分地区解析，旨在改善当时的国内访问和收录情况。

  Bison GitHub Pages · GitCafe · SourceTree
- 2015-11-28 

  #### [技术博客不仅仅只是一个网站，还可以这样玩........](<https://allluckly.cn/mac/blog01>)

  记录把个人技术博客包装成 iOS 应用的尝试，通过 UIWebView 展示首页和分类页并处理加载回调，同时保留搜索和交互卡顿等当时尚未解决的问题。

  Bison 个人博客 · UIWebView · 混合应用
- 2015-07-17 

  #### [UIWebView的使用与总结](<https://allluckly.cn/webView%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%8E%E6%80%BB%E7%BB%93>)

  整理 UIWebView 加载网页与原生应用混合布局的常用设置，包括透明背景、缩放适配、电话识别和 JavaScript 交互，并讨论跨平台布局与通信成本。

  Bison UIWebView · JavaScript · 混合开发

