件名が言うように、デバイス上でアプリケーションをデバッグ モードで問題なく実行できますが、テスト デバイス (アドホック ディストリビューション) で実行しようとすると、機能しないセクション (すべてではない) があります。
アプリケーションは、サーバーから json データをダウンロードし、解析されたデータ (テキスト、ビデオ、ecc) をユーザーに表示します。
サーバーと通信するために、アプリケーションのあらゆる場所で ASIFormDataRequest を使用しました。
何か案は?
ありがとう!
いくつかのコード:
NSMutableString *url = [[NSMutableString alloc] initWithString:@"http://url"];
NSURL *urlElaborazioneDati = [NSURL URLWithString:url];
__weak __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:urlElaborazioneDati];
[request setCompletionBlock:^{
__weak NSString *jsonData = [request responseString];
NSArray *jsonArray = [jsonData JSONValue];scrollView = [[UIScrollView alloc] init];
scrollView.frame = CGRectMake(0.0, 70.0, 320.0, 312.0);
scrollView.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
scrollView.contentSize = CGSizeMake(320.0,marginTop*[jsonArray count]);
[self.listaVideo addSubview:scrollView];
for (int i=0; i<[jsonArray count]; i++) {
NSString *key = [NSString stringWithFormat:@"%d",i];
NSArray *elemento = [jsonArray valueForKey:key];
UIView *item = [[UIView alloc] initWithFrame:CGRectMake(148.0, (marginTop*i), 162.0, 67.0)];
item.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
[scrollView addSubview:item];
UILabel *titoloVideo = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 162, 20)];
titoloVideo.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
titoloVideo.textColor = [UIColor whiteColor];
titoloVideo.font = [UIFont boldSystemFontOfSize:17];
[titoloVideo setText:[elemento valueForKey:@"titolo"]];
[item addSubview:titoloVideo];
UITextView *testoVideo = [[UITextView alloc] initWithFrame:CGRectMake(0, 30, 162, 37)];
testoVideo.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
testoVideo.textColor = [UIColor whiteColor];
testoVideo.font = [UIFont boldSystemFontOfSize:13];
testoVideo.textAlignment = UITextAlignmentLeft;
testoVideo.editable = NO;
[testoVideo setContentInset:UIEdgeInsetsMake(-10, -7, 0, 0)];
[testoVideo setText:[elemento valueForKey:@"testo"]];
[item addSubview:testoVideo];
[self embedYouTube:[elemento valueForKey:@"url"] frame:CGRectMake(10, (marginTop*i), 128, 67)];
}
}];
[request setFailedBlock:^{
NSError *responseerror = [request error];
NSString *responseerrorstring = [NSString stringWithFormat:@"%@",responseerror];
UIAlertView *error = [[UIAlertView alloc] initWithTitle: @"Errore connessione"
message: responseerrorstring
delegate: self
cancelButtonTitle: @"Ok"
otherButtonTitles: nil];
[error setTag:1];
[error show];
}];
次に、embedYouTube で:
- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame {
NSString *embedHTML = @"\
<html><head>\
<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = %0.0f\"/></head>\
<body style=\"background:#fff;margin-top:0px;margin-left:0px\">\
<div><object width=\"%0.0f\" height=\"%0.0f\">\
<param name=\"movie\" value=\"%@\"></param>\
<embed src=\"%@\"\
type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"%0.0f\" height=\"%0.0f\"></embed>\
</object></div></body></html>";
NSString *html = [NSString stringWithFormat:embedHTML, frame.size.width, frame.size.width, frame.size.height, urlString, urlString, frame.size.width, frame.size.height];
//NSLog(@"%0.0f, %0.0f, %@",frame.size.width, frame.size.height, html);
UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
[videoView loadHTMLString:html baseURL:nil];
[scrollView addSubview:videoView];
}
これは、アドホック配布で機能していないように見えるセクションの 1 つです...
これが同じ状況で誰かを助けることができるなら、ここにApple Developer Technical Supportの答えがあります:
アドホック ビルドを作成する場合、デフォルトでは、Xcode はプロジェクトのコンパイル時にさらに最適化を適用します。詳細については、https://developer.apple.com/library/ios/qa/qa1764/を参照してください。
最適化によってコードのバグが明らかになることは、それほど珍しいことではありません。通常、これは未定義の動作です (たとえば、文字列を保持するには小さすぎるバッファーに文字列をコピーするなどしてメモリを踏みにじるなど)、コードが誤って機能する前に問題が発生します。または、ARC がオブジェクトを早期に解放することに積極的であるため、__unsafe_unretained クラッシュが発生したり、__weak オブジェクトが早期に消失したりする可能性があります。
完了ブロックが呼び出されたかどうか知っていますか? NSLog(@"%s:%d", func , LINE );を追加すると、あなたのコードでは、あなたが期待するメソッドが呼び出されていますか?
ダウンロードが開始されたかどうかわかりますか?要求オブジェクトは、予想よりも早く割り当て解除されましたか?
何がうまくいかないのかを理解するには、何がうまくいかないのかを正確に突き止める必要があります。
iTunes 経由で IPA をインストールしたときにのみ問題が再現する場合は、NSLog() を使用してプログラム フローをトレースし、変数の実際の値を調べて、期待どおりに動作していないものを確認する必要があります。詳細については、「デプロイされた iOS アプリのデバッグ」http://developer.apple.com/library/ios/qa/qa1747/を参照してください。
また、リリース ビルドを作成するときと同じようにデバッグ ビルドを作成するときに、ビルド設定を変更して同じ最適化 (通常は「最速、最小 -O」) を使用することもできます。この方法でデバッガを使用できますが、最適化によって多少信頼性が低下することに注意してください。疑わしい場合は、NSLog() に頼ってください。
よろしくお願いします、
...