You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin iOS仅在AppStore发布版中出现方法未找到问题

问题排查与解决方案

核心原因分析

调试模式下链接器和AOT编译默认关闭,所有方法都能正常加载;但TestFlight发布构建会启用链接器裁剪未被直接引用的代码,加上Xamarin.Forms 5(基于.NET Standard 2.1)与.NET 8版本的Microsoft.AspNetCore.SignalR.Client、System.Formats.ASN1存在兼容性差异,导致必要方法被误裁剪。

具体解决步骤

  • 添加链接器保留规则
    在iOS项目中创建Linker.xml文件,写入以下配置强制保留缺失的类型和方法:

    <linker>
      <!-- 保留SignalR相关类型 -->
      <assembly fullname="Microsoft.AspNetCore.Http.Connections">
        <type fullname="Microsoft.AspNetCore.Http.Connections.NegotiationResponse" preserve="all" />
      </assembly>
      <!-- 保留ASN1相关所有类型 -->
      <assembly fullname="System.Formats.ASN1">
        <type fullname="*" preserve="all" />
      </assembly>
    </linker>
    

    然后在iOS项目的.csproj中引入该文件:

    <ItemGroup>
      <LinkDescription Include="Linker.xml" />
    </ItemGroup>
    
  • 调整链接器行为
    发布构建时选择仅链接SDK程序集(而非“链接所有程序集”),减少第三方依赖库被误裁剪的概率。

  • 降级SignalR Client版本
    Xamarin.Forms 5对.NET 8类库的支持有限,尝试将Microsoft.AspNetCore.SignalR.Client降级到6.0.x系列(.NET 6 LTS版本),此版本与.NET Standard 2.1兼容性更好。

  • 排查AOT编译影响
    临时关闭iOS项目的AOT编译验证:在.csproj中添加<EnableAOT>false</EnableAOT>,发布到TestFlight测试。若问题消失,说明是AOT裁剪导致,需针对相关程序集添加AOT保留规则:

    <ItemGroup>
      <AotAssemblies Include="Microsoft.AspNetCore.Http.Connections.dll" />
      <AotAssemblies Include="System.Formats.ASN1.dll" />
    </ItemGroup>
    
  • 统一NuGet依赖版本
    确保共享库和iOS项目引用的Microsoft.AspNetCore.SignalR.Client、System.Formats.ASN1版本完全一致,避免版本冲突引发的依赖缺失。

内容的提问来源于stack exchange,提问作者Bartek Chyży

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:56:10