[mono][tests] Run Mono iOS sample as functional test on the simulator and maccatalyst...
authorMilos Kotlar <kotlarmilos@gmail.com>
Sun, 11 Jun 2023 18:04:57 +0000 (20:04 +0200)
committerGitHub <noreply@github.com>
Sun, 11 Jun 2023 18:04:57 +0000 (20:04 +0200)
* Add HelloiOS sample on iossimulator

* Enable AOT compilation and JustInterp mode on iossimulator

* Remove custom tasks from the sample app

* Set default props for the sample app. Use diagnostics_tracing and marshal-ilgen for RuntimeComponents

---------

Co-authored-by: Filip Navara <filip.navara@gmail.com>
eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
src/libraries/tests.proj
src/mono/msbuild/apple/build/AppleBuild.InTree.targets
src/mono/msbuild/apple/build/AppleBuild.targets
src/mono/sample/iOS/Makefile
src/mono/sample/iOS/Program.csproj

index 89604f8..60b8ab5 100644 (file)
@@ -50,7 +50,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App NoLLVM
         artifactName: iOSSampleAppNoLLVMSymbols
@@ -72,7 +72,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App NoLLVM NoSymbols
         artifactName: iOSSampleAppNoLLVMNoSymbols
@@ -94,7 +94,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App LLVM
         artifactName: iOSSampleAppLLVMSymbols
@@ -116,7 +116,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App LLVM NoSymbols
         artifactName: iOSSampleAppLLVMNoSymbols
@@ -137,7 +137,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App Symbols
         artifactName: iOSSampleAppSymbols
@@ -159,7 +159,7 @@ steps:
         artifactName:  ${{ parameters.artifactName }}
     - template: /eng/pipelines/common/upload-artifact-step.yml
       parameters:
-        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+        rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
         includeRootFolder: true
         displayName: iOS Sample App NoSymbols
         artifactName: iOSSampleAppNoSymbols
index 32854a8..e3e0b3b 100644 (file)
   </ItemGroup>
 
   <ItemGroup Condition="'$(ArchiveTests)' == 'true' and '$(RunSmokeTestsOnly)' != 'true' and '$(RunGrpcTestsOnly)' != 'true' and '$(TargetOS)' == 'iossimulator'">
-    <!-- https://github.com/dotnet/runtime/issues/57666 -->
-    <!-- <ProjectReference Include="$(MonoProjectRoot)sample\iOS\Program.csproj"
-                      BuildInParallel="false" /> -->
+    <ProjectReference Include="$(MonoProjectRoot)sample\iOS\Program.csproj"
+                      BuildInParallel="false" />
     <ProjectReference Include="$(RepoRoot)\src\tests\FunctionalTests\iOS\Simulator\**\*.Test.csproj"
                       Exclude="@(ProjectExclusions)"
                       BuildInParallel="false" />
   </ItemGroup>
 
   <ItemGroup Condition="'$(ArchiveTests)' == 'true' and '$(RunSmokeTestsOnly)' != 'true' and '$(RunGrpcTestsOnly)' != 'true' and '$(TargetOS)' == 'maccatalyst'">
-    <!-- https://github.com/dotnet/runtime/issues/57666 -->
-    <!-- <ProjectReference Include="$(MonoProjectRoot)sample\iOS\Program.csproj"
-                      BuildInParallel="false" /> -->
+    <ProjectReference Include="$(MonoProjectRoot)sample\iOS\Program.csproj"
+                      BuildInParallel="false" />
     <ProjectReference Include="$(RepoRoot)\src\tests\FunctionalTests\iOS\Simulator\**\*.Test.csproj"
                       Exclude="@(ProjectExclusions)"
                       BuildInParallel="false" />
index 91450d2..d8519a2 100644 (file)
@@ -3,8 +3,9 @@
   <UsingTask TaskName="MonoAOTCompiler" AssemblyFile="$(MonoAOTCompilerTasksAssemblyPath)" />
   <UsingTask TaskName="RuntimeConfigParserTask" AssemblyFile="$(MonoTargetsTasksAssemblyPath)" />
 
-  <!-- For MacCatalyst, adhoc is the default.  Set it here so that we don't have to specify when running local -->
+  <!-- For MacCatalyst, adhoc is the default. Set it here so that we don't have to specify when running local -->
   <PropertyGroup>
+    <DevTeamProvisioning Condition="'$(DevTeamProvisioning)' == '' and '$(TargetOS)' != 'maccatalyst'">-</DevTeamProvisioning>
     <DevTeamProvisioning Condition="'$(DevTeamProvisioning)' == '' and '$(TargetOS)' == 'maccatalyst'">adhoc</DevTeamProvisioning>
   </PropertyGroup>
 
index 63431a1..990269a 100644 (file)
@@ -48,6 +48,7 @@
       <BundleDir>$(AppleBundleDir)</BundleDir>
       <_MonoHeaderPath>$([MSBuild]::NormalizeDirectory($(MicrosoftNetCoreAppRuntimePackRidNativeDir), 'include', 'mono-2.0'))</_MonoHeaderPath>
       <_AotModuleTablePath>$(AppleBundleDir)\modules.m</_AotModuleTablePath>
+      <AppName Condition="'$(AppName)' == ''">$(AssemblyName)</AppName>
     </PropertyGroup>
 
     <!-- common linker arguments for app and library builds -->
@@ -84,6 +85,7 @@
     <PropertyGroup>
       <_AppleRuntimeConfigFilePath Condition="'$(_AppleRuntimeConfigFilePath)' == ''">$([MSBuild]::NormalizePath($(AppleBuildDir), '$(AssemblyName).runtimeconfig.json'))</_AppleRuntimeConfigFilePath>
       <_ParsedRuntimeConfigFilePath Condition="'$(_ParsedRuntimeConfigFilePath)' == ''">$([MSBuild]::NormalizePath($(AppleBuildDir), 'runtimeconfig.bin'))</_ParsedRuntimeConfigFilePath>
+      <UseConsoleUITemplate Condition="'$(UseConsoleUITemplate)' == ''">true</UseConsoleUITemplate>
     </PropertyGroup>
 
     <RemoveDir Directories="$(AppleBundleDir)" />
         <AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
         <ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
       </_AotInputAssemblies>
+      <_ExcludeFromAppDir Include="$(_iOSLikeDedupAssembly)" />
     </ItemGroup>
 
     <!-- 
       NativeMainSource="$(NativeMainSource)"
       Optimized="$(Optimized)"
       OutputDirectory="$(AppleBundleDir)"
-      ProjectName="$(AssemblyName)"
+      ProjectName="$(AppName)"
       RuntimeComponents="$(RuntimeComponents)"
       TargetOS="$(TargetOS)"
-      UseConsoleUITemplate="True">
+      ExcludeFromAppDir="@(_ExcludeFromAppDir)"
+      UseConsoleUITemplate="$(UseConsoleUITemplate)">
         <Output TaskParameter="AppBundlePath" PropertyName="AppBundlePath" />
         <Output TaskParameter="XcodeProjectPath" PropertyName="XcodeProjectPath" />
     </AppleAppBuilderTask>
index ef24938..93d0155 100644 (file)
@@ -2,7 +2,6 @@ MONO_CONFIG?=Debug
 MONO_ARCH?=x64
 DOTNET := ../../../../dotnet.sh
 USE_LLVM=true
-AOT?=false
 TARGET?=iossimulator
 DEPLOY_AND_RUN?=true
 APP_SANDBOX?=false
@@ -25,68 +24,72 @@ appbuilder:
        $(DOTNET) build -c Debug $(TOOLS_DIR)/AppleAppBuilder/AppleAppBuilder.csproj
 
 runtimepack:
-       ../../../../build.sh Mono+Libs -os $(TARGET)  -arch $(MONO_ARCH) -c $(MONO_CONFIG)
+       ../../../../build.sh mono+libs -os $(TARGET) -arch $(MONO_ARCH) -c $(MONO_CONFIG)
+
+build-appbundle: clean appbuilder
+       $(DOTNET) publish \
+       -c $(MONO_CONFIG) \
+       /p:TargetOS=$(TARGET) \
+       /p:TargetArchitecture=$(MONO_ARCH) \
+       /p:MonoEnableLLVM=$(USE_LLVM) \
+       /p:StripDebugSymbols=$(STRIP_DEBUG_SYMBOLS) \
+       /p:DeployAndRun=false \
+       /bl
 
 run: clean appbuilder
        $(DOTNET) publish \
        -c $(MONO_CONFIG) \
        /p:TargetOS=ios \
        /p:TargetArchitecture=$(MONO_ARCH) \
-       /p:UseLLVM=$(USE_LLVM) \
-       /p:ForceAOT=$(AOT) \
-       '/p:RuntimeComponents="$(RUNTIME_COMPONENTS)"' \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       '/p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)"'
+       /p:MonoEnableLLVM=$(USE_LLVM) \
+       /p:DeployAndRun=$(DEPLOY_AND_RUN) \
+       /p:RuntimeComponents="$(RUNTIME_COMPONENTS)" \
+       /p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)" \
+       /bl
 
 run-sim: clean appbuilder
        $(DOTNET) publish \
        -c $(MONO_CONFIG) \
        /p:TargetOS=iossimulator \
        /p:TargetArchitecture=$(MONO_ARCH) \
-       /p:UseLLVM=$(USE_LLVM) \
-       /p:ForceAOT=$(AOT) \
-       '/p:RuntimeComponents="$(RUNTIME_COMPONENTS)"' \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       '/p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)"'
+       /p:MonoEnableLLVM=$(USE_LLVM) \
+       /p:DeployAndRun=$(DEPLOY_AND_RUN) \
+       /p:RuntimeComponents="$(RUNTIME_COMPONENTS)" \
+       /p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)" \
+       /bl
 
-build-appbundle: clean appbuilder
-       $(DOTNET) publish -c $(MONO_CONFIG) /p:TargetOS=$(TARGET) /p:TargetArchitecture=$(MONO_ARCH) \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       /p:StripDebugSymbols=$(STRIP_DEBUG_SYMBOLS) \
-       /p:UseLLVM=$(USE_LLVM) /p:ForceAOT=$(AOT) /bl \
-
-run-catalyst:
+run-sim-interp: clean appbuilder
        $(DOTNET) publish \
        -c $(MONO_CONFIG) \
-       /p:TargetOS=maccatalyst \
+       /p:TargetOS=iossimulator \
        /p:TargetArchitecture=$(MONO_ARCH) \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       /p:UseLLVM=False \
-       /p:ForceAOT=True \
-       /p:EnableAppSandbox=$(APP_SANDBOX)
+       /p:MonoEnableLLVM=$(USE_LLVM) \
+       /p:MonoForceInterpreter=true \
+       /p:DeployAndRun=$(DEPLOY_AND_RUN) \
+       /p:RuntimeComponents="$(RUNTIME_COMPONENTS)" \
+       /p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)" \
+       /bl
 
-run-sim-interp: clean appbuilder
+run-catalyst: clean appbuilder
        $(DOTNET) publish \
        -c $(MONO_CONFIG) \
-       /p:TargetOS=iossimulator \
+       /p:TargetOS=maccatalyst \
        /p:TargetArchitecture=$(MONO_ARCH) \
-       /p:UseLLVM=$(USE_LLVM) \
-       /p:ForceAOT=$(AOT) \
-       /p:MonoForceInterpreter=true \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       '/p:RuntimeComponents="$(RUNTIME_COMPONENTS)"' \
-       '/p:DiagnosticPorts="$(DIAGNOSTIC_PORTS)"'
+       /p:MonoEnableLLVM=false \
+       /p:DeployAndRun=$(DEPLOY_AND_RUN) \
+       /p:EnableAppSandbox=$(APP_SANDBOX) \
+       /bl
 
-run-catalyst-interp:
+run-catalyst-interp: clean appbuilder
        $(DOTNET) publish \
        -c $(MONO_CONFIG) \
        /p:TargetOS=maccatalyst \
        /p:TargetArchitecture=$(MONO_ARCH) \
-       /p:UseLLVM=False \
-       '/p:DeployAndRun="$(DEPLOY_AND_RUN)"' \
-       /p:ForceAOT=True \
+       /p:MonoEnableLLVM=False \
+       /p:MonoForceInterpreter=true \
+       /p:DeployAndRun=$(DEPLOY_AND_RUN) \
        /p:EnableAppSandbox=$(APP_SANDBOX) \
-       /p:MonoForceInterpreter=true
+       /bl
 
 clean:
        rm -rf bin
index c413160..38d3984 100644 (file)
     <OutputType>Exe</OutputType>
     <OutputPath>bin</OutputPath>
     <TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
-    <TargetOS Condition="'$(TargetOS)' == ''">ios</TargetOS>
-    <TargetOS Condition="'$(TargetsiOSSimulator)' == 'true'">iossimulator</TargetOS>
-    <DeployAndRun Condition="'$(DeployAndRun)' == ''">true</DeployAndRun>
-    <iOSLikeDedup Condition="'$(TargetOS)' == 'ios'">true</iOSLikeDedup>
+    <TargetOS Condition="'$(TargetOS)' == ''">iossimulator</TargetOS>
     <RuntimeIdentifier>$(TargetOS)-$(TargetArchitecture)</RuntimeIdentifier>
     <DefineConstants Condition="'$(ArchiveTests)' == 'true'">$(DefineConstants);CI_TEST</DefineConstants>
     <AppName>HelloiOS</AppName>
-    <StripDebugSymbols Condition="'$(StripDebugSymbols)' == ''">false</StripDebugSymbols>
-  </PropertyGroup>
+    <MainLibraryFileName>$(AssemblyName).dll</MainLibraryFileName>
 
-  <PropertyGroup>
+    <RunAOTCompilation Condition="'$(RunAOTCompilation)' == ''">true</RunAOTCompilation>
     <PublishTrimmed>true</PublishTrimmed>
     <TrimMode>Link</TrimMode>
-  </PropertyGroup>
-
-  <PropertyGroup Condition="'$(TargetOS)' == 'maccatalyst'">
-    <DevTeamProvisioning Condition="'$(TargetOS)' == 'maccatalyst' and '$(DevTeamProvisioning)' == ''">adhoc</DevTeamProvisioning>
-    <EnableAppSandbox Condition="'$(EnableAppSandbox)' == ''">false</EnableAppSandbox>
-  </PropertyGroup>
-
-  <Import Project="$(RepoTasksDir)AotCompilerTask\MonoAOTCompiler.props" />
-  <UsingTask TaskName="AppleAppBuilderTask"
-             AssemblyFile="$(AppleAppBuilderTasksAssemblyPath)" />
+    <Optimized Condition="'$(Configuration)' == 'Release'">true</Optimized>
 
-  <UsingTask TaskName="MonoAOTCompiler"
-             AssemblyFile="$(MonoAOTCompilerTasksAssemblyPath)" />
+    <EnableDefaultAssembliesToBundle>true</EnableDefaultAssembliesToBundle>
+    <AppleGenerateAppBundle>true</AppleGenerateAppBundle>
+    <GenerateXcodeProject>true</GenerateXcodeProject>
+    <UseConsoleUITemplate>false</UseConsoleUITemplate>
 
-  <UsingTask TaskName="ILStrip"
-             AssemblyFile="$(MonoTargetsTasksAssemblyPath)" />
-
-  <Target Name="BuildAppBundle" AfterTargets="CopyFilesToPublishDirectory">
-    <PropertyGroup>
-      <AppDir>$(MSBuildThisFileDirectory)$(PublishDir)\app</AppDir>
-      <IosSimulator Condition="'$(TargetsiOSSimulator)' == 'true'">iPhone 11</IosSimulator>
-      <Optimized Condition="'$(Configuration)' == 'Release'">True</Optimized>
-      <RunAOTCompilation Condition="('$(TargetsMacCatalyst)' == 'false' and '$(IosSimulator)' == '') or '$(ForceAOT)' == 'true'">true</RunAOTCompilation>
-    </PropertyGroup>
-
-    <RemoveDir Directories="$(AppDir)" />
-
-    <PropertyGroup Condition="'$(iOSLikeDedup)' == 'true'">
-      <_iOSLikeDedupAssembly>$(MSBuildThisFileDirectory)$(PublishDir)\aot-instances.dll</_iOSLikeDedupAssembly>
-    </PropertyGroup>
-    <WriteLinesToFile Condition="'$(iOSLikeDedup)' == 'true'" File="$(IntermediateOutputPath)/aot-instances.cs" Overwrite="true" Lines="" WriteOnlyWhenDifferent="true" />
-    <Csc Condition="'$(iOSLikeDedup)' == 'true'"
-      Sources="$(IntermediateOutputPath)\aot-instances.cs"
-      OutputAssembly="$(_iOSLikeDedupAssembly)"
-      TargetType="library"
-      Deterministic="true"
-      References="@(ReferencePath)"
-      ToolExe="$(CscToolExe)"
-      ToolPath="$(CscToolPath)" />
-
-    <ItemGroup>
-      <BundleAssemblies Condition="'$(RunAOTCompilation)' != 'true'" Include="$(MSBuildThisFileDirectory)$(PublishDir)\*.dll" />
-      <AotInputAssemblies Condition="'$(RunAOTCompilation)' == 'true'" Include="$(MSBuildThisFileDirectory)$(PublishDir)\*.dll">
-        <AotArguments>@(MonoAOTCompilerDefaultAotArguments, ';')</AotArguments>
-        <ProcessArguments>@(MonoAOTCompilerDefaultProcessArguments, ';')</ProcessArguments>
-      </AotInputAssemblies>
-      <_ExcludeFromAppDir Include="$(_iOSLikeDedupAssembly)" />
-    </ItemGroup>
-
-    <PropertyGroup>
-      <AOTMode Condition="'$(TargetOS)' != 'maccatalyst'">Full</AOTMode>
-      <AOTMode Condition="'$(TargetOS)' == 'maccatalyst' and '$(MonoForceInterpreter)' != 'true'">Full</AOTMode>
-      <AOTMode Condition="'$(TargetOS)' == 'maccatalyst' and '$(MonoForceInterpreter)' == 'true'">JustInterp</AOTMode>
-    </PropertyGroup>
+    <BuildAppBundleAfterTargets Condition="'$(ArchiveTests)' != 'true'">CopyFilesToPublishDirectory</BuildAppBundleAfterTargets>
+    <BuildAppBundleAfterTargets Condition="'$(ArchiveTests)' == 'true'">CopyFilesToPublishDirectory;Build</BuildAppBundleAfterTargets>
+    <BuildAppBundleDependsOnTargets Condition="'$(ArchiveTests)' == 'true'">Publish</BuildAppBundleDependsOnTargets>
+  </PropertyGroup>
 
-    <MonoAOTCompiler
-        Condition="'$(RunAOTCompilation)' == 'true'"
-        CompilerBinaryPath="@(MonoAotCrossCompiler->WithMetadataValue('RuntimeIdentifier','$(TargetOS)-$(TargetArchitecture.ToLowerInvariant())'))"
-        Mode="$(AOTMode)"
-        OutputType="AsmOnly"
-        Assemblies="@(AotInputAssemblies)"
-        DedupAssembly="$(_iOSLikeDedupAssembly)"
-        AotModulesTablePath="$(AppDir)\modules.m"
-        AotModulesTableLanguage="ObjC"
-        OutputDir="$(PublishDir)"
-        IntermediateOutputPath="$(IntermediateOutputPath)"
-        UseLLVM="$(UseLLVM)"
-        LLVMPath="$(MonoAotCrossDir)">
-        <Output TaskParameter="CompiledAssemblies" ItemName="BundleAssemblies" />
-    </MonoAOTCompiler>
+  <Import Project="$(MonoProjectRoot)\msbuild\apple\build\AppleBuild.props" />
+  <Import Project="$(MonoProjectRoot)\msbuild\apple\build\AppleBuild.InTree.targets" />
 
-    <ILStrip Condition="'$(RunAOTCompilation)' == 'true' and '$(AOTMode)' == 'Full'" Assemblies="@(BundleAssemblies)" />
+  <Target Name="BuildAppBundle" AfterTargets="$(BuildAppBundleAfterTargets)" DependsOnTargets="$(BuildAppBundleDependsOnTargets)"/>
+  <Target Name="_SetAppleGenerateAppBundleProps" Condition="'$(TargetOS)' != 'ios' and '$(ArchiveTests)' != 'true'" BeforeTargets="_AppleGenerateAppBundle">
     <PropertyGroup>
-      <RuntimeComponents Condition="'$(RuntimeComponents)' == ''">marshal-ilgen</RuntimeComponents>
+      <RuntimeComponents>diagnostics_tracing;marshal-ilgen</RuntimeComponents>
     </PropertyGroup>
-
-    <AppleAppBuilderTask
-        TargetOS="$(TargetOS)"
-        Arch="$(TargetArchitecture)"
-        ProjectName="$(AppName)"
-        MonoRuntimeHeaders="$(MicrosoftNetCoreAppRuntimePackDir)runtimes\$(TargetOS)-$(TargetArchitecture)\native\include\mono-2.0"
-        Assemblies="@(BundleAssemblies)"
-        MainLibraryFileName="Program.dll"
-        GenerateXcodeProject="True"
-        BuildAppBundle="True"
-        DevTeamProvisioning="$(DevTeamProvisioning)"
-        OutputDirectory="$(AppDir)"
-        Optimized="$(Optimized)"
-        ForceAOT="$(RunAOTCompilation)"
-        ForceInterpreter="$(MonoForceInterpreter)"
-        RuntimeComponents="$(RuntimeComponents)"
-        EnableAppSandbox="$(EnableAppSandbox)"
-        DiagnosticPorts="$(DiagnosticPorts)"
-        StripSymbolTable="$(StripDebugSymbols)"
-        ExcludeFromAppDir="@(_ExcludeFromAppDir)"
-        AppDir="$(MSBuildThisFileDirectory)$(PublishDir)">
-        <Output TaskParameter="AppBundlePath" PropertyName="AppBundlePath" />
-        <Output TaskParameter="XcodeProjectPath" PropertyName="XcodeProjectPath" />
-    </AppleAppBuilderTask>
-
-    <Message Importance="High" Text="Xcode: $(XcodeProjectPath)"/>
-    <Message Importance="High" Text="App:   $(AppBundlePath)"/>
   </Target>
 
   <Target Name="RunAppBundle"
-          AfterTargets="BuildAppBundle"
+          AfterTargets="_AppleGenerateAppBundle"
           Condition="'$(ArchiveTests)' != 'true' and '$(DeployAndRun)' == 'true'">
-    <!-- FIXME: only run if the TargetArchitecture matches the current architecture -->
-
-    <!-- install and run on ios simulator or device -->
+    <!-- Install and run on a device or simulator -->
     <Exec Condition="'$(TargetOS)' == 'iossimulator'" Command="dotnet xharness apple run --app=$(AppBundlePath) --targets=ios-simulator-64 --output-directory=/tmp/out" />
     <Exec Condition="'$(TargetOS)' == 'ios'" Command="dotnet xharness apple run --app=$(AppBundlePath) --targets=ios-device --output-directory=/tmp/out" />
 
-    <!-- run on MacCatalyst -->
+    <!-- run on maccatalyst -->
     <Exec Condition="'$(TargetOS)' == 'maccatalyst'" Command="open -W $(AppBundlePath)" />
-
   </Target>
 
   <Target Name="CopySampleAppToHelixTestDir"
           Condition="'$(ArchiveTests)' == 'true'"
-          AfterTargets="Build"
-          DependsOnTargets="Publish;BuildAppBundle" >
+          AfterTargets="_AppleGenerateAppBundle" >
     <PropertyGroup>
       <!-- Helix properties -->
       <!-- AnyCPU as Platform-->