6月工作总结

前言

因为一些原因,下了100%的决心:换工作。换工作倒也不难,只是找一份匹配度高的工作,的确很难,尤其是在所处的二线城市。个中滋味,——如鱼饮水,通过这些经历,对自己的发展和定位,有了一个较为明晰的看法。
最近在整理工作内容准备交接,倒是找出了一些工作中遇到的记录,准备整理出来,晒晒自己的一些经历。

一些纪录

工作中遇到的问题,往往会由问题A牵涉到问题Z。下次再遇到或许没那么快想起该怎么做,所以记在记事本还是个不错的

project.pbxproj的git冲突合并

开发过程中,当前功能未开发完版本有更新时: git stash //保存当前的工作内容,并将工作区置于上一次提交的HEAD git pull origin master//获取更新 git stash pop //恢复当前工作内容

以上过程中git会进行自动合并,但有时候需要人工合并。比如 project.pbxproj有冲突的时候。这时打开相应的冲突文件,通过"<<<"找到冲突区域进行修改。然后执行命令:

git commit file_path -i -m "fix merge confilic"

另外,找到个处理 project.pbxproj脚本,没有使用,有兴趣可以一试。

git 查看某个commit的详细内容

通过 git log 可以查看提交历史,当需要查看某个commit受影响的文件以及文件的修改时:

git commit commit_id -p
git commit commit_id --stat

"commi_id"通过 git log 获得,是一个hash字符串,在实际运用的时候,取前几位(4位)即可。

iOS code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.2'

最近遇到的问题,当你对 test target做相应设置时,还是会报错。这时需要做的是,在工程的 "Build Settings"中选择正确的账号证书和provision。

iOS Crash: 'Auto Layout still required after executing -layoutSubviews.'

完整的crash log:

Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.137/UIView.m:8794 2015-xx-xx xx:xx:xx.xxx xx[xxxx:60b] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'

该crash是 显示一个 UITableView 的时候出现。我的情况是 使用UITableView(没有继承),所以应该不会直接操作 layoutSubviews。而且该crash只在iOS7上出现,iOS8+上则没有。注意到断言出错的方法是 -[UITableView layoutSublayersOfLayer:], 出错的异常却是 layoutSubviews,考虑使用API有误:少传参数,或者调用顺序出错之类。 google后,发现有位同仁遇到类似的问题。 细细想来,还是没有思路。经过排查,发现是在 UITableView 上添加了 subview 导致的。具体原因不详。
此外,github上有一则讨论,也可以看看。

strip

在CentOS为类NAS设备开发固件程序的时候,对程序大小有要求。我们在makefile文件中添加 -s 参数,用于减小程序的体积。该参数意即使用strip命令,通过除去绑定程序和符号调试程序使用的信息,减少扩展公共对象文件格式(XCOFF)的对象文件的大小。

CentOS上创建静态库和动态库

假设文件 test.c
创建并使用静态库:

gcc -c test.c
ar rcs libtest.a test.o
//use the libxxx.a
gcc -o main main.c -L. -ltest

创建并使用动态库:

gcc -shared -fPIC -o libtest.so test.o
//use the libxxx.so
gcc -o main main.c -L. -ltest
LD_LIBRARY_PATH=. ./main

注意库的命名,使用库时参数 -L -l 的涵义。
ar有丰富的内涵,也需要对程序从编译,链接,生成可执行程序有较深的了解。

otool

ldd 可以查看链接库的各种信息,在Mac OS X平台上由otool替代。
size 可以查看可执行文件/库等的各个段的size信息。