iOS中动态更新补丁策略JSPatch运用基础一

  • 时间:
  • 浏览:1
  • 来源:大发5分快3APP下载_大发5分快3APP官方

7

7

1

9

对于Objective-C类的属性变量,在JavaScript中这麼使用getter与setter最好的办法来访问,示类式 下:

                viewDidLoad: function() {

14

                    view.setBackgroundColor(UIColor.greenColor())

7

3

            viewDidAppear: function(animated) {

     alertView.setMessage('AlertView from js'); \

5

    require('UIView, UIColor, UILabel')

defineClass('ViewController', {

    return view;

13

                creatView: function() {

提示:由于原Objective-C的最好的办法中由于中有 了_符号,则在JavaScript中使用__代替。

4

5

2

7

14

12

            .alloc()

在工程中换成有有两个js文件,编写如下:

            )

13

8

1

1

4

1

                    view.setBackgroundColor(UIColor.greenColor());

                                                                                null

11

        开发者不之前 动态在Objective-C类文件中换成最好的办法,类式 在ViewController类中编写如下:

                    var label = UILabel.alloc().initWithFrame({x:0, y:0, width:30, height:30});

2

12

2

14

8

7

11

    defineClass('AppDelegate', {

    [JPEngine startEngine];

    self.window.rootViewController = [[ViewController alloc]init];

18

8

     alertView.show(); \

15

            alertView_clickedButtonAtIndex:function(alertView, buttonIndex) {

1

    [JPEngine startEngine];

view.setBackgroundColor(UIColor.colorWithRed_green_blue_alpha(0,0.5,0.5,1))

}

                }

            },{

10

            }

同样JSPatch不之前 为类换成临时属性,用于在最好的办法间参数传递,使用set_Prop_forKey()来换成属性,使用getProp()来获取属性,注意,JSPatch换成的属性这麼使用Objective-C的setter与getter最好的办法访问,如下:

                self.view().addSubview(view)

20

            .initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles(

8

                    self.getProp("data")

对于Objective-C中的多参数最好的办法,转化为JavaScript将参数分割的位置以_进行分割,参数完正放进 后边的括号中,以逗号分割,示类式 下:

调用类最好的办法:通过类名打点的最好的办法来调用类最好的办法,格式类式 如下,括号内为参数传递:

    defineClass('ViewController', {

            }

            )

                                                                                "Alert",

                    self.setProp_forKey("JSPatch""data")

            })

     "];

    在进行Objective-C最好的办法的调用时,分为一种,一种是调用类最好的办法,一种是调用类的对象最好的办法。

还有一种更加简便的写法,直接在使用的之前 对其进行引用:

    [self.window makeKeyAndVisible];

6

     alertView.addButtonWithTitle('OK');\

                viewDidLoad: function() {

4

            }

    });

5

                    self.ORIGviewDidLoad()

                    view.addSubview(label);

            }

defineClass('ViewController', {

    [JPEngine evaluateScript:script];

19

7

            }

12

15

                },

1

5

9

6

5

10

8

defineClass("ViewController2: UIViewController <UIAlertViewDelegate>", {

                    self.super().viewDidLoad()

- (void)viewDidLoad {

    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];

2

    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];

13

        通过cocoapods将JSPath集成进有有两个Xcode工程中,在AppDelegate类的中编写如下代码:

示类式 下:

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

defineClass('ViewController', {

1

                                                                                "content",

2

                    self.view().setBackgroundColor(UIColor.redColor())

            }

对于Objective-C中super关键字调用的最好的办法,在JavaScript中之前 使用self.super()来调用,类式 :

调用实例最好的办法:通过对象打点的最好的办法调用类的实例最好的办法,格式如下,括号内为参数传递:

     var alertView = require('UIAlertView').alloc().init();\

1

                }

                    var view = self.ORIGgenView();

8

2

14

7

            }

                touchesBegan_withEvent(id,touch){

3

- (UIView *)genView

15

15

6

4

7

3

1

3

   在编写JavaScript代码时由于需要用到Objective-C的类,需要先对你这些 类进行require引用,类式 ,由于需要使用UIView你这些 类,需要在使用前进行如下引用:

                    view.addSubview(label);

10

                }

3

5

除了后边的代码,在ViewController.m文件中这麼编写任何某些的最好的办法,运行工程,之前 看一遍程序池池并这麼崩溃,ViewController执行了creatView最好的办法。

4

    return YES;

6

    [super viewDidLoad];

}

}

                newFunc: function() {

3

6

5

关于为类换成协议的遵守,和Objective-C中遵守协议的最好的办法一致,如下:

                }

9

        通之前 边的示例,大伙发现使用JSPatch之前 做某些十分有趣的事。对于iOS应用来说,通过官方渠道AppStore进行程序池池的发布要通过人工审核,有时你这些 审核周期会非常长,由于在开发者在编写代码时留下了某些小漏洞,应用一旦上线,若要修改掉你这些 bug就十分艰难了。有了JSPatch,大伙之前 想象,由于之前 定位到线上应用有问题图片的最好的办法,使用JS文件来修改掉你这些 最好的办法,这将是多么cool的一件事,事实上,JSPatch的主要用途也是之前 实现线上应用极小问题图片的hotfix。

12

由于在重写了类中的最好的办法之前 调用原最好的办法,需要使用ORIG前缀,示类式 下:

    UIView * view= [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];

1

    view.backgroundColor = [UIColor redColor];

4

                                                                                "OK",

                genView: function() {

7

            alertView.show()

     alertView.setTitle('Alert');\

13

1

- (void)viewDidLoad {

            var alertView = require('UIAlertView')

9

    NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];

17

                    self.view().setBackgroundColor(UIColor.redColor())

11

8

同样不之前 一次对多个Objective-C类进行引用:

重写由于换成类的最好的办法:

1

9

5

10

3

    [super viewDidLoad];

2

10

        要使用JSPatch来进行Objective-C风格的最好的办法编写,需要遵守某些JavaScript与Objective-C交互的规则。

8

    [JPEngine evaluateScript:script];

    [self.window addSubview:[self genView]];

11

9

                    label.setTextAlignment(1);

8

                    return view;

13

1

5

14

17

                    label.setTextAlignment(1);

            },

JavaScript文件代码如下:

require('UIView').alloc().init()

11

10

4

在JavaScript中使用defineClass来定义和修改类中的最好的办法,其编写格式如下所示:

2

9

6

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

defineClass('ViewController', {

                viewDidLoad: function() {

                myLoad:function(){

4

16

 require('UIView, UIColor, UILabel')

require('UIView, UIColor, UILabel')

                    label.setText("JSPatch");

3

5

            )

11

                                                                                self,

6

        JSPatch是GitHub上有有两个开源的框架,其之前 通过Objective-C的run-time机制动态的使用JavaScript调用与替换项目中的Objective-C属性与最好的办法。其框架小巧,代码简洁,假如通过系统的JavaScriptCore框架与Objective-C进行交互,这使其在安全性和审核风险上完正都是很强的优势。Git源码地址:https://github.com/bang590/JSPatch

2

9

3

}

            console.log('clicked index ' + buttonIndex)

7

4

4

                    var view = UIView.alloc().initWithFrame({x:20, y:20, width:30, height:30});

9

10

运行工程,之前 看一遍genView最好的办法被替换成了js文件中的最好的办法,那我红色的视图被修改成了绿色。

21

{

8

        JSPatch引擎中支持3中最好的办法进行JavaScript代码的调用,分别是使用JavaScript字符串进行代码运行,读取本地的JavaScript文件进行代码运行和获取网络的JavaScript文件进行代码运行。类式 ,由于你会通过JavaScript代码在项目中弹出有有两个警告框,在Objective-C代码中插入如下代码:

2

5

1

6

2

                }

    JSPatch的最大应用是在应用运行时动态的操作和修改类。

    [JPEngine evaluateScript:@"\

            )

    NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];

12

12

13

                    var label = UILabel.alloc().initWithFrame(view.frame());

11

                    label.setText("JSPatch");

6

    self.view.backgroundColor = [UIColor whiteColor];

6

9

                    self.super().viewDidLoad()

                                                                                )

4

    });

16

3

3

6

    [self performSelectorOnMainThread:@selector(creatView) withObject:nil waitUntilDone:nil];

defineClass(classDeclaration, instanceMethods, classMethods)