与最终用户的文件系统交互时,Xamarin.Mac应用程序挂起

我正在使用内部公司桌面应用程序,该应用程序通过内部Intranet站点进行分发。该应用程序使用Xamarin.Mac和Visual Studio for Mac用C#编写,并且在本地运行良好,直到我压缩* .app文件并将其上传到Intranet站点上,供最终用户下载。

当用户(包括我自己)下载并启动应用程序时,它会完全锁定,以尝试执行与用户本地文件系统进行交互的任何操作(不显示错误或警告/看不到崩溃,它只是停止执行还有更多代码。UI会继续更新,但没有其他反应。

奇怪的是,如果右键单击“ * .app”文件,选择“显示软件包内容”,然后浏览到“内容”>“ MacOS”,然后双击其中包含的应用程序副本,一切工作正常,没有任何问题。

我不是OSX方面的专家,所以我真的很难理解可能导致此问题的原因,以及通过'* .app'文件启动Xamarin.Forms应用程序和位于其中的可执行文件之间的区别在“ ProgramName.app/Content/MacOS/ProgramName”中。

据我所知,我已经检查/确认该应用程序没有被沙盒化,并且正在使用正确的分发证书/配置文件对它进行签名/公证,据我所知,不应任何阻止所需文件系统访问的安全限制。除非有什么我想念的。

我是否可以通过任何方式更深入地了解导致此行为的原因,例如可以用来了解/查看应用程序本身/构建方式的任何潜在调试工具?

谢谢!

iCMS 回答:与最终用户的文件系统交互时,Xamarin.Mac应用程序挂起

最终设法弄清这件事的根源:问题是由于苹果采用了一种名为“应用程序易位”的安全系统。

这里有一个不熟悉的人的描述:https://lapcatsoftware.com/articles/app-translocation.html-tl; dr是将下载的应用程序标记为“隔离”,并且在运行时将它们复制到虚拟只读中文件系统并从那里执行。这样可以防止应用程序访问本地文件系统(无论应用程序是否经过签名/公证或从“受信任”源下载等)。

有两种方法可以“取消隔离”应用程序:

  1. 通过Finder手动将应用程序移动到其他位置(例如,将其拖放到“ / Applications”或“〜/ Documents”中(注意:移动应用程序所在的文件夹/也已将其提取) t足够-您必须亲自移动* .app文件)。Apple将此操作视为用户,认为该应用程序是安全的,并在移动操作过程中删除了隔离标志(这必须通过Finder完成,无法完成)通过诸如mv之类的命令行操作。

  2. 从终端运行以下命令以删除隔离标志:

xattr -dr com.apple.quarantine '/path/to/downloaded/program.app'

您可以通过多种方式检测您的应用是否受到应用易位的影响,例如:

  1. 使用“控制台”,您可以看到可执行文件的路径类似于“ / private / var /.../ AppTranslocation / ....”(这是我在先前调试时在控制台中发现的内容) ,但我对OSX的了解还不够,无法确切地了解我所看到的内容,并且最初尝试理解这一点并没有产生任何有用的信息)

  2. 运行命令xattr /path/to/downloaded/program.app。如果在输出中看到以下内容:

com.apple.quarantine

这意味着应用程序将受到应用程序易位的影响。

本文链接:https://www.f2er.com/1764111.html

大家都在问