2

我是堆栈溢出的新手。我有一个大问题要发送一个应用程序到苹果。当我在我的 iPhone 5 或模拟器上测试我的应用程序时,一切正常,但苹果拒绝了我的应用程序 2 次,他们告诉我我的应用程序崩溃,然后是闪屏并给我崩溃日志。但是我已经在线阅读了一些教程,但我不明白如何阅读并在崩溃日志中找到问题。你能帮我解决这个问题吗?

这是关于我的应用程序的苹果崩溃日志:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x316a1574 CFArrayGetValueAtIndex + 96
1   CWay                            0x000a065e 0x9c000 + 18014
2   CWay                            0x0009f3d6 0x9c000 + 13270
3   UIKit                           0x33589590 -[UIViewController loadViewIfRequired] + 360
4   UIKit                           0x335de146 -[UIViewController contentScrollView] + 22
5   UIKit                           0x335de08c -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 24
6   UIKit                           0x335ddf70 -[UINavigationController _layoutViewController:] + 28
7   UIKit                           0x335dde94 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 268
8   UIKit                           0x335dd5d4 -[UINavigationController _startTransition:fromViewController:toViewController:] + 60
9   UIKit                           0x335dd4bc -[UINavigationController _startDeferredTransitionIfNeeded:] + 320
10  UIKit                           0x335ae4e4 -[UILayoutContainerView layoutSubviews] + 176
11  UIKit                           0x3356d7fe -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 254
12  QuartzCore                      0x33317d86 -[CALayer layoutSublayers] + 210
13  QuartzCore                      0x33317924 CA::Layer::layout_if_needed(CA::Transaction*) + 456
14  QuartzCore                      0x333467ca -[CALayer layoutIfNeeded] + 138
15  UIKit                           0x336170e4 -[UIViewController window:setupWithInterfaceOrientation:] + 204
16  UIKit                           0x336162d0 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 3616
17  UIKit                           0x336154a2 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 42
18  UIKit                           0x3361542c -[UIWindow _setRotatableViewOrientation:duration:force:] + 64
19  UIKit                           0x3374b304 __57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke_0 + 100
20  UIKit                           0x335d368e -[UIWindow _updateToInterfaceOrientation:duration:force:] + 214
21  UIKit                           0x335d33d0 -[UIWindow setAutorotates:forceUpdateInterfaceOrientation:] + 688
22  UIKit                           0x335d2d36 -[UIViewController _tryBecomeRootViewControllerInWindow:] + 154
23  UIKit                           0x335c9ea6 -[UIWindow addRootViewControllerViewIfPossible] + 366
24  UIKit                           0x335c5ae8 -[UIWindow _setHidden:forced:] + 360
25  UIKit                           0x336071e4 -[UIWindow makeKeyAndVisible] + 56
26  UIKit                           0x335ca83a -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1662
27  UIKit                           0x335c2846 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694
28  UIKit                           0x3356ac34 -[UIApplication handleEvent:withNewEvent:] + 1000
29  UIKit                           0x3356a6c8 -[UIApplication sendEvent:] + 68
30  UIKit                           0x3356a116 _UIApplicationHandleEvent + 6150
31  GraphicsServices                0x3525e5a0 _PurpleEventCallback + 588
32  GraphicsServices                0x3525e1ce PurpleEventCallback + 30
33  CoreFoundation                  0x31737170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
34  CoreFoundation                  0x31737112 __CFRunLoopDoSource1 + 134
35  CoreFoundation                  0x31735f94 __CFRunLoopRun + 1380
36  CoreFoundation                  0x316a8eb8 CFRunLoopRunSpecific + 352
37  CoreFoundation                  0x316a8d44 CFRunLoopRunInMode + 100
38  UIKit                           0x335c1480 -[UIApplication _run] + 664
39  UIKit                           0x335be2fc UIApplicationMain + 1116
40  CWay                            0x0009dfb2 0x9c000 + 8114
41  libdyld.dylib                   0x39a3db1c start + 0

Thread 1 name:  Dispatch queue: com.apple.backboardservices.processassertion
Thread 1:
0   libsystem_kernel.dylib          0x39af4648 kevent64 + 24
1   libdispatch.dylib               0x39a24586 _dispatch_update_kq + 154
2   libdispatch.dylib               0x39a244e4 _dispatch_mgr_wakeup$VARIANT$mp + 40
3   libdispatch.dylib               0x39a21ca0 _dispatch_wakeup$VARIANT$mp + 20
4   libdispatch.dylib               0x39a21c3c _dispatch_queue_push_list_slow2 + 16
5   libdispatch.dylib               0x39a21e8e _dispatch_queue_drain$VARIANT$mp + 78
6   libdispatch.dylib               0x39a21dbc _dispatch_queue_invoke$VARIANT$mp + 36
7   libdispatch.dylib               0x39a2291a _dispatch_root_queue_drain + 182
8   libdispatch.dylib               0x39a22abc _dispatch_worker_thread2 + 80
9   libsystem_c.dylib               0x39a52a0e _pthread_wqthread + 358
10  libsystem_c.dylib               0x39a528a0 start_wqthread + 4

Thread 2 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0   libsystem_kernel.dylib          0x39af4648 kevent64 + 24
1   libdispatch.dylib               0x39a24974 _dispatch_mgr_invoke + 792
2   libdispatch.dylib               0x39a24654 _dispatch_mgr_thread$VARIANT$mp + 32

Thread 3:
0   libsystem_kernel.dylib          0x39b04d98 __workq_kernreturn + 8
1   libsystem_c.dylib               0x39a52cf6 _pthread_workq_return + 14
2   libsystem_c.dylib               0x39a52a12 _pthread_wqthread + 362
3   libsystem_c.dylib               0x39a528a0 start_wqthread + 4

Thread 4 name:  WebThread
Thread 4:
0   libsystem_kernel.dylib          0x39af3eb4 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x39af4048 mach_msg + 36
2   CoreFoundation                  0x31737040 __CFRunLoopServiceMachPort + 124
3   CoreFoundation                  0x31735d9e __CFRunLoopRun + 878
4   CoreFoundation                  0x316a8eb8 CFRunLoopRunSpecific + 352
5   CoreFoundation                  0x316a8d44 CFRunLoopRunInMode + 100
6   WebCore                         0x37698500 RunWebThread(void*) + 440
7   libsystem_c.dylib               0x39a5d30e _pthread_start + 306
8   libsystem_c.dylib               0x39a5d1d4 thread_start + 4

Thread 5 name:  com.apple.coremedia.player.async
Thread 5:
0   libsystem_kernel.dylib          0x39b0408c __psynch_cvwait + 24
1   libsystem_c.dylib               0x39a55d2a _pthread_cond_wait + 642
2   libsystem_c.dylib               0x39a5ff14 pthread_cond_wait + 36
3   CoreMedia                       0x31c8e8ac FigSemaphoreWaitRelative + 256
4   MediaToolbox                    0x32780e56 fpa_AsyncMovieControlThread + 22
5   CoreMedia                       0x31cac890 figThreadMain + 192
6   libsystem_c.dylib               0x39a5d30e _pthread_start + 306
7   libsystem_c.dylib               0x39a5d1d4 thread_start + 4

Thread 6:
0   libsystem_kernel.dylib          0x39b04d98 __workq_kernreturn + 8
1   libsystem_c.dylib               0x39a52cf6 _pthread_workq_return + 14
2   libsystem_c.dylib               0x39a52a12 _pthread_wqthread + 362
3   libsystem_c.dylib               0x39a528a0 start_wqthread + 4

Thread 0 crashed with ARM Thread State (32-bit):
    r0: 0x00000000    r1: 0x00000086      r2: 0x00000002      r3: 0x00000013
    r4: 0x20858240    r5: 0x2fd61e84      r6: 0x00000004      r7: 0x2fd61f2c
    r8: 0x00000000    r9: 0x00000000     r10: 0x1fd5f1c0     r11: 0x1fd6f3c0
    ip: 0x316a1515    sp: 0x2fd61dc0      lr: 0x000a0663      pc: 0x316a1574
  cpsr: 0x60000030

我在委托中的应用程序什么都不做,我没有触摸它,当启动我的应用程序时,如果您需要一些代码告诉我,我只会从地址簿中获取联系人。

更多代码:

if (accessGranted) {




        CFArrayRef sources = (__bridge CFArrayRef)(CFBridgingRelease(ABAddressBookCopyArrayOfAllSources(_addressBook)));

        ABRecordRef source = (__bridge ABRecordRef)(CFBridgingRelease(CFArrayGetValueAtIndex(sources, 0)));

        CFIndex longezza =  ABAddressBookGetPersonCount(_addressBook);
        NSLog(@"%ld", longezza);



        CFArrayRef people = (__bridge CFArrayRef)(CFBridgingRelease(ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(_addressBook, source, kABPersonSortByFirstName)));

        // len = count all contacts
        int len = CFArrayGetCount(people);

        NSLog(@"%d", len);

        for (CFIndex i = 0 ; i <= (len - 1) ; i++) {

            [contactArray removeAllObjects];

            //Get contact's record from _addressBook

            ABRecordRef recordContact = CFArrayGetValueAtIndex(people, i);

            //Get the first name

            NSString *firstName = CFBridgingRelease((ABRecordCopyValue(recordContact, kABPersonFirstNameProperty)));


            //Get the last name
            NSString *lastName = CFBridgingRelease((ABRecordCopyValue(recordContact, kABPersonLastNameProperty)));



            //Create the full name

            NSMutableString *fullName = [[NSMutableString alloc] initWithString:@""];

            if (firstName) [fullName appendFormat:@"%@ ",firstName];
            if (lastName) [fullName appendFormat:@"%@",lastName];


            if (![fullName isEqualToString:@""]) {
                //Add full name into the ContactsArray

                [contactArray addObject:fullName];


                /////Start The Algoritmo for order the phone's number in the array/////

                //Get array with all Phone number's contact

                ABMultiValueRef NumberPhones = ABRecordCopyValue(recordContact, kABPersonPhoneProperty);


                //If the NumberPhones contain something start the cicle for get the number

                if (ABMultiValueGetCount(NumberPhones))
                {

                    //Start the cicle for get the number and the label

                    for (CFIndex x = 0; x < ABMultiValueGetCount(NumberPhones); x++)
                    {

                        //Create array with labels types and names

                        NSArray *labelsTypes = [[NSArray alloc] initWithObjects:@"_$!<Mobile>!$_", @"_$!<Home>!$_", @"iPhone",@"", @"_$!<Work>!$_", @"_$!<Main>!$_", @"_$!<Other>!$_", nil];

                        NSArray *labelsNames = [[NSArray alloc] initWithObjects:@"Mobile", @"Home", @"iPhone",@"", @"Work", @"Main", @"Other", nil];


                        //Get the label from NumberPhones

                        NSString *label = (__bridge NSString *)(ABMultiValueCopyLabelAtIndex(NumberPhones, x));


                        //start the cicle for find the label type

                        for (int y = 0; y < 7; y++)
                        {

                            //if the label type is the same get the info and punt in array

                            if ([label isEqual:[labelsTypes objectAtIndex:y]])
                            {

                                //Get the Number

                                NSString *number = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(NumberPhones, x));

                                //Create Dictionary with label = value, object = value

                                NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:[labelsNames objectAtIndex:y], @"label", number, @"object", nil];

                                //Add dictionary into the ContactArray

                                [contactArray addObject:dic];

                            } //end if
                        } //end for
                    } //end for
                } //end if


                //Release NnumberPhones

                CFRelease(NumberPhones);


                /////Finish the algoritmo for get the number/////

                /////Start the algoritmo for get the Email/////


                //Get array with all email's contact

                ABMultiValueRef emails = ABRecordCopyValue(recordContact, kABPersonEmailProperty);


                //If the NumberPhones contain something start the cicle for get the email

                if (ABMultiValueGetCount(emails))
                {

                    //Start the cicle for get the email

                    for (CFIndex x = 0; x < ABMultiValueGetCount(emails); x++)
                    {

                        NSString *email = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(emails, x));

                        //Create Dictionary with label = value, object = value

                        NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"Email", @"label", email, @"object", nil];

                        //Add dictionary into the ContactArray


                        [contactArray addObject:dic];
                        CFRelease((__bridge CFTypeRef)(email));

                    } //end for
                } //end if


                //Release emails

                CFRelease(emails);

                /////Finish the algoritmo for get the Email/////

                /////Start the algoritmo for get the social network//////


                //Get array with all social's contact

                ABMultiValueRef socials = ABRecordCopyValue(recordContact, kABPersonSocialProfileProperty);


                //If the NumberPhones contain something start the cicle for get the social network

                if (ABMultiValueGetCount(socials))
                {

                    //Start the cicle for get the social network

                    for (CFIndex  x = 0; x < ABMultiValueGetCount(socials); x++)
                    {

                        //Get the dictionare with each social network info

                        NSDictionary *social = (__bridge NSDictionary *)(ABMultiValueCopyValueAtIndex(socials, x));


                        //If the social network is facebook get the info and put into the array

                        /*if ([social[@"service"] isEqual:@"facebook"])
                        {
                            NSString *facebook = social[@"username"];

                            //Create Dictionary with label = value, object = value

                            NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"Facebook", @"label", facebook, @"object", nil];


                            //Add dictionary into the ContactArray

                            [contactArray addObject:dic];

                        } //Else if the social network is Twitter get the info and put into the array
                        else */ if ([social[@"service"] isEqual:@"twitter"])
                        {
                            NSString *twitter = social[@"username"];

                            //Create Dictionary with label = value, object = value

                            NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"Twitter", @"label", twitter, @"object", nil];


                            //Add dictionary into the ContactArray

                            [contactArray addObject:dic];




                        }// end if
                        CFRelease((__bridge CFTypeRef)(social));
                    } //end for
                } //end if


                //release Social

                CFRelease(socials);


                /////Finish the algoritmo for get the social network//////


            } //end if controll full name = @""


    if (contactArray.count) {
        [contactsArray addObject:[contactArray copy]];
    }

        } //end for


    } //end if

    return [contactsArray copy];

在此代码之前,我检查我是否可以访问地址簿。

苹果告诉我的:

2.1

We found that your app crashed on iPad running iOS 6.1.3 and iPhone 5 running iOS 6.1.4, which is not in compliance with the App Store Review Guidelines.

Your app crashed when we launched it.

This occurred when your app was used: 

- On Wi-Fi 
- On cellular network

We have attached detailed crash logs to help troubleshoot this issue. For information on how to symbolicate and read a crash log, please see Tech Note TN2151 Understanding and Analyzing iPhone OS Application Crash Reports.

If you have difficulty reproducing this issue, please try testing the workflow as described in Testing Workflow with Xcode's Archive feature.

For discrete code-level questions, you may wish to consult with Apple Developer Technical Support. Please be sure to prepare any symbolicated crash logs, screenshots, or steps to reproduce the issues for when the DTS engineer follows up.

谢谢

米尔科

4

1 回答 1

2

Read up from the bottom of the thread 0 log. You will see the flow of the method calls through your app. Anything with an underscore _ is an Apple private API call. Public calls you see are loading your window (in the AppDelegate) and then constructing your UIViewController (which is a scroll view of some sort?).

You code is crashing on CFArrayGetValueAtIndex. Most probably you are indexing past the end of an array when your view controller is created.

Can you post code of the root view controller that is created when your app starts?

于 2013-08-17T14:54:06.017 回答