OC 引入 swiftMonkey 2.1.0版

1,370 阅读2分钟

最近需要加入MonkeyTest来进行UI测试,但是找来找去也只有SwiftMonkey比较优秀,如果有更合适OC 的麻烦给我留言,Thank you~ 由于项目是纯OC的,因此在引入MonkeyTest时,走了不少弯路。尤其是集成后,点击效果的小手显示无法调用初始化方法的问题。最后我们使用swift包了一层。我也在github上提了issue然后又自己默默的关掉了https://github.com/zalando/SwiftMonkey/issues/84,希望能给OC掉用swift库提供一种思路。

  1. Pod 引入,具体引入方式查看Git 说明 github.com/zalando/Swi…
  2. 引入之后,编译遇到 100多个错误:Undefined symbol:protocol conformance descriptor for CoreGraphic.CGFloat:Swift.Comparable in CoreGraphics 更多错误看图

点开错误查看是 Undefined stmbols for architecture x84_64: 主要是Swift 库没引入。因为项目是个纯OC 的项目所以没有任何的swift桥接文件,如果编译成功需要引入对Swift的支持

按照这篇文章里的步骤加好 bridge文件 www.jianshu.com/p/a342fba7f… 再次编译,可能会遇到 Swift language Version的问题

这个问题可以按照这里的方式选一下 stackoverflow.com/questions/4…

添加完之后,就可以build成功了。

到此为止就已经引入成功了,但是要进行测试的话还是需要增加一个UITest的targe,具体操作 又是链接 www.jianshu.com/p/cacef26ec…

  1. 按照简书上的操作后,你应该就可以进行monkeyTest了,但是,如果想要在OC里引入他的手掌操作是需要更多的工作了。 由于 2.1.0版的swiftMonkey 里面的初始化方法为: public init(view: UIView, tapUIApplication: Bool = true, configuration: Configuration = Configuration(), bezierPathDrawer: @escaping BezierPathDrawer = MonkeyPawDrawer.monkeyHandPath) 其中的Configration 是Swift 的结构体,OC 无法直接调用。而且它的初始化方法也没有使用@objc暴露给OC,那我们怎么进行初始化呢。 我们想到了一个方法,就是自己写个swift 版的APPdelegate category,在categroy里面添加方法

首先在APPdelegate.h文件里加入 @import SwiftMonkeyPaws;

然后定义一个属性 @property (nonatomic, strong) MonkeyPaws *paws;

然后在Category里面加入如下初始化代码: @objc func initMonkey() -> Void {

  self.paws = MonkeyPaws.init(view: self.window!)

} 然后再在Appdelegate 的.m文件里引入2个头文件 #import "AppName-Bridging-Header.h" #import "AppName-Swift.h" 其中 swift 暴露给OC 的方法编译完成后你会在 AppName-Swift.h 这个文件里看到。这是系统的文件,你不用自己添加,可以在 build setting 里面找到如图:

然后在初始化自己的window后加入
[self initMonkey]; 就可以啦! commd+u你就可以看到小手了!