Trevi Awater 1711d22287 Fix App Store deploy: use macos-26 runner with Xcode 26.5
The unpinned maui-ios workload now installs the iOS 26.5 SDK manifest,
which requires the iOS 26.4+ SDK. The macos-15 image tops out at
Xcode 26.3, so move to macos-26 and select Xcode 26.5 to match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 13:34:27 +02:00
2026-03-30 21:31:01 +02:00
2026-03-30 21:32:34 +02:00
2021-11-13 08:34:28 +01:00
2024-11-21 10:51:46 +01:00
2024-11-21 10:51:46 +01:00
2021-11-11 22:19:25 +01:00
2026-09-17 22:58:36 +02:00

PocketGraph

A Neo4j and Memgraph client for iPhone and iPad, built with .NET MAUI.

pocketgraph.app

Download on the App Store

Features

  • Connect via the Bolt protocol with SSL/TLS support
  • Compatible with Neo4j and Memgraph
  • Interactive graph visualization with expand/collapse
  • Table view for query results
  • Save and manage connections and queries
  • Light and dark theme
  • iPhone and iPad support (iOS 14.2+)

Project Structure

Xamarin.Neo4j/
├── Xamarin.Neo4j/                    # Shared .NET MAUI project
├── Xamarin.Neo4j.iOS/                # iOS platform project
├── Xamarin.Neo4j.Tests/              # Unit tests
└── Xamarin.Neo4j.IntegrationTests/   # Integration tests (Neo4j + Memgraph via Docker)

Development

Prerequisites

  • .NET 10 SDK
  • Xcode (for iOS builds)
  • Docker (for integration tests)

Building

cd Xamarin.Neo4j
dotnet build Xamarin.Neo4j.sln

Running Tests

# Unit tests
dotnet test Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j.Tests/

# Integration tests (requires Docker)
dotnet test Xamarin.Neo4j/Xamarin.Neo4j/Xamarin.Neo4j.IntegrationTests/

Android DEX shrinking & obfuscation (R8)

Release builds of the Android head run R8 over the Java/DEX side (AndroidLinkTool=r8 in Xamarin.Neo4j.Android.csproj). Play Console's DEX code optimization report scores obfuscation at ~1% on a stock .NET MAUI build: .NET for Android runs no DEX shrinker by default, and even with R8 on, the ProGuard config the SDK generates hardcodes -dontobfuscate — a flag nothing later in the config list can undo. The _AndroidObfuscateDex target therefore drops that file from R8's --pg-conf list and substitutes Xamarin.Neo4j.Android/proguard_xamarin.cfg (the same file minus that line), plus a generated file carrying the -printmapping/-keepattributes tail the SDK would have appended. Measured on the Release APK: 49.8% of DEX classes renamed, up from ~0%.

Only library-internal classes are renamed: the trimmer emits a -keep rule for every Java type the managed bindings reference, aapt2 one for every class named in a layout or the manifest, and each Android Callable Wrapper gets its own. Xamarin.Neo4j.Android/proguard.cfg covers what those miss — things resolved by name from native code. Add to it if a Release build dies with ClassNotFoundException, NoSuchFieldError or NoSuchMethodError where a Debug build does not.

mapping.txt is embedded in the AAB (BUNDLE-METADATA/com.android.tools.build.obfuscation/proguard.map), so Play Console retraces obfuscated Java stacks by itself. Managed (C#) stack traces are unaffected — R8 only touches DEX.

Local Release builds must be clean: aapt2's keep rules are registered as a FileWrite, so an incremental build that skips the resource link has IncrementalClean delete them. The target caches a copy outside FileWrites and errors out if even that is missing — delete Xamarin.Neo4j.Android/obj/Release if it fires.

Technology Stack

  • .NET MAUI
  • Neo4j.Driver (Bolt protocol)
  • C# / XAML
  • MVVM architecture
  • Testcontainers for integration testing

Privacy

PocketGraph does not collect any user data. All connections and queries are stored locally on your device.

About

PocketGraph is a product of Re: Software B.V..

Neo4j and Cypher are registered trademarks of Neo4j, Inc.

License

See LICENSE for details.

Support

Contact: support@resoftware.nl

Description
No description provided
Readme GPL-3.0 4.5 MiB
Languages
C# 70.5%
HTML 17%
Astro 12.5%