Mit diesem generischen SOAP-Client können Sie über Ihre iOS-App, Mac OS X-App und Apple TV-App auf Webdienste zugreifen.
Mit diesem Framework können Sie iPhone-, iPad-, Mac OS X- und Apple TV-Apps erstellen, die das SOAP Client Protocol unterstützen. Dieses Framework ist in der Lage, Methoden bei Remote-Webdiensten mit dem SOAP-Standardprotokoll auszuführen.
Swift 4 : Die Bibliothek ist derzeit in Objective-C geschrieben und wenn Sie die Swift-Bibliothek importieren, erhalten Sie Build-Fehler wie diesen. The use of Swift 3 @objc inference in Swift 4 mode is deprecated
.
Damit diese Warnung nicht angezeigt wird, muss Swift 3 @objc Inference
in den Build-Einstellungen des Ziels auf den Standardwert gesetzt werden. aber es ist nicht alles ; Die zum Erstellen von Anforderungen verwendeten Klassen müssen mit @objcMembers
und NSObject
deklariert werden, z. B.:
class MyClass { ... }
let param = MyClass ( )
// ...
// ...
let soap = SOAPEngine ( )
soap . setValue ( param , forKey : " myKey " )
// ...
// ...
Die Deklaration von MyClass muss wie folgt lauten:
@ objcMembers class MyClass : NSObject { ... }
Ab dem neuen Xcode 8 ist eine zusätzliche Einstellung für die Apps erforderlich. Wenn diese Einstellung nicht vorhanden ist, wird eine Protokollmeldung wie diese angezeigt:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
Um dieses Problem zu beheben, fügen Sie einige Schlüssel in info.plist hinzu. Die Schritte sind:
info.plist
Ihres Projekts.NSAppTransportSecurity
als Wörterbuch hinzu.NSAllowsArbitraryLoads
als booleschen Wert hinzu und setzen Sie seinen Wert auf „JA“, wie in der folgenden Abbildung dargestellt. Referenzlink: http://stackoverflow.com/a/32631185/4069848
mit Delegierten :
import SOAPEngine64
class ViewController : UIViewController , SOAPEngineDelegate {
var soap : SOAPEngine = SOAPENgine ( )
override func viewDidLoad ( ) {
soap . delegate = self
soap . actionNamespaceSlash = true
soap . setValue ( " Genesis " , forKey : " BookName " )
soap . setIntegerValue ( 1 , forKey : " chapter " )
// standard soap service (.asmx)
soap . requestURL ( " http://www.prioregroup.com/services/americanbible.asmx " ,
soapAction : " http://www.prioregroup.com/GetVerses " )
}
func soapEngine ( _ soapEngine : SOAPEngine ! , didFinishLoadingWith dict : [ AnyHashable : Any ] ! , data : Data ! )
{
let dict = soapEngine . dictionaryValue ( )
print ( dict )
}
}
mit Blockprogrammierung :
import SOAPEngine64
class ViewController : UIViewController {
var soap : SOAPEngine = SOAPENgine ( )
override func viewDidLoad ( ) {
super . viewDidLoad ( )
soap . actionNamespaceSlash = true
soap . setValue ( " Genesis " , forKey : " BookName " )
soap . setIntegerValue ( 1 , forKey : " chapter " )
soap . requestURL ( " http://www.prioregroup.com/services/americanbible.asmx " ,
soapAction : " http://www.prioregroup.com/GetVerses " ,
completeWithDictionary : { ( statusCode : Int ? , dict : [ AnyHashable : Any ] ? ) -> Void in
let book : NSDictionary = dict! as NSDictionary
let verses = book [ " BibleBookChapterVerse " ] as! NSArray
print ( verses )
} ) { ( error : Error ? ) -> Void in
print ( error! )
}
}
}
mit Benachrichtigungen :
import SOAPEngine64
class ViewController : UIViewController {
var soap : SOAPEngine = SOAPENgine ( )
override func viewDidLoad ( ) {
super . viewDidLoad ( )
NotificationCenter . default . addObserver ( self ,
selector : #selector ( soapEngineDidFinishLoading ( _ : ) ) ,
name : NSNotification . Name . SOAPEngineDidFinishLoading ,
object : nil )
soap . actionNamespaceSlash = true
soap . setValue ( " Genesis " , forKey : " BookName " )
soap . setIntegerValue ( 1 , forKey : " chapter " )
// standard soap service (.asmx)
soap . requestURL ( " http://www.prioregroup.com/services/americanbible.asmx " ,
soapAction : " http://www.prioregroup.com/GetVerses " )
}
@ objc func soapEngineDidFinishLoading ( _ notification : NSNotification ) {
let engine = notification . object as? SOAPEngine
let dict = engine ( )
print ( dict )
}
}
Synchrone Anfrage:
import SOAPEngine64
class ViewController : UIViewController {
var soap : SOAPEngine = SOAPENgine ( )
override func viewDidLoad ( ) {
super . viewDidLoad ( )
soap . actionNamespaceSlash = true
soap . setValue ( " Genesis " , forKey : " BookName " )
soap . setIntegerValue ( 1 , forKey : " chapter " )
// standard soap service (.asmx)
do {
let result = try soap . syncRequestURL ( " http://www.prioregroup.com/services/americanbible.asmx " ,
soapAction : " http://www.prioregroup.com/GetVerses " )
print ( result )
}
catch {
print ( error )
}
}
}
Einstellungen für die SOAP-Authentifizierung :
soap . authorizationMethod = . AUTH_BASICAUTH; // basic auth
soap . username = " my-username " ;
soap . password = " my-password " ;
Einstellungen für Social OAuth2.0- Token:
// token authorization
soap . authorizationMethod = . AUTH_SOCIAL;
soap . apiKey = " 1234567890 " ; // your apikey https://dev.twitter.com/
soap . socialName = ACAccountTypeIdentifierTwitter; // import Accounts
Verschlüsselungs-/Entschlüsselungsdaten ohne SSL/HTTPS:
soap . encryptionType = . _ENCRYPT_AES256; // or SOAP_ENCRYPT_3DES
soap . encryptionPassword = " my-password " ;
Parameter mit Attributen :
// book
var book = [ " name " : " Genesis " ] as! NSMutableDictionary
var attr = [ " order " : " asc " ]
// chapter
var child = soap . dictionary ( forKey : " chapter " , value : " 1 " , attributes : attr )
book . addEntries ( from : child! )
// book attributes
soap . setValue ( book , forKey : " Book " , attributes : [ " rack " : " 2 " ] )
Es wird eine Anfrage wie diese erstellt:
< Book rack = " 2 " >
< name >Genesis name >
< chapter order = " asc " >1 chapter >
Book >
Wenn Sie eine Verlangsamung der Antwort auf die Anfrage feststellen, versuchen Sie zunächst, den Wert der Eigenschaft actionNamespaceSlash
zu ändern. Anschließend werden bei Verwendung der Methode namens requestWSDL
drei Schritte ausgeführt:
Dies ist nicht optimiert, sehr langsam. Stattdessen können Sie die folgende Optimierung verwenden:
SOAPEngine ist als Swift-Paket verfügbar. Die Repository-URL ist gültig, um das Paket über Xcode zu Ihrer App hinzuzufügen.
Lesen Sie die Anleitung „Erste Schritte“.
Lesen Sie den Artikel Integrieren von SOAPEngine in ein Swift-Projekt
Lesen Sie die Anleitung „Standardinstallation“.
Versuch nur Simulator | Einzelne App einzelne Bundle-ID | Unternehmen Multi-Bundle-ID |
---|---|---|
HERUNTERLADEN | KAUFEN 12,99€ | KAUFEN 77,47€ |