liopoos/apple-device-mapper

A PHP library for bidirectional mapping between Apple device model identifiers and device names

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/liopoos/apple-device-mapper

v0.0.1 2025-12-31 06:05 UTC

This package is auto-updated.

Last update: 2025-12-31 06:08:25 UTC


README

A PHP library for bidirectional mapping between Apple device model identifiers and device names.

PHP Version License

Overview

Apple Device Mapper provides an efficient way to convert between Apple device model identifiers (like iphone10,1) and human-readable device names (like iPhone 8 (Global)).

Installation

composer require liopoos/apple-device-mapper

Requirements

  • PHP >= 7.3

Quick Start

<?php

require 'vendor/autoload.php';

use Liopoos\AppleDeviceMapper\AppleDeviceMapper;
use Liopoos\AppleDeviceMapper\Entity\DeviceCategory;

$mapper = new AppleDeviceMapper();

// Get device entity
$device = $mapper->getDeviceByModel('iphone10,1');
echo $device->getName();      // "iPhone 8 (Global)"
echo $device->getCategory();  // "iPhone"

// Get devices by name (returns Collection)
$devices = $mapper->getDevicesByName('iPhone 8 (Global)');

// Get devices by category
$iPhones = $mapper->getDevicesByCategory(DeviceCategory::IPHONE);

// Check existence
if ($mapper->hasModel('iphone14,2')) {
    echo "Model exists";
}

API Reference

Core Methods

getDeviceByModel(string $model): AppleDevice

Get device entity by model identifier.

$device = $mapper->getDeviceByModel('iphone10,1');
echo $device->getModel();     // "iphone10,1"
echo $device->getName();      // "iPhone 8 (Global)"
echo $device->getCategory();  // "iPhone"

getDevicesByName(string $deviceName): Collection<AppleDevice>

Get all devices for a device name as a Collection.

$devices = $mapper->getDevicesByName('iPhone 8 (Global)');
$devices->each(function($device) {
    echo $device->getModel();
});

getFirstDeviceByName(string $deviceName): AppleDevice

Get the first device for a device name.

$device = $mapper->getFirstDeviceByName('iPhone 8 (Global)');

getAllDevices(): Collection<AppleDevice>

Get all devices as a Collection.

$devices = $mapper->getAllDevices();
$iPhones = $devices->filter(fn($d) => $d->getCategory() === 'iPhone');

getDevicesByCategory(string $category): Collection<AppleDevice>

Get devices by category.

use Liopoos\AppleDeviceMapper\Entity\DeviceCategory;

$iPhones = $mapper->getDevicesByCategory(DeviceCategory::IPHONE);
$iPads = $mapper->getDevicesByCategory(DeviceCategory::IPAD);

Query Methods

hasModel(string $model): bool

Check if a model identifier exists.

if ($mapper->hasModel('iphone10,1')) {
    // Model exists
}

hasDeviceName(string $deviceName): bool

Check if a device name exists.

if ($mapper->hasDeviceName('iPhone 8 (Global)')) {
    // Device name exists
}

getAllDeviceNames(): array<string>

Get all unique device names.

getAllModels(): array<string>

Get all model identifiers.

getStatistics(): array

Get statistics about the device mapping.

$stats = $mapper->getStatistics();
// ['total_models' => 265, 'total_device_names' => 256, ...]

Device Categories

Available device categories:

  • DeviceCategory::IPHONE - iPhone devices
  • DeviceCategory::IPAD - iPad devices
  • DeviceCategory::IPOD - iPod devices
  • DeviceCategory::WATCH - Apple Watch devices
  • DeviceCategory::APPLE_TV - Apple TV devices
  • DeviceCategory::MAC - Mac devices
  • DeviceCategory::HOMEPOD - HomePod devices
  • DeviceCategory::VISION_PRO - Apple Vision Pro
  • DeviceCategory::IBRIDGE - iBridge devices
  • DeviceCategory::OTHER - Other devices

Updating Device Data

Device data is stored in resources/devices.json and automatically compiled during installation.

To update:

  1. Update resources/devices.json with latest data
  2. Run the build script:
    php build.php

The build script generates category-specific data files in src/Data/ directory.

Development

Running Tests

vendor/bin/phpunit

Project Structure

src/
├── AppleDeviceMapper.php       # Main mapper class
├── Data/
│   ├── DataLoader.php          # Lazy loader with iterator pattern
│   ├── iPhoneData.php          # iPhone device data
│   ├── iPadData.php            # iPad device data
│   ├── MacData.php             # Mac device data
│   └── ...                     # Other category data files
└── Entity/
    ├── AppleDevice.php         # Device entity class
    └── DeviceCategory.php      # Category constants

Acknowledgments

Device data sourced from IPSW.me API

License

MIT License