iOS static Framework crash when animating view

1

I'm encountering a difficult to debug issue with a static library project when attempting to animate a view.
It works fine when debugging (and even when debugging in the release configuration), but throws an error archived as a release:

Exception Type:  EXC_CRASH (SIGSYS)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   TestApp                     0x000d04fc 0x91000 + 259324
1   UIKit                       0x336d777e +[UIView(UIViewAnimationWithBlocks) animateWithDuration:animations:] + 42
2   TestApp                     0x000d04de 0x91000 + 259294
3   TestApp                     0x000d0678 0x91000 + 259704
4   Foundation                  0x355f04f8 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 12
5   CoreFoundation              0x35aae540 ___CFXNotificationPost_block_invoke_0 + 64
6   CoreFoundation              0x35a3a090 _CFXNotificationPost + 1400
7   Foundation                  0x355643e4 -[NSNotificationCenter postNotificationName:object:userInfo:] + 60
8   UIKit                       0x33599112 -[UIInputViewTransition postNotificationsForTransitionStart] + 846
9   UIKit                       0x335988cc -[UIPeripheralHost(UIKitInternal) executeTransition:] + 880
10  UIKit                       0x3351bb8c -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:] + 304
11  UIKit                       0x3351b260 -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:] + 952
12  UIKit                       0x3351ae54 -[UIResponder(UIResponderInputViewAdditions) reloadInputViews] + 160
13  UIKit                       0x3351a990 -[UIResponder becomeFirstResponder] + 452
14  UIKit                       0x336194a0 -[UITextInteractionAssistant setFirstResponderIfNecessary] + 168
15  UIKit                       0x33618d6a -[UITextInteractionAssistant oneFingerTap:] + 1602
16  UIKit                       0x33618630 _UIGestureRecognizerSendActions + 100
17  UIKit                       0x335a8d5e -[UIGestureRecognizer _updateGestureWithEvent:] + 298
18  UIKit                       0x337d9472 ___UIGestureRecognizerUpdate_block_invoke_0541 + 42
19  UIKit                       0x33524f4e _UIGestureRecognizerApplyBlocksToArray + 170
20  UIKit                       0x33523a9c _UIGestureRecognizerUpdate + 892
21  UIKit                       0x335307e2 _UIGestureRecognizerUpdateGesturesFromSendEvent + 22
22  UIKit                       0x33530620 -[UIWindow _sendGesturesForEvent:] + 768
23  UIKit                       0x335301ee -[UIWindow sendEvent:] + 82
24  UIKit                       0x3351668e -[UIApplication sendEvent:] + 350
25  UIKit                       0x33515f34 _UIApplicationHandleEvent + 5820
26  GraphicsServices            0x376d5224 PurpleEventCallback + 876
27  CoreFoundation              0x35ab651c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
28  CoreFoundation              0x35ab64be __CFRunLoopDoSource1 + 134
29  CoreFoundation              0x35ab530c __CFRunLoopRun + 1364
30  CoreFoundation              0x35a3849e CFRunLoopRunSpecific + 294
31  CoreFoundation              0x35a38366 CFRunLoopRunInMode + 98
32  GraphicsServices            0x376d4432 GSEventRunModal + 130
33  UIKit                       0x33544cce UIApplicationMain + 1074

Thread 0 crashed with ARM Thread State:
    r0: 0x0000004e    r1: 0x000d04f8      r2: 0x338fed47      r3: 0x3f523340
    r4: 0x00000000    r5: 0x2fe8da00      r6: 0x00000001      r7: 0x2fe8d9d0
    r8: 0x3f54cad0    r9: 0x00000000     r10: 0x3fd00000     r11: 0x3f523310
    ip: 0x3f497048    sp: 0x2fe8d988      lr: 0x33539a41      pc: 0x000d04fc
  cpsr: 0x60000010

To give some background info:
The static library is part of an 'iOS fake-framework', built using the templates from here:
https://github.com/kstenerud/iOS-Universal-Framework
The framework presents a registration UI as a modal view on top of whatever the client application is doing at the time. It pushes these views using a handle to a UIViewController provided by the client application.

It doesn't do anything special, but here's the animation code:

-(void)keyboardWillShowNotification:(NSNotification *)notification
{
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    dispatch_async(dispatch_get_main_queue(), ^(void) {
        [self animateViewsToState:kUMAnimationStateKeyboardVisible forIdiom:[UIDevice currentDevice].userInterfaceIdiom forDuration:animationDuration];
    });
}

-(void)animateViewsToState:(kUMAnimationState)state forIdiom:(UIUserInterfaceIdiom)idiom forDuration:(double)duration
{
    float fieldOffset;    
    if (idiom == UIUserInterfaceIdiomPhone) {
        if (state == kUMAnimationStateKeyboardVisible) {
            fieldOffset = -KEYBOARD_HEIGHT_IPHONE_PORTRAIT;
        } else {
            fieldOffset = KEYBOARD_HEIGHT_IPHONE_PORTRAIT;
        }
    } else {
        if (state == kUMAnimationStateKeyboardVisible) {
            fieldOffset = -IPAD_FIELD_OFFSET;
        } else {
            fieldOffset = IPAD_FIELD_OFFSET;
        }
    }

    [UIView animateWithDuration:duration animations:^(void) {
        mUserNameField.frame = CGRectOffset(mUserNameField.frame, 0, fieldOffset);
        mUserPasswordField.frame = CGRectOffset(mUserPasswordField.frame, 0, fieldOffset);
    }];
}

Further printf-style debugging shows that it crashes whenever I do anything much with UIKit - specifically, it crashes when I replace -animateViewsToState with:

if (0 == UIUserInterfaceIdiomPhone) {
    NSLog(@"");
}

and

[[[[UIAlertView alloc] initWithTitle:@"test" message:@"123" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];

To me, this sounds like a linker problem, but I don't understand how such problems would only manifest here, and not beforehand.

Any help would be greatly appreciated.

ios
animation
frameworks
static
crash
asked on Stack Overflow Jun 6, 2012 by user1439216 • edited Jun 7, 2012 by user1439216

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0