Last active
February 18, 2024 03:05
-
-
Save camdenfullmer/b287f634acd089f4b92f to your computer and use it in GitHub Desktop.
Set the wallpaper (lock and/or home screen) on iOS using Apple's private API. Please be aware that including this code in an App Store submission will result in a rejection. This has only been tested on iOS 9.2.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@implementation CMFWallpaper | |
+ (void)setImage:(UIImage *)image { | |
NSAssert([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusAuthorized, @"access to photos is needed to set the wallpaper"); | |
NSString *path; | |
#if TARGET_OS_SIMULATOR | |
path = @"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibrary.framework"; | |
#else | |
path = @"/System/Library/PrivateFrameworks/PhotoLibrary.framework"; | |
#endif | |
NSBundle *bundle = [NSBundle bundleWithPath:path]; | |
[bundle load]; | |
#pragma clang diagnostic push | |
#pragma clang diagnostic ignored "-Wundeclared-selector" | |
// Instantiate the controller. | |
id class = NSClassFromString(@"PLStaticWallpaperImageViewController"); | |
id controller = [[class alloc] performSelector:@selector(initWithUIImage:) withObject:image]; | |
// Select what wallpaper mode. | |
// 0 - Both lock screen and home screen. | |
// 1 - Home screen only. | |
// 2 - Lock screen only. | |
int wallpaperMode = 0; | |
[controller setValue:@(wallpaperMode) forKey:@"wallpaperMode"]; | |
// Tell the controller to save the data. | |
[controller setValue:@YES forKey:@"saveWallpaperData"]; | |
// Save the photo. | |
[controller performSelector:@selector(_savePhoto) withObject:nil]; | |
#pragma clang diagnostic pop | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm sorry I don't think I can be of anymore assistance. My code is just a proof of concept. Hope you find a way to do what you want to do :)