Я пытаюсь поддержать iOS9 в приложении, использующем Microsoft Sign In, и обнаружил, что приложение аварийно завершает работу, потому что не может найти определение для UIApplicationOpenURLOptionUniversalLinksOnly, даже если в коде MSAL это включено в условие @available. Приложение даже не достигает этой точки в коде, оно вылетает при запуске.
Это код, где находится символ (MSIDBrokerInteractiveController.m):
- (void)openBrokerWithRequestURL:(NSURL *)requestURL
fallbackToLocalController:(BOOL)shouldFallbackToLocalController
{
NSDictionary *options = nil;
if (self.interactiveParameters.brokerInvocationOptions.isUniversalLink)
{
// Option for openURL:options:CompletionHandler: only open URL if it is a valid universal link with an application configured to open it
// If there is no application configured, or the user disabled using it to open the link, completion handler called with NO
if (@available(iOS 10.0, *))
{
options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
}
}
[MSIDAppExtensionUtil sharedApplicationOpenURL:requestURL
options:options
completionHandler:^(BOOL success) {
if (!success)
{
MSID_LOG_WITH_CTX(MSIDLogLevelWarning, self.requestParameters, @"Failed to open broker URL. Falling back to local controller");
[self handleFailedOpenURL:shouldFallbackToLocalController];
}
}];
}
My решение состояло в том, чтобы либо закомментировать строку, либо просто заменить константу ее строковым значением @ "UIApplicationOpenURLOptionUniversalLinksOnly" (оставив условие @available, поэтому оно никогда не должно работать на iOS9). Как бы то ни было, оба решения работают нормально в любой ОС, но я не уверен, что они могут вызвать проблемы в будущем ... Любая мысль будет оценена.