ai enabler

This commit is contained in:
leminlimez
2024-09-27 20:23:49 -04:00
parent a543f8cb9b
commit 8a5966fdbb
9 changed files with 306 additions and 34 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,5 +1,5 @@
from Sparserestore.restore import restore_files, FileToRestore, restore_file from Sparserestore.restore import restore_files, FileToRestore, restore_file
from tweaks.tweaks import tweaks, TweakModifyType, FeatureFlagTweak, EligibilityTweak, BasicPlistTweak from tweaks.tweaks import tweaks, TweakModifyType, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak
from tweaks.basic_plist_locations import FileLocation from tweaks.basic_plist_locations import FileLocation
from devicemanagement.constants import Device from devicemanagement.constants import Device
@@ -103,6 +103,7 @@ while running:
# create the other plists # create the other plists
flag_plist: dict = {} flag_plist: dict = {}
eligibility_files = None eligibility_files = None
ai_file = None
basic_plists: dict = {} basic_plists: dict = {}
# verify the device credentials before continuing # verify the device credentials before continuing
@@ -122,6 +123,8 @@ while running:
elif isinstance(tweak, EligibilityTweak): elif isinstance(tweak, EligibilityTweak):
tweak.set_region_code(device.locale[-2:]) tweak.set_region_code(device.locale[-2:])
eligibility_files = tweak.apply_tweak() eligibility_files = tweak.apply_tweak()
elif isinstance(tweak, AITweak):
ai_file = tweak.apply_tweak()
elif isinstance(tweak, BasicPlistTweak): elif isinstance(tweak, BasicPlistTweak):
basic_plists = tweak.apply_tweak(basic_plists) basic_plists = tweak.apply_tweak(basic_plists)
else: else:
@@ -142,6 +145,8 @@ while running:
] ]
if eligibility_files != None: if eligibility_files != None:
files_to_restore += eligibility_files files_to_restore += eligibility_files
if ai_file != None:
files_to_restore.append(ai_file)
for location, plist in basic_plists: for location, plist in basic_plists:
files_to_restore.append(FileToRestore( files_to_restore.append(FileToRestore(
contents=plistlib.dumps(plist), contents=plistlib.dumps(plist),

View File

@@ -10,7 +10,7 @@ from pymobiledevice3.lockdown import create_using_usbmux
from devicemanagement.constants import Device, Version from devicemanagement.constants import Device, Version
from devicemanagement.data_singleton import DataSingleton from devicemanagement.data_singleton import DataSingleton
from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, BasicPlistTweak from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak
from tweaks.basic_plist_locations import FileLocation from tweaks.basic_plist_locations import FileLocation
from Sparserestore.restore import restore_files, FileToRestore from Sparserestore.restore import restore_files, FileToRestore
@@ -106,6 +106,7 @@ class DeviceManager:
# create the other plists # create the other plists
flag_plist: dict = {} flag_plist: dict = {}
eligibility_files = None eligibility_files = None
ai_file = None
basic_plists: dict = {} basic_plists: dict = {}
# set the plist keys # set the plist keys
@@ -116,6 +117,8 @@ class DeviceManager:
flag_plist = tweak.apply_tweak(flag_plist) flag_plist = tweak.apply_tweak(flag_plist)
elif isinstance(tweak, EligibilityTweak): elif isinstance(tweak, EligibilityTweak):
eligibility_files = tweak.apply_tweak() eligibility_files = tweak.apply_tweak()
elif isinstance(tweak, AITweak):
ai_file = tweak.apply_tweak()
elif isinstance(tweak, BasicPlistTweak): elif isinstance(tweak, BasicPlistTweak):
basic_plists = tweak.apply_tweak(basic_plists) basic_plists = tweak.apply_tweak(basic_plists)
else: else:
@@ -146,6 +149,8 @@ class DeviceManager:
)) ))
if eligibility_files: if eligibility_files:
files_to_restore += eligibility_files files_to_restore += eligibility_files
if ai_file != None:
files_to_restore.append(ai_file)
for location, plist in basic_plists: for location, plist in basic_plists:
files_to_restore.append(FileToRestore( files_to_restore.append(FileToRestore(
contents=plistlib.dumps(plist), contents=plistlib.dumps(plist),

View File

@@ -68,11 +68,15 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.discordBtn.clicked.connect(self.on_discordBtn_clicked) self.ui.discordBtn.clicked.connect(self.on_discordBtn_clicked)
## EU ENABLER PAGE ACTIONS ## ELIGIBILITY PAGE ACTIONS
self.ui.euEnablerEnabledChk.toggled.connect(self.on_euEnablerEnabledChk_toggled) self.ui.euEnablerEnabledChk.toggled.connect(self.on_euEnablerEnabledChk_toggled)
self.ui.methodChoiceDrp.activated.connect(self.on_methodChoiceDrp_activated) self.ui.methodChoiceDrp.activated.connect(self.on_methodChoiceDrp_activated)
self.ui.regionCodeTxt.textEdited.connect(self.on_regionCodeTxt_textEdited) self.ui.regionCodeTxt.textEdited.connect(self.on_regionCodeTxt_textEdited)
self.ui.enableAIChk.toggled.connect(self.on_enableAIChk_toggled)
self.ui.languageTxt.textEdited.connect(self.on_languageTxt_textEdited)
self.ui.spoofModelChk.toggled.connect(self.on_spoofModelChk_toggled)
## FEATURE FLAGS PAGE ## FEATURE FLAGS PAGE
self.ui.clockAnimChk.toggled.connect(self.on_clockAnimChk_toggled) self.ui.clockAnimChk.toggled.connect(self.on_clockAnimChk_toggled)
self.ui.lockscreenChk.toggled.connect(self.on_lockscreenChk_clicked) self.ui.lockscreenChk.toggled.connect(self.on_lockscreenChk_clicked)
@@ -188,6 +192,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.gestaltPageContent.setDisabled(False) self.ui.gestaltPageContent.setDisabled(False)
self.ui.featureFlagsPageContent.setDisabled(False) self.ui.featureFlagsPageContent.setDisabled(False)
self.ui.euEnablerPageContent.setDisabled(False)
self.ui.springboardOptionsPageContent.setDisabled(False) self.ui.springboardOptionsPageContent.setDisabled(False)
self.ui.internalOptionsPageContent.setDisabled(False) self.ui.internalOptionsPageContent.setDisabled(False)
@@ -208,6 +213,14 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.dynamicIslandDrp.removeItem(5) self.ui.dynamicIslandDrp.removeItem(5)
except: except:
pass pass
if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.0"):
self.ui.enableAIChk.show()
else:
self.ui.enableAIChk.hide()
self.ui.languageLbl.hide()
self.ui.languageTxt.hide()
self.ui.aiInfoLabel.hide()
self.ui.spoofModelChk.hide()
if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.0"): if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.0"):
self.ui.aodChk.show() self.ui.aodChk.show()
self.ui.sleepApneaChk.show() self.ui.sleepApneaChk.show()
@@ -388,15 +401,33 @@ class MainWindow(QtWidgets.QMainWindow):
tweaks["AI"].set_enabled(checked) tweaks["AI"].set_enabled(checked)
## EU ENABLER PAGE ## ELIGIBILITY PAGE
def on_euEnablerEnabledChk_toggled(self, checked: bool): def on_euEnablerEnabledChk_toggled(self, checked: bool):
tweaks["EUEnabler"].set_enabled(checked) tweaks["EUEnabler"].set_enabled(checked)
self.ui.euEnablerPageContent.setDisabled(not checked)
def on_methodChoiceDrp_activated(self, index: int): def on_methodChoiceDrp_activated(self, index: int):
tweaks["EUEnabler"].set_selected_option(index) tweaks["EUEnabler"].set_selected_option(index)
def on_regionCodeTxt_textEdited(self, text: str): def on_regionCodeTxt_textEdited(self, text: str):
tweaks["EUEnabler"].set_region_code(text) tweaks["EUEnabler"].set_region_code(text)
def on_enableAIChk_toggled(self, checked: bool):
tweaks["AIEligibility"].set_enabled(checked)
tweaks["AIGestalt"].set_enabled(checked)
# change the visibility of stuff
if checked:
self.ui.languageLbl.show()
self.ui.languageTxt.show()
self.ui.aiInfoLabel.show()
self.ui.spoofModelChk.show()
else:
self.ui.languageLbl.hide()
self.ui.languageTxt.hide()
self.ui.aiInfoLabel.hide()
self.ui.spoofModelChk.hide()
def on_languageTxt_textEdited(self, text: str):
tweaks["AIEligibility"].set_language_code(text)
def on_spoofModelChk_toggled(self, checked: bool):
tweaks["SpoofModel"].set_enabled(checked)
## SPRINGBOARD OPTIONS PAGE ## SPRINGBOARD OPTIONS PAGE
def on_footnoteTxt_textEdited(self, text: str): def on_footnoteTxt_textEdited(self, text: str):

View File

@@ -593,7 +593,7 @@ QSlider::tick:horizontal {
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string> EU Enabler</string> <string> Eligibility</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset> <iconset>
@@ -2372,7 +2372,7 @@ QComboBox QAbstractItemView::item:hover {
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QLabel" name="setupOptionsLbl"> <widget class="QLabel" name="eligibilityLbl">
<property name="font"> <property name="font">
<font> <font>
<pointsize>-1</pointsize> <pointsize>-1</pointsize>
@@ -2380,16 +2380,25 @@ QComboBox QAbstractItemView::item:hover {
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>EU Enabler</string> <string>Eligibility Tweaks</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="euEnablerEnabledChk"> <spacer name="verticalSpacer_20">
<property name="text"> <property name="orientation">
<string>Enabled</string> <enum>Qt::Vertical</enum>
</property> </property>
</widget> <property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>16</height>
</size>
</property>
</spacer>
</item> </item>
</layout> </layout>
</widget> </widget>
@@ -2425,6 +2434,13 @@ QComboBox QAbstractItemView::item:hover {
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="euEnablerEnabledChk">
<property name="text">
<string>Enable EU Enabler</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QWidget" name="euEnablerPageContent" native="true"> <widget class="QWidget" name="euEnablerPageContent" native="true">
<property name="enabled"> <property name="enabled">
@@ -2518,6 +2534,72 @@ QComboBox QAbstractItemView::item:hover {
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="Line" name="line_16">
<property name="enabled">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">QFrame {
color: #414141;
}</string>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableAIChk">
<property name="text">
<string>Enable Apple Intelligence (for Unsupported Devices)</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="languageLbl">
<property name="text">
<string>Language Code (not needed for English)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="languageTxt">
<property name="placeholderText">
<string>Language Code (i.e. en)</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="aiInfoLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>In order to download the AI model, you must spoof the device model. This will break Face ID until
you revert.
Once the model has downloaded, disable &quot;Spoof Device Model&quot; and click the &quot;Apply Tweaks&quot;
button on the &quot;Apply&quot; page again to fix Face ID.</string>
</property>
<property name="textFormat">
<enum>Qt::AutoText</enum>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="spoofModelChk">
<property name="text">
<string>Spoof Device Model</string>
</property>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_7"> <spacer name="verticalSpacer_7">
<property name="orientation"> <property name="orientation">

View File

@@ -1286,16 +1286,15 @@ class Ui_Nugget(object):
self.verticalLayout_15.setSpacing(6) self.verticalLayout_15.setSpacing(6)
self.verticalLayout_15.setObjectName(u"verticalLayout_15") self.verticalLayout_15.setObjectName(u"verticalLayout_15")
self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) self.verticalLayout_15.setContentsMargins(0, 0, 0, 0)
self.setupOptionsLbl = QLabel(self.verticalWidget_5) self.eligibilityLbl = QLabel(self.verticalWidget_5)
self.setupOptionsLbl.setObjectName(u"setupOptionsLbl") self.eligibilityLbl.setObjectName(u"eligibilityLbl")
self.setupOptionsLbl.setFont(font1) self.eligibilityLbl.setFont(font1)
self.verticalLayout_15.addWidget(self.setupOptionsLbl) self.verticalLayout_15.addWidget(self.eligibilityLbl)
self.euEnablerEnabledChk = QCheckBox(self.verticalWidget_5) self.verticalSpacer_20 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
self.verticalLayout_15.addWidget(self.euEnablerEnabledChk) self.verticalLayout_15.addItem(self.verticalSpacer_20)
self.horizontalLayout_21.addWidget(self.verticalWidget_5) self.horizontalLayout_21.addWidget(self.verticalWidget_5)
@@ -1317,6 +1316,11 @@ class Ui_Nugget(object):
self.verticalLayout_17.addWidget(self.line_13) self.verticalLayout_17.addWidget(self.line_13)
self.euEnablerEnabledChk = QCheckBox(self.euEnablerPage)
self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
self.verticalLayout_17.addWidget(self.euEnablerEnabledChk)
self.euEnablerPageContent = QWidget(self.euEnablerPage) self.euEnablerPageContent = QWidget(self.euEnablerPage)
self.euEnablerPageContent.setObjectName(u"euEnablerPageContent") self.euEnablerPageContent.setObjectName(u"euEnablerPageContent")
self.euEnablerPageContent.setEnabled(False) self.euEnablerPageContent.setEnabled(False)
@@ -1378,6 +1382,45 @@ class Ui_Nugget(object):
self.verticalLayout_16.addWidget(self.regionCodeTxt) self.verticalLayout_16.addWidget(self.regionCodeTxt)
self.line_16 = QFrame(self.euEnablerPageContent)
self.line_16.setObjectName(u"line_16")
self.line_16.setEnabled(False)
self.line_16.setStyleSheet(u"QFrame {\n"
" color: #414141;\n"
"}")
self.line_16.setFrameShadow(QFrame.Plain)
self.line_16.setFrameShape(QFrame.HLine)
self.verticalLayout_16.addWidget(self.line_16)
self.enableAIChk = QCheckBox(self.euEnablerPageContent)
self.enableAIChk.setObjectName(u"enableAIChk")
self.verticalLayout_16.addWidget(self.enableAIChk)
self.languageLbl = QLabel(self.euEnablerPageContent)
self.languageLbl.setObjectName(u"languageLbl")
self.verticalLayout_16.addWidget(self.languageLbl)
self.languageTxt = QLineEdit(self.euEnablerPageContent)
self.languageTxt.setObjectName(u"languageTxt")
self.verticalLayout_16.addWidget(self.languageTxt)
self.aiInfoLabel = QLabel(self.euEnablerPageContent)
self.aiInfoLabel.setObjectName(u"aiInfoLabel")
sizePolicy1.setHeightForWidth(self.aiInfoLabel.sizePolicy().hasHeightForWidth())
self.aiInfoLabel.setSizePolicy(sizePolicy1)
self.aiInfoLabel.setTextFormat(Qt.AutoText)
self.verticalLayout_16.addWidget(self.aiInfoLabel)
self.spoofModelChk = QCheckBox(self.euEnablerPageContent)
self.spoofModelChk.setObjectName(u"spoofModelChk")
self.verticalLayout_16.addWidget(self.spoofModelChk)
self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_16.addItem(self.verticalSpacer_7) self.verticalLayout_16.addItem(self.verticalSpacer_7)
@@ -2475,7 +2518,7 @@ class Ui_Nugget(object):
self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None)) self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None))
self.featureFlagsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.featureFlagsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.euEnablerPageBtn.setText(QCoreApplication.translate("Nugget", u" EU Enabler", None)) self.euEnablerPageBtn.setText(QCoreApplication.translate("Nugget", u" Eligibility", None))
self.euEnablerPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.euEnablerPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.springboardOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Springboard Options", None)) self.springboardOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Springboard Options", None))
self.springboardOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.springboardOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
@@ -2541,14 +2584,23 @@ class Ui_Nugget(object):
self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None)) self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None))
self.photosChk.setText(QCoreApplication.translate("Nugget", u"Enable Old Photo UI", None)) self.photosChk.setText(QCoreApplication.translate("Nugget", u"Enable Old Photo UI", None))
self.aiChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence", None)) self.aiChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence", None))
self.setupOptionsLbl.setText(QCoreApplication.translate("Nugget", u"EU Enabler", None)) self.eligibilityLbl.setText(QCoreApplication.translate("Nugget", u"Eligibility Tweaks", None))
self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enabled", None)) self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enable EU Enabler", None))
self.label_5.setText(QCoreApplication.translate("Nugget", u"Method Type", None)) self.label_5.setText(QCoreApplication.translate("Nugget", u"Method Type", None))
self.methodChoiceDrp.setItemText(0, QCoreApplication.translate("Nugget", u"Method 1", None)) self.methodChoiceDrp.setItemText(0, QCoreApplication.translate("Nugget", u"Method 1", None))
self.methodChoiceDrp.setItemText(1, QCoreApplication.translate("Nugget", u"Method 2", None)) self.methodChoiceDrp.setItemText(1, QCoreApplication.translate("Nugget", u"Method 2", None))
self.label_6.setText(QCoreApplication.translate("Nugget", u"Region Code (Should be 2 letters)", None)) self.label_6.setText(QCoreApplication.translate("Nugget", u"Region Code (Should be 2 letters)", None))
self.regionCodeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Region Code (Default: US)", None)) self.regionCodeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Region Code (Default: US)", None))
self.enableAIChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence (for Unsupported Devices)", None))
self.languageLbl.setText(QCoreApplication.translate("Nugget", u"Language Code (not needed for English)", None))
self.languageTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Language Code (i.e. en)", None))
self.aiInfoLabel.setText(QCoreApplication.translate("Nugget", u"In order to download the AI model, you must spoof the device model. This will break Face ID until\n"
"you revert.\n"
"\n"
"Once the model has downloaded, disable \"Spoof Device Model\" and click the \"Apply Tweaks\"\n"
"button on the \"Apply\" page again to fix Face ID.", None))
self.spoofModelChk.setText(QCoreApplication.translate("Nugget", u"Spoof Device Model", None))
self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None)) self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None))
self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None)) self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None))
self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None)) self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None))

View File

@@ -1286,16 +1286,15 @@ class Ui_Nugget(object):
self.verticalLayout_15.setSpacing(6) self.verticalLayout_15.setSpacing(6)
self.verticalLayout_15.setObjectName(u"verticalLayout_15") self.verticalLayout_15.setObjectName(u"verticalLayout_15")
self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) self.verticalLayout_15.setContentsMargins(0, 0, 0, 0)
self.setupOptionsLbl = QLabel(self.verticalWidget_5) self.eligibilityLbl = QLabel(self.verticalWidget_5)
self.setupOptionsLbl.setObjectName(u"setupOptionsLbl") self.eligibilityLbl.setObjectName(u"eligibilityLbl")
self.setupOptionsLbl.setFont(font1) self.eligibilityLbl.setFont(font1)
self.verticalLayout_15.addWidget(self.setupOptionsLbl) self.verticalLayout_15.addWidget(self.eligibilityLbl)
self.euEnablerEnabledChk = QCheckBox(self.verticalWidget_5) self.verticalSpacer_20 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
self.verticalLayout_15.addWidget(self.euEnablerEnabledChk) self.verticalLayout_15.addItem(self.verticalSpacer_20)
self.horizontalLayout_21.addWidget(self.verticalWidget_5) self.horizontalLayout_21.addWidget(self.verticalWidget_5)
@@ -1317,6 +1316,11 @@ class Ui_Nugget(object):
self.verticalLayout_17.addWidget(self.line_13) self.verticalLayout_17.addWidget(self.line_13)
self.euEnablerEnabledChk = QCheckBox(self.euEnablerPage)
self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
self.verticalLayout_17.addWidget(self.euEnablerEnabledChk)
self.euEnablerPageContent = QWidget(self.euEnablerPage) self.euEnablerPageContent = QWidget(self.euEnablerPage)
self.euEnablerPageContent.setObjectName(u"euEnablerPageContent") self.euEnablerPageContent.setObjectName(u"euEnablerPageContent")
self.euEnablerPageContent.setEnabled(False) self.euEnablerPageContent.setEnabled(False)
@@ -1378,6 +1382,45 @@ class Ui_Nugget(object):
self.verticalLayout_16.addWidget(self.regionCodeTxt) self.verticalLayout_16.addWidget(self.regionCodeTxt)
self.line_16 = QFrame(self.euEnablerPageContent)
self.line_16.setObjectName(u"line_16")
self.line_16.setEnabled(False)
self.line_16.setStyleSheet(u"QFrame {\n"
" color: #414141;\n"
"}")
self.line_16.setFrameShadow(QFrame.Plain)
self.line_16.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_16.addWidget(self.line_16)
self.enableAIChk = QCheckBox(self.euEnablerPageContent)
self.enableAIChk.setObjectName(u"enableAIChk")
self.verticalLayout_16.addWidget(self.enableAIChk)
self.languageLbl = QLabel(self.euEnablerPageContent)
self.languageLbl.setObjectName(u"languageLbl")
self.verticalLayout_16.addWidget(self.languageLbl)
self.languageTxt = QLineEdit(self.euEnablerPageContent)
self.languageTxt.setObjectName(u"languageTxt")
self.verticalLayout_16.addWidget(self.languageTxt)
self.aiInfoLabel = QLabel(self.euEnablerPageContent)
self.aiInfoLabel.setObjectName(u"aiInfoLabel")
sizePolicy1.setHeightForWidth(self.aiInfoLabel.sizePolicy().hasHeightForWidth())
self.aiInfoLabel.setSizePolicy(sizePolicy1)
self.aiInfoLabel.setTextFormat(Qt.AutoText)
self.verticalLayout_16.addWidget(self.aiInfoLabel)
self.spoofModelChk = QCheckBox(self.euEnablerPageContent)
self.spoofModelChk.setObjectName(u"spoofModelChk")
self.verticalLayout_16.addWidget(self.spoofModelChk)
self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_16.addItem(self.verticalSpacer_7) self.verticalLayout_16.addItem(self.verticalSpacer_7)
@@ -2475,7 +2518,7 @@ class Ui_Nugget(object):
self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None)) self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None))
self.featureFlagsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.featureFlagsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.euEnablerPageBtn.setText(QCoreApplication.translate("Nugget", u" EU Enabler", None)) self.euEnablerPageBtn.setText(QCoreApplication.translate("Nugget", u" Eligibility", None))
self.euEnablerPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.euEnablerPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
self.springboardOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Springboard Options", None)) self.springboardOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Springboard Options", None))
self.springboardOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.springboardOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
@@ -2541,14 +2584,23 @@ class Ui_Nugget(object):
self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None)) self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None))
self.photosChk.setText(QCoreApplication.translate("Nugget", u"Enable Old Photo UI", None)) self.photosChk.setText(QCoreApplication.translate("Nugget", u"Enable Old Photo UI", None))
self.aiChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence", None)) self.aiChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence", None))
self.setupOptionsLbl.setText(QCoreApplication.translate("Nugget", u"EU Enabler", None)) self.eligibilityLbl.setText(QCoreApplication.translate("Nugget", u"Eligibility Tweaks", None))
self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enabled", None)) self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enable EU Enabler", None))
self.label_5.setText(QCoreApplication.translate("Nugget", u"Method Type", None)) self.label_5.setText(QCoreApplication.translate("Nugget", u"Method Type", None))
self.methodChoiceDrp.setItemText(0, QCoreApplication.translate("Nugget", u"Method 1", None)) self.methodChoiceDrp.setItemText(0, QCoreApplication.translate("Nugget", u"Method 1", None))
self.methodChoiceDrp.setItemText(1, QCoreApplication.translate("Nugget", u"Method 2", None)) self.methodChoiceDrp.setItemText(1, QCoreApplication.translate("Nugget", u"Method 2", None))
self.label_6.setText(QCoreApplication.translate("Nugget", u"Region Code (Should be 2 letters)", None)) self.label_6.setText(QCoreApplication.translate("Nugget", u"Region Code (Should be 2 letters)", None))
self.regionCodeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Region Code (Default: US)", None)) self.regionCodeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Region Code (Default: US)", None))
self.enableAIChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence (for Unsupported Devices)", None))
self.languageLbl.setText(QCoreApplication.translate("Nugget", u"Language Code (not needed for English)", None))
self.languageTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Language Code (i.e. en)", None))
self.aiInfoLabel.setText(QCoreApplication.translate("Nugget", u"In order to download the AI model, you must spoof the device model. This will break Face ID until\n"
"you revert.\n"
"\n"
"Once the model has downloaded, disable \"Spoof Device Model\" and click the \"Apply Tweaks\"\n"
"button on the \"Apply\" page again to fix Face ID.", None))
self.spoofModelChk.setText(QCoreApplication.translate("Nugget", u"Spoof Device Model", None))
self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None)) self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None))
self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None)) self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None))
self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None)) self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None))

View File

@@ -90,3 +90,43 @@ class EligibilityTweak(Tweak):
# return the new files to restore # return the new files to restore
return files_to_restore return files_to_restore
class AITweak(Tweak):
def __init__(self):
super().__init__(label="Enable Apple Intelligence (for Unsupported Devices) (Eligibility)", key=None, value="", min_version=Version("18.1"))
def set_language_code(self, lang: str):
self.value = lang
def apply_tweak(self) -> FileToRestore:
if not self.enabled:
return None
langs = ["en"]
if self.value != "":
langs.append(self.value)
plist = {
"OS_ELIGIBILITY_DOMAIN_CALCIUM": {
"os_eligibility_answer_source_t": 1,
"os_eligibility_answer_t": 2,
"status": {
"OS_ELIGIBILITY_INPUT_CHINA_CELLULAR": 2
}
},
"OS_ELIGIBILITY_DOMAIN_GREYMATTER": {
"context": {
"OS_ELIGIBILITY_CONTEXT_ELIGIBLE_DEVICE_LANGUAGES": langs
},
"os_eligibility_answer_source_t": 1,
"os_eligibility_answer_t": 4,
"status": {
"OS_ELIGIBILITY_INPUT_DEVICE_LANGUAGE": 3,
"OS_ELIGIBILITY_INPUT_DEVICE_REGION_CODE": 3,
"OS_ELIGIBILITY_INPUT_EXTERNAL_BOOT_DRIVE": 3,
"OS_ELIGIBILITY_INPUT_GENERATIVE_MODEL_SYSTEM": 3,
"OS_ELIGIBILITY_INPUT_SHARED_IPAD": 3,
"OS_ELIGIBILITY_INPUT_SIRI_LANGUAGE": 3
}
}
}
return FileToRestore(contents=plistlib.dumps(plist), restore_path="/var/db/eligibilityd/eligibility.plist")

View File

@@ -1,6 +1,6 @@
from devicemanagement.constants import Version from devicemanagement.constants import Version
from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, TweakModifyType, BasicPlistTweak from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, TweakModifyType, BasicPlistTweak
from .eligibility_tweak import EligibilityTweak from .eligibility_tweak import EligibilityTweak, AITweak
from .basic_plist_locations import FileLocation from .basic_plist_locations import FileLocation
@@ -37,6 +37,11 @@ tweaks = {
"PhotoUI": FeatureFlagTweak("Enable Old Photo UI", flag_category='Photos', flag_names=['Lemonade'], is_list=False, inverted=True, min_version=Version("18.0")), "PhotoUI": FeatureFlagTweak("Enable Old Photo UI", flag_category='Photos', flag_names=['Lemonade'], is_list=False, inverted=True, min_version=Version("18.0")),
"AI": FeatureFlagTweak("Enable Apple Intelligence", flag_category='SpringBoard', flag_names=['Domino', 'SuperDomino'], min_version=Version("18.1"), divider_below=True), "AI": FeatureFlagTweak("Enable Apple Intelligence", flag_category='SpringBoard', flag_names=['Domino', 'SuperDomino'], min_version=Version("18.1"), divider_below=True),
## AI Enabler
"AIEligibility": AITweak(),
"AIGestalt": MobileGestaltTweak("Enable Apple Intelligence (for Unsupported Devices) (Gestalt)", "A62OafQ85EJAiiqKn4agtg", min_version=Version("18.1")),
"SpoofModel": MobileGestaltTweak("Spoof Device Model", "h9jDsbgj7xIVeIQ8S3/X3Q", value="iPhone17,3", min_version=Version("18.1"), divider_below=True),
## Springboard Tweaks ## Springboard Tweaks
"LockScreenFootnote": BasicPlistTweak( "LockScreenFootnote": BasicPlistTweak(
"Set Lock Screen Footnote Text", "Set Lock Screen Footnote Text",