[macos][msbuild] Cache actool results like XI (#4892)
- https://github.com/xamarin/xamarin-macios/issues/3584 - Prevents a 2 second pause on every single launch - Test added but commented out due to msbuild build machine issue :(
|
@ -27,8 +27,10 @@ Copyright (C) 2014 Xamarin. All rights reserved.
|
||||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.FindItemWithLogicalName" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.FindItemWithLogicalName" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.PackLibraryResources" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.PackLibraryResources" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.PropertyListEditor" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.PropertyListEditor" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.ReadItemsFromFile" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.SmartCopy" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.SmartCopy" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.MacDev.Tasks.UnpackLibraryResources" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.UnpackLibraryResources" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
|
<UsingTask TaskName="Xamarin.MacDev.Tasks.WriteItemsToFile" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.Mac.Tasks.ACTool" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.Mac.Tasks.ACTool" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.Mac.Tasks.CodesignVerify" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.Mac.Tasks.CodesignVerify" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
<UsingTask TaskName="Xamarin.Mac.Tasks.CompileAppManifest" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
<UsingTask TaskName="Xamarin.Mac.Tasks.CompileAppManifest" AssemblyFile="Xamarin.Mac.Tasks.dll" />
|
||||||
|
@ -73,6 +75,12 @@ Copyright (C) 2014 Xamarin. All rights reserved.
|
||||||
<_PreparedResourceRules></_PreparedResourceRules>
|
<_PreparedResourceRules></_PreparedResourceRules>
|
||||||
<_AppBundleName>$(AssemblyName)</_AppBundleName>
|
<_AppBundleName>$(AssemblyName)</_AppBundleName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<!-- actool output caches -->
|
||||||
|
<_ACTool_PartialAppManifestCache>$(IntermediateOutputPath)actool\_PartialAppManifest.items</_ACTool_PartialAppManifestCache>
|
||||||
|
<_ACTool_BundleResourceCache>$(IntermediateOutputPath)actool\_BundleResourceWithLogicalName.items</_ACTool_BundleResourceCache>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<Import Project="$(MSBuildThisFileDirectory)Xamarin.Mac.Common.ImplicitFacade.xbuild.targets"
|
<Import Project="$(MSBuildThisFileDirectory)Xamarin.Mac.Common.ImplicitFacade.xbuild.targets"
|
||||||
Condition="'$(IsXBuild)' == 'true' "/>
|
Condition="'$(IsXBuild)' == 'true' "/>
|
||||||
|
@ -558,12 +566,40 @@ Copyright (C) 2014 Xamarin. All rights reserved.
|
||||||
</CreateItem>
|
</CreateItem>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_CompileImageAssets" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_CoreCompileImageAssets" />
|
<Target Name="_CompileImageAssets" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_BeforeCoreCompileImageAssets;_ReadCompileImageAssets;_CoreCompileImageAssets" />
|
||||||
|
|
||||||
|
<Target Name="_BeforeCoreCompileImageAssets"
|
||||||
|
Inputs="@(ImageAsset);$(_AppManifest)"
|
||||||
|
Outputs="$(_ACTool_PartialAppManifestCache);$(_ACTool_BundleResourceCache)">
|
||||||
|
|
||||||
|
<!-- If any ImageAsset or AppManifest is newer than the generated items list, we delete them so that the _CoreCompileImageAssets
|
||||||
|
target runs again and updates those lists for the next run
|
||||||
|
-->
|
||||||
|
<Delete Files="$(_ACTool_PartialAppManifestCache);$(_ACTool_BundleResourceCache)" />
|
||||||
|
<RemoveDir Directories="$(IntermediateOutputPath)actool" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_ReadCompileImageAssets"
|
||||||
|
DependsOnTargets="_BeforeCoreCompileImageAssets">
|
||||||
|
|
||||||
|
<!-- If _BeforeCoreCompileImageAssets did not delete the generated items lists from _CoreCompileImageAsset, then we read them
|
||||||
|
since that target won't run and we need the output items that are cached in those files, which includes full metadata -->
|
||||||
|
<ReadItemsFromFile File="$(_ACTool_PartialAppManifestCache)" Condition="Exists('$(_ACTool_PartialAppManifestCache)')">
|
||||||
|
<Output TaskParameter="Items" ItemName="_PartialAppManifest" />
|
||||||
|
</ReadItemsFromFile>
|
||||||
|
<ReadItemsFromFile File="$(_ACTool_BundleResourceCache)" Condition="Exists('$(_ACTool_BundleResourceCache)')">
|
||||||
|
<Output TaskParameter="Items" ItemName="_BundleResourceWithLogicalName" />
|
||||||
|
</ReadItemsFromFile>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="_CoreCompileImageAssets"
|
||||||
|
Inputs="@(ImageAsset);$(_AppManifest)"
|
||||||
|
Outputs="$(_ACTool_PartialAppManifestCache);$(_ACTool_BundleResourceCache)"
|
||||||
|
DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_BeforeCoreCompileImageAssets">
|
||||||
|
|
||||||
<Target Name="_CoreCompileImageAssets">
|
|
||||||
<ACTool
|
<ACTool
|
||||||
Condition="'$(IsMacEnabled)' == 'true'"
|
|
||||||
SessionId="$(BuildSessionId)"
|
SessionId="$(BuildSessionId)"
|
||||||
|
Condition="'$(IsMacEnabled)' == 'true' And '@(ImageAsset)' != ''"
|
||||||
ToolExe="$(ACToolExe)"
|
ToolExe="$(ACToolExe)"
|
||||||
ToolPath="$(ACToolPath)"
|
ToolPath="$(ACToolPath)"
|
||||||
AppManifest="$(_AppManifest)"
|
AppManifest="$(_AppManifest)"
|
||||||
|
@ -574,17 +610,26 @@ Copyright (C) 2014 Xamarin. All rights reserved.
|
||||||
IntermediateOutputPath="$(IntermediateOutputPath)"
|
IntermediateOutputPath="$(IntermediateOutputPath)"
|
||||||
ProjectDir="$(MSBuildProjectDirectory)"
|
ProjectDir="$(MSBuildProjectDirectory)"
|
||||||
ResourcePrefix="$(XamMacResourcePrefix)"
|
ResourcePrefix="$(XamMacResourcePrefix)"
|
||||||
SdkPlatform="MacOSX"
|
|
||||||
SdkDevPath="$(_SdkDevPath)"
|
SdkDevPath="$(_SdkDevPath)"
|
||||||
SdkBinPath="$(_SdkBinPath)"
|
SdkBinPath="$(_SdkBinPath)"
|
||||||
SdkUsrPath="$(_SdkUsrPath)"
|
SdkUsrPath="$(_SdkUsrPath)"
|
||||||
|
SdkPlatform="MacOSX"
|
||||||
SdkVersion="$(MacOSXSdkVersion)">
|
SdkVersion="$(MacOSXSdkVersion)">
|
||||||
<Output TaskParameter="PartialAppManifest" ItemName="FileWrites" />
|
|
||||||
<Output TaskParameter="OutputManifests" ItemName="FileWrites" />
|
|
||||||
<Output TaskParameter="BundleResources" ItemName="FileWrites" />
|
|
||||||
<Output TaskParameter="PartialAppManifest" ItemName="_PartialAppManifest" />
|
<Output TaskParameter="PartialAppManifest" ItemName="_PartialAppManifest" />
|
||||||
<Output TaskParameter="BundleResources" ItemName="_BundleResourceWithLogicalName" />
|
<Output TaskParameter="BundleResources" ItemName="_BundleResourceWithLogicalName" />
|
||||||
|
|
||||||
|
<!-- Local items to be persisted to items files -->
|
||||||
|
<Output TaskParameter="PartialAppManifest" ItemName="_ACTool_PartialAppManifest" />
|
||||||
|
<Output TaskParameter="BundleResources" ItemName="_ACTool_BundleResources" />
|
||||||
</ACTool>
|
</ACTool>
|
||||||
|
|
||||||
|
<!-- Cache the generated outputs items for incremental build support -->
|
||||||
|
<WriteItemsToFile Items="@(_ACTool_PartialAppManifest)" ItemName="_PartialAppManifest" File="$(_ACTool_PartialAppManifestCache)" Overwrite="true" IncludeMetadata="true" />
|
||||||
|
<WriteItemsToFile Items="@(_ACTool_BundleResources)" ItemName="_BundleResourceWithLogicalName" File="$(_ACTool_BundleResourceCache)" Overwrite="true" IncludeMetadata="true" />
|
||||||
|
<ItemGroup>
|
||||||
|
<FileWrites Include="$(_ACTool_PartialAppManifestCache);$(_ACTool_BundleResourceCache)" />
|
||||||
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="_CompileSceneKitAssets" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_CoreCompileSceneKitAssets" />
|
<Target Name="_CompileSceneKitAssets" DependsOnTargets="_DetectAppManifest;_DetectSdkLocations;_CoreCompileSceneKitAssets" />
|
||||||
|
|
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
Normal file
После Ширина: | Высота: | Размер: 7.9 KiB |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
Normal file
После Ширина: | Высота: | Размер: 20 KiB |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
Normal file
После Ширина: | Высота: | Размер: 711 B |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
Normal file
После Ширина: | Высота: | Размер: 1.4 KiB |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
Normal file
После Ширина: | Высота: | Размер: 58 KiB |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
Normal file
После Ширина: | Высота: | Размер: 1.4 KiB |
Двоичные данные
tests/common/mac/Icons/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
Normal file
После Ширина: | Высота: | Размер: 3.3 KiB |
|
@ -0,0 +1,238 @@
|
||||||
|
{
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"size": "20x20",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "20x20",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "40x40",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "40x40",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "60x60",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "60x60",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "iphone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "20x20",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "20x20",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "40x40",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "40x40",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "83.5x83.5",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "76x76",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "76x76",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "ipad"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "1024x1024",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "ios-marketing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "60x60",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "car"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "60x60",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "car"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "notificationCenter",
|
||||||
|
"size": "24x24",
|
||||||
|
"subtype": "38mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "notificationCenter",
|
||||||
|
"size": "27.5x27.5",
|
||||||
|
"subtype": "42mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "companionSettings",
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "companionSettings",
|
||||||
|
"size": "29x29",
|
||||||
|
"scale": "3x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "appLauncher",
|
||||||
|
"size": "40x40",
|
||||||
|
"subtype": "38mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "appLauncher",
|
||||||
|
"size": "44x44",
|
||||||
|
"subtype": "40mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "appLauncher",
|
||||||
|
"size": "50x50",
|
||||||
|
"subtype": "44mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "quickLook",
|
||||||
|
"size": "86x86",
|
||||||
|
"subtype": "38mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "quickLook",
|
||||||
|
"size": "98x98",
|
||||||
|
"subtype": "42mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "quickLook",
|
||||||
|
"size": "108x108",
|
||||||
|
"subtype": "44mm",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "watch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "1024x1024",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "watch-marketing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-16.png",
|
||||||
|
"size": "16x16",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-16@2x.png",
|
||||||
|
"size": "16x16",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-32.png",
|
||||||
|
"size": "32x32",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-32@2x.png",
|
||||||
|
"size": "32x32",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-128.png",
|
||||||
|
"size": "128x128",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-128@2x.png",
|
||||||
|
"size": "128x128",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "256x256",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "AppIcon-256@2x.png",
|
||||||
|
"size": "256x256",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "512x512",
|
||||||
|
"scale": "1x",
|
||||||
|
"idiom": "mac"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size": "512x512",
|
||||||
|
"scale": "2x",
|
||||||
|
"idiom": "mac"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info": {
|
||||||
|
"version": 1,
|
||||||
|
"author": "xcode"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
|
@ -161,6 +161,9 @@ namespace Xamarin.MMP.Tests
|
||||||
public string APIDefinitionConfig { get; set; }
|
public string APIDefinitionConfig { get; set; }
|
||||||
public string StructsAndEnumsConfig { get; set; }
|
public string StructsAndEnumsConfig { get; set; }
|
||||||
|
|
||||||
|
// Unified Executable Specific
|
||||||
|
public bool AssetIcons { get; set; }
|
||||||
|
|
||||||
// Generated by TestUnifiedExecutable/TestSystemMonoExecutable and added to TestCode
|
// Generated by TestUnifiedExecutable/TestSystemMonoExecutable and added to TestCode
|
||||||
public Guid guid { get; set; }
|
public Guid guid { get; set; }
|
||||||
|
|
||||||
|
@ -306,6 +309,24 @@ namespace Xamarin.MMP.Tests
|
||||||
|
|
||||||
string sourceDir = FindSourceDirectory ();
|
string sourceDir = FindSourceDirectory ();
|
||||||
|
|
||||||
|
if (config.AssetIcons)
|
||||||
|
{
|
||||||
|
RunAndAssert ("/bin/cp", $"-R {Path.Combine (sourceDir, "Icons/Assets.xcassets")} {config.TmpDir}", "Copy Asset Icons");
|
||||||
|
config.ItemGroup += @"<ItemGroup>
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\Contents.json"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-128%402x.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-16%402x.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-256%402x.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\AppIcon.appiconset\AppIcon-32%402x.png"" />
|
||||||
|
<ImageAsset Include=""Assets.xcassets\Contents.json"" />
|
||||||
|
</ItemGroup>";
|
||||||
|
// HACK - Should process using CopyFileWithSubstitutions
|
||||||
|
config.PlistReplaceStrings.Add ("</dict>", @"<key>XSAppIconAssets</key><string>Assets.xcassets/AppIcon.appiconset</string></dict>");
|
||||||
|
}
|
||||||
|
|
||||||
CopyFileWithSubstitutions (Path.Combine (sourceDir, "Info-Unified.plist"), Path.Combine (config.TmpDir, "Info.plist"), text => {
|
CopyFileWithSubstitutions (Path.Combine (sourceDir, "Info-Unified.plist"), Path.Combine (config.TmpDir, "Info.plist"), text => {
|
||||||
foreach (var key in config.PlistReplaceStrings.Keys)
|
foreach (var key in config.PlistReplaceStrings.Keys)
|
||||||
text = text.Replace (key, config.PlistReplaceStrings [key]);
|
text = text.Replace (key, config.PlistReplaceStrings [key]);
|
||||||
|
|
|
@ -674,5 +674,28 @@ namespace Xamarin.MMP.Tests
|
||||||
rv.Messages.AssertWarningCount (0);
|
rv.Messages.AssertWarningCount (0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [Test] - https://github.com/xamarin/xamarin-macios/issues/4110
|
||||||
|
public void BuildingSameSolutionTwice_ShouldNotRunACToolTwice ()
|
||||||
|
{
|
||||||
|
RunMMPTest (tmpDir => {
|
||||||
|
TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir) {
|
||||||
|
AssetIcons = true
|
||||||
|
};
|
||||||
|
|
||||||
|
string project = TI.GenerateUnifiedExecutableProject (test);
|
||||||
|
|
||||||
|
string buildOutput = TI.BuildProject (project, true, diagnosticMSBuild: true, useMSBuild: true);
|
||||||
|
Assert.True (buildOutput.Contains ("actool execution started with arguments"), $"Initial build should run actool");
|
||||||
|
|
||||||
|
buildOutput = TI.BuildProject (project, true, diagnosticMSBuild: true, useMSBuild: true);
|
||||||
|
Assert.False (buildOutput.Contains ("actool execution started with arguments"), $"Second build should not run actool");
|
||||||
|
|
||||||
|
TI.RunAndAssert ("touch", Path.Combine (tmpDir, "Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png"), "touch icon");
|
||||||
|
|
||||||
|
buildOutput = TI.BuildProject (project, true, diagnosticMSBuild: true, useMSBuild: true);
|
||||||
|
Assert.True (buildOutput.Contains ("actool execution started with arguments"), $"Build after touching icon must run actool");
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|