iOS增量插件开发

http://www.360doc.com/content/15/0210/07/19175681_447600754.shtml 

http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html 

IOS插件化开发概述 

2015-02-10  |   方海龙的...   |      

转藏(7)

  首先,了解一下插件开发的应用价值。 最重要的一点,就是可以使软件的内容不僵化。由于插件可以通过网络进行传输,并且实时的展示出来(感谢cocoa的动态特性),因而理论上(极端情况),软件可以只是一个空架子,所有软件内容都从服务器上下载。【注:至今为止,我所在的项目都是使用的企业账号,因而不知道此种插件模式是否可以上传到APPSTORE。】或者,可以对软件进行动态换肤,或者提供一种持续开发的实现手段,等等。 其次,这种方式可以使软件开发流程具有更大的灵活性。例如,不同的团队进行并行开发。每个团队开发一个插件,最后进行拼装。由于插件所具有的隐藏内部实现的特性会使软件更健壮。而团队之间是看不见各自源代码的,这对于外包(苦B?)来说是很有趣的一种方式,即将不重要的或是一些体力劳动插件交予合作方进行开发。而只要接口订的好,完全可以实现并行开发,提高软件开发的速度。 一、基础知识 1、bundle(包) bundle(包)是cocoa开发中提供的一种文件存储、组织方式。 右键点击bundle文件,选择“显示包内容”,可以看到里面包含的内容。实际上,它就是一个文件夹,在windows下可以直接打开它(IOS应用.APP实际上也是bundle,即程序中的mainBundle)。 bundle中可以包含很多内容,包括各种资源,甚至编译好的源代码。通过它,可以动态的做很多事情。 2、面向接口 高内聚低耦合一直是面向对象开发的追求目标之一,而面向接口则是使软件接近这种目标的方法之一。模块之间的交互都是面向接口的,则模块内做出的改变不会影响其他模块,从而提高了软件的健壮程度。在Objective-C中,此种思想是使用协议来完成的,即protocol。 @protocol A -(void) methodA; @end 两个模块之间定义各自需要的协议,通过这些接口进行交互。这在插件开发中是必须使用的方法之一。 二、具体实现 首先,有几个API需要了解。 主程序所在bundle: NSBundle *mainBundle = [NSBundle mainBundle]; 如果有路径,则使用下面代码获得bundle: NSBundle *aBundle; aBundle= [NSBundle bundleWithPath:@"..."]; 另,两个重要的路径: 1、mainBundle(即APP)路径: NSString * resPath = [[NSBundle mainBundle] resourcePath]; 2、Document及其子路径: NSArray * documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * pluginPath = [[documentPath objectAtIndex:0] stringByAppendingPathComponent:@"..."]; 获得bundle之后,就可以访问其中的任何资源了。但是,由于我们希望尽可能的实现高内聚低耦合,因而我们希望外界对于bundle内的东西了解的越少越好。每个bundle都有一个plist,其中有一个字段,叫做principal class,可以使用下面的代码进行获得: Class aClass = [aBundle principalClass]; id anInstance = [[aClass alloc] init]; 这个对象,将它设计的符合某个协议,无疑是很好的接口类。使用下面的代码进行某些功能的执行: if([anInstance conformsToProtocol:@protocol(...)]) { [anInstance performSelector:@selector(...)]; } 另外,对于bundle中UIViewController的载入,我发现只能使用initWithNibName: bundle: ,否则载入的窗口无法展示。对于bundle在xcode中的开发,我会另起一篇文章进行讲解。 总体来说,整个过程如下所示: 1、  定义插件内外的所具备的接口,用于交互。比如,外部符合协议A,插件符合协议B,则一般来说,principalClass符合协议B,并且应该具有一个方法类似这样: -(id)initWithDelegate:(id<A>)delegate; 这样,插件内外就达成了协议,可以进行交互了。这个过程实际上很重要,因为一旦接口经常改变,牵连的东西太多,这里就不再赘述了。 2、  各个团队并行开发,有的开发主程序,有的开发插件。可以采取网上下载的方式,也可以开发完合在一起。 

iOS-生成Bundle包-引入bundle-使用bundle

  17221926_X0NQ.gif (2014-03-02 16:14:16)

17221926_X0NQ.gif转载▼    

标签: 

ios制作bundle

bundle

 

bundle解析

制作bundle

 

ios-bundle

 

it

分类: 功能知识

在我们使用第三方框架时,常常看到XXX.bundle的文件。 

我们找到该文件,显示包内容,大致看到很多资源文件:图片、配置文本、XIB文件…… 

什么是Bundle文件?

简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个Bundle文件。方便在其他项目中引用包内的资源。 

Bundle文件的特点?

Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。 

制作Bundle

1.新建bundle项目

iOS-生成Bundle包-引入bundle-使用bundle     

2.添加需要的图片

加入你需要编译在bundle中的资源文件。 

当然,默认的配置也是可以的,如果你需要特定的优化或者特定的路径配置,你可以进行下面第3步的配置。 

3.你可以对编译的bundle进行一些可选的设置(可选)

a.作为资源包,仅仅需要编译就好,无需安装相关的配置。

iOS-生成Bundle包-引入bundle-使用bundle    

b.同样要删除安装路径。

iOS-生成Bundle包-引入bundle-使用bundle    

c.该资源包的pch文件和strings文件是可以删除的。

iOS-生成Bundle包-引入bundle-使用bundle

4.最好状态下,要编译出适用与iPhone的bundle文件。

iOS-生成Bundle包-引入bundle-使用bundle    

项目集成bundle

使用bundle就非常的easy了,将编译好的XXXX.bundle 文件直接加入到需要的项目中。省略了! 

使用bundle中的资源

将要使用的bundle集成到项目中后,就可以使用了。需要注意的就是,bundle是静态的,不进行编译的资源文件。所以,要使用bundle中的资源,就需要找到相应的资源路径。 

这里废话就不多说了,贴代码! 

VC获得bundle中的资源


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

NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

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

图片获得bundle中的资源

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

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

[imgView setImage:image];

或者

UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

NSString *imgPath= [bundlePath stringByAppendingPathComponent:@"img_collect_success.png"];

UIImage *image_1=[UIImage imageWithContentsOfFile:imgPath];

[imgView setImage:image_1];

当然,可以写成预编译语句: 

#define MYBUNDLE_NAME @ "MyBundle.bundle"

#define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

#define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]

希望对你有所帮助!


转载于:https://my.oschina.net/u/2359371/blog/639591

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp是一款跨平台的开发框架,可以同时开发出适用于iOS和Android的应用。插件开发是Uniapp的一个重要功能,可以通过插件来扩展应用的功能和特性。 在Uniapp的iOS插件开发中,首先需要了解插件的基本结构和开发方式。插件通常是由原生iOS代码编写而成,然后通过Uniapp的插件注册和调用机制来使用。具体开发步骤如下: 1. 创建iOS插件项目:使用Xcode开发工具创建一个新的iOS项目,将插件的代码放入其中。 2. 配置插件的接口和参数:根据插件的功能需求,在插件的代码中定义需要对外暴露的接口和参数。可以通过使用Objective-C或Swift编写代码来完成。 3. 处理插件的调用逻辑:在插件的代码中实现对插件接口的具体逻辑处理。可以调用底层的iOS API来实现需要的功能。 4. 导出插件:编译插件的代码,并将生成的插件文件导出成为一个独立的模块供Uniapp项目使用。 5. 注册和调用插件:在Uniapp项目的代码中,通过注册插件的方式将插件导入到项目中。然后可以通过插件的名称和方法调用来使用插件的功能。 在开发过程中,除了插件的基本代码实现外,还可以根据需要添加一些其他的功能,例如插件的配置文件、资源文件等。 总之,Uniapp提供了便捷的iOS插件开发方式,开发者可以通过编写原生iOS代码来扩展Uniapp应用的功能。插件开发可以根据具体需求来实现各种各样的功能,为Uniapp应用提供更加丰富和灵活的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值