iOS 静态库制作及使用问题

参考:http://blog.163.com/const_yixinyiyi/blog/static/180088172201211113333882/

静态库使用目标:(.a )

> 自己制作一个静态库(可以使用)(前三步)

> 制作模拟器版本和真机版本 (第四步)

> 合并两个版本 (第六步)

创建静态库步骤:

1. 选择要创建的文件类型:Cocoa Touch Static Library (.a文件)

2.将需要封装的文件导入其中

选择工程找到target(静态库) -> Build Phases -> Compile Sources中添加需要封装的类

3. 设置编译配置

编译EditSchem->选择Run,选择info,设置其Build Configuration :release/debug

选择工程:Project->Build Setting -> Code Signing -> Code Signing Identity 选择其与上面相对应的,release或是debug,设置其为iOS Developer 【注意开始选的是Project不是Targets】

4. 选择project->iOS Device,点击运行后会生成arm6,arm7静态库,【注:此时生成的静态库是适用于真机上的,并不适合用在模拟器】如果需要生成i386的静态库【模拟器用】可以通过选择模拟器再运行一次,【不能用showInFinder打开,不然只是针对真机的】即可在相应DerivedData中相应工程的Build -> Products Debug-iphonesimulator中找到相应的静态库文件。

小技巧:可通过命令 lipo -inof 路径/文件名.a    查看文件是否具备arm 或是 i386的条件

5. 编译成功后便可使用

注:Debug版本与release版本区别在于调试版本与发布版本,深度区别在于其动态库的使用。其都是有相应的模拟器与真机模式的静态库文件。

可能出现的问题:undefine symbols for architecture i386

问题解析: 用错了编译出来的.a lib,在模拟器里面,我们需要的是基于i386架构编译的static lib,但是这个a文件,编译出来其实是arm6 arm7架构的。因为我们使用show in finder指向的是一个ios device的库,并不是i386模拟器下的库,如果想要编译i386的库,就需要注意第4点操作,然后去DerivedData中找到iphonessimulator中的static lib

其实我们打开到Products Debug文件就可以看到里面有两个文件夹:

Release-iphoneos 或Debug-iphoneos :里面的是基于arm6 arm7编译出来的库文件。

Release-iphonesimulator:里面是基于i386编译出来的文件。

6. 将模拟器支持的版本和真机支持的版本合并到一起

lipo -create 路径/模拟器版本.a 路径/真机版本.a -output 想放的路径/静态库名称.a

打包后可查看其支持哪个版本:

lipo -info 路径/合并后的静态库名称.a

结果展示:

li****:Desktop mac$ lipo -info libdemo.a

Architectures in the fat file: libdemo.a are: armv7 i386 arm64

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-19 12:09:03

iOS 静态库制作及使用问题的相关文章

iOS静态库.a文件制作和导入使用

iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Static Library工程. 2.Xcode的参数设置 "Build Active Architecture Only" 设置为"NO" "IOS Deployment Target" 设置为 "IOS 7.0" ,表示支持IOS7

ios开发 静态库制作

IOS程序是由Objective-c语言构成,而是Objective-c语言中每一个类又分成 .h .m 文件.静态库可以将这些程序的类封装成一个.a文件,第三方应用程序只需要拿到这个.a文件和代码对应的.h文件即可使用静态库中封装的方法.总的来说IOS静态库适合去制作第三方提供的SDK,废话不多说了我们直接进正题. 制作静态库 代码如下 1 #import <Foundation/Foundation.h> 2 3 @interface BookModelLib : NSObject 4 {

IOS静态库

如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http://blog.ibireme.com/2013/09/18/create-ios-static-framework/ iOS开发--创建你自己的Framework http://www.cocoachina.com/ios/20150127/11022.html https://www.raywe

iOS 8:【转】封装iOS静态库注意事项

源地址:http://fann.im/blog/2014/01/12/ios-static-library/ 做一个 iOS 静态库需要注意的东西: namespace 冲突.静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误,因为有两份同样的第三方库.解决办法就是把用到的第三方库加上自定义前缀,包括类名.delegate 协议.常量名,尤其需要注意 Category 的方法名要修改. 封装静态库的时候应尽量避免引入重量级第三方库,多自己进

iOS开发——装逼技术精选&amp;全面了解 iOS 静态库开发

全面了解 iOS 静态库开发 简介 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟.百度地图等第三方的sdk) 静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 静态库和动态库的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统

Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。

http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加xib和图片.完美解决方案. 在cocoachina呆挺长时间了.没什么大贡献.就整理了这个,希望对大家有帮助.绝对原创.呵呵. 1.创建一个工程,或者在原有的工程上进行.不在列举.2.在原有工程上添加一个静态库 2.1.选择OS X 的Bundle.因为Xcode6.1中iOS里没有Bundle.

ios静态库的使用

ios静态库的使用 2014-03-11 22:24 3906人阅读 评论(0) 收藏 举报 ios的静态库文件是*.a,如果需要使用它,我今天学的简单的方法,可通过,简单说说,如果有一个A手机项目,一个B的静态库项目,A想使用B.a,按以下的步骤: 1.在A项目里面拖进B项目.在B的product下面会看见红色的B.a,表示还没有编译通过(在工程设置里添加上你需要导出的.m文件). 2.选择好需要编译的对象,B下的某模拟器或者是B下的真机上进行编译(模拟器上生成的静态库和真机上生成的不能混用)

iOS开发&gt;学无止境 - 全面了解 iOS 静态库开发

简介 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟.百度地图等第三方的sdk) 静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 静态库和动态库的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省

iOS 静态库,动态库与 Framework

iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件.另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间. 上面提到库在使用的时候需要