转自:http://blog.youkuaiyun.com/fengsh998/article/details/8290687
OS中静态库的方式有*.a或*.framework。个人感觉不论是.a还是.framework其实无外于对源码进行隐藏的一种表现方式。 许多时在项目中,往往对于积累沉垫下来很少改动的代码(高内聚,低耦合的代码),为了增加重用性,常常都进行库的封装好存. 新建好的工程如下图:
图中默认情况下建的是.a的静态库工程。可以从products中看到最终输出的是libfmwksqlite.a的静态库文件。 由于IOS直接生成提.a静态库,因此要手动把库修改为framework。因此需要把当前的targets文件删除。如图:
2、把原来的targets删除了,需要新建一个新的targets。file-new-targets
弹出的框中选择mac osx下的framework&library中的bundle (因为IOS TOUCH中没有Bundle所在使用MAC下的Bundle来改制),输入product name,这里可以输入和工程相同的名称(这里可以减少一点点麻烦),个人不太喜欢按步造班,所以自己另取一个targets名称,这里为tgfwmk。
新建完成如图:
把新建的target产生的多余文件删除,当前没有用到所以就删除咯。只需要保留targets的配置文件即可。删除后如图:
文件夹中的文件:
将新建的targets进行修改几个必要项。(关键设置) 详细步骤: 1、选中tgfmwk中的Build settings 。 2、修改Build settings页中的Base SDK的值为least ios5.0(注我的SDK是5.0的,根据按装的SDK来定) 3、修改Build settings页中的Architectures 的值改为Standard(armv7) 4、修改Build settings页中的Build Active Architecture only 值为NO 5、修改Build settings页中的Link With Standard Libraries 值改为NO 6、修改Build settings页中的Mach-O Type 为Relocatable Object File 7、修改Build settings页中的Wrapper Extension 为framework 8、修改Build settings页中的Dead Code Stripping 为NO (下面的步聚是由于新建的targets文与项目名称不对应导致要手动修改的地方,如果是同名就不用理会下面的步骤了) 9、修改Build settings页中的info.plist File 为fmwksqlite/tgfmwk-info.plist未改前为tgfmwk/tgfmwk-info.plist(因为我将这个文件移到了项目目录下) 10、修改Build settings页中的GCC_PREFIX_HEADER改为fmwksqlite/fmwksqlite-Prefix.pch未改前为tgfmwk/tgfmwk-Prefix.pch
以上修改完成后就可以选模拟器平台运行还是设备运行了。这里先选模拟器(iphonesimulator)点击RUN。正常情况下应该是运行成功。 但这个时候只是产生了一个空的tgfmwk.framework里面并没有库文件和头文件输出。 下面是如何添加类文件以编译产生相应的库文件。 把默认的fmwksqlite.h 和fmwksqlite.m文件删除。添加ocsqlite.h和ocsqlite.m文件进来
3、添加编译文件和头文件。操作如下: 打开tgfmwk下的build parses点击add bulids parses 弹出中选择add copy headers
然后在头文件项中添加ocsqlite.h 为public headers
上面OK之后就可以编译,成功后,将会在Build/products/debug-iphonesimulator/tgfmwk.framework下产生库文件。
输出后可以在DeviceData/fmwksqlite/build/products/
下面是合并的关键, 先来看一下framework中的tgfmwk 打开终端。输入pwd 先看一下当前所在的目当路径。使用ls 查看当前目录下的文件夹。 cd /users/[用户名]/Desktop/fmwksqlite/DerivedData/fmwksqlite/build/products/release-iphoneos/tgfmwk.framework 然后使用lipo -info tgfmwk 查看一下库的信息。 看到输出Non-fat file: tgfmwk is architecture: armv7 这里表明只支持真机。
同样的再来看看模拟器的。 cd /users/[用户名]/Desktop/fmwksqlite/DerivedData/fmwksqlite/build/products/release-iphonesimulator/tgfmwk.framework 然后使用lipo -info tgfmwk 查看一下库的信息。 看到输出Non-fat file: tgfmwk is architecture: i386
可见要想真机和模拟器都可以使用该framework需要将这两个版本的tgfmwk文件进行合并。 使用命令lipo -create xxxx/tgfmwk