我想在我的 Mac 应用程序中包含一个按钮,按下该按钮将启动用户的默认日历应用程序。最好,我想让日历打开到某个日期。
这是针对 OS X Mountain Lion 的。
有没有通用的方法来做到这一点?
编辑:FWIW,这就是我现在正在做的事情:
- (IBAction)launchCalendarApp:(id)sender
{
[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Calendar.app"];
}
我知道像这样对路径进行硬编码是一个坏主意,这就是我问这个问题的原因。
更新:这就是我最终做的:
- (IBAction)launchCalendarApp:(id)sender
{
NSWorkspace *sharedWorkspace = [NSWorkspace sharedWorkspace];
NSString *iCalPath = [sharedWorkspace absolutePathForAppBundleWithIdentifier:@"com.apple.iCal"];
BOOL didLaunch = [sharedWorkspace launchApplication:iCalPath];
if (didLaunch == NO) {
NSString *message = NSLocalizedString(@"The Calendar application could not be found.", @"Alert box message when we fail to launch the Calendar application");
NSAlert *alert = [NSAlert alertWithMessageText:message defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:@""];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
}
}
听起来在开发出更好的 API 之前,所有可能的方法都是变通方法。我的解决方案类似于杰的建议。我使用捆绑标识符来获取路径,因为我认为它不那么脆弱。即使他们(或用户)决定重命名应用程序,Apple 也不太可能在未来更改捆绑 ID。不幸的是,这种方法不能让我到达一个特定的日期。当我有更多时间时,我将进一步研究其他一些建议(使用 ical:// 等)。
更新 2:NSGod 在下面有一个了不起的答案,如果您的应用程序没有被沙盒化,它还会将日历打开到特定日期。