Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dotnet publish -f net8.0-ios -c Release is way too slow #21597

Open
rolfbjarne opened this issue Nov 8, 2024 · 18 comments
Open

dotnet publish -f net8.0-ios -c Release is way too slow #21597

rolfbjarne opened this issue Nov 8, 2024 · 18 comments
Labels
performance If an issue or pull request is related to performance
Milestone

Comments

@rolfbjarne
Copy link
Member

From @cmydur on Tue, 23 Jan 2024 04:32:52 GMT

Description

My Publish times for iOS are close an hour or so.

Steps to Reproduce

Create a new MAUI App
build the app
run dotnet publish -f net8.0-ios -c Release

Link to public reproduction project repository

No response

Version with bug

8.0.6

Is this a regression from previous behavior?

Not sure, did not test other versions

Last version that worked well

Unknown/Other

Affected platforms

iOS

Affected platform versions

iOS

Did you find any workaround?

No

Relevant log output

No response

Copied from original issue dotnet/maui#20090

@rolfbjarne
Copy link
Member Author

From @mobilewares on Tue, 23 Jan 2024 23:38:38 GMT

We consistently get ~5 minutes build times on our DevOps MacVM based pipeline (and same with 8.0.6 nugets) for the iOS build - which is typically a lot slower vs a local Mac machine. We do a MAUI workload install & a dotnet restore prior to this & it's a very large complex project with a lot of 3rd party components in use.
Are you able to see what point in the output/build process it's taking so long?

@rolfbjarne
Copy link
Member Author

From @cmydur on Wed, 24 Jan 2024 03:36:31 GMT

I'm running on my local Mac, this is where it is stuck for long time. One thing to note is Android build does not take as long

Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
Optimizing assemblies for size. This process might take a while.

@rolfbjarne
Copy link
Member Author

From @javrro on Thu, 01 Feb 2024 04:05:13 GMT

Im getting the same issue.
Though I havent waited the hour to see if it finishes the build.

@rolfbjarne
Copy link
Member Author

From @cmydur on Thu, 01 Feb 2024 04:34:38 GMT

It will finish after an hour

@rolfbjarne
Copy link
Member Author

From @vchelaru on Fri, 16 Feb 2024 21:02:55 GMT

I am also experiencing this problem - no comments from the maintainers on why this is happening or when it might be fixed?

@rolfbjarne
Copy link
Member Author

From @josemnbcamacho on Fri, 23 Feb 2024 14:30:49 GMT

I'm also having this problem. ADO pipelines were failing because build time was longer than one hour.

Added this to Release configuration and build times came back to normal:

<MtouchUseLlvm>False</MtouchUseLlvm>
<AotAssemblies>True</AotAssemblies>

@rolfbjarne
Copy link
Member Author

From @ninachen03 on Mon, 29 Apr 2024 08:45:57 GMT

Verified this issue with Visual Studio 17.6.10(build 428) ,I can not repro it.

@rolfbjarne
Copy link
Member Author

From @MrZander on Fri, 21 Jun 2024 22:29:53 GMT

I am also experiencing this issue.

Running dotnet 8.0.302

dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="My Provision" -p:ServerAddress=omitted -p:ServerUser=omitted -p:ServerPassword=omitted -p:TcpPort=omitted -p:_DotNetRootRemoteDirectory=/Users/myuser/Library/Caches/Xamarin/XMA/SDKs/dotnet/ -v diag

Adding <MtouchUseLlvm>False</MtouchUseLlvm> dropped my release build time from 2.5 hours to ~10 minutes. Still pretty dang slow, but it is at least manageable.

@rolfbjarne
Copy link
Member Author

From @pluggy on Wed, 28 Aug 2024 08:12:12 GMT

Same problem here. Half an hour for a release build is too much.

@rolfbjarne
Copy link
Member Author

From @MartyIX on Wed, 28 Aug 2024 15:39:37 GMT

(Would it help here to produce a binlog? See https://github.com/dotnet/maui/wiki/Capturing-Binary-Logs or https://dfederm.com/debugging-msbuild/. Just an idea.)

@rolfbjarne
Copy link
Member Author

From @rbev on Tue, 22 Oct 2024 06:38:34 GMT

I'm also having this problem. ADO pipelines were failing because build time was longer than one hour.

Added this to Release configuration and build times came back to normal:

<MtouchUseLlvm>False</MtouchUseLlvm>
<AotAssemblies>True</AotAssemblies>

Did this have any significant impact on package size or performance?

@rolfbjarne
Copy link
Member Author

From @rabuckley on Fri, 25 Oct 2024 11:29:23 GMT

I'm hitting very slow release build times too. Running the following on my M1 MacBook Pro took over 13 minutes. Publishing the same app takes just over one minute. Is such a large difference expected? Is the big difference between building for simulator vs. a real device?

dotnet new maui --name MauiBuildTime
cd MauiBuildTime
dotnet build -c release -f net9.0-ios -bl
Machine Specs and dotnet info
macOS Sequoia 15.0.1 (24A348) [Darwin 24.0.0]
Apple M1 Pro, 1 CPU, 10 logical and 10 physical cores

---

.NET SDK:
 Version:           9.0.100-rc.2.24474.11
 Commit:            315e1305db
 Workload version:  9.0.100-manifests.3424025a
 MSBuild version:   17.12.0-preview-24473-03+fea15fbd1

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  15.0
 OS Platform: Darwin
 RID:         osx-arm64
 Base Path:   /usr/local/share/dotnet/sdk/9.0.100-rc.2.24474.11/

.NET workloads installed:
 [maui]
   Installation Source: SDK 9.0.100-rc.2
   Manifest Version:    9.0.0-rc.2.24503.2/9.0.100-rc.2
   Manifest Path:       /usr/local/share/dotnet/sdk-manifests/9.0.100-rc.2/microsoft.net.sdk.maui/9.0.0-rc.2.24503.2/WorkloadManifest.json
   Install Type:        FileBased

Build

dotnet build -c release -f net9.0-ios -bl
You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
  MauiBuildTime net9.0-ios succeeded (788.8s) → bin/Release/net9.0-ios/iossimulator-arm64/MauiBuildTime.dll

Build succeeded in 789.0s

Publish

dotnet publish -c release -r ios-arm64 -f net9.0-ios -bl
You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
  MauiBuildTime net9.0-ios succeeded (69.2s) → bin/Release/net9.0-ios/ios-arm64/MauiBuildTime.dll

Build succeeded in 69.4s

@rbev
Copy link

rbev commented Nov 8, 2024

I'd like to point out that disabling LLVM dropped my iOS binary size by 30% and didn't have a noticeable performance penalty

Shaving 90% off my build times seems to be a small price to pay

@rolfbjarne
Copy link
Member Author

Another way to get a faster release build would be to enable NativeAOT for iOS.

@rolfbjarne rolfbjarne added this to the .NET 10 milestone Nov 19, 2024
@rolfbjarne rolfbjarne added the performance If an issue or pull request is related to performance label Nov 19, 2024
@tj-devel709
Copy link
Contributor

I was going to create this issue in macios but there is already an issue here. I'll tag my old issue in case it helps :)
dotnet/maui#26349

@bcaceiro
Copy link

Just wanted to point out that the same, or worse, happens using .net9
I am using a Mac M1Pro, and building release for iOS - so far 15 mins and nothing finished. It only prints
IL stripping assemblies
and nothing else in the console.

Any workaround for this? Or plans to address this?

@bcaceiro
Copy link

Alright so:
Mac M1 Pro
XCode 16.1
.net MAUI 9
workloads: maui 9.0.0/9.0.100 SDK 9.0.100

Build time - Build completed in 00:18:41.688
Release Config - default as per new maui solution
NugetPackages:

  • MAUI
  • Maps
  • Sentry

@brunck
Copy link

brunck commented Dec 15, 2024

I'm seeing this in Debug configurations when building for a device (not simulator). I can try to make a minimal repro if that's necessary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance If an issue or pull request is related to performance
Projects
None yet
Development

No branches or pull requests

5 participants