Статусът на NEVPNManager е невалиден, докато не се заредят настройките
Четене на статус или запазване преди loadFromPreferences да приключи дава остарели или неуспешни резултати. Редът на зареждане, препратките към ключодържателя и групите за достъп го решават.
Рестартирайте приложението, попитайте мениджъра за състоянието на връзката и той съобщава „прекъсната“, докато системното меню ясно показва работещ тунел. Или извикване за запазване връща грешка, която не обяснява нищо, или споделена тайна се обявява за липсваща секунди след като е зададена. Три симптома, един механизъм: мениджърът е изглед към системно хранилище, а изгледът се чете като празен, докато някой не го зареди.
Преди да отстранявате грешки в нещо от това, решете кой API трябва да използвате. Системен тунел IPsec или IKEv2 пасва на вградения мениджър; протокол, който системата не реализира, изисква доставчик на тунел със собствена обработка на пакети и никаква комбинация от полета не променя това.
Мениджърът е изглед към хранилище
Създайте или извлечете мениджъра, поискайте от него да зареди настройките си и оставете обработчика за завършване да приключи, преди да четете статус или да променяте настройки на протокола. Когато задачата е да изброите запазените конфигурации, използвайте извикването за всички варианти, вместо да преизползвате един екземпляр за две цели. Преди зареждането да пристигне статусът обикновено е невалиден и точно превръщането на невалидния в изключен е грешката, заради която приложението изглежда сгрешено само след рестарт.
Записът следва същия ред. Опит за запазване върху мениджър, който никога не е зареждал нищо, може да се провали без полезно съобщение, защото няма запазена идентичност, към която промяната да се приложи. Заредете, променете, запазете, после прочетете статуса отново. Обектът, към който системата се свързва, е запазеният профил, а не този, който редактирахте в паметта.
Промените в статуса идват само докато гледате
След като настройките са заредени, статусът преминава през прекъсната, свързване, свързана, потвърждаване наново и прекъсване. Инициализирайте интерфейса с едно четене, после слушайте известието за промяна, вместо да допитвате по таймер. Допитването работи на преден план и лъже на заден, така приложенията остават с индикатор, който никога не се разрешава.
Известията пристигат само докато приложението е на преден план. Всичко, което поддържа състояние на заден план, ще изглежда остаряло след рестарт, затова обновявайте при стартиране и отново, когато приложението се върне на преден план. Ако доставчик притежава тунела, управлявайте го през съответния обект за сесия; обикновеното свойство за връзка не моделира жизнения цикъл на доставчика.
Тайните са препратки, не низове
Съобщение за липсваща споделена тайна рядко означава, че никой не я е задал. Обектът на протокола иска препратка: една за паролата на потребителя и една за предварително споделения ключ на IPsec. Подаването на nil или на препратка, получена от грешен запис в ключодържателя, дава същото оплакване като празна клетка. Грешката назовава симптома и скрива причината, затова хората въвеждат една и съща тайна няколко пъти.
Първо запишете тайната като елемент от тип обща парола, после прочетете обратно постоянна препратка към нея. Постоянната препратка оцелява след рестарт, за разлика от указател в паметта, и тя е представянето, което профилът сериализира. Изберете клас за достъпност, който все още разрешава достъп след отключване на устройството, иначе тунел, който трябва да се свърже отново при заключен екран, ще се провали при удостоверяване с напълно валидна тайна.
Разширението има собствен изглед към ключодържателя
Мрежовото разширение е отделен процес, така че достъпът на приложението до ключодържателя по подразбиране не стига до него. Дайте на двете цели една и съща група за достъп до ключодържателя в правата им, запазете елемента веднъж в тази група и оставете всеки процес да го чете. Без групата разширението не намира нищо и съобщава за провал на идентификационните данни, който приложението не може да възпроизведе.
Ако доставчикът се конфигурира чрез своя обект за конфигурация, не вграждайте тайната и в приложението. Две копия се разминават и разминаването изглежда като лоши идентификационни данни, а не като дублиране. Уиджет или втори процес, който съобщава друго състояние, има същото обяснение: всеки се нуждае от групата и всеки трябва да зареди настройките, преди да чете.
Съответствайте API на протокола
Вграденият мениджър носи обекти за протоколи IPsec и IKEv2. Той не се превръща в общ клиент за SSL VPN чрез допълнителни полета и несъответстващ профил може да се запази чисто и пак никога да не се свърже. Решете в коя категория сте, преди да разследвате статуса, защото дефект в статуса и неподдържан протокол изглеждат идентично отвън.
За следващия рестарт списъкът е кратък: заредете настройките, прочетете статуса, дръжте абонаментите за промени на преден план, изградете наново препратките от споделената група и потвърдете, че обектът на протокола съответства на API, който сте реализирали. Изминаването на този списък отнема минута; гадаенето по него отнема следобед.