iOS12 踩坑持续更新

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

info.plist文件重复

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

解决方式:

  1. xcworkspace项目: Xcode–File–Workspace Settings–Build System–Legacy Build System
  2. xcodeproj项目:Xcode–File–Project Settings–Build System–Legacy Build System

Read More

懒到极致之怒撸一键打包发布系统

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

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

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

Read More

CJMethodLog 二:从监控还原APP运行的每一行代码说起

导语:

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


CJMethodLog

上一篇介绍了 Runtime 原理
CJMethodLog(一)Runtime原理:从监控还原APP运行的每一行代码说起

这里就来讲讲 CJMethodLog 的具体实现。

CJMethodLogSource.png

Read More

CJMethodLog(一)Runtime原理:从监控还原APP运行的每一行代码说起

导语:

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

背景说明

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

你负责开发了一个考勤打卡页面。某天你正当心情愉悦哼着小曲开始一天工作时,产品经理突然闯入:又有用户反馈明明打了卡却提示旷工!并且那用户未能提供当时的操作记录,而且也无法再重现问题。无语的你只好再次默默过了一遍打卡代码,没有发现问题,然后求助后端同事查看接口调用日志,却发现该用户反馈问题的那一天根本就没有相关的接口调用记录……
——最后结论是用户当时忘打卡了(但其实你却不能十足确定打卡代码没有问题)

Read More

CJLabel第二章——图文混排及精确点击区域

相关文章介绍:

CJLabel第一章——富文本显示及任意链点点击

CJLabel第三章——支持任意区域点击响应和可选择复制原理

CJLabelV2.0.0版本之前,其图文显示是基于NSAttributedString来实现的,但有若干不足:

  1. 图片点击响应只支持emoji表情,对于NSAttributedString中通过NSTextAttachment添加的图片,无法响应点击。
  2. 点击链点的判断:核心方法是调用CTLineGetStringIndexForPosition()获取当前触摸点CGPoint在NSString中对应的index,再判断该index是否属于点击链点的NSRange。然而当文本中包含多个emoji表情时,CTLineGetStringIndexForPosition()的获取并不准确,特别是如果当前点击链点处在文本的最后一行时,存在较大的误差。
  3. 无法响应长按点击,另外点击链点不能设置点击高亮属性。

Read More

Node.js + apn 搭建APNS推送后台

本文重点关注的是APNS推送后台的搭建,不涉及推送证书Certificate 、Profiles 文件,iOS客户端推送代码的介绍。

需求背景

iOS开发,在接收到APNS推送消息后打开App,然后跳转到App内任意模块、或者打开webView页面、或者执行升级操作、或者跳转打开第三方应用;对于这样的需求,开发测试的时候需要频繁发送APNS推送,如果每次都让后台服务器的兄弟来配合测试,那肯定是心好累,最好的方案就是自己搭建服务,想怎么推就怎么推!!

Read More

Shell脚本——Xcode脚本打包

最近有好一段时间没有整理博客了,也不是因为忙,就是太懒。或者说程序员都自带懒属性😅,表现在对于一些机械性重复性的工作,宁愿一次性多花些精力去封装、去写出各种各样的工具来替自己干活,也不愿意多次重复劳动(就算那是很简单的工作)。这不,我结合最近的工作,研究着写了两份Shell脚本,一是关于Xcode脚本打包,还有一个是关于crash log解析(这个将在下一篇文章说明)。

Read More