交换网络代理mac os app的开发

APP开发


浏览:725 次

前言

因为在设置中手动切换代理需要花费太多时间,所以现在如果你想构建macApp,可以打开或关闭网络代理。App不能有主窗口,只能有菜单栏上的按钮。这很简单。

2020年2月29日截图9.11.18.png

步骤1:创建项目

新项目->macos->app

步骤2:拆下主窗口

截图:9.22.39.png,2020年2月29日

打开主管道。情节提要,单击这两个项目并将其删除(直接按delete)。再次运行后,不显示主窗口

步骤3:添加菜单栏

将以下代码添加到AppDelegate。米:

@界面AppDelegate()

@属性(非原子,强)NSStatusItem*statusItem;//必须应用并强烈引用它,否则将不显示它。

@结束

@实现AppDelegate

-(void)applicationDidFinishLaunching:(NSNotification*)a通知{

//在此处插入代码以初始化App

NSStatusBar*statusBar=[NSStatusBar systemStatusBar];

NSStatusItem*statusItem=[statusBar statusItemWithLength:NSSquareStatusItemLength];

[statusItem setHighlightMode:YES];

[statusItem.button setImage:[NSImage imageNamed:@“abc”]];//设置图标,请注意大小

[statusItem.button setToolTip:@“代理开关”];

NSMenu*subMenu=[[NSMenu alloc]initWithTitle:@“Load_TEXT”];

[subMenu addItemWithTitle:@“打开”动作:@selector(clickItem1)keyEquivalent:@“E”];

[subMenu addItemWithTitle:@“关闭”动作:@选择器(clickItem2)keyEquivalent:@“R”];

statusItem。menu=子菜单;

自己statusItem=状态项;

}

-(无效)单击项目1{

}

-(无效)单击项目2{

}

注:图片为本地图片。选择中等大小的图片。

运行后,App图标显示在菜单上,表示成功。

步骤4:执行shell命令

I交换机网络代理命令

networksetup命令用于切换网络代理,

打开自动代理配置命令:

Sudo networksetup-setautoproxyurl网络名称pac地址//设置自动代理url

Sudo networksetup-setautoproxystate网络名称打开//自动代理的状态更改为打开

关闭自动代理配置命令:

Sudo networksetup-setautoproxystate网络名称关闭

注意:“网络名称”通常是“Wi-Fi”或其他名称,但不是您的Wifi名称…请参见下图:

截图:9.41.49.png,来自2020年2月29日

II运行shell命令的几种方法

1.c语言的系统方法

系统(@“sudo networksetup-setautoproxystate Wi-Fi on”.UTF8String);

此方法只能运行具有非根权限的命令

2.N任务

您可以使用root或非root权限运行命令。运行root命令时,将弹出用户名和密码提示

代码如下:

-(NSString*)runNSTaskCmd:(NSString*)命令

{

NSMutableArray*组件=[[cmd componentsSeparatedByString:@“”]mutableCopy];

NSString*launchPath=组件[0];

[components removeObjectAtIndex:0];

//初始化并设置shell路径

NSTask*任务=[[NSTask alloc]init];

[任务集启动路径:启动路径];

//-c用于执行字符串命令(命令字符串),也就是说,以下字符串中的任何内容都将作为shell代码执行

NSArray*参数=组件;

[任务集参数:参数];

//创建新的输出管道作为Task的输出

NSPipe*管道=[NSPipe管道];

[任务集标准输出:管道];

//开始任务

NSFileHandle*文件=[pipe fileHandleForReading];

[任务启动];

//获取跑步结果

NSData*数据=[file readDataToEndOfFile];

return[[NSString alloc]initWithData:数据编码:NSUTF8StringEncoding];

}

调用代码如下:

[self runNSTaskCmd:@“/usr/sbin/networksetup-setautoproxystate Wi-Fi off”];

3.第三方库STPrivilegedTask

-(void)runPrivilegedTask:(NSString*)cmdStr{

STPrivilegedTask*特权任务=[[STPrivilgedTask alloc]init];

NSMutableArray*components=[[cmdStr componentsSeparatedByString:@“”]mutableCopy];

NSString*launchPath=组件[0];

[components removeObjectAtIndex:0];

[privilegedTask setLaunchPath:lau