2016-01-05 2 views
0

Xcode 7.2 поддерживает таргетинг OS X 10.11.2, однако SDK отмечен как 10,11 (в соответствии с SDKSettings.plist, настройками и т. Д.). Мне нужно специально настроить 10.11.2 как мою версию min из-за некоторых критических исправлений ошибок, но я получаю массу предупреждений о том, что она выше, чем активный SDK, 10.11. Все работает отлично, я просто не вижу 200+ предупреждений о компоновщиках, и я не уверен, что это будет проблемой в Mac App Store.Целевая минорная OS X build

Кто-нибудь знает, почему Apple не отмечает свои SDK SD OS с номером сборки, если это то, что меняется между младшими выпусками, и если есть простой способ отключить предупреждения?

+0

Как вы устанавливаете минимальную цель? – trojanfoe

+0

Настройка «Целевая точка развертывания OS X» (MACOSX_DEPLOYMENT_TARGET) до 10.11.2. –

+0

А какие функции «.2» вы хотите использовать? Также каковы сообщения об ошибках компоновщика, которые вы получаете? – trojanfoe

ответ

0

Я нашел то, что выглядит приемлемым решением: используйте LSMinimumSystemVersion в моем info.plist, чтобы указать 10.11.2 и оставить настройку целевого развертывания в 10.11. Это приводит к тому, что мое приложение блокируется во время выполнения с достаточно дружественным сообщением и избавляется от всех предупреждений о сборке.

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

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

0

Целевая система SDK/развертывания работает с точки зрения версий SDK. В версии SDK между 10.11.0 и 10.11.2 изменений нет. Варианты SDK изменяются только тогда, когда изменяются API в SDK, а не когда изменяется базовое поведение этих API. Таким образом, вы не можете использовать версию SDK для таргетинга своего приложения на версию minor/bugfix.

Конечно, можно проверить версию OS X во время выполнения и предупредить пользователя, если он работает на не текущей версии 10.11.x.

+0

Спасибо - проверка времени выполнения может быть тем, что мне нужно. Однако я надеялся использовать подход, который блокировал бы установки. Интересно, что версия iOS SDK отслеживает с помощью Xcode (7.0/9.0, 7.1/9.1, 7.2/9.2), в то время как OS X SDK этого не делает. И согласно Apple (https://developer.apple.com/library/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_11_2.html#//apple_ref/doc/uid/TP40016630-SW1), есть некоторые изменения _minor_ API в 10.11.2, хотя они являются только новыми постоянными значениями, и они отображаются в заголовках как __MAC_10_11. –

0

Причина в том, что основная версия sdk вообще не связана с функциями, но с двоичной совместимостью (как выглядит ABI, если он поддерживает слабые свойства, что такое среда выполнения obj-c) и что XIB функции поддерживаются и т. д.

Поскольку Objective-C имеет довольно динамичное время выполнения, если вам нужен класс, вы должны увидеть, если вы получите его обратно от NSClassFromString() ... если вам нужно посмотреть, поддерживает ли объект метод, вы должны проверить с -(BOOL)respondsToSelector:(SEL) ...

Если вы просто хотите не запускать вообще, то есть ключи info.plist ... но вы также не должны использовать версию развертывания для предотвращения кода из запущенных на старых os, значения info.plist сначала проверяются и дают запускающему приложению (обычно поиску или сервисам запуска) возможность предоставить правильную хорошо отформатированную ошибку, а не просто сбой ...

Конечно, это значение может быть изменено пользователем ... так что вы также можете проверить основные/второстепенные версии на раннем пути кода вашего приложения ...

0

Я вхожу в аналогичное положение с OP , В случае моей заявки было небольшое небольшое существенное изменение, внесенное Apple в 10.11.2. Эта версия El Cap появилась с более новой версией libnetsnmp, от которой зависит мое приложение, и которая изменила одно из определений типов данных с uint32_t на u_long.

Я еще не протестировал это в Mac App Store, но, похоже, я могу изменить цель развертывания OSX в проекте на 10.11.2, но оставьте значение параметра Deployment Info для моего целевого объекта равным 10.11. Когда я компилирую мое приложение, настроенное таким образом, я не получаю больше предупреждений компоновщика.

Обратите внимание: я еще не проверял это на Mac App Store.