IOS 4.2 编写真机和模拟器通用的framework(静态库)

IOS中静态库的方式有*.a或*.framework。个人感觉不论是.a还是.framework其实无外于对源码进行隐藏的一种表现方式。

许多时在项目中,往往对于积累沉垫下来很少改动的代码(高内聚,低耦合的代码),为了增加重用性,常常都进行库的封装好存。

 

在WIN上封装为DLL(动),LIB(静)。在LINUX上封装为.SO(动),.a(静)。

 

便于介绍对类库的framework编写,这里将http://blog.csdn.net/fengsh998/article/details/8278978中的ocsqlite.h和ocsqlite.m的源码制作成静态库(framework)

 

废话少说,开始编写IOS的framework类库。

平台:VM+MAC OS10.6+XCode4.2

 

1、新建一个静态库工程。file--new--project,弹出框中选择Ios--framework&library中的cocoa touch static library.点击NEXT。输入product name

这里为fmwksqlite

新建好的工程如下图:

图中默认情况下建的是.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下产生库文件。

 

到这里一个模拟器版本的framework就制作OK。使用时只需要将tgfmwk.framework整个文件夹COPY到相应的项目下就可以使用了。正真发布时最好使用Release版本。

 

下面介绍一下如何使用整个framework 即可模拟器使用也可以真机使用。

演示前先输入iphoneos(真机)和iphonesimulator(模拟器)版本的tgfmwk.framework,这里使用的是Release版。(product--edit scheme)

输出后可以在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  xxxxx/tgfmwk  -output  tgfmwknew

其中xxxx表示路径,一个是真机的tgfmwk所在路径,一个是模拟器tgfmwk文件所在路径,然后输出tgfmwknew新的文件。输出后,只需要将这个tgfmwknew重命名为tgfmwk然后复盖原来的tgfmwk 文件即可。把复盖后的这个tgfmwk.framework考出来到具体使用的项目就可以实现真机和模拟器通用的framework 了。

看一下tgfmwknew的信息。

显示:Architectures in the fat file: tgfmwknew are : armv7  i386

可见这个合并的文件已具备了armv7(真机)和i386(虚拟机)的能力。

 

 

由于OCSqlite这个类使用到了libsqlite3.dylib ,所在在调用framework库时也需要添加这个动态库。

本节完,下节将介绍.a的静态库。.a的比framework相对少了不少工作。呵呵。



























iOS framework 制作教程   

XCode4下的制作:可参考网上资料: http://blog.csdn.net/pjk1129/article/details/7255163 
XCode3.2.5下的制作:
我们使用一种变通的方法来制作 iOS framework,废话不多说,上步骤:

1.打开Xcode创建一个“Cocoa Touch Static Library”工程,并删除现有的target.

2.右键project选择添加New Target,在弹出的窗口中找到Cocoa ,在Cocoa右侧窗口中选择“Loadable Bundle”。
注意:到这步的时候不要选择framework,应为framework是MAC OS上的,iOS是不支持的,但是iOS 支持“Loadable Bundle(cfbundle)”

3.target 上右键get Info 在Build  Settings下面设置下面的5项内容:
a.搜索Wrapper Extension,把默认的bundle改成framework.
b.修改Mach-O Type 为Relocatable Object File.
c.关闭Dead Code Stripping ,把勾去掉!
d.关闭Link With Standard Libraries.
e.移除所有关于“AppKit”  和  “Foundation”的参考,删除“Other Linker Flags”的所有值,并删除“GCC_PREFIX_HEADER“的值!

4.在frameworks Info.plist文件中将Bundle OS Type code的值BNDL改为:FMWK,并且在target的 get info窗口中的Properties标签栏下也将Type改为FMWK。


5.在工程中添加你的代码。
例如:我们添加一个类
#import <Foundation/Foundation.h>

@interface Help : NSObject {

}

- (void)show;

@end

#import "Help.h"


@implementation Help

- (void)show
{
    NSLog(@"framework!!!");
}

@end


6.在target上右键Add---New Build Phase---New Copy Headers Build Phase,此时target下面会多出一个灰色的文件夹—Copy Headers。

7.然后将我们刚才添加的Help类的.h文件从上面拖到下面的Copy Headers中,再在该文件夹上右键—Set Role---Public.

8.从上面将所有要打进framework的.m文件拖到target下的Compile Sources文件夹里。

9.编译,如果出错,那就在  Build下面的 将“Other Linker Flags “设置为 –ObjC 、-all_load、-lxml2,不要写在一起,请一项项添加。

注意:如果编译出现大量的错误,说明你没有删除“AppKit”  和  “Foundation”的参考,

编译后参考:



在build/Debug-iphonesimulator下面出现一个framework文件夹:

  


使用我们刚才制作的framework

在新的工程中导入framework


我们把刚才制作的kibernet.framework拷贝到新的工程的目录下,选择kibernet.framework文件夹

添加后的效果图



使用framework中的类:
导入头文件



ViewDid Load中测试一下:

    
输出结果:

 


///有时间 来做一个 模拟器和真机通用的framnework///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值