2012-11-30 3 views
4

방금 ​​xcode 4.5.2, cordova-2.2.0을 사용하여 새로운 iPhone 응용 프로그램을 출시했습니다. 테스트하는 동안 모든 것이 잘 작동했습니다. 그러나 오늘 출시 이후 즉시 충돌합니다. 시작 화면이 1 초 동안 깜박이고 충돌이 발생합니다. -iPhone 5 IOS (6.0.1) -iPhone 4S IOS (6.0.1) -iPhone 4 IOS (6.0.1)ios 앱이 테스트 중에 작동하지만 출시 후 충돌

BUT :와

충돌! 다음 기기와 작동 : -iPhone 4 (iOs 5.0)?!?

xcode에서 시작할 때 작동하므로이 오류를 재현 할 수 없습니까?

이것은 오류 로그의 조각입니다. 자세한 내용이 필요합니까?

감사합니다.

Last Exception Backtrace: 
0 CoreFoundation     0x39e0b3e2 __exceptionPreprocess + 158 
1 libobjc.A.dylib     0x38e6495e objc_exception_throw + 26 
2 CoreFoundation     0x39e0ef2c -[NSObject(NSObject) doesNotRecognizeSelector:] + 180 
3 CoreFoundation     0x39e0d648 ___forwarding___ + 388 
4 CoreFoundation     0x39d65204 _CF_forwarding_prep_0 + 20 
5 myapp      0x0003dff4 -[CDVViewController viewDidLoad] + 1352 
6 myapp      0x000114dc -[MainViewController viewDidLoad] (MainViewController.m:62) 
7 UIKit       0x3363a544 -[UIViewController loadViewIfRequired] + 360 
8 UIKit       0x3367ad2c -[UIWindow addRootViewControllerViewIfPossible] + 60 
9 UIKit       0x33676ac8 -[UIWindow _setHidden:forced:] + 360 
10 UIKit       0x336b819c -[UIWindow makeKeyAndVisible] + 56 
11 myapp      0x00011260 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:108) 
12 UIKit       0x3367ba74 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 248 
13 UIKit       0x3367b5f8 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1164 
14 UIKit       0x33673806 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694 
15 UIKit       0x3361bcea -[UIApplication handleEvent:withNewEvent:] + 1006 
16 UIKit       0x3361b778 -[UIApplication sendEvent:] + 68 
17 UIKit       0x3361b1ba _UIApplicationHandleEvent + 6194 
18 GraphicsServices    0x39eaf5f2 _PurpleEventCallback + 586 
19 CoreFoundation     0x39de08f2 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 10 
20 CoreFoundation     0x39de0158 __CFRunLoopDoSources0 + 208 
21 CoreFoundation     0x39ddef2a __CFRunLoopRun + 642 
22 CoreFoundation     0x39d52238 CFRunLoopRunSpecific + 352 
23 CoreFoundation     0x39d520c4 CFRunLoopRunInMode + 100 
24 UIKit       0x33672440 -[UIApplication _run] + 664 
25 UIKit       0x3366f28c UIApplicationMain + 1116 
26 myapp      0x00010e92 main (main.m:32) 
27 myapp      0x00010e44 start + 36 


Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x39b75350 __pthread_kill + 8 
1 libsystem_c.dylib    0x3310dfb2 pthread_kill + 54 
2 libsystem_c.dylib    0x3314a366 abort + 90 
3 libc++abi.dylib     0x33205dda abort_message + 70 
4 libc++abi.dylib     0x33203094 default_terminate() + 20 
5 libobjc.A.dylib     0x38e64a58 _objc_terminate() + 144 
6 libc++abi.dylib     0x33203118 safe_handler_caller(void (*)()) + 76 
7 libc++abi.dylib     0x332031b0 std::terminate() + 16 
8 libc++abi.dylib     0x33204626 __cxa_rethrow + 90 
9 libobjc.A.dylib     0x38e649b0 objc_exception_rethrow + 8 
10 CoreFoundation     0x39d5229c CFRunLoopRunSpecific + 452 
11 CoreFoundation     0x39d520c4 CFRunLoopRunInMode + 100 
12 UIKit       0x33672440 -[UIApplication _run] + 664 
13 UIKit       0x3366f28c UIApplicationMain + 1116 
14 myapp      0x00010e92 main (main.m:32) 
15 myapp      0x00010e44 start + 36 

는 @Antonio 여기 당신이 CDVViewController가 처리 할 수있는 viewDidLoad 내부의 메소드를 호출 할 것으로 보인다 viewDidLoad에

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString* startFilePath = [self pathForResource:self.startPage]; 
    NSURL* appURL = nil; 
    NSString* loadErr = nil; 

    if (startFilePath == nil) { 
     loadErr = [NSString stringWithFormat:@"ERROR: Start Page at '%@/%@' was not found.", self.wwwFolderName, self.startPage]; 
     NSLog(@"%@", loadErr); 
     self.loadFromString = YES; 
     appURL = nil; 
    } else { 
     appURL = [NSURL fileURLWithPath:startFilePath]; 
    } 

    //// Fix the iOS 5.1 SECURITY_ERR bug (CB-347), this must be before the webView is instantiated //// 

    BOOL backupWebStorage = YES; // default value 
    if ([self.settings objectForKey:@"BackupWebStorage"]) { 
     backupWebStorage = [(NSNumber*)[settings objectForKey:@"BackupWebStorage"] boolValue]; 
    } 

    if (backupWebStorage) { 
     [CDVLocalStorage __verifyAndFixDatabaseLocations]; 
    } 

    //// Instantiate the WebView /////////////// 

    [self createGapView]; 

    /////////////////// 

    NSNumber* enableLocation  = [self.settings objectForKey:@"EnableLocation"]; 
    NSString* enableViewportScale = [self.settings objectForKey:@"EnableViewportScale"]; 
    NSNumber* allowInlineMediaPlayback = [self.settings objectForKey:@"AllowInlineMediaPlayback"]; 
    BOOL mediaPlaybackRequiresUserAction = YES; // default value 
    if ([self.settings objectForKey:@"MediaPlaybackRequiresUserAction"]) { 
     mediaPlaybackRequiresUserAction = [(NSNumber*)[settings objectForKey:@"MediaPlaybackRequiresUserAction"] boolValue]; 
    } 

    self.webView.scalesPageToFit = [enableViewportScale boolValue]; 

    /* 
    * Fire up the GPS Service right away as it takes a moment for data to come back. 
    */ 

    if ([enableLocation boolValue]) { 
     [[self.commandDelegate getCommandInstance:@"Geolocation"] getLocation:nil]; 
    } 

    /* 
    * Fire up CDVLocalStorage on iOS 5.1 to work-around WebKit storage limitations, or adjust set user defaults on iOS 6.0+ 
    */ 
    if (IsAtLeastiOSVersion(@"6.0")) { 
     // We don't manually back anything up in 6.0 and so we should remove any old backups. 
     [CDVLocalStorage __restoreThenRemoveBackupLocations]; 
     [[NSUserDefaults standardUserDefaults] setBool:backupWebStorage forKey:@"WebKitStoreWebDataForBackup"]; 
    } else { 
     if (backupWebStorage) { 
      [self.commandDelegate registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView] withClassName:NSStringFromClass([CDVLocalStorage class])]; 
     } else { 
      [CDVLocalStorage __restoreThenRemoveBackupLocations]; 
     } 
    } 

    /* 
    * This is for iOS 4.x, where you can allow inline <video> and <audio>, and also autoplay them 
    */ 
    if ([allowInlineMediaPlayback boolValue] && [self.webView respondsToSelector:@selector(allowsInlineMediaPlayback)]) { 
     self.webView.allowsInlineMediaPlayback = YES; 
    } 
    if (mediaPlaybackRequiresUserAction == NO && [self.webView respondsToSelector:@selector(mediaPlaybackRequiresUserAction)]) { 
     self.webView.mediaPlaybackRequiresUserAction = NO; 
    } 

    // UIWebViewBounce property - defaults to true 
    NSNumber* bouncePreference = [self.settings objectForKey:@"UIWebViewBounce"]; 
    BOOL bounceAllowed = (bouncePreference==nil || [bouncePreference boolValue]); 

    // prevent webView from bouncing 
    // based on UIWebViewBounce key in Cordova.plist 
    if (!bounceAllowed) { 
     if ([ self.webView respondsToSelector:@selector(scrollView) ]) { 
      ((UIScrollView *) [self.webView scrollView]).bounces = NO; 
     } else { 
      for (id subview in self.webView.subviews) 
       if ([[subview class] isSubclassOfClass: [UIScrollView class]]) 
        ((UIScrollView *)subview).bounces = NO; 
     } 
    } 

    /////////////////// 

    if (!loadErr) { 
     NSURLRequest *appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0]; 
     [self.webView loadRequest:appReq]; 
    } else { 
     NSString* html = [NSString stringWithFormat:@"<html><body> %@ </body></html>", loadErr]; 
     [self.webView loadHTMLString:html baseURL:nil]; 
    } 
} 
+3

[CDVViewController viewDidLoad] –

+0

의 코드를 붙여 넣을 수 있습니까? iOS6와 iOS5로 테스트 해 보시지 않겠습니까? – pmk

+0

우리는 iOs5와 iOs6으로 테스트했습니다. 그리고 xcode로 테스트하는 동안 작동했습니다. 충돌이 릴리스 이후에만 발생합니다. – Soulwax

답변

0

온다. 그 메소드 내에서 그 클래스의 인스턴스에 보내는 모든 메시지를 확인하는 것이 좋습니다 (대부분 self.property 또는 [self something]).

0

서로 다른 컴파일 따라서 아마도 다른 결과를 얻을 것, 보관할 확인하고 디버그 모드에서 실행할 때 응용 프로그램

를 실행합니다. (디버그 모드 = Run을 클릭하면 Xcode에서 실행될 때)

또한 iOS 6에서 사용되지 않는 메소드를 사용하고 있다는 느낌이 들었습니다. ('undefined selector'오류가 명확하게 나타납니다. 액세스하지 말아야 할 메소드에 액세스) iOS 6에서 사용하는 메소드를 사용할 수 있는지 확인하십시오.

또한 ivars에 액세스하고 있지 않은지 확인하십시오. 내가 아는 한 iOS 6에서 비공개 ivars에 액세스 할 수 없습니다.

+0

당신이 맞다. 우리는 3 가지 경고를 받는다 : " 'invokeString은 더 이상 사용되지 않는다 : Cordova 2.0에서는 더 이상 사용되지 않으며, window.handleOpenUrl을 사용하라. 앱이 사용자 정의 스키마 url을 통해 시작될 때 호출된다." 이것이 이유일까요? – Soulwax

+1

나는 그것을 의심한다. 많은 추천되지 않는 메소드를 문제없이 사용할 수 있지만 (권고하지는 않았지만) 여전히 실행됩니다. 그러나 iOS6에서 차단되는 몇 가지 특정 방법이 있습니다. 나는 당신이 그들 중 한 명을 만났다고 생각합니다. ivars에 접근하는 것은 제 경험에서 흔히있는 문제입니다. iOS SDK 6를 사용하여 코드를 컴파일하고 아이폰 5에서 아카이브 및 실행을 시도 했습니까? (액세스 할 수있는 경우) CDViewController의 viewDidLoad 메서드에서 문제가있는 코드를 찾아 내고 싶습니다. –

관련 문제