시뮬레이터와 실제 iPhone 4 및 iPhone 3GS에서 완벽하게 작동하는 앱에 문제가 있습니다. 앱이 승인되어 현재 App Store에 있지만 App Store에서 다운로드 한 배포 빌드는 dev/release 빌드에없는 버그를 보여줍니다.UIWebView는 dev 버전보다 앱 스토어 버전에서 differnetly 역할을합니다.
무료 앱이지만 현지 광고가 지원합니다. 앱이 실행되거나 백그라운드에서 돌아 오면 AppDelegate는 광고 서버에서 일부 HTML을 다운로드하려고 시도하고 성공하면 모달 뷰 컨트롤러에 UIWebView를 표시하고 HTML이 포함 된 NSData 변수를 전달합니다. 개발/릴리스 빌드에서는이 기능이 완벽하게 작동합니다. 앱이 실행되고 몇 초 후보기가 위로 올라와 버튼으로 닫을 수있는 광고가 표시됩니다.
그러나 App Store에서 배포판 빌드가 다릅니다. 모달 뷰 컨트롤러가 위로 움직이면 UIWebView가로드되지 않습니다. 광고 컨트롤러는 광고 데이터를 다운로드 할 수있는 경우에만 표시합니다. 그렇지 않으면보기가 표시되지 않습니다.
감사하게도 webViewDidFinishLoad가 실행되지 않는 경우 (타이머가 무효화되는 경우) 모달 뷰가 해제되도록 광고보기 컨트롤러에 타이머를 구현 했으므로 앱 사용자는별로 짜증이났습니다. 그러나 빈 뷰 컨트롤러를 슬라이드 한 다음 외관상으로는 아무 이유없이 멀리 슬라이드 시키면 여전히보기 흉합니다.
여기에 관련된 AppDelegate에의 방법입니다 : 그런데
- (void)launchAd
{
[NetworkActivity showFor:@"ad"];
if (!alreadyActive && [ServerCheck serverReachable:@"openx.freewave-wifi.com" hideAlert:YES])
{
alreadyActive = YES;
[self performSelectorInBackground:@selector(downloadAdData) withObject:nil];
}
[NetworkActivity hideFor:@"ad"];
}
- (void)downloadAdData
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *baseURL = @"http://appdata.freewave-wifi.com/ad/";
NSString *file = (IS_IPAD) ? @"ipad.php" : @"iphone.php";
NSURL *adURL = [NSURL URLWithString:[baseURL stringByAppendingString:file]];
adData = [[NSData alloc] initWithContentsOfURL:adURL];
[self performSelectorOnMainThread:@selector(presentAdModal) withObject:nil waitUntilDone:NO];
[pool release];
}
- (void)presentAdModal
{
if (adData)
{
AdViewController *adView = [[AdViewController alloc] initWithNibName:nil bundle:nil];
[adView setAdData:adData];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:adView];
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[tabBarController presentModalViewController:navController animated:YES];
[navController release], navController = nil;
[adView release], adView = nil;
}
else
LogError(@"Not presenting ad; unable to create data object.");
}
, adData는 NSData *adData;
AdViewController 단순히
[webView loadData:adData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
에로드되는있는 UIWebView를 포함하여 헤더에 정의되어 있습니다
다시 말하지만,이 모든 작업은 시뮬레이터와 물리적 장치에서 dev/release 빌드를 사용하여 매 시간마다 완벽하게 작동합니다. 앱 스토어에서. NSString을 NSString으로 변환하고 NSLog()를 사용하여 AdView를 모달로 표시하기 전에 HTML을 다운로드했음을 증명하기 위해 바코드로 변환했습니다.
[한숨 ...]
편집 1 : 내 원래의 게시물이 명확하지 않았다 경우, (하지만 dev에/릴리스 빌드에서 수행) 유통 빌드에서 호출되지 도착 결코 webViewDidFinishLoad
.
편집 2가 : 또한,이 AdViewController에
[webView loadData:adData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];
를 호출하기 직전에, 나는 임시
NSLog()
을 추가하고있는 NSString에 adData를 변환 콘솔에 로그인하고 HTML이 있었다. 그래서, UIWebView 그냥 NSData를로드 거부?
IS_IPAD는 어떻게 정의됩니까? – occulus
나는 이것에 대해 궁금하다! 나는 앱을 다운로드하고 연결을 통해 냄새를 맡으려고 Wireshark를 사용했지만 처음에는 이상한 것을 찾을 수 없었습니다. 뷰에서 다시 튀어 나오기 전에 UIWebView 제목이 취소됨으로 설정되어 있는지 확인하십니까? 그런 일이 어디 있니? – Rog
@culus.'IS_IPAD'는 다음과 같이 정의됩니다 :'#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)' –