Macos Mavericks,沙盒,但使用EKEventStore和calendar访问将目标部署到10.8及以上版本

Macos Mavericks,沙盒,但使用EKEventStore和calendar访问将目标部署到10.8及以上版本,macos,calendar,appstore-sandbox,ekeventstore,osx-mavericks,Macos,Calendar,Appstore Sandbox,Ekeventstore,Osx Mavericks,我在下面编写了这段代码,只是为了让它编译,但这不起作用,因为我需要有一个10.8的部署目标 我需要访问EKEventStore,因此当有人下载此应用程序时,它在10.8中运行正常,但在10.9中下载的人会出错,因为该应用程序没有日历的隐私权限。由于它是为10.8编译的,因此它无法访问requestAccessToEntityType:EkenityTypeEvent.方法 一个人怎么做呢 请注意,如何编译10.9的代码和10.8的其他代码,并根据所处的环境调用这些不同的部分?记住这是针对Mac

我在下面编写了这段代码,只是为了让它编译,但这不起作用,因为我需要有一个10.8的部署目标

我需要访问EKEventStore,因此当有人下载此应用程序时,它在10.8中运行正常,但在10.9中下载的人会出错,因为该应用程序没有日历的隐私权限。由于它是为10.8编译的,因此它无法访问requestAccessToEntityType:EkenityTypeEvent.方法

一个人怎么做呢

请注意,如何编译10.9的代码和10.8的其他代码,并根据所处的环境调用这些不同的部分?记住这是针对Mac App Store的,如果这是一条路,请举例说明,就好像你在和一个不知道如何开始这样做的人交谈,因为我不知道。。 谢谢


要请求对OS X的访问,请使用:

EKEventStore *eventStore = nil;
if ([EKEventStore respondsToSelector:@selector(authorizationStatusForEntityType:)]) {
    // 10.9 style
    eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
    {
        // your completion
    }];
} else {
    // 10.8 style
    eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent ];
}

要请求对OS X的访问,请使用:

EKEventStore *eventStore = nil;
if ([EKEventStore respondsToSelector:@selector(authorizationStatusForEntityType:)]) {
    // 10.9 style
    eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
    {
        // your completion
    }];
} else {
    // 10.8 style
    eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent ];
}

要使应用程序在多个操作系统版本上运行,请执行以下操作:

  • 将基本SDK设置为您支持的操作系统的最新版本(如10.9)
  • 将部署目标设置为希望在其上启动代码的最早操作系统
  • 对于早期版本的操作系统中不存在的所有调用,必须在调用之前进行测试,可以使用respondsToSelector:(对于方法)或针对nil(对于函数和静态)进行测试。如果您愿意,可以检查操作系统版本,但检查特定调用更可靠
另见: 及

要使应用程序在多个操作系统版本上运行,请执行以下操作:

  • 将基本SDK设置为您支持的操作系统的最新版本(如10.9)
  • 将部署目标设置为希望在其上启动代码的最早操作系统
  • 对于早期版本的操作系统中不存在的所有调用,必须在调用之前进行测试,可以使用respondsToSelector:(对于方法)或针对nil(对于函数和静态)进行测试。如果您愿意,可以检查操作系统版本,但检查特定调用更可靠
另见: 及

hmmm,我以前就有过,当我来回切换到10.8的baseSDK时,它不会编译并显示错误。EKEventStore等没有可见的接口。。。我显然错误地认为,如果我使用10.9的baseSDK,并且应用程序运行在10.8中,它也会看到类似的崩溃或错误。但是我知道现在发生了什么,谢谢。嗯,我以前有过,当我来回切换到10.8的baseSDK时,它不会编译并显示错误。EKEventStore等没有可见的接口。。。我显然错误地认为,如果我使用10.9的baseSDK,并且应用程序运行在10.8中,它也会看到类似的崩溃或错误。但我明白了,谢谢。这就是我现在所拥有的。。。它是在Mac app store上,但是在10.9环境中,此呼叫不会引发“请求访问”。。。所以应用程序只会产生错误。所以这不能同时用于10.8和10.9中;我相信你下面的答案是正确的。如果我假设它正确地处理了--If-responses语句。。。当它在应用商店中更新时,我会找到它。我实际上是这样设置的,但我错误地认为,因为我来回切换到10.8和10.9 baseSDK,它会在10.8上产生错误,我知道现在发生了什么。所以我很高兴我有效地问了两个问题,因为这不会给我正确的方向,下面的答案澄清了我的迷雾。谢谢。我刚刚更新了代码,向您展示了如何检查respondsToSelector的示例。希望它能帮上忙。就在很久以后,我不确定你会看到它,但是谢谢你!刚刚救了我的命,这就是我现在所拥有的。。。它是在Mac app store上,但是在10.9环境中,此呼叫不会引发“请求访问”。。。所以应用程序只会产生错误。所以这不能同时用于10.8和10.9中;我相信你下面的答案是正确的。如果我假设它正确地处理了--If-responses语句。。。当它在应用商店中更新时,我会找到它。我实际上是这样设置的,但我错误地认为,因为我来回切换到10.8和10.9 baseSDK,它会在10.8上产生错误,我知道现在发生了什么。所以我很高兴我有效地问了两个问题,因为这不会给我正确的方向,下面的答案澄清了我的迷雾。谢谢。我刚刚更新了代码,向您展示了如何检查respondsToSelector的示例。希望它能帮上忙。就在很久以后,我不确定你会看到它,但是谢谢你!刚刚救了我一命。