2010-12-18 2 views

답변

33

이것은 모두 쉽게 수행 할 수 있지만 Apple에서는 거부합니다.

com.apple.SpringBoard.plist, 특히 ringtone 키를 변경하여 벨소리를 변경할 수 있습니다.

다음 코드는 맞춤식 벨소리 (iTunes에서 동기화 됨)의 실제 벨소리 제목을 읽는 데 사용할 수 있습니다.

NSString *homePath1 = @"/private/var/mobile/Library/SpringBoard/HomeBackground.jpg"; 
NSString *homePath2 = @"/private/var/mobile/Library/SpringBoard/HomeBackgroundPortrait.jpg"; 
NSString *lockPath1 = @"/private/var/mobile/Library/SpringBoard/LockBackground.jpg"; 
NSString *lockPath2 = @"/private/var/mobile/Library/SpringBoard/LockBackgroundPortrait.jpg"; 

이 예 내 Cydia를 애플 리케이션 중 하나에서 사용되었다 :에서

NSMutableDictionary *custDict = [[NSMutableDictionary alloc] initWithContentsOfFile:@"/private/var/mobile/Media/iTunes_Control/iTunes/Ringtones.plist"]; 
NSMutableDictionary *dictionary = [custDict objectForKey:@"Ringtones"]; 

NSArray *keys = [dictionary allKeys]; 
id key = [keys objectAtIndex:indexPath.row]; 
NSMutableDictionary *customRingtone = [dictionary objectForKey:key]; 
NSString *name = [customRingtone objectForKey:@"Name"]; 
cell.textLabel.text = name; 

배경 화면

은 덮어 쓸 수 있습니다. 정말로 그들에게 더 많은 것이 아니라, 이것들은 당신을 올바른 방향으로 가야합니다.

+2

배경 화면 경로가 더 이상 유효하지 않습니다. – EightyEight

+27

다운 투표가 필요 없습니다. 질문이 정답으로 선택되었을 때 유효했습니다. – WrightsCS

+2

새 경로를 말할 수는 없지만 사과가 새로운 이미지 포매 트를 사용한다고 말할 수 있습니다. 그것의 cpbitmap, 당신이 이미지를 tomsave 원한다면 .png 또는 .jpeg를 .cpbitmap으로 변환해야합니다. –

1

사용 개인 API 만약 당신이 PLStaticWallpaperImageViewController

+1

이것은 iOS 10까지 작동했습니다. – Nate

1

answer by WrightsCS 인해 아이폰 OS의 변화에 ​​어떤 시점에서 작동이 중지 확인할 수 있습니다. 죄송합니다. 문서화되지 않은 기능을 사용하려면이 기능을 사용해야합니다.

이 작업을 수행해야하는 경우 이 아닌 앱 스토어에만 적용되는의 경우이 코드는 iOS 9.3에서 작동합니다. 그것은 미래의 iOS 릴리즈에서 작동을 멈출 수 있습니다. (아래에 의견을하지 참조 : 더 이상 아이폰 OS 10 일)

#import "SBSUIWallpaperPreviewViewController.h" 
#import <dlfcn.h> 

// open the private framework dynamically 
void *handle = dlopen("/System/Library/PrivateFrameworks/SpringBoardUIServices.framework/SpringBoardUIServices", RTLD_NOW); 

UIImage *wallpaper = [UIImage imageNamed: @"background.jpg"]; 

Class sbClass = NSClassFromString(@"SBSUIWallpaperPreviewViewController"); 
// we create a view controller, but don't display it. 
// just use it to load image and set wallpaper 
SBSUIWallpaperPreviewViewController *controller = (SBSUIWallpaperPreviewViewController*)[[sbClass alloc] initWithImage: wallpaper]; 
[controller setWallpaperForLocations: 3]; // 3 -> set both for lock screen and home screen 

dlclose(handle); 

당신은 당신의 프로젝트에 민간 API 헤더를 추가해야합니다. 당신은 보통 작은 검색, for example, here 온라인으로 이들을 찾을 수 있습니다.

위의 예에서 [SBSUIWallpaperPreviewViewController setWallpaperForLocations:]은 3 : 3의 인수로 호출되며 이미지는 잠금 및 홈 스크린 모두에 사용해야 함을 나타냅니다. 1은 화면 잠금 만 나타냅니다. 2는 홈 화면 만 나타냅니다. 내가 동적으로을이 프레임 워크를 열 이유에 대한 설명은


, my related answer here를 참조하십시오.

나는 벨소리에 대한 대답이 없습니다. 이것은 정말로 별개의 질문입니다 : 직장에서 완전히 다른 API.

+1

불행히도 이것은 iOS 10에서는 더 이상 작동하지 않습니다. @Nate는 iOS 10에서 실행되도록하는 방법에 대한 정보가 있습니까? (iOS 10의 경우 코드가 오류로 인해 충돌합니다 : 어설 션 실패 : (0), function SBSUIWallpaperClearVideo, 파일 /BuildRoot/Library/Caches/com.apple.xbs/Sources/SpringBoardUIServices/SpringBoard-3563.15.8.9/SBSUIWallpaperUtilities.m, 줄 143.) 아마도 그들은 몇 가지 똑똑한 주장을 추가했다 ...) –

+0

@ GuntisTreulands, 네, 나는 또한 그것을 알아 차렸다. [iOS 10 헤더] (https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/SpringBoardUIServices.framework/SBSUIWallpaperPreviewViewController.h)를보고 있는데 API가 여전히있는 것처럼 보입니다. . 이제 자격으로 보호받을 수 있습니다. 나는 과거에이 일을하는 다른 방법을 찾았습니다. 그래서 이번 주말에이 일을하기 위해 다른 일을 시도하면서 시간을 보냅니다. – Nate

+0

@ GuntisTreulands, 나는 또한'PLStaticWallpaperImageViewController'에서 비슷한 방법을 사용하려했지만 실패했습니다. iOS가 앱이 샌드 박스 외부로 변경하려고한다는 것을 인식합니다. 또한 [PhotoLibrary] (https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/PhotoLibrary.framework/PLWallpaperImageViewController.h)에 다른 API가 있음을 알았지 만 일부 리버스 엔지니어링을해야합니다. 그것이 취하는 매개 변수가 무엇인지 알아 내려고합니다. 나는 여기서 당신을 계속 업데이트 할 것이다. – Nate

관련 문제