我正在编写一个Mac应用程序,该应用程序将文件作为输入,让用户执行元数据操作,然后将文件发送到Python脚本以处理输出。这真的很好,没有沙箱。就像所有的事情一样,沙井让事情变得很困难。
我嵌入在NSBundle中的python库正在调用系统拥有的一些MimeTypes库,但是这些库试图打开沙箱中没有的/etc/apache2/mime.types,并且错误地失败了:IOError: [Errno 1] Operation not permitted: '/etc/apache2/mime.types'。
以下是我的权利:
<?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>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>以下是完整的回溯:
Traceback (most recent call last):
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/EditChaptersScript.py", line 3, in <module>
import eyed3 # ID3 Writer
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/eyed3/__init__.py", line 91, in <module>
from .utils.log import log
File "/Users/thomaspritchard/Library/Developer/Xcode/DerivedData/Chapters-ejrappchxzcmqxdjlzydqffndmtk/Build/Products/Debug/Chapters.app/Contents/Resources/eyed3/utils/__init__.py", line 33, in <module>
_mime_types = mimetypes.MimeTypes()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 66, in __init__
init()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 358, in init
db.read(file)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetypes.py", line 202, in read
with open(filename) as fp:
IOError: [Errno 1] Operation not permitted: '/etc/apache2/mime.types'提前感谢您的帮助,我真的很想在Mac中发布这个应用程序,但是我一直在这个问题上不择手段。
编辑:--我想也许我可以允许访问文件,通过临时例外待遇访问/etc/apache2/mime.types。使用此更新的应享权利plist,它退出时具有相同的错误:
<?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>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.temporary-exception.files.absolute-path.read-only</key>
<array>
<string>/etc/apache2/mime.types</string>
</array>
</dict>
</plist>有趣的是,如果我使用绝对路径/,而不是/etc/apache2/mime.types,它可以工作,但在地狱中,苹果不可能允许在Mac!
发布于 2015-12-22 19:31:47
发现了问题。在OS中,设置/etc/的权限似乎存在一个问题,当它包含一个符号链接时!我把它改成了/private/etc/,现在起作用了。
编辑:苹果工程师说这是一个适当的例外使用,并关闭了我的雷达。如果你有同样的问题,参考雷达:#24011257。
https://stackoverflow.com/questions/34420174
复制相似问题