2013-05-17 2 views
2

디스크 사용을 추적하는 응용 프로그램을 작성하고 있습니다. 이를 위해 사용자가 드라이브를 선택하게합니다 (/ volume로 시작하는 URL로 표시됨). 코어 데이터를 사용하여 정보를 저장합니다. 이제 샌드 박싱을 구현하고 싶습니다. 진행 방법을 정확히 알지 못합니다. 나에게이 경로에 대한 액세스 권한을 부여하는 즉시 사용할 수있는 권한이 없습니다. 내가 이해에서, 나는 ...샌드 박스 및 보안 범위가 설정된 책갈피

  • 사용자가이 선택한 경로를 유지하기 위해서는 응용 프로그램 디렉토리
  • 외부에서 해당 파일에 액세스 할 수 있습니다 특정 경로 (드라이브)를 선택할 수 있도록해야 할 것 앱 실행 전반에 걸쳐 보안 범위가 지정된 북마크를 만들어야합니다.
  • 코어 데이터 개체 (이진 유형)의 NSData로 저장할 수 있다고 생각합니다.
  • 앱이 시작되면 해당 보안 범위의 책갈피를 다시 "확인"하여 액세스 권한을 다시 얻습니다.

의미가 있습니까? 내가 여기서 뭔가를 놓치고 있니? 제공 할 수있는 팁이나 힌트가 있습니까?

답변

2

개요가 정확합니다.

사용자가 드라이브를 선택하게하려면/Volumes에서 시작하는 NSOpenPanel을 생성하면됩니다. 델리게이트를 사용하면 해당 디렉토리 내의 항목 만 선택할 수 있으므로 사용자가 다른 곳으로 이동하더라도 다른 항목을 선택할 수 없습니다. 대화 상자의 다양한 메시지를 사용자 정의하여 "볼륨 선택"대화 상자가됩니다.

또는/Volumes 자체에 NSOpenPanel을 두어 사용자가 해당 디렉토리에 대한 액세스 권한을 부여하도록 할 수 있습니다. 한 번 해본 다음 북마크를 저장하면 사용자는 성가신 열린 대화 상자를 많이 사용해서는 안됩니다./Volumes에 액세스하면 필요한 경우 응용 프로그램에서 볼륨의 하위 집합을 선택할 수 있습니다.

경고 : 전체 디렉토리에 액세스 할 수 있지만 앱 스토어에 앱을 넣으려면 Apple이 사용자에게 너무 많은 것을 요구하는 것으로 보일 수 있습니다. 디렉토리에 대한 읽기 전용 액세스로 시작하고 개별 디스크를 선택하기 위해 다시 시작할 수 있습니다.

북마크를 plist (컨테이너 내) 또는 사용자 기본값에 저장할 수도 있습니다. 북마크를 코어 데이터보다 더 잘 사용할지 결정해야합니다.

HTH

+0

나는 그들이 USB 저장 장치처럼 행동하고 애플이 때문에 그것을 거부 이제 한 특정 장치 인 경우에 결정하기 위해 새로 마운트 된 볼륨을 스캔 응용 프로그램을 가지고 오버 광범위한은'/ Volumes'에 의한 권한 읽기 - 오직 특권. 디스크 스캐너를 사용하는 것이 더 나았을지 모르지만, 사용자가 개입해야하는 코드 조각을 다시 작성해야했습니다. – gaige

+0

재미있는 것은 : 오류없이 나중에 [driveURL getResourceValue : & driveAttribute forKey : NSURLVolumeLocalizedNameKey 오류 난 어떤 파일 시스템 관련 자격 부여하지 않고, 난 아직도 드라이브 = [: NULL 옵션 NSVolumeEnumerationSkipHiddenVolumes의 FM mountedVolumeURLsIncludingResourceValuesForKeys]를 호출 할 수 있음을 발견 : 무]. 기본적으로 보안 스코프 북마크를 사용하지 않고 코드를 그대로 유지할 수 있습니다! –