Skip to content

Instantly share code, notes, and snippets.

@bbenetskyy
Created December 5, 2021 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbenetskyy/6fc8f9536bd39ad0faec5030748b53c0 to your computer and use it in GitHub Desktop.
Save bbenetskyy/6fc8f9536bd39ad0faec5030748b53c0 to your computer and use it in GitHub Desktop.
// Import Required NuGet Packages
#addin "nuget:?package=Cake.Xamarin"
#addin "nuget:?package=Cake.Android.Adb"
#addin "nuget:?package=Cake.AppleSimulator"
using System.Threading;
// Script Predefined Arguments
var target = Argument("target", "Default");
var iosSimulators = Argument("iosSimulators", new string[] {"iPhone SE", "iPhone 13"});
// Full Path to my project
const string ROOT="/Users/user/YourBestProject/";
const string SOLUTION_DIR = "/Users/user/YourBestProject/YourBestProject/";
const string SOLUTION = "/Users/user/YourBestProject/YourBestProject/YourBestProject.sln";
const string ANDROID = "/Users/user/YourBestProject/YourBestProject/Platform/YourBestProject.Platform.Android/YourBestProject.Platform.Android.csproj";
const string ANDROID_APP_IDENTIFIER="you.com.YourBestProject";
const string IOS = "/Users/user/YourBestProject/YourBestProject/Platform/YourBestProject.Platform.iOS/YourBestProject.Platform.iOS.csproj";
const string IOS_APP="YourBestProject.Platform.iOS.app";
const string IOS_ARTIFACTS="/Users/user/YourBestProject/YourBestProject/Platform/YourBestProject.Platform.iOS/bin/iPhoneSimulator/Debug/";
const string IOS_APP_IDENTIFIER="you.com.YourBestProject";
Task("Clean")
.Does(() =>
{
CleanDirectories(ROOT+"**/bin");
CleanDirectories(ROOT+"**/obj");
});
Task("Restore")
.Does(() =>
{
RestoreComponents(SOLUTION);
NuGetRestore(SOLUTION);
});
Task("Build")
.Does(() =>
{
FilePath androidApk = BuildAndroidApk(projectFile: ANDROID, sign: true, configuration: "Debug", configurator: null);
FilePath iosIpa = BuildiOSIpa(projectFile: IOS, configuration: "Debug", platform: "iPhoneSimulator", settings: null); //"iPhone"
Information($"Android APK {androidApk}");
Information($"iOS IPA {iosIpa}");
});
Task("Rebuild")
.IsDependentOn("Clean")
.IsDependentOn("Restore")
.IsDependentOn("Build")
.Does(() =>
{
});
Task("CheckAndroidDevices")
.Does(() =>
{
var devices = AdbDevices();
Information($"Found Devices: {devices.Count}");
Information(string.Empty);
foreach (var device in devices)
{
Information($"{device.Device} {device.Model} {device.Serial}");
Information(string.Empty);
}
});
Task("CheckiOSSimulators")
.Does(() =>
{
var simulators = ListAppleSimulators();
Information($"Found Simulators: {simulators.Count}");
Information(string.Empty);
foreach (var simulator in simulators)
{
Information($"{simulator.Name} {simulator.IsAvailable} {simulator.Runtime.Split('.').Last()} {simulator.UDID}");
Information(string.Empty);
}
});
Task("BuildAndRunAndroid")
.Does(() =>
{
FilePath androidApk = BuildAndroidApk(projectFile: ANDROID, sign: true, configuration: "Debug", configurator: null);
Information($"Android APK {androidApk}");
Information(string.Empty);
var devices = AdbDevices();
Information($"Found Devices: {devices.Count}");
Information(string.Empty);
foreach (var device in devices)
{
Information($"{device.Device} {device.Model} {device.Serial}");
if(string.IsNullOrEmpty(device.Model))
continue;
var settings = new AdbToolSettings
{
Serial = device.Serial
};
if(!device.Serial.StartsWith("emulator"))
{
AdbUninstall(packageName: "you.com.YourBestProject", settings: settings);
}
AdbInstall(apkFile: androidApk, settings: settings);
AdbRun(args: new string[] { "shell monkey -p you.com.YourBestProject -c android.intent.category.LAUNCHER 1" }, settings: settings);
Information(string.Empty);
}
});
Task("BuildAndRuniOS")
.Does(() =>
{
MSBuild(IOS, configurator => configurator
.SetConfiguration("Debug")
.SetVerbosity(Verbosity.Minimal));
var simulators = ListAppleSimulators();
Information($"Found Simulators: {simulators.Count}");
Information(string.Empty);
foreach (var simulator in simulators)
{
Information($"{simulator.Name} {simulator.IsAvailable} {simulator.Runtime.Split('.').Last()} {simulator.UDID}");
if(iosSimulators.Any(s => s == simulator.Name) && simulator.IsAvailable)
{
Information($"Start Installation on {simulator.Name}");
InstalliOSApplication(deviceIdentifier: simulator.UDID, applicationPath: IOS_ARTIFACTS + IOS_APP);
Thread.Sleep(3_000);
LaunchiOSApplication(deviceIdentifier: simulator.UDID, appIdentifier: IOS_APP_IDENTIFIER);
}
Information(string.Empty);
}
} );
Task("Default")
.IsDependentOn("BuildAndRunAndroid")
.IsDependentOn("BuildAndRuniOS")
.Does(() => {});
RunTarget(target);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment