Найти цель развертывания во время выполнения инфраструктуры, которую я не могу перекомпилировать
Определить цель развертывания для приложения во время компиляции довольно просто с помощью макроса __IPHONE_OS_VERSION_MIN_REQUIRED. Также очень просто найти текущую версию iOS, на которой работает приложение во время выполнения. Я пытаюсь выяснить цель развертывания приложения во время выполнения. Мне нужно использовать это в рамках, которые уже скомпилированы. Существует ли публичный метод API для определения этого? Я не могу найти один.
Просто быть чистым. Я хочу получить Deployment Target для iOS-приложения во время выполнения из моего фреймворка. НЕ компилировать время. В моем фреймворке мне нужно предупредить пользователя фреймворка о том, что некоторые функции не будут работать, если их цель развертывания находится слишком далеко назад.
Я понимаю, что это легко сделать во время компиляции, но мой фреймворк уже скомпилирован, и я не хочу требовать, чтобы пользователь фреймворка добавил макросы в свой код для моей фреймворк, чтобы определить цель своего развертывания.
2 ответа
Это старый вопрос, но я только что проверил ответ, так что здесь идет:
На iOS вы должны использовать MinimumOSVersion
введите Info.plist, чтобы найти минимальную поддерживаемую версию во время выполнения.
Источник на самом деле связан с документацией Джоша Касвелла о LSMinimumSystemVersion
,
Обратите внимание, что в документации объясняется, что вы, как разработчик, не должны устанавливать MinimumOSVersion
цените себя, и что это автоматически заполняется для вас Xcode во время сборки. Это объясняет довольно загадочное "Не использовать" в другой части этой документации.
Размещение описания этого ключа здесь, для потомков (декабрь 2016 г.), в случае изменения документации:
MinimumOSVersion (Строка - iOS). Когда вы создаете приложение для iOS, Xcode использует настройку iOS Deployment Target, чтобы установить значение для ключа MinimumOSVersion. Не указывайте этот ключ самостоятельно в файле Info.plist; это системный ключ. Когда вы публикуете свое приложение в App Store, в магазине указываются релизы iOS, на которых ваше приложение может работать, на основе этого ключа. Это эквивалентно ключу LSMinimumSystemVersion в macOS.
Я подтвердил это, распечатав значение в тестовом приложении (и изменив цель развертывания проекта XCode на другие значения:
if let infoPlist = Bundle.main.infoDictionary {
let minimumVersion = infoPlist["MinimumOSVersion"]
if let minimumVersion = minimumVersion {
print("Minimum version is \(minimumVersion)")
}
}
Я не понимаю, почему этот код не будет работать для вас!
NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED);