最近公司需要写自己的framework,从未接触过的我顿时头脑一片空白,想想还不是要做。那就开工吧。到处查资料,跳过了度娘,直冲google,找到的都是一篇篇的长篇大论,突然觉得我饿了。还是先不说这些打击士气了。早早写完吃饭饭去。
1.新建一个framework-->Next-->命名为XMSDK-->保存
2.添加一个类,用于测试
3.将你要暴露到外面的文件,也就是让调用的文件放倒public里面,右键Move to public Group即可。
4.在framework创建时默认建立的头文件里导入外部需要用的文件
5.在模拟器和真机下分别build。XMSDK.framework会由红变黑。
6.由于真机和模拟器分别会生成不同的framework,so,在开发工程中最好是将其合并。先穿插讲一下合并方法:
对XMSDK.framework文件 show in Finder,找到其路径
然后打开终端,运行如下命令行。
7、lipo -create真机framework路径/XMSDK 模拟器framework路径/XMSDK -output XMSDK
然后可以用 lipo -info Test2SDK 查看指令集
8、前往~/(home文件、根目录)找到XMSDK,然后替换掉真机和模拟器里面的这个文件
9.最后将framework拖入到工程中使用
10.导入framework后,使用里面的类及其方法,按道理来说已经ok了,但各位到这里终于快好了,准备run时发现问题一大堆。但我是很负责的啦。咱接着往下看!
11.可能出现的错误有这两种:
(1).真机运行错误
解决方案:在XMTest-->General-->Embedded Binaries-->添加我们的XMSDK.framework库
再次运行看看,ok,真机问题解决。
(2).模拟器错误(注意:模拟器运行时也需要先走(1)这一步)
模拟器错误分两种情况:(个人目前只遇到了这两种情况,有不同的望分享哈)
第一种是iphone5c及其以前的版本,报Undefined symbols for architecture i386错误
第二种是iphone5s及其以后的版本,报Undefined symbols for architecture x86_64错误
以上两种错误,不难看出都是处理器指令集的问题,所以解决办法都是一样的。还记得前面的7/8/9这三个步骤吗,不记得就鼠标滚动起来。没错,同样的步骤,再走两遍。分别把模拟器选择iphone5/iphone5s,build生成相对应的framework,同样合并真机的framework。把最后一次的framework添加到项目中。(其实这里我在想咱们第一次合并的时候就直接把这两种情况考虑了,然后直接生成同时支持i386 x86_64 armv7 arm64的。这样是不是会方便点,有待各位去尝试。嘿嘿)
ok,我已完成这一步,所以效果也出来了。模拟器也不报错啦。
12.基本的framework这就完成了,以后就可以直接在XMSDK.framework里面添加东西了。在此也在提醒一下,如果framework里面有分类,那么使用的时候还会报错,报其找不到相应的方法。没事,我已经找到解决办法啦。如下操作:
Build Settings --> Linking->Other Linker Flags 中加上 -ObjC 或者-all_load 。
它的作用就是将静态库中所有的和对象相关的文件都加载进来,不过在64位的Mac系统或者iOS系统下,链接器有一个bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。变通方法是使用-all_load 或者-force_load标志,它们的作用都是加载静态库中所有文件,不过-all_load作用于所有的库,而-force_load后面必须要指定具体的文件。
好了。大家应该都能看懂吧,如果能帮到你那就给我来个赞吧,😄。已经饿得没力气了。好吃好喝的各位帅哥美女砸过来吧。我接着。
网友评论