Миллионер из app store, не написавший ни строчки программного кода

Настройка аккаунта

Все приложения перед выгрузкой в App Store должны быть подписаны сертификатом разработчика. Это нужно, чтобы пользователи App Store были уверены, что скачивают конкретное приложение от конкретного разработчика, а не подделку от чужого имени. Процедура подписывания (code signing) приложения позволяет операционной системе узнать, кто является разработчиком. И удостовериться в том, что приложение не было изменено с момента сборки. Точнее, с того момента, как разработчик его подписал. В этой процедуре участвуют три объекта: сертификат разработчика, AppID и Provisioning profile.

Сертификат

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

Одного сертификата достаточно для выкладки неограниченного количества приложений.

Чтобы создать сертификат, нужно:

  • Выбрать тип сертификата Production — App Store and Ad Hoc
  • Следуя приведенным инструкциям сформировать Certificate request и загрузить его на портал

Сохраните сгенерированный сертификат на компьютер, откройте его (дважды кликнув). Сертификат будет помещен в системное хранилище и доступен для XCode.

AppID

Это уникальный строковый идентификатор приложения среди всех приложений. Он нужен для однозначной идентификации во всех системах: iTunes Connect, App Store и пр. Он состоит из двух частей: TeamID и BundleID. TeamID — идентификатор разработчика, выдается Apple на этапе регистрации аккаунта разработчика и не меняется. BundleID задается разработчиком при регистрации приложения в аккаунте.

Создадим его:

  • Перейдите в раздел AppIDs (ссылка), нажмите на плюсик справа вверху
  • Заполните поле App ID Description — условное наименование приложения для разработчика, не видимое в App Store, например TestApplication
  • Заполните поле Explicit App ID — тот самый BundleID, например ru.myStartup.testApplication
  • В разделе App Services подключите те сервисы, которые понадобились в процессе разработки приложения. Если вы не понимаете, о чем речь — оставьте как есть.

Provisioning profile

Это профиль, который однозначно связывает AppID и сертификат разработчика (публичный ключ сертификата). В случае development provisioning profile он также содержит UDID всех устройств, на которых возможен запуск приложения.

Создадим его:

  • Перейдите в раздел iOS Provisioning Profiles (ссылка), нажмите на плюсик справа вверху
  • Тип профайла — App Store
  • Затем необходимо указать AppID, для которого создается профайл — укажите раннее созданный AppID
  • Следующий шаг — выбор сертификата. Отметьте галочкой сертификат, который мы создали ранее
  • Последним шагом необходимо дать наименование профайлу, например, TestApplicationStoreProfile

Сохраните сгенерированный профайл на компьютер, откройте его, дважды кликнув. Теперь сертификат доступен для XCode.

Выкладываем приложение в App Store. Даже если вы не разработчик +21

  • 24.12.17 11:21


NiceMice

#345336

Хабрахабр


Tutorial

6300

Разработка под iOS, Xcode, Управление продуктом, Управление проектами, Блог компании Touch Instinct

Ранее писали про этап подготовки к релизу. Сейчас расскажем про публикацию приложения в AppStore. Пошаговый гайд будет полезен новичкам, которые до этого не сталкивались с полицией нравов из Купертино.

Для того чтобы выложить приложение в App Store, потребуется оплаченный аккаунт разработчика, среда разработки XCode и исходный код вашего приложения. Разобьем процесс на четыре этапа:

  1. Настройка аккаунта
  2. Оформление приложения для магазина
  3. Настройка проекта, сборка и выгрузка
  4. Отправка на ревью

Отправка на ревью

В iTunes Connect на вкладке Activity можно увидеть отправленную сборку. Для проектов на Swift автоматическая проверка сборки занимает примерно полчаса. До тех пор сборка будет со статусом Processing:

После окончания проверки сборка доступна для выбора на странице информации о версии приложения:

Выбираем сборку:

После этого у приложения в iTunes Connect появится иконка. Сохраните изменения. Теперь можно отправить сборку на ревью.

Готово! Вы сделали все, что могли. Ждите ответа в течение нескольких дней. Не забудьте, что с 23 по 27 декабря iTunes Connect на каникулах. Разработчики не смогут обновлять и добавлять новые приложения в App Store и изменять ценники. Все остальные функции iTunes Connect будут доступны.

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

Какой язык учить первым, зависит от того, что вы собираетесь делать. Например, если хотите устроиться в какую-нибудь компанию и поддерживать уже готовое приложение, то лучше начать с Objective-C, а потом приступить к изучению Swift. Неплохо знать и кросс-платформенные языки, но тоже исключительно для того, чтобы вы могли пофиксить баг или добавить новые функции.

Если же вы хотите работать над новыми проектами, то лучше сразу начинать со Swift. По данным с сайта Apple, приложения на Swift работают до 8,4 раз быстрее, чем на Python 2.7, и до 2,6 раз быстрее, чем на Objective-C.

Важный критерий — поддержка и постоянное обновление языка. В сентябре 2018 года (вместе с выходом iOS 12) вышла версия Swift 4.2, в которую добавили многое, чего не хватало раньше:

  • параллельная обработка данных (async/await);
  • поддержка регулярных выражений;
  • стабильная работа ABI со стандартными библиотеками.

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

Чтобы начать карьеру программиста, нужен багаж знаний о современных технологиях, языках и инструментах. Попробуйте пройти курс «Мобильный разработчик с нуля». На нем вы научитесь писать для разных платформ, а также пользоваться всеми основными инструментами мобильной разработки.

Курс «Мобильный разработчик с нуля»

На этом курсе вы научитесь создавать приложение под Android и iOS, а кроме этого получите полноценное портфолио разработчика.

  • Живая обратная связь с преподавателями
  • Неограниченный доступ к материалам курса
  • Стажировка в компаниях-партнёрах
  • Дипломный проект от реального заказчика
  • Гарантия трудоустройства в компании-партнёры для выпускников, защитивших дипломные работы

Разработка кросс-платформенных приложений

Как уже говорилось выше, создать приложение для iOS можно с помощью:

  • Python;
  • C;
  • C++;
  • C#;
  • Java.

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

Можно, конечно, оптимизировать код, но работать приложение все равно будет медленнее нативного. Чем больше функций должно быть в приложении, тем хуже оно будет функционировать, не говоря уже о бесконечных багах и уязвимостях.

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

Примеры кросс-платформенных приложений:

Настройка проекта, сборка и выгрузка

Откройте проект вашего приложения в XCode, перейдите к настройкам проекта. Необходимо, чтобы Bundle Identifier совпадал с BundleID, который вы указали при создании AppID. Также необходимо отключить функцию автоматического управления подписыванием в XCode. В выпадающем списке Provisioning Profile выберите тот, который недавно создали.

Обратите внимание: без всех необходимых иконок (в том числе иконка для магазина со стороной 1024 точки) сборка приложения не пройдет автоматическую проверку в iTunes Connect. Теперь проект можно собрать и отправить в iTunes Connect

Для этого нужно нажать меню Product — Archive. По итогу сборки будет показано окно органайзера XCode, нажмите там кнопку «Upload To App Store»:

Теперь проект можно собрать и отправить в iTunes Connect. Для этого нужно нажать меню Product — Archive. По итогу сборки будет показано окно органайзера XCode, нажмите там кнопку «Upload To App Store»:

Открывается окно настроек выгрузки в App Store. Подробнее про bitcode, symbols stripping. Оставляем настройки без изменений.

На следующем шаге нужно выбрать provisioning profile из выпадающего списка подходящих:

Затем XCode подготовит архив для выгрузки в iTunes Connect

На этом экране обратите внимание на те параметры, что мы установили. Нажмите Upload

В зависимости от скорости соединения нужно будет подождать некоторое время. Если все в порядке, XCode сообщит об успешном завершении выгрузки в iTunes Connect. Можно переходить к последнему этапу.

Сводки с полей

BioShock, Ghost Trick, Poker Night, Hector, Jurassic Park, Tales of Monkey Island, Back to the Future – подобные проекты-тяжеловесы в настоящее время проходят обязательную процедуру обновления. И потому в своей массе недоступны в App Store, а попытки запуска старых версий приложений под новой ОС чреваты курьезными проблемами со звуком и графикой. Но, к вящей радости геймеров, и Capcom, и 2K Games, и Telltale уже подтвердили планы по обязательной полной адаптации вышеуказанных приложений под iOS 9. Хотя в случае с Telltale червячок сомнения продолжает подтачивать моральные устои поклонников студии – в Интернете расползаются слухи о том, что из-за организационных трудностей компания намерена заморозить ряд игр в формате для версии iOS 8.4.

Шанс, по крайней мере, остается, чего не скажешь об игре Monster Hunter Freedom Unite. Текст на страничке приложения в App Store ясно дает понять, что обновления под iOS 9 можно не дожидаться. Выражение «пожалуйста, имейте это ввиду при обновлении ОС» служит вежливым прикрытием циничного факта – Capcom оставляет пользователей один на один с их проблемой. Apple, рано или поздно, но обязательно вынудит вас перейти на свежую версию мобильной яблочной системы и в этом отношении она абсолютно права.

Быть может, инцидент с Monster Hunter Freedom Unite, стоимостью не в символический доллар, а целых $14,99, единичен? Как бы не так – разделы App Store день ото дня полнятся сотнями гневных откликов от пользователей, осознавших глупость ситуации, в которой они оказались. Деньги потрачены, игра уже успела полюбиться, накоплено энное количество очков и достижений, игрок лелеет планы на будущее, но вот выходит «девятка» и в одночасье все обращается в цифровой мусор. А издатель с показной растерянностью просто умывает руки.

Charles Web Debugging Proxy

После 10 секунд появится основное окно:

Теперь немного о том, что эта программа, собственно, делает. А делает она следующее: она мониторит сеть и показывает какие запросы были отправлены и какие ответы были получены (да, это прокси). Однако для правильной работы нужно правильно выставить настройки прокси, но нас сейчас это не интересует.

Теперь открываем iTunes, в поиске AppStore вводим VK, жмем Enter, находим оф приложение от ВК и скачиваем его:

Достаточно загрузить процентов 10 от приложения, после чего смело отменяйте загрузку (выберите загрузку и нажмите на клавишу Delete):

Это нам нужно, чтобы Charles получил информацию. Открываем теперь его и видит примерно такое:

Фактически, он просто мониторит обычные POST/GET запросы и обрабатывает их содержимое в удобном для нас виде (запросы от Apple передаются, например, в xml синтаксисе)

Находим строчку (у меня это https://p45-buy.itunes.apple.com), раскрываем список и видим там .

Дело в том, что это зашифрованный запрос и по-умолчанию Charles не показывает такие запросы. Так что щелкаем правой кнопкой по строчке   и выбираем Enable SSL Proxying:

Далее снова повторяем фишку с загрузкой приложения (если у вас написано «Загружено», хотя вы отменили загрузку, то обновите страницу нажатием на заголовок приложения) и её последующей отмены (если не отменить, то придется удалять приложение, а это лишние телодвижения). Затем переходим обратно в Charles, раскрываем список и переходим по пути WebObjects — MZBuy.woa — wa — buyProduct. Далее щелкаем на buyProduct и в правом окне переходим в панель Response. Прокручиваем наш ответ от AppStore до строчки softwareVersionExternalIdentifiers:

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

Далее следуем по методу дихотомии (если выбранная нами версия выше, чем 2.0, то ниже по списку идти не нужно, она где-то выше и наоборот). Выбираем, например, номер 813678592. Сохраняем где-нибудь и, самое главное, теперь жмем правой кнопкой по buyProduct и выбираем пункт Breakpoints:

Далее у меня истекли 30 минут и программа выдала:

Так что мне пришлось заново проделывать все операции 🙂

В общем, установили мы брейкпоинт. Это означает, что перед отправкой запроса на скачку ПО программа этот запрос перехватит и не отправит, пока мы не скажем. Мы в этом запросе поменяем одну строчку (чтобы отправить запрос не для последней версии ПО, а нужной нам) и только после этого отправим. Снова скачиваем приложение и тут сразу появится окно Charles:

Меняем строчку номер 5 на 813678592 и жмем на кнопку Execute. После этого еще раз жмем на кнопку Execute и ждем когда приложение скачается. Смотрим версию скачанного нами приложения и видим:

Увы, мимо. Удаляем эту версию и пробуем другой номер. При этом стоит учитывать, что там, по всей видимости, есть какие-то промежуточные версии, которые не будут скачиваться, вместо них скачается последняя (на данный момент — это версия 2.8). И таким образом находим тот самый номер 166062632 (я его угадал с двух попыток 🙂 ):

На этом работа с Charles окончена и можно устанавливать приложение на ваше устройство. Только не забывайте, что старые версии могут несколько странно работать, особенно, если это приложения для социалок 🙂

При этом, если вам надоест слушать музыку, можете прямо на самом устройстве обновить приложение, как вы это обычно делаете. У меня таким образом стоит старая версия Mi Fit (1.6.2, номер 816329811, если кто пользуется браслетами Mi Band), в которой умный будильник еще жив.

Послесловие

Как-то так. Таким нехитрым способом можно установить практически любую версию практически любого приложения, т.к. многие разработчики оставили список версий для совместимости со старыми устройствами 🙂

Как и всегда, если есть какие-то вопросы, то добро пожаловать в комментарии к этой статье.

PS: За существование оной статьи отдельное спасибо другу проекта и члену нашей команды под ником “barn4k“.

Вина на самом деле лежит на Apple?

Купертиновскому онлайн-магазину не нужны не только мертворожденные проекты, но и те, что безнадежно застряли в прошлом. Если разработчик не в состоянии постоянно оказывать техподдержку приложения, не выпускает обновления хотя бы к смене версий iOS, такой продукт будет удаляться из истории покупок. Следующий шаг – окончательное выдворение из App Store, как это произошло с игрой Mass Effect: Infiltrator. Она оказалась в списке из 10 проектов, которые Electronic Arts решила вывести в тираж, о чем честно предупредила пользователей. Те из них, кто сохранил приложение в памяти своего гаджета, еще могут предаться ностальгии, но и только.

Если коммерческий проект, которым является каждая крупная игра в App Store, стал приносить больше хлопот и меньше выручки, то той же Capcom нет смысла действовать себе в ущерб. Капиталист не считает зазорным закрыть действующее предприятие, проигнорировав интересы сопричастных лиц, если некто в большом офисе просчитал, что это выгоднее, чем продолжать вести данный бизнес. В рассматриваемом случае – несомненно, ведь компания избавляется от прессинга со стороны Apple, высвобождает трудовые ресурсы и может сосредоточиться на чем-то более перспективном. Все конкуренты находятся в аналогичном положении, а бедолага-пользователь поскучает-поскучает, но никуда не денется и вновь придет в App Store с распахнутым кошельком.

Нативная разработка для iOS

Нативные приложения отлично работают без всяких костылей, потому что используются языки, которые подходят для конкретной платформы. В случае с iOS — Objective-C и Swift.

Objective-C

В 1980 году Брэд Кокс в своей компании Stepstone создал Objective-C — позже он стал основным языком разработки для устройств Apple. Objective-C — это компилируемый объектно-ориентированный язык программирования (ООП), основанный на C.

С помощью объектов решается проблема повторяемости кода. Но делается это не так топорно, как при структурном программировании, в котором увеличение объема и сложности программы снижает качество.

Основное отличие Objective-C от C++ (тоже поддерживает ООП и тоже был разработан в восьмидесятых годах) в том, что вызов метода в нем интерпретируется не как функция, а как сообщение — как в языке Smalltalk. Такие сообщения могут содержать что угодно, а отправить их можно куда потребуется.

Также объект может переслать часть полученного сообщения другому объекту (даже если он находится не на этом компьютере), что позволяет делегировать задачи — по такому же принципу работают нейросети.

Objective-C — компилируемый язык. Однако сообщения привязываются к функциям исключительно во время выполнения программы, что позволяет создавать динамичные приложения. Еще в языке поддерживаются протоколы и метаинформация.

Синтаксис здесь значительно отличается от синтаксиса C-подобных языков. Для сравнения:

вызов метода объекта в C#:

Object.Method(argument);

а это — отправка сообщения объекту на Objective-C:

;

Разница видна и в создании классов.

Objective-C:

#import «Rect.h» //Подключение библиотеки@implementation Rect //Объявление класса+ newRect //Инициализатор{Rect * rect = init];;;return rect;}//Методы, возвращающие значение переменной- (float) width{return width;}- (float) height{return height;}//Методы, задающие значение- (void) setWidth: (float) theWidth{width = theWidth;}- (void) setHeight: (float) theHeight{height = theHeight;}@end //Конец объявления

И пример на C#:

public class Rect //Объявление класса

{

private float width; //Создание переменных

private float height;

public Rect(int width, int height) //Инициализатор

{

this.width = width;

this.height = height;

}

public int Width { get; set; } //Методы для вывода и присваивания значений переменным

public int Height { get; set; }

}

К синтаксису Objective-C может быть сложно привыкнуть, если раньше вы писали на чем-то другом.

На Objective-C разработаны все приложения в AppStore, которые еще не перешли на Swift или не относятся к кросс-платформенным решениям.

Swift

Крис Латтнер, главный автор LLVM, вдохновившись Objective-C, Rust, Ruby, C#, Haskell и другими языками, в 2010 году начал разработку Swift, а в 2014-м уже выпустил первую версию.

Swift изначально заточен под операционные системы Apple, поэтому он производительнее и функциональнее, чем Objective-C, для работы с которым использовалась подключаемая runtime-библиотека. В 2015 году вышла версия 2.0, которая была еще быстрее, получила API для работы с ошибками и проверку доступности функций для целевых ОС. Актуальная версия на момент написания статьи — 4.2.

Синтаксис изменился, и теперь программы больше похожи на код C-подобных языков — с той лишь разницей, что после операций не ставится символ «;» (как тебе такое, ошибка компилятора?):

class Rect {var width: Int = 0var height: Int = 0
}

Обратите внимание, что инициализатора нет, так же как и методов для получения или присваивания значения переменным. Чтобы создать объект класса Rect, достаточно написать такой код:. var rect1: Rect = Rect()rect1.width = 5rect1.heigth = 5print(«Ширина: \(rec1.width); Высота: \(rect1.height)»)

var rect1: Rect = Rect()rect1.width = 5rect1.heigth = 5print(«Ширина: \(rec1.width); Высота: \(rect1.height)»)

Несмотря на то что языку всего четыре года (шутка про восьмилетний опыт программирования на Swift), его уже преподают во многих университетах, в том числе:

  • Мюнхенский технический университет;
  • Политехнический университет штата Калифорния;
  • Стэнфордский университет;
  • Skillbox.

Альтернативный подход

Если новая игрушка не запускается на старом устройстве – неприятно, но не удивительно. Когда разница между версиями одной платформы становится принципиальной, может потребоваться эмулятор для того, чтобы поиграть в древний хит под свежей ОС. Но ситуация, когда старое приложение недоступно для старой же системы, в которой прекрасно функционировало и радовало нас когда-то в прошлом, нонсенс. Рукотворный, из Купертино – актуальная политика бренда предписывает удалять из App Store старые версии софта по мере выхода новых.

С этим, к своему неудовольствию, столкнулась команда Tweetbot после выпуска 4-го поколения клиента для Twitter. У тех пользователей, которые установили обновление, по воле администрации яблочного магазина из истории покупок исчезли сведения о предыдущей версии приложения. В планы студии это никак не входило, поэтому пришлось проявить изобретательность и вернуть Tweetbot 3, разыскав искомую версию в сегменте App Store для региона Буркина-Фасо. Есть версия, что анекдотичный инцидент является следствием недоработки сервиса, но прагматичные игроделы склонны видеть в происходящем явный корпоративный умысел.

Сегменту премиум-игр для iOS пророчат непростые времена, так как студиям придется вкладывать массу усилий в разработку проектов, при этом не имея никакой возможности гарантировать пользователям, что через год все не развалится на ровном месте. Жаль вложенного труда, обидно за тех, кто расстался с $10-15 своих кровных – Лука Редвуд (Luca Redwood), автор игры «You Must Build A Boat», выложил в Dropbox зашифрованный вариант приложения. И поручил порталу Touch Arcade опубликовать ключик в случае, если программа исчезнет из App Store. Так как спрятана старая версия, это не решит проблему совместимости с новым поколением iOS, но игровых дел мастер хотя бы остается честен со своими клиентами. Оплачено – получите.

Ссылка на основную публикацию