როცა iOS აპის შიგნით VPN ეკრანს აშენებ, პირველი სიურპრიზი ის არის, რომ პარამეტრების აპის პროტოკოლების სია API-ის სია არ არის. Network Extension ჩარჩო საშუალებას აძლევს შენს აპს შექმნას ერთი პირადი VPN კონფიგურაცია, რომელიც ამ აპს ეკუთვნის, და ის იღებს მხოლოდ რამდენიმე პროტოკოლის ობიექტს. დანარჩენი ყველაფერი, რასაც ხალხი ელოდება, L2TP-დან ჩამოტვირთულ პროფილამდე, ამ ზედაპირის გარეთაა ან Apple-ისთვის პირადია. შემდგომი წარუმატებლობები ჩვეულებრივ ბაგები არ არის, ეს API უარყოფს სამუშაოს, რომელიც მას არასდროს მიუღია.

მითი: API პარამეტრების რედაქტორია

თვლიან, რომ რადგან iOS-ს შეუძლია IKEv1, IKEv2, L2TP და IPsec პროფილების კონფიგურირება, აპს შეუძლია რომელიმეს შექმნა პროგრამულად. არ შეუძლია. ჩარჩო გამომძახებელ აპს ზუსტად ერთ კონფიგურაციის უჯრას აძლევს და ეს უჯრა იღებს მხოლოდ საჯარო პროტოკოლის კლასების მცირე ნაკრებს. დანარჩენი ყველაფერი, რასაც ხალხი ელოდება, L2TP-დან ჩამოტვირთულ პროფილამდე, ამ ზედაპირის გარეთაა ან Apple-ისთვის პირადია.

შემდგომი წარუმატებლობები ჩვეულებრივ ბაგები არ არის. ეს API უარყოფს სამუშაოს, რომელიც მას არასდროს მიუღია, და გამოსავალია ეკრანის იმის გარშემო დაპროექტება, რასაც API ფლობს.

სამი პროტოკოლის ობიექტი და ისინი, რომლებიც არ არსებობენ

შენი ვარიანტებია IKEv1 NEVPNProtocolIPSec-ის მეშვეობით, IKEv2 NEVPNProtocolIKEv2-ის მეშვეობით, და NETunnelProviderProtocol, თუ აწვდი საკუთარ პაკეტური გვირაბის გაფართოებას. NEVPNManager-ის ცნობარი ჩამოთვლის მიღებულ პროტოკოლის ობიექტებს. L2TP და PPTP არასდროს ჩნდება ამ სიაში, რადგან Apple-მა მათთვის კლასები არ გამოაქვეყნა. რომელიმეს ცდა შენახვის დროს შეცდომით მთავრდება, ან უარესი, კონფიგურაციით, რომლის გამოყენებაზე სისტემა ჩუმად უარს ამბობს.

დესკტოპის კოდი სხვა წესებს მიჰყვება. macOS-ზე SCNetworkInterfaceCreateWithInterface ასტეკავს ინტერფეისის ტიპს, მაგალითად L2TP IPv4-ზე, და ამაგრებს მას ქსელურ სერვისს, ხოლო networksetup -connectpppoeservice იწყებს შედეგს. საჭიროა ადმინისტრატორის უფლებები და დამხმარე ხელსაწყო, რადგან საერთო საიდუმლო და პაროლი სისტემის გასაღების ბორკილში შედის. დააკოპირე ეს დიზაინი iOS-ზე და არაფერი კომპილირდება.

გადასცე გასაღების ბორკილის მითითება, არა პაროლი

არცერთი IKE კლასი არ იღებს პაროლს ტექსტად. ორი თვისება passwordReference და sharedSecretReference ითხოვს მუდმივ გასაღების ბორკილის მითითებას, რომელსაც იღებ SecItemCopyMatching-დან kSecReturnPersistentRef-ის მოთხოვნით. ელემენტის მონაცემების გადაცემა ან ველში სტრიქონის ჩასმა იწვევს შენახვის წარუმატებლობას ან ცარიელი რწმუნებებით კავშირს. მითითება ისეთივე მდგრადია, როგორც მის უკან არსებული გასაღების ბორკილის ელემენტი, ამიტომ ელემენტი უნდა არსებობდეს კონფიგურაციის აწყობამდე. შექმენი ის შენახვის იმავე ტრანზაქციაში და მოხსნი დალაგების ბაგების მთელ კლასს.

სერტიფიკატით აუთენტიფიკაცია სხვა გზას მიდის: identityData პლუს identityDataPassword PKCS#12 ბლობისთვის. ამ ბლობის აპის პაკეტში ჩადება ნიმუშის კოდიდან გადმოღებული ჩვევაა და არა გამოშვების გადაწყვეტილება, რადგან პაროლი მასთან ერთად მოგზაურობს და აპის ყველა ასლი ერთსა და იმავე იდენტობას ატარებს.

უფლება და ხელმისაწვდომობა ყველაფერს კარიბჭედ უდგას

შესაძლოა მენეჯერი საერთოდ არ არსებობდეს და მიზეზი უზრუნველყოფაა. შენი აპის იდენტიფიკატორს სჭირდება Network Extension შესაძლებლობა პირადი VPN-ის უფლებასთან ერთად, და ბილდს ხელს რომ აწერს, პროფილმა ორივე უნდა ატაროს.

გამოტოვე ეს და საერთო ინსტანცია nil-ს აბრუნებს, ან შენახვა ვარდება შეცდომით, რომელიც არასდროს იხსენიებს უფლებას. ხელმისაწვდომობა მეორე კარიბჭეა. თუ iOS 8-ზე ძველს სამიზნედ აირჩევ, სიმბოლო გაშვების დროს აკლია, ამიტომ მარცხი კრახია ან nil მენეჯერი და არა კონფიგურაციის გარეშე მენეჯერი. შეამოწმე გაშვების გარემო და უფლება სანამ ობიექტების გრაფს გამართავ.

ჩატვირთე, შეცვალე, შეინახე და შემდეგ დააკვირდი მოთხოვნის წესრიგს

სასიცოცხლო ციკლს მოეპყარი როგორც ჩატვირთვა, შეცვლა, შენახვა და არასდროს გამოტოვო ჩატვირთვა. სანამ loadFromPreferences არ დასრულდება, მენეჯერი არაფერს ინახავს და პროტოკოლის ობიექტს ვერ წაიკითხავ ან ვერ შეცვლი.

მეორე შენახვა ცვლის კონფიგურაციას და არა ამატებს მეორეს, ამიტომ ნახევრად დასრულებულმა შენახვამ შეიძლება დააზიანოს პროფილი, რომელიც მუშაობდა. მოთხოვნის წესები ქმნიან დალაგებულ მასივს და ეს წესრიგია პოლიტიკა. ნებისმიერი ადგილიდან დაკავშირების წესი გათიშვის წესზე წინ დასვი და ხელით გათიშვას მყისიერი ხელახალი დაკავშირება მოჰყვება, რაც დეფექტად გამოიყურება, მაგრამ დოკუმენტირებულ შეფასებას მიჰყვება.

გათიშვის წესი წინ გადაიტანე, როცა მომხმარებლის მოქმედებამ უნდა გაიმარჯვოს. რაც აპის კონტროლის გარეთ რჩება, ისეთივე მნიშვნელოვანია. მარშრუტები გვირაბიდან ან სერვერის პოლიტიკიდან მოდის და არა შენ მიერ დაყენებული უპირატესობიდან, და პაკეტური გვირაბის პროვაიდერი მათ შესახებ იტყობინება გაშვებისას. აპს არ შეუძლია სხვა აპების ან კონფიგურაციის პროფილების მიერ დაყენებული პროფილების ჩამოთვლა ან რედაქტირება, ამიტომ ნუ დაპირდები ეკრანს, რომელიც მოწყობილობის ყველა VPN-ს აჩვენებს.

დაკავშირებული სტატიები