从第一个iOS项目开始
昨天完成了了第一个iOS项目,功能很简单,就是把大众点评的团购信息,新闻头条,网络笑话, 微信精选,历史上的今天集中组合在了一个App中,这样我就可以在一个App里面把自己每天用手机要观看的,日常感兴趣的几件事情全部都干完,这样比跑几个App看很多的广告,申请很多账号要效率的多。以后可能会将每天用手机做的事情更多的添加进来,但是目前就是这么简单的一个App,我把它叫做M记。
从有开发这个App的想法到完成功能用了20天左右的时间,当然还花时间在阅读Coding的源码,有时间会将每个阶段阅读Coding源码的收获也写成博客,不过那估计就是一个系列文章了。在独立开发App的时候总会遇上一些和在企业开发不同的困难,当然解决了这些问题都有了不小的收获。
开发时候我很快就遇上了第一个问题没有图标,网上找的很多图标都是要么每次只能找一个,需要一个个的进行保存,然后调尺寸和名称。因为同一个图标没有不同尺寸的,当图标的大小发生变化的时候要么让系统自动ScaleTofill要么就只能自己切,结果出来的效果简直不能太美,完全影响写代码的心情。原本在网上搜索到的可以简单的解决图标问题的软件要么是付费的,要么就有一点学习门槛,我并不打算在这上面浪费更多时间。所幸最后让我发现了一个神奇软件ICON8(记得掏广告费),只要在google上面搜索下载安装到电脑上以后你就会使用了,零门槛太棒了!它提供上千种icon图片,每个图片都有25px、32px、50px、75px、100px、128px、256px、512px这八种尺寸的,在不付费的情况下也可以使用他们的100px以下尺寸。最重要的是里面很多图片可以根据调色板自己来选择图标的颜色。这样甚至一次性解决了我们在高亮状态下显示的问题,只需要把同样的一组图片改一下颜色就好了,对于我这个一点PS都不会的人来说简直不要太友好,所有图标的问题都解决了。
然后是第二个问题没有数据源,公司的App数据都是由公司的服务器来提供的,服务器端可以有很多方法来解决这些问题,可是写一个简单的App就没办法这么大费周章了,就算是在网上爬数据也需要我会写爬虫,我可没这么多闲工夫(——酒桶)。费了一番功夫找到了大众点评的API,但是其他的API还需要解决。果然这个问题很多人都遇到过,而且已经有人找到了解决方案,在知乎有人提到聚合数据。注册以后,填写了实名认证,第二天我就看到了很多可以用的免费接口。包括一些笑话,头条,快递查询等也有收费的,但是对于我来说免费的就够了。所以这个问题完美解决。
我相信这两个问题是很多iOS自己开发项目,或者初学者找项目练手时候都会遇到的问题,那么我的经验就是解决方案,或许有更好的解决方式,这毕竟是其中一种,不是么。
第三个问题是在申请完聚合接口时候遇到的,用AFNetWorking来进行网络请求的时候返回的是failed,但是在error里面又有数据,而用原生框架NSURLSession请求的时候就正常了返回正常的数据,用Charles进行抓包显示的reponse也是正常的。翻阅AFNetWorking文档,当在请求出现错误或者返回的数据AFNetWorking不能解析的时候就会返回failed。所以问题就出在返回的数据不能解析,最终找到解决方式是因为聚合数据返回的数据是@“text/html"的,而原本的AFNetWoring里面可接受的内容类型是:
self.acceptableContentTypes= [NSSetsetWithObjects:@"application/json",@"text/json",@"text/javascript",nil];
里面没有@"text/html",把它加进去
self.acceptableContentTypes= [NSSetsetWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",nil];
就一切顺利,返回正常解析正常。
第四个问题是PCH文件,在xcode 7 之前系统会在项目里默认生成一个PCH文件,作为一个预编译文件,我们需要在里面加些预编译指令和头文件进去,比如经常使用的库的头文件,屏幕的长宽高,各种API等等,但是在xcode 7 以后系统就将这个文件从默认生成的文件中取消了,如果要用需要自己去创建。本着苹果不提倡的就是我们所舍弃的的原则,看来这个文件是不能用了,试着自己创建添加了一下,就出现了好几个莫名其妙的错误,要么Pod库文件报错,要么路径报错,总是各种不得劲。只好删掉自己然后自己创建了一个头文件来引用。
第五个问题是用MJRefresh的时候,因为就是实现了简单的下拉上拉刷新功能,没有细致的研究,结果在使用的时候发现,设置了上下拉属性以后在UI上面不显示,这个在换了另外一个下拉上拉动画后好了。
第六个问题在使用XIB设置UI的时候,设置自定义的CELL,Cell里面加载的子控件,两个控件设置的约束一模一样,但是位置就会出现偏差。比如两个label ,每个都设置距离底部为10,在显示的时候就会发现一个比另一个高出一截,查看约束会发现计算距离的起始位置居然不一样。还有一个是XiB设置完约束后跑起来整个页面就乱成一团糟,检查约束也没有发现问题,将XIB删掉用Masonry按照设置约束的思路重新写一遍就正常了。这两个问题没有进行深追,但是已经坚定了我以后用纯代码进行UI布局的决心。
这个小小的个人项目目前会停止更新有好的点子以后再考虑更新,接下来会仿做一个App并把它记录下来。
M记的项目托管在git上 https://github.com/scholarin/MyAssistant/commits/master