iOS持续集成记(iOS+Jenkins+Cocoapods+蒲公英)
iOS持续集成记(iOS+Jenkins+Cocoapods+蒲公英)
原来我们iOS项目是有持续集成环境的,但是有一次升级系统还是升级xcode后,Jenkins就打不出可用的安装包了。原来负责整个打包机的同事又离职了,有一段时间我们都是手动打包给QA同事安装测试,现在领导要求必须把持续集成环境弄好,我们花了大约两周才基本弄好整个持续集成环境,现在把我整个过程中遇到的坑记录一下。
重装系统
打包机自从某一次升级系统之后就变得非常慢,打个包需要1个小时左右,简直要命。所以新的环境必须要建立在重装后的系统上。因为要格式化硬盘,所以要制作系统启动盘,这个网上也有不少教程,这里有个需要注意的,下载macOS系统时,一定要从官方下载。我一开始是自己在百度云上下的,制作好安装盘后重启电脑,并且将硬盘格式化后安装系统,发现验证不通过,好在另外一个同事在官网下了一个,我在它的电脑上重新制作了一次安装盘。假设你只要一台Mac电脑,遇到这种情况你就悲剧了。
git拉取代码的坑
系统装好了,Jenkins也装好了,然后配置拉去代码,可是代码死活拉不下来,为此我的同事搞了差不多一天,试了各种方法,也搞不下来代码,都是在一半的时候失败了。后来我也去弄了半天,同样的错误。主要原因可能是代码量太大了,因为其他的小工程可以git clone 下来。我突然想到换一下拉取协议试试,不采用HTTP方式,而是采用git ...
comments
Read More
打印杨辉三角--编程算法系列之一
前言
算法是程序员从职业开始到职业结束,估计都是绕不开的话题。所有大公司技术面试都会考算法题,不管国内国外。我一直想非得这样算法吗,没有别的更好的考察方式吗?有没有算法不行但是写程序很厉害的人?我没有答案。也许算法确实比较好的考察方法,如果你确实是个聪明人,你应该克服算法不行的问题。运用算法解决某些问题,或者编写程序去实现某个算法,对程序员是一个重要的能力。所以我要锻炼自己拥有这个能力。我准备将我以前遇到的一些面试题目,真正的完全靠自己去实现,并记录下来。
杨辉三角
如果你听说过杨辉三角,但是又不记得具体是什么规格,那你跟当年的我一样。大概一两年前,X公司某个项目招人,他们的HR找到我让我去试试,当时我想试试也无妨。前面的一,二技术面试都没太多问题,他们问的都是工作中的技术,后来有一面只面了我纯算法问题,就是打印杨辉三角,我一下懵了,结果是死得很难看。
先看看杨辉三角的数字排列是怎样的:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1 ...
comments
Read More
浅谈VR
浅谈VR
最近VR火得不行,就连央视财经也有报道说“4年后VR市场规模高达550亿元!人才缺口达80万”。然后刚刚结束的高考,某一个省份的语文作文题也是跟VR相关。所以说,VR是今后几年最热门的一个话题和技术之一,没有人会反对。
VR, 是Virtual Reality的缩写,即虚拟现实,它其实不是最近新的技术,它只是因为移动互联网的兴起而变得热门起来。我记得真正被全世界人认识和讨论的触发事件是Facebook发重金收购了Oculus VR公司。而除了VR,实际上还有另外一个相近技术AR. AR是Augmented Reality缩写,即增强现实。AR跟VR有挺大不同的,我现在研究得也不多,以后有机会我也想写一下AR相关的文字。
VR的应用
前几天我配老婆去海雅缤纷城逛街,然后发现那里有一个VR体验区,主要是VR电影和游戏结合的项目,还有一个是VR自行车。我体验了一下一个叫《地城游记》的游戏,感觉还可以。它主要是你坐在一个机器上,带上头盔,手可以握着一个杆,杆上有个按键,游戏中你可以按那个键来进行射击怪物。你坐在机器上,机器会根据游戏来进行晃动,例如我体验的是坐着过山车,它就会根据过山车来进行晃动,模拟你看到场景,就好像你真的在坐过山车一样。游戏中会有一些蝙蝠或者龙飞在你前面,然后有声音提示你射击它,你就会知道按那个键 ...
comments
Read More
关于H5和移动客户端开发的未来
关于H5和移动客户端开发的未来
从去年开始,我已经强烈感觉到移动端web开发的时候可能即将带来。我想为了避免以后找不到工作,我们客户端开发人员不得不开始学习移动端web开发或者混合开发。
近一两年来,前端开发真的非常火,招不到人。就像前几年的移动客户端开发人才很热门一样。这不得不说得益于移动互联网快速的发展。web确实有它不可替代的好处,快速迭代和开发,不局限与特定平台,这是APP无法做到的。近来APP的开发趋近稳定饱和,而手机的处理能力越来越强,浏览器厂商也支持HTML5越来越完善,移动web开发必然崛起。现在H5已经成了所有技术小白人士都懂的一个词,这足以说明移动web开发已经到来。
我与H5的故事
HTML5技术早就开始了,但是一直没有完全普及,最近两年才真正的普及起来,H5也成了它的缩写代名词。早在2010我做毕业设计的时候,我就有研究过它。那是HTML5标准已经制定完毕,浏览器厂商已经开始慢慢的支持。我当时开始学习web开发,学习了JavaScript,学习了HTML,学习了CSS。我的毕业设计题目是《基于Google APP Engine 系统的web开发》当时GAE刚发布不久,然后我还采用了当时Google Web Tookit框架来开发我将要做的web即时通讯系统。当时Google还没推出中国,谷歌的各种服务都还在(只有一些些东西需要翻墙)。我用GWT开发我的即时通讯系统,用Google搜索资料和参与Google group讨论和学习,那真是一段充实的时光。那是我了解到ajax技术 ...
comments
Read More
生活琐事
生活杂谈
最近好长时间没有写博客了,貌似差不多一年了。竟然想不到是那么久没有写过东西。
去年年底买了车,现在也差不多要领结婚证了,时间的脚步根本停不下来,一眨眼该来的基本上都要来了。
技术上没有太大的长进,也还有没得到有效的晋升,不过心没有太大的彷徨,因为已经麻木了吗?
不过我还是一直想提升能力的,不管是技术上的,还是工作上的,生活上的。人的生活不单单是工作和技术,还有很多以外的东西。要在这个世界上好好的生活,需要掌握很多方面的能力,要接触很多的东西。
我们要抱以开放的心态 接受和学习 生活中的方方面面,去掉浮躁,最终才能成功。
技术也一样。
comments
Read More
同一个应用的安卓版本和iOS版本开发杂谈
同一个应用的安卓版本和iOS版本开发杂谈
我前段时间帮朋友做了一个应用,当然说的更实在一点可以时候就是做外包应用,包括安卓版本和iOS版本。现在想谈一谈感想和总结。
从1月份开始正式开发,最终在5月底完成所有交互,前后算起来就5个月的时间,当然中间有断断续续的开发和沟通。总的来说,这个时间超出了我的预期,所以总得来说我觉得价格有点不合适,稍微便宜了一些。但是因为这是我第一次做这种事情,而且也总体也还在我可接受的范围内,所以就当做一个经验了。个人做外包开发 不能低估工作量和沟通时间。越不正式的外包(朋友间的)需要的沟通和反复修改的情况会越多。千万不要低估这些情况。
Android版本开发
我是先开发安卓版本的,原因当然是安卓开发调试方便,修改方便,还有就是我比较熟悉Android开发。一开始朋友想先开发iPhone版本,我说这个调试不方便,说服他先开发安卓版本,我觉得我这个决策是对的。我的开发主要时间都是周末或者平时的空闲时间。了解了需求之后,安卓的第一个包含主要功能的初级版本一个月之后就出来了。然后我就打了个包给朋友用。当然会有很多问题,然后反复沟通和修改,几个星期之后,主要版本出来了。这时候已经是2月多了,我记得是在我放春节假之前改了改了一个版本给他,这个版本做了一些小细节修改和bug修复。由于朋友他没有测试人员,只能靠他自己测试,我自己测试得也不多,开始难免会有些bug,不过他会集中反馈,然后我集中修改,年后回来又改了一两个版本,3月多终于基本完成安卓版本的开发 ...
comments
Read More
iOS系统相册上传不得不说的那些事儿
最近在开发手机相册自动备份的功能,这就需要用到上传文件的功能。
其实我一年前也做过同样的功能,当时也做得不算很好。这次是别人做了,然后那人离职了。我来接受这块,然后发现有问题,然后准备认真的研究一下这个问题,顺便学习更多的iOS开发的知识。
系统相册概述
首先说一下iOS相册的问题。iOS的相片都是存放在系统库ALAssetLibrary中,开发者从这个库中读取到的是一个个ALAsset对象,而不是一个文件系统的File文件。当然iOS8系统新增了Photo Framework,但是只是增强了相关功能,还是不能直接取到File。 这个Android平台或者PC平台很不一样的。
我们知道一般的上传文件流程就是,将本地的文件转换为二进制数据或流,通过HTTP协议或者socket协议,本地和服务器之间建立一个连接,本地将流写入这个连接,服务器那边接收这个流,并将接收到的流写入文件,直接客户端那边将整个文件传完,传输就结束了。上传文件这个过程一般会被封装库,使用者只需传入必要的参数就可以了。我以前做自动备份相册的时候,就是使用了别人提供的静态库,它上传文件API就是需要传一个文件的本地路径。这就麻烦了,因为我们的应用从iOS系统库读取到的对象是ALAsset, 所以我需要先将ALAsset从系统中导出,写入我们应用的沙盒中,然后再把它在沙盒中路径传给上传库进行上传。
导出ALAsset
据我所知,iOS系统cocoa层网络传输基本上只有NSURLConnection和基于NSURLSession一套API。它们提供的接口基本上都是基于NSData,或者文件路径或者NSInputStream。网上有很多库或者框架都是基于这两套API来做上传,我们一般也使用第三方的框架来减少工作量 ...
comments
Read More
Android下载器开发
Android下载器开发
最近因为项目需要,我开发了一个Android下载管理器,我觉得很有必要记录一下,谈谈我是怎么开发的,遇到了什么问题以及如何解决的。算是一个总结吧。
需求分析
我们项目包含了一个功能:将文件下载手机上,并且要支持断点下载,因为我们下载的文件主要是图片和视频,其中视频基本上都是大文件,然后下载可能随时会被中断,所以首要一点就是要支持断点续传,然后要支持任务管理,例如暂停下载和继续下载,再然后就是要下载速度尽量快。不过这最后一点估计所有人都会这样要求。
为什么要自己开发
需求已经较清楚了,然后再看怎么实现。一般来说,像下载这么通用的功能,因为很多开源库可用才对。不过在开始之前我要说明一下,这个功能一开始不是我做的,是另外一个同事负责的,但是他离职了,我来接手。问题在于他离职之前这个功能算是实现了,但是很多问题,例如断点续传有问题,任务管理有问题,下载速度很慢。我接手之后,我特意去网上查找了有没有可用的较好的开源库。经过一轮搜索之后,我发现,很多博客上介绍的下载都是同一下载,就是黎活明老师的下载,估计这个下载是他讲课的案例,主要特点是多线程断点下载。而我们之前那个同事的实现就是把网上的例子弄来的。他这个下载确实还可以,支持断点下载,还支持多线程分片下载来提高下载速度。不足之处就是不支持任务管理,还有数据库很容易出现多线程问题。也就是说核心的东西它有了 ...
comments
Read More
再谈iOS开发和Android开发之间的切换
再谈iOS开发和Android开发之间的切换
由于项目变化的原因,Android开发增加了很多人手,而iOS开发团队又被调走,只留下了两个人。所以iOS开发负责人找我谈话希望我过去帮忙做iOS。出于对项目整体进度而言,我去帮忙iOS开发是最好的。我可以在iOS和Android开发之间随意切换,而Android开发确实有点多人,iOS人手严重不足,招人很难,其他人转iOS开发也需要时间,所以我就答应了。
说起我的Android和开发经历,真是很多感概。从我决定离开第一家做芯片的公司开始,我就想进入iOS开发或者Android开发。其实我最开始是想做iOS开发的,但是当时很难找,我不但没有经验,还是从一家芯片公司刚跳出来(虽然我是软件工程专业出身,但是一开始却进入了芯片行业,说多了都是泪)。最终一家小公司接受了我做Android开发,那时候是2011年初。但是做了大半年多的Android开发之后,公司发现Android很难赚钱,就想转做iOS开发,因为它的生态环境好。开始是我们老大去做,但是他搞了半天还没搞出个helloworld列子,所以就让我去做了。由于我大学的时候就学过Object-C,也接触Object-C开发,所以很快就上手了。再后来,苦于小公司技术进步慢,就跳槽来了现在的X公司。
我是以Android技术面进入X公司的,但是进来之后,我的老大跟我说,你想做Android还是iOS开发,因为我本身也在做iOS开发,也像往这个方向,就选了iOS开发。那个时候,项目采用的方式全编码方式,没有用xib ...
comments
Read More
Android图片缓存和相关开源项目
Android图片缓存和相关开源项目
现在几乎所有大一点的Android项目都会用到图片缓存。而Android应用的内存占用大户就是图片,几乎所有内存问题都会涉及到图片问题,而已图片为主的应用也会涉及到性能问题。我觉得每一个资深的Android工程师都要对图片缓存技术有所了解,并且有自己想法。图片缓存是在面试别人时必问的问题。
图片缓存可以分为两点:内存缓存和磁盘缓存,当然还有必然要涉及的图片解码,图片下载,这里主要讲讲内存缓存和磁盘缓存,附带说一下图片解码和下载。
内存缓存
由于一张图片基本上会被重用或者在多个界面显示,而图片的下载和解码都是比较耗时的动作,要给用户比较好的体验,将一张图片缓存在内存中就尤为必要。如果一个应用图片比较多,要将所有图片都缓存在内存中显然不现实,特别是比较低端的机器上,内存非常有限。所以这个内存缓存必然有所限制,那么问题来了,缓存池设置多大,并且满了之后怎么处理成了要点。我们知道Android系统中给每个应用设置了最大堆,超出了这个最大堆限制就会报OutOfMemory错误。所以一般就是根据这个最大堆来设置图片缓存池的大小,业内普遍做法是取最大堆内存的8分之一,这个经验值,我觉得可以应用情况做调整。而缓存池满了之后该又要加入新的图片,怎么对已在池中的图片移除,有很多方法。最常用的是LRU(least recently used)算法。我一般会问面试者这个算法是怎么实现的,看过代码的人或者算法学得比较好的人就能答出。还有用的比较多大算法是使用频率算法,移除最大图片算法等。然而我认为比较好的内存缓存技术还应结合弱引用来用。这里涉及到什么事强引用,软引用和弱引用也是我必考项。为什么还要结合弱引用来使用比较好呢?如果一个应用要显示的图片比较多 ...
comments
Read More