оригинал тут
Все ниже описанное предлагается для:
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" >> 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”.
Это действие придется проделывать для каждого нового проекта.
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
Ваш отзыв
Вы должны войти, чтобы оставлять комментарии.