【发布时间】:2020-02-01 14:27:55
【问题描述】:
当我为我的 Xamarin Forms iOS 应用程序构建档案时,链接器正在消除 Firebase 所需的一些符号。构建工作正常。我知道可以使用 --linkskip 来保留程序集,但是您如何确定需要指定哪个程序集来保留符号。
【问题讨论】:
标签: xamarin.forms xamarin.ios linker
当我为我的 Xamarin Forms iOS 应用程序构建档案时,链接器正在消除 Firebase 所需的一些符号。构建工作正常。我知道可以使用 --linkskip 来保留程序集,但是您如何确定需要指定哪个程序集来保留符号。
【问题讨论】:
标签: xamarin.forms xamarin.ios linker
如果在某些程序集上使用 [Preserve] 是不可能的(例如,第 3 方代码)或作为错误的临时解决方法,这将很有帮助。
你可以看看Skipping Assemblies,当哪个程序集没有使用或者出现哪个程序集的bug时,你可以识别出来。
【讨论】:
我发现Object Browser 对此非常有帮助。如果您将浏览范围设置为“我的解决方案”,它将显示在当前解决方案中定义和引用的所有类。从那里您可以搜索在运行时丢失的类(搜索可能需要几秒钟,具体取决于您的解决方案大小)。选择相应的类并删除搜索文本。选定的类保持选中状态,您可以看到定义该类的容器(即程序集)并将其添加到链接跳过。
附带说明:当您的项目增长时,链接器可能会添加许多例外情况。虽然可以使用 linkskip 添加所有这些,但a linker XML definition 可能更可行。要使用它,请添加一个带有构建目标 LinkDescription 的 XML 文件。在该文件中添加要保留的程序集和类型
<linker>
<assembly fullname="Firebase.XXX">
<type fullname="*" /> <-- Preserve everything from that assembly -->
</assembly>
</linker>
【讨论】: