Skip to content

Instantly share code, notes, and snippets.

@tomcurran
tomcurran / AlternativeRowColorConverter.cs
Last active September 1, 2025 17:03
MAUI ListView alternative row background colour
namespace SomeNamespace.Converters
{
using System;
using System.Globalization;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Graphics;
using Syncfusion.Maui.ListView;
public class AlternativeRowColorConverter : BindableObject, IValueConverter
{
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.*;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.PublicKey;
import java.security.interfaces.RSAPublicKey;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Date;
import base64
import json
import sys
from PIL import Image
from io import BytesIO
def get_exif_date_taken(image_data):
try:
image = Image.open(BytesIO(image_data))
exif_data = image._getexif()
@tomcurran
tomcurran / resign.sh
Created June 24, 2025 15:17
Fastlane Resign IPA
fastlane run resign \
ipa:"app.ipa" \
signing_identity:"iPhone Distribution: something" \
provisioning_profile:"something.mobileprovision" \
use_app_entitlements:true
@tomcurran
tomcurran / app.js
Created February 28, 2023 17:48
Firebase Messaging Test
const admin = require("firebase-admin");
const serviceAccount = require("./service-account.json");
const registrationToken = "REGISTRATION_TOKEN_1";
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
const message = {
@tomcurran
tomcurran / FirebaseTest.csproj
Created February 14, 2023 11:06
Firebase Messaging Test
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
@tomcurran
tomcurran / github-delete-artifacts.sh
Created January 4, 2023 13:32
Delete Artifacts in GitHub Repository
OWNER=$1
REPO=$2
echo "Owner: $OWNER"
echo "Repository: $REPO"
TOTAL_ARTIFACTS=$(gh api -H "Accept: application/vnd.github+json" /repos/$OWNER/$REPO/actions/artifacts | jq '.total_count')
echo "Total Artifacts: $TOTAL_ARTIFACTS"
echo "Deleting artifacts..."
@tomcurran
tomcurran / app-store-connect-jwt.rb
Created May 18, 2022 15:12
Create App Store Connect token for API requests from private key, issue ID, key ID
require "base64"
require "jwt"
ISSUER_ID = ""
KEY_ID = ""
PRIVATE_KEY_FILE=""
private_key = OpenSSL::PKey.read(File.read(PRIVATE_KEY_FILE))
token = JWT.encode(
{
@tomcurran
tomcurran / Program.cs
Created May 6, 2022 12:26
Remove releases from Firebase Distribution using API
using System.Net.Http.Headers;
using System.Net.Http.Json;
namespace FirebaseDistributionReleaseRemove
{
class Program
{
static async Task Main(string[] args)
{
// get project & app for each project from firebase console
@tomcurran
tomcurran / Resx.workbook
Created May 13, 2020 13:14
Resx entry duplicates & order
uti id title platforms
com.xamarin.workbook
67ee3be8-703f-4566-9b19-227768fb9dc5
Untitled
Console
using System;