Xamarin - ITMS-90683:Info.plist 中缺少目的字符串

Dan*_*cia 6 xamarin.ios xamarin xamarin.forms visual-studio-mac

我正在使用 Xamarin Forms(Android 和 iOS)开发一个应用程序。我已经准备好第一个应用程序版本,我正在尝试将其上传到 TestFlight,以便与不同的用户测试该应用程序。为了减小 ipa 大小,我将链接器行为设置为“仅链接框架 SDK”。

在此输入图像描述

减小 ipa 大小后,我尝试上传应用程序进行测试飞行,但收到​​下一条错误消息:

  • ITMS-90683:Info.plist 中缺少用途字符串 - 您的应用程序代码引用了一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含一个 NSCalendarsUsageDescription 键,其中包含面向用户的目的字符串,清楚、完整地解释应用程序需要数据的原因。
  • ITMS-90809:已弃用的 API 使用 - 不再接受使用 UIWebView 的新应用程序。相反,使用 WKWebView 可以提高安全性和可靠性。
  • ITMS-90683:Info.plist 中缺少用途字符串 - 您的应用程序代码引用了一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含 NSLocationAlwaysUsageDescription 键,其中包含面向用户的目的字符串,清楚、完整地解释应用程序需要数据的原因。
  • ITMS-90683:Info.plist 中缺少用途字符串 - 您的应用程序代码引用了一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含 NSLocationWhenInUseUsageDescription 键,其中包含面向用户的目的字符串,清楚完整地解释应用程序需要数据的原因。

问题是我没有使用列表中提到的任何项目。我没有在我的应用程序中使用 WebView,也没有请求位置或日历的权限。我知道一旦我向 inflo.plist 添加权限,这些错误就会消失,但我没有使用位置或日历。

如何修改我的应用程序以从 TestFlight 平台中删除这些错误?

我如何注意到我正在使用的哪个库(或 NuGet)正在请求这些项目中的任何一个?

小智 9

第一次上传到 AppStore 时,我的 Xamarin 项目也遇到了同样的问题:虽然只使用 WKWebView,但 TMS-90809 和几乎所有可能的 ITMS-90683 版本(联系人、日历、音乐、Siri、麦克风、位置、蓝牙)都没有我的应用程序使用了其中的一个。

因此,将UsageDescriptions 添加到plist 是非常糟糕的做法,我不知道我的哪个nuget 包正在或正在导致这种情况。我认为可能是 Syncfusion 或 Google Cloud Translate,但在网上找不到确认信息。

简单的解决方案是启用托管链接,因此所有造成问题的部分在 Apple 验证过程中不会被视为应用程序的一部分:

  • 在 Xamarin iOS 项目选项中,转到“iOS 构建”
  • 选择配置“发布”和平台“iPhone”
  • 作为“链接器行为”,选择“仅链接框架 SDK”(或者可能链接全部,如果这也适用于您的应用程序)。

这一下子解决了所有问题。


小智 2

为了摆脱这个

ITMS-90809:已弃用的 API 使用 - 不再接受使用 UIWebView 的新应用程序。相反,使用 WKWebView 可以提高安全性和可靠性。

Soultion - https://learn.microsoft.com/en-us/xamarin/ios/user-interface/controls/webview#uiwebview-deprecation

对于其他问题

Soultion - https://learn.microsoft.com/en-us/xamarin/ios/app-fundamentals/security-privacy

您需要为您将在应用程序中使用的设备功能手动设置消息。

例如相机、位置、日历等