2013-12-19 1 views
0

타사 앱의 플러그인 역할을하는 작은 앱을 만들고 있습니다. 작동하려면 타사 앱 (여기에서 '다른 앱')에서 저장된 파일에 액세스해야합니다. 최신 버전에서 다른 응용 프로그램은 ~/Application Support/Test App/Saved Files /에이를 유지합니다.이름에 특정 문구가 포함 된 앱의 전체 경로를 빠르게 찾으십시오.

NSString *savedFiles = [NSHomeDirectory() stringByAppendingPathComponent:@"~/Application Support/Test App/Saved Files"]; 

그러나 나는 또한 이전 버전과 호환되도록하려면, 그들은 응용 프로그램 지원 폴더를 사용하지 마십시오

이이 같은 것을 사용하여 이동하기 쉽습니다. ~/응용 프로그램/테스트 앱은/저장된 파일은/

내가와 동일하게 사용할 수 있습니다 ~/응용 프로그램/테스트 앱/테스트 App.app : 이전 버전 예를 들어, 사용자의 응용 프로그램 폴더에 자신의 폴더에이 구조를 갔다 위의 파일을 저장 위치를 ​​찾을 수 있습니다. 하지만 앱이 항상 여기에 설치되는 것은 아니며 폴더 이름이 다른 언어로 다를 수 있습니다. 이게 문제 야.

  1. 내 응용 프로그램 내 에서 파일 선택하여 파일을 탐색하도록 요청 : 내가 생각

    지금까지, 나는 다음 옵션의 경로를 얻을 생각했다.

  2. "Test App.app"가 어디에 있는지 사용자에게 묻고경로를 "../Saved Files /"를 통해 상대적으로 가져옵니다.
  3. 앱이 시스템을 통해 이전에 실행 한 응용 프로그램의 경로를 가져올 수 있습니까?
  4. 앱에서 스포트라이트를 사용하여 위치를 빨리 찾을 수 있습니까?
  5. 이 작업을 자동으로 안정적으로 신속하게 수행 할 수있는 다른 방법이 있습니까?

1 및 2는 사용자에게 경로를 제공하기 위해 "작업해야"하므로 바람직하지 않습니다. 너 모두 어떻게 생각하니? 다른 방법으로 자동화 할 수 있습니까? 어느 것이 가장 빠릅니까?

+0

그렇다면 응용 프로그램 지원에서 무언가를 가져 오거나 응용 프로그램 번들을 수정하려고합니까? – CodaFi

+0

둘 중 하나도 아닙니다. 나는 앱의 전체 경로를 알기 위해 노력하고 있는데, 그 이름 만 알고있다. 예 : 앱 이름에 "테스트 앱"이 포함 된 것을 알고 있습니다 – Tiago

+0

검색을위한 전체 프레임 워크가 있습니다 - [SearchKit] (https://developer.apple.com/library/mac/documentation/userexperience/conceptual/SearchKitConcepts/searchKit_intro/searchKit_intro)에 대한 내용을 읽어보십시오. .html) 당신이 알고 싶었던 모든 것. – Caleb

답변

2

당신은 LSFindApplicationForInfo 전화와의 번들 식별자 부여 앱의 위치에 대한 LaunchServices을 물어 시도 할 수 있습니다 :

CFURLRef urlRef = NULL; 
LSFindApplicationForInfo(kLSUnknownCreator, (CFStringRef)@"com.example.some-app", NULL, NULL, &urlRef); 
NSLog(@"URL: %@", (__bridge id)urlRef); 

이 번들 식별자 당신이 언급 두 가지 변종 사이의 동일한 것으로 가정합니다. 실제로 이름이 같은 경우 이름 대신 쿼리 할 수 ​​있습니다.

CFURLRef urlRef = NULL; 
LSFindApplicationForInfo(kLSUnknownCreator, NULL, (CFStringRef)@"Test App.app", NULL, &urlRef); 
NSLog(@"URL: %@", (__bridge id)urlRef); 
+0

그것은 훌륭합니다. 식별자가 버전과 언어에서 모두 유일한 것입니다. 그렇지 않으면 변경되지 않은 내용을 기반으로 일부 "앱 이름"일치 유형을 생각해야합니다. 나는 이걸 시험해보고 알려줄거야. 감사! – Tiago

+0

이것은 효과가있는 것 같습니다, 감사합니다!LaunchServices가 번들 식별자를 사용하여 위의 내용을 반환하지 않을 수있는 시나리오가 있는지 알고 있습니까? (존재하지 않는 응용 프로그램 제외) – Tiago

+0

Spotlight에 연결되어 있는지 잘 모르겠습니다. 따라서 볼륨이나 전체 시스템에서 Spotlight를 사용하지 않도록 설정해보십시오. LaunchServices 데이터베이스는'/ System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister' 명령을 사용하여 언제든지 쿼리 할 수 ​​있습니다. –

관련 문제