Skip to content
This repository has been archived by the owner on Jan 20, 2025. It is now read-only.

Commit

Permalink
save the device model fix reverting spoofing
Browse files Browse the repository at this point in the history
  • Loading branch information
leminlimez committed Oct 22, 2024
1 parent 97fb510 commit ac5a907
Show file tree
Hide file tree
Showing 8 changed files with 30 additions and 19 deletions.
23 changes: 19 additions & 4 deletions devicemanagement/device_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from pathlib import Path

from PySide6.QtWidgets import QMessageBox
from PySide6.QtCore import QSettings

from pymobiledevice3 import usbmux
from pymobiledevice3.lockdown import create_using_usbmux
Expand Down Expand Up @@ -32,7 +33,7 @@ def __init__(self):
self.apply_over_wifi = True
self.skip_setup = True

def get_devices(self):
def get_devices(self, settings: QSettings):
self.devices.clear()
connected_devices = usbmux.list_devices()
# Connect via usbmuxd
Expand All @@ -41,16 +42,26 @@ def get_devices(self):
try:
ld = create_using_usbmux(serial=device.serial)
vals = ld.all_values
model = vals['ProductType']
try:
product_type = settings.value(device.serial + "_model", "", type=str)
if product_type == "":
# save the new product type
settings.setValue(device.serial + "_model", model)
else:
model = product_type
except:
pass
dev = Device(
uuid=device.serial,
name=vals['DeviceName'],
version=vals['ProductVersion'],
build=vals['BuildVersion'],
model=vals['ProductType'],
model=model,
locale=ld.locale,
ld=ld
)
tweaks["RdarFix"].get_rdar_mode(vals['ProductType'])
tweaks["RdarFix"].get_rdar_mode(model)
self.devices.append(dev)
except Exception as e:
print(f"ERROR with lockdown device with UUID {device.serial}")
Expand All @@ -68,13 +79,15 @@ def set_current_device(self, index: int = None):
self.data_singleton.device_available = False
self.data_singleton.gestalt_path = None
self.current_device_index = 0
tweaks["SpoofModel"].value[0] = "Placeholder"
else:
self.data_singleton.current_device = self.devices[index]
if Version(self.devices[index].version) < Version("17.0"):
self.data_singleton.device_available = False
self.data_singleton.gestalt_path = None
else:
self.data_singleton.device_available = True
tweaks["SpoofModel"].value[0] = self.data_singleton.current_device.model
self.current_device_index = index

def get_current_device_name(self) -> str:
Expand Down Expand Up @@ -285,10 +298,12 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
show_error_msg(type(e).__name__)

## RESETTING MOBILE GESTALT
def reset_mobilegestalt(self, update_label=lambda x: None):
def reset_mobilegestalt(self, settings: QSettings, update_label=lambda x: None):
# restore to the device
update_label("Restoring to device...")
try:
# remove the saved device model
settings.setValue(self.data_singleton.current_device.uuid + "_model", "")
domain, file_path = self.get_domain_for_path("/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist")
restore_files(files=[FileToRestore(
contents=b"",
Expand Down
9 changes: 3 additions & 6 deletions gui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ def updateInterfaceForNewDevice(self):
@QtCore.Slot()
def refresh_devices(self):
# get the devices
self.device_manager.get_devices()
self.device_manager.get_devices(self.settings)
# clear the picker
self.ui.devicePicker.clear()
self.ui.restoreProgressBar.hide()
Expand Down Expand Up @@ -510,10 +510,7 @@ def on_enableAIChk_toggled(self, checked: bool):
def on_languageTxt_textEdited(self, text: str):
tweaks["AIEligibility"].set_language_code(text)
def on_spoofedModelDrp_activated(self, index: int):
if index == 0:
tweaks["SpoofModel"].set_enabled(False)
else:
tweaks["SpoofModel"].set_selected_option(index - 1)
tweaks["SpoofModel"].set_selected_option(index)


## SPRINGBOARD OPTIONS PAGE
Expand Down Expand Up @@ -622,7 +619,7 @@ def on_removeTweaksBtn_clicked(self):
# TODO: Add safety here
self.device_manager.apply_changes(resetting=True, update_label=self.update_label)
def on_resetGestaltBtn_clicked(self):
self.device_manager.reset_mobilegestalt(update_label=self.update_label)
self.device_manager.reset_mobilegestalt(self.settings, update_label=self.update_label)

@QtCore.Slot()
def on_applyTweaksBtn_clicked(self):
Expand Down
1 change: 0 additions & 1 deletion main_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
if __name__ == "__main__":
app = QtWidgets.QApplication([])
dm = DeviceManager()
dm.get_devices()

widget = MainWindow(device_manager=dm)
widget.resize(800, 600)
Expand Down
4 changes: 2 additions & 2 deletions qt/mainwindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -1566,7 +1566,7 @@ QToolButton:pressed {
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Nugget GUI - Version 3.1 (beta 2)</string>
<string>Nugget GUI - Version 3.1 (beta 3)</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
Expand Down Expand Up @@ -1726,7 +1726,7 @@ QToolButton:pressed {
<property name="geometry">
<rect>
<x>0</x>
<y>-292</y>
<y>0</y>
<width>650</width>
<height>1200</height>
</rect>
Expand Down
4 changes: 2 additions & 2 deletions qt/mainwindow_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -945,7 +945,7 @@ def setupUi(self, Nugget):
self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scrollAreaWidgetContents = QWidget()
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
self.scrollAreaWidgetContents.setGeometry(QRect(0, -292, 650, 1200))
self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 650, 1200))
self.scrollAreaWidgetContents.setMinimumSize(QSize(650, 1200))
self.scrollAreaWidgetContents.setMaximumSize(QSize(650, 1200))
self.verticalLayout_9 = QVBoxLayout(self.scrollAreaWidgetContents)
Expand Down Expand Up @@ -2694,7 +2694,7 @@ def retranslateUi(self, Nugget):
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None))
self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None))
self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.1 (beta 2)", None))
self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.1 (beta 3)", None))
self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None))
self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None))
self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
Expand Down
4 changes: 2 additions & 2 deletions qt/ui_mainwindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -945,7 +945,7 @@ def setupUi(self, Nugget):
self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scrollAreaWidgetContents = QWidget()
self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
self.scrollAreaWidgetContents.setGeometry(QRect(0, -292, 650, 1200))
self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 650, 1200))
self.scrollAreaWidgetContents.setMinimumSize(QSize(650, 1200))
self.scrollAreaWidgetContents.setMaximumSize(QSize(650, 1200))
self.verticalLayout_9 = QVBoxLayout(self.scrollAreaWidgetContents)
Expand Down Expand Up @@ -2694,7 +2694,7 @@ def retranslateUi(self, Nugget):
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None))
self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None))
self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.1 (beta 2)", None))
self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.1 (beta 3)", None))
self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None))
self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None))
self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
Expand Down
2 changes: 1 addition & 1 deletion tweaks/tweak_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ def __init__(
self.selected_option = 0 # index of the selected option

def apply_tweak(self, plist: dict):
if not self.enabled:
if not self.enabled or self.value[self.selected_option] == "Placeholder":
return plist
new_value = self.value[self.selected_option]
if self.subkey == None:
Expand Down
2 changes: 1 addition & 1 deletion tweaks/tweaks.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
## AI Enabler
"AIEligibility": AITweak(),
"AIGestalt": MobileGestaltTweak("Enable Apple Intelligence (for Unsupported Devices) (Gestalt)", "A62OafQ85EJAiiqKn4agtg", min_version=Version("18.1")),
"SpoofModel": MobileGestaltPickerTweak("Spoofed Device Model", "h9jDsbgj7xIVeIQ8S3/X3Q", values=["iPhone16,2", "iPhone17,3", "iPhone17,4", "iPad16,3"], min_version=Version("18.1"), divider_below=True),
"SpoofModel": MobileGestaltPickerTweak("Spoofed Device Model", "h9jDsbgj7xIVeIQ8S3/X3Q", values=["Placeholder", "iPhone16,2", "iPhone17,3", "iPhone17,4", "iPad16,3"], min_version=Version("18.1"), divider_below=True),

## Springboard Tweaks
"LockScreenFootnote": BasicPlistTweak(
Expand Down

0 comments on commit ac5a907

Please sign in to comment.