5

我们的应用程序崩溃的报告在昨晚开始泛滥。许多升级到 7.0.3 的用户在启动时应用程序崩溃。分析 iTunes 崩溃日志,这是由于应用程序因启动时间过长而被杀死。显然,检查可用应用内购买的调用是导致崩溃的原因。我们从销售中删除了所有应用内购买,现在用户报告该应用正在运行。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

// earlier stuff...
    [self requestProductData]; // ask for in-app purchase localized prices/names
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // process any   pending transactions

// more stuff...
}

- (void) requestProductData
{
    NSMutableSet * prodSet = [[[NSMutableSet alloc] initWithCapacity:10] autorelease];

    StoreItem * curStoreItem;
    for(int j=0; j<[storeArr count]; j++) {
        curStoreItem = [storeArr objectAtIndex:j];
        [prodSet addObject:curStoreItem.productID];
    }


    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:prodSet];
    request.delegate = self;
    [request start];
}

在 didFinishLaunchingWithOptions 中,我们调用请求产品数据。我们需要在另一个线程中执行此操作吗?还有谁有相同的问题吗?

4

1 回答 1

1

我们通过两种方式解决了这个问题,解决即时应用程序崩溃的问题,然后实际解决触发它的编码错误。

iOS 7.0.3 更新增加了对返回应用内产品数据的苹果服务器的调用延迟。由于我们从 didFinishLaunching 发出产品请求调用,我们的应用程序因为启动不够快而被终止。

为了解决实时应用程序崩溃的问题,我们暂时从销售中删除了该应用程序的所有应用程序内购买。同时,我们将产品数据请求移至展示应用内店面之前——正如 maddy 所建议的那样,这是正确的程序化解决方案。

于 2013-11-06T12:08:10.457 回答