我正在开发一个小应用程序,它充当第三方应用程序的插件。要使其正常运行,我需要从第三方应用程序(此处的“其他应用程序”)访问已保存的文件。在较新的版本中,另一个应用程序将其保存在〜/ Application Support / Test App / Saved Files /中。
这很容易,使用类似的东西:
NSString *savedFiles = [NSHomeDirectory() stringByAppendingPathComponent:@"~/Application Support/Test App/Saved Files"];
但我也希望它与旧版本兼容,并且它们不使用应用程序支持文件夹。旧版本进入用户应用程序文件夹中的文件夹,例如此结构: 〜/ Applications / Test App / Test App.app 〜/ Applications / Test App / Saved Files /
我可以使用与上面相同的内容来查找保存文件的位置。但是应用程序并不总是安装在这里,或者文件夹名称可能在不同的语言中有所不同。这就是问题所在。
我想到目前为止,我认为以下是获取路径的选项:
1和2不是首选,因为这将要求用户“工作”以给应用程序提供路径。你们都觉得怎么样? 还有其他方法可以实现自动化吗? 哪个会最快?
答案 0 :(得分:2)
您可以尝试向LaunchServices询问应用程序的位置,并给出其LSFindApplicationForInfo调用的包标识符:
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);