Развертывание приложений iOS в /Applications из XCode с помощью сценария фазы сборки? (взломанный)

Я разрабатываю приложение Cydia. Он находился в разработке некоторое время, и у меня никогда не было проблем до недавнего времени, когда я возобновил разработку через несколько месяцев. Есть пара вещей, которые изменились с тех пор, как я работал над ним в последний раз:

  1. Обновлен до Льва
  2. Перешел на Xcode 4
  3. Обновлен до 4.3.5 на моем iPad, iPhone до 5.0

Проведя исследование, я пришел к выводу, что в моей старой установке было что-то «необычное». Я обнаружил, что подготовленные приложения помещаются в "песочницу" /private/var/mobile/Applications, а системные приложения, которые получают доступ для чтения ко всей файловой системе, помещаются в /Applications. Я предполагаю, что с помощью обновленных инструментов и Lion я сломал все, что давало мне общесистемные привилегии чтения. Итак, мне нужна информация о том, как заставить Xcode развертываться непосредственно в системном каталоге без песочницы.

Однако есть некоторые предостережения. Я не хочу использовать установщик, я хочу, чтобы Xcode делал это автоматически после сборки и запуска. Я также хочу иметь возможность подключить отладчик, чтобы я мог просматривать консоль.

Может ли кто-нибудь с опытом в этом научить меня, как использовать сценарии фазы сборки, чтобы сделать необходимое волшебство, чтобы взять подписанный двоичный файл и автоматически развернуть его после каждой сборки? Я полагаю, что это действительно возможно, потому что консольный вывод — настолько ценный инструмент, что было бы слишком сложно разрабатывать такие приложения, как сама Cydia.

Спасибо за помощь!


person Justin    schedule 18.09.2011    source источник
comment
Это может помочь - stackoverflow.com /вопросы/4127147/   -  person Caffeinated    schedule 19.09.2011


Ответы (3)


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

Этап сборки — «Запустить скрипт» с /bin/sh, и я добавил «${PROJECT_DIR}/MyApp/install.sh».

Сценарии (очень простые - без обработки ошибок) приведены ниже (замените соответствующими значениями):

(LatestBuild — это ссылка на каталог сборки) (ldid устанавливается вместе с проектом iosopendev)

cd $HOME/Projects/iPhone/MyProject/MyApp
cp -r ../LatestBuild/MyApp.app com.test.MyApp/Applications/ 
ldid -S com.test.MyApp/Applications/MyApp.app/MyApp
rm com.test.MyApp.deb 2>&1
/opt/local/bin/dpkg-deb -b com.test.MyApp
scp com.test.MyApp.deb [email protected]:/var/root
ssh [email protected] "dpkg -r com.test.MyApp"
ssh [email protected] "dpkg -i com.test.MyApp.deb"
ssh [email protected] "killall -9 MyApp"
#ssh [email protected] "killall -HUP SpringBoard"
cd -

Его можно многое улучшить, но он просто работает для моих нужд.

person Sébastien Stormacq    schedule 26.08.2012

По общему мнению сообщества, это нежелательно. Система сборки, такая как Theos в сочетании с GDB на устройстве и либо пакетом системного журнала, либо deviceconsole — это то, что используют многие.

person rpetrich    schedule 29.09.2011
comment
Спасибо за внимание. Вы хорошо известны в сообществе побегов из тюрьмы, поэтому я доверяю вашему ответу. Вы так делаете свою работу? - person Justin; 29.09.2011
comment
Именно так я выполняю свою работу, да. Кроме того, я использую cycript для проведения некоторых экспериментов. - person rpetrich; 16.10.2011

Я не особенно хорошо разбираюсь в xcode, но, как и в большинстве IDE, я предполагаю в той или иной форме, что вы можете запустить сценарий после сборки, если вы можете понять, что это так же просто, как команда scp для загрузки оттуда вы можно использовать ldid -S nameofapp в каталоге, в который загружено приложение.

Вы можете, если хотите, чтобы ваше приложение находилось в /Applications, хотя обновление до 4.3.5, скорее всего, заставит вас использовать привязанный джейлбрейк. Я не знаю о непривязанном JB для 4.3.5, так что это проблема, если вам придется перезагружать.

Поскольку отладчики дают gdb (вы можете получить его из cydia), это действительно полезно :). Что я могу сделать, так это просто заставить xcode запустить скрипт после сборки, чтобы использовать scp для загрузки на ваше устройство, а затем подписать его вручную с помощью ldid, это самый простой способ, который я могу придумать, если у вас нет доступа к разработчику.

Дайте мне несколько минут. Я напишу скрипт и попытаюсь описать, как он работает. :)

Простой скрипт загрузки

#!/bin/bash
scp -r $1 $2@$3:$4

$1 is lets say your app folder ill use my dpatcher as an example

$2 is user name either mobile or root(if you upload as root you need to chmod permissions to 755)

$3 is your idevices local ip(ie your routers ip for it) 

вы можете найти свой IP-адрес с помощью sbsettings или, перейдя в настройки, нажмите синюю стрелку рядом с вашим AP, и он скажет вам.

$4 is where you want it to be most likely /Applications or /var/mobile/Applications

я назвал его upload.sh, но вы можете назвать его как угодно

Пример

upload.sh dpatcher.app [email protected] /Applications

Затем все, что вам нужно сделать, это подключиться по ssh и подписать его с помощью ldid -S nameofapp.

Если вы хотите загружать отдельные файлы, удалите -r, так как это для рекурсивной загрузки (т.е. папки)

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

Я не уверен, как интегрироваться с Xcode. Я делаю все с помощью vi, emacs или nano (и у меня нет Mac).

person Aquertu    schedule 04.10.2011