- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将 Xamarin.Forms iOS 应用提交到 Apple 的 TestFlight 后,我们收到以下消息。
Dear Developer,
We identified one or more issues with a recent delivery for your app,"[bundle name]" [bundle version] ([bundle version]). Please correct the followingissues, then upload again.
ITMS-90338: Non-public API usage - The app references non-publicselectors in [project name]:applicationWillTerminate, fontWeight,newSocketQueueForConnectionFromAddress:onSocket:,setOrientation:animated:, socket:didConnectToHost:port:,socket:didReadPartialDataOfLength:tag:,socket:didReceiveTrust:completionHandler:,socket:didWritePartialDataOfLength:tag:,socket:shouldTimeoutReadWithTag:elapsed:bytesDone:,socket:shouldTimeoutWriteWithTag:elapsed:bytesDone:,socketDidCloseReadStream:, socketDidSecure:, terminateWithSuccess. Ifmethod names in your source code match the private Apple APIs listedabove, altering your method names will help prevent this app frombeing flagged in future submissions. In addition, note that one ormore of the above APIs may be located in a static library that wasincluded with your app. If so, they must be removed. For furtherinformation, visit the Technical Support Information athttp://developer.apple.com/support/technical/
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are nolonger accepted. Instead, use WKWebView for improved security andreliability. Learn more(https://developer.apple.com/documentation/uikit/uiwebview).
Best regards,
The App Store Team
我已经查看了消息并进行了多次尝试,但没有成功。如果有人可以帮助 Apple 接受我们提交的内容,我将不胜感激。
让我分享更多细节
这是一个 Xamarin.Forms 应用程序,我们使用 Azure DevOps 的构建管道(特别是 Xamarin.iOS task 版本 2.*)构建并使用 Azure DevOps 的发布管道进行发布。我们将其发布到 Microsoft AppCenter,然后从那里下载 *.ipa
。我们使用 Transporter 将其提交给 Apple 的 AppStoreConnect TestFlight Mac 上的应用程序来自 Apple 的 AppStore。
XCode version used: 12.2
.Net Core SDK version used: 3.1.x
Mono Version used: 6.12.0
Xamarin iOS SDK version used: 14.6.0.15
NuGet tool version used: 5.8.0
<PackageReference Include="Abp">
<Version>5.14.0</Version>
</PackageReference>
<PackageReference Include="Abp.AutoMapper">
<Version>5.14.0</Version>
</PackageReference>
<PackageReference Include="Abp.Web.Common">
<Version>5.14.0</Version>
</PackageReference>
<PackageReference Include="Acr.Support">
<Version>2.1.0</Version>
</PackageReference>
<PackageReference Include="Acr.UserDialogs">
<Version>7.1.0.475</Version>
</PackageReference>
<PackageReference Include="Castle.Core">
<Version>4.4.1</Version>
</PackageReference>
<PackageReference Include="Castle.LoggingFacility">
<Version>5.1.1</Version>
</PackageReference>
<PackageReference Include="Castle.Windsor">
<Version>5.1.1</Version>
</PackageReference>
<PackageReference Include="Flurl">
<Version>2.8.2</Version>
</PackageReference>
<PackageReference Include="Flurl.Http">
<Version>2.4.2</Version>
</PackageReference>
<PackageReference Include="JetBrains.Annotations">
<Version>2020.3.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Analytics">
<Version>4.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Crashes">
<Version>4.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.CSharp">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Win32.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="NETStandard.Library">
<Version>2.0.3</Version>
</PackageReference>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
<PackageReference Include="NUglify">
<Version>1.13.2</Version>
</PackageReference>
<PackageReference Include="Plugin.Permissions">
<Version>6.0.1</Version>
</PackageReference>
<PackageReference Include="Refractored.MvvmHelpers">
<Version>1.6.2</Version>
</PackageReference>
<PackageReference Include="Rg.Plugins.Popup">
<Version>2.0.0.10</Version>
</PackageReference>
<PackageReference Include="Splat">
<Version>10.0.1</Version>
</PackageReference>
<PackageReference Include="System.AppContext">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Collections">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Collections.Concurrent">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Collections.Specialized">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.ComponentModel">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.ComponentModel.Annotations">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.ComponentModel.TypeConverter">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Configuration.ConfigurationManager">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Console">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Data.Common">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Diagnostics.Debug">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Diagnostics.Tools">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Diagnostics.TraceSource">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Diagnostics.Tracing">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Dynamic.Runtime">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Globalization">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Globalization.Calendars">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.IO">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.IO.Compression">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.IO.Compression.ZipFile">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.IO.FileSystem">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.IO.FileSystem.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Linq">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Linq.Expressions">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Linq.Queryable">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Memory">
<Version>4.5.3</Version>
</PackageReference>
<PackageReference Include="System.Net.Http">
<Version>4.3.4</Version>
</PackageReference>
<PackageReference Include="System.Net.Primitives">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Net.Sockets">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.ObjectModel">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.Emit">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.Emit.ILGeneration">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.Emit.Lightweight">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.Extensions">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Reflection.TypeExtensions">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Resources.ResourceManager">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Runtime.CompilerServices.Unsafe">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Extensions">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Handles">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.InteropServices">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Loader">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Numerics">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Serialization.Formatters">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Runtime.Serialization.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Security.AccessControl">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Security.Claims">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Security.Cryptography.Algorithms">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Security.Cryptography.Encoding">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Security.Cryptography.Primitives">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Security.Cryptography.X509Certificates">
<Version>4.3.2</Version>
</PackageReference>
<PackageReference Include="System.Security.Permissions">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Security.Principal.Windows">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Encoding">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Encoding.CodePages">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Encoding.Extensions">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Encodings.Web">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Text.Json">
<Version>4.7.0</Version>
</PackageReference>
<PackageReference Include="System.Text.RegularExpressions">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Threading">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Threading.Tasks">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Threading.Thread">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Threading.Timer">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.ValueTuple">
<Version>4.5.0</Version>
</PackageReference>
<PackageReference Include="System.Xml.ReaderWriter">
<Version>4.3.1</Version>
</PackageReference>
<PackageReference Include="System.Xml.XDocument">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Xml.XmlDocument">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Xml.XmlSerializer">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="System.Xml.XPath.XmlDocument">
<Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="TimeZoneConverter">
<Version>3.3.0</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.Connectivity">
<Version>3.2.0</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.Geolocator">
<Version>4.5.0.6</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.Iconize.FontAwesome">
<Version>3.5.0.123</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.Iconize.Material">
<Version>3.5.0.123</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.Media">
<Version>5.0.1</Version>
</PackageReference>
<PackageReference Include="Xam.Plugins.Forms.ImageCircle">
<Version>3.0.0.5</Version>
</PackageReference>
<PackageReference Include="Xam.Plugins.ImageCropper">
<Version>1.2.0</Version>
</PackageReference>
<PackageReference Include="Xam.Plugins.Settings">
<Version>3.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Azure.NotificationHubs.iOS">
<Version>3.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Build.Download">
<Version>0.10.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.CommunityToolkit">
<Version>1.0.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Essentials">
<Version>1.6.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.FFImageLoading">
<Version>2.4.11.982</Version>
</PackageReference>
<PackageReference Include="Xamarin.FFImageLoading.Forms">
<Version>2.4.11.982</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms">
<Version>5.0.0.1931</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms.Maps">
<Version>5.0.0.1931</Version>
</PackageReference>
<PackageReference Include="Xamarin.Google.iOS.Maps">
<Version>3.9.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.TestCloud.Agent">
<Version>0.22.1</Version>
</PackageReference>
<PackageReference Include="XamarinFastEntry.Behaviors">
<Version>1.1.1</Version>
</PackageReference>
显然,该应用程序正在使用 Xamarin.Forms 5,其中对 UIWebView
has been removed 的引用.
在我们的项目中,我们仅在一个页面中使用 Web View ,即使 Xamarin 的默认渲染器已更改为 WkWebView
,我们还是为其创建了一个自定义渲染器以使用 WkWebView
以防万一(当然我们确保使用新控件)。
跨平台控制:
public class CustomWebView : Xamarin.Forms.WebView
{
}
iOS 特定渲染器:
[assembly: Xamarin.Forms.ExportRenderer(typeof(Our.CrossPlatform.Project.CustomWebView), typeof(Our.Project.Renderer.CustomWebViewRenderer))]
namespace Our.Project.Renderer
{
public class CustomWebViewRenderer : Xamarin.Forms.Platform.iOS.WkWebViewRenderer
{
}
}
Azure 构建管道上使用的构建代理:macos-10.15 (代理的完整规范可以在 link 上找到)。
关于第一条消息(ITMS-90338:非公共(public) API 使用),在处理 Stackoverflow 和 Xamarin 论坛上的大量帖子后,我们发现人们建议我们应该将链接行为设置为仅链接 SDK
(我们已经对每个构建配置执行了此操作),但是为了确定起见,我们决定告诉 MSBuild 和 MTouch 以确保这是所使用的链接行为。
我们开始将 /p:MtouchLink="SdkOnly"
发送到 MSBuild the pipeline task的论证部分;我们向 MTouch 发送了 /p:MtouchExtraArgs="--linksdkonly"
。
这些都不起作用,所以我们开始研究已安装的软件包,并尝试卸载尽可能多的软件包,但仍然不起作用。
关于后一条消息(ITMS-90809:已弃用的 API 用法),我们知道 as of Xamarin Forms 4.5, a new flag was introduced确保 UIWebView
未被引用。此外,我们知道截至Xamarin.iOS 13.16 ,出于相关目的引入了更多标志:warn-on-type-ref=UIKit.UIWebView
,用于在构建日志中警告我们是否有任何对 UIWebView
的引用,和 optimize=force-rejected-types-removal
强制删除所有对被拒绝类型(包括 UIWebView
)的引用(如果发现)。
因此,这就是我们最终在 MTouch 参数中使用的内容: /p:MtouchExtraArgs="--warn-on-type-ref=UIKit.UIWebView --optimize=experimental-xforms-product-type -- optimize=force-rejected-types-removal --linksdkonly"
,但这不起作用,我们甚至没有收到构建日志中任何 UIWebView
引用的警告。
具有讽刺意味的是,相同的配置确实适用于我们提交的早期应用程序(使用早期的 Xamarin.Forms 版本),并且警告标志确实向我们显示了一条警告,表明在链接后不再存在的链接。
如果有人告诉我们如何解决这个问题或者在哪里查找这个问题,甚至我们应该在哪里开票,我们将不胜感激。
最佳答案
Apple 拒绝此提交的版本有两个原因。
ITMS-90338: Non-public API usage - The app references non-public selectors in [project name]: applicationWillTerminate, fontWeight, newSocketQueueForConnectionFromAddress:onSocket:, setOrientation:animated:, socket:didConnectToHost:port:, socket:didReadPartialDataOfLength:tag:, socket:didReceiveTrust:completionHandler:, socket:didWritePartialDataOfLength:tag:, socket:shouldTimeoutReadWithTag:elapsed:bytesDone:, socket:shouldTimeoutWriteWithTag:elapsed:bytesDone:, socketDidCloseReadStream:, socketDidSecure:, terminateWithSuccess.
这意味着你需要用其他名称修改方法列表名称,因为这些名称会与Apple系统的私有(private)方法名称冲突。您需要找到它们并将其替换为其他名称。
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
从 2020 年 4 月开始,Apple will reject apps仍然使用已弃用的 UIWebView
API。虽然 Xamarin.Forms 已切换为默认的 WKWebView
,但 Xamarin.Forms 二进制文件中仍然引用了旧版 SDK。当前的 iOS 链接器行为不会消除此问题,因此,当您提交到 App Store 时,已弃用的 UIWebView
API 仍会显示为从您的应用中引用。
链接器的预览版本可以解决此问题。要启用预览,您需要向链接器提供附加参数 --optimize=experimental-xforms-product-type
。
详细步骤可以引用UIWebView Deprecation and Xamarin.Forms .
关于ios - 将 Xamarin iOS 提交到 Apple AppStoreConnect TestFlight 后获取 'ITMS-90338: Non-public API usage' 和 'ITMS-90809: Deprecated API Usage',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66119480/
我正在使用 gmock 并模拟了一个函数 boost::beast::http::response_parser作为输出参数。功能签名看起来像: error_code readFromSocket(b
我的任务是打印由“非元音、元音、非元音”组成的单词列表,即 bab、bac、bad、bad ... 到 zuz。 我已经设法创建了一个代码,它执行前两个字母,但在最后一个循环中丢失并只打印'}' -
我正在尝试使用 label2rgb 生成 RGB 标签切片并使用它来更新 RGB 体积,如下所示: labelRGB_slice=label2rgb(handles.label(:,:,han
我有一个很奇怪的问题。我在 dll 中定义了一个接口(interface),如下所示: public interface IKreator2 { string Name { get; set;
在我的 openshift Drupal 托管中,网络都在 SSL 下 http://domain.com -> https://www.domain.com 确定 http://www.domain
我收到警告“退出构造函数时不可为空的事件‘SomeEvent’必须包含非空值。考虑将事件声明为可空。” 这是我的代码的一个非常简化的版本,它复制了完全相同的问题。我在这里错过了什么?这与 .Net 6
在一次大学考试中,我被要求测试一些 apache 簿记员类/方法,在这样做的过程中,我想在我的参数化测试中使用 mockito。没有 mockito 的测试工作正常但是当我尝试模拟接口(interfa
假设 A 列在 7 行中有以下值: 2 [空白的] 0 -0.3 0 [空白的] 0 如何获取范围(7 行)中非空/空白且不为零的最后一个值?因此,在这种情况下,正确答案是 -0.3。 最佳答案 =I
考虑以下受 this talk 启发的代码: template struct even_common_type_helper_impl; template struct even_common_typ
考虑这段代码, struct A {}; struct B { B(const A&) {} }; void f(B) { cout << "f()"<
考虑下面的类(class)。如果我对它运行 Findbugs,它会在第 5 行但不在第 7 行给我一个错误(“可序列化类中的非 transient 非可序列化实例字段”)。 1 public clas
我正在编写一个 python 脚本来计算 数据包丢失 通过使用 ping IP 地址linux 中的 subprocess 模块。 CSV 文件中保存了多个 IP 地址。当只给出可 ping 目的地时
我只是做文本更改,在文本之前它工作正常。请任何人都可以帮助我。 提前致谢 最佳答案 我已经解决了: ionic cordova 插件rmcordova-plugin-ionic-webview ion
我如何定义 在 persistence.xml 中? 我的项目在 Tomcat 6 和 Tomcat 7 中运行良好。 现在我正在使用 Struts 2 Spring 3.0.5 JPA 2 Jbos
我有一个 maven 仓库中不存在的第三方 jar,我们称它为“a.jar”,它也依赖于至少 20 多个第三方 jar,其中大部分不在 maven 中或者,我们称它们为“b.jar、c.jar、d.j
我已经浏览了各种线程很多小时(不夸张),但一直无法找到一种解决方案组合,使我能够将非 www 和 http 转发到 www 和 https,同时仍然能够查看 php 文件没有扩展名。如下是我的ngin
Scott Meyer 关于非成员函数增加封装并允许更优雅的设计(设计方面)的论点对我来说似乎非常有效。看这里:Article 但是我对此有疑问。 (似乎还有其他人,尤其是库开发人员,他们通常完全忽略
在对类设计的一些事实感到困惑时,特别是函数是否应该是成员,我查看了 Effective c++ 并找到了第 23 条,即 Prefer non-member non-friend functions
我正在尝试使用 firebase 云功能将通知发送到一个点半径的圆内的设备。我能够获取圈内设备的 ID,但无法获取 token ,使用 console.log(token) 打印时 token 为空。
我在我的项目中使用 React-ckeditor 5 包。我得到一个反序列化的 html 数据,我正在使用 React-html-parser 包将它解析成 html 模板,并将这个解析的数据传递给
我是一名优秀的程序员,十分优秀!