一个iOS的Framework和Bundle的使用问题

今天使用一个第三方开发的库从pod引入方式改为源码导入,由于没有提供podspec文件按照惯例步骤如下:

  1. Podfile文件去掉引用,执行pod update

  2. xcodeproj文件添加到workspace中。编译出framework文件


    一个iOS的Framework和Bundle的使用问题_第1张图片
  3. 在主target中的Build Phases->Link binary with libraries中添加对应的framework


    一个iOS的Framework和Bundle的使用问题_第2张图片
  4. clean之后编译运行。遇到crash


    一个iOS的Framework和Bundle的使用问题_第3张图片

    可以看到因为url为nil,导致[NSBundle bundleWithURL:] crash

5.查看发现原来对应的bundle文件没有添加到target中。添加前面第三方proj中product中的bundle文件后解决。


一个iOS的Framework和Bundle的使用问题_第4张图片

最后关于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();
    }
}

你可能感兴趣的:(一个iOS的Framework和Bundle的使用问题)