词条信息

xiazaiwo
xiazaiwo
进士
最近编辑者 发短消息   

相关词条

热门词条

更多>>
做自媒体,每个月究竟能赚多少钱?
做自媒体可以赚钱,这是众所周知的,从几百到几千,最后到几万[详细]
华住个人信息泄露案告破
9月19日消息 根据华住集团官网的消息,9月17日,华住集[详细]
教你辨别原装和杂牌苹果充电器
  为什么同样是充电器原厂和山寨的价格会差这么多,难道就真[详细]
苹果iOS12支持的设备
iOS12已于今日凌晨正式发布了。据悉,本次iOS12的升级是[详细]
支付宝接入银联,支付行业将有这些大变化
支付宝接入银联传闻终于落地。9月14日,每日经济新闻(微信号:[详细]
解决网 >>所属分类 >> ios   

iOS 封装SDK以及封装时bundle文件的处理

标签: 暂无标签

顶[0] 发表评论(0) 编辑词条

这篇教程的主要目的是解释怎么样在你的iOS工程中创建并使用一个SDK,俗称.a文件。

www.solves.com.cn 电脑百科

环境:xcode 9.0 www.solves.com.cn 电脑百科

创建一个静态库工程

 打开Xcode,点击File\New\Project, www.solves.com.cn 电脑百科

选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程. www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

将工程命名为SDKTest,然后将工程保存到一个空目录下。 www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

当创建静态库工程时,Xcode会自动添加.h和.m。

www.solves.com.cn 电脑百科

你不需要实现文件,因此右键单击SDKTest.m选择delete,将它删除即可。

www.solves.com.cn 电脑百科

然后工程就已经可以用了了,是时候为你的库添加一些功能了。

www.solves.com.cn 电脑百科

由于本篇教程的关键在于教你怎么样创建一个SDKTest.a,

www.solves.com.cn 电脑百科

而不是怎么样构建一个UI控件,这里你可以使用你自己封装好的控件。

www.solves.com.cn 电脑百科

将你的控件从Finder中拖到Xcode的SDKTest目录下。

www.solves.com.cn 电脑百科

这里我使用别人封装过我进行二次封装的日历。 www.solves.com.cn 电脑百科

这里有一点要注意了,控件拖进工程这里一定要勾选以下三个选项: www.solves.com.cn 电脑百科

Copy items if needed www.solves.com.cn 电脑百科

create gruoups

www.solves.com.cn 电脑百科

Add to targets

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

对你的控件的头文件需要做的另一件事是将其添加到库的主头文件SDKTest.h中。 www.solves.com.cn 电脑百科

在这个主头文件的帮助下,开发者使用你的库仅仅需要导入一个头文件,

www.solves.com.cn 电脑百科

如下面的代码一样,而不是自己去选择自己需要的一块导入。 www.solves.com.cn 电脑百科

接下来就生成静态库 www.solves.com.cn 电脑百科

静态库分为手机和模拟器两种(手机端的只有手机能调用,模拟器的只有模拟器能调用)。 www.solves.com.cn 电脑百科

首先,构建模拟器的静态库,如图(点击三角按钮就可以了,其实是编译,图片中我写成了运行)! www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

然后show in Finder把.a文件拖到桌面即可,

www.solves.com.cn 电脑百科

真机的.a文件一样的道理,可以改一个名字方便合成一个.a文件。

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

之后打开终端执行下面的命令,这里就不复制了, www.solves.com.cn 电脑百科

手敲一下记忆一下,运行时候桌面会生成一个合成的.a文件。 www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

之后拿到这个.a文件 还有和他相关的所有.h文件,存放在一个新的文件夹里(随便起名,如下 www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

现在呢,你就可以拿着这个文件夹去测试了。将它拖到你要应用了工程中

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

这样之后你就可以引用SDKTest.h文件进行使用刚才的控件了,其实很简单的。

www.solves.com.cn 电脑百科

我在这里遇到了一个问题;在我使用的时候报这个错误,

www.solves.com.cn 电脑百科

这个可以这样解决:把对应的 Use Safe Area Layout Guide 去掉勾选即可

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

感谢这个篇文章:http://blog.csdn.net/objectivepla/article/details/51211541 www.solves.com.cn 电脑百科

但是这只是对没有引用图片和xib的控件而言的,

www.solves.com.cn 电脑百科

如果你要打包的SDK包含xib怎么办呢,这类的资源文件是需要另外处理的。

www.solves.com.cn 电脑百科

这里就需要知道bundle

www.solves.com.cn 电脑百科

bundle 是一个目录,其中包含了程序会使用到的资源. www.solves.com.cn 电脑百科

这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in).对应bundle, www.solves.com.cn 电脑百科

cocoa提供了类NSBundle.

www.solves.com.cn 电脑百科

 简单的 bundle 文件的创建,只需要在本地创建一个文件夹,给文件夹添加后缀@".bundle"图片可以放进去。

www.solves.com.cn 电脑百科

但是xib文件我们需要把xib文件手动转换成nib文件

www.solves.com.cn 电脑百科

举个例子 指令如下:

www.solves.com.cn 电脑百科

ibtool --errors --warnings --output-format human-readable-text --compile /Users/Chenfy/Desktop/cc.zip/CCViewController.nib /Users/Chenfy/Desktop/cc.zip/CCViewController.xib  www.solves.com.cn 电脑百科 

这样你就可以得到nib文件了。 www.solves.com.cn 电脑百科

当然有复杂一点的 bundle 文件的创建 就是使用Xcode 

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

添加需要的资源文件

www.solves.com.cn 电脑百科

加入你需要编译在bundle中的资源文件。至少选择Base SDK 是iOS的,默认选择是mac的 www.solves.com.cn 电脑百科

其他的设置可以参考百度 www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

 获取.budle文件同样和获取.a文件一样,编译一下 然后show in Finder www.solves.com.cn 电脑百科

 可以修改文件的名字和SDK的一样

www.solves.com.cn 电脑百科

将要使用的bundle集成到项目中后,就可以使用了。

www.solves.com.cn 电脑百科

需要注意的就是,bundle是静态的,不进行编译的资源文件。 www.solves.com.cn 电脑百科

所以,要使用bundle中的资源,就需要找到相应的资源路径

www.solves.com.cn 电脑百科

注意: www.solves.com.cn 电脑百科

有xib 的.a文件打包前记得修改xib的应用方式为nib,对应的图片也是

www.solves.com.cn 电脑百科

对于.budle文件的引用  www.solves.com.cn 电脑百科

bundle资源包的使用: www.solves.com.cn 电脑百科

把生成的bundle文件拖到要使用工程中;

www.solves.com.cn 电脑百科

// 设置文件路径 www.solves.com.cn 电脑百科

NSString *bundlePath = [[NSBundlemainBundle]pathForResource:@"SourcesBundle"ofType:@"bundle"]; www.solves.com.cn 电脑百科

NSBundle *resourceBundle = [NSBundlebundleWithPath:bundlePath]; www.solves.com.cn 电脑百科

 // 加载 nib文件

www.solves.com.cn 电脑百科

UINib *nib = [UINibnibWithNibName:@"Demo"bundle:resourceBundle]; www.solves.com.cn 电脑百科

NSArray *viewObjs = [nibinstantiateWithOwner:niloptions:nil];

www.solves.com.cn 电脑百科

 // 获取 xib文件 www.solves.com.cn 电脑百科

UIView *view = viewObjs.lastObject;

www.solves.com.cn 电脑百科

view.frame = CGRectMake(20,50,self.view.bounds.size.width -40,self.view.bounds.size.width -40); www.solves.com.cn 电脑百科

[self.view addSubview:view];

www.solves.com.cn 电脑百科

 
VC获得bundle中的资源

 NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @ "MyBundle"ofType :@ "bundle"];

www.solves.com.cn 电脑百科

NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath]; www.solves.com.cn 电脑百科

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"vc_name"bundle:resourceBundle];

www.solves.com.cn 电脑百科

 
图片获得bundle中的资源
 UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

UIImage *image = [UIImage imageNamed:@"MyBundle.bundle/img_collect_success"];

www.solves.com.cn 电脑百科

[imgView setImage:image]; www.solves.com.cn 电脑百科

  www.solves.com.cn 电脑百科

加载bundle中的xib生成的cell

加载nib的时候使用以下代码,最主要的是表明是从那个bundle中获取nib

 NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"WofuSDKBundle"ofType:@"bundle"]; www.solves.com.cn 电脑百科

 NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

www.solves.com.cn 电脑百科

 UINib *nib=[UINib nibWithNibName:@"Wofucreditcell"bundle:resourceBundle];

www.solves.com.cn 电脑百科

  [tab registerNib:nib forCellReuseIdentifier:identifier];

www.solves.com.cn 电脑百科

加载bundle详情见这篇文章http://blog.csdn.net/u011146511/article/details/70147693 www.solves.com.cn 电脑百科

我在这里遇到了一个问题 我在cell 的复用的时候总是报错

www.solves.com.cn 电脑百科

结果 发现复用的时候如果发现没有可复用的cell时也要从.budle中取,基础知识不牢固啊, www.solves.com.cn 电脑百科

这一点希望读者注意,.a文件打包前需要资源文件的一定要 处理程序,处理资源文件,这也是xib的一个弊端吧!

www.solves.com.cn 电脑百科

  www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

另外我打印了一下加载budle 是否成功,但是结果是(not yet loaded)这个我也不知道什么原因,

www.solves.com.cn 电脑百科

反正最终结果是加载成功了,有知道的读者可以@我,谢谢!

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

最后上一张成功的图片

www.solves.com.cn 电脑百科

www.solves.com.cn 电脑百科

本文永久更新链接地址:http://www.xiazaiwo.net/tech/ziyuan/17339.html www.solves.com.cn 电脑百科

 

 

本文地址:解决网 http://www.solves.com.cn/doc-view-4460.html

TAGS:SOLVES , 电脑技术 , 电脑知识 , 网站建设, 电脑技术, 网络营销 , 网站托管 , 硬件技术 , 网络技术 , 软件技术, 维修网点

参考资料
[1].  IT技术学习·下载我_精品源码软件教程资源网   http://www.xiazaiwo.net/tech/

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇美女学生制服写真
下一篇Centos7安装Python3.5之变量和简单数据类型详解

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的电脑技术问题词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>