diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7cd5639 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +build/* +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.xcworkspace +!default.xcworkspace +xcuserdata +profile +*.moved-aside +.DS_Store \ No newline at end of file diff --git a/MagicWallpaper/Info.plist b/MagicWallpaper/Info.plist new file mode 100644 index 0000000..fe512fa --- /dev/null +++ b/MagicWallpaper/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + se.kiland.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + SBProceduralWallpaperClassNames + + MagicWallpaper + + NSHumanReadableCopyright + Copyright © 2014 Anton Kiland. All rights reserved. + + diff --git a/MagicWallpaper/MagicWallpaper.h b/MagicWallpaper/MagicWallpaper.h new file mode 100644 index 0000000..04431ab --- /dev/null +++ b/MagicWallpaper/MagicWallpaper.h @@ -0,0 +1,6 @@ +#import +#import + +@interface MagicWallpaper : SBFProceduralWallpaper + +@end diff --git a/MagicWallpaper/MagicWallpaper.m b/MagicWallpaper/MagicWallpaper.m new file mode 100644 index 0000000..b78740f --- /dev/null +++ b/MagicWallpaper/MagicWallpaper.m @@ -0,0 +1,94 @@ +#import "MagicWallpaper.h" + +@interface MagicWallpaper () + +@end + +@implementation MagicWallpaper + +#pragma mark - Wallpaper information + +@synthesize delegate = _delegate; + ++ (NSString *)identifier +{ + return @"MagicWallpaper"; +} + ++ (BOOL)colorChangesSignificantly +{ + return YES; +} + ++ (NSArray *)presetWallpaperOptions +{ + return @[ + @{ @"kSBUIMagicWallpaperThumbnailNameKey": @"magic-wallpaper1", + @"color": @"red" }, + @{ @"kSBUIMagicWallpaperThumbnailNameKey": @"magic-wallpaper2", + @"color": @"green" } + ]; +} + +- (void)setWallpaperOptions:(NSDictionary *)options +{ + UILabel *label = (UILabel *)[self viewWithTag:2]; + if ([options[@"color"] isEqualToString:@"red"]) { + label.textColor = [UIColor redColor]; + } else { + label.textColor = [UIColor greenColor]; + } +} + +- (void)setWallpaperVariant:(int)variant +{ +} + + +#pragma mark - Wallpaper implementation + +- (id)initWithFrame:(CGRect)frame +{ + if (!(self = [super initWithFrame:frame])) + return nil; + + UILabel *label = [[UILabel alloc] initWithFrame:self.bounds]; + label.tag = 1; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + label.text = @"BBQ"; + label.textColor = [UIColor whiteColor]; + label.font = [UIFont boldSystemFontOfSize:50]; + label.textAlignment = NSTextAlignmentCenter; + [self addSubview:label]; + + label = [[UILabel alloc] initWithFrame:self.bounds]; + label.tag = 2; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + label.text = @"BBQ"; + label.textColor = [UIColor redColor]; + label.font = [UIFont boldSystemFontOfSize:50]; + label.textAlignment = NSTextAlignmentCenter; + + UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; + UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; + UIInterpolatingMotionEffect *yAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; + + NSArray *motionEffects = @[ xAxis, yAxis ]; + for (UIInterpolatingMotionEffect *effect in motionEffects) { + effect.maximumRelativeValue = @(100); + effect.minimumRelativeValue = @(-100); + } + + group.motionEffects = motionEffects; + [label addMotionEffect:group]; + + [self addSubview:label]; + + return self; +} + +- (void)setAnimating:(BOOL)animating +{ +} + +@end diff --git a/MagicWallpaper/Prefix.pch b/MagicWallpaper/Prefix.pch new file mode 100644 index 0000000..3fdee9d --- /dev/null +++ b/MagicWallpaper/Prefix.pch @@ -0,0 +1,10 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/MagicWallpaper/magic-wallpaper1@2x.png b/MagicWallpaper/magic-wallpaper1@2x.png new file mode 100644 index 0000000..9488c43 Binary files /dev/null and b/MagicWallpaper/magic-wallpaper1@2x.png differ diff --git a/MagicWallpaper/magic-wallpaper2@2x.png b/MagicWallpaper/magic-wallpaper2@2x.png new file mode 100644 index 0000000..f353a04 Binary files /dev/null and b/MagicWallpaper/magic-wallpaper2@2x.png differ diff --git a/ProceduralWallpaper.xcodeproj/project.pbxproj b/ProceduralWallpaper.xcodeproj/project.pbxproj new file mode 100644 index 0000000..123acf8 --- /dev/null +++ b/ProceduralWallpaper.xcodeproj/project.pbxproj @@ -0,0 +1,311 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 3A171A0E1874D7D400CF8D08 /* MagicWallpaper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */; }; + 3A171A101874D95000CF8D08 /* SpringBoardFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */; }; + 3A171A111874D95700CF8D08 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A1719D51874D75800CF8D08 /* Foundation.framework */; }; + 3A171A131874D95A00CF8D08 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A171A121874D95A00CF8D08 /* UIKit.framework */; }; + 3A171A1F18758E8600CF8D08 /* magic-wallpaper1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */; }; + 3A171A2018758E8600CF8D08 /* magic-wallpaper2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3A1719D51874D75800CF8D08 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 3A1719E31874D75800CF8D08 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 3A1719E61874D75800CF8D08 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MagicWallpaper.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A171A001874D77800CF8D08 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 3A171A041874D77800CF8D08 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3A171A081874D77800CF8D08 /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = ""; }; + 3A171A0C1874D7D400CF8D08 /* MagicWallpaper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MagicWallpaper.h; sourceTree = ""; }; + 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MagicWallpaper.m; sourceTree = ""; }; + 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpringBoardFoundation.framework; path = System/Library/PrivateFrameworks/SpringBoardFoundation.framework; sourceTree = SDKROOT; }; + 3A171A121874D95A00CF8D08 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 3A171A161874DC1D00CF8D08 /* SpriteKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpriteKit.framework; path = System/Library/Frameworks/SpriteKit.framework; sourceTree = SDKROOT; }; + 3A171A1B1874DE9900CF8D08 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; + 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "magic-wallpaper1@2x.png"; sourceTree = ""; }; + 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "magic-wallpaper2@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3A1719FC1874D77800CF8D08 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A131874D95A00CF8D08 /* UIKit.framework in Frameworks */, + 3A171A111874D95700CF8D08 /* Foundation.framework in Frameworks */, + 3A171A101874D95000CF8D08 /* SpringBoardFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3A1719C91874D75800CF8D08 = { + isa = PBXGroup; + children = ( + 3A171A021874D77800CF8D08 /* MagicWallpaper */, + 3A1719D41874D75800CF8D08 /* Frameworks */, + 3A1719D31874D75800CF8D08 /* Products */, + ); + sourceTree = ""; + }; + 3A1719D31874D75800CF8D08 /* Products */ = { + isa = PBXGroup; + children = ( + 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 3A1719D41874D75800CF8D08 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3A171A1B1874DE9900CF8D08 /* CoreMotion.framework */, + 3A171A161874DC1D00CF8D08 /* SpriteKit.framework */, + 3A171A121874D95A00CF8D08 /* UIKit.framework */, + 3A171A0F1874D95000CF8D08 /* SpringBoardFoundation.framework */, + 3A1719D51874D75800CF8D08 /* Foundation.framework */, + 3A1719E31874D75800CF8D08 /* XCTest.framework */, + 3A1719E61874D75800CF8D08 /* UIKit.framework */, + 3A171A001874D77800CF8D08 /* CoreFoundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 3A171A021874D77800CF8D08 /* MagicWallpaper */ = { + isa = PBXGroup; + children = ( + 3A171A0C1874D7D400CF8D08 /* MagicWallpaper.h */, + 3A171A0D1874D7D400CF8D08 /* MagicWallpaper.m */, + 3A171A031874D77800CF8D08 /* Supporting Files */, + ); + path = MagicWallpaper; + sourceTree = ""; + }; + 3A171A031874D77800CF8D08 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 3A171A041874D77800CF8D08 /* Info.plist */, + 3A171A081874D77800CF8D08 /* Prefix.pch */, + 3A171A1D18758E8600CF8D08 /* magic-wallpaper1@2x.png */, + 3A171A1E18758E8600CF8D08 /* magic-wallpaper2@2x.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3A1719FE1874D77800CF8D08 /* MagicWallpaper */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3A171A091874D77800CF8D08 /* Build configuration list for PBXNativeTarget "MagicWallpaper" */; + buildPhases = ( + 3A1719FB1874D77800CF8D08 /* Sources */, + 3A1719FC1874D77800CF8D08 /* Frameworks */, + 3A1719FD1874D77800CF8D08 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagicWallpaper; + productName = MagicWallpaper; + productReference = 3A1719FF1874D77800CF8D08 /* MagicWallpaper.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3A1719CA1874D75800CF8D08 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = Anton; + }; + buildConfigurationList = 3A1719CD1874D75800CF8D08 /* Build configuration list for PBXProject "ProceduralWallpaper" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3A1719C91874D75800CF8D08; + productRefGroup = 3A1719D31874D75800CF8D08 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3A1719FE1874D77800CF8D08 /* MagicWallpaper */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3A1719FD1874D77800CF8D08 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A2018758E8600CF8D08 /* magic-wallpaper2@2x.png in Resources */, + 3A171A1F18758E8600CF8D08 /* magic-wallpaper1@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3A1719FB1874D77800CF8D08 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A171A0E1874D7D400CF8D08 /* MagicWallpaper.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3A1719F31874D75800CF8D08 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 3A1719F41874D75800CF8D08 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3A171A0A1874D77800CF8D08 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MagicWallpaper/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + INFOPLIST_FILE = MagicWallpaper/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 3A171A0B1874D77800CF8D08 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = MagicWallpaper/Prefix.pch; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + ); + INFOPLIST_FILE = MagicWallpaper/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3A1719CD1874D75800CF8D08 /* Build configuration list for PBXProject "ProceduralWallpaper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A1719F31874D75800CF8D08 /* Debug */, + 3A1719F41874D75800CF8D08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3A171A091874D77800CF8D08 /* Build configuration list for PBXNativeTarget "MagicWallpaper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A171A0A1874D77800CF8D08 /* Debug */, + 3A171A0B1874D77800CF8D08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 3A1719CA1874D75800CF8D08 /* Project object */; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d421ba --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +ProceduralWallpaper +=================== + +A procedural wallpaper on iOS 7 consists of an instance conforming to the SBFProceduralWallpaper protocol, and a UIView to be presented on screen (they can be the same). + +The required methods are: + ++ `+identifier` ++ `+colorChangesSignificantly` ++ `+presetWallpaperOptions` ++ `-setWallpaperOptions:` ++ `-setWallpaperVariant:` ++ `-view` (if you subclass SBFProceduralWallpaper, it returns itself for you) ++ `-delegate` and `-setDelegate:` + +All classes available in a bundle are specified in an array with the key `SBProceduralWallpaperClassNames` in the bundle's Info.plist file. + + ++presetWallpaperOptions and -setWallpaperOptions: +-------------------------------------------------- + +`+presetWallpaperOptions` should return an array of dictionaries, each representing one variant of the wallpaper. Each dictionary must, at least, contain an image name for the key `kSBUIMagicWallpaperThumbnailNameKey`. + +`-setWallpaperOptions:` will be called after the procedural wallpaper has been created, and will contain the selected option dictionary from the `+presetWallpaperOptions` array. + + +Compiling and installing +------------------------ + +You need to have the header files for SpringBoardFoundation.framework and a jailbroken iPhone to build and install this wallpaper. The bundle should be copied to /System/Library/ProceduralWallpapers. + +![Screenshot](screenshot.png) \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..5dcea41 Binary files /dev/null and b/screenshot.png differ