Перейти к содержанию
Fire Monkey от А до Я
  • 0

Недавние изменения в публикации


FeLDMARShaL

Вопрос

Решили мы обновить свое приложение в AppStore (С момента прошлой успешной публикации было очень незначительные изменения, исправлены синтаксические ошибьки, немного изменен интерфейс и еще по мелочи). До этого момента всегда с первого раза проходили проверки (на нескольких приложениях). А тут нам пришел отказ, мол наше приложение не работает с их IPv6 сетью.

Вот полный текст отказа (если кому то интересно):

Цитата
From Apple
  • 2. - 1 PERFORMANCE: APP COMPLETENESS

Performance - 2.1



We discovered one or more bugs in your app when reviewed on iPad and iPhone running iOS 9.3.2 on Wi-Fi.

After launch the app displays an error.

The steps to reproduce are:

1. Launch the app
2. Observe the issue.


We've attached screenshot(s) for your reference. 

Next Steps

Please run your app on a device to identify the issue(s), then revise and resubmit your app for review.

Apps are reviewed on an IPv6 network. Please ensure that your app supports IPv6 networks, as IPv6 compatibility is required.

For additional information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and Supporting IPv6-only Networks.

For a networking overview, see About Networking.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).

Resources 

If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&A QA1764: How to reproduce bugs reported against App Store submissions.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
- complete details of your rejection issue(s)
- screenshots
- steps to reproduce the issue(s)
- symbolicated crash logs - if your issue results in a crash log

 

В статье https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1 написано как настроить на маке сеть с поддержкой DNS/NAT64 (пункт To set up a local IPv6 Wi-Fi network using your Mac)

Настроили мы такую эмуляцию и запустили наше приложение, и оно действительно не может достучаться до глобала. Сначала мы подумали на неподдержку такого режима нашими сторонними (платными и довольно известными) компонентами RTC. Но я попробовал сделать нечто похожее штатными средствами (при помощи инди и получил точно такую же ошибку), код с инди прикрепляю:

var
  IdHttp: TIdHTTP;
  Data, ResponseContent: String;
  AData, AResponseContent: TStringStream;
begin
  IdHttp := TIdHTTP.Create(nil);
  try
    Data := '';
    try
      AData := TStringStream.Create(Data);
      AData.Position := 0;
      AResponseContent := TStringStream.Create;
      try
        IdHttp.Request.ContentType := 'application/x-www-form-urlencoded;charset=UTF-8';
        try
          IdHttp.Get('http://185.17.120.131:10020/HelloWorld', AResponseContent);
        except
          ShowMessage('f');
        end;
        AResponseContent.Position := 0;
        ResponseContent := AResponseContent.DataString;
        ShowMessage(ResponseContent);
      finally
        FreeAndNil(AResponseContent);
      end;
    finally
      FreeAndNil(AData);
    end;
  finally
    FreeAndNil(IdHttp);
  end;
end;

Есть какие нибуть идеи как такое можно вылечить или обойти? Проблема более чем актуально.

п.с. использую Delphi 10 Seatle + последняя мак ось на мак мини.

п.с.2. Может быть эта проблема исправлена на Delphi 10.1 Berlin?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Проверено эмпирическим путем, при DNS64/NAT64 компонент штатный TWebBrowser работает в обычном режиме, на работают только Indy и RTC.

В IPv6 only вроде все нормально, проблема именно с DNS64/NAT64.

Ссылка на комментарий
  • 0

Провел 2 теста с разными строками запроса, по имени и по адресу. 2 разных компонентах, во всех строчках менялас только строка запроса, результат закомментировал:

var
  IdHttp: TIdHTTP;
  ResponseContent: String;
  AResponseContent: TStringStream;
begin
  IdHttp := TIdHTTP.Create(nil);
  try
    try
      AResponseContent := TStringStream.Create;
      try
        IdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
        try
          //IdHttp.Get('http://185.17.120.131:10020', AResponseContent); Windows OK
          //IdHttp.Get('http://ya.ru', AResponseContent); Windows ERROR HTTP/1.1 302 Found
          //IdHttp.Get('http://ya.ru', AResponseContent); iOS ERROR "Socket Error Connection timed out"
          //IdHttp.Get('http://185.17.120.131:10020', AResponseContent); iOS ERROR "Socket Error Connection timed out"
          IdHttp.Get('http://185.17.120.131:10020', AResponseContent);
        except
          on E: Exception do
            ShowMessage(E.Message); //Socket Error # 60'#015#012'Connection timed out
        end;
        AResponseContent.Position := 0;
        ResponseContent := AResponseContent.DataString;
        ShowMessage(ResponseContent);
      finally
        FreeAndNil(AResponseContent);
      end;
    finally
      FreeAndNil(AData);
    end;
  finally
    FreeAndNil(IdHttp);
  end;

  try
    NetHTTPClient1.Accept := 'text/html, application/xhtml+xml, */*';
    NetHTTPClient1.ContentType := 'application/x-www-form-urlencoded';
    NetHTTPClient1.AcceptEncoding := 'UTF-8';
    //ResponseContent := NetHTTPClient1.Get('http://185.17.120.131:10020').ContentAsString(tencoding.UTF8); Windows OK
    //ResponseContent := NetHTTPClient1.Get('http://ya.ru').ContentAsString(tencoding.UTF8); Windows OK
    //ResponseContent := NetHTTPClient1.Get('http://ya.ru').ContentAsString(tencoding.UTF8); iOS OK
    //ResponseContent := NetHTTPClient1.Get('http://185.17.120.131:10020').ContentAsString(tencoding.UTF8); iOS ERROR "Error - 1001 accessing to http://185.17.120.131:10020: Превышен лимит времени на запрос"
    ResponseContent := NetHTTPClient1.Get('http://185.17.120.131:10020').ContentAsString(tencoding.UTF8);
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
  ShowMessage(ResponseContent);
end;

Эта строчка означает что на винде отработало без ошибок в мы получали результат запроса

Цитата

//IdHttp.Get('http://185.17.120.131:10020', AResponseContent); Windows OK

Эта строчка означает что на iOS произошла ошибка с текстом в кавычках

Цитата

//ResponseContent := NetHTTPClient1.Get('http://185.17.120.131:10020').ContentAsString(tencoding.UTF8); iOS ERROR "Error - 1001 accessing to http://185.17.120.131:10020: Превышен лимит времени на запрос"

 

Обрадовало следующее, значит наверно не все потеряно:

Цитата

//ResponseContent := NetHTTPClient1.Get('http://ya.ru').ContentAsString(tencoding.UTF8); iOS OK

Т.е если программу построит таким образом возможно ошибок не будет, хотя не факт что это мне поможет, в моей программе POST запросы на php скрипты с передачей параметров в них.

Есть идеи как вылечить проблему? Может есть еще какиенибуть компоненты (кросплатформенные разумеется), п.с. проверить пока на Android пока нет возможности, но главное чтобы и на Андройде вариант сработал правильно.

Ссылка на комментарий
  • 0

Было за неделю 5 отказов (2 точно таких же), пока не перешел на Berlin и не обновил Mac на EL Capitan, ну и соответственно последний Xcode.

У меня был Seatle (но С..КА не Update 1) , а в BugFix Seatle Update 1 есть такой исправленный баг -> 

RSP-12744

iOS app constantly rejected in AppStore

IDE, IDE\Deployment

https://quality.embarcadero.com/browse/RSP-12744

Думаю вам достаточно обновить до Update 1

Кстати (может это и элементарно) чуток попарился из-за того что не правильно прикрепил новый plist(для поддержки шрифта) в Deploy, так как для ios32 ios64 они разные(это понятно) но и для ApplicationStore он другой)

Ну и очень радует что проверку они начали делать в течении суток.:)

Пожалуйста скажите что у Вас тоже просто обычный Seatle!! Я хоть успокоюсь что я ни один такой :blink:, который время в пустую потратил :D

Изменено пользователем zairkz
Ссылка на комментарий
  • 0

Да, у меня обычный Seatle. С завтрашнего дня будем думать об обновление до Berlin (а вдруг там пофиксили нашу проблему). Но мне кажется что не поможет, проблема то не в plist, а в том что не работает NAT64/DNS64

В том баг фиксе что Вы указали:

Цитата

The app have been rejected because failed to launch..

У нас оно запускается, все работает а вот доступа к инету нет.

Проблема актуальна.

Изменено пользователем FeLDMARShaL
Ссылка на комментарий
  • 0
6 часов назад, zairkz сказал:

Так у меня точно такой отчет об ошибке пришел, скину позже в личку скрины, что то на счет IPv6

Ну так проблема описанная  https://quality.embarcadero.com/browse/RSP-12744 не про этот случай :)

А вообще это хорошо (что не у одного меня такое), если проблема имеет массовый характер, есть шанс что ее могут решить. А вообще сегодня вечером уже буду пробовать поставить Berlin (ну а друг)

Изменено пользователем FeLDMARShaL
Ссылка на комментарий
  • 0

Так. Пришло письмо с reject'ом. Использовал берлин.

2. - 1 PERFORMANCE: APP COMPLETENESS
Performance - 2.1
We were unable to review your app as it crashed on launch. 
Next Steps
Please revise your app and test it on a device while connected to an IPv6 network (all apps must support IPv6) to ensure it will launch without crashing.

как хоть выглядят сети v6? что я должен сделать с роутером?

upd.

на роутере ipv6 включен

test-ipv6.com дает:

Тест IPv4 записи в DNS  
ок (0.721s) используя ipv4
Тест IPv6 записи в DNS  
неудача (0.004s)
Тест обеих (IPv4 и IPv6) записей в DNS  
ок (0.740s) используя ipv4
Тест двухстекового (IPv4 и IPv6) DNS большими пакетами  
ок (0.715s) используя ipv4
Тест IPv4 без использования DNS  
ок (0.433s) используя ipv4
Тест IPv6 без использования DNS  
неудача (0.006s)
Тест IPv6 большими пакетами  
неудача (0.007s)
Тест использования IPv6 DNS сервером вашего провайдера  
ок (0.970s) используя ipv4
Поиск провайдера IPv4  
ок (1.009s) используя ipv4 ASN 28890
Поиск провайдера IPv6  
неудача (0.032s)
Изменено пользователем krapotkin
Ссылка на комментарий
  • 0
  • Администраторы
4 часа назад, krapotkin сказал:

как хоть выглядят сети v6? что я должен сделать с роутером?

  • IP адрес кодируется 8 октетами (128 бит) 
  • Роутер еще должен уметь поддерживать IPv6. Смотреть нужно на модель и на сколько она старая.
  • На счет этой проблемы с публикацией приложений я поищу информацию. Спрошу у наших коллег. 

 

Ссылка на комментарий
  • 0

Ярослав, к сожалению в эту тему запихали 2 проблемы, одна (которая от меня) - приложение не работает с IPv6 сетью, вторая (от других участников форума) - приложение падает в момент запуска при релизе. Лично меня интересует та которая от меня, т.к. проблем с запуском и падением у меня не наблюдается, мне они присылали скриншот, где при запуске программы выведено сообщения о том что нет подключения к инету, хотя такое есть (я обрабатываю исключительную ситуацию когда нет связи). А поскольку для работы моего приложения требуется инет, я физически ограничиваю дальнейшую его работу до тех пор пока инет не появится.

Может имеет смысл разнести 2 проблемы по разным темам чтобы не люди не путались?

Ссылка на комментарий
  • 0
Цитата

роутер ASUS RT-AC52U. Все что есть там про IPv6:

Вам не нужен роутер. Делфи уже давно нормально работает в сети IPv6, Вам для публикации надо настроить NAT64/DNS64. Как настроить трансляцию такую рассказано в пункте  Test for IPv6 DNS64/NAT64 Compatibility Regularly в той ссылке которую я дал в первом сообении в качестве ответа от эпла. Собственно при включенной такой трансляци инет пропадает на делфи под макосью.

Ссылка на комментарий
  • 0

Нужна публикация, занимаюсь проблемой в плотную. Как оказалось то же самое прилоежние на андройде, который подключен к той же маковской сети NAT64/DNS64 без проблем выходит в инет. Получается запара именно в iOS девайсах. У кого нибудь за это время появились какие нибудь идеи?

Переход на новый берлин не исправил проблему. Есть люди которые смогли опубликовать приложение которое работает с сетью, может кто поделится опытом?

Ссылка на комментарий
  • 0
4 часа назад, FeLDMARShaL сказал:

Нужна публикация, занимаюсь проблемой в плотную. Как оказалось то же самое прилоежние на андройде, который подключен к той же маковской сети NAT64/DNS64 без проблем выходит в инет. Получается запара именно в iOS девайсах. У кого нибудь за это время появились какие нибудь идеи?

Переход на новый берлин не исправил проблему. Есть люди которые смогли опубликовать приложение которое работает с сетью, может кто поделится опытом?

 

Было за неделю 5 отказов (2 точно таких же), пока не перешел на Berlin и не обновил Mac на EL Capitan, ну и соответственно последний Xcode.

Скиньте описание отказа

2016-08-09_15-17-58.png

Ссылка на комментарий
  • 0
1 час назад, zairkz сказал:

Скиньте описание отказа

полное описание отказа в первом моем посте, с того момента мы больше не публиковались, т.к. стабильно у себя воспроизвели проблему (нет доступа к инету карл!)

Ссылка на комментарий
  • 0

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

Пример как мы будем работать с новыми компонентами (авторизация на нашем ресурсе):

procedure TForm2.Button1Click(Sender: TObject);
var
  psw: String;
begin
 psw := '123';
 TTask.Run(procedure
    var
      NetHTTPClient: TNetHTTPClient;
      AContentStream: TStringStream;
      ContentStream: String;
      sha1: String;
      IdHashSHA1: TIdHashSHA1;
      aURL: String;
    begin
      try
        NetHTTPClient := TNetHTTPClient.Create(nil);
        try
          AContentStream := TStringStream.Create;
          try
            IdHashSHA1 := TIdHashSHA1.Create;
            try
              sha1 := LowerCase(IdHashSHA1.HashBytesAsHex(TidBytes(Bytesof(psw))));
              NetHTTPClient.Accept := 'text/html, application/xhtml+xml, */*';
              NetHTTPClient.ContentType := 'application/x-www-form-urlencoded';
              NetHTTPClient.AcceptEncoding := 'UTF-8';
              aURL := 'json=yes&' +
                      'CompanyID=40&' +
                      'ModernLogin=' + URL_Encode('{"phone":"XXXXXXXXXX","pwd":"'+sha1+'"}');
              NetHTTPClient.Execute('GET', 'XXXXXXXXX/index.php?'+aURL, nil, AContentStream);
              //ДОБАВИТЬ все потенциально возможные ошибки связанные с сетью
              //ДОБАВИТЬ общий счетчик кол-во незавершенных потоков для операция начала и конец ожидания загрузки данных по сети
              AContentStream.Position := 0;
              ContentStream := AContentStream.DataString;
              TThread.Synchronize(nil, procedure()
                begin
                  //ДОБАВИТЬ обработчик возможных ошибок в ответе
                  Form2.WorkWithAnswer(ContentStream);
                end
              );
            finally
              FreeAndNil(IdHashSHA1);
            end;
          finally
            FreeAndNil(AContentStream);
          end;
        finally
          FreeAndNil(NetHTTPClient);
        end;
      except
        on E: Exception do
        begin
          //ДОБАВИТЬ обработку ошибка в главном потоке
        end;
      end;
    end
  );
end;

 

Ссылка на комментарий
  • 0

Сейчас подходит время публикации очередного приложения, после его успешной публикации переведем остальные наши приложения на эти компоненты, и забудем о проблеме как страшный сон. Больше не будем использовать для мобильной разработки компоненты RTC, их саппорт культурно объяснил что исправлять он не будет торопиться эту проблему.

Ссылка на комментарий
  • 0
52 минуты назад, FeLDMARShaL сказал:

Сейчас подходит время публикации очередного приложения, после его успешной публикации переведем остальные наши приложения на эти компоненты, и забудем о проблеме как страшный сон. Больше не будем использовать для мобильной разработки компоненты RTC, их саппорт культурно объяснил что исправлять он не будет торопиться эту проблему.

На INDY все прекрасно работает., после обновление Berlin и Xcode надо было еще раз на Indy попробовать.

Ссылка на комментарий
  • 0
23 часа назад, zairkz сказал:

На INDY все прекрасно работает., после обновление Berlin и Xcode надо было еще раз на Indy попробовать.

Проверил, не работает (ни RTC ни Indy) :) если у Вас работает то значит Вы что то сделали такое что поспособствовало этому. МакОсь - элькапитан, хкод - последний 7.ХХ

Мой способ единственно верный имхо, + SSL обезательная фитча

Ссылка на комментарий
  • 0
  • Модераторы
3 минуты назад, FeLDMARShaL сказал:

Мой способ единственно верный имхо, + SSL обезательная фитча

он не использует HTTPS

Ссылка на комментарий
  • 0

так у меня и без https не работает, может он подключает телефон не к тому вайфаю DNS64/NAT64 о которой идет речь, ошибиться в коде то нельзя:

str := IdHTTP1.Get('http://XXXXXXXXXXX/index2.php');

Если дейстивтельно работает, то не мог бы товарищ zairkz дать простенький проект в 10.1 для iOS 32 бит, я подставлю туда свой сертификат и проверю.

Есть вероятность что он грузит данные с какого спец сайта, и проблема не на стороне устройства а на стороне сайта.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...