SMJobBless是苹果官方提供的用于“MacOS app获取root权限”的demo。

具体思路

使用Security.framework和ServiceManagement.framework两个库,把需要root权限的操作封装成一个进程,作为项目的子Target,把该子进程注册LaunchdDaemon。

成为LaunchdDaemon后:

  • 子进程会被放在/Library/PrivilegedHelperTools
  • 相应的配置文件.plist被放在/Library/LaunchDaemons,Launchd加载该子进程会需要读取该配置文件

更多介绍请见"参考资料1"

编译SMJobBless

从官网下载SMJobBless源码(下面"参考资料3"也有链接),具体操作Demo里的ReadMe.txt也讲述得比较清楚,只是由于新版本Xcode的编译产物不再放在项目目录里,所以ReadMe.txt里有一些步骤的路径要做一些调整

  1. 在xcode先编译项目

  2. 用终端进入项目根目录,运行下面命令

shell ./SMJobBlessUtil.py setreq <path-to-SMJobBlessApp.app> SMJobBlessApp/SMJobBlessApp-Info.plist SMJobBlessHelper/SMJobBlessHelper-Info.plist
其中<path-to-SMJobBlessApp.app>可以在xcode左边的Navigator的product下的编译产物APP"右击-Show in Finder"的到编译产物的路径。

脚本运行成功后会输出
SMJobBlessApp/SMJobBlessApp-Info.plist: updated SMJobBlessHelper/SMJobBlessHelper-Info.plist: updated

  1. 在Xcode对项目Clean,然后再Build

  2. 终端在项目根目录下执行

shell ./SMJobBlessUtil.py check <path-to-SMJobBlessApp.app>
没有输出任何东西即说明check通过。

  1. Run编译产物APP,会弹出输入账号密码的认证窗口,提示要"Install Helper";输入密码后,若Xcode打印出"Job is available!"的log,已经App的UI上有"The Helper Tool is available!",即说明Demo成功运行。

参考资料

  1. 通过ServiceManagement注册LaunchdDaemon

  2. Apple官方论坛关于如何编译SMJobBless的解析

  3. Apple官方Demo: SMJobBless

  4. Apple官方Demo: EvenBetterAuthorizationSample

这个是SMJobBless进一步的Demo,结合Sand-box的特性。

  1. StackOverflow: AuthorizationExecuteWithPrivileges is deprecated

  2. StackOverflow: Writing a privileged helper tool with SMJobBless()

  3. Apple官方文档: Authorization Services Programming Guide

Jacob Pan ( jacobpan3g.github.io/cn )

SMJobBless官方Demo笔记的更多相关文章

  1. ILRuntime官方Demo笔记

    调用/执行 热更中的方法 调用热更代码中方法,写在AppDomain中,记录一下主要几个方法: AppDomain.LoadAssembly 加载热更dll 执行热更代码的方法,有两种方式: appd ...

  2. Dubbo系列(3)_官方Demo说明

    一.本文目的     通过Dubbo的官方Demo介绍,学会搭建一个简单的Dubbo程序,包括服务端.客户端.接口等. Demo地址:https://github.com/alibaba/dubbo/ ...

  3. 订餐系统之微信支付,踩了官方demo的坑

        最近一个项目要增加微信支付的功能,想来这个东西出来这么久了,按微信提供的应该可以很快搞定的,结果提供的demo( JS API网页支付)中各种坑,咨询他们的客服,态度倒是非常好,就是解决不了问 ...

  4. React Native官方DEMO

    官方给我们提供了UIExplorer项目,这里边包含React Native的基本所有组件的使用介绍和方法. 运行官方DEMO步骤如下 安装react native环境 React Native项目源 ...

  5. Unity 官方 Demo: 2DPlatformer 的 SLua 版本。

    9月份时,趁着国庆阅兵的假期,将 Unity 官方 Demo: 2DPlatformer 移植了一个 SLua 版本,并放在了我的 GitHub 账号下:https://github.com/yauk ...

  6. curl批处理从官方demo封装

    官方demo // 创建一对cURL资源 $ch1 = curl_init(); $ch2 = curl_init(); // 设置URL和相应的选项 curl_setopt($ch1, CURLOP ...

  7. Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors

    在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...

  8. Qt5官方demo分析集29——Extending QML - Property Value Source Example

    此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集28--Extend ...

  9. 微信小程序入门——怎么建多个项目?(导入官方Demo程序进行学习)

    昨天1月9日微信小程序发布,顿时被朋友圈刷爆,今天看了一下官方文档,自己开始一步一步搭建环境体验小程序开发. 常见问题: 1.微信小程序开发是否需要重新创建开发者账号? 需要,即使之前申请了微信服务号 ...

随机推荐

  1. 02_HTML5+CSS详解第三天

    WebStorage简单的网页留言板用到的函数有3个1.saveStorage函数使用"new Date().getTime()"语句来获取当前的日期和时间戳,然后使用localS ...

  2. matlab输入输出语句(input、disp、fprintf)

    输入语句 输入数值 ?x=input('please input a number:') please input a number:22 x = 22 输入字符串 ?x=input('please ...

  3. 基于 xorm 的服务端框架 XGoServer

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  4. 华为交换机boot默认密码

    交换机系统启动bootrom时,在2秒内按下"CTRL+B",此处需要输入密码才能进入BOOTROM菜单.默认密码如下: 1. S9300 V100R006及其之前的版本:9300 ...

  5. JAVA并发编程学习笔记------FutureTask

    FutureTask是Future和Callable的结合体.传统的代码是这样写的Future f = executor.submit(new Callable()); 然后通过Future来取得计算 ...

  6. 节点操作,节点属性的操作及DOM event事件

    ##1. 节点操作 createElement(标签名) 创建一个指定名称的元素 someone.appendChild(new_node) 追加一个子节点(作为最后的子节点) someone.ins ...

  7. ffmpeg转码使用硬件加速

    需求源于手机拍摄的视频,默认参数码率较大,拍摄的文件体积较大,不便于保存和转发.手机默认拍照的720P视频,默认码率达到4M,实际上转成1M就差不多了.FFmpeg默认的转码是使用软件解码,然后软件编 ...

  8. BZOJ 1396&&2865 识别子串[后缀自动机 线段树]

    Description 在这个问题中,给定一个字符串S,与一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件: 1.i≤K≤j. 2.子串T只在S中出现过一次. 例如, ...

  9. 简单的led驱动程序设计

    基于ok6410: led驱动程序: vim led.c #include<linux/kernel.h>#include<linux/module.h>#include< ...

  10. 关于git post-receive 钩子

    登录 git服务器 进入你项目所在git文件夹 cd /var/opt/gitlab/git-data/repositories/liangyuquan/yfg.git cd hooks vim po ...