оригинал тут

Xcode Все ниже описанное предлагается для:

Jailbroken iPhone OS 3.1.2
Xcode версии 3.2.1, 64-разрядная
Mac OSX 10.6.2 Snow Leopard

(проверенно лично мной (bm), на другом софте не проверялось)

Цель: такая же как и для iPhone 3.0 и iPhone 2.2, чтобы иметь возможность компилировать в Xcode не подписанные приложения с возможностью запуска на телефоне. Более того, мы хотим иметь возможность отладки!

Аннотация: в отличии от старых методов (старые версии iPhone OS), в этот раз мы попытаемся сказать Xcode что он не нуждается в подписывании приложения для iPhone OS, и попытаемся подписывать приложения в конце компиляции при помощи скрипта, для возможности отладки.

Поехали:
1. открываем терминал и вводим:

1
2
3
cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk
cp SDKSettings.plist SDKSettings.plist.orig
nano SDKSettings.plist

Находим строчки (посик в nano осуществляется клавишами Ctrl+W):
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>

заменяем YES на NO

далее находим:
<key>ENTITLEMENTS_REQUIRED</key>
<string>YES</string>

заменяем YES на NO.

Нажимаем Ctrl+x затем Enter (выход из редактора nano)

2. После возвращения в терминал продолжаем:

1
2
3
cd /Developer/Platforms/iPhoneOS.platform/
cp Info.plist Info.plist.orig
vi Info.plist

находим:
<key>CODE_SIGN_CONTEXT_CLASS</key>
<string>XCiPhoneOSCodeSignContext</string>

заменяем XCiPhoneOSCodeSignContext на XCCodeSignContext
Нажимаем Ctrl+x затем Enter

3. А теперь будем патчить Xcode:

1
2
cd ~/Desktop
nano script

копируем и вставляем в терминал следущий код:

1
2
3
4
5
6
7
8
#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf "\xc3\x26\x00\x00" &gt;&gt; working
dd if=iPhoneOS\ Build\ System\ Support of=working bs=1 skip=127504 seek=127504
/bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
/bin/mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

сохраняем (Ctrl+x и Enter) и выполняем:

1
2
chmod 777 script
./script

Если все прошло успешно, то увидим:

1
2
3
4
5
6
255+0 records in
255+0 records out
127500 bytes transferred in 0.020355 secs (6263821 bytes/sec)
189216+0 records in
189216+0 records out
189216 bytes transferred in 1.200354 secs (157633 bytes/sec)

На этом мы научили Xcode, не подписывать приложения, а теперь в параметрах проекта подтвердим, что приложение не подписано:

4. В новом открывшемся проекте идем в меню Project > Edit Project Settings, заходим во вторую вкладку и находим “Code Signing Identity” с параметром “Any iPhoneOS Device”. Меняем параметр на “Don’t Code Sign”.

project Setting
Это действие придется проделывать для каждого нового проекта.

5. Возвращаемся в консоль:

1
2
3
4
5
mkdir /Developer/iphoneentitlements312
cd /Developer/iphoneentitlements312
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py

Теперь все готово, но остался последний момент:
Идем в меню Project > New Build Phase > New Run Script Build Phase. В открывшемся окошке в пустое поле вставляем:

1
2
3
4
5
6
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
/Developer/iphoneentitlements312/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
codesign -f -s "iPhone developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
fi

и просто закрваем окно. Это будет вызывать скрипт, который мы скачали в 4-м пункте, при компилировании для подписи приложения ложной подписью (codesign). Это необходимо только для отладки. Если просто скомпилировать проект и потом запустить на телефоне, то все будет работать. Однако, если дебагер попытается подключиться к приложению, оно закроется и получим сообщение в Xcode:
Error from debugger: The program being debugged is not being run;
Всему причина видимо из-за того, что скрипт генерации легальной подписи, которая необходима для дебагера, срабатывает раньше чем надо во время компиляции.

(прим. bm: я сам мучаюсь с этой ошибкой, а очень хочется дебажить и профайлить, так что, если кто-то понял перевод лучше меня, и смог решить сие проблему, отпишитесь пожалуйста)

PS: Последний пункт по поводу дебага будет исправлен в будущем, когда разберусь как заставить дебагер работать. Дай бог вам заработать на $99 в год и не джейлбрикнутый iPhone ;)

VN:F [1.9.3_1094]
Rating: 8.8/10 (6 votes cast)
VN:F [1.9.3_1094]
Rating: +5 (from 5 votes)
Разработка приложений для iPhone Jailbroken, 8.8 out of 10 based on 6 ratings

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.



Страница 1 of 0