ios中写framework并调用的方法以及所遇到的问题

1.写一个framework

1)新建一个framework

file->new->project ->framework&library->cocoa touch framework

2) 编写相关代码并导入要使用的库,我这里使用的是polarssl,c语言的

由于我调用了c语言,所以我的example的文件的后缀为mm,并且在h文件中引入了库中的文件

因此不能将这个h文件直接暴露给调用此framework的项目,有可能会在项目中产生header not found的情况,需要新建一个文件专门用来引用我新建的example中的内容

ios中写framework并调用的方法以及所遇到的问题_第1张图片

然后设置哪些可以让调用的项目看到:项目->target->build phase->Headers->将需要作为public的h文件拖入Public分类下面,其他的删除

ios中写framework并调用的方法以及所遇到的问题_第2张图片


然后运行,从菜单栏中的window->projects->点击右边的灰色小箭头,从finder中打开,从Build->Product->找到自己的framework文件,这个就是生成的framework文件

ios中写framework并调用的方法以及所遇到的问题_第3张图片

3)测试,使用xctest测试

在以test为开头的函数里面写需要测试的内容,然后长按左上角运行按钮会出现第二个测试按钮,点击即可,或者command+u同样是测试

ios中写framework并调用的方法以及所遇到的问题_第4张图片

4)调用自己生成的framework

import方法:

#import "XXX.framework/Headers/XXXHeader.h"

这样就可以使用自己写的framework了


2.遇到的问题

1) 在h文件导入其他h文件报错:include of non-modular header inside XXXX

解决方法:

项目->target->build setting->搜索并找到选项 Allow Non-modular includes in Framework Modules->设置为yes

注意:这地方的选择的target不一定是最终的还是需要测试的,我这里报错是exampleTest报错的

ios中写framework并调用的方法以及所遇到的问题_第5张图片

参考:http://blog.csdn.net/zzzzzdddddxxxxx/article/details/51149243

2)在调用自己生成的framework时报错:

Undefined symbols for architecture x86_64:
  "operator delete(void*)", referenced from:
      -[XXXsdk init] in XXXsdk(XXXsdk.o)
      -[XXXsdk initWithIP:andPort:] in XXXsdk(XXXsdk.o)
  "operator new(unsigned long)", referenced from:
      -[XXXsdk init] in XXXsdk(XXXsdk.o)
      -[XXXsdk initWithIP:andPort:] in XXXsdk(XXXsdk.o)
  "___gxx_personality_v0", referenced from:
      SSLService::login(char*, char*, int) in XXXsdk(XXXsdk.o)
      -[XXXsdk init] in XXXsdk(XXXsdk.o)
      -[XXXsdk initWithIP:andPort:] in XXXsdk(XXXsdk.o)
      -[XXXsdk login:password:type:] in XXXsdk(XXXsdk.o)
      -[XXXsdk configServer:port:] in XXXsdk(XXXsdk.o)
      Dwarf Exception Unwind Info (__eh_frame) in XXXsdk(XXXsdk.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

说明没有引入c++库

项目->Target->Build Phase->Link Binary With Libraries ->点击加号搜索libc++  ->选择libc++.tbd

再运行就不会报错了


3)在自己的项目中framework中的h文件引用有其他非public的h文件,出现xxx.h file not found 的情况


解决方法:可以再写一个专门的h文件引入要使用的类,再调用这个新的h文件就好,参照上面创建framework过程的第二步

你可能感兴趣的:(ios,报错)