当前位置:网站首页 > 编程语言 > 正文

动态库和静态库调用方法(动态库和静态库的使用)



1.iOS中关于库的基本知识

2.简单.a静态库的生成和使用

3.复杂.a静态库的生成和使用(包含Bundle文件和Category分类文件)

4.framework动态库和静态库的生成和使用

5.库其它知识拾遗和常见问题

    framework分为动态库和静态库两种。动态framework苹果已经开放,但是开发者开发过程中只能运用系统自带的系统动态framework,例如UIKit、Foundation等;开发者开发过程中不能运用自定义的动态库,当然在开发调试过程中可以用,但是提交后在苹果审核时,如果用了自定义的动态库,会被驳回;因此我们用的三方框架都是静态库,开发过程中也只是自定义静态库,达到共享代码的目的。

    Xcode->File->New->Project创建工程

创建framework工程选项
编辑framework工程名称

    动态库静态库设置:MyFramework->targets->Build Settings->Mach_O Type设置:默认值为Dynamic Library动态库,Static Library静态库

动态和静态设置

    兼容设备设置:设置值详情见iOS中关于库的基本知识中的iOS设备分类

    开发环境模式设置:设置值详情见iOS中关于库的基本知识中的根据开发环境的不同可以分为四种文件版本

打开环境模式设置
设置环境模式

    自定义工程代码:


+ (void)logMethodName {

NSLog(@"TextObject_logFunctionName");

}

+ (UIImage *)getLibraryBundleImage {

// 获取Resource.bundle文件夹路径

NSString * rescourcePath = [[NSBundle mainBundle] pathForResource:@"Resource" ofType:@"bundle"];

// 获取Resource.bundle文件夹bundle对象

NSBundle * bundle =[NSBundle bundleWithPath:rescourcePath];

// 获取Resource.bundle文件夹中调用图片的路径

NSString * imagePath = [bundle pathForResource:@"null_page" ofType:@"png"];

// 获取图片

UIImage * image = [UIImage imageWithContentsOfFile:imagePath];

return image;

}


自定义工程代码
可访问设置
新建Bundle资源文件选项
新建Bundle资源文件

    设置Bundle使用的平台模式,这里使用iOS平台。

Bundle资源文件平台设置

    Bundle资源文件夹参数COMBINE_HIDPI_IMAGES默认为YES,即图片是tiff格式;修改该参数为NO。

Bundle资源文件图片类型设置

    如下图右侧箭头为选择编译环境,选择上面箭头为发布环境,下面的箭头为调试环境;选择左侧上面箭头为生成库文件,下面箭头为生成Bundle资源文件;选择后command+b编译成功,生成对应的文件。

framework库的生成
生成的framework库和bundle资源文件

    framework调试和发布环境文件的两种合并,其实是Debug-iphonesimulator文件夹和Debug-iphoneos文件夹下的MyFramework可执行的文件的合并。

需要合并的文件

用终端命令合成:-lipo -create 文件名1 文件名2 -output 合成的文件名

用脚本合成:

脚本代码:


 # Sets the target folders and the final framework product. 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}/" # 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}" 

脚本合成
导入framework库和bundle文件

    详情见iOS中关于库的基本知识的“Other Linker Flags标记值的说明”。

设置导入framework库的工程

   静态库运行成功,但是动态库运行出错。动态库编译时和静态库是不同的,详情见iOS中关于库的基本知识的“动态库和静态库使用中的不同”。

动态库运行出错

    解决方法。

动态库 添加copy

    静态库调用代码成功。

静态库调用代码

    动态库调用代码会出现警告“missing submodule”,解决方法是在动态库的同名.h文件中加入#import "警告的文件名",重新运行警告消失;在生成动态库时,应将供外界访问的文件在动态库的同名.h文件进行声明。

出现警告
警告消失
到此这篇动态库和静态库调用方法(动态库和静态库的使用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • bt136和bt137(bt136和bt137能互换吗)2025-03-27 11:00:07
  • u盘镜像系统安装方法(u盘镜像安装重装系统步骤图解)2025-03-27 11:00:07
  • ipv6全球单播地址获取不到网关(ipv6全球单播地址获取不到网关怎么办)2025-03-27 11:00:07
  • ffmpeg查看视频帧率(ffmpeg视频帧率与音频的关系)2025-03-27 11:00:07
  • 打开目录文件夹(打开目录文件夹的快捷键)2025-03-27 11:00:07
  • 电脑时钟代码怎么设置(电脑时钟代码怎么设置的)2025-03-27 11:00:07
  • 圈1符号用输入法怎么打(圈1符号怎么打出来)2025-03-27 11:00:07
  • sin miedo什么意思(sinfonia是什么意思)2025-03-27 11:00:07
  • 最终幻想7战斗系统无聊(最终幻想7战斗可以换装吗)2025-03-27 11:00:07
  • ad9910芯片手册(ad9009芯片)2025-03-27 11:00:07
  • 全屏图片