Используйте NSUserActivity и CoreSpotlight, но по-прежнему установите iOS8 в качестве цели развертывания.

Можно ли использовать новые функции iOS9, такие как NSUserActivity и CoreSpotlight, но при этом установить цель разработки на 8.2, чтобы пользователи с iOS8 по-прежнему могли использовать приложение?

Я предполагаю, что мне просто нужно будет проверить номер версии iOS или использовать respondsToSelector:.

Это правильно?


person Nic Hubbard    schedule 30.09.2015    source источник


Ответы (1)


Да, я делаю это в одном из своих приложений (на самом деле у меня цель развертывания iOS 7). Это тривиально сделать. Просто убедитесь, что класс CSSearchableIndex существует, сделайте фреймворк CoreSpotlight необязательным и правильно напишите свой код, чтобы предотвратить запуск новых API на устройствах с более ранними версиями iOS.

Вы даже можете защитить код, чтобы он компилировался под Xcode 6, если у вас была какая-то причина для этого.

Пример:

// Ensure it only compiles with the Base SDK of iOS 9 or later
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
    // Make sure the class is available and the device supports CoreSpotlight
    if ([CSSearchableIndex class] && [CSSearchableIndex isIndexingAvailable]) {
        dispatch_async(_someBGQueue, ^{
            NSString *someName = @"Some Name";
            CSSearchableIndex *index = [[CSSearchableIndex alloc] initWithName:someName];
            // rest of needed code to index with Core Spotlight
        });
    }
#endif

В вашем делегате приложения:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray *restorableObjects))restorationHandler {
    if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
        // This activity represents an item indexed using Core Spotlight, so restore the context related to the unique identifier.
        // The unique identifier of the Core Spotlight item is set in the activity’s userInfo for the key CSSearchableItemActivityIdentifier.
        NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
        if (uniqueIdentifier) {
            // process the identifier as needed
        }
    }

    return NO;
}
#endif
person rmaddy    schedule 30.09.2015
comment
Великолепно! Благодарю вас! - person Nic Hubbard; 01.10.2015