DEVELOPMENT NOTES · 2015–2017

问题记下来,思路留下来。

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

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

先选一个主题

全部文章

128 篇 · 按主题归档

UIKit 与图形动画

导读与完整目录
  • iOS 两行代码实现自定义转场动画

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

    逆流丶而上WTKTransitionAnimate · 导航转场 · 交互式动画
  • iOS开发之UITextField的那点事

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

    SindriUITextField · 输入限制 · 中文输入
  • iOS开发之按钮动画

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

    SindriCore Animation · CABasicAnimation · CAAnimationGroup
  • iOS开发之百度外卖APP个人中心头像<浪>起来的动画效果

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

    乔同XCADisplayLink · CAShapeLayer · 波浪动画
  • iOS游戏开发没有你想的那么难--Hardest

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

    维尼的小熊UIKit · 小游戏 · 关卡管理
  • iOS开发之复杂动画之抽丝剥茧(Objective-C & Swift)

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

    HenryChengCAShapeLayer · 路径动画 · 关键帧动画
  • iOS动画CoreAnimation浅谈

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

    SindriCore Animation · CALayer · CAAnimation
  • 分分钟解决iOS开发中App启动广告的功能

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

    BisonLBLaunchImageAd · 开屏广告 · SDWebImage
  • iOS开发之动画篇-碎片动画

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

    SindrimaskView · 碎片动画 · UIView
  • iOS开发之超链接富文本

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

    SindriCore Text · NSAttributedString · 图文混排
  • iOS开发之如何制作番茄钟App

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

    威權在B612等着那阵温柔的风番茄钟 · NSTimer · Today Widget
  • iOS开发动画篇之layout动画深入

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

    SindriAuto Layout · layoutIfNeeded · 登录动画
  • Swift之实现类似于格瓦拉启动页中的放大转场动画

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

    HenryCheng自定义转场 · CALayer mask · Swift
  • iOS开发仿微信(WeChat)系列(七)

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

    WzxJiang聊天界面 · UITableViewCell · 气泡布局
  • 学习Swift你应该懂点Core Graphics (长篇高能)

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

    大石头布Core Graphics · Quartz 2D · 贝塞尔曲线
  • iOS开发之Layout动画初体验

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

    SindriLinAuto Layout · NSLayoutConstraint · 约束动画
  • Github源码推荐:(02.22):高仿小日子Swift2.0,高仿爱鲜蜂Swift2.0

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

    BisonSwift 2.0 · SmallDay · LoveFreshBeen
  • iOS开发Swift自定义下拉刷新如此简单

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

    威權在B612等着那阵温柔的风Swift · UIRefreshControl · xib
  • iOS开发自定义转场动画实战讲解

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

    bestswifterUIViewController转场 · 交互式动画 · UINavigationController
  • iOS开发动画篇之Transform和KeyFrame动画

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

    SindriLinCGAffineTransform · 关键帧动画 · UIView
  • Swift2.0之CoreText排版神器(续)

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

    大石头布Core Text · CTLineDraw · 字体度量
  • iOS开发仿微信(WeChat)系列(三)

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

    WzxJiangAuto Layout · xib · UIBarButtonItem
  • Swift2.0之CoreText排版神器(长篇高能)

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

    大石头布Swift 2.0 · Core Text · NSAttributedString
  • iOS开发仿微信(WeChat)系列(二)

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

    WzxJiangUITableView · 通讯录 · 分组列表
  • iOS开发仿微信(WeChat)系列(-)

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

    WzxJiang仿微信 · MVC · UITabBarController
  • Cell特效之图片随着TableView的滑动上下移动

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

    WzxJiangUITableView · 视差效果 · 单元格复用
  • iOS开发动画篇之从UIView动画说起

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

    SindriLinUIView动画 · 可动画属性 · 弹簧动画
  • iOS开发之视觉差动画效果详解

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

    WzxJiang视差动画 · clipsToBounds · 视图层级
  • iOS开发之CollectionViewFlowLayout实现LOL皮肤选择动画

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

    WzxJiangUICollectionViewFlowLayout · 卡片布局 · 滚动定位
  • iOS开发仿简书、淘宝等等App的View弹出效果

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

    WzxJiang弹出视图 · CATransform3D · 遮罩
  • iOS开发仿美国国家地理App的一个炫酷的动画

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

    WzxJiangUIView动画 · 拖动手势 · 导航栏
  • iOS实现自定义炫酷的弹出视图(popView)

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

    HenryChengHWPopTool · 弹出视图 · 遮罩
  • iOS开发之事件传递响应链

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

    SindriLinUIResponder · 响应链 · UITouch
  • 仿window阿里旺旺登陆界面,打印机吐纸动画效果

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

    BisonUIView动画 · frame · 登录界面
  • Github源码推荐:(12.25):手势解锁,个人SDK集成,无限循环图片轮播

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

    BisonPCGestureUnlock · LBPersonalPage · SDCycleScrollView
  • Mac OS开发系列之NSImageView

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

    BisonmacOS · NSImageView · NSImage
  • Bison教你1分钟集成3D无限翻转的Banner

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

    BisonBanner · CATransition · 手势交互
  • iOS9新特性之实现3D Touch就是So easy(更新Swift版)

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

    Bison3D Touch · UIApplicationShortcutItem · AppDelegate
  • Swift纯代码走进UICollectionView

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

    BisonUICollectionView · Swift · Alamofire
  • Swift超炫的个人界面依旧如此简单

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

    BisonSwift · LBSwift_PersonalPage · 个人中心
  • iOS开发之1分钟做出超炫的个人界面

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

    BisonLBPersonalPage · 个人中心 · UITableView
  • Swift初探之纯代码写tabBar

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

    BisonSwift · UITabBarController · 子控制器
  • iOS开发禁止使用系统自带手势滑动返回功能

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

    BisonUINavigationController · 返回手势 · interactivePopGestureRecognizer
  • iOS开发动画之绕View旋转的View

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

    BisonUIView · 圆周运动 · 三角函数
  • iOS开发如何实现长微博的功能

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

    Bison长图 · 文本绘制 · UIKit
  • iOS使用Google地图Api创建的地图显示标注及轨迹回放

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

    BisonGoogle Maps · GMSMapView · 地图标注
  • iOS开发类似折800功能中的一个小Demo

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

    UIScrollView · contentOffset · 滚动方向
  • iOS开发自动计算tabview中label的高度

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

    UITableView · UILabel · 文本测量

Swift 与运行时

导读与完整目录
  • iOS开发之位运算

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

    Sindri位运算 · 位掩码 · RGBA
  • iOS开发之均衡代码职责浅谈

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

    SindriMVC · 职责划分 · 重构
  • Swift3.0学习系列之Swift实战-单例模式

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

    SindriSwift 3.0 · 单例模式 · static let
  • Swift3.0学习系列之Swift实战-享元模式

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

    SindriSwift 3.0 · 享元模式 · 对象复用
  • iOS开发之协议代理

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

    Sindriprotocol · delegate · block
  • 菜鸟进化史之RunTime实战字典转模型

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

    BisonObjective-C Runtime · 字典转模型 · KVC
  • iOS开发之去model化开发

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

    Sindri协议 · 去model化 · MVC
  • iOS开发Swift实战之模板模式

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

    SindriSwift · 模板模式 · 协议
  • iOS开发之从源代码看OC的消息机制runtime

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

    SindriObjective-C Runtime · 消息发送 · 方法缓存
  • runtime实战之一键改变字体

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

    HenryChengObjective-C Runtime · 自定义字体 · UIFont
  • iOS开发之学习block深入浅出

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

    Sindriblock · 变量捕获 · Objective-C
  • iOS开发之重构笔记-Extra Method

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

    SindriLin重构 · Extract Method · 函数提炼
  • 详解Swift中的七个陷阱以及避免方法

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

    bestswifterSwift · 协议扩展 · 可选链
  • iOS开发黑魔法KVO的奥秘

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

    SindriLinKVO · isa · 动态子类
  • 黑魔法runtime基础之属性与变量

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

    SindriLinObjective-C Runtime · property · ivar

并发与性能

导读与完整目录
  • iOS开发优化篇之卡顿检测

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

    SindriLinRunLoop · 卡顿检测 · 调用栈
  • iOS开发深入研究Runloop与线程保活

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

    bestswifterRunLoop · NSThread · AFNetworking
  • Swift之优化UITableViewCell高度计算

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

    大石头布UITableViewCell · 行高缓存 · FDTemplateLayoutCell
  • iOS开发之UIKit性能调优实战讲解

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

    bestswifterInstruments · Core Animation · 离屏渲染
  • Bison眼中的iOS开发多线程是这样的(三)

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

    BisonGCD · dispatch_async · dispatch_sync
  • Bison眼中的iOS开发多线程是这样的(二)

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

    Bison线程安全 · synchronized · NSLock
  • Bison眼中的iOS开发多线程是这样的(一)

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

    BisonNSThread · 多线程 · 线程调度

数据与网络

导读与完整目录
  • iOS开发之DNS劫持

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

    SindriLinDNS · NSURLProtocol · IPv6
  • iOS即时通讯进阶之CocoaAsyncSocket源码解析(Connect终)

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

    涂耀辉CocoaAsyncSocket · GCDAsyncSocket · bind
  • iOS即时通讯进阶 - CocoaAsyncSocket源码解析(Connect篇)

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

    涂耀辉CocoaAsyncSocket · GCDAsyncSocket · Socket
  • iOS开发之iOS10推送必看(高阶2)

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

    徐不同UNNotificationServiceExtension · 通知附件 · 远程通知
  • iOS开发之iOS10推送必看(高阶1)

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

    徐不同UNNotificationRequest · UNUserNotificationCenter · 本地通知
  • iOS开发之iOS10推送必看(基础篇)

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

    徐不同iOS 10 · UserNotifications · 推送注册
  • iOS开发之封装一个自动归、解档的类

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

    WzxJiangNSCoding · WZXArchiver · 对象归档
  • iOS开发之Swift初体验PhotoKit

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

    大石头布PhotoKit · PHAsset · 照片多选
  • 谈谈MVVM和链式网络请求架构

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

    WzxJiangMVVM · ReactiveCocoa · ViewModel
  • iOS开发之AES+Base64数据混合加密与解密

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

    BisonAES · Base64 · CommonCrypto
  • 一步一步带你封装一个Swift本地缓存库

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

    大石头布Swift · 文件缓存 · 应用沙盒
  • iOS开发仿微信(WeChat)系列(六)

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

    WzxJiang键盘通知 · 即时通信 · 应用生命周期
  • 史上最全远程推送详解之极光推送

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

    WzxJiangAPNs · 极光推送 · 推送证书
  • iOS开发仿微信(WeChat)系列(五)

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

    WzxJiangAVUser · AVFile · 头像上传
  • iOS开发仿微信(WeChat)系列(四)

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

    WzxJiang仿微信 · 云端存储 · 用户登录
  • 也许你根本不需要Alamofire,何不尝试下NSURLSession?

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

    大石头布NSURLSession · NSURLSessionConfiguration · 下载任务
  • iOS开发之详解连连支付集成

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

    Bison连连支付 · 支付SDK · 服务端签名
  • 详解持久化Core Data框架的原理以及使用

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

    BisonCore Data · NSManagedObjectContext · 实体模型
  • Github源码推荐:(01.04):iOS开发蓝牙,启动动画,自定义Tabbar

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

    BisonBabyBluetooth · CoreBluetooth · CLClipImageView
  • iOS开发之OCR光学识别储蓄卡以及信用卡

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

    Bisoncard.io · OCR · 信用卡识别
  • Swift2.0后Alamofire的使用方法

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

    BisonSwift 2.0 · Alamofire · 网络请求
  • Bison教你3分钟集成支付宝好友分享

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

    Bison支付宝分享 · SocialSDK · URL Scheme
  • 一点一滴慢慢的揭开XMPP的神秘面纱

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

    BisonXMPP · Openfire · 即时通信
  • iOS开发获取通讯录并发短信给联系人

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

    Bison通讯录 · AddressBook · MessageUI

工程工具与发布

导读与完整目录
  • iOS开发之自动化测试的那些干货

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

    黄文臣XCTest · Quick · Nimble
  • iOS开发之Xcode8兼容适配iOS 10资料整理笔记

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

    判若两人丶iOS 10 · Xcode 8 · ATS
  • Xcode8开发iOS10推送通知过程

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

    zhao0iOS 10 · Xcode 8 · 通知扩展
  • iOS10新特性之SiriKit

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

    SindriSiriKit · Intents Extension · INExtension
  • iOS开发之诱导用户为自己的App评论

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

    BisonLBToAppStore · App Store · UIAlertController
  • iOS开发之Xcode测试苹果官方文档翻译(下)

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

    许漠颜代码覆盖率 · Xcode Server · 持续集成
  • iOS开发之Xcode测试苹果官方文档翻译(上)

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

    许漠颜XCTest · XCTestCase · 单元测试
  • 提交代码到CocoaPods看我就够了

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

    WzxJiangCocoaPods · podspec · trunk
  • SwiftGG交流分享Xcode开发使用技巧

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

    bestswifterXcode · 断点 · Quick Look
  • Xcode版本更新插件失灵批量解决法

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

    许漠颜Xcode插件 · DVTPlugInCompatibilityUUIDs · Info.plist
  • Apple Pay强势来袭,开发者应做的事情

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

    BisonApple Pay · Merchant ID · 支付请求
  • Biosn收集的Git常见的错误解决方式

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

    BisonGit · index.lock · push.default
  • Bison教你1分钟集成百度移动SSP启动广告

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

    Bison百度SSP · 开屏广告 · BaiduMobAdSplash
  • iOS开发之多国语言国际化经验浅谈

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

    Bison国际化 · 本地化 · 语言地区代码
  • iOS开发之检测设备锁屏

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

    Bison锁屏通知 · SpringBoard · CFNotificationCenter
  • 【iOS开发】打包静态库.a文件

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

    Bison静态库 · lipo · Xcode
  • iOS开发内购全套图文教程

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

    BisonStoreKit · IAP · 沙盒测试
  • 【iOS开发】iOS被拒解决方案--持续更新

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

    App Store · 应用审核 · 后台模式
  • iOS开发CocoaPods安装及使用

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

    BisonCocoaPods · Podfile · Ruby
  • iOS开发第三方登录没安装对应的APP时,图标禁止点击且颜色变灰

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

    第三方登录 · QQ · 微信

音视频开发

导读与完整目录
  • FFmpeg-iOS获取摄像头麦克风

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

    BisonFFmpeg · AVFoundation · 摄像头
  • FFmpeg-iOS推流器的简单封装

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

    BisonFFmpeg · nginx · RTMP
  • FFmpeg-iOS的H.264解码

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

    BisonFFmpeg · H.264 · avcodec
  • Mac编译ffmpeg获取FFmpeg-iOS

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

    BisonFFmpeg · gas-preprocessor · yasm
  • iOS开发之集成ijkplayer视频直播

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

    jianshu_wlijkplayer · FFmpeg · IJKMediaFramework

Web 与开发随笔

导读与完整目录
  • 微信小程序开发教程-从零开始(3)

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

    Bison微信小程序 · wx.request · setData
  • 微信小程序开发教程-从零开始(2)

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

    Bison微信小程序 · navigator · WXSS
  • 微信小程序开发教程-从零开始(1)

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

    Bison微信小程序 · WXML · WXSS
  • React Native在Mac上部署iOS开发环境

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

    BisonReact Native · Node.js · watchman
  • iOS开发之javaScript交互(JS调用原生的方法)

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

    SindriJavaScriptCore · JSContext · UIWebView
  • 菜鸟程序员2015年年终总结

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

    Bison开发者成长 · 技术博客 · Swift
  • Bison教你怎么让百度收录你的Github空间博客

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

    BisonGitHub Pages · GitCafe · SourceTree
  • 技术博客不仅仅只是一个网站,还可以这样玩........

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

    Bison个人博客 · UIWebView · 混合应用
  • UIWebView的使用与总结

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

    BisonUIWebView · JavaScript · 混合开发