刚入职新公司,遇到了几个问题,感觉需要记录一下,顺便分享。
问题1 界面和代码对应
由于刚入职,所以不知道哪个界面对应的代码是哪里,又加上项目比较老,比较大,如何才能快速找准界面和代码之间对应,这是第一个难题。
做法:
- 最开始,我是先走一遍app的所有界面,大概知道都有哪些,然后开始看代码命名,根据名字猜测可能是哪个界面,然后验证是否正确。但是随后发现这样很累,而且因为代码比较老,有些类重写了,老的都没有删除,命名又很像,所以有些根本没办法对应;而且这样效率很低,如果项目不大还好,但是项目大,时间又紧,那这样根本就行不通。
- 然后晚上下班,走在路上的时候,突然想起来之前看到的一篇博客,Method Swizzling 和 AOP 实践,这里面介绍用Method Swizzling来实现给每个界面加统计,然后我就想,既然都能给每个界面加统计了,那肯定也能打印每个界面的信息。所以,我就用Method Swizzling实现替换ViewWillAppear:方法,然后每次界面出现的时候都会打印当前类名。这样我只需要运行app,然后点击界面,然后就会打印当前类。很轻松就能找到界面对应代码。
问题2 模拟器运行没问题,直接运行真机也没问题,但是打包出来的显示就不对
开发新版本,打包给测试,结果测试说你这显示不对;然后我仔细看看,确实所有显示数字的地方都出错了,但是我在模拟器上运行没错啊,所有的数据都正常啊
排查:
- 最开始我以为是证书的原因,但是想想不太可能,如果是证书的问题话,造成的后果是打不了包,而不应该是打包数据不对。然后我在想,会不会是因为我打包的时候少设置了什么?但是也没有排查出来,而且也没人告诉我需要特别设置的。
- 于是就需要定位错误,然后我上真机,直接运行,妹的,也没错啊,这是什么鬼。
- 然后求人问佛,想想,会不会是因为scheme的问题,因为如果说打包和直接运行有什么不同的话,那就是scheme了。于是我把scheme改为release直接运行,报错了。。。。。无奈,就把scheme改为debug,打个包(打包是个很痛苦的事,电脑卡,项目大,编译要等几分钟,亲测,我点击archieve,然后去上厕所,回来发现还没编译完。。。。。。),安装,结果显示还是不正确。欲哭无泪啊。。。。
- 然后测试催我,于是我找旁边的人帮我打个包,结果发现,他打的包就没问题。。。所以我以为确实是我打包的时候少选了什么,但是发现不了啊。
- 第二天来,测试又催着打包,没办法,接着查,发现敌情—— iOS开发遇到的坑之三–使用asi框架在xcode下正常运行,但是打包时却不能进行网络访问和asi打包ipa的坑,然后我按照说明改了一下,编译打包,见证奇迹的时刻到了,好了,丫的,果然是这个问题。项目比较老,所以用的asi,一直没有替换,然后我以前还没用过,但是神奇的是,我旁边的那个iOS,他的编译条件就是-fno-objc-arc,但是打出来的包就没问题,这点好生奇怪!
问题3 模拟器运行没问题,真机运行出问题
上个问题刚改好,晚上测试提个bug,点击链接跳转web,加载失败,安卓就可以
排查:
- 测试刚提过来的时候,我检查了一下,发现模拟器上是没有问题的,测试告诉我,安卓也是没有问题的,所以我就在想,丫的,莫非又是打包出问题了?但是我把链接替换成百度,就没有问题啊。
- 老规矩,上真机,然后单步调试,链接没错啊,但是确实加载不出来啊,难道是webView的那个界面写错了(我新来的,所以用的是之前已有的加载web的类),然后一步一步调试,发现每次加载的时候,都在链接后面拼接了”?source=app”,哈哈哈,我果然聪明,注释掉,运行,shit,怎么还不行;然后后台告诉我,这个其实不会影响链接,所以我乖乖的又把注释给打开了。
- so,那到底是为神马,还是后台说,你试试其他手机可以打开吗?把这个链接复制到浏览器里,看看能直接打开吗?然后我试了一下,丫的,果然,在浏览器里也打不开。然后换其他测试机,发现可以,可以,可以啊,原来测试都没看其他的手机啊。。。。(Ps:我的手机还没加到测试帐号里,所以一直不能用),唉,但是手机明明联网了啊,为什么就是不行呢,为什么啊,后来想想,首先:我们公司的网是有限制的;再次:这个链接本来就是测试的链接,有可能前端没配好。
- 但是,不是我的问题,为什么我会改这么长时间啊?为什么呢?对啊,为什么呢?