2015-08-16 4 views
5

У меня есть существующий IOS приложение, которое поддерживает с прошивки 8. Я хочу, чтобы добавить новые функции только для прошивки 9.Swift 2 API Проверка доступности для раскадровки

Я создал новый раскадровки для прошивки 9, который использует функции iOS 9, такие как UIStackView. Соответствующий файл раскадровки создается на основе версии ОС устройства.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let storyboard: UIStoryboard 
    if #available(iOS 9, *, *) { 
     storyboard = UIStoryboard(name: "Main", bundle: nil) 
    } else { 
     storyboard = UIStoryboard(name: "MainOld", bundle: nil) 
    } 
    let mainViewController = storyboard.instantiateInitialViewController() 
    window?.rootViewController = mainViewController 
    window?.makeKeyAndVisible() 
    return true 
} 

Но я получаю ошибку компиляции на Main.storyboard "UIStackView Перед прошивкой 9.0"

Я использую Xcode 7 Beta 5.

Как использовать возможности, связанные с IOS 9 на прошивке 8 поддерживаемых проектов с использованием Swift 2 # проверка доступности

+0

Возможно, это поможет вам: https://forums.developer.apple.com/thread/6773 – Bannings

+0

@Bannings, комментарий форума разработчиков предлагает изменить цель развертывания на iOS 9. Но я хочу, чтобы мое приложение поддерживало iOS 8, только для iOS 9, я хочу добавить новую функцию. так как скорость обеспечивает поддержку уровня языка # доступна для проверки доступности функции. я должен иметь возможность добавить правильную проверку. – jpsasi

+0

Ошибка в раскадровке, независимо от того, что вы используете #доступно или нет. – Bannings

ответ

3

У меня есть ответ от Quincey Morris в списке рассылки разработчиков Apple Cocoa.

По умолчанию Построить для настройки в Inspector File для раскадровки файла «Target развертывания», который является IOS 8, поэтому компилятор бросает ошибку.

Если я изменил настройку «Создать для» на iOS 9 на раскадровке, которая использует функции iOS 9. NO Error, приложение работает как в iOS 8, так и в iOS 9.

2

Вы не можете использовать функцию #availability в StoryBoard. Если вы хотите поддерживать iOS 8 с помощью UIStackView, вы должны построить код UIStackView или использовать совместимые библиотеки сторонних разработчиков. Мне нравится OAStackView или TZStackView.

+0

Мы можем использовать функцию iOS 9 в раскадровке, предназначенную для устройств iOS 9. Пожалуйста, посмотрите на мой ответ. Как вы предположили, если я хочу реализовать StackView в iOS 8, то я могу использовать Open Source, который вы упомянули. – jpsasi

+0

@jpsasi Вы определенно верны. Благодаря! –

1

Я создал две раскадровки, одну для iOS 8 и другую для iOS 9 и выше. Для раскадровки IOS 9 перейти к файлу инспектору и установить минимальную цель прошивку 9, установите iOS8 один к прошивке 8.

Set to iOS9 in storyboard

Затем в коде, где бы вы создать первоначальный контроллер представления для этого использование раскадровки:

if #available(iOS 9.0, *) { 
    // create view controller from iOS 9 storyboard 
} else { 
    //create view controller from iOS 8 storyboard 
} 

Ошибки должны идти тогда. Очевидно, что это больше кода для управления, но вы получаете свой собственный UIStack, и когда вы отказываетесь от поддержки iOS8, у вас все еще есть полноценная раскадровка ios9.

Смежные вопросы