+++ /dev/null
-/* WinterBoard - Theme Manager for the iPhone
- * Copyright (C) 2008-2014 Jay Freeman (saurik)
-*/
-
-/* GNU Lesser General Public License, Version 3 {{{ */
-/*
- * WinterBoard is free software: you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- *
- * WinterBoard is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with WinterBoard. If not, see <http://www.gnu.org/licenses/>.
-**/
-/* }}} */
-
-#import <Foundation/Foundation.h>
-#import <CoreGraphics/CGGeometry.h>
-#import <UIKit/UIKit.h>
-
-#include <objc/objc-runtime.h>
-
-#import <Preferences/PSRootController.h>
-#import <Preferences/PSViewController.h>
-#import <Preferences/PSListController.h>
-#import <Preferences/PSSpecifier.h>
-
-#include <mach-o/dyld.h>
-
-static NSBundle *wbSettingsBundle;
-static Class $WBSettingsController;
-
-@interface UIApplication (Private)
-- (void) terminateWithSuccess;
-@end
-
-@interface UIDevice (Private)
-- (BOOL) isWildcat;
-@end
-
-@interface PSRootController (Compatibility)
-- (id) _popController; // < 3.2
-- (id) contentView; // < 3.2
-- (id) lastController; // < 3.2
-- (id) topViewController; // >= 3.2
-@end
-
-@interface PSListController (Compatibility)
-- (void) viewWillBecomeVisible:(void *)specifier; // < 3.2
-- (void) viewWillAppear:(BOOL)a; // >= 3.2
-- (void) setSpecifier:(PSSpecifier *)spec; // >= 3.2
-@end
-
-@interface WBRootController : PSRootController {
- PSListController *_rootListController;
-}
-
-@property (readonly) PSListController *rootListController;
-
-- (void) setupRootListForSize:(CGSize)size;
-- (id) topViewController;
-@end
-
-@implementation WBRootController
-
-@synthesize rootListController = _rootListController;
-
-// < 3.2
-- (void) setupRootListForSize:(CGSize)size {
- PSSpecifier *spec([[PSSpecifier alloc] init]);
- [spec setTarget:self];
- spec.name = @"WinterBoard";
-
- _rootListController = [[$WBSettingsController alloc] initForContentSize:size];
- _rootListController.rootController = self;
- _rootListController.parentController = self;
- [_rootListController viewWillBecomeVisible:spec];
-
- [spec release];
-
- [self pushController:_rootListController];
-}
-
-// >= 3.2
-- (void) loadView {
- [super loadView];
- [self pushViewController:[self rootListController] animated:NO];
-}
-
-- (PSListController *) rootListController {
- if(!_rootListController) {
- PSSpecifier *spec([[PSSpecifier alloc] init]);
- [spec setTarget:self];
- spec.name = @"WinterBoard";
- _rootListController = [[$WBSettingsController alloc] initForContentSize:CGSizeZero];
- _rootListController.rootController = self;
- _rootListController.parentController = self;
- [_rootListController setSpecifier:spec];
- [spec release];
- }
- return _rootListController;
-}
-
-- (id) contentView {
- if ([[PSRootController class] instancesRespondToSelector:@selector(contentView)]) {
- return [super contentView];
- } else {
- return [super view];
- }
-}
-
-- (id) topViewController {
- if ([[PSRootController class] instancesRespondToSelector:@selector(topViewController)]) {
- return [super topViewController];
- } else {
- return [super lastController];
- }
-}
-
-- (void) _popController {
- // Pop the last controller = exit the application.
- // The only time the last controller should pop is when the user taps Respring/Cancel.
- // Which only gets displayed if the user has made changes.
- if ([self topViewController] == _rootListController)
- [[UIApplication sharedApplication] terminateWithSuccess];
- [super _popController];
-}
-
-@end
-
-@interface WBApplication : UIApplication {
- WBRootController *_rootController;
-}
-
-@end
-
-@implementation WBApplication
-
-- (void) dealloc {
- [_rootController release];
- [super dealloc];
-}
-
-- (void) applicationWillTerminate:(UIApplication *)application {
- [_rootController.rootListController suspend];
-}
-
-- (void) applicationDidFinishLaunching:(id)unused {
- wbSettingsBundle = [NSBundle bundleWithPath:@"/System/Library/PreferenceBundles/WinterBoardSettings.bundle"];
- [wbSettingsBundle load];
- $WBSettingsController = [wbSettingsBundle principalClass];
-
- CGRect applicationFrame(([UIDevice instancesRespondToSelector:@selector(isWildcat)]
- && [[UIDevice currentDevice] isWildcat]) || objc_getClass("UIStatusBar") != nil
- ? [UIScreen mainScreen].bounds
- : [UIScreen mainScreen].applicationFrame);
- UIWindow *window([[UIWindow alloc] initWithFrame:applicationFrame]);
- _rootController = [[WBRootController alloc] initWithTitle:@"WinterBoard" identifier:[[NSBundle mainBundle] bundleIdentifier]];
- [window addSubview:[_rootController contentView]];
- [window makeKeyAndVisible];
-}
-
-@end
-
-int main(int argc, char *argv[]) {
- NSAutoreleasePool *pool( [[NSAutoreleasePool alloc] init]);
-
- int value = UIApplicationMain(argc, argv, @"WBApplication", @"WBApplication");
-
- [pool release];
- return value;
-}
#include <dlfcn.h>
#include <objc/runtime.h>
-static void *libhide;
-static BOOL (*IsIconHiddenDisplayId)(NSString *);
-static BOOL (*HideIconViaDisplayId)(NSString *);
-static BOOL (*UnHideIconViaDisplayId)(NSString *);
-
-static NSString *WinterBoardDisplayID = @"com.saurik.WinterBoard";
-
extern NSString *PSTableCellKey;
extern "C" UIImage *_UIImageWithName(NSString *);
@implementation WBSettingsController
-+ (void) load {
- libhide = dlopen("/usr/lib/hide.dylib", RTLD_LAZY);
- IsIconHiddenDisplayId = reinterpret_cast<BOOL (*)(NSString *)>(dlsym(libhide, "IsIconHiddenDisplayId"));
- HideIconViaDisplayId = reinterpret_cast<BOOL (*)(NSString *)>(dlsym(libhide, "HideIconViaDisplayId"));
- UnHideIconViaDisplayId = reinterpret_cast<BOOL (*)(NSString *)>(dlsym(libhide, "UnHideIconViaDisplayId"));
-}
-
- (void) _wb$loadSettings {
_plist = [[NSString stringWithFormat:@"%@/Library/Preferences/com.saurik.WinterBoard.plist", NSHomeDirectory()] retain];
_settings = [NSMutableDictionary dictionaryWithContentsOfFile:_plist];
if ([_settings objectForKey:@"SummerBoard"] == nil)
[_settings setObject:[NSNumber numberWithBool:set] forKey:@"SummerBoard"];
-
- if (libhide != NULL)
- [_settings setObject:[NSNumber numberWithBool:IsIconHiddenDisplayId(WinterBoardDisplayID)] forKey:@"IconHidden"];
}
- (id) initForContentSize:(CGSize)size {
if (![data writeToFile:_plist options:NSAtomicWrite error:NULL])
return;
- if (libhide != NULL)
- ([[_settings objectForKey:@"IconHidden"] boolValue] ? HideIconViaDisplayId : UnHideIconViaDisplayId)(WinterBoardDisplayID);
-
unlink("/User/Library/Caches/com.apple.springboard-imagecache-icons");
unlink("/User/Library/Caches/com.apple.springboard-imagecache-icons.plist");
unlink("/User/Library/Caches/com.apple.springboard-imagecache-smallicons");
set -e
rm -rf package
mkdir -p package/DEBIAN
-mkdir -p package/Applications/WinterBoard.app
mkdir -p package/Library/Themes
mkdir -p package/Library/MobileSubstrate/DynamicLibraries
mkdir -p package/Library/PreferenceLoader/Preferences
cp -a Icon-Small7@2x.png package/System/Library/PreferenceBundles/WinterBoardSettings.bundle/icon7@2x.png
cp -a Icon-Small7@3x.png package/System/Library/PreferenceBundles/WinterBoardSettings.bundle/icon7@3x.png
cp -a SearchResultsCheckmarkClear.png WinterBoardSettings package/System/Library/PreferenceBundles/WinterBoardSettings.bundle
-ln -s /Applications/WinterBoard.app/WinterBoard.dylib package/Library/MobileSubstrate/DynamicLibraries
+cp -a WinterBoard.dylib package/Library/MobileSubstrate/DynamicLibraries
cp -a WinterBoard.plist package/Library/MobileSubstrate/DynamicLibraries
cp -a *.theme package/Library/Themes
find package -name .svn | while read -r line; do rm -rf "${line}"; done
cp -a extrainst_ preinst prerm package/DEBIAN
sed -e "s/VERSION/$(./version.sh)/g" control >package/DEBIAN/control
-cp -a Test.sh Default-568h@2x.png Icon-Small.png icon{,-72,@2x}.png icon7{{,@2x}{,~ipad},@3x}.png WinterBoard.dylib WinterBoard Info.plist package/Applications/WinterBoard.app
chown -R 0:0 package
file="winterboard_$(grep ^Version: package/DEBIAN/control | cut -d ' ' -f 2)_iphoneos-arm.deb"; echo "$file"; ln -sf "$file" winterboard.deb
dpkg-deb -Zlzma -b package winterboard.deb