Translate

четверг, 24 ноября 2016 г.

История с IPv6 или публикация в App Store

Доброго времени суток!

Не так давно я публиковал приложение в App Store, это заняло у меня месяц...

27 сентября 2016 года я подал на публикацию в AppStore, первый reject пришел 29 сентября с текстом:
От: 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 10.0.2 on Wi-Fi connected to an IPv6 network.
Specifically, content fails to load after launch.
We've attached screenshot(s) for your reference.
Next Steps
Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), then revise and resubmit your app for review. 
Как выяснилось позже сеть Apple построена на IPv6, поэтому запросы на сервер (настроенный на IPv4) не доходили. После этого я снова подавал на публикацию изменяя код в приложении, пробовал использовать TidHTTP и TNetHTTPClient, но также получал reject с аналогичным текстом от Apple. оставался единственный вариант с настройкой IPv6 на сервере. Написал в тех. поддержку хостинга, о просьбе выдать мне IPv6 адрес, с описанием проблемы. Через пару дней с положительным ответом пришло письмо на почту. Оставалось только настроить...



Итак приступим...
  • Если нет root-доступа к серверу, то можно воспользоваться сервисом CloudFlare
  • Если есть root-доступ, то ознакомьтесь с инструкцией
Я выбрал сервис CloudFlare (подробней можно почитать в интернете)
  1. Регистрируемся на сервисе CloudFlare
  2. [CloudFlare] +Add Site, вписываем адрес Вашего сайта (домен), как только система проверит конфигурацию Вашего текущего DNS, она предложит изменить NS-сервера
  3. В кабинете хостинг провайдера Вам нужно будет сменить NS-сервара, на те которые выдал CloudFlare. (например у меня вот так)
  4. [CloudFlare] раздел DNS
    1. Добавить запись типа AAAA с Вашим IPv6 адресом 
      • Включаем HTTP proxy (CDN)
    2. Поддомены, (при наличии) также прописать через запись типа CNAME
      • Включаем HTTP proxy (CDN)
    3. Для FTP
      • Отключаем HTTP Proxy (CDN) 
      • Теперь FTP протокол будет доступен по IPv4, не по домену
      • Для того, чтобы обойти кэш CloudFlare, нужно включить Development Mode в разделе Caching, иначе ваши изменения при разработке back-end будут долго обновляться. Development Mode автоматически выключается через 3 часа, помните об этом!
  5. Все с настройкой закончили
  6. Ждём обновления DNS и проверяем правильность конфигурации
Результат правильной настройки сервера


Ну и как результат проделанной работы, следующая публикация в AppStore была принята


Я занимаюсь кроссплатформенной разработкой и поэтому в коде использую компоненты TNetHTTPClient, давно отказался от Indy из-за проблем с SSL на Android версии 6+

Если у Вас сеть настроенная на IPv6 можете протестировать вот этот код выложенный на GitHub
Работает как из сети IPv4, так и из IPv6