在iOS开发中使用静态库(Static Library)

简介: 引言:静态库是一个(.a)为后缀的文件,它由Xcode编译生成.并且,库中只能存放代码,如果编译静态库的工程中有其他资源是无法一起编译到静态库中.静态库有点类似Windows中的Dll文件.

引言:

静态库是一个(.a)为后缀的文件,它由Xcode编译生成.并且,库中只能存放代码,如果编译静态库的工程中有其他资源是无法一起编译到静态库中.
静态库有点类似Windows中的Dll文件.做过Windows桌面应用的人应该很熟悉.静态库出现的主要目的是为了让代码可以在多个地方重用.
此篇主要记录在iOS中使用静态库时遇到的问题汇总和解决方案.




如何创建一个静态库:




1:主工程关联静态库具体步骤

一:让静态库与项目工程关联起来


二:让项目工程写书写代码时,能够得带静态库中的头文件提示


三:为保证在修改静态库中的代码编译运行后能够每次都取用最新的静态库而进行如下设置(非必要设置)


Full Path 需要选择 DerivedData 文件夹里面 具体编译后所生成的 静态库文件,这样可以保证每次都使用最新的静态库文件 


四:Library Target -> Build Settings -> Build Active Architecture Only

此项在Debug 和Release 模式下 需要设置 为 NO  否则会出现 在使用库里面的类文件时  找不到的错误警告


二:解决静态库无法使用资源文件的方式:

首先,所有的资源文件都依旧依附在静态库中,然后对需要使用的工程传入资源文件的引用即可.

将需要使用的资源文件拖动到工程中以后出现如下图中的设置选项:


三:静态库使用其他静态库的资源时,可直接设置 Header Search Path 即可,前提保证主工程都引用了这些静态库

四:解决在静态库中 使用  Category(类别)  产生的Crash 

在调用静态库的主工程中进行如下设置即可解决问题:

Project->Build Settings->Other Linker Flags   添加值:  -all_load

注:这种设置方法会让所有与主工程有关的静态库和框架都加载其中的Category.

如图:


参考文章:

http://blog.csdn.net/leonpengweicn/article/details/6799994

Category 的使用参考:

http://blog.csdn.net/sanpintian/article/details/7406180

http://www.54xue.com/w/70/n-30670.html

如果要在类别中保存变量,可以参考以下文章:

http://www.cnblogs.com/liping13599168/archive/2012/09/13/2682664.html


解决讯飞语音框架导入后产生编译不通过的解决方案:(将静态库单一设置其加载Category).

参考帖子:

http://dev.voicecloud.cn/bbs/forum.php?mod=viewthread&tid=4154&extra=&page=1

1.去掉-ObjC -all_load参数(这个参数会强制所有的静态链接库都加载其中的category);
2.改为逐一加载Three20的各个静态库,即修改链接参数(Other Linker Flag)为如下形式:
-force_load $(BUILT_PRODUCTS_DIR)/libThree20.a 

如下图:




五:如果你将整个文件切换到了其他目录后,XCode编译时可能产生目录找不到的警告,如下图:


解决方法如下:

确定 Library Search Paths 的路径是否指向正确:


六: Unknown class MyClass in Interface Builder file. 的解决办法

设置 Other Linker Flag-all_load 

在使用静态库时,如果没有设置-all_load . 那么主工程在编译时是不会检测是否引用应该引用的框架(framework).

但是使用是没问题的,但是遇到需要框架才能执行的代码会崩溃,另外xib也会报出 找不到相应的类,除非在代码中主动调用.

七:静态库中的资源使用和管理的最佳解决方案.

使用Bundle捆绑包的方式来使用和管理资源.

步骤如下:

1:新建一个文件夹,将其命名为xxx.bundle. 以后  Mac自定识别到并标识为捆绑包.


2:将静态库使用的相关资源拷贝的bundle里面.


3:抒写代码的时候在路径方面有所改变,如下:

[UIImage imageNamed:@"PullTableView.bundle/arrowhead_up.png"]

4:这一点是我的建议,将捆绑包还是放在静态库的目录里. 然后在拖动到主工程中时,不要选择复制到执行区域.如下图设置即可:




八:当一个项目里面有两个Target都需要使用同一个静态库时,应该这样操作才可以正常使用:


因为在Frameworks里面只会生成一个.a 文件. 所以直接在Target Membership直接勾选即可. 




目录
相关文章
|
8月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
446 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
7月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
177 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
190 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
9月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
268 66
|
7月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
127 0
|
9月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
798 11
|
9月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
290 3
|
存储 iOS开发
IOS之学习笔记三(简单对象和static和单例)
IOS之学习笔记三(简单对象和static和单例)
134 0
|
10月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
9月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。