1、XCode小经验
工程路径设置(Search Paths)
Header Search Paths:$(SRCROOT)/include
Library Search Paths:$(SRCROOT)/lib
$(SRCROOT)宏和$(PROJECT_DIR)宏都指xxx.xcodeproj所在的目录。
工程中引入了第三方库时,编译报错提示找不到系统函数定义?
把工程的 "Build Setting" 中的 "Always Search User Paths" 改成 "No",否则编译器就会优先搜索第三方库中的同名系统函数,导致编译出错!
编译出来的静态库特别大
这个问题是丁强帮我搞定的,要在工程的 "Build Setting" 中的 "Generate Debug Symbols" 设置为 "No",然后把 "Strip Debug Symbols During Copy" 设置为 "Yes",这样我原来生成48MB的.a静态库变成了4.6MB,很好!
如何分析静态库的打包内容?
我们工程的产出是一个静态库包,如果在使用时链接出错,那么很有可能是某个包没有打进去。由于iOS静态库还需要区分不用的CPU架构模式,所以也要特别的注意下如armv7、armv7s、arm64等等,下面几个命令可以帮助分析:
// 将静态库由“fat file”抽取成“thin file” lipo libuniplayer_sdk_d.a -thin armv7 -output libuniplayer_sdk_d_armv7.a // 列出打包的库清单 ar -vt libuniplayer_sdk_d_armv7.a
// 删除某个链接模块
ar -d libFreetype2.a smooth.a // 将静态库解包成*.a文件 ar -x libuniplayer_sdk_d_armv7.a // 查看某个文件是否包含某个函数实现体 nm 文件名 | grep 函数名 // 查看某个文件支持的架构 lipo -info ***.a
2、命令行
# 在指定路径查找包含指定内容的文件列表 find . -name "*.xml" | xargs grep "By adjusting" -l
# 查看Mac/Linux依赖库 objdump -x *.so | grep NEEDED