diff --git a/Frameworks/Preferences.framework/Headers/PSSpecifier.h b/Frameworks/Preferences.framework/Headers/PSSpecifier.h index d19bb3d..67d94f0 100644 --- a/Frameworks/Preferences.framework/Headers/PSSpecifier.h +++ b/Frameworks/Preferences.framework/Headers/PSSpecifier.h @@ -119,6 +119,7 @@ __END_DECLS @interface PSSpecifier : NSObject { @public SEL action; + Class detailControllerClass; } + (instancetype)preferenceSpecifierNamed:(NSString *)identifier target:(id)target set:(SEL)set get:(SEL)get detail:(Class)detail cell:(PSCellType)cellType edit:(Class)edit; @@ -143,4 +144,7 @@ __END_DECLS @property (nonatomic) SEL controllerLoadAction; - (Class)detailControllerClass; +-(SEL)controllerLoadAction; +-(void)performControllerLoadAction; + @end diff --git a/Frameworks/Preferences.framework/Headers/PSViewController.h b/Frameworks/Preferences.framework/Headers/PSViewController.h index 56aea08..62a4b09 100644 --- a/Frameworks/Preferences.framework/Headers/PSViewController.h +++ b/Frameworks/Preferences.framework/Headers/PSViewController.h @@ -1,4 +1,4 @@ -@class PSSpecifier; +@class PSSpecifier, PSRootController; @interface PSViewController : UIViewController @@ -15,7 +15,7 @@ @property (nonatomic, retain) PSSpecifier *specifier; @property (nonatomic, retain) PSViewController *parentController; -@property (nonatomic, retain) PSViewController *rootController; +@property (nonatomic, retain) PSRootController *rootController; - (void)suspend; diff --git a/Makefile b/Makefile index a375b5e..fd6cf83 100644 --- a/Makefile +++ b/Makefile @@ -2,15 +2,17 @@ export TARGET = iphone:clang:13.0:10.0 export ARCHS = armv7 arm64 DEBUG = 1 +DEBUG_EXT = FINALPACKAGE = 1 GO_EASY_ON_ME = 0 LEAN_AND_MEAN = 1 THEOS_PACKAGE_DIR = Releases INSTALL_TARGET_PROCESSES = TweakSettings -PACKAGE_VERSION = $(THEOS_PACKAGE_BASE_VERSION) +PACKAGE_VERSION = $(THEOS_PACKAGE_BASE_VERSION)$(DEBUG_EXT) include $(THEOS)/makefiles/common.mk +LAUNCH_URL = XCODEPROJ_NAME = TweakSettings TweakSettings_XCODEFLAGS = PACKAGE_VERSION='@\"$(THEOS_PACKAGE_BASE_VERSION)\"' TweakSettings_CODESIGN_FLAGS = -SResources/entitlements.plist @@ -23,6 +25,9 @@ include $(THEOS_MAKE_PATH)/aggregate.mk after-stage:: $(ECHO_NOTHING)rm -f $(THEOS_STAGING_DIR)/Applications/TweakSettings.app/Localizable.strings$(ECHO_END) + $(ECHO_NOTHING)/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${THEOS_PACKAGE_BASE_VERSION}" "${THEOS_STAGING_DIR}/Applications/${XCODEPROJ_NAME}.app/Info.plist"$(ECHO_END) + $(ECHO_NOTHING)/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${PACKAGE_VERSION}" "${THEOS_STAGING_DIR}/Applications/${XCODEPROJ_NAME}.app/Info.plist"$(ECHO_END) + @echo "Set bundle version to: ${PACKAGE_VERSION}" after-install:: - install.exec "killall -9 TweakSettings; uicache -p /Applications/TweakSettings.app; uiopen tweaks:" + install.exec "killall -9 ${XCODEPROJ_NAME}; uicache -p /Applications/${XCODEPROJ_NAME}.app; uiopen tweaks:$(LAUNCH_URL)" \ No newline at end of file diff --git a/Releases/com.creaturecoding.tweaksettings_1.0.5_iphoneos-arm.deb b/Releases/com.creaturecoding.tweaksettings_1.0.5_iphoneos-arm.deb new file mode 100644 index 0000000..1e34b19 Binary files /dev/null and b/Releases/com.creaturecoding.tweaksettings_1.0.5_iphoneos-arm.deb differ diff --git a/Resources/entitlements.plist b/Resources/entitlements.plist index 23c7950..240d4e5 100644 --- a/Resources/entitlements.plist +++ b/Resources/entitlements.plist @@ -54,5 +54,9 @@ kTCCServiceFaceID kTCCServiceMediaLibrary + + + com.apple.springboard.opensensitiveurl + diff --git a/TweakSettings-App/TSAppDelegate.h b/TweakSettings-App/TSAppDelegate.h index 3af8577..d8b349b 100644 --- a/TweakSettings-App/TSAppDelegate.h +++ b/TweakSettings-App/TSAppDelegate.h @@ -14,5 +14,6 @@ @property(strong, nonatomic) UIWindow *window; - (void)handleActionForType:(NSString *)actionType withConfirmationSender:(id)sender; +- (void)openApplicationURL:(NSURL *)url; @end diff --git a/TweakSettings-App/TSAppDelegate.m b/TweakSettings-App/TSAppDelegate.m index 0404234..e13f5c7 100644 --- a/TweakSettings-App/TSAppDelegate.m +++ b/TweakSettings-App/TSAppDelegate.m @@ -7,6 +7,8 @@ // #import +#import +#import #import "TSAppDelegate.h" #import "TSRootListController.h" #import "Localizable.h" @@ -19,6 +21,7 @@ @interface TSAppDelegate () @property(nonatomic, strong) PSRootController *rootController; @property(nonatomic, strong) TSRootListController *rootListController; +@property(nonatomic, strong) NSString *launchIdentifier; @end @@ -38,6 +41,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( _rootListController = [TSRootListController new]; _rootController = [[PSRootController alloc] initWithRootViewController:_rootListController]; + _rootListController.rootController = _rootController; + _rootListController.launchIdentifier = _launchIdentifier; self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; self.window.rootViewController = _rootController; @@ -78,10 +83,16 @@ - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } -- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { + + if ([url.scheme isEqualToString:@"tweaks"]) { + + NSString *urlString = url.absoluteString; + + if ([urlString containsString:@"root="]) { + self.launchIdentifier = [urlString substringFromIndex:[urlString rangeOfString:@"root="].location + 5]; + } - if ([url.scheme isEqualToString:@"tweaks:"]) { - [_rootController handleURL:url]; return YES; } @@ -94,6 +105,15 @@ - (void)application:(UIApplication *)application performActionForShortcutItem:(U completionHandler(YES); } +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler { + + if ([userActivity.activityType isEqualToString:CSSearchableItemActionType]) { + self.launchIdentifier = [userActivity.userInfo[CSSearchableItemActivityIdentifier] stringByReplacingOccurrencesOfString:@"tweaks:root=" withString:@""]; + } + + return YES; +} + - (void)handleActionForType:(NSString *)actionType withConfirmationSender:(id)sender { UIAlertController *controller = ActionAlertForType(actionType); @@ -117,4 +137,24 @@ - (void)handleActionForType:(NSString *)actionType withConfirmationSender:(id)se [self.rootController presentViewController:controller animated:YES completion:nil]; } +- (void)setLaunchIdentifier:(NSString *)launchIdentifier { + + _launchIdentifier = [launchIdentifier stringByReplacingOccurrencesOfString:@"tweaks:root=" withString:@""]; + _launchIdentifier = launchIdentifier; + _rootListController.launchIdentifier = launchIdentifier; + + [_rootController popToRootViewControllerAnimated:NO]; + [_rootListController pushToLaunchIdentifier]; +} + +- (void)openApplicationURL:(NSURL *)url { + + void (*SBSOpenSensitiveURLAndUnlock)(NSURL *, BOOL); + if ((SBSOpenSensitiveURLAndUnlock = (void (*)(NSURL *, BOOL)) dlsym(RTLD_DEFAULT, "SBSOpenSensitiveURLAndUnlock"))) { + (*SBSOpenSensitiveURLAndUnlock)(url, YES); + } else if (@available(iOS 10,*)) { + [self openURL:url options:@{} completionHandler:nil]; + } +} + @end diff --git a/TweakSettings-App/TSRootListController.h b/TweakSettings-App/TSRootListController.h index 40295cd..c9211ba 100644 --- a/TweakSettings-App/TSRootListController.h +++ b/TweakSettings-App/TSRootListController.h @@ -10,4 +10,7 @@ @interface TSRootListController : TSSearchableListController +@property (nonatomic, strong) NSString *launchIdentifier; + +- (void)pushToLaunchIdentifier; @end diff --git a/TweakSettings-App/TSRootListController.m b/TweakSettings-App/TSRootListController.m index 9662b59..bcaa891 100644 --- a/TweakSettings-App/TSRootListController.m +++ b/TweakSettings-App/TSRootListController.m @@ -6,12 +6,18 @@ // // +#import +#import #import #import #import "TSRootListController.h" +#import "TSAppDelegate.h" #import "Localizable.h" #import "libprefs.h" -#import "TSAppDelegate.h" + +@interface UIBarButtonItem (iOS14) +- (id)initWithTitle:(NSString *)table menu:(UIMenu *)menu API_AVAILABLE(ios(13.0)); +@end @interface TSRootListController () @@ -36,6 +42,12 @@ - (void)viewDidLoad { self.table.refreshControl = _refreshControl; } +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self pushToLaunchIdentifier]; +} + - (NSMutableArray *)specifiers { if (!_specifiers) { NSMutableArray *specifiers = [self loadTweakSpecifiers].mutableCopy; @@ -58,6 +70,28 @@ - (NSMutableArray *)specifiers { return _specifiers; } +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; + if (!cell.gestureRecognizers.count) { + [cell addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleCellLongPress:)]]; + } + return cell; +} + +- (void)handleCellLongPress:(UILongPressGestureRecognizer *)sender { + + if (sender.state == UIGestureRecognizerStateBegan) { + + CGPoint point = [sender locationInView:self.table]; + NSIndexPath *indexPath = [self.table indexPathForRowAtPoint:point]; + PSSpecifier *specifier = [self specifierAtIndexPath:indexPath]; + NSString *urlString = [NSString stringWithFormat:@"prefs:root=%@", specifier.identifier]; + NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]; + + [(TSAppDelegate *)UIApplication.sharedApplication openApplicationURL:url]; + } +} + - (NSArray *)loadTweakSpecifiers { NSMutableArray *preferenceSpecifiers = [NSMutableArray new]; @@ -92,7 +126,7 @@ - (NSMutableArray *)specifiers { } NSBundle *prefBundle = [NSBundle bundleWithPath:(isBundle ? bundlePath : sourceBundlePath)]; - NSArray *bundleControllers = [listController valueForKey:@"_bundleControllers"]; + NSMutableArray *bundleControllers = [listController valueForKey:@"_bundleControllers"]; void *handle = dlopen("/System/Library/PrivateFrameworks/Preferences.framework/Preferences", RTLD_LAZY); NSArray *(*_SpecifiersFromPlist)(NSDictionary *,PSSpecifier *,id ,NSString *,NSBundle *,NSString **,NSString **,PSListController *,NSMutableArray **) = dlsym(handle, "SpecifiersFromPlist"); @@ -130,13 +164,14 @@ - (NSMutableArray *)specifiers { }; NSArray *preferenceBundlePaths = [NSFileManager.defaultManager subpathsOfDirectoryAtPath:@"/Library/PreferenceLoader/Preferences" error:nil]; + NSMutableArray *searchableItems = [NSMutableArray new]; for (NSString *item in preferenceBundlePaths) { if (![item.pathExtension isEqualToString:@"plist"]) continue; NSString *plistPath = [NSString stringWithFormat:@"/Library/PreferenceLoader/Preferences/%@", item]; - NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:plistPath]; + NSDictionary *plist = DICTIONARY_WITH_PLIST(plistPath); if (!plist[@"entry"]) continue; if (!PREFERENCE_FILTER_PASSES_ENVIRONMENT_CHECKS(plist[@"filter"] ?: plist[@"pl_filter"])) continue; @@ -153,6 +188,23 @@ - (NSMutableArray *)specifiers { if (itemSpecifiers && itemSpecifiers.count) { + for (PSSpecifier *specifier in itemSpecifiers) + { + if (![specifier propertyForKey:PSIconImageKey]) { + [specifier setProperty:[UIImage imageNamed:@"tweak"] forKey:PSIconImageKey]; + } + + CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *) kUTTypeImage]; + attributeSet.title = specifier.name; + attributeSet.contentDescription = [NSString stringWithFormat:@"Tweak Settings \u2192 %@", specifier.name]; + attributeSet.thumbnailData = UIImagePNGRepresentation([specifier propertyForKey:PSIconImageKey]); + attributeSet.keywords = @[@"tweaks", @"packages", @"jailbreak", specifier.name]; + + NSString *uniqueIdentifier = [NSString stringWithFormat:@"%@", specifier.identifier]; + CSSearchableItem *searchItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:uniqueIdentifier domainIdentifier:@"com.creaturecoding.tweaksettings" attributeSet:attributeSet]; + [searchableItems addObject:searchItem]; + } + [preferenceSpecifiers addObjectsFromArray:itemSpecifiers]; } } @@ -163,6 +215,10 @@ - (NSMutableArray *)specifiers { ]; } + [CSSearchableIndex.defaultSearchableIndex deleteAllSearchableItemsWithCompletionHandler:^(NSError *error) { + [CSSearchableIndex.defaultSearchableIndex indexSearchableItems:searchableItems completionHandler:nil]; + }]; + return preferenceSpecifiers; } @@ -176,4 +232,40 @@ - (void)handleActionButtonTapped:(UIBarButtonItem *)sender { [self.navigationController presentViewController:ActionListAlert(sender) animated:YES completion:nil]; } +- (void)pushToLaunchIdentifier { + + if (_launchIdentifier) { + PSSpecifier *specifier = [self specifierForID:_launchIdentifier]; + + if (specifier) { + + [specifier performControllerLoadAction]; + + Class detailClass = [specifier respondsToSelector:@selector(detailControllerClass)] + ? [specifier detailControllerClass] + : [specifier valueForKey:@"detailControllerClass"] + ? : NSClassFromString(@"PLCustomListController"); + + if ([detailClass isSubclassOfClass:PSViewController.class]) { + + id controller = [detailClass alloc]; + controller = ([controller respondsToSelector:@selector(initForContentSize:)]) + ? [controller initForContentSize:UIScreen.mainScreen.bounds.size] + : [controller init]; + + if (controller && [controller isKindOfClass:PSViewController.class]) { + + [controller setRootController:self.rootController]; + [controller setParentController:self]; + [controller setSpecifier:specifier]; + } + + [self.navigationController pushViewController:controller animated:NO]; + } + } + } + + _launchIdentifier = nil; +} + @end diff --git a/TweakSettings-App/TSUtilityActionManager.m b/TweakSettings-App/TSUtilityActionManager.m index 6d9e49d..64ebdae 100644 --- a/TweakSettings-App/TSUtilityActionManager.m +++ b/TweakSettings-App/TSUtilityActionManager.m @@ -128,17 +128,14 @@ int HandleActionForType(NSString *actionType) { [menuActions addObject:[UIAction actionWithTitle:NSLocalizedString(REBOOT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { [((TSAppDelegate *)UIApplication.sharedApplication) handleActionForType:TSActionTypeReboot withConfirmationSender:sender]; }]]; - [menuActions addObject:[UIAction actionWithTitle:NSLocalizedString(USREBOOT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { - [((TSAppDelegate *)UIApplication.sharedApplication) handleActionForType:TSActionTypeUserspaceReboot withConfirmationSender:sender]; - }]]; if (userspace_supported) { - [UIAction actionWithTitle:NSLocalizedString(USREBOOT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { + [menuActions addObject:[UIAction actionWithTitle:NSLocalizedString(USREBOOT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { [((TSAppDelegate *)UIApplication.sharedApplication) handleActionForType:TSActionTypeUserspaceReboot withConfirmationSender:sender]; - }]; + }]]; } - [UIAction actionWithTitle:NSLocalizedString(TWEAKINJECT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { + [menuActions addObject:[UIAction actionWithTitle:NSLocalizedString(TWEAKINJECT_TITLE_KEY, nil) image:nil identifier:nil handler:^(__kindof UIAction *action) { [((TSAppDelegate *)UIApplication.sharedApplication) handleActionForType:TSActionTypeTweakInject withConfirmationSender:sender]; - }]; + }]]; return [UIMenu menuWithTitle:@"" children:menuActions]; } \ No newline at end of file diff --git a/TweakSettings-Utility/main.c b/TweakSettings-Utility/main.c index fdc73bb..6e8afdd 100644 --- a/TweakSettings-Utility/main.c +++ b/TweakSettings-Utility/main.c @@ -6,7 +6,6 @@ #include #include -extern int reboot3(uint64_t arg); int proc_pidpath(pid_t pid, void *buffer, uint32_t buffersize); typedef enum { @@ -55,6 +54,18 @@ void print_usage() { printf("tweaksettings-utility is for use only by TweakSettings\n\n"); } +int status_for_cmd(const char *cmd) { + FILE *proc = popen(cmd, "r"); + + if (!proc) {return EXIT_FAILURE;} + + int size = 1024; + char data[size]; + while (fgets(data, size, proc) != NULL) {} + + return pclose(proc); +} + int main(int argc, char **argv, char **envp) { // check that TweakSettings.app exists @@ -136,13 +147,13 @@ int main(int argc, char **argv, char **envp) { execlp("/usr/bin/uicache", "uicache", NULL); } break; case TSUtilityActionTypeReboot: { - execlp("/usr/bin/reboot", "reboot", NULL); + execlp("/usr/sbin/reboot", "reboot", NULL); } break; case TSUtilityActionTypeLDRestart: { execlp("/usr/bin/ldrestart", "ldrestart", NULL); } break; case TSUtilityActionTypeUSReboot: { - status = reboot3(0x2000000000000000ULL); + status = status_for_cmd("/usr/bin/launchctl reboot userspace"); } break; case TSUtilityActionTypeTweakinject: { diff --git a/TweakSettings.xcodeproj/project.pbxproj b/TweakSettings.xcodeproj/project.pbxproj index d316bf3..d911d6a 100644 --- a/TweakSettings.xcodeproj/project.pbxproj +++ b/TweakSettings.xcodeproj/project.pbxproj @@ -18,6 +18,8 @@ B86FC5D626645DE60011E4AF /* Preferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B871CD462651D3680058F1C2 /* Preferences.framework */; }; B871CDA0265601110058F1C2 /* icon_large.png in Resources */ = {isa = PBXBuildFile; fileRef = B871CD9F265601110058F1C2 /* icon_large.png */; }; B871CDBA26599BFD0058F1C2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B871CDB5265991710058F1C2 /* Localizable.strings */; }; + B8917F68267590B700A9DA57 /* CoreSpotlight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8917F67267590B700A9DA57 /* CoreSpotlight.framework */; }; + B8917F6A2675944E00A9DA57 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8917F692675944E00A9DA57 /* CoreServices.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -48,6 +50,8 @@ B871CD802655F1050058F1C2 /* TS-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TS-Prefix.pch"; sourceTree = ""; }; B871CD9F265601110058F1C2 /* icon_large.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_large.png; sourceTree = ""; }; B871CDB4265991710058F1C2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + B8917F67267590B700A9DA57 /* CoreSpotlight.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreSpotlight.framework; path = System/Library/Frameworks/CoreSpotlight.framework; sourceTree = SDKROOT; }; + B8917F692675944E00A9DA57 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -55,6 +59,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B8917F68267590B700A9DA57 /* CoreSpotlight.framework in Frameworks */, + B8917F6A2675944E00A9DA57 /* CoreServices.framework in Frameworks */, B86FC5D626645DE60011E4AF /* Preferences.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -120,6 +126,8 @@ B86FC5D226645DC50011E4AF /* Frameworks */ = { isa = PBXGroup; children = ( + B8917F692675944E00A9DA57 /* CoreServices.framework */, + B8917F67267590B700A9DA57 /* CoreSpotlight.framework */, ); name = Frameworks; sourceTree = ""; @@ -276,7 +284,7 @@ INFOPLIST_FILE = "$(SRCROOT)/TweakSettings-App/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.0.4; + MARKETING_VERSION = 1.0.5; ONLY_ACTIVE_ARCH = NO; PRODUCT_BUNDLE_IDENTIFIER = com.creaturecoding.tweaksettings; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -360,7 +368,7 @@ INFOPLIST_FILE = "$(SRCROOT)/TweakSettings-App/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.0.4; + MARKETING_VERSION = 1.0.5; PRODUCT_BUNDLE_IDENTIFIER = com.creaturecoding.tweaksettings; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/layout/DEBIAN/control b/layout/DEBIAN/control index cad88df..12c0929 100644 --- a/layout/DEBIAN/control +++ b/layout/DEBIAN/control @@ -1,7 +1,7 @@ Package: com.creaturecoding.tweaksettings Name: TweakSettings Depends: firmware (>= 10.0), preferenceloader | com.creaturecoding.preferred -Version: 1.0.4 +Version: 1.0.5 Priority: optional Architecture: iphoneos-arm Description: Dedicated settings app for tweaks