Сборка дистрибутива приложения для iphone содержит ошибку - PullRequest
4 голосов
/ 06 февраля 2010

Решение : Это было решено с помощью многих людей. Я сейчас пишу это, чтобы люди с похожими проблемами могли извлечь из этого пользу. Чтобы воссоздать эту ошибку, мне пришлось запустить сборку дистрибутива на моем устройстве. Это было выполнено по совету MrMage, в котором говорилось, что нужно сменить сертификат на разработчика, а не на дистрибутив. Это позволило мне воссоздать ошибку и отладить ее. Проблема оказалась в том, что компилятор игнорировал все вызовы для установки значений CGSize. Мне удалось предотвратить это, установив «Уровень оптимизации» в целевых настройках на «Нет» вместо «Самый быстрый, самый маленький».


Привет,

У меня очень своеобразное приложение. Несколько дней назад мое приложение было одобрено в магазине приложений, но, к своему ужасу, я вскоре обнаружил, что в нем была серьезная ошибка. Я пошел к своему компьютеру, но когда запустил код (как в симуляторе, так и на устройстве), все заработало отлично. Я перепробовал все: перекомпилировать и зафиксировать обновление, очистить все цели, переустановить SDK и т. Д.

Вот более подробное описание проблемы. В моем приложении есть подробное табличное представление, которое загружает некоторые данные из онлайн-источника. Он отображает представление загрузки во время загрузки, а затем перезагружает представление таблицы после того, как источник данных установлен. Ячейки таблицы содержат UITextViews, который изменяет размер в соответствии с текстом. Когда я запускаю приложение на компьютере или отлаживаю на устройстве, текст загружается и отображается идеально, но когда я загружаю из App Store и запускаю его, он будет отображаться только в первый раз, а затем останется пустым остальное. Я знаю, что данные загружаются, потому что texviews изменяют размер, чтобы соответствовать тексту, они просто не отображают его.

Кто-нибудь знает, что может быть причиной этой ошибки? Как я могу узнать, содержит ли моя сборка дистрибутива ошибку, которая не отображается в отладочной сборке?

С уважением, BEN.

PS: я сравнил целевые настройки для отладочных и дистрибутивных сборок. Единственное отличие, которое я вижу, это «Уровень оптимизации» в разделе «Генерация кода». Я попытался изменить это для отладочной сборки, но это не выявляет проблему.


РЕДАКТИРОВАТЬ: Я решил проблему, выполнив то, что предложил MrMage. Оказывается, этот код действительно является причиной ошибки. При работе в отладчике свойства ширины и высоты 's' постоянно равны нулю, и я не могу изменить это, несмотря ни на что. Я выясняю, почему это происходит.

- (void) setText:(NSString *)string 
{

CGSize s = [string sizeWithFont:textView.font constrainedToSize:CGSizeMake(290, FLT_MAX)];
s.height += kStaticSize;

//SizeWithFont is very unreliable so have to do some dirty tweaking
if (s.height > 100 && s.height <= 250)
    s.height += 20;
else if (s.height > 250 && s.height <= 500) 
    s.height += 40;
else if (s.height > 500 && s.height <= 800 )
    s.height += 50;
else if (s.height > 800 && s.height <= 1200)
    s.height += 60;
else if (s.height > 1200 && s.height <= 1700)
    s.height += 100;
else if (s.height > 1700) 
    s.height += 200;

s.width = 290;
CGRect r = textView.frame; 
r.size = s;
[textView setFrame:r];

[self.textView setText: string];
[self.textView setNeedsDisplay];

}

Ответы [ 4 ]

3 голосов
/ 06 февраля 2010

Вы пытались просто взять конфигурацию сборки дистрибутива и изменить ее параметры подписи кода для разработчика iPhone, а затем протестировать эту сборку на своем устройстве?

Насколько я знаю, вы также можете загружать бинарные файлы, подписанные сертификатом разработчика. Таким образом, вы можете взять работающую сборку разработчика и отправить ее в Apple.

2 голосов
/ 06 февраля 2010

Вы когда-нибудь тестировали оптимизированную сборку? Оптимизатор может делать действительно интересные вещи (например, переставлять код), и это может вызвать проблемы, если у вас есть неинициализированная переменная.

Я бы также предложил запустить Clang (выполнить Build & Analyze).

0 голосов
/ 06 февраля 2010

Под заголовком диких догадок.

Я бы посмотрел на любую разницу между вашей средой разработки и нормальной операционной средой. Например, в моей среде разработки мой iPhone по умолчанию использует Wi-Fi для всего, кроме телефонных звонков. Поскольку некоторые сетевые операции чувствительны ко времени и пропускной способности, возможно, проблема заключается в работе через 3G / Edge.

Я пытаюсь придумать, что может заставить масштабируемые текстовые представления содержать текст, но не отображать его. Текстовое представление не может масштабироваться, чтобы соответствовать, если у него нет ничего, чтобы соответствовать. Это говорит о том, что либо текст состоит из пробелов, либо по какой-то причине альфа цвета текста равна нулю. Делаете ли вы что-нибудь, настраивая цвет / шрифт текста?

0 голосов
/ 06 февраля 2010

Как вы изменили свой код с момента обновления? (Я надеюсь, что вы используете какую-то форму управления версиями) Я не думаю, что настройки цели будут иметь к этому какое-то отношение.

В то же время я бы удалил его из магазина, если он критичен к ошибке. Затем поработайте над тем, чтобы сделать следующий выпуск стабильным и тщательно его протестировать.

(я не думаю, что вам нужно использовать настраиваемые ячейки tableView для изменения размера текста, я уверен, что стандартные Apple делают это автоматически.)

...