.framework动态库制作(静态库制作类似)

测试版本:xcode 10.2.1

一 整体流程;

1 新建ios的framework工程,新建类文件;

 

2 运行前参数设置:

*创建库类型设置(默认动态库):Build Dettings, Mach-O Type选择动态库;

*头文件公开设置:新建类头文件可导入到系统自动生成的framework.h中(防止引用某个类时,missing module警告);

*支持设备指令:Architectures的3个相关参数选项设置(Targets - Build Settings - All - Combined,添加armv7s 、arm64e,Build Active Architecture Only模拟器可设置为YES,方便快速调试);

*支持最低版本:Targets - General - Deployment Target;

*其他需要补充设置:

例如arc与mrc混编,对mrc文件单独设置-fno-objc-arc;

*如果静态库制作需要关注:

Dead Code Stripping默认为YES,设置为NO,则不会去掉不执行的代码;

Link With Standard Libraries默认YES,设置NO,避免重复连接;

3  合并模拟器和真机framwork;

3.1 脚本合并法:

*加脚本:targets - Build Dettings,点击+,选择new run script, run script的shell下文本添加脚本;

*运行:任选真机运行,然后再模拟器运行,弹出find,显示的framwork就是合成版本;

3.2 终端法:

*运行:任选真机运行,然后再模拟器运行,选中项目的Framework,show in find,既可查看生成的模拟器或者真机可执行Framework;

*合并:合并两目录的可执行文件,到新目录,要注意三个可执行文件名相同,合成后的Framework可执行文件替换真机或者模拟器的可执行文件;

命令:lipo -create 可执行文件目录1( 模拟器) 可执行文件目录2( 真机) -output 可执行文件合并后目录3(支持真机和模拟器)

 

4 查看支持指令集:查看framework支持的指令集:  lipo -info framework路径

 

5 新工程测试;

*新建ios的app工程;

*拖入.Framework到新工程;

*工程添加库:依次打开:Targets-->General-->Embedded Binaries--> +   添加自己导入的framework;(不然,会报错 Reason: image not found );

*导入#import <FrameworkDemo/FrameworkDemo.h>,调用framework的方法进行测试;

 

 

二 具体步骤说明;

1 新建ios的framework工程,而不是app工程;

2 新建类文件;

3.1 结构选择;只会编译Architectures、Valid Architectures、Build Active Architecture Only的交集结构;

Architectures:结构
Valid Architectures:验证结构
Build Active Architecture Only:编译结构,只编译当前结构设为NO,就会编译所有指令集(所有模拟器或者真机),为YES则只编译当前设备结构;

 

3.2 指令集说明:
32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(arm64),

i386|x86_64 是Mac处理器的指令集,i386是针对intel通用微处理器32架构的。x86_64是针对x86架构的64位处理器。

当使用iOS模拟器的时候会遇到i386|x86_64,iOS模拟器没有arm指令集。

3.3 编译选择:

真机生产环境,Build Active Architecture Only选择为NO,即编译所有指令集;

模拟器可以只编译当前选择的模拟器设备指令,方便快速调试,如下

 

4 以上所生成的framework均不包含armv7s、arm64e,在 Building Setting 中设置一下 Architectures,在原有基础上分别添加一行 armv7s 、arm64e,如下:

 

5 运行前准备:

此次Build Active Architecture Only都设为NO;

Build Dettings, Mach-O Type选择动态库;(如果要编译静态库则选择static Library);

最低版本支持选择:8.0;

头文件拖到public;

屏幕快照 2019-04-26 上午8.04.00

6 脚本生成模拟器和真机的release合成版本;

6.1 添加脚本:Build Phases + new run script;

 

run script拷贝如下代码到脚本;

if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi

6.2 分别运行真机、模拟器,都会弹出Framework的find;

6.3 查看framework支持的指令集:  lipo -info framework路径

 

7 非脚本合成:合并两目录的可执行文件,到新目录,要注意三个可执行文件名相同;

lipo -create 目录1( 名为Framework) 目录2( 名为Framework) -output Framework

 

8 新建app工程,把framework加入新工程测试;

 

9 备注: iOS 导入Framework 报错 Reason: image not found
添加库,依次打开:Targets-->General-->Embedded Binaries--> +   添加自己导入的framework 即可正确找到资源路径
 
然后接着选择第一个”Developer-》”CoreSimulator->Device

 

10 参考:

制作参考:https://www.jianshu.com/p/d0c7254319b6

动态加载参考1:https://www.jianshu.com/p/a91320af281e?from=groupmessage

动态加载参考2:https://www.cnblogs.com/sunjianfei/p/5781900.html

参数设置补充:https://www.jianshu.com/p/709828379028

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值