framework新建与使用
本文主要是根据自己的实践,对网上资料进行整理
参考文章:
1、http://www.jianshu.com/p/6c033c39884a
2、http://www.tuicool.com/articles/UZnEniu
3、http://blog.****.net/zzzzzdddddxxxxx/article/details/51149243
以下过程请根据实际情况进行修改
1、framework新建
我们将自己自定义的一个控件制作成framwork供别人使用为例,来展示framework的制作过程。
打开Xcode创建一个framework工程。
修改一些配置信息,生成支持所有架构的版本。
将之前写好的控件源文件拖进工程,并做一些配置,主要是配置一下那些文件要暴露给别人使用,一般头文件需要暴露,实现文件不需要。
最后一个设定步骤,是要加入一段Run Script,用来将「仿真器版本Framework」、「实机版本Framework」,整合输出为单一Framework。
参考数据
用lipo合并模拟器Framework与真机Framework - IOS开发学习博客
Run Script
if["${ACTION}"="build"]thenINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.frameworkDEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.frameworkSIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.frameworkif[-d"${INSTALL_DIR}"]thenrm -rf"${INSTALL_DIR}"fimkdir -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
仿真器版本 command+B
实机版本 command+B
经过上面2次编译,自动产出合并版本的MyFramework.framework ,在终端打开该目录,通过 lipo -info MyFramework.framework/MyFramework ,查看支持的版本信息。
使用
接着开启XCode来建立一个新项目:「MyAPP」,专案类型选择为Single View Application。这个项目用来说明,如何使用封装为Framework的程序代码。
专案类型
接着将Framework复制一份,放到MyAPP的专案文件夹内。XCode编译的时候,会去这个路径底下找寻Framework。其实放项目任意文件夹即可,可以通过add other加入或设置framework搜索路径。
Framework档案路径
回到XCode的项目属性页面,把Framework的参考加入到项目里。
加入参考
接着在项目预设的ViewController.m文件里面,加入下列程序来使用Framework里面所封装的程序代码。加入Framework参考#import <myframework/myframework.h>
到此基本结束。
后记:
XCode编译的时候,会去特定路径底下搜寻Framework来加入编译。如果需要增加或修改参考路径,可以透过调整Build Setting里的Framework Search Paths参数来变更。
Framework Search Paths
ios开发中报错处理--include of non-modular header inside XXXX
解决方案:在使用framework工程中设置
1.把target 下Build Settings 中Allow Non-modular includes in Framework Modules 选项卡设为yes。