وضعیت NEVPNManager تا بارگذاری تنظیمات نامعتبر است
خواندن وضعیت یا ذخیره پیش از پایان loadFromPreferences نتیجه کهنه یا ناموفق میدهد. ترتیب بارگذاری، ارجاعهای جاکلیدی و گروههای دسترسی آن را تعیین میکنند.
برنامه را دوباره اجرا کنید، از مدیر وضعیت اتصال را بپرسید و او میگوید قطع است، در حالی که منوی سیستم آشکارا یک تونل فعال نشان میدهد. یا یک فراخوانی ذخیره خطایی برمیگرداند که چیزی را توضیح نمیدهد، یا یک راز مشترک چند ثانیه پس از تخصیص، مفقود اعلام میشود. سه نشانه، یک سازوکار: مدیر نمایی بر یک انبار سیستمی است، و نما تا کسی آن را بار نکرده باشد خالی خوانده میشود.
پیش از عیبیابی هر یک از اینها، مشخص کنید کدام API را باید به کار ببرید. تونل IPsec یا IKEv2 سیستمی با مدیر داخلی سازگار است؛ پروتکلی که سیستم پیادهسازی نمیکند به ارائهدهنده تونل با پردازش بسته خودتان نیاز دارد، و هیچ ترکیبی از فیلدها این را تغییر نمیدهد.
مدیر نمایی بر یک انبار است
مدیر را بسازید یا بگیرید، از آن بخواهید تنظیماتش را بار کند و بگذارید گرداننده تکمیل پیش از خواندن وضعیت یا تغییر تنظیمات پروتکل تمام شود. وقتی کار، برشمردن پیکربندیهای ذخیرهشده است، از فراخوانی همه گونهها استفاده کنید، نه اینکه یک نمونه را برای دو هدف بازاستفاده کنید. پیش از رسیدن بارگذاری، وضعیت معمولاً نامعتبر است، و تبدیل نامعتبر به خاموش دقیقاً همان باگی است که برنامه را فقط پس از اجرای دوباره اشتباه نشان میدهد.
نوشتن همان ترتیب را دنبال میکند. تلاش برای ذخیره روی مدیری که هرگز چیزی بار نکرده میتواند بدون پیام کاربردی شکست بخورد، چون هویت ذخیرهشدهای برای اعمال تغییر وجود ندارد. بار کنید، تغییر دهید، ذخیره کنید، سپس وضعیت را دوباره بخوانید. شیئی که سیستم به آن وصل میشود پروفایل ذخیرهشده است، نه آن که در حافظه ویرایش میکردید.
تغییرهای وضعیت فقط تا وقتی نگاه میکنید میرسند
پس از بارگذاری تنظیمات، وضعیت از قطع، در حال اتصال، متصل، تأیید مجدد و در حال قطع عبور میکند. رابط را با یک خواندن مقداردهی کنید و سپس به جای نظرسنجی با تایمر، به اعلان تغییر گوش دهید. نظرسنجی در پیشزمینه کار میکند و در پسزمینه دروغ میگوید، و اینگونه برنامهها با نشانگر چرخانی میمانند که هرگز حل نمیشود.
اعلانها فقط زمانی میرسند که برنامه در پیشزمینه است. هر چیزی که وضعیت را در پسزمینه نگه دارد پس از اجرای دوباره کهنه به نظر میرسد، پس هنگام راهاندازی و دوباره وقتی برنامه به پیشزمینه برمیگردد تازهسازی کنید. اگر ارائهدهنده مالک تونل است، آن را از طریق شیء نشست متناظر هدایت کنید؛ ویژگی اتصال ساده چرخه عمر ارائهدهنده را مدل نمیکند.
رازها ارجاعاند، نه رشته
اعلام مفقود بودن یک راز مشترک بهندرت یعنی کسی آن را تخصیص نداده است. شیء پروتکل یک ارجاع میخواهد: یکی برای گذرواژه کاربر و یکی برای کلید از پیش مشترک IPsec. عبور دادن nil، یا ارجاعی مشتق از ورودی اشتباه جاکلیدی، همان شکایتی را میدهد که یک جای خالی. خطا نشانه را نام میبرد و علت را پنهان میکند، از اینرو مردم یک راز را چند بار دوباره وارد میکنند.
نخست راز را بهعنوان یک آیتم گذرواژه عمومی بنویسید، سپس ارجاعی پایدار به آن را بازخوانی کنید. ارجاع پایدار برخلاف اشارهگری که در حافظه نگه داشته میشود از اجرای دوباره جان سالم به در میبرد و همان نمایشی است که پروفایل سریال میکند. کلاس دسترسیپذیری را انتخاب کنید که پس از باز شدن قفل دستگاه هم اجازه دسترسی بدهد، وگرنه تونلی که باید روی صفحه قفلشده دوباره متصل شود، با رازی کاملاً معتبر در احراز هویت شکست میخورد.
افزونه نمای جاکلیدی خودش را دارد
افزونه شبکه یک فرایند جداست، بنابراین دسترسی پیشفرض برنامه به جاکلیدی به آن نمیرسد. به هر دو هدف همان گروه دسترسی جاکلیدی را در مجوزهایشان بدهید، آیتم را یک بار داخل آن گروه ذخیره کنید و بگذارید هر فرایند آن را بخواند. بدون گروه، افزونه چیزی پیدا نمیکند و شکست اعتبارنامهای را گزارش میدهد که برنامه نمیتواند بازتولید کند.
اگر ارائهدهنده از طریق شیء پیکربندی خود پیکربندی میشود، راز را داخل برنامه هم جای ندهید. دو نسخه از هم دور میافتند و این واگرایی بهصورت اعتبارنامه بد دیده میشود، نه بهصورت تکرار. ویجت یا فرایند دومی که وضعیت دیگری گزارش میدهد همین توضیح را دارد: هر کدام به گروه نیاز دارد و هر کدام باید پیش از خواندن تنظیمات را بار کند.
API را با پروتکل هماهنگ کنید
مدیر داخلی اشیاء پروتکل IPsec و IKEv2 را حمل میکند. با فیلدهای اضافه به یک کلاینت عمومی SSL VPN تبدیل نمیشود و پروفایل ناسازگار میتواند بیعیب ذخیره شود و باز هم هرگز وصل نشود. پیش از بررسی وضعیت تصمیم بگیرید در کدام دسته هستید، چون باگ وضعیت و پروتکل پشتیبانینشده از بیرون یکسان به نظر میرسند.
برای اجرای دوباره بعدی، چکلیست کوتاه است: تنظیمات را بار کنید، وضعیت را بخوانید، اشتراکهای تغییر را در پیشزمینه نگه دارید، ارجاعها را از گروه مشترک دوباره بسازید و تأیید کنید که شیء پروتکل با API پیادهسازیشده شما میخواند. اجرای این فهرست یک دقیقه میبرد؛ حدس زدن درباره آن یک بعدازظهر.