iOS
本周第一个任务是给一个一年多没有更新的iOS包加点小功能,功能很快加好了,测完时发现在iPhone X上会跪,我的iPhone6上正常,经调试发现是有一句话有问题。
NSInteger pos = [param indexOfString:@"()"]indexOfString是NSString的category扩展方法。某些时候param的值为nil,在iPhone X(iOS12)上就会跪,按理说给nil发送消息是没问题的,查了下资料似乎跟指针有关系,时间有限,加了个保护,具体原因没有深究。
在iTunesconnect提审时提示屏幕快照有缺失,一看只传了5.5英寸版本,需要补6.2英寸和12.9英寸,不知道是以前只需要5.5英寸,还是中间有人修改了配置没有传完整。于是找设计师出图,给设计师发了现有的图和需要的新尺寸,等设计师发回设计稿后,上传时提示图片不能有透明通道,原来设计师自己加戏做了下设计优化,给图片加了圆角,圆角之外是透明的。结果只能打回重新做,估计设计师也在吐血。
Java
有一个需求是给APP的新用户送优惠券,当用户完成了某任务时就可以激活券,然后在发生交易时使用券。一开始接到这个需求以为很简单,做的时候才发现有问题,问题在这个券是支持未登录时下发,需要解决登录同步问题,整体流程如下:

由于任务是否完成也是依赖于设备的,所以设计成了只有完成任务激活券之后才考虑同步到用户账号,这样做的问题是如果已登录用户中途更换了设备,可能导致任务重新计算,也可能换了台老设备根本无法领到券,从用户的角度是无法理解的。
前端
前端小朋友遇到一个问题搞不定,只能我来帮忙调试,部署遇到了问题。前端工程使用webpack构建,测试环境部署需要运行一个npm插件,插件在本地编译指定模块后通过ftp上传文件到测试服务器,再执行远程命令重启pm2。问题就出在插件内部执行时需要设置环境变量,然而之前的开发写死了用set设置,导致在Mac上无法正常运行。
解决的方法有两个,一是手动判断环境,根据Windows和Mac(或者类Unix)使用不同的语句:
// 这里判断Windows并不准确,推荐使用is-windows插件
let isWindows = os.platform() == 'win32';if (isWindows) { cmdSetEnv = 'set MY_ENV=**';} else { cmdSetEnv = "export MY_ENV=**";}另一个方法是使用cross-env插件:
cmdSetEnv = "cross-env MY_ENV=**";Git
某个APP临时要增加一些渠道进行投放,负责的同事不在,于是又轮到我了。增加渠道很简单,构建时发现这个项目是通过tag进行构建,而我竟然没有使用过Git的tag,赶紧补习。
# 列出现有标签
git tag
# 打轻量级标签
git tag tagName
# 打含附注标签
git tag -a tagName -m 'my annotation'
# 查看标签信息
git show tagNameGit里的tag分为轻量级(lightweight)和含附注(annotated)两种,轻量级标签就是一个指向特定提交的引用,含附注标签实际上是存储在仓库中的一个独立对象,有自身的校验和信息。
end