iOS App 连续闪退时如何上报 crash 日志

为保障线上 App 的用户体验,我们一般都会对线上 App 的 crash 率做实时监控,一旦检测到 spike,可以即刻调查原因,但这一切的前提是 crash 日志能够准确上报。 crash 日志上报有两个难点: crash handler 安装之前的代码要绝对稳定 如果日志采集器还没成功启动就 crash 了,自然什么日志也无法采集到。这一点并没有太多技巧可...

iOS 程序员效率提升利器之 AppleScript

这篇文章和大家分享我平时工作时,用来提升效率的神器之一:AppleScript。 AppleScript 虽然是一种脚本语言,但在我看来是最接近自然语言和最不具备计算机特质的编程语言了。即使没有计算机基础,在阅读基础文档和几个样例脚本之后,马上就能动手写出实用的脚本工具。 我感觉很多使用 Mac 系统的同学可能都没意识到,与自己每天作伴的 Mac 系统上还有这么一个强大高效的脚本语言,可...

硅谷生活半年记

春节期间回了趟杭州,休了两个月的产假,后又赶回湾区开始上班。国内国外几次的切换,以及从生娃养娃工作的深度体验里,让我对两边的文化生活方面的差异有了更多感受。 从杭州小区楼下的蛋饼油条小店,到 Facebook 咖啡零食一应俱全的 Micro Kitchen,从建于九十年代绿树成荫斑驳老旧的楼房,到宽敞明亮错落有致的 Town House,从处处贴着二维码的移动支付,到刷信用卡返现的 Sho...

iOS 下如何一键调试 Push

来湾区工作的一项有趣之处,是可以和来自完全不同工程文化背景的程序员们碰撞交流,语言习惯,教育环境,思维模式,工程经验都存在不小的差异。来湾区半年有余,这段时间下来有一点我感受颇深,这边的程序员非常强调做一件事的效率。在遇到一个有挑战性的项目时,前期的设计讨论调整非常频繁以求最优路径抵达目标,平常做项目时,各个程序员都有自己的工具箱和小脚本来应付各类场景。目的是都花最少量的时间干最多的活,又或...

IM App 如何确保消息可靠抵达

IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多。这篇文章和大家聊下消息可靠抵达机制。 如何确保 IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标客户端,最终在 UI 成功展示,其间涉及的环节很多,这里只取其中一环「接收端如何确保消息不丢失」来探讨,粗略聊下我接触过的两种设计思路。 说到可靠抵达,第一反应会联想到 T...

iOS 代码使用 C++ 的 zero-cost abstraction 特性

不少 iOS 项目里都有 C++ 代码的痕迹,Objective-C 和 C++ 虽然都是 C 的 superset,但二者在语言特性上存在很大差异,Objective-C 的 runtime 使其语言的特性更丰富更易使用,但代价是会增加性能损耗以及编译后的 binary size。 很多成熟项目开发到一定阶段,会关注一些关键指标,比如 App size,现在超过 100 M 的 App ...

一些轻松好玩的英语学习辅助

来美之后,需要融入纯英文的生活和工作环境,融入的前提当然是扎实的英语基础。我自高中之后就没怎么正儿八经的学习过英语,都是零零散散的看些英文电影,不间断阅读些英文资料,勉强还维持着英语可用的水准。 不用说,刚来这边极度不适应,经常性听不懂别人说啥,也很难完整表达一个技术想法。这边老美陌生人之间还经常爱搭话,逛超市店员会问你是否需要帮助,吃饭服务员中途问你是否吃的满意,进电梯遇到陌生人也要偶尔...

2017 回顾

又到了年终盘点季,我的 17 年相较往年有很大不同。16 年忙着创业,埋头写代码,日子过的单调充实,当然也夹杂着对未来的种种担忧。到去年年底,心态发生转变,通过创业改变人生的激情逐步消退,家庭的责任感日益加重,方向开始朝着生活稳定性和未来的保障倾斜。用时下流行的话来说:再生猛的人生也有拿起保温杯的一天。 我在年末开始留意大公司的机会,决定将创业所投入的能量转移到更稳定可靠的职场里,看看自己...

iOS 代码里逻辑分支的处理

我们大致上可以将代码按执行方式分解为三类:Sequence,Selection,Iteration。 Sequence Sequence 即为按前后顺序依次执行,从第一行按序一直执行到第 n 行。比如: NSString *name = @"default"; //definition name = @"peak"; //assignment NSLog(@"name is %@", ...

iOS 代码的 taste(品味)

最近看了不少代码,想起写代码有意思的地方之一在于,实现同一个 feature,修复同一个 bug,不同程序员可以写出风格迥异的代码,甚至流程也不同,虽然最后都可行,从结果论的角度对用户来说是一致的。我们可以称这种差异为个人 taste,taste 有好坏高低之分,但有时候如何评定却很难有一个清晰准确的界定标准,一般来说代码是越简单越清晰越容易测试越好,但简单清晰容易测试又是另一个维度的标准,...

湾区一月见闻

从上次更新到今天在湾区一切基本布置妥当,已整整过去一个月。这一个月熟悉新环境的过程中,无论是生活还是工作上,都有颇多感触,终于能抽空提笔做点记录。 出发前就被朋友打过预防针,在国内的城市里生活久了,习惯了高楼商场和便捷的生活服务,一旦出国大多数时候都会有下乡的感觉。 入关 下飞机入海关那一刻我就明白此言不虚。湾区有好几个机场,我选择的旧金山机场显得十分老旧,过道狭小,硬件设施普遍具备年...

Facebook 之行,新的远方

下周即将离开生活了十三年之久的杭州,前往硅谷,成为 Facebook 的一员。 我曾假想过为了换工作,去新城市生活的各种可能场景,会是在上海、深圳或者广州?试想着各种融入新环境所带来的改变,唯独没想到这次会漂洋过海跑得这么远,去到一个这么陌生的地方,人生的际遇有时候当真难以预料。 从去年 10 月份收到 HR 的面试邀请邮件,到可以正式加入新公司,整整耗时一年,这恐怕是我有生之年历时最长...

有备者无患,徐徐以图之

我的第一份工作开始于 2008 年,作为 .NET 开发工程师加入了一家外企。当时主要使用 C# 做为后台语言,Javascript 写一些前端逻辑,JQuery 那时处于绝对的统治者地位,面试的时候还很流行问 Gang of Four 的设计者模式。一晃近十年过去,现在回想起来,刚参加工作的新鲜感还犹在昨日,但一些技术名词却显得久远而有年代感了。 大概在 09 年左右,我印象十分深刻,那...

进入新团队准备工作

程序员是个相对跳槽率相对较高的职业,虽然不鼓励频繁换工作(伤简历,HR 对这点很敏感),但要在同一家公司呆五年以上确实很难,总有各式各样的原因催促我们寻找新的环境。一旦进入新环境,作为技术人员需要从多方面调整自己,以求尽快适应,在短时间内让自己进入最高效的工作状态。 以我的经历,融入新环境大致可以从两方面入手,人与事,一半一半。 事 事,工程项目的方方面面都相关。 进入团队的第一件事...

iOS 端定位「网络问题」

作为客户端开发者,如果你的 App 中有图片上传功能,而且某天测试人员拿着手机告诉你图片总是上传不上去,或者进度条走的很慢,你的第一反应很有可能是「网络不好?」。网络到底是个什么概念,网速为什么会不好,如何预估当前网速是否合理,分析这类问题,背后需要建立全面且广阔的技术视野。 无论是上行数据通道(数据从客户端发往服务器)还是下行通道(数据从服务器发回客户端),一次完整的网络行为(比如 HT...

自律以自救

在一次逻辑思维的跨年晚会上,罗胖曾以「帝王」来形容活在当下移动互联网世界的人们。一个手机 App 可以让你足不出户,享受上百名厨师团队的服务,中饭想吃啥菜式、样品,输入框中一应俱全,光论规格,可能已超过帝王的御膳房。 我老婆曾在经历一周的忙碌疲惫之后,一脸自豪的跟我说,她可以周末在家御宅一整天,走动不超过一百步,完成所有日常行为。这一点也不夸张,早饭,中饭,新鲜水果,下午茶,晚饭,打扫卫生...

iOS 真机访问 sandbox 目录的各种姿势

我一直知道,要做成同一件事,程序员们的方式往往五花八门。所以这次就一个问题在微博上征集答案,果然得到了许多不同方案,和大家分享下。 平常调试一直有看日志的需要,我们一般将日志文件存放在 sandbox 的 Document 目录下,之前我如果要查看某台设备上的日志,一般是按如下两种方式: 方式一:使用 iTools,Mac 端的 iTools 可以访问真机 App 的完整目录,虽然 iO...

iOS weak 关键字漫谈

weak 关键字的运用在 iOS 当中属于基础知识,在面试的时候问 weak 的用处,就像两个 iOS 程序员见面寒暄问候一样普通了。 weak 的常见场景是在 delegate,block,NSTimer 中使用,以避免循环引用所带来的内存泄漏,这是教科书式的用法。 编程语言是工具,语言特性只是工具的特性,工具怎么用在于使用者。weak 关键字的方便之处绝不局限于避免循环引用,适当脑洞...

懒惰三问

在偷懒这件事上,我们人类是绝不会偷懒的。 我时常在想,为什么懒惰会是我们的天性,为何造物主会将其编入我们的基因序列。如果人人都勤快些,都乐于强健体魄,忙于学习工作,精于发明创造,那么建设社会主义的砖瓦早就多到有剩,民族复兴可能也已完成 99.99%。从生物学的角度来说,知冷畏热,趋利避害,这都是为了提高个体的生存几率,但勤劳能有什么危害呢?为什么大脑总是会想方设法阻止我们长时间的思考或者劳...

WWDC 2017 iOS11 新特性 Drag and Drop 解析

WWDC 2017 刚结束,虽然如预期的一样,缺少意料之外的惊喜,但依旧有不少新的特性和 API 值得圈点。抛开 Core ML 以及 ARKit 这些影响深远的亮点不谈,目前抢眼的系统升级,莫过于 UIKit 中新增的 Drag and Drop 特性了。 拖拽的意义 在阅读本文之前,建议读者先亲手把玩下 Drag and Drop 的各种姿势,有过实际的操作体验,才能更好的明白一些 ...

Hosted by Coding Pages