Мне было интересно попробовать написать приложение для 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 (WindowOrganizer)
- Выбираем подключенное устройство
- Жмем «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(""" <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>get-task-allow</key> <true/> </dict> </plist> """) f.flush() check_call([ldid_path, '-S' + f.name, obj_path])
- Делаем ldid и ldid3.py запускаемыми:
sudo chmod +x /usr/local/bin/ldid sudo chmod +x /usr/local/bin/ldid3.py
Настраиваем Xcode
- Закрываем Xcode, если он открыт.
- Обновляем файл конфигурации iPhoneCodeSign.xcspec, для этого в терминале:
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications # create a backup copy of iPhoneCodeSign.xcspec sudo cp -p iPhoneCodeSign.xcspec iPhoneCodeSign.xcspec.orig # convert to editable xml format sudo plutil -convert xml1 iPhoneCodeSign.xcspec # replace codesign with /usr/local/bin/ldid3.py sudo sed -i .bkup 's/codesign//usr/local/bin/ldid3.py/g' iPhoneCodeSign.xcspec
- Открываем Xcode
- Теперь, чтобы включить отладку, нам необходимо добавить ключик "-gta" в командную строку утилиты codesign, предыдущим шагом мы её заменили на наш ldid3.py
- Собираем приложение и запускаем н целевом iOS устройстве.
Надеюсь данное руководство поможет начинающим программистам iOS просто и незатейливо попробовать свои силы в написании программ для устройств Apple.
Автор: mefikru