遊戲/程序/更新/二次開發/小作品相關發佈
Dec 3
什么是Sketch插件,从sketch的plugins菜单点开你就可以看到了。进入manage plugins...点击get plugins...,你就可以看到官网上数以吨计的解决各种各样问题的sketch插件。理论上到这一步我们就没问题了,不过正好,当前我手下的case,由于ui和项目架构的规范要求,还真没插件可以帮我做这事儿,所以我们开细看sketch插件。

它是怎么实现的。sketch插件开发主要使用的是一门冷门的脚本语言cocoaScript(https://github.com/ccgus/CocoaScript),这是某知名开源作者搞的让js和oc混写来编写cocoa应用程序的脚本语言,不过看git上的记录的话,34年前就已经凉了,而且从搜索结果上看,基本上除了sketch插件就没有大型软件或者框架在使用这门脚本语言了。因此,相对的参考资料比较少,这是接下来有各自坑的主要原因。
Sep 21
从js的canvas开始展开,我们知道js的canvas中对图像的变换是非常有限的,移动旋转缩放,本质上是一个二维的变换矩阵,即transform方法对应的功能,对应的是a,b,c,d,e,f,0,0,1的矩阵,其实这也不是完全的二维变换矩阵,完整的参看这里。而同理,3d的变换矩阵,参看这里,canvas显然是不支持的,不止是js的canvas,大部分ui的framework的canvas都不支持3d变换的,毕竟实际贴图cpu计算图像拉伸成本太高。
Aug 24
oc里面和集合类型数据最常用的语法,是数组的[1],字典的[@"key"]和大部分字典和集合类型都可以用的forin循环。这种语法在实战中确实很方便,那么我们自己编写的类型也可以使用这样的语法来方便实际开发过程。查询官方文档后,明显前两个的Subscript语法和forin语法可以分为这两类。
Aug 6
自从有了cocoapods这种现代的xcode项目依赖管理工具,我们就很少使用传统的xcode提供的子项目+gitsubmodule的依赖管理模式了。不过这并不是意味着子项目这种项目结构就已经用不上了,在复杂的项目关系中,我们同样可以通过子项目的形式来梳理多层项目关系,来同时避免通过cocoapods来组织项目结构带来的复杂性。
Jul 10
大家都知道,在java等一些语言中我们可以通过一个@xxxx(aaaa)的形式的语法来装饰我们的类属性方法等一切物体,而oc里面并没有这样的东西。而某一些场景下,为了方便的提供微服务,比如反转注入相关的功能实现,注解是最直接方便的内容注册方式。比如这次我想模仿spring的controller对路由进行内容分发,注解当然也是不二之选。因此,我们尝试在oc中实现注解一样的东西。

首先帖一段最终实现的效果(路由注册和分发):
Jul 5
Homekit是啥,它是苹果公司发起的一个物联网智能家居平台,支持Homekit的智能家居可以通过苹果的设备进行控制和统一管理。当然,世界上并不缺乏类似的智能家居中枢,小米的全家桶,飞利浦的Hue都是这样的东西。但是不一样的是,它们大多数是app或者rom级的中枢,而苹果提供的是手机系统级的,当ios10第一次把“家庭”这个系统应用介绍给用户时,也就把自家的Homekit同时铺到了千家万户。
而更好的消息是,在Homekit核心,也就是智能硬件开发上,从今年wwdc开始,苹果正式对普通开发者开放了Homekit的硬件开发文档(虽然并没有sdk或者现成的代码),在这里可以下载到6月刚出炉的新鲜的HomeKit Accessory Protocol Specification的pdf。因此,现在切入Homekit是一个绝佳的机会。
Jun 11
上一回讲到在客户端中主流的静态图片资源PNG的使用情况与压缩方式。当然啦,PNG这种前端各方面都广泛支持,并且大家都使用得很满意的格式,大家都很喜欢很愉快的使用啦。而对于稍微没那么常用的动态图片资源,虽然主流的是gif,然而由于各种条件限制大家都使用得特别不开心,各自都在提出新的解决方案。

现在,除了gif,还有继承于png的apng,这也是我比较喜欢的,png的兄弟mng,还有webp的高级版本也支持动图。在这么多方案中,虽然自己都说自己好,不过我站我的APNG还是需要充足的理由,因此接下来由APNG展开讲讲各大客户端动图策略的异同和对比。
Jun 2
在前端和App,现在最常用的图片资源文件,不用想肯定是PNG了。而作为客户端优化的重头戏,压缩PNG资源大小总是我们最关心的东西。有这么一个网站,tinypng,是现在主流压缩png的工具/服务中压缩率最高的没有之一,大家都很喜欢它。不过不开心的是,这个网站提供的是在线服务(虽然有接口访问)并且量大是要收费的。因此,我们需要寻求一个自己适用的PNG压缩方案,就算无法实现,也能对相关内容有更深入的了解。

PNG的构成
Apr 26
背景

1. 在现在业务场景下,应用需要进行复杂的统计操作,其中涉及到复杂的页面数据来源追踪和储存关联上报。
2. 已拥有基本的第三方统计sdk,需要对它进行再次封装才能实现需求。

统计模块实现

由于需要重新封装统计模块,因此需要按需求进行多层抽象。
Mar 19
对于已经获得的crash堆栈,无论是否可以通过符号表获得代码实际情况,只要我们没发看到确切的代码,都是无法直接通过crash栈直接进行分析。特别是遇到整个crash堆栈里面完全没有自己项目的代码,或者虽然是我们的项目名下的堆栈,却是通过pod引入的第三方库。更现实的是,为了加速代码编译或者开发者干脆就是闭源的,往往pod引入的库都是二进制的静态库,所以我们得到的堆栈肯定没有具体代码行数,看到堆栈肯定是无计可施。

遇到这样的情况,我们看到的堆栈往往是:0x100072ea4 0x100050000 + 143012这样只会有堆栈指令的pc位置或者方法名 + offset显示出来的pc位置,而不是。这样我们需要分析代码,只有通过分析具体的汇编指令才能继续下去。
而Hopper这个iOS查看和半反编译工具正适合这件事。