Skip to content

Latest commit

 

History

History

README.md

πŸ§™ OpenTagViewer MacOS AirTag Export Wizard

A very simple GUI-based utility that allows users to select which AirTags to export .plist files for, to be able to then import them in the OpenTagViewer Android App.

The wizard will generally show you the most recent names for your devices. These names (and emojis) can be set using the FindMy app on MacOS or iOS devices.

The UI is pretty plain looking, but ideally this tool only needs to be used once/rarely! πŸ˜€

Get the latest version of it here

Preview of the OpenTagViewer Airtag Export Wizard runnig on MacOS 14

Tested/Developed on:

ProductName:            macOS
ProductVersion:         14.7.4
BuildVersion:           23H420

And Python3 version: 3.13.2.

πŸ”§ Python Utility Scripts

Warning

It is possible that these scripts will not execute on all python3 versions!

However, the OpentagViewer Wizard App that can be downloaded from the Releases page will work regardless of the Python version you have installed on your MacOS machine, as it uses its own bundled/embedded version of Python that it gets packaged with.

airtag_decryptor.py

This is an implementation based on airtag-decryptor.swift by airty10, which was based on airtag-decryptor.swift by Matus, but in python.

Reasoning for this: I don't know Swift (and I don't even use MacOS) and I need to copy the logic into an UI app for MacOS for my android OpenTagViewer app.

How to use:

  • You need python3 and pip. (You may use venv or IDE integration to set up your Python version as >= 3.13.x too)

  • Clone the repo and cd into this directory

  • Install requirements:

    pip install -r requirements.txt
  • Run the script:

    python main/airtag_decryptor.py --rename-legacy

    Default output path is: ~/plist_decrypt_output.

    --rename-legacy is used to make it automatically perform folder rename logic for MacOS 11.x (see issue #24). It has no effects for later versions of MacOS.

    Q: How to provide custom output path?

    If you'd like to provide an alternative output path, use optional argument --path

    python main/airtag_decryptor.py --rename-legacy --path='/your/alternative/path'
    Q: How to provide it a custom decryption key?

    If you used some custom method to get the BeaconStore keystore key (e.g. on MacOS 15 using this approach), you can provide it directly as a Base64-encoded string string using the optional --key argument

    python main/airtag_decryptor.py --rename-legacy --key='SGVsbG8gV29ybGQ='
    Q: How to make it decrypt all .plist folders?

    If you'd like to decrypt all .plist files and not just the ones in OwnedBeacons and BeaconNamingRecord, you can use the --all flag

    python main/airtag_decryptor.py --rename-legacy --all
    Q: What other options are available?

    For more help and options, run the script with --help:

    python main/airtag_decryptor.py --help
  • The script will open the specified output folder on success

πŸ§‘β€πŸ’» Export Wizard Development

(Dev) Run it as a python script on MacOS

You need python and tkinter installed (here, tkinter is what provides the GUI functionality):

brew install python3
brew install python-tk

pip install -r requirements.txt

Then:

python main/wizard.py

Build Icons (on MacOS)

./make_icon.sh

Build executable (on MacOS)

You will need to install pyinstaller:

pip install pyinstaller

Then you can build a distribution for the app:

pyinstaller \
    --onefile \
    --windowed \
    --name "OpenTagViewer" \
    --osx-bundle-identifier "dev.wander.opentagviewer" \
    --icon=OpenTagViewer.icns \
    main/wizard.py

Zip up result (MacOS):

APP_VERSION=1.0.5
cd ./dist
zip -r OpenTagViewer-ExportWizardMacOS-$APP_VERSION.zip OpenTagViewer.app/ OpenTagViewer