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
Tested/Developed on:
ProductName: macOS
ProductVersion: 14.7.4
BuildVersion: 23H420
And Python3 version: 3.13.2.
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.
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.
-
You need python3 and pip. (You may use venv or IDE integration to set up your Python version as
>= 3.13.xtoo) -
Clone the repo and
cdinto 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-legacyis 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
--pathpython 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
BeaconStorekeystore key (e.g. on MacOS 15 using this approach), you can provide it directly as a Base64-encoded string string using the optional--keyargumentpython main/airtag_decryptor.py --rename-legacy --key='SGVsbG8gV29ybGQ='Q: How to make it decrypt all .plist folders?
If you'd like to decrypt all
.plistfiles and not just the ones inOwnedBeaconsandBeaconNamingRecord, you can use the--allflagpython 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
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.txtThen:
python main/wizard.py./make_icon.shYou will need to install pyinstaller:
pip install pyinstallerThen you can build a distribution for the app:
pyinstaller \
--onefile \
--windowed \
--name "OpenTagViewer" \
--osx-bundle-identifier "dev.wander.opentagviewer" \
--icon=OpenTagViewer.icns \
main/wizard.pyZip up result (MacOS):
APP_VERSION=1.0.5
cd ./dist
zip -r OpenTagViewer-ExportWizardMacOS-$APP_VERSION.zip OpenTagViewer.app/ OpenTagViewer