Подводные камни при написании приложения для iOS, поддерживающего iOS 3.1.3 и iOS 4.x - PullRequest
6 голосов
/ 01 октября 2010

Я хотел бы написать приложение, которое может быть запущено на iOS 3.1.3 до iOS 4.1. Я знаю, как настроить цель развертывания и базовый SDK.

После прочтения документации Apple она в значительной степени полагается на проверку, доступен ли класс и / или реагирует ли экземпляр на определенный селектор.

Теперь мои вопросы:

  1. Что произойдет, если Apple сделает общедоступный класс с 3.1.3 до 4.x? Просто проверяя имя класса, оно будет доступно и на iOS 3.1.3? Так что в этой версии я бы использовал закрытый API, который мне не нужен. Как бы вы это проверили? Это действительно проблема или я слишком волнуюсь?
  2. Вы бы также использовали символы препроцессора, которые определены в версии для iOS?
  3. Какую архитектуру мне выбрать armv6 или armv7? Я думаю, что armv6 работает и на armv7, это правильно?
  4. Получу ли я какую-либо помощь от компилятора, если я использую в своем коде что-то, что недоступно в iOS 3.1.3? Это проверено?
  5. Есть ли какие-нибудь заметные подводные камни, о которых я должен знать?

Я уже наблюдал сессию 130 WWDC10 «Защита вашего приложения на будущее», поэтому все сказанное там известно.

Спасибо.

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Стоит отметить: вы не можете использовать символы предварительной обработки, потому что они разрешаются во время компиляции. Таким образом, если вы компилируете свое приложение на основе фреймворков 3.1.3, вы не сможете использовать фреймворки 4.0, даже на устройствах с 4.0 (или 4.1, в настоящее время). Лично я решил это, поставив две цели.

1 голос
/ 04 января 2011

Вкл. (3) изолированно: не нужно выбирать, просто создайте толстый двоичный файл с кодом как ARM6, так и ARM7, что в любом случае является поведением по умолчанию. Использование инструкций большого пальца зависит от того, что ваша программа делает большую часть времени - ARMv6 Thumb не содержит операций с плавающей запятой, поэтому там стоит немалая плата за математику с плавающей запятой. И наоборот, если вы совсем не занимаетесь математикой с плавающей запятой, гораздо разумнее оставить режим «большого пальца» и сэкономить на пропускной способности памяти и размере кеша. ARMv7 Thumb содержит операции с плавающей запятой.

В вашем проекте: проверьте настройку «Архитектуры». Скорее всего, это будет Standard (arm6 arm7), который будет производить двоичный файл с жирным шрифтом.

Чтобы установить режим большого пальца (или любой другой параметр) для каждой архитектуры, выберите его в окне «Информация о цели», щелкните маленький значок в левом нижнем углу и выберите «Добавить условие настройки сборки». Затем вы можете установить значение, которое применяется для этого параметра для конкретной комбинации SDK и архитектуры. Поэтому, если вы дифференцируете по целевому семейству процессоров, вам нужно сделать это дважды, добавив одно значение для «Any SDK» с помощью «ARMv6» и одно для «Any SDK» с помощью «ARMv7».

1 голос
/ 14 октября 2010

Исходя из личного опыта, возможно, у меня нет правильных ответов, но я постараюсь:

  1. Не думаю, что это проблема из-за причин, лежащих в основе частногоЗапрет API.Apple запрещает закрытые API (по крайней мере, частично), потому что они не хотят, чтобы что-то изменилось за кулисами в будущих версиях iOS, поскольку теперь это публичный API, он гарантированно поддерживается.

  2. Понятия не имею.Я видел, как они используются для кода, который может работать на OSX и iOS. Но я не думаю, что смог бы, потому что версия iOS обнаруживается в время выполнения , а компиляция может действительно учитывать только OS X против iOS,не 3.x против 4.x.

  3. Используйте armv6, чтобы вы могли поддерживать старые устройства iOS.Это не будет проблемой с armv7.Я считаю, что вы правы, что armv7 может запускать приложения, созданные для armv6, но я не уверен.

  4. Это зависит от вашей целевой платформы развертывания .Вы получаете предупреждения, если вы вызываете устаревший код.

  5. Возможно.У меня были проблемы с iAd, но я не помню подробностей.Просто проверьте существующие классы и не забудьте выполнить ваши слабые ссылки и создание классов там, где это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...