субота, 9 серпня 2014 р.

Тестируем iOS приложения без Apple Developer Program Membership

Мне было интересно попробовать написать приложение для iOS, чисто в познавательных целях, но 99 USD платить Apple за «любознательность» не очень то и хотелось. Не отчаивайтесь, для таких как мы есть способы и запустить приложение и отладить его на целевом устройстве.
После курения доков и разного рода экспериментов у меня получилось.

Вот ссылки, которые помогли больше всего:


Итак, версии софта, которые я использовал:
  • OS X Mavericks 10.9.4
  • Xcode 5.1.1
  • iOS 7.1.2


Итак, что же потребуется для «любознательности»? Всего то:
  1. Заджейлить наше iOS устройство
  2. Подготовить iOS к установке само-подписанных приложений
  3. Подсоединить iOS к Xcode и настроить девайс для разработки
  4. Создать свой сертификат
  5. Настроить Xcode для использования само-подписанного сертификата
  6. Настроить Xcode для отладки на целевом устройстве


1. Джейлим iOS


Тут в общем всё просто. На данный момент прошивка, поддающаяся взлому 7.1.2. Все остальное можно почерпнуть с сайта appstudio.org в энциклопедии джейлбрейка.
Если нет взломанного устройства — то закрываем данный туториал и платим 99 USD Apple.

2. Подготавливаем наше iOS устройство к установке само-подписанных приложений


Довольно известный факт, что того чтобы ставить само-подписанный приложения (суть взломанные) необходимо установить в Cydia так называемый AppSync. Я ставил AppSync из AppAddict.org репозитория — http://cydia.appaddict.org.

Если же ничего не получилось, то Xcode выдаст примерно следующее:
xcode_no_code_signature


3. Подключаем и настраиваем наше iOS устройство к Xcode


  1. Запускаем Xcode
  2. Цепляем iOS устройство к USB
  3. Открываем Organizer (Window\Organizer)
  4. Выбираем подключенное устройство
  5. Жмем «Use for development»
  6. Скорее всего Xcode попытается подключиться к серверу Apple и проверить наличие аккаунта разработчика, если так — жмем Cancel

Всё, наше устройство теперь при подключении всегда будет распознаваться как использующееся для разработки.

4. Создаем сертификат разработчика


  1. Запускаем приложение «Keychain Access»
  2. Меню «Certification Assistant > Create a Certificate»
    keychain_new_certificate
  3. На первой страничке заполним данные и жмем «Continue».
    keychain_new_certificate_iphone
    • Name: iOS Developer
    • Identify Type: Self Signed Root
    • Certification Type: Code Signing
    • Отмечаем галочку «Let me override defaults»

  4. Жмем «Continue» для создания сертификата.
  5. Изменяем «Validity Period» например на 3650 — это 10 лет срока действия, жмем «Continue».
  6. Оставляем поле «Email address» пустым и жмем «Continue».
  7. Оставляем значения по умолчанию в полях «Key Size» и «Algorithm», жмем «Continue».
  8. Жмем «Continue» на всех следующих страницах, пока не появится окошко с кнопкой «Create».
  9. Жмем «Create» и «Done» соответственно.


5. Настраиваем Xcode для использования само-подписанного сертификата


  1. Закрываем Xcode, если он открыт.
  2. Открываем 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
    
  3. Открываем Xcode
  4. Открываем или создаем проект iOS из шаблонов (например, «Single-View Application»)
    xcode_new_project_ios_single_view
    xcode_new_project_ios_single_view_testapp
  5. Идем в настройки проекта, в закладку «Build settings». Выбираем в поле «Code Signing Identity» созданный сертификат:
    xcode_code_signing_identity
  6. Около кнопки «Run» выбираем наше подключенное iOS устройство.
  7. Жмем «Run» и Xcode транслирует исходники в исполняемый файл и загружает его в устройство.
  8. Далее Xcode показывает нам следующую ошибку, что не удалось запустить приложение в режиме отладки (мы позаботимся об этом на следующем шаге):
    xcode_run_debug_failed

  9. Само приложение можно уже запустить на устройстве в ручном режиме, выбрав приложение на главном экране.


6. Настраиваем Xcode для отладки приложения на целевом устройстве


  1. Закрыть Xcode, если он открыт.
  2. Получить утилиту ldid и разместить ее в /usr/local/bin (может быть и другой каталог, но шаги ниже предусматривают этот путь).
    1. Скомпилировать из исходников. Для этого ввести в терминале:
      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
      
    2. Скачать уже скомпилированный файл. Например, здесь в zip-архиве.
  3. Создаём файл /usb/local/bin/ldid3.py с содержимым (или берем готовый из того же zip-архива):
    #!/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("""
    
    
      
        get-task-allow
        
      
    
            """)
            f.flush()
            check_call([ldid_path, '-S' + f.name, obj_path])
    
  4. Делаем ldid и ldid3.py запускаемыми:
    sudo chmod +x /usr/local/bin/ldid
    sudo chmod +x /usr/local/bin/ldid3.py
    
  5. Обновляем файл конфигурации 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
    
  6. Открываем Xcode
  7. Теперь, чтобы включить отладку, нам необходимо добавить ключик "-gta" в командную строку утилиты codesign, предыдущим шагом мы её заменили на наш ldid3.py (обратите внимание на проверку "-gta" в скриптовом файле ldid3.py)
    xcode_other_code_signing_flags
  8. Собираем приложение и запускаем на целевом iOS устройстве.


Надеюсь данное руководство поможет начинающим программистам iOS просто и незатейливо попробовать свои силы в написании программ для устройств Apple.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments