2017年
2017年
中国人主要过农历年,农历年过后才真正算新的一年。2017年对于我自己来说有点不一样。2017年我压力会很大,也很焦虑。
2017年我工作即将满7年,想不到这么快就7年了。自己仍然没有什么成就,当然焦虑了。并且已经成家,生活压力会更大。还有考虑以后孩子之类,有时候会觉得自己没有准备好,可是自己已经不年轻了。
2017年我自己也给自己制定了一些目标,目标不多。但是实现起来比较难,但也无法让步。
2017年有一件事自己很想做,就是自己做一个产品,这个产品专门解决一个事情。我很想做好它,从后台,到客户端,到产品规划,一条龙。算是锻炼自己。
2017年我希望工作上有所突破,虽然有很多变数和不确定性。不管怎样,我做事会更加努力,我要对自己负责,对别人负责。
2017年,我认识到也许自己无法达到自己理想的那种高度,但是我还是很想突破自己,不愿意就这么认命。
加油
comments
Read More
2016年总结
2016年总结
生活
今年最大的事情应该是领证结婚了,虽然暂时没有摆酒,但是拍婚纱照,度蜜月这些都做了。房子还没买,一直纠结在深圳买还是东莞买,但是最大的问题还是没有钱。房子是个大问题,我们这一代很多人都基本被房子给绑死了。这也许是我们这代人的悲哀。
人结婚以后心态变了很多,很多事情不能只想自己,也不能想眼前。很多不好的习惯(例如晚睡),不成熟的想法都得摒弃。考虑更多的是家庭,老婆。今年的开销也变得大很多,挣钱的压力也大。婚姻是两个家庭的事情,不只是两个人的事情,这个结婚后就很明显了。我的家庭并不是很好,并且我妈那个病是个负担,每到年底就会发作,这对我和我老婆影响很大,对我们整个家庭都影响很大。可这就是我的家庭,必须得面对,还要安抚我老婆的情绪,我也得担起这个责任。这就是生活。
工作
这一年的工作并不顺利,可以说比较失败。下半年有尝试看外面的一些机会,但是一直不顺利,没有拿到好的结果。这一度让我很焦虑。这也让我认识到自己的不足。
一年来,项目很不顺利。下半年,来了新老板,然后把我们老大给挤走了,虽然最终他还是留在XL,但是已经跟我们的项目没关系了 ...
comments
Read More
iOS后台下载和断点续传
iOS后台下载和断点续传
最近在重新整理我们项目里的iOS的后台下载,因为原来方法(ASIHTTPRequest方式)无法做到后台一直下载,这个问题被我老婆吐槽了好几次。所以我重新整理一下,用NSURLSession来下载,达到了比较好的效果。现在总结自己的一些经验。
背景
项目最开始我们是用了NSURLSession来做后台下载的。但是有两个严重的问题
- 有时候偶现的不能下载,就是一启动下载就失败。一旦出现这种情况,无法恢复,怎么样都无法下载,所有任务都一样
- 下载速度很慢,只有几十到几百KB/S,网络正常,Android端同一个文件下载速度飞快
- 程序杀掉之后无法重新继续下载
按道理这些问题都不应该出现,可是我们的应用就是出现了这些问题,而且难以调试,同事调试了很久都没有结果。最后我也没认真研究,但是我发现ASIHTTPRequest可以很好地解决上面的几个问题,然后我就在原来的基础上加了ASIHTTPRequest的下载方式。
ASIHTTPRequest方式的下载不错,速度很快,也能很好的断点续传,但是跟Android的还是慢了一点,不过我觉得这可能是系统不同的原因。ASIHTTPRequest还有一个比较致命的弱点,就是不能后台下载,这对于下载大文件来说是必须的。在iOS平台要做后台下载,最好的方式还是使用NSURLSession。
所以我决定好好研究一下NSURLSession,并且改用这种方式。
NSURLSession后台下载
实际上NSURLSession的后台下载真的很强大,苹果真做了件很好的事。当你创建一个后台下载任务的时候,实际上你就把这个下载交给系统来接管了。所以即使你把APP杀掉 ...
comments
Read More
事件循环机制之于Android的Looper和iOS的NSRunLoop
事件循环机制之于Android的Looper和iOS的NSRunLoop
Android和iOS同为手机操作系统,有很多相同之处。有很多设计几乎是一样的,统一种设计模式,不同的实现。例如事件模型,它大体逻辑是这样的:
function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}
对于这样的一种模式, Android系统和iOS系统是一样的,只不过是不同的平台不同的实现方式。应该说很多平台或者框架都是采用这一种模式。Android系统对应的就是Looper机制,iOS对应的就是NSRunLoop机制。你看名字都是loop,这是它的核心。
对于移动开发者来说,理解平台是怎么实现这个事件循环机制,或者叫消息机制,是很重要的。因为在你的开发工作当中,无时无刻不在用着这种机制。不理解它的机制,充其量也只能算个初级程序员,无法深入理解系统。如果我们能了解不同平台对这一机制的实现,可以加深理解,可以提高自己。我既做过Android开发,也研究过它Looper机制。现在做iOS开发都有一段时间了,最近开研究它的NSRunLoop机制。我发现他们整体的设计思想确实一致的,但是不同的平台却也有很多差异性。
共同的设计点
首先loop跟线程是一一对应的,这是基础。然后iOS或者Android都是一个应用一个进程 ...
comments
Read More
iOS直接上传系统照片和视频(ALAsset)
iOS直接上传系统照片和视频(ALAsset)
我之前有一篇文章里讲过上传系统照片和视频的事(iOS系统相册上传不得不说的那些事儿),需要将ALAsset从系统相册里导出到沙盒文件里,然后再将这个文件上传。这里需要无端端写一次文件的时间就不说了,最要命的是还要占据额外的磁盘空间。我们的用户一般要备份相片视频的时候,往往是手机空间不足的时候。这个时候存储空间很紧张,你备份还需要额外的空间。如果一个视频很大,例如2G,那么手机上需要有空闲的2G空间才能导出视频,才能备份。真是硬伤。
这个问题一直在我心头,卡了我很久,之前我有网上找解决方法,没有找到,很多都是说将ALAsset导出文件到沙盒的事。我自己也有想过要怎么解决。我想过从ALAsset中读取一段一段的NSData数据,然后分别将这些数据上传。这样也许是可以的,但貌似需要服务器那边能将这些包组合起来。另外客户端这些做起来也挺复杂。还有一种方法是我不使用AFN库,自己直接用NSURLConnection来写,跟服务器建立连接后不断的从ALAsset中读取数据写入跟服务器建立的连接。这个是参考Java的写法。可是我又不知从何动手。并且之前都很忙,没有时间想这么多。
最近我比较闲了,我想正好有时间来解决这个问题。这是我心中的一块石头,我要把它拿掉。
这次我直接在github上找,说不定能找到一些有用的代码。果真让我找到了 FMAssetStream这个库,这个库的做法很简单,定义了一个子类来扩展NSInputStream,重载了一个最重要的方法 :
comments
Read More
iOS应用2017年强制应用HTTPS问题
iOS应用2017年使用HTTPS问题
昨天一个朋友发了一篇介绍HTTPS方案文章给我看,文章提到2017年苹果强制所有APP使用HTTPS协议,问我是不是真的,还是说那只是一篇软文。他也很担心,因为他的APP不是使用HTTPS协议。
其实应该说是这样:从2017年1月1日起,苹果强制新提交的APP使用HTTPS协议。这里要强调新提交,也就是说已经上线了的APP不受影响,新提交的APP或新版本提交才受影响。虽说强制,但是还是有方法不使用HTTPS协议的。
我查了下,现在的资料有提到3种方案:
-
1是APP里有一个配置开关NSAllowsArbitraryLoads,打开这个开关,所有网络请求都可以使用HTTP。现在所有没有用HTTPS协议的都是这么干的。这个开关现在用是没有问题的,但是2017年后苹果就不希望你这么用了。你再用的话,需要说明原因,而且理由不充分的话苹果有可能拒绝通过你的APP。
-
2是增加域名白名单(NSExceptionDomains),访问白名单之内的网站请求可以是HTTP请求。这种做法也要说明理由,苹果认为你的理由不充分仍然有可能拒绝通过你的APP
-
当然还有一种方案,是在iOS10系统新加的属性NSAllowsArbitraryLoadsInWebContent,专门针对浏览器访问的开关。设想一个浏览器应用,用户可以输入任务网址,这个网址能不能支持HTTPS协议,没人知道。所以就有这么一个开关,打开之后,浏览器的访问就不受HTTPS限制。但是不好的消息是,这个浏览器必须是WKWebView,而不能是UIWebView(截止2016.10.18前 ...
comments
Read More
iOS上传文件支持断点续传
iOS上传文件支持断点续传
在挺久之前我写过一篇文章里提到上传文件的断点续传的问题,我没有找到好的方法。以前我采用的方式是用NSFileHandl的方法seekToFileOffset,移到已经文件已经上传了的部分,然后采用readDataToEndOfFile读取剩下部分到内存中NSData。但是这个方案问题是,如果文件很大,需读取的NSData很大,内存就会爆掉。所以最终没有采用这个方案。
最近我们来个新同事,技术能力很不错。我让他去研究一下这个问题。开始他找到的方案跟我之前的那个是一样的,我说这个我之前有考虑过,不能采用。然后他继续研究,后来发现了原来NSInputStream有相关按offset读取文件的接口。不,正确来说是NSStream的接口,而且有点隐蔽性质的。
- (BOOL)setProperty:(id)property forKey:(NSStreamPropertyKey)key;
NSStreamFileCurrentOffsetKey
--Value is an NSNumber object containing the current absolute offset of the stream.
只要对NSInputStream指定它的NSStreamFileCurrentOffsetKey的值为你想要的offset ...
comments
Read More
升级Xcode8后Jenkins打包问题
升级Xcode8后Jenkins打包问题
上次说升级Xcode8之后,Jenkins自动打包就不行了,今天终于弄好了。前前后后话的时间有一天的时间才搞好,不容易。尝试了30多次才成功了,说多了都是泪。。现在记录一下。
我们的需求
说一下我们的需求。我们开发人员采用的是正式签名,正式的BundleID,但是我们Jenkins自动打包出来的是企业版,用的是企业版BundleID。代码是同一份,但是Jenkins打包企业版时时要先修改BundleID和相关版本号之类的。在Xcode7时代,我已经将Jenkins配置好,可以正常打出企业版的安装包。但是升级到Xcode8之后,Jenkins打包会报错,即原来的配置已经不能打出企业包来了。
解决方法
先说不能打包的原因,主要是签名方式冲突。Jenkins的配置是指定签名,而我们Xcode8采用的是自动签名。我们开发时采用自动签名,而且打企业版安装采用的签名文件跟我们开发时的签名文件时不一样的。所以Jenkins打包肯定得采用手动签名方式。
报错如下:
xxxxx has conflicting provisioning settings. xxxxx is automatically signed, but code signing identity xxxxxxxxxxxxx has been manually specified ...
comments
Read More
升级Xcode8后需要注意的事项
升级Xcode8后需要注意的事项
随着iPhone7开卖适配iOS10成了必不可少的事情。要适配iOS10,升级Xcode8又是必须的事情。可以一旦升级Xcode8之后会发现一堆坑在里面。每次升级Xcode或者iOS系统或者Mac系统都是有一堆的坑,每次都要折腾得你死去活来不罢休。这有点像飞蛾扑火,明明知道前面是火坑,也要往下跳。
升级第一坑,注释代码快捷键失效
当你经过漫长的等待Xcode下载和安装之后,满心欢喜打开Xcode,发现字体变了,貌似看上去还不错(有同事跟我说这很丑),然后开始写代码,发现可以高亮显示当前编辑行,不错嘛,写着写着突然想注释掉一行代码,发现command+/怎么按都没反应,十分恼火。这什么破玩意儿,这么明显的bug都有。然后网上搜解决方案,确实有人也遇到这个问题。貌似需要跑一个命令什么的。实际上不用那么费劲,重启一下Xcode就好了。
升级第二坑,iOS的字体变宽了
当我Run一下程序想看看我们的程序在iOS10上有没有问题,启动之后打开引导页,发现最底下的两个按钮字显示不全了:注册账号 变成了 注···号,登录账号变成了 登···号,这是什么鬼?我没有动过这块的任何代码,甚至连这个页面的xib也没有打开过。后来才知道,运来是iOS的字体变宽了,如果你一个按钮在iOS9原来刚好放下4个字,然后iOS10它就装不下了 ...
comments
Read More
关于技术人员加班问题的看法
关于技术人员加班问题的看法
身在IT行业,加班是永远绕不开的话题。互联网是以快速变化著称,加班似乎是成了名正言顺的。最近58同城加班996的问题也引起了广泛关注,而恰好最近两个星期,我们部门也一直在加班。我准备也谈谈这个问题。
我们加班的缘由
两个星期前,我们接到消息,要在两周之类上线3.0大版本。3.0版本改版非常大,虽然一部分功能已经开发了,但是一直在改,功能就从来没有稳定过。而且我们还正在开发2.7版本,突然间两周之类要上线3.0版本,是不可能的。但是这应该是老板的命令,我们应该没有还价的可能,所以加班是不可避免。还有一个更加不可避免加班的理由:我们的一个同事这个时候被借走了,借去别的子公司帮忙开发。这个借人也不是我们可以商量的,这个公司老板的要求,所以雪上加箱。
加班开发和家庭影响
为了能尽可能达成目标,我们每天都是工作到10点多,有些同事要搞到凌晨2点多,从产品,设计,到测试,所有人都需要加班。周末两天也需要加班。我老婆对我每天都很晚回家意见非常大,所以我尽量能10点多之后就回家,不然肯定闹家庭矛盾。周日我也不得不请假,留了另外两个同事在加班开发。其实我们已经非常高效了,我们的人力比Android客户端的人力还要少,大家都要努力加班赶进度 ...
comments
Read More