in-App-Purchase-Binary由于iOS7中的应用程序崩溃而被拒绝

时间:2013-11-26 09:24:50

标签: iphone objective-c xcode5

我已经在appstore.its上上传应用程序在io6上工作正常但是当我上传到苹果商店时它因iOS7中的应用程序崩溃而被拒绝。当我在xcode 4.5上运行它时工作正常并且我得到了购买alertview消息但是我无法在xcode5和ios7上获取它。这是我的源代码。

- (IBAction)buy {
          activityIndicator.hidden = NO;

          SKMutablePayment *payment = [[[SKMutablePayment alloc] init] autorelease];
         payment.productIdentifier = @"com.test.app.V3";
         [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
        [[SKPaymentQueue defaultQueue] addPayment:payment];

        if ([SKPaymentQueue canMakePayments]) {
            NSLog(@"Parental-controls are disabled");

            SKProductsRequest *productsRequest = [[SKProductsRequest alloc]           initWithProductIdentifiers:[NSSet setWithObject:@"com.test.app.V3"]];
            productsRequest.delegate = self;
            [productsRequest start];
        }
        else {
            NSLog(@"Parental-controls are enabled");
        }
    }

    - (void)viewDidLoad {
        [super viewDidLoad];
    }

    -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
        SKProduct *validProduct = nil;
        int count = [response.products count];
        if (count > 0) {
            validProduct = [response.products objectAtIndex:0];

        }
        else if (!validProduct) {
            NSLog(@"No Products Available");
        }
    }

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
        for (SKPaymentTransaction *transaction in transactions) {
            switch (transaction.transactionState) {

                case SKPaymentTransactionStatePurchasing:
                    //// Stuff Here ////

                    break;

                case SKPaymentTransactionStatePurchased:

                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    //// Stuff Here ////

                    activityIndicator.hidden = YES;

                    int coins1 = [money.text intValue];
                    coins1 += 1500;
                    money.text = [NSString stringWithFormat:@"%d.00", coins1];

                    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasBalance"];
                    [[NSUserDefaults standardUserDefaults] setObject:money.text forKey:@"Balance"];

                    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ThankYou"];

                    [self exitIAP];

                    break;

                case SKPaymentTransactionStateRestored:
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    break;

                case SKPaymentTransactionStateFailed:
                    if (transaction.error.code != SKErrorPaymentCancelled) {
                        NSLog(@"An Error Encountered");
                    }
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    //// Stuff Here ////

                    activityIndicator.hidden = YES;
                    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"StopThankYou"];

                    [self exitIAP];

                    break;
            }
        }
           }

      - (void)exitIAP {
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
      }
  appreciate for any kind of help.
  thanks in advance

   crash report 
   Exception Type:  EXC_CRASH (SIGABRT)
   Exception Codes: 0x0000000000000000, 0x0000000000000000
  Triggered by Thread:  0

 Last Exception Backtrace:

   Thread 0 name:  Dispatch queue: com.apple.main-thread
   Thread 0 Crashed:
   0   libsystem_kernel.dylib           0x3a13d1fc __pthread_kill + 8
   libsystem_pthread.dylib          0x3a1a6a2e pthread_kill + 54
   2   libsystem_c.dylib                0x3a0edff8 abort + 72
   3   libc++abi.dylib                  0x3941ccd2 abort_message + 70
   4   libc++abi.dylib                  0x394356e0 default_terminate_handler() + 248
   5   libobjc.A.dylib                  0x39b7e91e _objc_terminate() + 190
   6   libc++abi.dylib                  0x394331c4 std::__terminate(void (*)()) +  
    7   libc++abi.dylib                 0x39432a18 __cxa_throw + 112
   8   libobjc.A.dylib                  0x39b7e77e objc_exception_throw + 246
   9   CoreFoundation                   0x2f30b8e2 -[NSObject(NSObject)               
   10  CoreFoundation                   0x2f30a1c6 ___forwarding___ + 702
   11  CoreFoundation                   0x2f2594d4 _CF_forwarding_prep_0 + 20
   12  DubstepSlots                     0x0017cdce 0x90000 + 970190
   13  StoreKit                         0x31a0cdc8 __NotifyObserverAboutChanges     
   14  CoreFoundation                   0x2f23b656 CFArrayApplyFunction + 34
   15  StoreKit                         0x31a0cd64 -[SKPaymentQueue     _no     
  16  StoreKit                          0x31a0d646 -[SKPaymentQueue   
 17  StoreKit                       0x31a0dd1c -[SKPaymentQueue 
  18  StoreKit                          0x31a0d80a __45-[SKPaymentQueue   
  19  libdispatch.dylib                 0x3a061d18   
   20  libdispatch.dylib                0x3a061d04 _dispatch_client_callout + 20

  22  CoreFoundation                    0x2f2d2814 
    23  CoreFoundation                  0x2f2d10e8 __CFRunLoopRun + 1296
   24  CoreFoundation                   0x2f23bc22 CFRunLoopRunSpecific + 518
  25  CoreFoundation                    0x2f23ba06 CFRunLoopRunInMode + 102
  26  GraphicsServices                  0x33f3c27e GSEventRunModal + 134
    27  UIKit                           0x31adf044 UIApplicationMain + 1132
   28  DubstepSlots                     0x000a2aaa 0x90000 + 76458
  29  DubstepSlots                      0x00092674 0x90000 + 9844

    Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
    Thread 1:
   0   libsystem_kernel.dylib           0x3a12a83c kevent64 + 24
   1   libdispatch.dylib                0x3a06b210 _dispatch_mgr_invoke + 228
   2   libdispatch.dylib                0x3a06af96         

 Thread 2:
0   libsystem_kernel.dylib          0x3a13dc7c __workq_kernreturn + 8
  1   libsystem_pthread.dylib           0x3a1a3dc6 _pthread_wqthread + 306
  2   libsystem_pthread.dylib           0x3a1a3c80 start_wqthread + 4

  Thread 3 name:  WebThread
   Thread 3:
 0   libsystem_kernel.dylib         0x3a12aa8c mach_msg_trap + 20
   1   libsystem_kernel.dylib           0x3a12a888 mach_msg + 44
  2   CoreFoundation                    0x2f2d27be __CFRunLoopServiceMachPort +       
  3   CoreFoundation                    0x2f2d0ee4 __CFRunLoopRun + 780
  4   CoreFoundation                    0x2f23bc22 CFRunLoopRunSpecific + 518
 5   CoreFoundation                 0x2f23ba06 CFRunLoopRunInMode + 102
  6   WebCore                           0x3742b266 RunWebThread(void*) + 414
  7   libsystem_pthread.dylib           0x3a1a5c1a _pthread_body + 138
  8   libsystem_pthread.dylib           0x3a1a5b8a _pthread_start + 98
  9   libsystem_pthread.dylib           0x3a1a3c8c thread_start + 4

 Thread 4 name:  Dispatch queue: com.apple.root.low-priority
Thread 4:
 0   libsystem_kernel.dylib         0x3a12aadc semaphore_wait_trap + 8
 1   libdispatch.dylib              0x3a069428 _dispatch_semaphore_wait_slow + 172
 2   CFNetwork                      0x2eecc6e0 CFURLConnectionSendSynchronousRequest  + 264
  3   Foundation                        0x2fc947ae +[NSURLConnection  
4   Foundation                      0x2fc648c6 -[NSData(NSData)      
5   Foundation                      0x2fc647f6 +[NSData(NSData)   
6   DubstepSlots                    0x000f5ea0 0x90000 + 417440
7   DubstepSlots                    0x000f5d4e 0x90000 + 417102
 8   libdispatch.dylib              0x3a061d18 _dispatch_call_block_and_release + 8
 9   libdispatch.dylib              0x3a068d6c _dispatch_root_queue_drain + 216
10  libdispatch.dylib               0x3a068f54 _dispatch_worker_thread2 + 52

11 libsystem_pthread.dylib 0x3a1a3dbc _pthread_wqthread + 296     12 libsystem_pthread.dylib 0x3a1a3c80 start_wqthread + 4

1 个答案:

答案 0 :(得分:0)

正如rckeones所说,如果没有象征性的崩溃报告,很难追踪到这一点,但鉴于我们掌握的信息,这些线条引起了我的兴趣:

12  DubstepSlots                     0x0017cdce 0x90000 + 970190
13  StoreKit                         0x31a0cdc8 __NotifyObserverAboutChanges     
14  CoreFoundation                   0x2f23b656 CFArrayApplyFunction + 34
15  StoreKit                         0x31a0cd64 -[SKPaymentQueue     _no  

对我来说,SKPaymentQueue正在呼叫它的观察者(一个是你的DubstepSlots项目中的东西),它正在崩溃。

查看代码,您将以观察者身份添加此类:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

该方法具有签名

- (void)addTransactionObserver:(id<SKPaymentTransactionObserver>)observer

这意味着您的self对象必须符合SKPaymentTransactionObserver协议。幸运的是,您的代码中包含所需的方法- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;。我很确定这是崩溃的方法。但是如果你在这个方法的开头设置一个断点并逐步完成,我相信你会发现什么是错的。

我不确定,但它似乎是行

8   libobjc.A.dylib                  0x39b7e77e objc_exception_throw + 246
9   CoreFoundation                   0x2f30b8e2 -[NSObject(NSObject)   

表示您可能正在调用该方法中对象上不存在的方法。

如果没有象征性的报告,很难判断到底出了什么问题(我们甚至不知道它崩溃了什么线!)至少应该让你开始找到出错的地方。