runtime: [Bug] Publishing maui rc2 app to App Store not working -- The app references non-public symbols in MyContactNetwork.MobileMaui: _proc_pidinfo

Description

I’m running into an App Store rejection issue with .NET 6.0 RC 2 + MAUI + iOS + WebView.Maui:

ITMS-90338: Non-public API usage - The app references non-public symbols in MyContactNetwork.MobileMaui: _proc_pidinfo. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/

I believe that the offending package is System.Diagnostics.Process, which I’m guessing is referenced (and so ILLink won’t remove, no matter what) because of this line:

https://github.com/dotnet/runtime/blob/1c7100b0c21a2af147362c7b5c61408611743ded/src/libraries/Common/src/Interop/OSX/Interop.libproc.GetProcessInfoById.cs#L93

which is called by

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.OSX.cs

I tried adding the System.Diagnostics.Process.dll to the trimmer exceptions but it didn’t work - I believe something in your code is referencing it.

ILinker build output:

ILLink: Processing embedded substitution descriptor ILLink.Substitutions.xml from System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Assembly System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a : skipped (SDK)
         ILLink: Reduced '11' instructions in conditional branches for [System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] method System.SR.GetResourceString(String)
         ILLink: Reduced '4' instructions in conditional branches for [System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] method System.SR.Format(String,Object)
         ILLink: Reduced '236' instructions in conditional branches for [System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] method System.Diagnostics.Process.StartCore(ProcessStartInfo)
ILLink: Reduced '5' instructions in conditional branches for [System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] method System.SR.Format(String,Object,Object)
 ILLink: Reduced '1' instructions in conditional branches for [System.Diagnostics.Process, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] method System.Diagnostics.ProcessWaitState.Holder.Finalize()

Reproduction Steps

Build the base MAUI Blazor template in Release+iOS+ARM64 and publish to App Store TestFlight, using the following in csproj:

<RuntimeIdentifier Condition="$(TargetFramework.Contains('-ios')) AND '$(Configuration)' == 'Release'">ios-arm64</RuntimeIdentifier>

Expected behavior

Successful publish to the app store

Actual behavior

Did not publish

Regression?

Similar issue: https://github.com/dotnet/runtime/issues/57931

Known Workarounds

No response

Configuration

.NET 6 rc2 MAUI Single Project Blazor + MAUI.WebView iOS ARM64 Build

Other information

No response

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19 (13 by maintainers)

Commits related to this issue

Most upvoted comments

I’m reopening, because AFACT this is still an issue when the app isn’t trimmed.

@MaximLipnin we’ll need this in a servicing release (6.0.200 or something similar), we’re not targeting 7.0 for a while yet.

Doing a quick look at a Maui app locally, I see System.CodeDom is pulled in by Microsoft.Maui.Controls.Build.Tasks.

      "Microsoft.Maui.Controls.Build.Tasks/6.0.101-preview.11.2122": {
        "type": "package",
        "dependencies": {
          "Microsoft.Maui.Graphics": "6.0.101-preview.11.679",
          "System.CodeDom": "4.7.0"
        },
        "build": {
          "build/Microsoft.Maui.Controls.Build.Tasks.props": {},
          "build/Microsoft.Maui.Controls.Build.Tasks.targets": {}
        }
      },

I fixed this with https://github.com/dotnet/maui/pull/888, but it regressed with Merge branch ‘release/6.0.1xx-preview4’.

cc @PureWeen

I will submit a fix again to dotnet/maui.

I can confirm this issue on a dotnet new MAUI Blazor and MAUI template, in release/ios-arm64. After release linking, System.Diagnostics.Process.dll is still part of the app bundle, and proc_pidinfo is not linked out, even when the linker is explicitly told to link this DLL. So there’s gotta be a direct reference somewhere within MAUI or its libraries, I just haven’t found it yet.

dotnet new maui:

admin@DXT037 Maui.New % grep -r pidinfo .
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/Maui.New matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.llvm.o matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s.opt.bc matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s.bc matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.o matches
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_threadinfo__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_threadinfo__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_ulong__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_ulong__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_taskallinfo__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_taskallinfo__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_threadinfo__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_ulong__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_taskallinfo__int

dotnet new maui-blazor:

admin@DXT037 mauiblazor.new % grep -r pidinfo .
Binary file ./obj/Release/net6.0-ios/iossimulator-x64/linked/System.Private.CoreLib.dll matches
Binary file ./obj/Release/net6.0-ios/iossimulator-x64/linked/System.Diagnostics.Process.dll matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/MauiBlazor.New matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.llvm.o matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s.opt.bc matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s.bc matches
Binary file ./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.o matches
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_threadinfo__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_threadinfo__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_ulong__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_ulong__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:	.no_dead_strip wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_taskallinfo__int
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:wrapper_managed_to_native_Interop_libproc_proc_pidinfo_int_int_ulong_Interop_libproc_proc_taskallinfo__int:
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl _proc_pidinfo
./obj/Release/net6.0-ios/ios-arm64/nativelibraries/aot-output/arm64/System.Diagnostics.Process.dll.s:bl wrapper_managed_to_native_Interop_libproc_pr