Моя проблема
В моем приложении есть собственные действия с ярлыками, созданные с использованием расширений Intents. Они отлично выполняют фоновые действия.
Для некоторых действий я пытаюсь заставить расширение намерения открывать основное (контейнерное) приложение при запуске в ярлыках и выполнять функцию.
У меня проблемы с NSUserActivity, и я не уверен, что это проект SwiftUI или то, как я его реализую (или и то, и другое).
Что я пробовал
Я зарегистрировал свое имя NSUserActivity как NSUserActivityType в моем info.plist ("com.me.project.activityName").
Я добавил приведенный ниже код в свой AppDelegate.
Я инициализирую новый NSUserActivity внутри своего расширения намерения с тем же типом, что и тот, который объявлен в info.plist.
Я также пробовал объявить активность в приложении (не думаю, что мне это нужно?)
Я использую: iOS (iPhone XS, Beta 6), macOS 10.15 Catalina (Beta 5) Xcode 11.0 (Beta 5)
Мой код до сих пор
У меня это в моем AppDelegate:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == "com.me.project.activityName" {
if let url = URL(string: "https://www.google.com") {
UIApplication.shared.open(url)
}
return true
}
return false
}
Это входит в мое намерение расширения:
let openApp = intent.launchApp?.boolValue ?? false
if openApp {
let UA = NSUserActivity(activityType: "com.me.project.activityName")
UA.title = "Dummy title"
completion(UserActivityTestIntentResponse(code: .continueInApp, userActivity: UA))
} else {
completion(UserActivityTestIntentResponse.success(result: "You chose not to open the app with a user activity."))
}
В info.plist
<key>NSUserActivityTypes</key>
<array>
<string>com.me.project.activityName</string>
</array>
У меня это объявлено в быстром файле в моем проекте (хотя я не думаю, что мне это нужно):
let openURLActivityType = "com.me.project.activityName"
let viewPageActivity: NSUserActivity = {
let userActivity = NSUserActivity(activityType: openURLActivityType)
userActivity.title = "Dummy Title"
userActivity.suggestedInvocationPhrase = "Dummy phrase"
userActivity.isEligibleForSearch = false
userActivity.isEligibleForPrediction = false
return userActivity
}()
Неожиданные результаты
Я ожидаю, что при выполнении действия в ярлыках мое приложение откроется и веб-сайт "https://www.google.com ".
В настоящее время после запуска действия в ярлыках мое приложение запускается на главный экран, и больше ничего не происходит. Похоже, что в моем appDelegate нет точек останова.
Я не могу понять, потому что я неправильно использую NSUserActivity, будь то SwiftUI или что-то, что просто не работает изнутри намерения.
Заранее благодарим вас за любую помощь!
NSUserActivity
и пытаюсь реализовать функцию передачи обслуживания и поиска в центре внимания (isEligibleForSearch
). Для меня тоже кажется, что в моемappDelegate
нет точек останова. Я использую macOS Catalina 10.15 beta 7, iOS 13 beta 8 и iPhone X с Xcode 11 beta 7 - person L. Stephan   schedule 04.09.2019func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { if let intent = userActivity.interaction?.intent as? YourIntent { print(“do something”) } }
Однако он не срабатывает, если приложение закрыто для начала, поэтому я все еще пытаюсь запустить делегат приложения. - person mralexhay   schedule 07.09.2019