组件化背景

随着移动互联网的迅猛发展,手机APP已经成为了与我们生活紧密关联的一部分,各种应用场景也都已经落地到了手机移动端,但这也使得APP的业务模块以及对应的代码量越来越繁多,旧的开发架构已经没法满足业务快速发展的需求,重构整合也就成为了不可避免的问题。

阅读全文 »

本文初次发表于OSCHINA iOS打包签名,你真的懂吗?

导语:iOS签名类型有Development、AD-Hoc、In-House、App Store,而打包过程中又涉及到各种证书、Provision Profile、entitlements、CertificateSigningRequest、p12、AppID……各种概念一大堆,本文将从打包签名的原理说起,并梳理完全签名的整体流程,最后讲解重签名的实现以及签名机制中有哪些是需要注意防护的要点。

阅读全文 »

需求:取消UIScrollView顶部下拉的弹簧效果,并且当滑动到顶部时scrollView禁止滑动,其他状态下可支持自由滑动。

借助 UIPanGestureRecognizer 可以实现这个控制 UIScrollView 的滑动方向的需求。

阅读全文 »

本文初次发表于InfoQ 深入理解 iOS 图文混排原理并自定义图文控件

iOS开发中一般用UILabel来展示文字、UIImageView用来显示图片、UIButton用于简单的图文点击响应事件,稍复杂一点的可以借助NSAttributedString来实现图文混排需求,又或者将图文内容转换为HTML由WKWebView(UIWebView)来展示。然而以上方案都有各自的局限性:UILabel绘制NSAttributedString不能灵活定位文本内的点击锚点区域,转换为HTML展示则带来Native与Web端交互成本以及WKWebView自身的性能问题。

那么,是否能有一种控件,在满足富文本图文混排的同时还能响应自定义锚点点击事件?要实现以上需求,我们首先从iOS图文展示原理说起。

阅读全文 »

iOS12很快就要发布,项目的坑都填好了吗?没有!那还不赶紧填……

info.plist文件重复

Xcode10编译提示Multiple commands produce 'xxx/Info.plist',这是由于项目中存在重复命名的info.plist文件。

解决方式:

阅读全文 »

一切得从上个版本的打包发布说起。

开发中本人负责了iOS包的版本发布工作。iOS打包:不就是选一下证书,再在Xcode上点几下按钮,IDE全都给你设置好流程了,有必要这么麻烦吗?

诚然,如果只是打包,在不考虑团队协同合作、打包效率、重复工作量的前提下,使用Xcode自带的打包方式当然是没问题的。但实际开发中,每次打包大概包含以下流程:
拉取最新代码(SVN或Git)编译通过设置打包环境(开发、测试、生产等)导出IPA包上传IPA包(App Store或者企业包上传至指定服务器)

阅读全文 »

导语:

CJMethodLog 对于Objective-C中的任意类、任意方法,均可实时根据用户的操作行为,监控还原对应的函数调用日志,而且能够自定义记录当前函数的参数类型、返回类型、执行时间……

CJMethodLog

上一篇介绍了 Runtime 原理
CJMethodLog(一)Runtime原理:从监控还原APP运行的每一行代码说起
这里就来讲讲 CJMethodLog 的具体实现。

阅读全文 »

导语:

CJMethodLog 对于Objective-C中的任意类、任意方法,均可实时根据用户的操作行为,监控还原对应的函数调用日志,而且能够自定义记录当前函数的参数类型、返回类型、执行时间……

背景说明

是否遇到过如此场景:对于项目中一些不是Crash的问题,由于缺乏log日志,排查起来很是麻烦;又或者对于一些特定设备、特定场景的问题,由于缺乏条件没法重现,最后只能不了了之。比如下面的例子:

阅读全文 »