构建Objective-C命令行应用程序?

时间:2013-12-04 02:47:34

标签: objective-c xcode command-line

我是Objective-C的新手,我有一个基本的应用程序,我在Xcode中修补它只是读取所有日历事件(使用EventKit),然后重新格式化数据并将其转储为json编码的字符串。

我可以在我的iMac(在Xcode中)上运行并正确返回数据,但我的Macbook Air使用相同的日历(通过iCloud同步)不返回任何结果。它还运行并在朋友机器上返回结果(在Xcode中)。如果我构建应用程序并从命令行运行它,即使在它在Xcode中正常工作的机器上也没有结果。

我在这里缺少一些额外的东西吗?这是我目前的代码。有人可以给我一些关于下一步要尝试使用它的指针吗?我只是无法弄清楚它为什么在一台机器而不是另一台机器上工作,以及为什么它在Xcode中工作而不是从命令行工作。

思想?

#import <Foundation/Foundation.h>
#import <EventKit/EKEventStore.h>
#import <EventKit/EKEvent.h>
#import <EventKit/EKCalendarItem.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        EKEventStore *store = [[EKEventStore alloc] init];
        NSCalendar *currCalendar = [NSCalendar currentCalendar];

        NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init];
    oneDayAgoComponents.day = -1;
        NSDate *oneDayAgo = [currCalendar dateByAddingComponents:oneDayAgoComponents
                                                  toDate:[NSDate date]
                                                 options:0];

        NSDateComponents *oneYearFromNowComponents = [[NSDateComponents alloc] init];
    oneYearFromNowComponents.year = 1;
        NSDate *oneYearFromNow = [currCalendar dateByAddingComponents:oneYearFromNowComponents
                                                       toDate:[NSDate date]
                                                      options:0];

        NSPredicate *predicate = [store predicateForEventsWithStartDate:oneDayAgo
                                                            endDate:oneYearFromNow
                                                          calendars:nil];

        NSArray *events = [store eventsMatchingPredicate:predicate];

        int i;
        int eventCount = (int)[events count];
        NSMutableArray *formattedEvents = [[NSMutableArray alloc] init];


        for (i=0; i<eventCount; i++) {
            NSDictionary *dict = @{
                               @"title" : [[events objectAtIndex:i] title],
                               @"starts" : [[[events objectAtIndex:i] startDate] description],
                               @"ends" : [[[events objectAtIndex:i] endDate] description],
        };
            [formattedEvents addObject:dict];
        }


        NSArray *eventArray = [NSArray arrayWithArray:formattedEvents];

        NSData *jsondata = [NSJSONSerialization dataWithJSONObject:eventArray options:NSJSONWritingPrettyPrinted error:nil];
        NSString *jsonString = [[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding];

        printf("%s", [jsonString UTF8String]);

        return 0;

    }

}

1 个答案:

答案 0 :(得分:0)

结束了沙箱问题。我必须去检查EKEAitySventus的EKAuthorizationStatus以确定应用程序是否有权访问这些事件,如果没有,请求它。

奇怪的是,它最初从Xcode中请求访问而我的iMac没有问题,但我的Macbook上没有问题,但是哦,好吧。固定的。