[iOS] 建立与使用Framework
2015-11-14 03:08
399 查看
[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。
参考数据
用lipo合并模拟器Framework与真机Framework - IOS开发学习博客
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快捷键
- 初学IOS开发记录
- 单例设计模式
- Block语法及页面传值
- OC中栈区与堆区的内存概念解析
- iOS跳转界面时隐藏tabBar的方法
- 欢迎界面iOS——初学者福利
- OC中的栈和堆
- 归档解档
- iOS开发——设计模式
- iOS - NSURLSession实现断点续传下载
- iOS中用在导航控制器的转场动画(pop,push动画)制作
- iOS在程序中控制系统的屏幕亮度
- iOS巅峰之背景添加毛玻璃
- #在蓝懿学习iOS的日子#day18
- iOS如何提高tableView的性能
- iOS开发之自定义键盘附件关闭虚拟键盘
- 【译】17个提升iOS开发效率的必用工具
- ios6.1&ios7&ios9判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题
- ios 使用CFStringTransform将汉字转为拼音