Не удается запустить приложение iOS 3.X, скомпилированное с iOS SDK 4.3

#ios #ios4 #xcode4 #ios3.0

#iOS #ios4 #xcode4 #ios3.0

Вопрос:

Недавно я обновился до xCode 4.0.1, чтобы использовать последнюю версию iOS SDK (4.3). В настоящее время я занимаюсь разработкой для устройств iOS 3.X, но планирую перейти на iOS 4.X в ближайшем будущем.

Проблема в том, что, похоже, я ничего не могу успешно запустить на своих текущих устройствах 3.X. Насколько я понимаю, 4.3 SDK поддерживает компиляцию для всех версий iOS 3.0 и последующих, и, конечно, я могу скомпилировать такие приложения просто отлично. Но если я пытаюсь запустить его в симуляторе или на устройстве, оно начинает загружаться, а затем просто вылетает.

На данный момент я просто пытаюсь запустить оконное приложение по умолчанию без каких-либо изменений. Я выбрал 4.3 в качестве базового SDK и установил для своей цели развертывания значение 3.0. Я могу выбрать любую версию iOS от 3.0 и выше в качестве цели сборки, но, похоже, только использование 4.3 вообще работает.

Когда я запускаю приложение на своем телефоне, я получаю следующее в журналах:

 GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Sat Feb 12 02:56:02 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin --target=arm-apple-darwin".tty /dev/ttys002
warning: Unable to read symbols from "dyld" (prefix __dyld_) (not yet mapped into memory).
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.3 (7E18)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit (file not found).
warning: Unable to read symbols from "UIKit" (not yet mapped into memory).
warning: Unable to read symbols from "Foundation" (not yet mapped into memory).
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1.3 (7E18)/Symbols/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (file not found).
warning: Unable to read symbols from "CoreGraphics" (not yet mapped into memory).
warning: Unable to read symbols from "libgcc_s.1.dylib" (not yet mapped into memory).
warning: Unable to read symbols from "libSystem.B.dylib" (not yet mapped into memory).
warning: Unable to read symbols from "libobjc.A.dylib" (not yet mapped into memory).
warning: Unable to read symbols from "CoreFoundation" (not yet mapped into memory).
target remote-mobile /tmp/.XcodeGDBRemote-18423-39
Switching to remote-macosx protocol
mem 0x1000 0x3fffffff cache
mem 0x40000000 0xffffffff none
mem 0x00000000 0x0fff none
[Switching to process 11779 thread 0x0]
[Switching to process 11779 thread 0x0]
gdb stack crawl at point of internal error:
0   gdb-arm-apple-darwin                0x000000010010974a internal_vproblem   308
1   gdb-arm-apple-darwin                0x0000000100109924 internal_verror   27
2   gdb-arm-apple-darwin                0x00000001001099c2 align_down   0
3   gdb-arm-apple-darwin                0x0000000100150c5e macosx_solib_add   794
4   gdb-arm-apple-darwin                0x000000010016417c remote_macosx_complete_create_or_attach   187
5   gdb-arm-apple-darwin                0x000000010016489e remote_macosx_create_inferior   1252
6   gdb-arm-apple-darwin                0x000000010005f6c3 run_command_1   586
7   gdb-arm-apple-darwin                0x0000000100107b7f execute_command   557
8   gdb-arm-apple-darwin                0x00000001000171e7 mi_execute_async_cli_command   204
9   gdb-arm-apple-darwin                0x00000001000168e5 captured_mi_execute_command   344
10  gdb-arm-apple-darwin                0x0000000100072a62 catch_exception   57
11  gdb-arm-apple-darwin                0x000000010001443e mi_execute_command   140
12  gdb-arm-apple-darwin                0x0000000100077721 process_event   133
13  gdb-arm-apple-darwin                0x0000000100078435 gdb_do_one_event   1049
14  gdb-arm-apple-darwin                0x0000000100072b49 catch_errors   70
/SourceCache/gdb/gdb-1518/src/gdb/macosx/macosx-nat-dyld.c:1648: internal-error: unrecognized shared library breakpoint
A problem internal to GDB has been detected,
further debugging may prove unreliable.
  

Я предполагаю, что где-то по ходу работы приложение неправильно настроено для связи с API версии 3.X, отсюда и сообщение «не удается прочитать символ», появляющееся в журналах. Я просто не могу понять, как исправить ситуацию.

Любые предложения приветствуются с благодарностью!

Ответ №1:

Нет «привязки API 3.x», есть только SDK, с помощью которого вы создаете. SDK обратно совместим для правильной работы на устройствах 3.x.

Дважды проверьте, что у вас установлены правильные настройки как на уровне xcodeproj, так и на целевом уровне. Если все эти параметры верны, то оно должно отлично работать на устройстве 3.1.

Если это не работает, то вот несколько снимков в темноте, которые могут помочь:

  • перезагрузите Mac и устройство iPhone 3.x
  • Удалите и повторно добавьте необходимый профиль подготовки
  • дважды проверьте, действителен ли ваш сертификат
  • Убедитесь, что в вашем проекте отсутствуют файлы прав доступа и целевые настройки для сборки debug
  • Очистить все целевые объекты
  • Сборка и повторный запуск

Если ничего из этого не работает, возможно, у вас не работает установка Xcode 4.

Надеюсь, это поможет 🙂

Комментарии:

1. спасибо за совет. Похоже, в конце концов, это, вероятно, был профиль подготовки — просто ради интереса я попробовал совершенно новый телефон, чтобы посмотреть, будет ли он работать (что, конечно, требует обновления профиля подготовки), и это сработало. Еще раз спасибо!

Ответ №2:

Вы указали iOS 3.x в качестве своей цели? Если вы установите для своей целевой сборки последнюю версию (4.3), то эта версия будет обязательной.

Комментарии:

1. Да, пробовал. Я пытался установить цель сборки для каждой версии от 3.0 до 4.3, но работает только 4.3 (и то, только на симуляторе, поскольку у меня телефон 3.1.3).

2. Мои единственные варианты — «iPhone», «iPhone (Retina)» и «iPad». Я тестировал с использованием «iPhone».

3. мои извинения, я, должно быть, наполовину спал в пятницу — в симуляторе, в меню оборудования, есть подменю версии. Я перепробовал все варианты, но работают только те, что для версии 4.0 и более поздних версий. Выбор аппаратной версии 3.1.3 или более ранней приводит к сбою симулятора с сообщением об ошибке «имитируемое приложение завершает работу». (Я игнорирую 3.2, поскольку, насколько я понимаю, это версия только для iPad)

Ответ №3:

Вы пробовали удалять библиотеки фреймворка из версии 3.x и снова заменять в версии 4.x, а затем очищать n building??

Комментарии:

1. это не проект 3.x, который я переношу (во всяком случае, на данном этапе), поэтому версии 3.x нет — я пытаюсь заставить работать совершенно новый проект, созданный в xCode 4. Тем не менее, я попытался вручную заменить фреймворки, и никаких улучшений не произошло. Спасибо за предложение, но, похоже, это тоже не проблема.

Ответ №4:

Откройте настройки сборки вашего проекта

Укажите ключевую цель РАЗВЕРТЫВАНИЯ IOS как 3.2

Вы компилируете для версии 4.3. Но ваше приложение будет работать также на устройствах 3.2.. .Обратите внимание на методы, которые вы вызываете… Если вы используете методы, которые есть только в платформе 4.3, вы должны проверить это во время выполнения, используя if([object responsestoselector: … в противном случае ваше приложение завершит работу на предыдущей версии iOS

Ответ №5:

открыть сборку

установите базовый sdk: пример версии ios, которую вы хотите

затем

откройте target и дважды щелкните по нему, откройте build, затем установите базовый sdk.