Mit libcurl auf iOS 5 als alternative zu NSURLConnection
Update: NSURLConnection scheint nun richtig unterstützt 100-Continue. In jedem Fall, diese Antwort enthält einen link, um das Skript zu bauen, libcurl für iOS/OSX.
Ich bin ein bisschen eine harte Zeit mit NSURLConnection
angesichts der Tatsache, dass es nicht unterstützt Abschnitt 8.2.3 der RFC 2616 (HTTP/1.1).
Grundsätzlich muss der client in der Lage sein, zu unterstützen, senden der header Expect: 100-Continue
; nach dem senden der request-Header, es muss warten, bis eine Antwort vom server mit dem status-code 100
vor dem senden der POST
/PUT
Körper.
Darüber hinaus NSURLConnection
(und somit auch alle libs, die bauen oben drauf) nicht keine Antwort vom server, bis alle Daten hochgeladen - das ist ein Schmerz, da der server ablehnen kann der upload sofort (ungültige Anmeldeinformationen, kein Platz, Datei zu groß, etc).
Während es bedeutet "Arbeit" für kleine Dateien (Inhalt ist vollständig hochgeladen und delegate-Methode mit der Antwort genannt wird), auf große Dateien, anstatt immer die Fehler, die server-Antwort (die ich bin positiv sicher gesendet wird), bekomme ich nur ein "Verbindung fehlgeschlagen" Fehler.
Ich weiß libcurl
richtig unterstützt den 100-Continue
Skillung, damit ich etwas Hilfe benötigen, kompilieren Sie es und bekommen es und läuft auf einem iOS-5-Projekt.
Begann ich mit dieser Beitrag(scroll nach unten), aber ich konnte nicht weit kommen...
Diese änderungen gemacht...
export CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2
export CFLAGS="-arch armv7 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
export CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-cpp-4.2
export AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
./configure --disable-shared --without-ssl --without-libssh2 --without-ca-bundle --without-ldap --disable-ldap --host=arm-apple-darwin10 --build=arm-apple-darwin10
make clean
make
ar rv libcurl.armv7.a lib/*.o
... aber die Kompilierung schlägt fehl mit der Meldung
(...)
checking for arm-apple-darwin10-gcc... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2
checking whether the C compiler works... no
configure: error: in `/Users/bruno/Downloads/curl-7.21.4':
configure: error: C compiler cannot create executables
Bin ich mit curl-7.21.4, heruntergeladen von der Apple -open-source-Website.
So, wie kann ich curl kompilieren und verwenden Sie es auf ein iOS-5-Projekt, möglichst mit SSL-Unterstützung?
- Schnappen Sie sich die neuesten & größte Skript hier. Kompiliert mit Darwin SSL - richtig, native iOS/OSX SSL!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser arbeitete für mich mit der neuesten SDK:
Wichtiges Update für Leute, die:
C compiler cannot create executables
Stellen Sie sicher, installieren Sie die XCode command line tools...
Vom XCode-Menü wählen Sie:
Preferences --> downloads --> Command Line Tools
...und klicken Sie auf "Installieren", wenn die Installation nicht.
Das Problem mit dem obigen script ist, dass es funktioniert mit älteren Versionen von XCode. Wenn Sie installiert die neueste XCode, die Lage der compiler-tools unterschiedlich sein. Ich habe mich verändert, das Skript zu unterstützen, die alte und neue XCode-Versionen, und einige Fehlerüberprüfung eingebaut. Funktioniert diese Hilfe?
Unten-ich nehme an, SDK-version 5.1 -- Sie müssen möglicherweise ändern, dass...
Starten Sie das Skript mit sudo :
mein Skript :
Das problem ist:
Der Grund:
Ihrem C-compiler für iOS -, arm-apple-darwin9-gcc, ist ein cross-compiler: es läuft auf einem PC, aber generiert code für iDevices. So, es kann nicht den computer verwenden Sie das native Programmieren von Ressourcen (Bibliotheken, header-Dateien). Sie haben zu sagen, wo sich iOS-eigenen Header und Bibliotheken. Sie können es tun, indem
-isysroot=/path/to/iOS_SDK/
option. Zum Beispiel, der folgende wird nicht funktionieren, out of the box:Aber Folgendes:
Ich nicht Xcode verwenden, ich habe weder einen Mac, so dass ich don ' T wissen, die genaue Lage der iOS-toolchain-sysroot, aber es könnte etwas sein wie der in dem oben genannten Befehl.
Und wie man all das mit konfigurieren? Gut, Sie haben 3 Zusammenstellung Phasen: Vorverarbeitung, Kompilierung und Verlinkung. SO muss man sagen, der Präprozessor und der compiler wo kann es finden, den Header, und dem linker, wo kann es finden die Bibliotheken. (Besonders, Sie haben vergessen zu sagen, die Präprozessor, wo Ihre sysroot ist). So etwas wie das hier tun:
llvm-gcc-4.2
undllvm-cpp-4.2
mitarm-apple-darwin10-llvm-gcc-4.2
undarm-apple-darwin10-llvm-g++-4.2
jeweils, aber ich bin noch immer der gleiche Fehler "C compiler cannot create executables" 😐"Ich bin noch immer der gleiche Fehler "C compiler cannot create executables" 😐 " Einfach laufen ./konfigurieren Sie als root (sudo ./konfigurieren ....)
Ich habe ein Projekt auf GitHub baut curl (für HTTP nur) mit und ohne SSL (GnuTLS und OpenSSL). Verlassen viele Kommentare, damit sollte einfach genug für jedermann zu ändern, nach seinen besonderen Bedürfnissen.
Dieses Skript hat bei mir mit Xcode 4.4.1 Umwelt (entschuldigen Sie meine fast nicht existent sh Fähigkeiten):