Skip to content

Setting Up the Utilities SDK

What you'll learn

  • Generating the Utilities SDK with optional device, package, and biometric modules
  • Understanding the clean architecture pattern for utility wrappers
  • Accessing device info, app version, and biometric auth across features
  • Toggling modules on or off at generation time

Prerequisites

Step 1: Generate the Utilities SDK

bash
archipelago generate utilities_sdk

You will be prompted for:

  • appNameMyApp
  • organizationMyCompany
  • domaincom (top-level domain: com, org, io)
  • prefix — unique prefix for naming (e.g., App)
  • includeDeviceInfotrue for device info utilities
  • includePackageInfotrue for package/version info
  • includeBiometrictrue for biometric auth utilities
  • isForMonorepotrue
  • includeGeneratedfalse (whether to commit .g.dart files)

Or use a config file:

json
{
  "appName": "MyApp",
  "organization": "MyCompany",
  "domain": "com",
  "prefix": "App",
  "includeDeviceInfo": true,
  "includePackageInfo": true,
  "includeBiometric": true,
  "isForMonorepo": true,
  "includeGenerated": false
}

Step 2: Understand the Generated Structure

infrastructure/
└── utilities_sdk/
    └── lib/src/
        ├── utilities_sdk.dart            # SDK entry point
        ├── device_info/
        │   ├── data/
        │   │   └── device_info_datasource.dart
        │   ├── domain/
        │   │   └── device_info_repository.dart
        │   └── di/
        ├── package_info/
        │   ├── data/
        │   │   └── package_info_datasource.dart
        │   ├── domain/
        │   │   └── package_info_repository.dart
        │   └── di/
        └── biometric/
            ├── data/
            │   └── biometric_datasource.dart
            ├── domain/
            │   └── biometric_repository.dart
            └── di/

Only the modules you enabled at generation time are included.

Step 3: Register the Utilities SDK

dart
import 'package:utilities_sdk/utilities_sdk.dart';

// Register in your DI setup
UtilitiesSdk.register();

Step 4: Use Device Info

dart
final deviceInfo = GetIt.I<DeviceInfoRepository>();

final model = await deviceInfo.getDeviceModel();    // "iPhone 15 Pro"
final os = await deviceInfo.getOsVersion();          // "iOS 17.4"
final isPhysical = await deviceInfo.isPhysicalDevice(); // true

Step 5: Use Package Info

dart
final packageInfo = GetIt.I<PackageInfoRepository>();

final version = await packageInfo.getAppVersion();   // "1.2.3"
final buildNumber = await packageInfo.getBuildNumber(); // "42"
final packageName = await packageInfo.getPackageName(); // "com.mycompany.myapp"

Step 6: Use Biometric Auth

dart
final biometric = GetIt.I<BiometricRepository>();

final isAvailable = await biometric.isAvailable();
if (isAvailable) {
  final authenticated = await biometric.authenticate(
    reason: 'Verify your identity',
  );
}

Common Customizations

CustomizationWhere to Change
Add custom device fieldsdevice_info/data/ datasource
Change biometric promptbiometric/data/ datasource
Cache device infoAdd caching layer in repository
Mock in testsOverride DI registration with mock
Disable a moduleRegenerate without the module flag

Next Steps

Built by Banua Coder