xamarin / xamarin-macios

.NET for iOS, Mac Catalyst, macOS, and tvOS provide open-source bindings of the Apple SDKs for use with .NET managed languages such as C#
Other
2.49k stars 515 forks source link

App Store rejection when using certain classes #8544

Closed praeclarum closed 4 years ago

praeclarum commented 4 years ago

Apple rejected my app for using the static registrar with some types.

In their own words,

The issue here appears to be a matter of the Xamarin dynamic class linking mechanism in use for your app. Specifically, several classes which the app invokes dynamically were at one point non-public APIs, and the app’s strong linking means some users might end up inadvertently running into unexpected behaviors or other concerns because of this implementation.

It may be necessary to check with the SDK developer for assistance on resolving this.

It would seem that the dynamic registrar is needed for the following types.

Is it possible to use a mixed mode registrar?

QuickLookThumbnailing

LinkPresentation

PencilKit

Others

Steps to Reproduce

  1. Write an app that uses one of the above types
  2. Enable the static registrar (on by default)
  3. Submit the app to Apple

Expected Behavior

  1. Apple approves the app

Actual Behavior

  1. Rejection because APIs used to be private

Environment

=== Visual Studio Enterprise 2019 for Mac (Preview) ===

Version 8.6 Preview (8.6 build 4387)
Installation UUID: 4ba352e1-73e8-4dab-a9db-28012ca05af8
    GTK+ 2.24.23 (Raleigh theme)
    Xamarin.Mac 6.18.0.23 (d16-6 / 088c73638)

    Package version: 610000103

=== Mono Framework MDK ===

Runtime:
    Mono 6.10.0.103 (2019-12/4a2a26ce694) (64-bit)
    Package version: 610000103

=== Roslyn (Language Service) ===

3.6.0-3.20210.9+4eafdcb1bcbd8d3573f2ba6065e56d9b9ce4f8a3

=== NuGet ===

Version: 5.6.0.6558

=== .NET Core SDK ===

SDK: /usr/local/share/dotnet/sdk/3.1.200/Sdks
SDK Versions:
    3.1.200
    3.1.102
    3.1.101
    3.1.100
    3.0.100
    3.0.100-preview5-011568
    3.0.100-preview-009812
    2.2.203
    2.2.103
    2.1.302
    2.1.300-preview2-008530
    2.0.3
MSBuild SDKs: /Library/Frameworks/Mono.framework/Versions/6.10.0/lib/mono/msbuild/Current/bin/Sdks

=== .NET Core Runtime ===

Runtime: /usr/local/share/dotnet/dotnet
Runtime Versions:
    3.1.2
    3.1.1
    3.1.0
    3.0.0
    3.0.0-preview5-27626-15
    3.0.0-preview-27122-01
    2.2.4
    2.2.1
    2.1.17
    2.1.16
    2.1.15
    2.1.13
    2.1.2
    2.1.0-preview2-26406-04
    2.0.3

=== Xamarin.Profiler ===

Version: 1.6.12.26
Location: /Applications/Xamarin Profiler.app/Contents/MacOS/Xamarin Profiler

=== Updater ===

Version: 11

=== Apple Developer Tools ===

Xcode 11.4.1 (16137)
Build 11E503a

=== Xamarin.Mac ===

Version: 6.18.1.31 (Visual Studio Enterprise)
Hash: b3eedfed9
Branch: d16-6
Build date: 2020-04-09 10:22:36-0400

=== Xamarin.iOS ===

Version: 13.18.1.31 (Visual Studio Enterprise)
Hash: b3eedfed9
Branch: d16-6
Build date: 2020-04-09 10:22:36-0400

=== Xamarin Designer ===

Version: 16.6.0.329
Hash: d4f8bcd13
Branch: remotes/origin/d16-6
Build date: 2020-04-24 02:16:02 UTC

=== Xamarin.Android ===

Version: 10.3.0.74 (Visual Studio Enterprise)
Commit: xamarin-android/d16-6/964ac42
Android SDK: /Users/fak/Library/Developer/Xamarin/android-sdk-macosx
    Supported Android versions:
        4.4 (API level 19)
        6.0 (API level 23)
        7.0 (API level 24)
        7.1 (API level 25)
        8.1 (API level 27)

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 26.0.2
SDK Build Tools Version: 26.0.3

Build Information: 
Mono: 165f4b0
Java.Interop: xamarin/java.interop/d16-6@2cab35c
ProGuard: xamarin/proguard/master@905836d
SQLite: xamarin/sqlite/3.31.1@49232bc
Xamarin.Android Tools: xamarin/xamarin-android-tools/d16-6@bfb66f3

=== Microsoft Mobile OpenJDK ===

Java SDK: /Users/fak/Library/Developer/Xamarin/jdk/microsoft_dist_openjdk_8.0.25
1.8.0-25
Android Designer EPL code available here:
https://github.com/xamarin/AndroidDesigner.EPL

=== Android SDK Manager ===

Version: 16.6.0.50
Hash: 5901879
Branch: remotes/origin/d16-6
Build date: 2020-04-22 18:34:28 UTC

=== Android Device Manager ===

Version: 16.6.0.90
Hash: a1af2f6
Branch: remotes/origin/d16-6
Build date: 2020-04-22 18:34:48 UTC

=== Build Information ===

Release ID: 806004387
Git revision: e9c7399e5072db3ea9868e0143f949d3a543c594
Build date: 2020-04-28 15:43:52-04
Build branch: release-8.6
Xamarin extensions: e9c7399e5072db3ea9868e0143f949d3a543c594

=== Operating System ===

Mac OS X 10.15.4
Darwin 19.4.0 Darwin Kernel Version 19.4.0
    Wed Mar  4 22:28:40 PST 2020
    root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64

=== Enabled user installed extensions ===

MSBuild Editor 2.4.0
rolfbjarne commented 4 years ago

Rejection because APIs used to be private

🤔

I'm going to be blunt here, but this makes no sense (from Apple).

When you use the static registrar, we generate Objective-C code to bridge between your managed code and iOS' Objective-C code. This Objective-C code is just like Objective-C code any Objective-C developer would write in Xcode. There's no actual difference. They're effectively saying that you can't write Objective-C code that uses any classes that were once private...

They're even contradicting themselves in the rejection:

Specifically, several classes which the app invokes dynamically were at one point non-public APIs, and the app’s strong linking [...]

It's either "dynamically" or "strong linking", both doesn't make sense.

Could you share the complete rejection email you got from Apple? Maybe that will give us any clues as to what they didn't like.

spouliot commented 4 years ago

@praeclarum can you also give us a copy of the

FWIW we ran our submission tests yesterday (like every week) which includes a un-linked app (with every symbols) and the binary was validated. I does not mean there can't be bugs, but it should not be a general one.

praeclarum commented 4 years ago

I’m sorry but that was the complete message from them.

Yeah they misspoke. I think they meant to say static linking in some parts. The message I got was that you should only dynamically link to those APIs. But as you say, it’s not 100% clear.

I will send you the IPA on Slack.

praeclarum commented 4 years ago

@spouliot yeah I have submitted this app unlinked several times before. What can I say other than some App Reviewers let things slide.

praeclarum commented 4 years ago

Hi, just an update. I used linker XML files to remove the above classes.

Upon resubmission, I was rejected again for:

Your app uses or references the following non-public APIs:

  • LinkPresentation.framework

Which is baffling given that it's very much a public API now: https://developer.apple.com/documentation/linkpresentation?language=objc

Are you really getting apps approved that reference that framework?

dalexsoto commented 4 years ago

LinkPresentation.framework is iOS 13 and up, what is your minimum supported iOS listed in your info.plist? IIRC that framework used to be private before iOS 13

dalexsoto commented 4 years ago

On a side note looks like you are not alone with that LinkPresentation framework... https://github.com/xamarin/xamarin-macios/issues/7170

praeclarum commented 4 years ago

Thanks Alex, but I'm happy to just remove it but can't. Monotouch keeps including it in the registrar :-( Any thoughts on how to remove it?

11:40 AM fak@tau-1278 ~/D/P/Upsight|master⚡* 〉grep -r LinkPresentation Upsight.iOS/bin/iPhone/Release/
Binary file Upsight.iOS/bin/iPhone/Release//Continuous.app.dSYM/Contents/Resources/DWARF/Continuous matches
Binary file Upsight.iOS/bin/iPhone/Release//Continuous.app.mSYM/ee350f30043a4112b610859689d3396b/Xamarin.iOS.dll matches
Binary file Upsight.iOS/bin/iPhone/Release//Continuous.app/Xamarin.iOS.dll matches
Binary file Upsight.iOS/bin/iPhone/Release//Continuous.app/Continuous matches
11:41 AM fak@tau-1278 ~/D/P/Upsight|master⚡* 〉grep -r LinkPresentation Upsight.iOS/obj/iPhone/Release/
Upsight.iOS/obj/iPhone/Release//mtouch-cache/registrar.m:       { NULL, 0xEE04 /* #164 'LPLinkMetadata' => 'LinkPresentation.LPLinkMetadata, Xamarin.iOS' */, (MTTypeFlags) (0) /* None */ },
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/1-Link/Xamarin.iOS.dll matches
Upsight.iOS/obj/iPhone/Release//mtouch-cache/registrar.h:#import <LinkPresentation/LinkPresentation.h>
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/3-Build/Msym/Msym/tmp/Xamarin.iOS.dll matches
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/3-Build/Xamarin.iOS.dll matches
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip _LinkPresentation_LPLinkMetadata_get_ClassHandle
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:_LinkPresentation_LPLinkMetadata_get_ClassHandle:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip _LinkPresentation_LPLinkMetadata__ctor_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:_LinkPresentation_LPLinkMetadata__ctor_intptr:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip _LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:_LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip _LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:_LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip _LinkPresentation_LPLinkMetadata__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:_LinkPresentation_LPLinkMetadata__cctor:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip ObjCRuntime_Libraries_LinkPresentation__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:ObjCRuntime_Libraries_LinkPresentation__cctor:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl _LinkPresentation_LPLinkMetadata_get_ClassHandle
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl _LinkPresentation_LPLinkMetadata__ctor_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl _LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl _LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl _LinkPresentation_LPLinkMetadata__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl ObjCRuntime_Libraries_LinkPresentation__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:bl wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .no_dead_strip plt_ObjCRuntime_Runtime_GetNSObject_LinkPresentation_LPLinkMetadata_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:plt_ObjCRuntime_Runtime_GetNSObject_LinkPresentation_LPLinkMetadata_intptr:
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation_LPLinkMetadata"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation_LPLinkMetadata"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation.LPLinkMetadata:get_ClassHandle"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "_LinkPresentation_LPLinkMetadata_get_ClassHandle"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_get_ClassHandle
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_get_ClassHandle
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM6242=Lme_4f8 - _LinkPresentation_LPLinkMetadata_get_ClassHandle
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation.LPLinkMetadata:.ctor"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "_LinkPresentation_LPLinkMetadata__ctor_intptr"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata__ctor_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata__ctor_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM6246=Lme_4f9 - _LinkPresentation_LPLinkMetadata__ctor_intptr
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation.LPLinkMetadata:Copy"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "_LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM6251=Lme_4fa - _LinkPresentation_LPLinkMetadata_Copy_Foundation_NSZone
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation.LPLinkMetadata:EncodeTo"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "_LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM6255=Lme_4fb - _LinkPresentation_LPLinkMetadata_EncodeTo_Foundation_NSCoder
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "LinkPresentation.LPLinkMetadata:.cctor"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "_LinkPresentation_LPLinkMetadata__cctor"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad _LinkPresentation_LPLinkMetadata__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM6257=Lme_4fc - _LinkPresentation_LPLinkMetadata__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "ObjCRuntime.Libraries/LinkPresentation:.cctor"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "ObjCRuntime_Libraries_LinkPresentation__cctor"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad ObjCRuntime_Libraries_LinkPresentation__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad ObjCRuntime_Libraries_LinkPresentation__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM27926=Lme_16e2 - ObjCRuntime_Libraries_LinkPresentation__cctor
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM50663=Lme_3d01 - ObjCRuntime_Trampolines_NIDActionArity2V85_Invoke_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "(wrapper_delegate-invoke)_System.Action`2<LinkPresentation.LPLinkMetadata,_Foundation.NSError>:invoke_void_T1_T2"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .asciz "wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError"
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:   .quad wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError
Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.s:LDIFF_SYM407375=Lme_19034 - wrapper_delegate_invoke_System_Action_2_LinkPresentation_LPLinkMetadata_Foundation_NSError_invoke_void_T1_T2_LinkPresentation_LPLinkMetadata_Foundation_NSError
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Xamarin.iOS.dll.o matches
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/arm64/Continuous matches
Binary file Upsight.iOS/obj/iPhone/Release//mtouch-cache/2-PreBuild/Xamarin.iOS.dll matches
praeclarum commented 4 years ago

Here is my linker.xml

linker.xml.txt

praeclarum commented 4 years ago

Closing this bug thanks to the help of everyone.

I chose to link out LinkPresentation. Though, I may switch to require iOS 13 in the future. I'm hoping all this "private API" business would go away then.

Some tips to get rid of LinkPresentation:

Link out UIKit types In the end, removing this framework meant also not preserving some UIKit types:

        "IUIActivityItemSource"
        "UIActivityItemSource"
        "UIActivityItemProvider"
        "IUIActivityItemProvider"
        "UIActivityItemSource_Extensions"

Link out generated trampolines ObjC bodies have trampolines generated for them. Therefore you cannot preserve all of ObjcRuntime