2013-10-05 9 views
19

मैं अपने ऐप के उपयोगकर्ता के साथ काम कर रहा हूं जो ऐप लॉन्च करने पर क्रैश का सामना कर रहा है। हमें विश्वास है कि इसे इन-एप खरीद प्रक्रिया के साथ कुछ करना है, लेकिन मैं इस कारण का निदान करने में सक्षम नहीं हूं इसलिए मैंने सोचा कि मैं इसे यहां लाऊंगा (हर दूसरे उपयोगकर्ता के लिए मैंने बात की है, चीजें काम कर रही हैं बस ठीक)।ऐप खरीद (आईएपी) प्रक्रिया में मेरे उपयोगकर्ताओं में से एक के लिए लॉन्च पर ऐप को क्रैश कर रहा है

समस्या के साथ उपयोगकर्ता को वापस, वह कहती है कि जब से वह आईएपी खरीदती है, तो ऐप लॉन्च होने पर दुर्घटनाग्रस्त हो जाता है। और क्रैश के बाद, डिवाइस अक्सर उपयोगकर्ता को अपना उपयोगकर्ता आईडी और पासवर्ड दर्ज करने के लिए संकेत देता है (जैसे कि यह फिर से खरीदारी करने का प्रयास कर रहा है)। हमने ऐप को पुनर्स्थापित करने का प्रयास किया है, आईओएस 7 को अपडेट किया है, ऐप को अपडेट कर रहा है ... कोई भाग्य नहीं।

वह मुझे कुछ क्रैश लॉग भेजने के लिए काफी अच्छा था, जिसे मैंने नीचे कॉपी किया है। किसी भी इनपुट की सराहना की जाएगी!

मैंने आईओएस 6 ट्यूटोरियल में रे वेंडरलिच के आईएपी का पालन किया, यदि इससे मदद मिलती है ... फिर, इस के अलावा कोई अन्य रिपोर्ट नहीं है, जो मुझे आश्चर्यचकित करता है कि खरीद प्रक्रिया के दौरान कुछ ख़राब हो गया है या नहीं।

Incident Identifier: 1E0C36A9-C7EC-48D7-9BB8-D56F6203D62E 
CrashReporter Key: 2ac3185fb0d2c64d11247cccfa4a55af32fd5462 
Hardware Model:  iPhone4,1 
Process:    MetricMe [9322] 
Path:    /var/mobile/Applications/847DC898-FD57-40F5-98F2-6C361DC7DECC/MetricMe.app/MetricMe 
Identifier:   com.anthonydubis.metricme 
Version:    3.0.5 (3.0.5) 
Code Type:   ARM (Native) 
Parent Process:  launchd [1] 

Date/Time:   2013-10-04 13:48:13.129 -0400 
OS Version:   iOS 7.0.2 (11A501) 
Report Version:  104 

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

Last Exception Backtrace: 
0 CoreFoundation     0x2ebf9f4e __exceptionPreprocess + 126 
1 libobjc.A.dylib     0x38fd26aa objc_exception_throw + 34 
2 CoreFoundation     0x2eb37c12 -[__NSSetM addObject:] + 558 
3 MetricMe      0x00069fc4 -[IAPHelper provideContentForRestoredProductIdentifier:] (IAPHelper.m:172) 
4 MetricMe      0x00069ce8 -[IAPHelper restoreTransaction:] (IAPHelper.m:146) 
5 MetricMe      0x00069b14 -[IAPHelper paymentQueue:updatedTransactions:] (IAPHelper.m:124) 
6 StoreKit      0x312fddc8 __NotifyObserverAboutChanges + 80 
7 CoreFoundation     0x2eb2d714 CFArrayApplyFunction + 32 
8 StoreKit      0x312fdd64 -[SKPaymentQueue _notifyObserversAboutChanges:sendUpdatedDownloads:] + 124 
9 StoreKit      0x312fe646 -[SKPaymentQueue _processUpdates:trimUnmatched:sendUpdatedDownloads:] + 1022 
10 StoreKit      0x312fed1c -[SKPaymentQueue _setTransactionsWithReply:] + 124 
11 StoreKit      0x312fd906 __38-[SKPaymentQueue _establishConnection]_block_invoke_2 + 58 
12 libdispatch.dylib    0x394b5d76 _dispatch_call_block_and_release + 6 
13 libdispatch.dylib    0x394b5d62 _dispatch_client_callout + 18 
14 libdispatch.dylib    0x394bc7bc _dispatch_main_queue_callback_4CF$VARIANT$mp + 264 
15 CoreFoundation     0x2ebc481c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4 
16 CoreFoundation     0x2ebc30f0 __CFRunLoopRun + 1296 
17 CoreFoundation     0x2eb2dce2 CFRunLoopRunSpecific + 518 
18 CoreFoundation     0x2eb2dac6 CFRunLoopRunInMode + 102 
19 GraphicsServices    0x3384e27e GSEventRunModal + 134 
20 UIKit       0x313cfa3c UIApplicationMain + 1132 
21 MetricMe      0x00043842 main (main.m:16) 
22 libdyld.dylib     0x394daab2 tlv_initializer + 2 


Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x395911fc __pthread_kill + 8 
1 libsystem_pthread.dylib   0x395faa2e pthread_kill + 54 
2 libsystem_c.dylib    0x39541ff8 abort + 72 
3 libc++abi.dylib     0x38870cd2 abort_message + 70 
4 libc++abi.dylib     0x388896e0 default_terminate_handler() + 248 
5 libobjc.A.dylib     0x38fd291e _objc_terminate() + 190 
6 libc++abi.dylib     0x388871c4 std::__terminate(void (*)()) + 76 
7 libc++abi.dylib     0x38886a18 __cxa_throw + 112 
8 libobjc.A.dylib     0x38fd277e objc_exception_throw + 246 
9 CoreFoundation     0x2eb37c12 -[__NSSetM addObject:] + 558 
10 MetricMe      0x00069fc4 -[IAPHelper provideContentForRestoredProductIdentifier:] (IAPHelper.m:172) 
11 MetricMe      0x00069ce8 -[IAPHelper restoreTransaction:] (IAPHelper.m:146) 
12 MetricMe      0x00069b14 -[IAPHelper paymentQueue:updatedTransactions:] (IAPHelper.m:124) 
13 StoreKit      0x312fddc8 __NotifyObserverAboutChanges + 80 
14 CoreFoundation     0x2eb2d716 CFArrayApplyFunction + 34 
15 StoreKit      0x312fdd64 -[SKPaymentQueue _notifyObserversAboutChanges:sendUpdatedDownloads:] + 124 
16 StoreKit      0x312fe646 -[SKPaymentQueue _processUpdates:trimUnmatched:sendUpdatedDownloads:] + 1022 
17 StoreKit      0x312fed1c -[SKPaymentQueue _setTransactionsWithReply:] + 124 
18 StoreKit      0x312fd906 __38-[SKPaymentQueue _establishConnection]_block_invoke_2 + 58 
19 libdispatch.dylib    0x394b5d78 _dispatch_call_block_and_release + 8 
20 libdispatch.dylib    0x394b5d64 _dispatch_client_callout + 20 
21 libdispatch.dylib    0x394bc7bc _dispatch_main_queue_callback_4CF$VARIANT$mp + 264 
22 CoreFoundation     0x2ebc481c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4 
23 CoreFoundation     0x2ebc30f0 __CFRunLoopRun + 1296 
24 CoreFoundation     0x2eb2dce2 CFRunLoopRunSpecific + 518 
25 CoreFoundation     0x2eb2dac6 CFRunLoopRunInMode + 102 
26 GraphicsServices    0x3384e27e GSEventRunModal + 134 
27 UIKit       0x313cfa3c UIApplicationMain + 1132 
28 MetricMe      0x00043842 main (main.m:16) 
29 libdyld.dylib     0x394daab4 start + 0 

संपादित IAPHelper की लाइन 172 जोड़ने के लिए:

यह एक उत्पाद के दौरान कहा जाता है को बहाल करने और आईएपी की productIdentifier में गुजरता है। दिलचस्प बात यह है कि यह ऐप के लॉन्च पर सही हो रहा है, जो मुझे आश्चर्यचकित करता है कि यह एक परिदृश्य है जहां आईएपी खरीद प्रक्रिया के दौरान इंटरनेट कनेक्शन खो गया था, और अब यह लॉन्च पर इसे पुनर्स्थापित करने की कोशिश कर रहा है।

आईएपीहेल्पर में उत्पाद खरीदने और पुनर्स्थापित करने के लिए कई तरीके हैं (क्रय अधिसूचनाओं के लिए पर्यवेक्षक भी)। ShareInstance को एप्लिकेशनडिडफिनिश लॉन्चिंग में कहा जाता है ताकि वह ऐप्पल से प्राप्तियां प्राप्त करने के लिए तैयार हो। लाइन 172 वह जगह है जहां उत्पाद पहचानकर्ता _purchasedProductIdentifiers में जोड़ा जा रहा है, जो एक एनएसएमयूटेबलसेट उदाहरण चर है। क्या त्रुटि यह इंगित करेगी कि _purchasedProductIdentifiers के साथ कुछ गलत है (एनएसएमयूटेबल सेट को यहां आने से पहले शुरू किया जाना चाहिए) या उत्पाद आईडीडिफायर पास हो गया है? व्यावहारिक रूप से, हमें इस बिंदु तक कभी नहीं जाना चाहिए जब तक कि IAPHelper का साझा इन्स्टेंस नहीं बनाया जाता है, जहां _purchasedProductIdentifiers बनाया जाता है।

- (void)provideContentForRestoredProductIdentifier:(NSString *)productIdentifier 
{ 
    [_purchasedProductIdentifiers addObject:productIdentifier]; 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:productIdentifier]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductRestoredNotification object:productIdentifier userInfo:nil]; 

} 
+0

क्या IAPHelper.m की लाइन 172 कैसा दिखता है? अधिक संदर्भ बेहतर है। –

+0

बस कुछ और विवरण जोड़े गए। – tonyd

+0

@tonyd आपकी समस्या का अंत क्या हुआ? मुझे एक ही समस्या है, और ऐसा लगता है कि यह एक ही स्थान पर है। मैं वास्तव में आपकी प्रतिक्रिया सुनने की सराहना करता हूं! – SAHM

उत्तर

15

हमने हाल ही में हमारे कुछ प्रयोक्ताओं से समान क्रैश रिपोर्ट आने शुरू हो गए, मुद्दा यह है कि productId यहाँ पारित किया जा रहा है जो एक दुर्घटना का कारण होगा b/c यह एक कुंजी के रूप में इस्तेमाल किया जाएगा और 'शून्य', है एक हैश को लाइन के नीचे गणना करने की आवश्यकता होगी।

हालांकि, यह अभी भी हमें स्पष्ट नहीं है कि यह कभी-कभी 'शून्य' क्यों होता है। लेकिन कम से कम इस समस्या से रक्षा करके दुर्घटना से बचा जा सकता है कि उत्पाद कभी-कभी शून्य हो सकता है।

+0

यह समस्या का सही उत्तर है। ProductID शून्य के रूप में आ रहा था, जो एनएसएससेट में जोड़ने के दौरान ऐप को क्रैश कर रहा था। चूंकि ऐप दुर्घटनाग्रस्त हो गया, फिनिश ट्रान्सएक्शन: कभी कॉल नहीं किया जा रहा था, इसलिए जब मैंने एक लेनदेन पर्यवेक्षक जोड़ा, तो यह लगातार शुरू होने पर दुर्घटनाग्रस्त हो गया, जिसने लेनदेन को फिर से आने के लिए प्रेरित किया (अभी भी एक शून्य उत्पाद आईडी के साथ)। – tonyd

+1

फिक्स को एक शून्य उत्पाद आईडी के लिए तैयार किया जाना था। मेरे ऐप के लिए जहां मेरे पास एक आईएपी है, मैं बस अपनी आई-ऐप खरीद के साथ productID को प्रारंभ करता हूं। एक और डेवलपर जिसने कई उत्पाद आईडी हैं, ने कहा कि वह बस फिनिश ट्रांज़ेक्शन कॉल कर रहा था: कुछ भी किए बिना। उपयोगकर्ता तब लेनदेन को पुनर्स्थापित कर सकता है और productID के माध्यम से आ जाएगा। – tonyd

+1

हम उन उपयोगकर्ताओं के लिए कैसे ठीक करते हैं जिनके पास पहले से ही निल उत्पाद पहचानकर्ता है? मेरे पास एक विशेष उपयोगकर्ता है जो हर बार जब मैं एक अपडेट जारी करता हूं तो मुझे 1 सितारा समीक्षा देता है क्योंकि उसका ऐप क्रैश हो रहा है (समझने योग्य) – Eric

9

मैं आज सुबह अपने आईफोन 5 एस और एक ऐप के साथ इस समस्या में भाग गया। ऐप खरीद में प्रदर्शन करने की कोशिश करने पर हाल ही में जोड़े गए क्रेडिट कार्ड पर सुरक्षा कोड को सत्यापित करने की आवश्यकता होने की वजह से समस्या उत्पन्न हुई। इसने ऐप स्टोर में ऐप से बाहर खींच लिया।

मेरा सुरक्षा कोड सत्यापित करने के बाद, मुझे इन-ऐप खरीद को फिर से खरीदने के लिए कहा गया। मैंने ऐसा किया, लेकिन जब से मैं उस समय ऐप में नहीं था, ऐप को अधिसूचित नहीं किया गया था कि मैंने खरीदारी की है। मैंने ऐप पर वापस स्विच किया और ऐप के पुनर्स्थापना खरीद विकल्प का उपयोग किया और जिस पल में मैंने अपना ऐप स्टोर पासवर्ड दर्ज किया, ऐप तब क्रैश हो गया और अनइंस्टॉल होने के बाद भी स्टार्ट अप पर क्रैश हो गया, फोन रीबूट हो गया और ऐप फिर से इंस्टॉल हो गया। मैंने सभी सेटिंग्स को रीसेट करने और अपने ऐप स्टोर आईट्यून्स खाते से साइन आउट करने का भी प्रयास किया। कुछ भी दुर्घटनाओं को रोका नहीं।

मैंने क्रैश स्टैक को देखा और यह स्टैक में स्टोरकिट प्रविष्टियों के समूह के साथ उपरोक्त चिपका हुआ एक जैसा था। दुर्भाग्य से मैंने परमाणु विकल्प लेने से पहले ढेर को बचाया नहीं है (नीचे देखें)। यह आईओएस 7.0.3 के तहत था। ऐसा लगता है कि खरीदारी के माध्यम से चला गया क्योंकि मैंने ऐप को किसी अन्य डिवाइस पर इंस्टॉल किया था और खरीदारी को पुनर्स्थापित किया था और यह काम करता था।

दुर्भाग्य से मुझे यह ठीक करने का एकमात्र तरीका फोन को मिटा देना था और खरीद के प्रयास से पहले किए गए बैकअप से पुनर्स्थापित करना था। सौभाग्य से मेरे लिए मैंने बस ऐसा होने से लगभग 30 मिनट पहले iCloud तक बैक अप लिया था, इसलिए मैंने "सभी सेटिंग्स और डेटा मिटाएं", उसके बाद "iCloud बैकअप से पुनर्स्थापित करें"। उसमें कई घंटे लग गए, लेकिन उसके बाद मैं फिर से खरीद कर सकता था और कहा गया कि मैंने पहले ही खरीदा है और यह काम करता है।

यह किसी ऐसे व्यक्ति की सहायता नहीं करता है जिसके पास हालिया बैकअप नहीं है या इस समस्या में भाग लिया है और तब से डिवाइस का उपयोग जारी रखा है। असल में उस बिंदु पर डिवाइस पर कुछ संग्रहीत किया जाता है जिसे ऐप को हटाकर या "सभी सेटिंग्स रीसेट करें" करके साफ़ नहीं किया जाता है। केवल डिवाइस को पोंछने से इसे ठीक किया जाता है।

मुझे लगता है कि जो कुछ भी संग्रहीत किया जा रहा है, वह "ऐप-खरीदा गया" का हिस्सा है, जो बैक अप हो जाता है, इसलिए ऐसा होने के बाद किए गए किसी भी बैकअप को "दूषित" होने की संभावना है, जब तक कि मैन्युअल रूप से उन्हें ठीक से ठीक करने का कोई तरीका न हो तीसरे पक्ष के कार्यक्रम।

मैं bugreport.apple.com पर इसकी रिपोर्ट करने का सुझाव दूंगा। यदि आप चाहें तो ट्रैक ट्रैक के अलावा आप उन्हें अपना विवरण दे सकते हैं।

+0

यह उत्कृष्ट जानकारी है, और इस मुद्दे के पीछे कारण का वर्णन करने में मदद करता है। धन्यवाद मोरैक। – tonyd

0

मैं इसी तरह के लक्षण था (एप्लिकेशन हर शुरुआत में ही दुर्घटनाग्रस्त हो) और समस्या यह है कि StoreObserver कतार द्वारा बनाए रखा नहीं किया गया था:

StoreObserver *observer = [[StoreObserver alloc] init]; 
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

समाधान पर्यवेक्षक एक उदाहरण चर बनाने के लिए किया गया था।

थ्रेड इस समस्या से निपटने: App crash on [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

संबंधित मुद्दे