Тестируем iOS приложения без Apple Developer Program Membership
Мне было интересно попробовать написать приложение для iOS, чисто в познавательных целях, но 99USD платить Apple за «любознательность» не очень то и хотелось. Не отчаивайтесь, для таких как мы есть способы и запустить приложение и отладить его на целевом устройстве.После курения доков и разного рода экспериментов у меня получилось. К счастью однажы я сохранил туториал с одной странички, но откуда, уже вряд ли найду, поэтому это можно считать переводом. Ну и плюс дополнил от себя.Итак, версии софта, которые я использовал:
OS X Mavericks 10.9.2 Xcode 5.1.1 iOS 6.1.2 iPhone 4 iOS 7.0. iPad mini Итак, что же потребуется для «любознательности»? Всего то:
Заджейлить наше iOS устройство Подготовить iOS к установке само-подписанных приложений Подсоединить iOS к Xcode и настроить девайс для разработки Создать свой сертификат Настроить Xcode для использования само-подписанного сертификата Настроить Xcode для отладки на целевом устройстве Джейлим iOSТут в общем всё просто. На данный момент прошивка, поддающаяся взлому 7.0.6. Все остальное можно почерпнуть с сайта evasi0n.Если нет взломанного устройства — то закрываем данный туториал и платим 99USD Apple.Подготавливаем наше iOS устройство к установке само-подписанных приложений Довольно известный факт, что того чтобы ставить само-подписанный приложения (суть взломанные) необходимо установить в Cydia так называемый AppSync. Я ставил AppSync из нашенского русского репозитория smolk — http://smolk.myrepospace.com. Насколько я наблюдал за этим репозиторем, Smolk сам пишет/тырит AppSync и выкладывает его одним из первых, поэтому и рекомендую воспользоваться его трудами.Если же ничего не получилось, то Xcode выдаст примерно следующее:
Подключаем и настраиваем наше iOS устройство к Xcode Запускаем Xcode Цепляем iOS устройство к USB Открываем Organizer (Window\Organizer) Выбираем подключенное устройство Жмем «Use for development» Скорее всего Xcode попытается подключиться к серверу Apple и проверить наличие аккаунта разработчика, если так — жмем Cancel Всё, наше устройство теперь при подключении всегда будет распознаваться как использующееся для разработки.Создаем сертификат разработчика Запускаем приложение «Keychain Access» Меню «Certification Assistant > Create a Certificate» На первой страничке заполним данные и жмем «Continue».Name: iOS Developer Identify Type: Self Signed Root Certification Type: Code Signing Отмечаем галочку «Let me override defaults» Жмем «Continue» для создания сертификата. Изменяем «Validity Period» например на 3650 — это 10 лет срока действия, жмем «Continue». Оставляем поле «Email address» пустым и жмем «Continue». Оставляем занчения по умолчанию в полях «Key Size» и «Algorithm», жмем «Continue». Жмем «Continue» на всех следующих страницах, пока не появится окошко с кнопкой «Create». Жмем «Create» и «Done» соответственно. Настраиваем Xcode для использования само-подписанного сертификата Закрываем Xcode, если он открыт. Открываем Terminal cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform # create copy of Info.plist sudo cp -p Info.plist Info.plist.orig # convert to editable xml format sudo plutil -convert xml1 ./Info.plist # replace each occurrence of XCiPhoneOSCodeSignContext with XCCodeSignContext in Info.plist sudo sed -i .bkup 's/XCiPhoneOSCodeSignContext/XCCodeSignContext/g' ./Info.plist Открываем Xcode Открываем или создаем проект и идем в настройки проекта, в закладку «Build settings». Выбираем в поле «Code Signing Identity» созданный сертификат: Около кнопки «Run» выбираем наше подключенное iOS устройтсво. Жмем «Run» и Xcode транслирует исходники в исполняемый файл и загружает его в устройсво. Далее Xcode показывает нам следующую ошибку: Так и должно быть, потому что отладчик мы еще не настроили, но само приложение можно уже запускать на устройстве. Настраиваем Xcode для отладки приложения на целевом устройстве Компилируем ldid Если не стоит GIT, устанавливаем отсюда Далее в терминале: cd ~/Documents git clone git://git.saurik.com/ldid.git cd ldid git clone git://git.saurik.com/minimal.git ./make.sh sudo mkdir /usr/local/bin sudo cp ldid /usr/local/bin Создаём файл /usb/local/bin/ldid3.py с содержимым: #!/usr/bin/env python
from sys import argv from subprocess import check_call from os.path import basename, dirname, splitext, join from tempfile import NamedTemporaryFile
app = argv[-1] ldid_path = join (dirname (__file__), 'ldid') obj_path = join (app, splitext (basename (app))[0])
if '-gta' not in argv:
check_call ([ldid_path, '-S', obj_path])
else:
with NamedTemporaryFile ('w+b', 0) as f:
f.write (»«