企业微信虚拟定位远程打卡

作者 : 开心源码 本文共3892个字,预计阅读时间需要10分钟 发布时间: 2022-05-12 共1.05K人阅读

上一家企业从指纹打卡改为企业微信打卡后就花了点时间写了一个远程打卡的插件,实现的主要功能有:1、虚拟定位;2、现场拍照改为可从相册选择照片。
安装方法:1、可以增加我的个人源 https://evildriver.github.io,里面有个WeWorkHelper企业微信助手安装即可以了;2、在WeWorkHelper资源包内部packages里面有插件包,直接使用iFunBox即可以安装。
整个插件项目在WeWorkHelper下载。
先上源码:

#import "WindowInfoManager.h"#import "AppDelegate.h"#import "WWKAttendanceRamdonCheckViewController.h"#import "SuspensionView.h"#import <MobileCoreServices/MobileCoreServices.h>#import "WWKAttendanceBinaryCheckViewController.h"#import <CoreLocation/CoreLocation.h>#import "WWKConversationLBSViewController.h"#import "WWKMessageListController.h"#import "HelperSettingController.h"%hook AppDelegate- (_Bool)application:(id)arg1 didFinishLaunchingWithOptions:(id)arg2 {    //[[WindowInfoManager manager] addToWindow:self.window];    return %orig;}%end%hook UIImagePickerController//设置能否从相册选择- (void)setSourceType:(UIImagePickerControllerSourceType)sourceType {    if ([MainKeyMananer manager].on && [MainKeyMananer manager].selectFromAlbum) {        sourceType = UIImagePickerControllerSourceTypePhotoLibrary;        self.mediaTypes = @[(NSString*)kUTTypeImage];    }    %orig;}//设置能否可编辑- (void)setAllowsEditing:(BOOL)allowsEditing {    if ([MainKeyMananer manager].on && [MainKeyMananer manager].photoEdit) {       allowsEditing = YES;    }    %orig;}%end%hook WWKMessageListController//在首页增加助手设置入口- (void)viewDidAppear:(BOOL)animated {    %orig;    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"助手设置" style:UIBarButtonItemStylePlain target:self action:@selector(xl_setLocationClicked:)];}%new- (void)xl_setLocationClicked:(id)sender {        HelperSettingController *vc = [%c(HelperSettingController) new];    [self.navigationController pushViewController:(UIViewController *)vc animated:YES];}%end %hook CLLocation- (CLLocationCoordinate2D)coordinate {    if ([MainKeyMananer manager].on && [MainKeyMananer manager].fakeLocation) {        NSNumber *latitudeObj = [[NSUserDefaults standardUserDefaults] objectForKey:@"kXLLatitude"];        NSNumber *longitudeObj = [[NSUserDefaults standardUserDefaults]         objectForKey:@"kXLLongitude"];        if(!latitudeObj || !longitudeObj){            return %orig;        }else {            CGFloat latitude = [latitudeObj floatValue];            CGFloat longitude = [longitudeObj floatValue];            CLLocationCoordinate2D coor = CLLocationCoordinate2DMake(latitude, longitude);            return coor;        }    }else {        return %orig;    }}%end

MainKeyMananer主要是控制开关。

image.png
image.png
image.png
注:地图选点用的是企业微信自带的类,但为了不影响原来界面,此类为runtime动态创立的继承于自带类的子类,贴一下部分代码:

void p_send(id self, SEL _cmd, id arg1) {    Ivar ivar = class_getInstanceVariable([self class], "_selectionItem");    // 返回名为test的ivar变量的值    WWKLocationItem *item = (WWKLocationItem *)object_getIvar(self, ivar);        CLLocationCoordinate2D coor = item.coordinate;        NSString *string = [NSString stringWithFormat:@"%lf,%lf", coor.latitude, coor.longitude];        [[NSUserDefaults standardUserDefaults] setObject:@(coor.latitude) forKey:@"kXLLatitude"];    [[NSUserDefaults standardUserDefaults] setObject:@(coor.longitude) forKey:@"kXLLongitude"];        [[NSNotificationCenter defaultCenter] postNotificationName:@"kNotificationVCLoad" object:string];        UIViewController *vc = (UIViewController *)self;    [vc.navigationController popViewControllerAnimated:YES];}void viewDidLoad(id self, SEL _cmd) {    //调用父类的viewdidload方法    SEL superSel = _cmd;    Method sm = class_getInstanceMethod([self superclass], superSel);    IMP imp = method_getImplementation(sm);    imp(self, superSel);        UIViewController *vc = (UIViewController *)self;        vc.title = @"虚拟定位";        vc.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:@selector(p_send:)];}//runtime增加继承类Class LocationSelectViewController = objc_allocateClassPair(NSClassFromString(@"WWKConversationLBSViewController"), "LocationSelectViewController", 0);{    BOOL success = class_addMethod(LocationSelectViewController, @selector(p_send:), (IMP)p_send, "V@:");    if (success) {        NSLog(@"增加方法成功");    }}{    BOOL success = class_addMethod(LocationSelectViewController, @selector(viewDidLoad), (IMP)viewDidLoad, "V@:");    if (success) {        NSLog(@"增加方法成功");    }}id vc = [LocationSelectViewController new];[self.navigationController pushViewController:(UIViewController *)vc animated:YES];

如有问题,请留言。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 企业微信虚拟定位远程打卡

发表回复