制作framework目的:保密项目代码.制作SDK时常用

静态库与动态库简介:

静态库:链接使用时完整地拷贝至可执行文件中

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次

本文制作framework对应xcode版本:10.1

一.不包含xib和图片的简单制作

1.新建工程

新建工程

2.选择支持的最低版本

最低版本

3.Mach-O Type 选择是Static Library(静态库)还是Dynamic Library(动态库默认)

静态库选择

4.Architectures : 指定工程将被编译成支持哪些指令集;支持越多,生成的指令集数据包越大。

默认使用:$(ARCHS_STANDARD)即可,它包含了 armv7/arm64 如果要支持其他的也可以手动添加

Valid Architecures:指定可能支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成的二进制包所支持的指令集

比如:Architectures支持了armv7s Valid Architectures支持了: armv7/arm64/armv7s, 那么最终只支持armv7s。

其默认是:arm64 arm64e armv7 armv7s

* i386|x86_64 模拟器

* armv6

* iPhone、iPhone 3G

* iPod 1G、iPod 2G

* armv7

* iPhone 3GS、iPhone 4

* iPod 3G、iPod 4G、iPod 5G

* iPad、iPad 2、iPad 3、iPad Mini

* armv7s

* iPhone 5、iPhone 5C

* iPad 4

* arm64

* iPhone 5S — iPhone X

* iPad Air, Retina iPad Mini

* arm64e

* iPhone XR — iPhone XS Max

如果没有特殊适配以上根据系统默认即可

另外Build Active Architecture Only尽量设置为 NO ,不然build的时候只会保留相对应的资源文件,即为YES且你成功连上一个armv7指令集的设备时,此时将忽略Architectues和Valid Architectues的设置,只生成一个armv7指令集的二进制包。

否则,仍根据Arch 和Valid Arch来设定。

当然如果我们在Edit Scheme -> Run将Debug改为了release那么Build Active Architecture Only使用默认也可

release设置

5.是否支持bitcode

bitcode

如果需要支持bitcode,在TAGETS的Build setting中搜索Other C Flags,添加命令“-fembed-bitcode”

6.Dead Code Stripping : YES 消除无效代码(一些老的文章说是设置为NO,看文档新版xcode还是设置为YES默认也是如此)

7.Link With Standard Libraries : YES(默认) 用标准库连接(一些老的文章说是设置为NO,当我打包动态库的时候会报错)

8.如果你用了Category可以在Other Linker Flags 添加 -ObjC 即可

9.公开的头文件选择

公开文件

10.常用命令:查看Framework支持的哪些框架:lipo -info 地址

Framework合并:lipo -create a地址 b地址 -output 输出地址

二.包含xib和图片的Framework

如果需要打包包含xib和图片的Framework有如下方式:

1.使用动态库:在上面第三步选择Dynamic Library即可

在工程创建一个Assets.xcassets管理图片,也可以直接放到工程

打包后:

打包后

使用动态库要注意:需要在Linked Frameworks and Libraries和Embedded Binaries都加入对应的动态库.

Embedded Binaries

在代码中需要:

//加载方式1

// NSBundle *SDKBundle = [NSBundle bundleForClass:[CuijxQRController class]];

//加载方式2 bundleWithIdentifier是Framework的BundleIdentifier

NSBundle *SDKBundle = [NSBundle bundleWithIdentifier:@"com.wecan.Framework-Xib"];

CuijxQRController *qr = [[CuijxQRController alloc] initWithNibName:@"CuijxQRController" bundle:SDKBundle];

[self presentViewController:qr animated:YES completion:nil];

2.使用静态库,并且需要在主工程build phases - copy bundle resources添加对应的framework

这样就可以正常加载对应的xib了.因为从iOS8开始,framework也可以包含资源文件

NSBundle *bundle = [NSBundle bundleForClass:[self class]];

//在这个路径下找到子bundle的路径

NSString *path = [bundle pathForResource:@"StaticFramework_Xib" ofType:@"framework"];

NSBundle *SDKBundle = [NSBundle bundleWithPath:path];

FrameworkVC *fw = [[FrameworkVC alloc] initWithNibName:@"FrameworkVC" bundle:SDKBundle];

[self presentViewController:fw animated:YES completion:nil];

如果我们直接用动态库的代码加载方式发现是失败的并且会提示

reason: 'Could not load NIB in bundle:..... (loaded)' with name 'FrameworkVC''

3.将Framework和资源分开,通常资源会打包为bundle

bundle可以直接将文件后缀重命名生成bundle,也可以像制作Framework一样制作bundle

Base SDK

combine_hidpi_images

但是需要注意Base SDK要选择iOS combine_hidpi_images要设置NO,否则bundle中的png图片经过编译打包会变成tiff的文件,进而导致对应图片找不到,这样就可以分离资源和Framework.使用的时候要同时导入两个文件.

NSString *path = [[NSBundle mainBundle] pathForResource:@"FrameworkUseBundle" ofType:@"bundle"];

NSBundle *SDKBundle = [NSBundle bundleWithPath:path];

FrameworkUseBundleVC *fw = [[FrameworkUseBundleVC alloc] initWithNibName:@"FrameworkUseBundleVC" bundle:SDKBundle];

[self presentViewController:fw animated:YES completion:nil];

综合以上我个人更推荐和喜欢第2种方式打包资源文件,因为这样显得更加合理

FrameworkDemo

demo介绍:以xcworkspace管理多个工程

FrameworkDemo:不包含资源的Framework(静态)制作

Framework-Xib:包含资源的Framework(动态)制作

StaticFramework-Xib:包含资源的Framework(静态)制作

Framework-Bundle:Framework(静态)与资源(Bundle)分开制作

FrameworkUse:Framework的使用

iosxib 设置图片_iOS framework制作及使用(包含xib和图片)相关推荐

  1. iosxib 设置图片_修改xib 默认加载图片的路径

    问题描述:项目组件化重构的时候,主工程的中xib 中引用了图片(图片是放在子工程中),但是不能显示. 问题原因:主工程Xib 加载的图片访问默认的是 main Bundle 中的资源,图片是子工程的F ...

  2. python:从零开始的图片h5py数据集制作

    图片数据集制作 python图品h5py数据集的制作 首先,我们要有图片的数据 接下来,可以开始制作了 python图品h5py数据集的制作 由于我是看床长的人工智能教程学习的,所以我会模仿教程里的数 ...

  3. iosxib 设置图片_ios8.0利用 LaunchScreen.xib添加启动图片

    今天没事,回顾下之前的项目,看到有个LaunchScreen.xib 文件,这货在xcode6创建项目就有了,这是 Xcode6/iOS8的新功能,也就是说,在LaunchScreen.xib中添加启 ...

  4. ios wkweb设置图片_iOS WKWebView识别H5中的图片资源

    想获取H5的图片坐标那就需要JS注入了 - (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { CGPoint touchPoin ...

  5. netbeans 添加gif图片_怎么制作动态图片?手机如何制作清晰gif动图?

    对于gif动图大家是非常熟悉的一种图片展现形式,比如平常在微信,QQ中使用的表情包就是gif动图样式的一种.一般获取GIF动图的渠道主要是来自网上或者对于好友使用的比较有趣的图片进行收藏,然后在聊天的 ...

  6. gif加文字 php,gif动态图片添加文字 gif制作软件 怎样给gif动态图片添加文字

    gif动态图片添加文字 gif制作软件 怎样给gif动态图片添加文字 现在有各种各样的表情包.搞笑图片以及搞笑视频都深受大家的喜爱,之前咱们也有一起学习过怎样用视频制作gif动态图片,相信大家肯定还记 ...

  7. div中插入图片_Web前端开发基础知识,设置网页背景图,如何在网页中插入图片...

    图片 一.图片的表现形式 当我们在制作页面的时候,通常会遇到图片的三种表现形式,如下: 1.内容图片 内容图片是页面中真正的内容,没有内容图片,就无法完整的理解页面内容.如淘宝网上的商品展示图片,这些 ...

  8. rp导入图片大小_Axure制作图像的放大与缩小效果的四种方式

    1.新建Axure RP项目,取名"Axure制作图像的放大与缩小效果" 2.拖入动态面板控件,取名"放大缩小".设置大小为560*330px.坐标为x:300 ...

  9. 制作古装人物彩色工笔画图片的PS教程

    今天我们来用PS制作古装人物彩色工笔画图片,首先我们从网络上找个人像,小编也是在网络上随便找的,接下就开始我们的教程,喜欢的可以推荐给朋友学习,希望大家可以喜欢. 先来看看效果图: 原图(来源于网络, ...

最新文章

  1. Deeplearning知识蒸馏
  2. java懒汉_java中懒汉式的volatile的问题?
  3. POJ 1364:King(差分约束)
  4. glibc-2.23学习笔记(一)—— malloc部分源码分析
  5. Python中sorted函数的用法
  6. Java基础入门笔记-包装类
  7. 计算机应用技术高数挂科,这7个专业难度太大,挂科率很高,只有学神才敢报考...
  8. 什么是Selenium?如何使用Selenium进行自动化测试
  9. python入门经典100题-Python基础训练100题(带答案)[DOC][47KB]
  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
  11. 14、Date and Time (日期和时间)
  12. 计算机操作系统教程徐甲同pdf,《操作系统实践教程》.pdf
  13. 进去springstrap显示无响应_何为优秀显示器?显示器参数标准主观讨论
  14. STN 图像配准一些记录
  15. Java开发岗:本硕211毕业一年,大厂面试最终拿下美团offer!献上我的面经+Java核心知识点(秋招适用)
  16. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学CS专业排名2020年
  17. Vim插件ale在windows下的安装配置与BUG解决
  18. Instagram 账号被封如何申诉拿回账号?ins账号解封经验分享
  19. Java 使用Reactive Redis
  20. 数据指标体系:指标好坏评价标准

热门文章

  1. 冠军奖 3 万元!CSDN×易观算法大赛火热进行中
  2. 刷屏!边学边用,这个学Python方法彻底火了!
  3. 为什么阿里腾讯们都在抢夺 LoRa?| 技术头条
  4. 宇宙第一 IDE Visual Studio 2019 支持 C++ 和 Python 了!
  5. 小米速度!雷军再祭 All in AIoT 大招!
  6. 东北到底有没有互联网?!
  7. 马云:遇见好老板很重要;锤子上海法人变更;摩拜更名美团单车 | 极客头条...
  8. 台式电脑打不开计算机c盘,电脑c盘打不开进不了系统怎么办
  9. 来来来!java页面导出数据到excel
  10. mysql 5.1升级windows_怎么在Windows下升级MySQL