交换网络代理mac os app的开发
APP开发
浏览:745 次

前言
因为在设置中手动切换代理需要花费太多时间,所以现在如果你想构建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