封装.a/Framework(动态,静态)/bundle

一、a库封装

1.1 创建工程

创建a库工程.png

1.2添加需要封装的代码文件

添加需要封装的代码文件.png

1.3 添加对外开放的头文件
选中Targets-Build phases-Copy Files

添加对外开发的头文件.png

选择对外头文件.png

1.5 编译:
通过simulator编译,a库只能在simulator运行。通过真机编译,a库只能在真机运行。
查看库所支持的架构:lipo -info 库的绝对路径

  • 手动合成:
    simulator 库与真机库合成通用库:lipo -create simulator库 真机库 -output 存放合成库绝对路径

  • 编译时自动合成支持所有架构:
    选择工程,添加targets-Aggregate


    添加Aggregate.png

    添加shell脚本区域:


    添加shell脚本命令框.png

    添加shell脚本命令:
    if [ "${ACTION}" = "build" ]
    then

    #要build的target名
    target_Name=${PROJECT_NAME}
      echo "target_Name=${target_Name}"
    
    #build之后的文件夹路径
    build_DIR=${SRCROOT}/build
      echo "build_DIR=${build_DIR}"
    
    #真机build生成的头文件的文件夹路径
    DEVICE_DIR_INCLUDE=${build_DIR}/Release-iphoneos/include/${PROJECT_NAME}
        echo "DEVICE_DIR_INCLUDE=${DEVICE_DIR_INCLUDE}"
    
    #真机build生成的.a文件路径
    DEVICE_DIR_A=${build_DIR}/Release-iphoneos/lib${PROJECT_NAME}.a
      echo "DEVICE_DIR_A=${DEVICE_DIR_A}"
    
    #模拟器build生成的.a文件路径
    SIMULATOR_DIR_A=${build_DIR}/Release-iphonesimulator/lib${PROJECT_NAME}.a
        echo "SIMULATOR_DIR_A=${SIMULATOR_DIR_A}"
    
    #目标文件夹路径
    INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}
        echo "INSTALL_DIR=${INSTALL_DIR}"
    
    #目标头文件文件夹路径
    INSTALL_DIR_Headers=${SRCROOT}/Products/${PROJECT_NAME}/Headers
        echo "INSTALL_DIR_Headers=${INSTALL_DIR_Headers}"
    
    #目标.a路径
    INSTALL_DIR_A=${SRCROOT}/Products/${PROJECT_NAME}/lib${PR  OJECT_NAME}.a
        echo "INSTALL_DIR_A=${INSTALL_DIR_A}"
    
    #判断build文件夹是否存在,存在则删除
    if [ -d "${build_DIR}" ]
    then
    rm -rf "${build_DIR}"
    fi
    
    #判断目标文件夹是否存在,存在则删除该文件夹
    if [ -d "${INSTALL_DIR}" ]
    then
    rm -rf "${INSTALL_DIR}"
    fi
    #创建目标文件夹
    mkdir -p "${INSTALL_DIR}"
    
    #build之前clean一下
    xcodebuild -target ${target_Name} clean
    
    #模拟器build
    xcodebuild -target ${target_Name} -configuration Release -sdk iphonesimulator
    
    #真机build
    xcodebuild -target ${target_Name} -configuration Release -sdk iphoneos
    
    #复制头文件到目标文件夹
    cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}"
    
    #合成模拟器和真机.a包
    lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}"
    #打开目标文件夹
    open "${INSTALL_DIR}"
    fi
    

1.6 注意事项

  • 选中Targets-Build Setting-Architectures-Build Active Architecture Only设置为NO,build所有架构
  • Architectures 默认结构不包含armv7s(iphone5c),可在Architectures中添加

二、Framework(动态,静态)封装

1.创建Framework工程

创建Framework工程.png

2.添加封装代码文件
添加需要封装的代码文件.png

3.头文件归类
将对外开放的头文件导入与库名称相同的头文件中,此文件作为公共的头文件,使用者只需要将此头文件导入即可使用,无需导入多个,下图的头文件为:DynamicWebFramework.h
头文件归类.png

4.编译
编译原理与a库编译原理相同,但shell脚本有很多种写法,具体可以查询学习一下,在此不再详解,因为我还没搞懂啊~~
5.注意事项

  • Build Setting——“Mach -O Type”默认为:Dynamic Library(iOS 8+支持动态库),可选择Static Library

6.对于三方库的处理
不建议将三方库封装进自己的库中,(貌似你也封装不进去~~)

6.1 正常导入三方已封装的库
6.2 封装代码中正常导入头文件,调用三方库相关方法
6.3 配置search path

配置search path.png
  • 其实,Framework Search Paths、Header Search Paths、Library Search Paths三个相对地址相同也可以(文件路径最大化)——》轻松愉快解决战斗
  • 默认检索header search paths,User Header Search Paths只有Always Search User Paths为(o)/YES!时,才会去检索

6.4 删除三方库封装工程的关联,切记:物理地址中的三方库不要delete,否则会出人命的

7.Framework的使用
获取Framework 库中的资源文件:

iOS 8+:获取图片
[UIImage imageNamed:@"imageView" inBundle:[NSBundle bundleForClass:self.class]compatibleWithTraitCollection:nil];

获取XIB文件
//这个Class对应你工程所在的类名
[[NSBundle bundleForClass:self.class] loadNibNamed:@"ColorView" owner:self options:nil];
//这个对应你的FrameWork的Bundle Identifier
[[NSBundle bundleWithIdentifier:@"com.xxx.xx"] loadNibNamed:@"ColorView" owner:self options:nil];
  • Framework(静态库)
  • Framework(动态库)

三、bundle(资源包)封装

1.创建bundle工程

创建bundle工程.png

2.导入资源文件

导入资源文件.png
  • Create groups 只会根据导入的资源文件结构进行分组
  • Create folder references 会对导入文件的物理结构进行关联

未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容

  • Xcode 工程的环境变量以及Build Settings参数设置 http://www.360doc.com/c...
    liusong007阅读 2,020评论 1 3
  • 一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝...
    心有琳鑫阅读 12,337评论 0 15
  • 转载请注明出处:http://www.jianshu.com/p/04a7e28f11b9作者:纪小衰 frame...
    纪小衰阅读 6,498评论 3 16
  • 在填制完各张报表后,我们就收集了很多我们需要的数据,那么接下来就是这些数据进行查询和分析。对数据的分析和查询功能是...
    bjcathy_lili阅读 613评论 0 2
  • 现在是凌晨1:41分,从昨晚八点多开始,连刷了两部电影,《摆渡人》和《情圣》,在电影院的笑声中跨的年。两部...
    蓝色的米粒阅读 243评论 0 0