Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

wwwonka

macrumors newbie
Original poster
As some of you certainly know, since macOS Sequoia 15.4.1, we lost official support for our beloved iPod classics

Yesterday I got lucky while brute-forcing my way to access the files without the use of a Windows VM or restore the iPod and found out that I could use it just like before updating macOS.
So here is my solution Possibly although the pre-requisite, possibly, is for your iPod to have disk mode already enabled.
Basically, by mounting it as a drive, the music syncing will re-work again with Swinsian, WALTR or even iTunes 10.7, provided that these have Full Disk Access in your System Settings.

Step by step:
1. Launch the System Information app, and go to the USB tab, then locate your iPod and copy the Volume UUID of your partition:

Screenshot 2025-08-19 at 13.56.27.png


2. Open a Terminal and modify this script by pasting your Volume UUID on line 3, then run it:

#!/bin/bash

# 🔧 Set your iPod's Volume UUID here (no need for quotes or brackets)
VOLUME_UUID=ADCE7BAE-16DB-380C-8203-8FCB9D2C5791

# Clean it up (remove quotes/braces if pasted accidentally)
VOLUME_UUID=$(echo $VOLUME_UUID | tr -d '"{}')

# Find the device node for this UUID
DRIVE_IDENTIFIER=$(diskutil info -plist $VOLUME_UUID | \
plutil -extract DeviceNode xml1 -o - - | \
sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

# Get the volume name dynamically
VOLUME_NAME=$(diskutil info -plist "$DRIVE_IDENTIFIER" | \
plutil -extract VolumeName xml1 -o - - | \
sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

# Get the filesystem type (e.g. msdos, hfs)
FS_TYPE=$(diskutil info -plist "$DRIVE_IDENTIFIER" | \
plutil -extract FilesystemName xml1 -o - - | \
sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

# Mountpoint under /Volumes
MOUNTPOINT_DIR="/Volumes/$VOLUME_NAME"

echo "Device: $DRIVE_IDENTIFIER"
echo "Volume name: $VOLUME_NAME"
echo "Filesystem: $FS_TYPE"

# Safety check: is it already mounted?
if mount | grep -q "on $MOUNTPOINT_DIR "; then
echo "⚠️ $VOLUME_NAME is already mounted at $MOUNTPOINT_DIR"
exit 0
fi

# Make sure the mountpoint exists
sudo mkdir -p "$MOUNTPOINT_DIR"

# Mount based on detected filesystem
case "$FS_TYPE" in
"MS-DOS FAT32"|"MS-DOS"|"FAT32")
echo "Mounting as FAT32..."
sudo mount_msdos "$DRIVE_IDENTIFIER" "$MOUNTPOINT_DIR"
;;
"Journaled HFS+"|"HFS+"|"Mac OS Extended")
echo "Mounting as HFS+..."
sudo mount_hfs "$DRIVE_IDENTIFIER" "$MOUNTPOINT_DIR"
;;
*)
echo "❌ Unsupported filesystem: $FS_TYPE"
exit 1
;;
esac

echo "✅ Mounted at $MOUNTPOINT_DIR"

There you go.
You should see the iPod pop up in your Finder! I just have a Windows formatted iPod so I'm not 100% sure it works with Mac-formatted ones since I havent tried. But the script takes that into account, so I hope it works for whoever find it.

Since trying to mount it with `diskutil` fails, but doing it with the more low-level `mount` command does work, all of this sure taste like Apple just blocks iPods from connecting as external drives deliberately since Sequoia. Let's all have a collective sight while remembering the magic word:

courage.jpeg


Cheers & long live your iPod!
 
Last edited:
Actually, here is a script that should 'just work™' for everyone:
#!/usr/bin/env bash
#
# iPod Auto-Mounter for macOS Sequoia 15.4 and up
# ---------------------------
# Looks for connected iPods (Vendor ID = Apple 0x05ac),
# matches them against known Product IDs,
# detects the filesystem, and mounts them under /Volumes/<VolumeName>.
#

# ---------------------------
# Prevent Finder from showing "Restore iPod" popup
killall AMPDeviceDiscoveryAgent 2>/dev/null
# ---------------------------

# ---------------------------
# CONFIG: Supported iPod Product IDs (hex, lowercase, no 0x prefix) source:https://theapplewiki.com/wiki/USB_Product_IDs
IPOD_PRODUCT_IDS=(
"1201" # iPod with dock connector (3rd generation)
"1202" # iPod (1st and 2nd generation)
"1203" # iPod with Click Wheel (4th generation)
"1204" # iPod Photo / iPod with color display
"1205" # iPod mini (1st and 2nd generation)
"1209" # iPod with video (5th generation)
"120A" # iPod nano
"1220" # iPod nano (2nd generation) (DFU Mode)
"1221" # iPod shuffle (2nd generation) (DFU Mode)
"1223" # iPod classic (6th gen, DFU Mode) / iPod nano (3rd gen, DFU Mode)
"1225" # iPod nano (4th generation) (DFU Mode)
"1231" # iPod nano (5th generation) (DFU Mode)
"1232" # iPod nano (6th generation) (DFU Mode)
"1234" # iPod nano (7th generation) (DFU Mode)
"1240" # iPod nano (2nd generation) (WTF Mode)
"1241" # iPod classic (6th generation) (Late 2007, WTF Mode)
"1242" # iPod nano (3rd generation) (WTF Mode)
"1243" # iPod nano (4th generation) (WTF Mode)
"1245" # iPod classic (6th generation) (Late 2008, WTF Mode)
"1246" # iPod nano (5th generation) (WTF Mode)
"1247" # iPod classic (6th generation) (Late 2009, WTF Mode)
"1248" # iPod nano (6th generation) (WTF Mode)
"1249" # iPod nano (7th generation) (Late 2012, WTF Mode)
"124A" # iPod nano (7th generation) (Mid 2015, WTF Mode)
"1250" # iPod classic (6th generation) (Late 2012, WTF Mode)
"1260" # iPod nano (2nd generation)
"1261" # iPod classic (6th generation)
"1262" # iPod nano (3rd generation)
"1263" # iPod nano (4th generation)
"1265" # iPod nano (5th generation)
"1266" # iPod nano (6th generation)
"1267" # iPod nano (7th generation)
"1300" # iPod shuffle (1st and 2nd generation)
)
APPLE_VENDOR_ID="0x05ac" # All iPods report Apple’s USB Vendor ID
# ---------------------------

echo "🔍 Scanning for connected iPods..."

# ---------------------------
# Capture all matching BSD names into a variable
MATCHES=$(system_profiler SPUSBDataType | awk -v vids="$APPLE_VENDOR_ID" '
/Product ID:/ {pid=$3}
/Vendor ID:/ {vid=$3}
/BSD Name:/ {bsd=$3; if (vid!="" && pid!="" && bsd!="") print vid, pid, bsd}
')
# ---------------------------

# ---------------------------
# If no matches found, print message and exit
if [[ -z "$MATCHES" ]]; then
echo "⚠️ No iPod detected."
exit 0
fi
# ---------------------------

# ---------------------------
# Process each matched iPod
echo "$MATCHES" | while read -r VENDOR_ID PRODUCT_ID BSD_NAME; do
# Only continue if Vendor is Apple
[[ "$VENDOR_ID" != "$APPLE_VENDOR_ID" ]] && continue

# Only continue if BSD name is a partition (diskXsY, not diskX)
[[ "$BSD_NAME" =~ s[0-9]+$ ]] || continue

# Check if PRODUCT_ID matches one of the iPod IDs in our list
for PID in "${IPOD_PRODUCT_IDS[@]}"; do
if [[ "$PRODUCT_ID" == "0x$PID" ]]; then
DRIVE_IDENTIFIER="/dev/$BSD_NAME"
echo "✅ Found iPod (Product ID $PID) at $DRIVE_IDENTIFIER"

# ---------------------------
# Extract volume metadata
VOLUME_NAME=$(diskutil info -plist "$DRIVE_IDENTIFIER" | \
plutil -extract VolumeName xml1 -o - - | \
sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

FS_TYPE=$(diskutil info -plist "$DRIVE_IDENTIFIER" | \
plutil -extract FilesystemName xml1 -o - - | \
sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

MOUNTPOINT="/Volumes/$VOLUME_NAME"

echo " Volume name: $VOLUME_NAME"
echo " Filesystem: $FS_TYPE"
# ---------------------------

# Skip if already mounted
if mount | grep -q "on $MOUNTPOINT "; then
echo "⚠️ $VOLUME_NAME already mounted at $MOUNTPOINT"
continue
fi

# Ensure mountpoint exists
sudo mkdir -p "$MOUNTPOINT"

# ---------------------------
# Mount depending on filesystem
case "$FS_TYPE" in
"MS-DOS FAT32"|"MS-DOS"|"FAT32")
echo "📀 Mounting $VOLUME_NAME as FAT32..."
sudo mount_msdos "$DRIVE_IDENTIFIER" "$MOUNTPOINT"
;;
"Journaled HFS+"|"HFS+"|"Mac OS Extended")
echo "📀 Mounting $VOLUME_NAME as HFS+..."
sudo mount_hfs "$DRIVE_IDENTIFIER" "$MOUNTPOINT"
;;
*)
echo "❌ Unsupported filesystem: $FS_TYPE"
;;
esac

echo "✅ Mounted $VOLUME_NAME at $MOUNTPOINT"
fi
done
done
# ---------------------------
 
Fantastic work, thank you for sharing! I will try it as soon as I am somehow forced onto an OS past 15.3.2
This also means that the Apple Music won’t work for syncing anymore, correct? Time for me to finally make the switch then…
 
  • Like
Reactions: wwwonka
Fantastic work, thank you for sharing! I will try it as soon as I am somehow forced onto an OS past 15.3.2
This also means that the Apple Music won’t work for syncing anymore, correct? Time for me to finally make the switch then…

It actually does work. ... Quite surprising heh.


Screenshot 2025-08-24 at 22.19.54 2.png
 
  • Wow
Reactions: johnnytravels
Hey @Jerryipod,

You are very welcome.

Out of curiosity, when you plug your recalcitrant ipods in your machine, do they at least appear in the USB section of System Information? If so, there is still hope. Maybe try the script and method in the first post of this thread…

Also, are these iPods modded? 👀
 
@johnnytravels,

If it fails, try using disk mode.

Honestly as long as it's recognized within the USB section of System Information, it should be mountable. The ipod is pretty much a glorified external hard drive from a hardware perspective.

~ On the rockbox front, I tried using it some time ago and remember that the iPod was getting recognized with a different name in Windows Device Manager. Something like "Rockbox music device" I'm guessing rockbox alters the Product and/or Vendor IDs during its installation to take full control of the device. Its fairly plausible that my script does not work yet with rockbox iPods. But to make it work should in theory not be very hard.

Bottom line is you should still have the choice of the OS on your iPod. 🙃

What a pain though.. 🙄
 
Last edited:
@wwwonka
Hey @Jerryipod,

You are very welcome.

Out of curiosity, when you plug your recalcitrant ipods in your machine, do they at least appear in the USB section of System Information? If so, there is still hope. Maybe try the script and method in the first post of this thread…

Also, are these iPods modded? 👀
All my iPods are modded. Below are the status of each one:
7th Gen Classic - This has Been able to sync up to the current Mac OS, no issues.
5.5th gen iPod with Video - This has Been able to sync up to the current Mac OS, no issues.
4th Gen Mono - Was able to sync until 15.4.1, iPod mounts the iPod share (cal, contacts, notes) and iPod shows in finder to sync. When Sync settings are selected, I get loading for a couple of minutes then displays "The selected device cannot be found". The UUID shows in System settings. I've also tried the script in the first post.
3rd Gen Classic - This iPod stopped syncing after 15.4.1, but after running your script and several reboots, is syncing with the Music app.
2nd Gen iPod Mini - I either see the same behavior as the 4th generation mono iPod or this iPod will mount then immediately unmounts. The iPod shows in system settings but does not display a UUID.

For the 2 iPods that do not sync, I've tried multiple different 30 pins cables (OG apple branded, 3rd party USB C etc) and reboot the devices multiple times including disk mode.

Edited to say these iPods will sync in Windows with iTunes. I just don't want to maintain 2 libraries.
 
@johnnytravels,

If it fails, try using disk mode.

Honestly as long as it's recognized within the USB section of System Information, it should be mountable. The ipod is pretty much a glorified external hard drive from a hardware perspective.

~ On the rockbox front, I tried using it some time ago and remember that the iPod was getting recognized with a different name in Windows Device Manager. Something like "Rockbox music device" I'm guessing rockbox alters the Product and/or Vendor IDs during its installation to take full control of the device. Its fairly plausible that my script does not work yet with rockbox iPods. But to make it work should in theory not be very hard.

Bottom line is you should still have the choice of the OS on your iPod. 🙃

What a pain though.. 🙄
Thanks.
Regarding Rockbox: yeah this would mean that I would stop using iPod syncing altogether and just start dragging and dropping folders.
What a pain indeed, maybe it’s time to move on to a different player (or I might just start using windows 😅). What I did do is unsubscribe from Apple Music, just so they don't get rewarded for making vintage tech obsolete. The thing is that I was so ready to start purchasing from the iTunes Store again...
 
Thanks so much for the script to get Sequoia 15.6.1 to mount and allow me to 1) restore my 5th Gen iPod and 2) sync my music library.
 
  • Love
Reactions: wwwonka
@Jerryipod
Edited to say these iPods will sync in Windows with iTunes. I just don't want to maintain 2 libraries.

Yes… what an irony, for me too the iPod has been working flawlessly with any Windows machine as long as iTunes is not too updated. In my humble opinion, syncing from Swinsian has become the best and simplest option on macOS.

Syncing from iTunes 10.7 installed through Retroactive will still work (though a little unstable) under Sequoia. If you are really attached to iTunes 12 there is a way to set things up with symlinks, so that you have your iTunes library accessible from macOS and a Parallels Windows Virtual Machine to sync.

I’ve managed to do this in the past but now resorbed to Swinsian for syncing; I still miss the native feel of iTunes but the hassle of not being able to add FLAC files and being tied to Apple’s stuff in general made me go away.
 
Hey all, brand new here and having the same problem (5th gen, modded and running Rockbox). To add new music, I need to boot it up in the standard iPod OS, and then transfer the files, so I'm looking for the same solution as a non-modded user. How do I enter the script into terminal? A full copy and paste was not the way to go.
 
@otsegohive

How to use:

1.Download the attached .txt file and rename it to .sh (e.g., Mount_iPod.sh)

2.Open Terminal, then drag the file into the Terminal window and press Enter to navigate there, or use:

cd /path/to/your/file

3.Make it executable:

chmod +x Mount_iPod.sh

4. Run it:

./Mount_iPod.sh

Plug your iPod before running it and it should be good....
 

Attachments

Last edited:
@otsegohive

How to use:

1.Download the attached .txt file and rename it to .sh (e.g., Mount_iPod.sh)

2.Open Terminal, then drag the file into the Terminal window and press Enter to navigate there, or use:

cd /path/to/your/file

3.Make it executable:

chmod +x Mount_iPod.sh

4. Run it:

./Mount_iPod.sh

Plug your iPod before running it and it should be good....
Sorry for the delay, but after plunking around (because I know almost nothing about basic use of terminal), it worked! Thanks so much for your help. Will I have to do this every time I want to access the iPod, or will it remember the device from now on?
 
Sorry for the delay, but after plunking around (because I know almost nothing about basic use of terminal), it worked! Thanks so much for your help. Will I have to do this every time I want to access the iPod, or will it remember the device from now on?

Hey @otsegohive
Now that you got the script file executable, it should be as easy as plugging your ipod and double-clicking the script file. I am sure there are ways of making this automatic but yes, you will have to do this every time. so far that's the solution.

Cheers and happy 2026!
 
Hey @otsegohive
Now that you got the script file executable, it should be as easy as plugging your ipod and double-clicking the script file. I am sure there are ways of making this automatic but yes, you will have to do this every time. so far that's the solution.

Cheers and happy 2026!
Awesome, thanks again. Happy New Year!
 
Hey there, I'm back. After a few months of it running perfectly, I went to run it today and got this error. Any ideas what that may be?

/iPod/Mount_iPod.sh: line 17: 120A: value too great for base (error token is "120A")
 
try this:

Code:
#!/bin/bash
#
# iPod Auto-Mounter for macOS (Bash 3.2 compatible)
# -------------------------------------------------
# Detects iPods by Apple vendor ID, matches product IDs,
# identifies filesystem, and mounts under /Volumes/<VolumeName>.
#

killall AMPDeviceDiscoveryAgent 2>/dev/null

APPLE_VENDOR_ID="0x05ac"

# ---------------------------------------------------------
# Function to map Product ID → iPod model name (Bash 3.2 compatible)
# ---------------------------------------------------------
lookup_model() {
    case "$1" in
        1201) echo "iPod with dock connector (3rd generation)";;
        1202) echo "iPod (1st and 2nd generation)";;
        1203) echo "iPod with Click Wheel (4th generation)";;
        1204) echo "iPod Photo / color display";;
        1205) echo "iPod mini (1st and 2nd gen)";;
        1209) echo "iPod with video (5th gen)";;
        120A) echo "iPod nano";;

        1220) echo "iPod nano (2nd gen) - DFU";;
        1221) echo "iPod shuffle (2nd gen) - DFU";;
        1223) echo "iPod classic (6th gen DFU) / nano 3 DFU";;
        1225) echo "iPod nano (4th gen DFU)";;
        1231) echo "iPod nano (5th gen DFU)";;
        1232) echo "iPod nano (6th gen DFU)";;
        1234) echo "iPod nano (7th gen DFU)";;

        1240) echo "iPod nano (2nd gen WTF)";;
        1241) echo "iPod classic (6th gen Late 2007 WTF)";;
        1242) echo "iPod nano (3rd gen WTF)";;
        1243) echo "iPod nano (4th gen WTF)";;
        1245) echo "iPod classic (6th gen Late 2008 WTF)";;
        1246) echo "iPod nano (5th gen WTF)";;
        1247) echo "iPod classic (6th gen Late 2009 WTF)";;
        1248) echo "iPod nano (6th gen WTF)";;
        1249) echo "iPod nano (7th gen Late 2012 WTF)";;
        124A) echo "iPod nano (7th gen Mid 2015 WTF)";;
        1250) echo "iPod classic (6th gen Late 2012 WTF)";;

        1260) echo "iPod nano (2nd gen)";;
        1261) echo "iPod classic (6th gen)";;
        1262) echo "iPod nano (3rd gen)";;
        1263) echo "iPod nano (4th gen)";;
        1265) echo "iPod nano (5th gen)";;
        1266) echo "iPod nano (6th gen)";;
        1267) echo "iPod nano (7th gen)";;

        1300) echo "iPod shuffle (1st/2nd gen)";;

        *)    echo "Unknown iPod model";;
    esac
}

echo "🔍 Scanning for connected iPods..."

# ---------------------------------------------------------
# Extract vendor ID, product ID, and BSD name for each USB device
# ---------------------------------------------------------
MATCHES=$(system_profiler SPUSBDataType | awk '
    /Product ID:/ {pid=$3}
    /Vendor ID:/  {vid=$3}
    /BSD Name:/   {bsd=$3; if (vid!="" && pid!="" && bsd!="") print vid, pid, bsd}
')

if [[ -z "$MATCHES" ]]; then
    echo "⚠️ No iPod detected."
    exit 0
fi

# ---------------------------------------------------------
# Process each device
# ---------------------------------------------------------
echo "$MATCHES" | while read -r VENDOR_ID PRODUCT_ID BSD_NAME; do

    [[ "$VENDOR_ID" != "$APPLE_VENDOR_ID" ]] && continue

    [[ "$BSD_NAME" =~ s[0-9]+$ ]] || continue

    PID="${PRODUCT_ID#0x}"
    MODEL_NAME="$(lookup_model "$PID")"

    DRIVE="/dev/$BSD_NAME"
    echo "✅ Found $MODEL_NAME (PID $PID) at $DRIVE"

    # -----------------------------------------------------
    # Read volume name, filesystem type, mountpoint
    # -----------------------------------------------------
    VOLUME_NAME=$(diskutil info -plist "$DRIVE" \
        | plutil -extract VolumeName xml1 -o - - \
        | sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

    FS_TYPE=$(diskutil info -plist "$DRIVE" \
        | plutil -extract FilesystemName xml1 -o - - \
        | sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

    CURRENT_MOUNT=$(diskutil info -plist "$DRIVE" \
        | plutil -extract MountPoint xml1 -o - - \
        | sed -n 's:.*<string>\(.*\)</string>.*:\1:p')

    MOUNTPOINT="/Volumes/$VOLUME_NAME"

    echo "  Volume name: $VOLUME_NAME"
    echo "  Filesystem:  $FS_TYPE"

    # -----------------------------------------------------
    # Already mounted?
    # -----------------------------------------------------
    if [[ -n "$CURRENT_MOUNT" && "$CURRENT_MOUNT" == "$MOUNTPOINT" ]]; then
        echo "⚠️  Already mounted at $MOUNTPOINT"
        continue
    fi

    # Clean leftover directory
    if [[ -z "$CURRENT_MOUNT" && -d "$MOUNTPOINT" ]]; then
        echo "🧹 Removing stale mountpoint $MOUNTPOINT"
        sudo rm -rf "$MOUNTPOINT"
    fi

    sudo mkdir -p "$MOUNTPOINT"

    # -----------------------------------------------------
    # Mount filesystem
    # -----------------------------------------------------
    case "$FS_TYPE" in
        "MS-DOS FAT32"|"MS-DOS"|"FAT32")
            echo "📀 Mounting FAT32 volume..."
            sudo mount_msdos "$DRIVE" "$MOUNTPOINT"
            ;;
        "Journaled HFS+"|"HFS+"|"Mac OS Extended")
            echo "📀 Mounting HFS+ volume..."
            sudo mount_hfs "$DRIVE" "$MOUNTPOINT"
            ;;
        *)
            echo "❌ Unsupported filesystem: $FS_TYPE"
            continue
            ;;
    esac

    echo "✅ Mounted at $MOUNTPOINT"
done
 
Last edited:
No luck. Things get weirder. I plugged the ipod into my old Mac Pro (running High Sierra) and the machine wouldn't even recognize the ipod as a drive. I wonder if the Rockbox component, or the formatting is just making it unreadable?
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.