一、方法
方法一
假设有静态库.a: liblibA
想转成libA.framework
第一步
把liblibA和头文件放到目录Test中
创建文件夹并命名为:libA.framework
cd ~/Desktop/Test
mkdir libA.framework
第二步
把liblibA去掉.a后缀,并改名为libA,放到libA.framework目录下
mv liblibA.a libA.framework/libA
第三步
在libA.framework文件夹中创建Headers目录,并把liblibA的头文件放进去。
mkdir -p libA.framework/Headers
cp include/* libA.framework/Headers
第四步
如存在libA.h,则在里面直接添加:
#import <libA/libA.h>
#import <libA/LeoTest.h>
#import <libA/Test.h>
如不存在,则创建libA.h文件,在里面添加上面的引用。
第五步
如果想把不同架构合并,可以使用lipo -create
参考:lipo命令使用
如果还有个库:other.a,想把他也放到libA.framework中,可以先把他解包成.o,然后进行合并,
参考:iOS开发 静态库.a/.framework合并及加载
调用对比:
方法二
第一步
把liblibA和头文件放到目录Test中
创建文件夹并命名为:libA.framework,创建Headers和Resources
mkdir -p libA.framework/Versions/A/Headers
mkdir -p libA.framework/Versions/A/Resources
第二步
创建软链接
ln -s A libA.framework/Versions/Current
ln -s Versions/Current/Headers libA.framework/Headers
ln -s Versions/Current/Resources libA.framework/Resources
ln -s Versions/Current/libA libA.framework/libA
第三步
复制.a到Versions/A目录,改为libA
cp liblibA.a libA.framework/Versions/A/libA
第四步
复制头文件到Versions/A/Headers
cp -r include/* libA.framework/Versions/A/Headers
第五步
如存在libA.h,则在里面直接添加:
#import <libA/libA.h>
#import <libA/LeoTest.h>
#import <libA/Test.h>
如不存在,则创建libA.h文件,在里面添加上面的引用。
二、编译openssl静态库.a
1、下载openssl
2、查看当前xcode命令行路径
xcode-select -print-path
把真实路径替换到下面命令中
3、配置环境变量
cd到openssl目录
cd /Users/leo/Desktop/openssl-1.1.1w
执行下面指令:
export CC=clang;
export CROSS_TOP=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS.sdk
export PATH="/Applications/Xcode_15.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
4、编译配置
./Configure ios64-cross no-shared no-dso no-hw no-engine --prefix=/Users/leo/Desktop/openssl_sdk
./Configure配置说明:
arm64架构:ios64-cross
armv7架构:ios-cross
x86_64模拟器架构:ios64-sim-cross
如果出现下图则代表配置成功:
执行该命令后,会生成Makefile文件,可以修改里面的配置,以修改最终的编译结果。
也可以修改15-ios.conf里面的配置
5、编译
编译openssl:
make
把编译后的openssl放到--prefix指定的路径:/Users/leo/Desktop/openssl_sdk:
make install
清理编译:
make clean
在openssl_sdk目录如下:
如果想要使用国密:2/3/4,还需要到如下文件:
其他编译OpenSSL文章
OpenSSL-for-iPhone
GRKOpenSSLFramework
编译好的OpenSSL
三、openssl .a转成.framework
可以转成.framework静态库,也可以转成.framework动态库。
新建OpenSSL.Framework,把libcrypto.a和libssl.a以及头文件放到OpenSSL.Framework中,暴露所有的头文件,并新建在OpenSSL.h中把所有文件import: