Mac 应用程序被 Gatekeeper 拦截的解决方法



  • 如果您是一位Mac开发者,并且正在Mac上开发商业的应用程序, 那么您可能在发布您的应用程序时遇到被Gatekeeper拦截的问题。我最近也被这样的问题弄得头疼呢,这是因为Mac不仅仅使用了Unix的权限管理系统,而且为了安全性又新加了一层,叫做Gatekeeper(中文译作守门员)。
    131431431431.jpg
    Gatekeeper从 Mac OS X 10.8开始发布,历经好几个版本。修复了很多的漏洞,目前能够有效地拦截恶意的应用。但是作为应用的开发者,也容易在推广软件的过程中出现很大的障碍。这是因为,Gatekeeper对于我们是黑盒,我们不知道其内部的运作方式,所以有时候出现被拦截的情况我们也是一筹莫展。本文就作为一个引子,介绍Gatekeeper的工作范围究竟如何。

    GateKeeper拦截后,应用程序将无法直接双击打开,弹出“无法确认开发者身份”框,需要右击打开后允许执行才行。

    简单地说,Gatekeeper主要通过几种方式达到拦截的效果:

    1. 检查app包是否完整;
    2. 检查app包是否包含签名的部分。一般签名都有_CodeSignature字段;
    3. 检查app包的Contents/MacOS路径中,可执行程序或脚本是否有效;
    4. 检查app包的可执行程序是否引用了包外的路径的动态链接库(dylib)。

    其中第4点会执行递归的检查,假设dylib引用其他的dylib,那么会导致被引用的dylib会得到检查。通过执行

    otool -L XXXX.dylib
    

    来查找动态链接库依赖的动态链接库路径。一般来说,@executable_path是可以的,而@rpath由于是可变的地址,会存在重定向到包外,因此也会被Gatekeeper拦截。所以尽量用@executable_path辅以相对路径,这样才不会被Gatekeeper拦截。



  • @jiangcaiyang
    在网上澳门金沙玩,赢钱不给下分的朋友们可以加一下Q-3185461834


Log in to reply
 

走马观花

最近的回复

  • 这张图或许阐述了这个问题。
    有效打造个人品牌.png

    其实对于我们职场人员,尤其是程序员,都有很强的作用。我们虽然产品意识比较弱,但是我们对产品的敏感性强,尤其是我们有制作过产品的经验,这反而是一个优势。

    read more
  • @jiangcaiyang 给你一个大大的赞!
    论坛最近打算再次启用iframely服务了。试试看!

    https://community.nodebb.org/topic/4401

    read more

关注我们

微博
QQ群