Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS ⇐ IOS
Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS
Я пытаюсь создать простое приложение, которое «блокирует» другие приложения, если не выполняется определенное условие. В настоящее время я использую ярлыки IOS и настроил автоматизацию, которая открывает мое приложение A всякий раз, когда открывается другое приложение B.
Если условие не выполнено, я представляю, что поток будет выглядеть так:
[*]Откройте приложение А. [*]Вместо этого открывается мое приложение Б. [*]Я устанавливаю флажок в своем приложении Б. [*]Я возвращаюсь к приложению А, и оно работает как положено.
Если условие уже выполнено, приложение А будет работать как положено с самого начала.
Что уже пробовали
Моя первая попытка заключалась в использовании AppIntent и программном изменении openAppWhenRun в зависимости от условия. Однако я довольно быстро понял, что изменение значения openAppWhenRun не изменится, если AppIntent действительно откроет мое приложение. Код для этого выглядел так: значение openAppWhenRun изменяется в другой функции.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Блокирует приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false @Главный актер асинхронные броски func Perform() → some IntentResult { вернуть .результат() } } Другая попытка включала установку openAppWhenRun значения false во внешнем AppIntent и открытие другого внутреннего AppIntent, если условие выполнено. Если условие в моем приложении выполнено, для openAppWhenRun установлено значение true, и вместо открытия внутреннего AppIntent выдается ошибка. Все работает так, как и ожидалось, но каждый раз, когда я открываю «заблокированное» приложение, появляется уведомление об ошибке.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Блокирует приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false асинхронные броски func Perform() -> some IntentResult и OpensIntent { если (BlockerIntent.openAppWhenRun) { выбросить Error.notFound } return .result(opensIntent: OpenBlockerApp()) } Ошибка перечисления: Swift.Error, CustomLocalizedStringResourceConvertible { дело не найдено вар localizedStringResource: LocalizedStringResource { переключить себя { case .notFound: вернуть «Игнорировать это сообщение» } } } } структура OpenBlockerApp: AppIntent { static let title: LocalizedStringResource = «Открыть приложение блокировки» статическое описание let: LocalizedStringResource = «Открывает приложение-блокировщик» статическая переменная openAppWhenRun: Bool = true @Главный актер асинхронные броски func Perform() → some IntentResult { вернуть .результат() } } Моя третья попытка похожа на предыдущую, но вместо этого я использовал два разных внутренних AppIntent. Единственная разница между ними заключалась в том, что у одного было openAppWhenRun = false, а у другого openAppWhenRun = true.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Затемняет приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false асинхронные броски func Perform() -> some IntentResult и OpensIntent { если (BlockerIntent.openAppWhenRun) { return .result(opensIntent: DoNotOpenBlockerApp()) } еще { return .result(opensIntent: OpenBlockerApp()) } } } При попытке этого возникает следующая ошибка:
Функция объявляет непрозрачный тип возвращаемого значения «some IntentResult и OpensIntent», но операторы возврата в ее теле не имеют соответствующих базовых типов
Я также пытался открыть приложение с помощью URL-ссылки, но безуспешно или практически безуспешно, часто заканчиваясь бесконечным циклом. Я попробовал ForegroundContinuableIntent, но он не работал должным образом, поскольку зависит от ввода данных пользователем.
>
Есть ли способ сделать то, чего я пытаюсь достичь? Я видел другие приложения, использующие подобную концепцию, поэтому считаю, что это возможно.
Большое спасибо!
Я пытаюсь создать простое приложение, которое «блокирует» другие приложения, если не выполняется определенное условие. В настоящее время я использую ярлыки IOS и настроил автоматизацию, которая открывает мое приложение A всякий раз, когда открывается другое приложение B.
Если условие не выполнено, я представляю, что поток будет выглядеть так:
[*]Откройте приложение А. [*]Вместо этого открывается мое приложение Б. [*]Я устанавливаю флажок в своем приложении Б. [*]Я возвращаюсь к приложению А, и оно работает как положено.
Если условие уже выполнено, приложение А будет работать как положено с самого начала.
Что уже пробовали
Моя первая попытка заключалась в использовании AppIntent и программном изменении openAppWhenRun в зависимости от условия. Однако я довольно быстро понял, что изменение значения openAppWhenRun не изменится, если AppIntent действительно откроет мое приложение. Код для этого выглядел так: значение openAppWhenRun изменяется в другой функции.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Блокирует приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false @Главный актер асинхронные броски func Perform() → some IntentResult { вернуть .результат() } } Другая попытка включала установку openAppWhenRun значения false во внешнем AppIntent и открытие другого внутреннего AppIntent, если условие выполнено. Если условие в моем приложении выполнено, для openAppWhenRun установлено значение true, и вместо открытия внутреннего AppIntent выдается ошибка. Все работает так, как и ожидалось, но каждый раз, когда я открываю «заблокированное» приложение, появляется уведомление об ошибке.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Блокирует приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false асинхронные броски func Perform() -> some IntentResult и OpensIntent { если (BlockerIntent.openAppWhenRun) { выбросить Error.notFound } return .result(opensIntent: OpenBlockerApp()) } Ошибка перечисления: Swift.Error, CustomLocalizedStringResourceConvertible { дело не найдено вар localizedStringResource: LocalizedStringResource { переключить себя { case .notFound: вернуть «Игнорировать это сообщение» } } } } структура OpenBlockerApp: AppIntent { static let title: LocalizedStringResource = «Открыть приложение блокировки» статическое описание let: LocalizedStringResource = «Открывает приложение-блокировщик» статическая переменная openAppWhenRun: Bool = true @Главный актер асинхронные броски func Perform() → some IntentResult { вернуть .результат() } } Моя третья попытка похожа на предыдущую, но вместо этого я использовал два разных внутренних AppIntent. Единственная разница между ними заключалась в том, что у одного было openAppWhenRun = false, а у другого openAppWhenRun = true.
struct BlockerIntent: AppIntent { static let title: LocalizedStringResource = «Приложение-блокировщик» статическое описание let: LocalizedStringResource = "Затемняет приложение до тех пор, пока не будет выполнено условие" статическая переменная openAppWhenRun: Bool = false асинхронные броски func Perform() -> some IntentResult и OpensIntent { если (BlockerIntent.openAppWhenRun) { return .result(opensIntent: DoNotOpenBlockerApp()) } еще { return .result(opensIntent: OpenBlockerApp()) } } } При попытке этого возникает следующая ошибка:
Функция объявляет непрозрачный тип возвращаемого значения «some IntentResult и OpensIntent», но операторы возврата в ее теле не имеют соответствующих базовых типов
Я также пытался открыть приложение с помощью URL-ссылки, но безуспешно или практически безуспешно, часто заканчиваясь бесконечным циклом. Я попробовал ForegroundContinuableIntent, но он не работал должным образом, поскольку зависит от ввода данных пользователем.
>
Есть ли способ сделать то, чего я пытаюсь достичь? Я видел другие приложения, использующие подобную концепцию, поэтому считаю, что это возможно.
Большое спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS
Anonymous » » в форуме IOS - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS
Anonymous » » в форуме IOS - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS
Anonymous » » в форуме IOS - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Открытие приложения Android из другого приложения Android с использованием намерений
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-