Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOSIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Условное открытие приложения с помощью Swift и намерений приложения в ярлыках iOS

Сообщение Anonymous »

Я пытаюсь создать простое приложение, которое «блокирует» другие приложения, если не выполняется определенное условие. В настоящее время я использую ярлыки IOS и настроил автоматизацию, которая открывает мое приложение A всякий раз, когда открывается другое приложение B.
Если условие не выполняется, я представляю, что поток будет выглядеть так:< /p>
  • Откройте приложение A.
  • Вместо этого откроется мое приложение B.
  • I установите флажок в моем приложении B.
  • Я возвращаюсь к приложению A, и оно работает как ожидается.
Если условие уже выполнено, приложение А будет работать как положено с самого начала.
< strong>Что мы пробовали до сих пор
Моя первая попытка заключалась в использовании AppIntent и программном изменении openAppWhenRun в зависимости от условия. Однако я довольно быстро понял, что изменение значения openAppWhenRun не изменится, если AppIntent действительно откроет мое приложение. Код для этого выглядел так: значение openAppWhenRun изменяется в другой функции.

Код: Выделить всё

struct BlockerIntent: AppIntent {
static let title: LocalizedStringResource = "Blocker App"
static let description: LocalizedStringResource = "Blocks an app until condition is met"

static var openAppWhenRun: Bool = false

@MainActor
func perform() async throws -> some IntentResult {
return .result()
}
}
Другая попытка заключалась в установке openAppWhenRun значения false во внешнем AppIntent и открытии другого внутреннего AppIntent, если условие выполнено. Если условие в моем приложении выполнено, для openAppWhenRun установлено значение true, и вместо открытия внутреннего AppIntent выдается ошибка. Все работает так, как и ожидалось, но каждый раз, когда я открываю «заблокированное» приложение, появляется уведомление об ошибке.

Код: Выделить всё

struct BlockerIntent: AppIntent {
static let title: LocalizedStringResource = "Blocker App"
static let description: LocalizedStringResource = "Blocks an app until condition is met"

static var openAppWhenRun: Bool = false

func perform() async throws -> some IntentResult & OpensIntent {
if (BlockerIntent.openAppWhenRun) {
throw Error.notFound
}
return .result(opensIntent: OpenBlockerApp())
}

enum Error: Swift.Error, CustomLocalizedStringResourceConvertible {
case notFound

var localizedStringResource: LocalizedStringResource {
switch self {
case .notFound: return "Ignore this message"
}
}
}
}

struct OpenBlockerApp: AppIntent {
static let title: LocalizedStringResource = "Open Blocker App"
static let description: LocalizedStringResource = "Opens Blocker App"

static var openAppWhenRun: Bool = true

@MainActor
func perform() async throws -> some IntentResult {
return .result()
}
}
Моя третья попытка похожа на предыдущую, но вместо этого я использовал два разных внутренних AppIntent. Единственная разница между ними заключалась в том, что у одного было openAppWhenRun = false, а у другого — openAppWhenRun = true.

Код: Выделить всё

struct BlockerIntent: AppIntent {
static let title: LocalizedStringResource = "Blocker App"
static let description: LocalizedStringResource = "Blacks an app until condition is met"

static var openAppWhenRun: Bool = false

func perform() async throws -> some IntentResult & OpensIntent {
if (BlockerIntent.openAppWhenRun) {
return .result(opensIntent: DoNotOpenBlockerApp())
} else {
return .result(opensIntent: OpenBlockerApp())
}
}
}
При попытке этого возникает следующая ошибка:

Код: Выделить всё

Function declares an opaque return type 'some IntentResult & OpensIntent', but the return statements in its body do not have matching underlying types
Я также пытался открыть приложение с помощью URL-ссылки, но безуспешно или практически безуспешно, часто заканчиваясь бесконечным циклом. Я пробовал ForegroundContinuableIntent, но он не работал как ожидаемо, поскольку оно зависит от данных пользователей.
Есть ли какой-нибудь способ сделать то, что я пытаюсь сделать? Я видел другие приложения, использующие подобную концепцию, поэтому считаю, что это возможно.
Большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/774 ... -shortcuts
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»