[iOS] 建立与使用Framework
[iOS] 建立与使用Framework
前言
使用XCode开发iOS项目时,开发人员可以将可重用的程序代码,封装为Library或是Framework来提供其他开发人员使用。这两种封装方式在使用的时候:Library需要将.a封装档与所有公开的.h档提供给使用者加入项目,而Framework则只需要将.framework封装档提供给使用者加入项目。就使用情景来说,提供单一.framework封装档会显得比较简单方便。本篇文章介绍如何将可重用的程序代码封装为Framework,主要为自己留个纪录,也希望能帮助到有需要的开发人员。
建立
首先开启XCode来建立一个新项目:「MyFramework」,专案类型选择为Cocoa Touch Framework。这个项目用来封装可重用的程序代码,提供其他开发人员使用。
专案类型
接着在MyFramework加入一个新类别:「MyClass」,做为提供给其他开发人员使用的程序代码。
MyClass.h
#import <Foundation/Foundation.h> @interface MyClass : NSObject // methods
- (NSString*) getMessage; @end
MyClass.m
#import "MyClass.h" @implementation MyClass // methods
- (NSString*) getMessage {
return @"Clark";
} @end
建立好MyClass之后,接着要把MyClass.h设定为Public,让使用的开发人员可以加入类别的.h档参考。
Public Headers
接着在项目预设的MyFramework.h里面加入MyClass.h档的参考,让后续使用的开发人员只要import单一个MyFramework.h檔,就可以引用到Framework里Public出来的.h檔。
MyFramework.h
#import <UIKit/UIKit.h> //! Project version number for MyFramework.
FOUNDATION_EXPORT double MyFrameworkVersionNumber; //! Project version string for MyFramework.
FOUNDATION_EXPORT const unsigned char MyFrameworkVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import <MyFramework/PublicHeader.h>
#import "MyClass.h"
最后一个设定步骤,是要加入一段Run Script,用来将「仿真器版本Framework」、「实机版本Framework」,整合输出为单一Framework。
参考数据
Run Script
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi mkdir -p "${INSTALL_DIR}" cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers" lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}" #open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
Setting
完成设定步骤后,分别Build两个不同版本的Framework:仿真器版本、实机版本。接着,设定在建置作业中的Run Script,就会将两个版本的Framework,整合输出为单一的MyFramework.framework
仿真器版本
实机版本
产出MyFramework.framework
使用
接着开启XCode来建立一个新项目:「MyAPP」,专案类型选择为Single View Application。这个项目用来说明,如何使用封装为Framework的程序代码。
专案类型
再来将Framework复制一份,放到MyAPP的专案文件夹内。XCode编译的时候,会去这个路径底下找寻Framework。
Framework档案路径
回到XCode的项目属性页面,把Framework的参考加入到项目里。
加入参考
接着在项目预设的ViewController.m文件里面,加入下列程序来使用Framework里面所封装的程序代码。
加入Framework参考
#import <MyFramework/MyFramework.h>
使用Framework中的程序代码
// test
MyClass* x = [[MyClass alloc] init];
NSString* message = [x getMessage];
完整的ViewController.m
#import <MyFramework/MyFramework.h>
#import "ViewController.h" @implementation ViewController - (void)viewDidLoad { // super
[super viewDidLoad]; // test
MyClass* x = [[MyClass alloc] init];
NSString* message = [x getMessage]; // alert
[[[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
} @end
最后,执行MyAPP。可以在执行画面上,看到一个Alert窗口显示从Framework取得的讯息内容,这也就完成了使用Framework的相关开发步骤。
显示回传讯息
后记
XCode编译的时候,会去特定路径底下搜寻Framework来加入编译。如果需要增加或修改参考路径,可以透过调整Build Setting里的Framework Search Paths参数来变更。
Framework Search Paths
范例下载
范例程序代码:下载地址
[iOS] 建立与使用Framework的更多相关文章
- iOS+Swift: 使用MessageUI.framework发送短信
在iOS中, 可以使用MessageUI.framework框架发送短信, 步骤如下: 代码下载http://git.oschina.net/yao_yu/swift_cnblogs_samples/ ...
- iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...
- iOS开发之通过Framework建立项目依赖
https://www.jianshu.com/p/d146db167bf3 项目开发时经常会遇到个别模块想打包成framework的情况,传统的打包方式太繁琐,反复测试时很麻烦,不如一个项目管理来得 ...
- IOS静态库和Framework区别
一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系 ...
- 【转】iOS库 .a与.framework区别
转自:http://blog.csdn.net/lvxiangan/article/details/43115131 一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态 ...
- iOS库--.a与.framework
一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的差别? 静态库:链接时完整地拷贝至可运行文件里.被多次使用就有多份冗余拷贝. 动态库:链接时不复制.程序执行时由系 ...
- iOS静态库及Framework 创建
本文转自cocoachina,尊重作者的汗水. 讲述的非常透彻,有需要的朋友可以阅读实践.转载请注明出处 //=================以下留着备份==================// 在 ...
- iOS之 opencv3.0.framework
本文章的目的是从源代码包中编译出opencv2.framework供IOS开发使用. 基本上是按照http://docs.opencv.org/3.0-beta/doc/tutorials/intro ...
- WWDC2014之iOS使用动态库 framework【转】
from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...
随机推荐
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
- iBatis + SQL Server 项目开发实战小结
几年前跟随项目经理做的一个ERP小项目,自己业余时间整理的开发手册,供参考. 开发环境配置:编程环境为Microsoft Visual Studio 2010,数据库是SQL Server 2008 ...
- JSP网站开发基础总结《十二》
前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握.具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文 ...
- Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)
XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...
- maven -- 学习笔记(二)之setting.xml配置说明(备忘)
setting.xml配置说明,learn from:http://pengqb.javaeye.com,http://blog.csdn.net/mypop/article/details/6146 ...
- File Type Icons – 免费扁平设计风格文件类型图标集
这套扁平风格图标集包含一组62个不同的文件类型图标,有 AI,ICO和 PNG 三种格式.他们采用长阴影模式的扁平化设计,看起来非常整齐和现代化.这些图标是完全免费的,可以用于商业项目. 您可能感兴趣 ...
- SQL Server安全(4/11):许可(Permissions)
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
- python基础知识理解
一.概述 看了一天的python基础语法,基本对python语法有了一个大概的了解(其实之前断断续续也看过python),学习网址:Python 基础教程.因为之前我学过C++,因此在学习python ...
- PyQt写的五子棋
技术路线 GUI的实现 使用PyQt技术作为基础.PyQt是一个支持多平台的客户端开发SDK,使用它实现的客户端可以运行在目前几乎所有主流平台之上. 使用PyQt,Qt设计器实现UI,通过pyuic4 ...
- 职责链模式(chain of responsibility)
一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...