Разработка на XCode 6 под iOS 8 для jailbroken устройств без сертификата разработчика, или хобби должно быть бесплатным.

Начиная с Xcode 7, все это более не нужно, ни jailbreak, ни платный аккаунт.
http://severe-programmer.com/manual/testirovanie-ios-programm-na-iphoneipad-bez-platnogo-akkaunta-i-jailbreak/

Когда знакомые узнают, что у меня на всех устройствах сделан jailbreak, но при этом я не пользуюсь спираченным софтом, — они обычно очень удивляются. Так уж повелось, что jailbreak стал синонимом пиратства, но это не всегда верно, кому то нужны твики из cydia, мне же нужно разрабатывать полезные утилиты и запускать их на своих же устройствах не выплачивая ежегодные 99$ компании Apple. По мне так это свинство — требовать с человека купившего устройство за немалую сумму еще и выплачивать мзду за то, чтобы на нем что то запускать своё. Одно дело — за возможность продавать программы, но.. Ладно, не мне судить. Вернемся к нашим баранам.

На руках должно быть устройство для которого сделан jailbreak, и на который установлен из Cydia или напрямую Appsync (для ios 8 был разработан благодаря Karen aka angelXwind. Обсуждение здесь, сам репозитарий). Как джейлить и ставить твик рассказывать не буду, сама проблема отладки на устройстве подразумевает соответствующий уровень подготовки читателя.

До выхода XCode 6 работал способ с созданием сертификата iPhone Developer, сейчас в этом необходимость отпала, в результате исследования родился этот мануал. Более того я нашел на хабре второй способ, какой выбрать решать вам.

Итак, откроем XCode 6 и создадим проект с дефолтными настройками, назовем его fakeSign

1 - create

Уже при попытке сделать build (даже до отправки на устройство) XCode нам говорит, что неплохо бы прикрепить идентификатор разработчика. Эх, был бы он..

2 - sign error

Посмотрим настройки проекта, они в данный момент должны выглядеть как то так

3 - default settings

Для обоих подходов первые 4 шага идентичны.

1) Закрываем XCode.

2) Открываем Terminal, бекапим и изменяем SDKSettings.plist

3) Открываем сконвертированный SDKSettings.plist на редактирование (для совсем начинающих — чтобы просмотреть внутренности XCode.app т.к. это на самом деле обычная папка, — нужно кликнуть правой кнопкой мыши по XCode.app и выбрать Показать содержимое пакета, ну и дальше по папкам, по папкам переходим куда надо)

4) проставлем
YES для AD_HOC_CODE_SIGNING_ALLOWED
NO для CODE_SIGNING_REQUIRED

4 - ad hoc

сохраняем файл.

С этого момента пошла разница, мой подход я опишу первым, он чуть более сложный, гипотетически что то может сломаться (если сменятся пути или формат файла iPhoneCodeSign), зато после после применения моего подхода для каждого нового проекту нужно будет только менять Code Signing Identity на Ad Hoc Code Sign. А второй способ проще изначально, но требует для каждого нового проекта ручками прикреплять файл с entitlements и прописывать его в проекте.
Какой путь выбрать — решать вам.

Способ хардкорный:

5) Создаем по пути /usr/local/bin/fsign.py питоновский скрипт с таким содержимым

По сути этот скрипт вызывает утилиту для подписи от Apple с временно созданным файлом Entitlement

6) Открываем Terminal, бекапим и изменяем iPhoneCodeSign.xcspec, чтобы подпись производилась нашим скриптом а не напрямую через codesign

Здесь надо быть аккуратным, в более ранних версиях XCode было указано не codesign, а /usr/bin/codesign, и автозамена вышеприведенным скриптом бы не отработала. Поэтому укажу как файл должен выглядеть после замены

13 - fsign

7) Открываем XCode. После произведенных изменений (в шаге 4) нам стал доступен на выбор Ad Hoc Code Sign

7 - new ad hoc

6)
Выбираем для Debug и Release — Ad Hoc Code Sign

6 - choose ad hoc

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

А теперь альтернативный вариант взятый с хабра

5) Открываем XCode. После произведенных изменений нам стал доступен на выбор Ad Hoc Code Sign

7 - new ad hoc

6)
Выбираем для Debug и Release — Ad Hoc Code Sign

6 - choose ad hoc

7) Пытаемся теперь запустить наш тестовый проект на устройстве, программа успешно отсылается на устройство, но тут же падает. Т.е. отладить не получится, но если запустить вручную уже на устройстве — само приложение будет работать.

8 - debug error

А эти действия надо будет выполнять для каждой новой программы, в этом минус подхода.

1) Выбираем в настройках проекта для Debug и Release — Ad Hoc Code Sign. Мы это уже сделали, но если позже вернетесь к мануалу при создании нового проекта — чтобы не забыли

2) Создаем Property List (⌘ + N или через меню File -> New -> File…)

9 - create property list

3) С именем Entitlements.plist

10 - name entitlements

4) Открываем его и добавляем поле Can be debugged со значением YES
12 - change entitlements

5) В настройках проекта указываем этот файл как Entitlements

11 - choose entitlements

Но здесь один нюанс, у меня XCode не смог найти этот файл и выдавал ошибку

error: The file “Entitlements.plist” couldn’t be opened because there is no such file.

Так что я глянул свойства этого файла в XCode, выбрал Location — «Relative To Project», у меня получилось fakeSign/Entitlements.plist, и указал этот путь вместо Entitlements.plist. Полагаю проблема в том, что файл я создал внутри папки fakeSign а не на самом верху проекта. Но если кто то так же ошибется, — имейте ввиду.

14 - see path

6) Запускаем проект и вновь радуемся.

Хочу отметить, что после того, как я в первый раз все настроил, — на второй день программы перестали запускаться на устройствах с какими то дикими ошибками. Т.к. проблемы были на обоих устройствах, я списал все на XCode и потратил полдня на ковыряние. А потом перезагрузил одно из устройств и долго и витеевато выражал свои мысли облачая их в многоэтажные конструкции. Видимо Appsync все же сыроват, и каким то образом проглючил на обоих устройствах одновременно. Так что если что то пойдет не так — не поленитесь лишний раз рестартнуть свое устройство, можете сэкономить время и нервы.

И еще важный момент, не забывайте, что при назначении каких то свойств проекту — можно их переназначить конкретному Target‘у, и забыть об этом, а потом менять свойство проекту и удивляться почему ничего не работает.

7 thoughts on “Разработка на XCode 6 под iOS 8 для jailbroken устройств без сертификата разработчика, или хобби должно быть бесплатным.

    1. Денис

      Исправил права с помощью chmod\перемещал файл в другое место. При этом наблюдаю новую ошибку:

      unknown exception
      Traceback (most recent call last):
      File «/Users/den/Documents/fsign.py», line 18, in
      check_call([‘codesign’, ‘—force’, ‘—sign’, ‘-‘, ‘—entitlements’, f.name, obj_path])
      File «/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py», line 540, in check_call
      raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command ‘[‘codesign’, ‘—force’, ‘—sign’, ‘-‘, ‘—entitlements’, ‘/var/folders/v2/3jw2460j579gn9vs5r4q7cl00000gn/T/tmpxWblh8’, ‘/Users/den/Library/Developer/Xcode/DerivedData/crackedApp-ezbyqhhsmkfxeafzgbfcpyfupmua/Build/Products/Debug-iphoneos/crackedApp.app/crackedApp’]’ returned non-zero exit status 1
      Command /Users/den/Documents/fsign.py failed with exit code 1

          1. Администратор Автор записи

            Я отредактирвоал скрипт fsign.py, оказывается при написании wordpress откусил кусок с doctype, сейчас вроде все должно быть ок, проверьте пожалуйста.

  1. Алексей

    Работает, но теперь новая ошибка, хотя это наверное мой косяк при сборке:

    Apr 29 23:56:24 iPhone-macbook splashboardd[15566] : *** Assertion failure in -[UINib initWithNibName:directory:bundle:], /SourceCache/UIKit/UIKit-3318.16.14/UINib.m:98
    Apr 29 23:56:24 iPhone-macbook splashboardd[15566] : *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Invalid parameter not satisfying: (name != nil) && ([name length] > 0)’

    1. Администратор Автор записи

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *