2015-09-21 20 views
7

Niestety dziś rano mój XCode zaktualizowany do wersji 7 i aplikacji na iOS byłem rozwijających się od http teraz chce https. Po wielu tutorialach skonfigurowałem mój serwer MAMP, aby używać https/ssl do tworzenia atrapowego certyfikatu. Teraz w mojej aplikacji na iOS adresy URL są następujące:Swift/https: NSURLSession/NSURLConnection HTTP obciążenie udało

static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php" 
static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php" 
static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php" 
static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php" 

i działają poprawnie, jeśli spróbuję uzyskać do nich dostęp w przeglądarce. Byłem używany do uzyskiwania dostępu do bazy danych i plików php za pomocą NSURLSession.sharedSession(). DataTaskWithRequest(), która teraz podnosi błąd w tytule. Na przykład, oto linia gdzie błąd jest podniesiona:

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { 
... 
} 

a to pełna komunikat o błędzie:

2015-09-21 16:41:48.354 ExcogitoWeb[75200:476213] CFNetwork SSLHandshake failed (-9824) 
2015-09-21 16:41:48.355 ExcogitoWeb[75200:476213] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824) 
fatal error: unexpectedly found nil while unwrapping an Optional value 

Chciałbym wiedzieć, jak to naprawić. Czytałem przydatne odpowiedzi, ale jest wiele rzeczy, których wciąż nie rozumiem i jeśli ktokolwiek mógłby mi pomóc/wytłumaczyć, byłbym bardzo wdzięczny.

Odpowiedz

9

Dodaj to do swojej aplikacji Info.plist

<key>NSAppTransportSecurity</key> 
    <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
    </dict> 
+2

To nie jest bezpieczne. Lepiej użyj tego: http://stackoverflow.com/a/32331282/1447641 – Apfelsaft

3
fatal error: unexpectedly found nil while unwrapping an Optional value 

zwykle oznacza, że ​​robisz coś nie tak dobre, i patrząc na swoje if

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] { 

widzę, że tam jest data!, ale że obiekt danych jest zerowa. Naprawdę powinieneś rozwinąć opcje przed ich użyciem, szczególnie podczas pracy ze zdalnymi danymi.

Wtedy masz błąd sieci, to prawdopodobnie związane z ATS Jabłko dodanej w iOS 9.

Zobacz inne odpowiedzi, w jaki sposób tymczasowo wyłączyć ATS. https://stackoverflow.com/a/30748166/421755

edytuj: Teraz widzę, że dodano ssl do lokalnego hosta, to dobrze. Jednak ATS nie wystarcza, ponieważ potrzebuje protokołu TLS 1.2, a nie certyfikatów z podpisem własnym.

+0

Tak, domyślam się, że problem jest taki, że dane są zerowe z powodu tej sieci błędów, postaram się ją wyłączyć, jak powiedziałeś ... wszystko, co zrozumiałem, to że powinienem zaktualizować MAMP ssl/tls do 1.2 .. Czy to możliwe? Czy możemy poczekać? –

+1

Właśnie zredagowałem odpowiedź w tym samym czasie, co skomentowałeś. Myślę, że łatwiej jest po prostu wyłączyć 'ATS' przy korzystaniu z serwera lokalnego. Włącz ją później, gdy wysyłasz aplikację! – Simon

+0

Właśnie przeczytałem, że TLS 1.2 będzie dostępny z OSX El Capitan ... Naprawdę mam taką nadzieję. Pracuję nad tą aplikacją na iOS i nie chciałbym wyglądać jak niedoświadczony facet dla mojego nauczyciela ...dziękuję za twoje healp –

1

bardzo stare pytanie, ale myślałem, że chciałbym odpowiedzieć. Zwykle dzieje się tak, gdy próbujesz odwijać obiekt http i wraca zero.

Upewnij się, że rozpakowanie url i nadać mu wartość domyślną.

przykład:

let jsonURL = "your https link to your json" 
guard let url = URL(string: jsonURL) else { return } // dont force unwrap 

nadzieję, że to pomaga!

Powiązane problemy