如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)
Posted
技术标签:
【中文标题】如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)【英文标题】:How to enable App sandbox for a python app on OSX (The python app is targeted for Mac App Store) 【发布时间】:2013-04-17 04:26:05 【问题描述】:首先,python 应用程序是针对 Mac App Store 的。 苹果给我发邮件说我的应用没有启用沙盒。
如下:
尊敬的开发者,
我们发现您最近交付的“InternetWorks”存在一个或多个问题。要处理您的交付,必须更正以下问题:
未启用应用沙盒 - 以下可执行文件必须在 中包含布尔值为 true 的“com.apple.security.app-sandbox”权利>权利属性列表。有关对您的应用进行沙盒处理的更多信息,请参阅应用沙盒页面。
InternetWorks.app/Contents/MacOS/InternetWorks
纠正这些问题后,请转到“版本详细信息”页面并单击“准备上传二进制文件”。继续完成提交过程,直到应用状态为“等待上传”。然后,您可以交付更正后的二进制文件。
问候,
App Store 团队
由于我的应用程序是用 Python 编写的,我不知道如何为其创建 权利属性列表。
根据 Apple 的文档,权利属性列表是在 Xcode 项目中创建的,并且与可执行文件有某种关联。但同样,我的应用程序是用 Python 编写的,它只是几个 *.py 文件,我使用 py2app/cx_Freeze 工具将其打包到“my_app_name.app”可执行文件中。
那么,是否可以手动为我已经打包的 python 应用程序(My_App_name.app 文件)创建/制作一个权利属性列表文件,如果没有 XCode 项目,我该如何做到这一点?
提前致谢。
【问题讨论】:
【参考方案1】:在某些情况下,在xcode4 中配置.entitlements
plist 的界面类似于。
它会自动在您的$(SOURCE_ROOT)
中创建一个名为AppName.entitlements
的文件。
.plist
s 是 Apple 用于几乎所有“传统”unix 上的文本配置文件的 XML 文件。如果您在 OSX 上使用 Python 进行开发,您可能会发现 Python plistlib 很有帮助。 Apple 有幸编辑它们的方法是使用 XCode 本身 (before XCode4 there was a stand-alone Property List Editor.app)。
在这种情况下,他们想要的默认值仅包含:
<?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/>
</dict>
</plist>
我怀疑如果您只是将其粘贴到名为 InternetWorks.entitlements
的文件中,您将解决他们的问题。虽然您可能需要请求更多the available permissions。
【讨论】:
感谢您的回答。这和我做的差不多。我终于通过以下步骤弄清楚了:\n 1)手动创建一个 InternetWorks-Entitlements.plist 文件;(是的,这只是一个 xml 文件) 2)发出这个命令:codesign --entitlements ./InternetWorks-Entitlements.plist -s "My Cert here" ./InternetWorks.app
无论如何,我通过了验证。还是谢谢大家。以上是关于如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)的主要内容,如果未能解决你的问题,请参考以下文章