https://github.com/noear/perona_ios
noear::将客户端的组件功能服务化的一个框架
https://github.com/noear/perona_ios
Last synced: 4 months ago
JSON representation
noear::将客户端的组件功能服务化的一个框架
- Host: GitHub
- URL: https://github.com/noear/perona_ios
- Owner: noear
- License: apache-2.0
- Created: 2019-12-17T10:14:21.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-24T13:58:14.000Z (over 6 years ago)
- Last Synced: 2024-12-30T18:38:50.999Z (over 1 year ago)
- Language: Objective-C
- Size: 68.4 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# perona for ios
perona是一个跨平台的服务启动框架。是服务端版本solon的情侣版,有android版本,有ios版本。
借签了B/S模式,在客户端实现组件功能的服务化,进而为大项目的组件化开发,提供一套弱偶合的方案。比如像支付宝那种有N多组件组成的项目...
基于客户端的需要,框架里也支持消息总线功能。用于组件之间的消息分发.
最佳的效果:开发一个动态的框架性主项目,所有组件功能全在服务端进行配置。
### perona使用说明
#### 1、相关项目添加引用
`pod 'perona',:git=>"https://github.com/noear/perona_ios.git"`
#### 2、主项目启动服务
```Objective-C
#import //:不要太纠结大小写的问题:)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//启动服务(内置了正则路由表 和 HASH路由表,也可以自己定义一个)
[XApp start:application];
}
```
#### 3、组件项目进行适配(例组件名:module2)
##### 3.1 适配XMoudle接口
```Objective-C
//XModule2.h
@interface XModule2 : NSObject
@end
//XModule2.m
@implementation XModule2
-(void)start:(XApp*) app{
//app.application; //此对象可用
//注册路由
[app reg:self expr:@"xapp://module2/xxx" handler:^(XContext* c) {
[c output:@"m2"]; //跳转控制器等...业务处理(可以输出结果,或不输出)
}];
}
@end
```
##### 3.2 添加配置文件 perona.plist (完成组件自发现的配置)
`perona.xmodule = XModule2`
#### 4、主项目引入组module2(内部配置需要自己完成)
`pod 'module2'`
#### 5 调用
##### 5.1 本地代码调用
```Objective-C
//调用功能
////不需要回调的
[XClient call:self url:@"xapp://module2/xxx?id=1" params:nil];
////需要回调的
[XClient call:self url:@"xapp://module2/xxx?id=1" params:nil callback:^(XContext* c,id data) {
NSLog(@"%@", data);
}];
//分发消息
[XClient send:self url:@"msg://topic/xxx" params:nil];
```
##### 5.2 内嵌WEB调用(需要适配一下WebView)
```html
xxx
```
# 复杂一点的XModule示例
有助于了解期作用...
```Objective-C
#import "XModuleXxxx.h"
#import "XxxxApp.h"
@implementation XModuleXxxx
- (void)start:(XApp *)app
{
[app reg:self expr:@"xapp://Xxxx/*" handler:^(XContext * _Nonnull context) {
NSString *p = context.path;
NSDictionary *params = context.paramMap;
UIViewController *vc = (UIViewController *)context.requester;
NSString *mobile = params[@"mobile"];
NSString *ugroupId = params[@"ugroupId"];
if([p isEqualToString:@"/id"]){
[XxxxApp showIdOcrView:vc mobile:mobile ugroupId:ugroupId completion:^(BOOL success, NSString * message) {
[context output:@(success)];
}];
}
else if([p isEqualToString:@"/face"]){
[XxxxApp showFaceLiveView:vc mobile:mobile ugroupId:ugroupId completion:^(BOOL success, NSString * message) {
[context output:@(success)];
}];
}
else if([p isEqualToString:@"/contacts"]){
[XxxxApp showContactsView:vc mobile:mobile ugroupId:ugroupId completion:^(BOOL success, NSString * message) {
[context output:@(success)];
}];
}
else if([p isEqualToString:@"/tele"]){
[XxxxApp showWebView:vc mobile:mobile ugroupId:ugroupId AuthUrlType:AuthUrlTypeWechash completion:^(BOOL success, NSString * message) {
[context output:@(success)];
}];
}
else if([p isEqualToString:@"/sesame"]){
[XxxxApp showWebView:vc mobile:mobile ugroupId:ugroupId AuthUrlType:AuthUrlTypeZmxy completion:^(BOOL success, NSString * message) {
[context output:@(success)];
}];
}
}];
}
@end
```