From 01500ce8cb5477f51406db60b76d8d75f918c3e9 Mon Sep 17 00:00:00 2001
From: rlittlesii <6969701+RLittlesII@users.noreply.github.com>
Date: Sat, 26 Mar 2022 15:35:26 -0500
Subject: [PATCH] enhancement: Added Xamarin Apple Target
abstracted IHaveBundleIdentifier
abstracted IHaveInfoPlist
abstracted IXamarinAppleTarget
---
...GitVersionEx.cs => GitVersionFunctions.cs} | 2 +-
.../Xamarin/apple/IHaveBundleIdentifier.cs | 21 +++++
src/Nuke/Xamarin/apple/IHaveInfoPlist.cs | 16 ++++
src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs | 39 +++++++++
src/Nuke/Xamarin/{ => apple}/Plist.cs | 1 +
.../Xamarin/{ => apple}/ios/ICanArchiveiOS.cs | 3 +-
.../Xamarin/apple/ios/ICanBuildXamariniOS.cs | 37 +++++++++
.../{ => apple}/ios/ICanPackXamariniOS.cs | 0
.../{ => apple}/ios/IHaveiOSTargetPlatform.cs | 0
.../Xamarin/apple/mac/ICanBuildXamarinMac.cs | 36 +++++++++
.../{ => apple}/mac/ICanPackXamarinMac.cs | 0
src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs | 79 -------------------
src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs | 74 -----------------
13 files changed, 153 insertions(+), 155 deletions(-)
rename src/Nuke/{GitVersionEx.cs => GitVersionFunctions.cs} (92%)
create mode 100644 src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs
create mode 100644 src/Nuke/Xamarin/apple/IHaveInfoPlist.cs
create mode 100644 src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs
rename src/Nuke/Xamarin/{ => apple}/Plist.cs (99%)
rename src/Nuke/Xamarin/{ => apple}/ios/ICanArchiveiOS.cs (92%)
create mode 100644 src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs
rename src/Nuke/Xamarin/{ => apple}/ios/ICanPackXamariniOS.cs (100%)
rename src/Nuke/Xamarin/{ => apple}/ios/IHaveiOSTargetPlatform.cs (100%)
create mode 100644 src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs
rename src/Nuke/Xamarin/{ => apple}/mac/ICanPackXamarinMac.cs (100%)
delete mode 100644 src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs
delete mode 100644 src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs
diff --git a/src/Nuke/GitVersionEx.cs b/src/Nuke/GitVersionFunctions.cs
similarity index 92%
rename from src/Nuke/GitVersionEx.cs
rename to src/Nuke/GitVersionFunctions.cs
index 12757605..bb4ccf8f 100644
--- a/src/Nuke/GitVersionEx.cs
+++ b/src/Nuke/GitVersionFunctions.cs
@@ -5,7 +5,7 @@ namespace Rocket.Surgery.Nuke;
///
/// extensions.
///
-public static class GitVersionEx
+public static class GitVersionFunctions
{
///
/// Gets the full semantic version from .
diff --git a/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs b/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs
new file mode 100644
index 00000000..330fa98d
--- /dev/null
+++ b/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs
@@ -0,0 +1,21 @@
+// ReSharper disable once CheckNamespace
+
+namespace Rocket.Surgery.Nuke.Xamarin;
+
+///
+/// Has a bundle identifier.
+///
+public interface IHaveBundleIdentifier : IHave
+{
+ ///
+ /// Gets the path for the info plist.
+ ///
+ [Parameter("The application bundle identifier.")]
+ public string BundleIdentifier => "com.rocketbooster.nuke";
+
+ ///
+ /// Gets the suffix for the bundle identifier.
+ ///
+ [Parameter("The identifier suffix.")]
+ public string Suffix { get; set; }
+}
diff --git a/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs b/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs
new file mode 100644
index 00000000..91e0c4c1
--- /dev/null
+++ b/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs
@@ -0,0 +1,16 @@
+using Nuke.Common.IO;
+
+// ReSharper disable once CheckNamespace
+namespace Rocket.Surgery.Nuke.Xamarin;
+
+///
+/// Has an info.plist file.
+///
+public interface IHaveInfoPlist : IHave
+{
+ ///
+ /// Gets the path for the info plist.
+ ///
+ [Parameter("The path to the info.plist.")]
+ public AbsolutePath InfoPlist { get; }
+}
diff --git a/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs b/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs
new file mode 100644
index 00000000..dd5289d2
--- /dev/null
+++ b/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs
@@ -0,0 +1,39 @@
+using Serilog;
+
+// ReSharper disable once CheckNamespace
+namespace Rocket.Surgery.Nuke.Xamarin;
+
+///
+/// Represents an application with a apple head, and associated concerns.
+///
+public interface IXamarinAppleTarget : IHaveBundleIdentifier, IHaveGitVersion, IHaveInfoPlist
+{
+ ///
+ /// modify info.plist
+ ///
+ public Target ModifyInfoPlist => _ => _
+ .Executes(
+ () =>
+ {
+ Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist);
+ var plist = Plist.Deserialize(InfoPlist);
+
+ Log.Verbose("Deserialized Plist:\n {@Plist}\n", plist);
+
+ plist["CFBundleIdentifier"] = $"{BundleIdentifier}.{Suffix.ToLower()}".TrimEnd('.');
+ Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]);
+
+ plist["CFBundleShortVersionString"] = $"{GitVersion?.Major}.{GitVersion?.Minor}.{GitVersion?.Patch}";
+ Log.Information(
+ "CFBundleShortVersionString: {CFBundleShortVersionString}",
+ plist["CFBundleShortVersionString"]
+ );
+
+ plist["CFBundleVersion"] = $"{GitVersion?.FullSemanticVersion()}";
+ Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]);
+
+ Plist.Serialize(InfoPlist, plist);
+ Log.Verbose("Serialized Plist:\n {@Plist}\n", plist);
+ }
+ );
+}
diff --git a/src/Nuke/Xamarin/Plist.cs b/src/Nuke/Xamarin/apple/Plist.cs
similarity index 99%
rename from src/Nuke/Xamarin/Plist.cs
rename to src/Nuke/Xamarin/apple/Plist.cs
index 2ed7d315..64d6d11f 100644
--- a/src/Nuke/Xamarin/Plist.cs
+++ b/src/Nuke/Xamarin/apple/Plist.cs
@@ -4,6 +4,7 @@
using Nuke.Common.IO;
using Serilog;
+// ReSharper disable once CheckNamespace
namespace Rocket.Surgery.Nuke.Xamarin;
///
diff --git a/src/Nuke/Xamarin/ios/ICanArchiveiOS.cs b/src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs
similarity index 92%
rename from src/Nuke/Xamarin/ios/ICanArchiveiOS.cs
rename to src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs
index fb34131d..6cb9ee40 100644
--- a/src/Nuke/Xamarin/ios/ICanArchiveiOS.cs
+++ b/src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs
@@ -31,11 +31,12 @@ public interface ICanArchiveiOS : IHavePackTarget,
.SetProperty("Platform", iOSTargetPlatform)
.SetProperty("BuildIpa", "true")
.SetProperty("ArchiveOnBuild", "true")
+ .SetProperty("IpaPackageDir", ArtifactsDirectory / "ios")
.SetConfiguration(Configuration)
.SetDefaultLoggers(LogsDirectory / "package.log")
.SetGitVersionEnvironment(GitVersion)
.SetAssemblyVersion(GitVersion?.FullSemanticVersion())
- .SetPackageVersion(GitVersion?.NuGetVersionV2)
+ .SetPackageVersion(GitVersion?.FullSemanticVersion())
)
);
}
diff --git a/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs b/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs
new file mode 100644
index 00000000..f56a26aa
--- /dev/null
+++ b/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs
@@ -0,0 +1,37 @@
+using Nuke.Common.Tools.MSBuild;
+using static Nuke.Common.Tools.MSBuild.MSBuildTasks;
+
+#pragma warning disable CA1304
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Rocket.Surgery.Nuke.Xamarin;
+
+///
+/// Xamarin iOS build
+///
+public interface ICanBuildXamariniOS : IXamarinAppleTarget,
+ IHaveBuildTarget,
+ IHaveRestoreTarget,
+ IHaveSolution,
+ IHaveConfiguration,
+ IHaveOutputLogs,
+ IHaveiOSTargetPlatform,
+ ICan
+{
+ ///
+ /// msbuild
+ ///
+ public Target BuildiPhone => _ => _
+ .DependsOn(Restore)
+ .Executes(
+ () => MSBuild(
+ settings => settings.SetSolutionFile(Solution)
+ .SetProperty("Platform", iOSTargetPlatform)
+ .SetConfiguration(Configuration)
+ .SetDefaultLoggers(LogsDirectory / "build.log")
+ .SetGitVersionEnvironment(GitVersion)
+ .SetAssemblyVersion(GitVersion?.FullSemanticVersion())
+ .SetPackageVersion(GitVersion?.NuGetVersionV2)
+ )
+ );
+}
diff --git a/src/Nuke/Xamarin/ios/ICanPackXamariniOS.cs b/src/Nuke/Xamarin/apple/ios/ICanPackXamariniOS.cs
similarity index 100%
rename from src/Nuke/Xamarin/ios/ICanPackXamariniOS.cs
rename to src/Nuke/Xamarin/apple/ios/ICanPackXamariniOS.cs
diff --git a/src/Nuke/Xamarin/ios/IHaveiOSTargetPlatform.cs b/src/Nuke/Xamarin/apple/ios/IHaveiOSTargetPlatform.cs
similarity index 100%
rename from src/Nuke/Xamarin/ios/IHaveiOSTargetPlatform.cs
rename to src/Nuke/Xamarin/apple/ios/IHaveiOSTargetPlatform.cs
diff --git a/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs b/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs
new file mode 100644
index 00000000..51e0ed68
--- /dev/null
+++ b/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs
@@ -0,0 +1,36 @@
+using Nuke.Common.Tools.MSBuild;
+using static Nuke.Common.Tools.MSBuild.MSBuildTasks;
+
+#pragma warning disable CA1304
+// ReSharper disable once CheckNamespace
+namespace Rocket.Surgery.Nuke.Xamarin;
+
+///
+/// Xamarin mac build
+///
+public interface ICanBuildXamarinMac : IXamarinAppleTarget,
+ IHaveBuildTarget,
+ IHaveRestoreTarget,
+ IHaveSolution,
+ IHaveConfiguration,
+ IHaveOutputLogs,
+ ICan
+{
+ ///
+ /// msbuild
+ ///
+ public new Target Build => _ => _
+ .DependsOn(Restore)
+ .Executes(
+ () => MSBuild(
+ settings => settings
+ .SetSolutionFile(Solution)
+ .SetProperty("Platform", TargetPlatform.AnyCPU)
+ .SetConfiguration(Configuration)
+ .SetDefaultLoggers(LogsDirectory / "build.log")
+ .SetGitVersionEnvironment(GitVersion)
+ .SetAssemblyVersion(GitVersion?.FullSemanticVersion())
+ .SetPackageVersion(GitVersion?.NuGetVersionV2)
+ )
+ );
+}
diff --git a/src/Nuke/Xamarin/mac/ICanPackXamarinMac.cs b/src/Nuke/Xamarin/apple/mac/ICanPackXamarinMac.cs
similarity index 100%
rename from src/Nuke/Xamarin/mac/ICanPackXamarinMac.cs
rename to src/Nuke/Xamarin/apple/mac/ICanPackXamarinMac.cs
diff --git a/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs b/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs
deleted file mode 100644
index cd571709..00000000
--- a/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using Nuke.Common.IO;
-using Nuke.Common.Tools.MSBuild;
-using Serilog;
-using static Nuke.Common.Tools.MSBuild.MSBuildTasks;
-
-#pragma warning disable CA1304
-// ReSharper disable InconsistentNaming
-// ReSharper disable once CheckNamespace
-namespace Rocket.Surgery.Nuke.Xamarin;
-
-///
-/// Xamarin iOS build
-///
-public interface ICanBuildXamariniOS : IHaveBuildTarget,
- IHaveRestoreTarget,
- IHaveSolution,
- IHaveConfiguration,
- IHaveGitVersion,
- IHaveOutputLogs,
- IHaveiOSTargetPlatform,
- ICan
-{
- ///
- /// Gets the path for the info plist.
- ///
- public AbsolutePath InfoPlist { get; }
-
- ///
- /// Gets the path for the info plist.
- ///
- public string BaseBundleIdentifier => "com.rocketbooster.nuke";
-
- ///
- /// msbuild
- ///
- public Target BuildiPhone => _ => _
- .DependsOn(Restore)
- .Executes(
- () => MSBuild(
- settings => settings.SetSolutionFile(Solution)
- .SetProperty("Platform", iOSTargetPlatform)
- .SetConfiguration(Configuration)
- .SetDefaultLoggers(LogsDirectory / "build.log")
- .SetGitVersionEnvironment(GitVersion)
- .SetAssemblyVersion(GitVersion?.FullSemanticVersion())
- .SetPackageVersion(GitVersion?.NuGetVersionV2)
- )
- );
-
-
- ///
- /// modify info.plist
- ///
- public Target ModifyInfoPlist => _ => _
- .DependsOn(Restore)
- .Executes(
- () =>
- {
- Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist);
- var plist = Plist.Deserialize(InfoPlist);
- var bundleIdentifier = !Equals(Configuration, XamarinConfiguration.Store.ToString())
- ? Configuration
- : string.Empty;
-
- plist["CFBundleIdentifier"] = $"{BaseBundleIdentifier}.{bundleIdentifier.ToLower()}".TrimEnd('.');
- Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]);
-
- plist["CFBundleShortVersionString"] = $"{GitVersion?.MajorMinorPatch}";
- Log.Information(
- "CFBundleShortVersionString: {CFBundleShortVersionString}", plist["CFBundleShortVersionString"]
- );
-
- plist["CFBundleVersion"] = $"{GitVersion?.FullSemVer.Replace('+', '.')}";
- Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]);
-
- Plist.Serialize(InfoPlist, plist);
- }
- );
-}
diff --git a/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs b/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs
deleted file mode 100644
index afb0f4b9..00000000
--- a/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using Nuke.Common.IO;
-using Nuke.Common.Tools.MSBuild;
-using Serilog;
-using static Nuke.Common.Tools.MSBuild.MSBuildTasks;
-
-#pragma warning disable CA1304
-// ReSharper disable once CheckNamespace
-namespace Rocket.Surgery.Nuke.Xamarin;
-
-///
-/// Xamarin mac build
-///
-public interface ICanBuildXamarinMac : IHaveBuildTarget,
- IHaveRestoreTarget,
- IHaveSolution,
- IHaveConfiguration,
- IHaveGitVersion,
- IHaveOutputLogs,
- ICan
-{
- ///
- /// Gets the path for the info plist.
- ///
- public AbsolutePath InfoPlist { get; }
-
- ///
- /// Gets the path for the info plist.
- ///
- public string BaseBundleIdentifier => "com.rocketbooster.nuke";
-
- ///
- /// msbuild
- ///
- public new Target Build => _ => _
- .DependsOn(Restore)
- .Executes(
- () => MSBuild(
- settings => settings
- .SetSolutionFile(Solution)
- .SetProperty("Platform", TargetPlatform.AnyCPU)
- .SetConfiguration(Configuration)
- .SetDefaultLoggers(LogsDirectory / "build.log")
- .SetGitVersionEnvironment(GitVersion)
- .SetAssemblyVersion(GitVersion?.FullSemanticVersion())
- .SetPackageVersion(GitVersion?.NuGetVersionV2)
- )
- );
-
- ///
- /// modify info.plist
- ///
- public Target ModifyPlist => _ => _
- .Executes(
- () =>
- {
- Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist);
- var plist = Plist.Deserialize(InfoPlist);
- var bundleIdentifier = !Equals(Configuration, XamarinConfiguration.Store.ToString())
- ? Configuration
- : string.Empty;
-
- plist["CFBundleIdentifier"] = $"{BaseBundleIdentifier}.{bundleIdentifier.ToLower()}".TrimEnd('.');
- Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]);
-
- plist["CFBundleShortVersionString"] = $"{GitVersion?.Major}.{GitVersion?.Minor}.{GitVersion?.Patch}";
- Log.Information("CFBundleShortVersionString: {CFBundleShortVersionString}", plist["CFBundleShortVersionString"]);
-
- plist["CFBundleVersion"] = $"{GitVersion?.PreReleaseNumber}";
- Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]);
-
- Plist.Serialize(InfoPlist, plist);
- }
- );
-}