今天使用一个第三方开发的库从pod引入方式改为源码导入,由于没有提供podspec文件按照惯例步骤如下:
-
Podfile文件去掉引用,执行pod update
-
xcodeproj文件添加到workspace中。编译出framework文件
-
在主target中的Build Phases->Link binary with libraries中添加对应的framework
-
clean之后编译运行。遇到crash
可以看到因为url为nil,导致[NSBundle bundleWithURL:] crash
5.查看发现原来对应的bundle文件没有添加到target中。添加前面第三方proj中product中的bundle文件后解决。
最后关于bundle的制作和使用可以参考bundle的生成和使用
附:查问题的过程中还遇到堆栈显示不完整的问题。整个crash堆栈中只有dispatch相关的调用。好在apple开源了GCD的源码.下载libdispatch
可以找到SIGABRT抛出的地方objc_terminate。应该是block执行有异常了。
void
_dispatch_client_callout(void *ctxt, dispatch_function_t f)
{
@try {
return f(ctxt);
}
@catch (...) {
objc_terminate();
}
}
网友评论