如果想在静态库中添加文件,需要在静态库的头文件里导入添加的文件
并且在工程配置里的Headers,找到你的刚刚新加的文件,如果是在private里面,就右键移动到public里面,这样工程就可以编译成功了
1、导入的时候,需要把文件夹都移动到目录下面,addfile的时候,只add .xcodeproj的文件
2、导入静态文件库需要的其他库文件,如果导入的静态库有依赖关系,比如我这里JDBKit依赖于MDF,那就只导入JDBKit的静态库文件
4、如果静态库中有类目的引用,需要在other Linker Flags添加-ObjC
iOS开发中支持静态库与动态库,不过使用动态库,上架会有麻烦。这里讲到如果创建静态库.a文件,其实很早之前公司要求做wifi的SDK的时候就开始涉及这个东西了,但一直没写出来。
首先新建一个静态库的项目
注意这里选择的不是模拟器运行,继续
这时候就得到了两个.a文件。
把Release-iphoneo和Debug-iphonesimulator复制到桌面新建的文件夹
最后使用命令lipo -create xxx.a xxx2.a -output xxx3.a
新建项目或者随便找个已创建测试项目,可直接拖进来放在Frameworks目录下
再把暴露的.h文件引进来
接下来,我把静态库和暴露的.h文件放入cocopods中使用,将静态库和暴露的.h上传至github上的仓库。并更新一个release版本。
更改cyhCheckphoneNum.podspec版本号,与spec.source_files和spec.vendored_libraries
更新github上的release版本
验证是否通过,通过上传至github
上传至cocopods
最后使用cocopods安装使用
1.Framework是资源的集合,将静态库和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中。静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝;例如 .a和.framework
2.动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存;例如:.dylib和.framework
系统的.framework是动态库,我们自己建立的.framework是静态库。
.a与.framework的区别:
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
将Mach-O Type设为Static Library, framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库。
Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构;
iOS Deployment Target ,静态库需要支持的最低版本号,要小于等于主项目的版本号;
Valid Architecture 支持的iOS的CPU框架;
将你要公开的头文件拖至Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。
分别在模拟器和真机设备下编译,生成两个WSLFramework.framework文件,然后把两个WSLFramework.framework文件中的WSLFramework用命令合成一个,和.a的文件合成命令一样(lipo -create +上面两个文件的路径 + -output + 合成后文件的输出路径 )
命令执行完后,输出路径下的WSLFramework就是你合并后的文件,将这个文件名字改成和你未合并之前的一样,放到Debug-iphoneos(真机)目录下WSLFramework.framework文件夹下,替换掉原来的WSLFramework文件;此时就可以把当前WSLFramework.framework文件拿出来了,他就是最后生成的framework文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)