xamarin - 如何在 Xamarin.Mac 应用程序中找到指向非公共框架的链接
问题描述
我们正在向应用商店发布一个 MacOS 应用,该应用使用 Xamarin.Mac 和 Xamarin Forms。在 App Store Connect 的审核过程中,我们的应用程序二进制文件已被拒绝,原因如下:
您的应用程序链接到以下非公共框架:框架:/System/Library/PrivateFrameworks/Network.framework/Versions/A/Network
我们如何才能找到这个框架在我们的应用程序中使用的位置,以便我们可以删除它?
我们的应用程序是通过将 .apk 文件发布到应用程序商店来发布的,但我认为我们可能必须在 .apk 或其中一个 .dll 文件中进行搜索——对于我们如何在应用程序中找到位置有什么建议吗这个参考是从哪里来的?
我们被推荐使用“strings”或“otool”来帮助 - 在我们的案例中是否有一个如何使用这些来查找和删除用法的示例?
解决方案
在这里发布答案,因为我们设法弄清楚如何检测引用的框架。也感谢这个 Xamarin 线程:
https://forums.xamarin.com/discussion/94838/xamarin-mac-linker-behavior-appstore-rejection
作为构建的一部分,我们生成一个.pkg文件,但也生成一个.app文件(例如OurApplication.app和OurApplication-1.0.pkg)。
可以打开*.app文件以查看其中的文件结构,方法是在 Finder 中选择文件,然后在选项下选择“显示包内容”。这意味着在终端中打开,我们可以导航到该位置:
OurApplication.app/Contents/MacOS
其中包含一个 Unix 可执行文件:OurApplication
.
这是我们需要运行的文件otool
,使用以下命令:
otool -L OurApplication | grep "PrivateFrameworks"
我们终于可以看到上面引用的框架。(请注意,忽略grep
命令的一部分将显示所有框架,因此应用过滤器很有用)。
这使我们能够测试不同的构建设置来移除框架,而无需每次都提交给 Apple。
我们通过在我们的项目设置中将“链接器行为”设置为“仅框架 SDK ”并打开“提前 (AOT) 编译程序集”来删除引用(并因此解决了问题)。
推荐阅读
- javascript - 想要在警报框中的 jsp 页面上显示控制器消息
- github - GitHub 抛出“GitHug 无法构建页面”错误,这是为什么呢?
- java - 导航到列表 Cardview 中的不同活动
- php - 如果 PHP 中的条件为真,如何从目录中删除旧文件?
- google-apps-script - Google App Script URLFetch 配额不明确
- php - 有人尝试访问 .php 文件时显示 404 错误?
- c++ - 如何使 CPP 文件对 ESP8266 Eclipse 项目中的链接器可见
- python - 从查询集创建嵌套字典
- python - Optuna 示例返回测试集的评估指标是否存在缺陷?
- php - 警告:preg_match() 期望参数 2 是字符串,数组给定 LMS 主题中的错误