Saturday, May 25, 2013

Публикуем приложение в AppStore http://heximal.ru/blog/apple/publikuem-prilozhenie-v-appstore/

http://heximal.ru/blog/apple/publikuem-prilozhenie-v-appstore/

Публикуем приложение в AppStore

Опишем на будущее хинты по выкладыванию своихпрограмм в магазин приложений Apple AppStore. Хотя, как показывает практика, дело это не очень чтобы благодарное, поскольку яблочные товарищи не склонны к постоянству в механизмах функционирования своей системы. Это было уже не раз обнаружено мной в ходе прохождения различных процедур регистраций. Читая материалы предшественников и вопросы на форумах частенько можно столкнуться с ситуацией, что один и тот же момент выглядит у тебя уже по-другому. Тем не менее, общая концепция пока что остается. И так, попробую описать своими словами всю эту махину))
Чтобы выкладывать приложения в AppStore, необходимым условием является наличие статуса iPhone Developer.
Весь процесс можно разделить на два этапа: подготовка и публикация.
Подготовка (Provisioning). Самый сложный в понимании этап (по крайней мере для меня показался).
Он включает в себя создание идентификатора приложения App Id) и сертификата для подписи приложения. Все это объединяется под общим понятием профиля (Provisioning profile). Но все по порядку. Самое сложное во всем этом – создание сертификата. Сертификат необходим для цифровой подписи приложения. Существует два вида сертификатов – сертификат разработчика (Development certificate) и сертификат дистрибуции (Distribution certificate). Из названия не трудно догадаться, что первый тип нужен для разработки, второй – для распространения. Первым можно подписывать приложение и запускать на своем гаджете (в целях отладки), второй нужен, чтобы собирать приложение для публикации в аппсторе. Чтобы иметь возможность запускать приложение на своем гаджете, необходимо зарегистрировать устройство в Provisioning Portal. Делается это следующим образом. В среде xCode открываем Organizer (Window -> Organizer), подключаем свой гаджет к компьютеру (по usb, например), видим, что он появляется в разделе Devices. Копируем его DeviceID (длинная hex-строка) в буфер и идем в Provisioning Portal в раздел Devices. Там жамкаем Add Device, далее все просто.
 
Добавили. Теперь создаем сертификаты. Это не очень сложно, но меня заставило повозиться. Не буду долго расписывать, все это можно найти в How-To внутри Provisioning Portal. Обозначу лишь основные шаги:
- Создание запроса на подпись сертификата (включает в себя создание пары открытого и приватного ключа). В итоге получаем на диске файл CSR.
- Сабмит запроса на подпись сертификата. В Provisioning Portal заходим в секцию Certificates, указываем файл CSR, жмем Submit, сертификат создается и переводится в состояние Pending Approval.
- В Provisioning Portal заходим в секцию Certificates и подтверждаем сертификат (жмем Approve)
- Скачиваем и устанавливаем сертификат в систему. В Provisioning Portal заходим в секцию Certifiates. Кликаем ссылку WWDR Intermediate Certificate, на что нам предлагают сохранить файл .cer. Соглашаемся, и по завершению скачивания кликаем на нем. Запускается программа Keychain Access, которая предлагает установить сертификат в систему. Соглашаемся, и вот у нас есть сертификат для разработки.
Важный этап – эппл настоятельно рекомендует сохранить сгенерированный приватный ключ. При его утрате все труды окажутся напрасными, мы ничего больше не сможем подписать. Хорошо, что я вспомнил это, так как сам до сих пор не забэкапил свой ключ. Все-таки, полезная вещь – блог)))
Для сертификата дистрибуции все то же самое, за исключением того, что ключи больше не надо генерить.
И так, сертификаты мы создали, что теперь? Теперь нужно создать так называемые Provisioning Profiles (не хватает фантазии перевести на русский). Подготовительный профиль (назовем его так) представляет собой совокупность сертификата и идентификатора приложения. Сертификат у нас уже имеется, создадим идентификатор приложения. Для этого идем на Provisioning Portal в сецкию AppIDs. Если не брать в учет «пакетную» концепцию идентификации приложений, то все просто: нажимаем New App ID, вводим
- Description (напр, My Awesome App)
- Bundle Seed ID (App ID Prefix) – если это наше первое приложение, то в списке будет всего один пункт – Generate New, в противном случае в нем будут идентификаторы ранее созданных приложений (по задумке, приложения можно объединять в пакеты (suite))
- Bundle Identifier (App ID Suffix) – рекомендуется вводить в так называемом reverse domain style. То есть домен в обратном порядке. Например, в моем первом приложении Knight Move этот идентификатор выглядел как ru.heximal.knightmove.
Жмем Sumbit. Все, идентификатор приложения создан.
Далее заходим в разлем Provisioning и создаем профили нашего приложения (жмем New Profile). Для девелопмент-профиля вводим
- Profile Name – под этим именем профиль будет отображатся в xCode. Пример: KnightMoveDevelopmentProfile
- Certificates – ставим чеку на нашем сертификате
- App ID – выбираем наше приложение
- Devices – ставим чеку на тех девайсах, которые зарегистрированы – их может быть более одного. Я вот подумываю прикупить 4-й айфон для отладки (всмысле, не четвертый по счету – он у меня пока один, а с четвертой прошивкой). Забегая чуть вперед, скажу, что на втором этапе будет задан вопрос, тестировали ли мы наше приложение под iOS 4? Мне приходится отвечать Нет. Хотя я мог бы перепрошить свой девайс, iTunes каждый раз сигнализирует, что есть новая версия фирмвэйра. Но я пока не тороплюсь, потому что при таком раскладе у меня не будет возможности тестировать на третей прошивке кроме как в симуляторе.
Создали профиль, дождались его аппрува, скачиваем файл профиля (.provisionprofile), открываем окно Organizer и кидаем туда драг-энд-дропом файл профиля. Он успешно инсталлируется. Все.
Теперь открываем Project Settings, ищем опцию Code Signing подраздел Any iPhone OS, разворачиваем список, выбираем свой профайл, закрываем опции проекта. Далее важный момент. В структуре проекта (в древовидном сайдбаре) разворачиваем ветку Targets, щелкаем правой кнопкой на таргете, выбираем Get Info. Появляются снова опции проекта, но уже с секцией Properties. Заходим туда и вписываем в поле Identifier то значение, которое мы вводили при создании App ID в поле Bundle Identifier (напр, ru.heximal.knightmove). Все. Убеждаемся, что девайс подключен, выбираем в главном окне xCode конфигурацию Device|Debug и жмем Build And Go.
После того, как мы отладили приложение на девайсе, наступает пора собирать дистрибутив для публикации. Для этого повторяем процесс создания профиля дистрибуции. Он схож с созданием девелопмент-профиля. Инсталлируем профиль в xCode, а далее нужно осуществить следующий трик. Необходимо создать новую конфигурацию Distribution. Открываем опции проекта, секцию Configuration, выбираем там конфигурацию Release и нажимаем Duplicate. Вводим название Distribution. Далее в окне Target в секции Build выбираем настройки для конфигурации Distribution и в поле Code Signing Identity – Any iPhone OS Device выбираем наш Distribution Profile. На закладке Properties не забываем вписать Bundle Identifier, если еще не сделали. Закрываем опции, и в главном окне xCode выбираем конфигурацию Device|Distribution. Далее неплохо бы проследить за процессом сборки. Для этого идем в меню Build – Build Results. Там настраиваем чтобы показывался лог компиляции. Нажимаем Build. Появляется много строчек, в конце которых ищем слова ProcessingProductPackaging … embedded.mobileprovision и СodeSign. Вот здесь у меня ушло много времени. В пакете приложения (application bundle) упорно не хотел появляться файлembedded.mobileprovision. А без него приложение никак не хотело загружаться в AppStore. Это явилось следствием того, что ранее я экспериментировал с самопальными сертификатами и отключением системы provisioning'а. Позже я восстановил (кстати, хвала своему блогу) последовательность действий, которая привела к неработоспособности системы профайлинга, но времени на это ушло… В общем, как я ранее уже заявлял, не скупитесь, вступайте лучше сразу в iPhone Developer Program, если вы конечно не мазохисты))
Пакет приложения представляет собой простую папку с расширением .app, которая содержит исполняемый файл и все потроха приложения (ресурсы). Собственно, приложения Mac OS X представляют собой ровно то же самое, поэтому их можно просто перетащить куда-либо в другое место, и оно от туда запустится, потому что содержит внутри папки все необходимое. В этом конечно бесспорное приемущество non-registry концепции. И так, зипуем бандл нашего приложения тем самым готовимся к следующему этапу.
Публикация.
Дальнейшие действия производятся на портале iTunes Connect (itunesconnect.apple.com) Заходим в раздел Manage Your Applications и жмем Add New Application. Вводим
- App Name – имя приложения, то, как оно будет выглядеть в AppStore. При публикации второго приложения я столкнулся с тем, что это название должно быть уникальным для всего AppStore. То есть, если мы задумали назвать приложение каким-либо образом, а приложение с таким названием уже существует, нам придется придумывать что-то другое. Также следует учесть требования самого Apple к названию приложения http://www.apple.com/legal/trademark/guidelinesfor3rdparties.html
- SKU Number – опять какой-то уникальный идентификатор приложения, я не понял для чего он нужен, но решил придерживаться определенного правила генерации этого параметра, навроде hex_app_0001
- Bundle ID выбираем наше приложение
Дальше вроде все понятно, нужно заполнить мета-информацию о приложении: описание, категории, локализацию, скриншоты, иконку. После всего этого приложение переходит в состояние Waiting for upload. Для загрузки бинарника требуется программка Application Loader из пакета Developer. Если таковой не имеется, требуется доустановить. Запускаем ее, она спрашивает наш Apple ID и пароль, далее показывает список приложений, ожидающих аплоада. Выбираем, загружаем. Вот на этом этапе, кстати, у меня были проблемы до тех пор, пока я не реанимировал отключенный механизм профайлинга и кодесайнинга – без них аплоадер не хотел загружать приложение.
Все, после загрузки приложение переводится в состояние Waiting for Review – ожидание рассмотрения. Рассмотрение проивзодится специалистами Apple на предмет соответствия требованиям. Эти требования описаны в мануале iPhone Application Development Guide, и включают в себя такие аспекты, как соответствие общему дизайну, грамотное использование ресурсов устройства, таких как памяти, энергопотребления, производительности ну и просто user-friendly. Apple очень ответственно к этому подходит. Могут завернуть, например, если приложение очень долго закрывается, я уж молчу про утечки памяти. Чтобы избежать этих неприятностей, приложение перед сборкой дистрибутиво следует тщательно протестировать. В пакете Developer есть набор инструментов (приложение Instruments). С помошью него можно узнать много нового о своем приложении. Например, написав первое приложение и прогнав его через программу мониторинга выделения памяти, и утечек я обнаружил, что оно безнадежно течет. Несколько дней потратил на устранение утечек. Позже накидаю небольшой мануальчик, как пользоваться инструментами.
Будучи новичком, я думал, что статус Waiting for Review означает, что приложение уже находится на рассмотрении, однако по прошествии недели я заподозрил что-то неладное и решил написать в саппорт. На следующий день мне ответили и тут же пришло уведомление о том, что приложение переведено в статус OnReview. Тут сразу все стало ясно. Прошло еще дня полтора и приложение перешло в состояние Ready For Sale. Все, победа. Путь в аппсторе окончательно завершен.
Небольшой конфуз произошел по неопытности, при неудачной попытке найти в AppStore свое приложение в тот же день. Его там не было. Как оказалось позже, это нормальная ситуация. Существует некий период индексации. По моим наблюдениям он составляет сутки. Второе приложение тоже появилось через сутки. Кстати, со вторым приложением ситуация с ожиданием рассмотрения повторилась. Правда, я выжидал подольше чем неделю, прежде чем написать в саппорт. После того, как терпение закончилось, написал, и тут же мне ответили и приложение ушло на рассмотрение. Видимо, это закономерность. Посмотрим.

И напоследок. При публикации приложения обязательным полем в мета является страница технической поддержки. Это меня сподвигло отрихтовать свою страницу feedback. Теперь она англоязычная))

  1. 3 November 2010 в 12:48 | #1

    Очень полезные посты, спасибо! :)

  2. Сергей
    6 April 2011 в 18:23 | #2

    Действительно, очень полезные статьи. Руководствуюсь как инструкцией при выкладывании своего первого приложения для AppStore.

  3. Сергей
    6 April 2011 в 18:25 | #3

    Спасибо огромное, что не поленились изложить. )))

  4. 9 April 2011 в 12:32 | #4

    Всегда пожалуйста))

  5. mactoy
    29 June 2011 в 15:42 | #5

    Полезные вещи!
    Спасибо.

  6. Анна
    6 September 2011 в 13:00 | #6

    Спасибо за Ваши статьи. Ответьте, пожалуйста, для неразбирающихся. Во-первых, на каком сайте все это проделывается, т.к. нашла достаточно большое количество сайтов AppStore и не могу выбрать тот, который нужен. Во-вторых, язык, на котором придется общаться, английский? в-третьих, если проделать все шаги, то ты зарегистрируешься как издатель приложения? следующий шаг – это продвижение и в случае успеха – прибыль? Надеюсь на ответ и возможные ссылки по этой теме )

  7. 6 September 2011 в 14:45 | #7

    Здравствуйте.
    Отправная точка для всех действий, связанных с регистрацией в программе iOS Developer, а также публикацией своих приложений в AppStore является сайт http://developer.apple.com
    Все, что не входит в домен apple.com (кроме сервисов Apple типа me.com, icloud.com etc) не имеют отношения к Apple – избегайте их))
    Конкретно для начала регистрации в программе iOS Developer нужно зайти по ссылке http://developer.apple.com/programs/ios/ и нажать кнопку Enroll Now
    Язык общения – английский, но мне лично пришлось в живую общаться только один раз при получении EIN, а эту процедуру сейчас упразднили. Несколько раз приходилось общаться в саппортом по емэйлу. Если все делать предельно осторожно, разговаривать не придется.
    Если проделать все шаги из этой статьи, то вы получите статус iOS Developer, что позволит публиковать приложения в AppStore, а также получать техническую поддержку специалистов Apple, и еще много всего другого (например, получать новые версии SDK, когда они еще официально не выпущены)
    Про продвижение – это вы правильно сказали. Я планировал описывать этот процесс у себя в блоге, но, к сожалению, пока что до него руки не дошли из-за отсутствия времени(( Но я не теряю надежды заняться этим в ближайшее время.
    Мое первое платное приложение было неделю в топе, и неплохо продавалось. Потом оно сползло вниз в виду появления новых приложений, и продажи упали.
    Третье бесплатное приложение в первые пару месяцев активно скачивались – в среднем 100 загрузок в день. Сейчас, спустя почти год, ежедневно около 8 закачек.
    Это я к тому, что даже без продвижения аудитория у AppStore настолько велика, что даже аутсайдеры имеют свой процент продаж.
    Можно обратиться к дельцам, которые за процент занимаются продвижением, можно вообще к паблишерам, в таком случае можно вообще не регистрироваться в iOS Developer Program.
    Успех обязательно будет, если вы трудолюбивы и уперты.

    Терпение и труд все перетрут.
    Без труда не вытянешь и рыбку из пруда.
    Сделал дело гуляй смело.
    Труд из обезьяны сделал человека.
    Работа не волк … ой, а вот это не надо ;))

  8. Анна
    9 September 2011 в 11:44 | #8

    Благодарю Вас за исчерпывающий ответ. В частности интересует еще вот что: как обратить внимание Apple на твое приложение и получить предложение от Apple чтобы последний стал издателем твоего приложения? Насколько это реально сделать самостоятельно или же с помощью паблишеров? Не подскажете контакты таких знающих людей?

  9. 9 September 2011 в 14:18 | #9

    Шансы обратить внимание Apple к своему приложению практически равны нулю. Apple не занимается публикацией third-party приложений – им и своих хватает.
    Создать приложение и опубликовать его самостоятельно – задача более чем реальная. Контактов паблишеров, к сожалению, не подскажу, ибо никогда не задумывался даже к ним обращаться – публикую сам. Сейчас по большей части для портфолио, но все же надеюсь когда-то создать что-нибудь грандиозное, что порвет весь AppStore)) Все разработчики на это надеются.

  10. Анна
    9 September 2011 в 14:53 | #10

    Спасибо огромное!!! )) Надеюсь о Вас еще услышать )

  11. 26 September 2011 в 11:25 | #11

    Спасибо за полезный пост, так как разобраться со всеми сертификатами и подписями весьма непросто. Есть вопрос по разшариванию сертификата между девелоперами, входящими в команду и использующими один девелоперский аккаунт на Apple. Понятное дело, что можно скопировать приватный ключ на все машины. Но может есть другой, более элегантный способ?

  12. 26 September 2011 в 13:52 | #12

    n ite_man:
    Если вы регистрировались, как индивидуал, то, пожалуй, более изящного способа нет. Но можно зарегистрироваться, как компания. Тогда у каждого девелопера будет свой сертификат, но все запросы (на публикацию, обновление и т.д.) будут проходить через team lead'a. Я, к сожалению, в виду ненадобности, не занимался пока этим. Когда будет своя команда, обязательно опишу этот процесс (:

    P.s. Интересный у вас блог. Тоже подумывал этим заняться. Начать хотя бы с софта для управления домашним компьютером. Ну там, например, чтоб с айфона можно было громкость прибавить, баланс, кино зарядить и все в таком роде. Искал в AppStore – как то все печально.
    Сейчас пользуюсь тоже собственным решением, основанным на usb IR-приемнике, который представляет собой HID-клавиатуру, и собственноручно написанной прогой, которая перехватывает комбинации клавиш, генерируемые приемником, и соответственно реагируя на них. Пока хватает, могу управлять Media Player Classic, Winamp, громкостью, балансом и монитор гасить))

  13. master
    10 November 2011 в 01:12 | #13

    Здравствуйте. Мы с приятелем готовимся опубликовать приложение. У нас уже есть оплаченный индивидуальный девелоперский аккаунт, но встал вопрос, что будет указано в графе «developer». Правильно ли я понимаю, что будут указаны имя и фамилия того, на кого зарегистрирован аккаунт? Можно ли это изменить? Можно ли указать двух человек или просто нейтральное словосочетание, типа название фирмы (хотя самой фирмы не существует)? Что бы вы посоветовали в этом случае, чтобы на странице приложения в аппсторе информация о производителе была справедливой в отношении каждого из нас?

  14. 11 November 2011 в 10:47 | #14

    Привет. Да, ситуация не из простых.
    Если индивидуальный аккаунт зарегали, то в поле Продавец будет светиться то имя, на которое зареган аккаунт. Есть еще два ваианта, где можно попробовать указать обоих. Первое – поле copyright. Это при заполнении meta информации о приложении. Ну и второе – это скриннэйм. Оно вроде заполняется один раз при регистрации аккаунта.

  15. Сергей
    13 November 2011 в 02:30 | #15

    привет.

    спасибо за статью, помогла окончательно понять «что-к-чему».

    кстати, если я правильно все понял, после выхода iOS 5 немного изменились требования к загрузке на проверку в appstore.
    у меня например приложение не загружается, если в .plist нет ключа UINewsstandapp установленного в «true». И соответствующей настройки в iTunes Connect раздела «Newsstand».

  16. 13 November 2011 в 12:04 | #16

    Привет. Как я уже и упоминал, подобная информация быстро устаревает, это ествественный процесс, система развивается и совершенствуется. Сейчас планирую написать статью, как готовить приложение к публикации в xCode 4 – там все немного по-другому. Как раз готов очередной материал к публикации, думаю, будет самому полезно на будущее описать весь процесс.
    Под iOS 5 пока ничего не кодил, поэтому не сталкивался с нюансами. Как столкнусь, обязательно опишу))

  17. Сергей
    14 November 2011 в 00:01 | #17

    @heximal

    былоб здорово ! спасибо.

  18. Сергей
    19 November 2011 в 00:28 | #18

    @Сергей

    я ошибся немного… UINewsstandapp может быть в false , но .plist не должно быть CFBoundleIcon.
    вот тут с картинками: http://stackoverflow.com/questions/6977357/xcode-gave-strange-newsstand-error-when-trying-to-submit-an-app

  19. Ян
    28 November 2012 в 23:56 | #19

    Отличная статья. Сохранил в закладках. Спасибо.

  20. Maxim
    20 February 2013 в 20:21 | #20

    Добрый день. Еще не публиковал приложение, но есть вопрос (чертовски любознательный с детства).
    Подскажите, пожалуйста, если я хочу назначить цену своему приложению, то куда будут поступать деньги за продажи?
    Нужен расчетно-кассовый счет? Объясните немного порядок.

    Заранее спасибо!

  21. 20 February 2013 в 23:03 | #21

    Добрый.
    Чтобы назначить цену на приложение, нужно будет оформить так называемый iOS Paid Applications Contract – он заключается онлайн на портале itunesconnect.apple.com.
    Там нужно будет указать свои банковские реквизиты, куда в последствие будут начисляться выплаты.
    Помню для меня это было самым тяжелым испытанием. Особенно поиск международного идентификационного кода моего банка.

iOS App Store Submission Checklist https://ontestpad.com/library/201/ios-app-store-submission-checklist

https://ontestpad.com/library/201/ios-app-store-submission-checklist

А вот здесь - требования, чеклисты для Гуглплея : 

iOS App Store Submission Checklist

0001
Your app...
0003
Does not simulate a failure (e.g. crash or cracked screen)
0004
Remains responsive after long/excessive usage
0005
Does not hardcode any price information inside the app
0006
Does not make use of any private APIs in the SDK
0007
Does not make use of any undocumented features in the SDK
0008
Does not refer to hardware capabilities which don't exist on the users device
0009
Warns the user when there is no network connectivity, if it needs a connection
0010
Does not resemble (too closely) any native apps
0011
Does not replicate (too closely) the functionality of a native app
0012
Does not expire (stop working) after a certain time or number of runs
0013
Does not use any unapproved hardware accessories
0014
Does not contain contain racist material, prolonged graphic violence, graphic sexual content or nudity
0015
Does not "accidentally" contain such material, e.g. unrestricted web browsing, explicit lyrics, unfiltered collections of books
0016
Does not ridicule well-known public figures, past or present
0017
Does not contain a scripting interpreter, plugin or other runtime that can execute downloaded content
0018
Does not use continuous vibration
0019
Uses the relevant keyboard per input field (e.g. numbers for a phone number field)
0020
Deselects rows in table views after their selection causes another view to be displayed
0021
Restricts video streaming or other big downloads to WiFi connections only
0022
Makes clear to the user when private data will be sent to a server, and provides an opt-out
0023
Does not make covert or non-obvious use of the camera or microphone
0024
Uses Core Location (GPS) for a real user benefit, not just advertising or tracking (if applicable)
0002
Never crashes
0025
Conforms to Apple's Human Interface Guidelines
0026
// you should really use the document itself and check every section, the following are some common mistakes
0027
App looks well designed and of high quality
0028
Native button icons are consistent with their native actions
0029
Activity spinners must not spin indefinitely
0030
Buttons trigger on touch-up
0031
Screen layout can handle the double-height status bar (e.g. during phone call)
0032
App state is saved when stopping the app and restored on next start
0033
Landscape mode, if supported, looks well designed (i.e. is not accidental and bad)
0034
iPad specific
0035
Your app should work in all four orientations, but if only portrait or landscape, must support both ways up
0036
Your app doesn't nest popovers, i.e. selecting something on a popover should not display another popover
0079
Your app doesn't show more than one popover at a time
0037
Submission package details
0038
The name of your app (in the binary package) matches (or is abbreviated version of) the iTunes name
0039
Your iTunes description accurately describes the functionality of the app, i.e. it works as advertised
0040
Your iTunes description does not contain the price
0074
Your iTunes description (and the binary) do not include the names of any competing platforms (e.g. Android, Blackberry)
0076
Your iTunes description does not mention unreleased iOS version numbers
0041
Your iTunes keywords match the functionality of the app
0042
Your iTunes keywords do not contain the names of other apps
0077
If your app's price is over $100 or has in-app purchases over $100, it is rated 17+
0043
The screenshots do not include error states, including iAd errors
0044
The categories the app is in match its functionality
0045
Any easter eggs in the app are innocuous and are disclosed in the 'demo account' field
0046
Icons are provided for each of the sizes: 57, 72 (if on iPad), 114 and 512 pixels
0047
The different sizes of icon all contain the same artwork
0048
Version number (bundle version number) is >= 1.0
0049
The required-device-capabilities entry in the info.plist file match the requirements of the app
0050
Your app matches your claimed OS version compatibility
0078
NSZombieEnabled is set to NO
0083
App IP configured correctly (and signed) for
0084
iCloud enabled/disabled, with correct entitlments if enabled
0085
push notifications, with correct entitlements (for production) if enabled
0086
In App purchasing enabled/disabled
0087
Game Center enabled/disabled
0088
When updating
0051
Your iTunes "What's New" description accurately matches the changes to your app
0052
The updates to your app are real and detectable
0053
Version number is greater than the previous version number
0054
Miscellaneous
0055
The app has a reasonably sized market, i.e. is not a tiny niche or for a private audience
0056
There are no greyed out buttons or features in your app to do with a future release
0057
Lite versions of apps must not be unusably restricted; they have to "work" as is
0058
Lite versions of apps cannot be time limited
0059
Lite versions must not display the price of the full version
0060
Webpages loaded by the app, that are part of the app itself, are online and working
0071
Any associated email addresses exist and are working
0061
All (paid) app upgrades and other transactions use the App Store
0062
The app is not a simple browser window onto a website
0063
The app conforms to any regulatory requirements, e.g. if the app is medical in nature, or contains contests with prizes
0090
If relevant, official rules for sweepstakes and contests are presented in the app
0091
If relevant, the app makes it clear that Apple is not a sponsor or involved with any sweepstakes, contests or their prizes
0072
If you use encryption, you have registered with BIS and can provide documentation
0073
If your app requires signing in, you have provided test account
0075
If your app uses MapKit, it does not hide or obscure the Google logo
0080
If using the camera, your app doesn't disable the shutter sound
0089
Any references to Apple's products or apps are spelled correctly
0064
Copyright, trademark, ownership
0065
You can prove you own (or have permission to use) all the code in your app
0066
You can prove you own (or have permission to use) all the artwork in your app
0067
You can prove you have permission to use any brand names, names of public figures or other trademarked material
0068
e.g. Images and icons are not framed with a "polaroid" style (thicker at the bottom) border
0069
e.g. Images and icons do not include iPhones or other Apple products
0070
You can prove you own (or have permission to use) any videos, music or lyrics in your app