iOS程序猿之Framework 的创建与使用
来源:互联网 发布:4核8g服务器mysql配置 编辑:程序博客网 时间:2024/06/05 10:02
iOS Framework 的创建与使用
创建
基本设置
创建工程,选择cocoaTouch Framework
设置Mach-O Type为Static Library. (默认是Dynamic Library 动态库类型)
支持bitcode
需要在TAGETS的Build setting中搜索Other C Flags,添加命令“-fembed-bitcode”
如果没有加cflags可能会在使用的时候出现错误. 错误提示信息关键字如下:...does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting EnABLE_BITCODE), obtain an updated library from the vendor, ...
添加armv7s
在Architectures下增加armv7s,并选中。将Build Active Architecture Only 设置为NO
设置Header
将你要公开的头文件移动到Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。然后需要在HelloWorld.h(创建项目时生成的同名头文件)中将所有要公开的.h文件引入
打包
方法一 终端命令
在Debug和Release模式下分别执行以下步骤,生成Debug和Release下使用的framework
- 选中模拟器,编译程序
- 选中测试机,编译程序
- 在finder找到刚刚编译生成的framework,选中图中所标示的framework,然后右键show in finder。找到下图中所示的Test文件,一个是Debug-iphoneos(真机)下的,一个是Debug-iphonesimulator(模拟器)下的。
- 通过终端命令将两个framework合为一个模拟器和真机都可使用的framework:
---打开控制台输入 lipo -create iphoneos下frameworkTest的路径 simulator下frameworkTest的路径 -output 新的路径---
这样就完成了模拟器和真机版本的****合并,新路径下的HelloWorldFile就是你合并后的文件,将这个文件名字改成和你未合并之前的HelloWorld一样的名字,放到framework文件夹下,替换掉原来的HelloWorld文件。
将修改后的framework拷贝出来保存,这就是我们最终制作的framework。
方法2 脚本
- 选中TARGETS下的工程,点击上方的Editor,选择Add Target创建一个Aggregate.
- Xcode8中选择Cross-platform -> Other -> Aggregate,点击Next创建
嵌入脚本。选中刚刚创建的Aggregate,然后选中右侧的Build Phases,点击左下方加号,选择New Run Script Phase
将如下脚本负责进去
# Sets the target folders and the final framework product.# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME# 例如: FMK_NAME = "MyFramework"FMK_NAME=${PROJECT_NAME}# Install dir will be the final output to the framework.# The following line create it in the root folder of the current project.INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework# Working dir will be deleted after the framework creation.WRK_DIR=buildDEVICE_DIR=${WRK_DIR}/${CONFIGURATION}-iphoneos/${FMK_NAME}.frameworkSIMULATOR_DIR=${WRK_DIR}/${CONFIGURATION}-iphonesimulator/${FMK_NAME}.framework# -configuration ${CONFIGURATION}# Clean and Building both architectures.xcodebuild -configuration "${CONFIGURATION}" -target "${FMK_NAME}" -sdk iphoneos clean buildxcodebuild -configuration "${CONFIGURATION}" -target "${FMK_NAME}" -sdk iphonesimulator clean build# Cleaning the oldest.if [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fimkdir -p "${INSTALL_DIR}"cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"# Uses the Lipo Tool to merge both binary fileslipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"rm -r "${WRK_DIR}"open "${SRCROOT}/Products/"echo ${FMK_NAME}
- 选择(Debug / Release)模式,按下图编译出对应模式的framework
使用
创建Framework存放文件夹
- 在使用该Framework的项目文件下, 创建Frameworks文件夹,包含Debug和Release两个子文件夹分别存放两种模式下的Framework
- 分别将两个文件夹下的Framework文件导入工程
- 导入文件后,在Build Settings -> Search Paths -> Framework Search Paths, 分别设置Debug 和 Release 模式下引入framework的相对路径(要删除多余的路径,eg: Debug模式下删除Release文件夹的路径)
到此就可以在项目中导入该Framework进行开发了!
注意事项
- 如果你用了Category,别人在用你的Framework时会发生崩溃。这时别人在引用时需要在工程中other linker flags中添加-objC如果依然有问题,再添加-all_load。
- 带有图片资源的需要把图片打包成Bundle文件,和framework一起拷贝到相应的项目中。
- 在public的类中引用了private的类,使用时会报错,说找不到那个private类。 可以把 import “private.h” 放到 public 的.m中,这样就不会报错了
- iOS程序猿之Framework 的创建与使用
- iOS Framework的创建
- iOS开发之NewsstandKit.framework的使用
- iOS 开发 之 创建你自已的 Framework
- Cocoa创建与使用Framework
- ios之单例类的创建实现与使用技巧总结
- iOS程序猿之JSONKit的使用
- [iOS] 建立与使用Framework
- iOS创建framework,并使用cocoapods管理
- Framework的创建与合并
- 系列:iOS开发-framework的制作与使用
- iOS-Framework-ASIHTTPRequest的使用
- Entity Framework创建与使用(图)
- IOS:导入自己创建的framework出错
- iOS——创建你自己的Framework
- iOS开发 UIDatePicker的创建与使用
- iOS开发 UIAlertController的创建与使用
- iOS - 静态库的创建与使用
- 综合Demo
- C++面试基础
- 1042. Shuffling Machine (20)
- Android_设置动画效果的两种方式
- opencv总结2
- iOS程序猿之Framework 的创建与使用
- java 语法基础 前缀++,和后缀++
- HashCode的作用原理和实例解析
- HDU5100 Chessboard【组合数学】
- mysql 查询表,视图,触发器,函数,存储过程
- A very hard mathematic problem HDU
- IAP15W4K58S4 端口配置
- 库柏裕华SDK获取视频
- 更好