Xamarin. ios подходящее место для запроса разрешений - PullRequest
1 голос
/ 08 мая 2020

Мне нужно запросить разрешения в Xamarin. iOS Приложение с Xamarin.Essentials . Все примеры, которые я нашел до сих пор, касаются Xamarin.Forms, которые я не использую.

Все образцы, которые я нашел до сих пор, касаются запроса разрешений при нажатии кнопки, что подходит для экспериментов, но бесполезно для производственного приложения.

У меня следующий асинхронный c код:

// TODO Move the permission requests to a more appropriate location?
var status = await Permissions.CheckStatusAsync<Permissions.Camera>();

if (status != PermissionStatus.Granted)
{
    status = await Permissions.RequestAsync<Permissions.Camera>();
}
status = await Permissions.CheckStatusAsync<Permissions.Microphone>();
{
    status = await Permissions.RequestAsync<Permissions.Microphone>();
}

Я вызываю его из переопределения ViewDidLoad asyn c. Приложение вылетает со следующим выводом всякий раз, когда я вызываю Permissions.RequestAsyn c ()

2020-05-08 10:21:05.815 yaka[714:200964] error: * Assertion at /Users/builder/jenkins/workspace/archive-mono/2020-02/ios/release/mono/mini/debugger-agent.c:4568, condition `array->len == 1' not met
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014e7754: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101065470: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x10123472c: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101064370: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014ab360: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1015ac108: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1015592a0: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101559224: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x10105f0c0: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014ab360: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014e7754: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101065470: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x10123472c: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101064370: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014ab360: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1015ac108: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1015592a0: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x101559224: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x10105f0c0: 8
[PLCrashReport] plframe_cursor_read_dwarf_unwind_int:131: Failed to find FDE the current frame pc: 0x1014ab360: 8

Мой info.plist содержит следующие сведения о разрешениях:

<key>NSCameraUsageDescription</key>
<string>L&apos;accès est réservé au vidéoconférences.</string>
<key>NSMicrophoneUsageDescription</key>
<string>L&apos;accès est réservé au vidéoconférences.</string>

Должно быть быть подходящим местом для безопасного вызова этого кода, но я не могу понять этого.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 16 мая 2020

Для iOS код c указывать не нужно. В этом вся прелесть Essentials . В нем используется так называемый шаблон наживка и переключатель . Проще говоря - открытый код одинаков для каждой платформы, и во время компиляции будет скомпилирован только тот код, который вам нужен. Вы можете увидеть код разрешений здесь .

Если вы посмотрите на Xamarin.Essentials.csproj , вы увидите, что если проект нацелен на iOS, будут построены только файлы cs с суффиксом *.ios. Затем во время выполнения будет вызван соответствующий код.

Скорее всего, вы вызываете его не в том месте. Попробуйте вызвать его в ViewDidAppear, поскольку эта ошибка звучит так, будто Xamarin ожидал, что что-то будет полностью загружено / видимым, а это не так.

Подводя итог - вы можете использовать образцы кода, которые вы можете найти на официальной странице документации на каждой платформе без каких-либо проблем. Только будьте осторожны, где именно вы им звоните.

...