다른 plist를 응용 프로그램 번들 코드에 현명하게 복사 할 수 있습니까?
-
16-09-2019 - |
문제
내 질문은 제목에 위에 언급되어 있지만 다시 여기에 쓸 것입니다.
다른 plist를 응용 프로그램 번들 코드에 현명하게 복사 할 수 있습니까 ??
이것은 실제로 나의 이전 질문과 약간 관련이 있습니다.) 프로그래밍 방식으로 사전 속성 목록을 만듭니다
하지만 plist를 쓸 수 있기 때문에 (그리고 내가 뭔가 잘못하고 있는지 테스트) 작성된 파일을 복사 할 수 있는지 궁금합니다.
[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];
내 응용 프로그램 번들에 코드에서 (여기서 읽을 수 있도록
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];
예를 들어 메인 펀들 대신 다른 길에서 직접 내 plist를 읽을 수 있다면 다른 대안이 좋습니다.
해결책
물리적으로, 그렇습니다. 때때로 가능합니다.
아니,하지 마세요 !!
좋아 ... 앱 번들에 물건을 복사하는 것은 나쁘다. 앱 번들은 설정이나 데이터를 유지하는 곳이 아닙니다. 앱 번들을 읽기 위해 생각해야합니다. 여러 가지 이유로이 작업을 수행해야합니다.
- 대부분의 경우 Mac OS X 시스템의 사용자는 때때로 앱에 쓸 수있는 권한이 있습니다. 관리자 계정을 사용하지 않는 어린이 또는 학교에서 실험실 배치에 대해 생각해보십시오.
- 코드 디자인을 무효화합니다. 응용 프로그램에 서명하면 서명이 변경되고 CodesIGN을 중단하여 모든 종류의 이상한 문제가 발생합니다 (앱이 가진 방화벽 권한을 잃어 버리고 앱이 변경되었다고 말하고 키 체인 허가를 다시 요청하는 등). 앞으로 앱을 조작하는 것은 큰 보안 적기이기 때문에 이것은 또한 모든 종류의 경고를 나타낼 수 있습니다.
- iPhone에서는 작동하지 않습니다. 그것은 문제가되지 않을 수도 있지만, 모든 사람이 iPhone 에서이 코드를 사용하려는 경우 앱 번들은 샌드 박스로 Readonly입니다.
이런 종류의 물건을 넣을 수있는 올바른 장소는 응용 프로그램 지원 폴더의 하위 폴더에 있습니다.
다른 팁
당신이하고있는 일을 정확히 알지 못하지만 응용 프로그램에 따라 응용 프로그램 지원 디렉토리를 사용할 수 있습니다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
// Create the directory if it doesn't exist, etc.
} else {
NSLog(@"Fail!");
// ...
}