0

我使用 Apple 推送通知。如您所知,有 2 个区域:开发和生产。

所以我决定创建自动确定区域,我们必须使用哪个区域来创建订阅和发送推送。

Embedded.mobileprovision 对我有帮助。我决定开发条款包含以下几行:

<key>aps-environment</key>
<string>development</string>

和临时和分发 - 这些:

<key>aps-environment</key>
<string>production</string>

所以我写了这段代码:

+(BOOL)isDevelopmentProvision{

    BOOL isDev;

    NSString *profilePath = [[NSBundle mainBundle] pathForResource:@"embedded.mobileprovision" ofType:nil];
    NSString *profileAsString = [NSString stringWithContentsOfFile:profilePath encoding:NSISOLatin1StringEncoding error:NULL];
    NSRange apsenvironmentRange = [profileAsString rangeOfString:@"<key>aps-environment</key>"];

    if(apsenvironmentRange.location != NSNotFound){
        NSRange apstypeRange = [profileAsString rangeOfString:@"</" options:NSCaseInsensitiveSearch
                                                        range:NSMakeRange(apsenvironmentRange.location+apsenvironmentRange.length, 100)];

        isDev = [profileAsString rangeOfString:@"development" options:NSCaseInsensitiveSearch range:NSMakeRange(apsenvironmentRange.location+apsenvironmentRange.length, apstypeRange.location - (apsenvironmentRange.location+apsenvironmentRange.length))].location != NSNotFound;

    }

    return  isDev;
}

所以,它运作良好。但是在我的应用程序提交到商店后 - 我看到isDev总是 TRUE 并且我的应用程序使用开发区进行推送。

怎么了?

4

1 回答 1

0

可能是永远找不到该位置(出于某种原因)?您没有初始化isDev. 作为局部变量,它可能具有不可预测的内容。isDev仅表示FALSE/NO其值恰好为零时。在所有其他情况下,它将代表TRUE/YES. 你应该把它改成

BOOL isDev = NO;
于 2012-11-09T10:00:00.520 回答