如何在macOS沙盒应用程序中使用插件中的dylibs?

如何在macOS沙盒应用程序中使用插件中的dylibs?,macos,dylib,apple-developer,Macos,Dylib,Apple Developer,我正在为一个macOS应用程序写一篇文章。我的代码使用OpenCV和我的构建过程链接到OpenCV数据库 当我作为测试应用程序的一部分构建代码时,一切都运行良好。但是,当我将代码构建为插件时,宿主应用程序无法加载插件,并出现以下错误: Error loading /Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin: dlopen(/Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin, 0x

我正在为一个macOS应用程序写一篇文章。我的代码使用OpenCV和我的构建过程链接到OpenCV数据库

当我作为测试应用程序的一部分构建代码时,一切都运行良好。但是,当我将代码构建为插件时,宿主应用程序无法加载插件,并出现以下错误:

Error loading /Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin:
 dlopen(/Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin, 0x0106): dependent dylib '/usr/local/opt/opencv@3/lib/libopencv_calib3d.3.4.dylib' not found for '/Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin'.
file system sandbox blocked open("/usr/local/opt/opencv@3/lib/libopencv_calib3d.3.4.dylib", O_RDONLY)
据我所知,我的插件在宿主应用程序的过程中运行,并且宿主应用程序是沙盒的(与我的测试应用程序不同),所以这个错误有点道理。但我不知道最好的解决方法是什么

我可以想到三种可能的解决方案:

  • 沙盒应用程序(以及在其中运行的插件)从不加载dylibs。如果我想在我的插件中使用OpenCV,我需要在插件的二进制文件中静态地构建它
  • 沙盒应用程序(以及其中运行的插件)只从特定的系统位置加载DYLIB,而在我的系统上,OpenCV并不是这样一个好位置。如果我想让我的插件加载OpenCV DYLIB,我需要将它们放在/usr/local/opt之外的其他地方(这是
    brew安装
    为我放置它们的地方)。这些动态库的正确位置是什么
  • 插件被允许做主机应用程序不能做的事情(比如加载dylibs),这是通过一些我不知道的特权config voodo实现的。那会是什么

  • 我的猜测是#3是错的,而#1是可能的,但我希望#2可能是对的。任何人都有插件、沙盒应用程序和dylibs交叉的经验吗?

    我能够让它与授权配置一起工作

    Profile.权益

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <false/>
    </dict>
    </plist>
    
    
    com.apple.security.app-sandbox
    


    到目前为止,我无法在启用沙箱的情况下
    dlopen

    我能够让它与授权配置一起工作

    Profile.权益

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <false/>
    </dict>
    </plist>
    
    
    com.apple.security.app-sandbox
    

    到目前为止,我无法在启用沙箱的情况下
    dlopen