|
~/Library
目录在
lion
下是默认隐藏的。这样很不方便。用一下命令可以使其显示:chflags nohidden
~/Library 成功运动结果:(此处是自己封装自己的
demo
代码)对官方的
uitabbarcontroller
进行自定义。 |
|
%D4%B6%A8%D2%E5 任何转载必须注明出处: http://hi.baidu.com/yunhuaikong/blog/item/c47467f83ac77946242df2ee.html
我这个文档的静态库的开发是基于
Xcode4.2
和
iOS SDK5.0
编写的。Xcode4
跟之前的
Xcode3
还是有不少的差别的。 静态库的编写: |
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
2.工程建立了,我们就需要将我们的文件引入,删除这里自动自成的.h 和.m 文件,将我们自己的文件插入此项目中:如下
3.OK,编译,我们可以在 Products 下面找到我们编译生成的 libUItab.a 这个文件。注意未编译前为红色:左 编译后为黑色: 右
4.ok,在右边 这个 libUItab.a 文件上右键 Open In Finder。这时候我们打开了一个文件夹,里面有一个 libUItab.a。后面我们继续编写一个调用这个 libUItab.a 的 App。
但是这个
App
在编译时候会出错,通过这个错误的解决,说明
Xcode
的一些编译相关的东西。这里,我们在
command
下面根据路径找到这个文件,用这个非常重要的命令查看一下这个
lib
的信息!
打开终端写入如下命令:这是什么?这就是所在的路径
以下均是在自己的 mac 上的路径。你需要将/Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products 替换成你的路径。
路径如下:
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products
我们手动打开这个路径:可以看到如下信息:Debug-iphoneos这个是给真机用的,那我们要给模拟器和真机封装的静态库应该都能用才好。这个下面介绍!!!!!
然后再在终端 打开这个文件:
cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos
命令是:lipo -info libUItab.a,可以看到显示的结果是:Arch
是
Arm7。下面我会具体介绍一下。
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
5.建立一个调用这个 libUITab.a 的应用。应用就很简单了,我们添加刚才 libUITab.a 的*.h文件。 然后在这个工程的 Build Phases 的 Link Binary With Library 里面添加我们刚才拷贝出来的那个 libUITab.a。
6.插入了 h 和 a 文件后,我们就可以在 control 里面调用这个 libUITab.a 函数了。
.m 文件中使用
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
7.OK,编译运行这个应用程序。额。。。错误了。。这个就是这篇文档的关键了。主要就是为了介绍编译静态库相关的东西。
8.可以看到 undefine symbols for architecture i386 这样的错误。其实这个错误原因很简单,就是因为,我们用错了编译出来的 libUITab.a lib,在模拟器里面,我们需要的是基于 i386构架编译的 static lib,但是这个 a 文件,大家还记得前面说的 arm6 arm7 构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device真机的库,并不是 i386 模拟器下的库。那如何编译 i386 的库呢?看见第二张图片的UITab>IOS Device了么?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
这样就可以编译出
i386
下面的库。这个时候我们
show in finder
打开的文件夹还是
ios device
下的库。我们最好自己去那个目录下看一下。这里我们用
command
去查看了一下目录情况,如下:可以看到一个
iphoneos
的目录和一个
simulator
的目录。然后我们再看看这个目录与第
4
条所示的目录有什么不同!!看到了吗?如果你看不到,那就是人品 问题。同样也有一个
libUITab.a
文件。
9.debug-iphoneos 里面的是基于 arm6 arm7 编译出来的库文件。debug-iphonesimulator文件夹下面的是基于 i386 编译出来的文件。
10.有二个库,这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo 将这二个文件打包成一个通用的 a 文件。命令如下:[如果你不会这个,那你就不要做 ios 开发啦!!!!!,这么明白,有的人还得非问这个是什么。1!!!!!! ]
将
/Users/user/Library/Developer/Xcode/DerivedData/UITab-astuyxzptgvifbgmiuyszresdkrc/Build/Products
替换成你的路径。
将/Users/user/Desktop/libUITab.a
替换成合并后的路径,就是合并后你想把它放在哪里。我这里是放在桌面上的!!!!!。
lipo -create "/Users/user/Library/Developer/Xcode/DerivedData/UITab-astuyxzptgvifbgmiuyszresdkrc/Build/Products/Debug-iphonesimulator/libUITab.a" "/Users/user/Library/Developer/Xcode/DerivedData/UITab-astuyxzptgvifbgmiuyszresdkrc/Build/Products/Debug-iphoneos/libUITab.a" -output "/Users/user/Desktop/libUITab.a"
11.打包以后的库文件,我们查看信息,可以看到如下信息:在打此命令前,你必须先
cd
到对应的目录。此处的目录为“
cd /Users/user/Desktop
然后打入如下命令:
http://hi.baidu.com/yunhuaikong
http://hi.baidu.com/yunhuaikong
lipo -info libUITab.a
如上,你已经看到了,它具备了 i386 和 arm7 的条件。 现在我们这个静态库,支持的构架已经是 armv7 i386 了。
12.ok,这个通用库生成后,我们将原来,调用这个库进行替换一下,在进行编译,成功编译。
本文详细介绍如何在Xcode环境中创建、编译并使用iOS静态库。包括如何针对真机和模拟器生成不同架构的库文件,并最终合并为一个通用库。
1606

被折叠的 条评论
为什么被折叠?



