博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Xcode中创建静态库,并使用Target支持不同平台
阅读量:5749 次
发布时间:2019-06-18

本文共 1931 字,大约阅读时间需要 6 分钟。

      在项目的进行中,即使很忙的项目,花一定的时间重构项目都不失为一件必须做的事。即使没到生死攸关也和项目的健康发展和按时提交

以及老生常谈的后期维护都有很大的关系。

      在iOS项目开发中,重用代码的方法有很多种。一般来说,你可以把代码以Template的方式提升成基类子类的形式或者以Strategy的方式提升成

组成的方式。但是当代码量相当大,且在多个项目中共用同一批代码文件的时候,就需要把这些代码组成静态库的方式服用了(在iOS项目中只能使用静态库)。

也就是说把这些公用代码打包成静态库和可用的头文件分发给需要用到这些代码的Developer手中。或者用Xcode模板,把你的代码打包成framework,就像系统

提供的SDK一样,其中就包含了静态库和对应的public的头文件。点击获取这个Xcode模板。

      这里主要强调静态库的创建。在创建静态库的时候,如果你选择了schema->iPhone (Version) Simulator,之后编译。你得到的静态库是不能真机上使用的。

of course如果你不走这一步,那么你得到的静态库又是不能在模拟器中使用的。这时就需要用到xcode的target功能了。

      不同的target之间可以共享受代码。也就是对应于真机和模拟器创建不同的target,之后编出对应不同平台的静态库。具体做法:

首先创建一个静态库的项目。

      

我这里就取名叫Test123。之后你会看到如下的项目结构

      

你可以在项目中按照需要做添加修改等操作。

这个时候就需要再建另外的一个target。点击你的项目,右击已经存在的target的名字,在弹出菜单中选择duplicate

就会生成另外的一个target。而且代码全部都会reference到之前的代码上。

但是,默认生成的target名字一般不是你想要的。这里duplicate出来的target会叫做Test123 copy。这里我们需要默认生成的target

支持模拟器,第二个target支持真机。所有需要给这个库加一个后缀标识出来,Test123-ios。这个名字在对应于这个target的Build Settings中修改。

如图:

在图中你会看到第二个target叫Test123-other,如果这对生成的库名称没有影响。如果你不喜欢,可以双击修改名字。

      这个时候,两个target就已经建好了。只需要针对不同的平台编译就可以的到你想要的静态库。

首先在Schema中选择第一个target,然后选择iPhone(iPad也可以)Simulator。然后编译。

 

你就会得到一个支持模拟器的静态库。

然后选择第二个target,选择iOS Device,编译,你会得到一个支持真机的静态库。

      打开Organizer,不知道在哪儿?好吧,在Xcode工具栏的最右边或者一起按下shift+cmd+2你就会看到了。

在organizer中选择Projects,然后点红圈的地方。你就会看到你的项目的生成目录。

项目会根据不同的平台生成不同的目录。虽然这些目录都是Debug开头的。但是也可以也Release开头。

毕竟,如果你只是想分发你的静态库给其他的Developer用不能给他们Debug版的。

还是在刚才选择模拟器的地方,这次选择Edit Scheme。

在Run里选择Info tab下的Build Configuration,然后选Release。之后再编译就可以了。

      全文到此为止。记得,在使用静态库的时候把必要的头文件加到调用项目中。你还可以在对应的target的Building Settings的Prefix Header中设置对应的pch文件。

同时可以使用lipo命令可以把生成的两种平台的静态库打包成一个Universal静态库。简单介绍下:使用Terminal跳转到刚刚说的目录下,然后键入如下命令

lipo –create Release-iphoneos/libiphone.a Debig-iphonesimulator/libiphone.a –output libiphone.a

记得根据实际静态库名称修改命令中的名称。网上很多介绍这个那个的方法配置来配置去很是麻烦,还不如这样简单可靠!

 

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2013/05/03/3055117.html
你可能感兴趣的文章
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
单元测试
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
用Bootstrap写一份简历
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
从零开始学习IOS,(UILabel控件)详细使用和特殊效果
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
7、设计模式-创建型模式-建造者模式
查看>>
我国古代的勾股定理
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>