IOS开发入门之封装含静态库的动态库
白羽 2018-11-23 来源 :网络 阅读 898 评论 0

摘要:本文将带你了解IOS开发入门iOS学习笔记-封装含静态库的动态库,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门iOS学习笔记-封装含静态库的动态库,希望本文对大家学IOS有所帮助。


动态库创建

1.首先,动态库上架是可以的(本人亲试),大胆的去做吧;

 

 

 

拷入相关静态库SDK,注意不能直接饮用静态库中文件,需要我们创建.h.m文件中转一下(至少我是这样做的)

以环信SDK为例(由于项目中其他SDK与环信SDK冲突)

 

 

 

同样需要导入此SDK静态库所依赖的动态库

 

 

 

2.由于我是要将整个UI封装到SDK,在对应的UI文件中已经进行了一次SDK调用,故我再使用自定义.h.m文件调用UI文件也符合逻辑。

由于要在appdelegate中响应方法,我们设置一个helper

 


 

在.m文件中写相关的处理逻辑即可,之后在appdelegate中调用此动态库文件;

pch文件在这里同样适用,配置好就行

 

 

 

值得注意:动态库所有的资源文件 如 图片,xib ,bundle文件,需要全部拷贝出动态库工程,放在一起,作为一个额外的动态库资源文件存在,不能再动态库中一起编译;因为图片路径要设置为相对动态库路径,修改繁琐,xib文件会转换成nib文件,需要重写加载xib方法等原因;

这是最终弄好后样子

 

 

 

Resource放置的为资源文件,这样加载就没问题;

3.注意的是 你在动态库中公开的头文件(.h)所#import的相关文件必须也是公开否则会报错,显示找不到该文件;(.m文件中#import不会有问题)


在Build Phases中设置即可;

文件可直接从左侧拖入,会自动从区域内转换过去;

公开所有SDK头文件(因为关系比较复杂,所以全部设public可以避免问题),然后自己创建的helper等文件也设置为public(建议#import放在.m中,这样就可以不必要全部导入)。

4.SDK不支持bitcode的需要设置


5.完成所有操作后编译就好


如出现下列类似问题


设置Build Settting ->Other linker flag 为 -read_only_relocs suppress


使用

导入动态库,在General - >Embedded Binaries 加入动态库

 

 

 

合并动态库

选择工程


 

 

 

 

拷入脚本


   

# Sets the target folders and the final framework product.

# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

# 例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

cp -R "${SIMULATOR_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"

   

编译即可

 

上架

上架时动态库需要编译真机版本,不能使用合并的版本(即通用版本),我想就是为啥我用一些SDK(使用动态库的 ),他们只支持真机。合并版本会报 x86_64 i386错误

静态库可以提供通用版本,编译之后即成为所需要版本;(一般静态库很大,编译后就很小了)

如何编译真机和模拟器版本?

真机

 

模拟器

 

编译后

 

即可找到

          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程