Ce client SOAP générique vous permet d'accéder aux services Web à l'aide de votre application iOS, Mac OS X et Apple TV.
Avec ce framework, vous pouvez créer des applications iPhone, iPad, Mac OS X et Apple TV prenant en charge le protocole client SOAP. Ce framework est capable d'exécuter des méthodes sur des services Web distants avec le protocole standard SOAP.
Swift 4 : la bibliothèque est actuellement écrite en Objective-C et lorsque vous importez la bibliothèque Swift, vous obtiendrez des erreurs de construction comme celle-ci. The use of Swift 3 @objc inference in Swift 4 mode is deprecated
.
Pour le mode silencieux, cet avertissement doit définir Swift 3 @objc Inference
sur la valeur par défaut dans les paramètres de construction de la cible. mais ce n'est pas tout ; les classes utilisées pour créer des requêtes doivent être déclarées avec @objcMembers
et NSObject
, par exemple :
class MyClass { ... }
let param = MyClass ( )
// ...
// ...
let soap = SOAPEngine ( )
soap . setValue ( param , forKey : " myKey " )
// ...
// ...
la déclaration de MyClass doit devenir :
@ objcMembers class MyClass : NSObject { ... }
À partir du nouveau Xcode 8, un paramètre supplémentaire est requis pour les applications. Si ce paramètre n'existe pas, vous verrez un message de journal comme celui-ci :
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.
Pour résoudre ce problème, ajoutez quelques clés dans info.plist, les étapes sont les suivantes :
info.plist
de votre projet.NSAppTransportSecurity
en tant que dictionnaire.NSAllowsArbitraryLoads
en tant que booléen et définissez sa valeur sur OUI comme dans l'image suivante. lien de référence : http://stackoverflow.com/a/32631185/4069848
avec les délégués :
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 )
}
}
avec programmation par blocs :
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! )
}
}
}
avec Notifications :
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 )
}
}
Requête synchrone :
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 )
}
}
}
paramètres pour l'authentification SOAP :
soap . authorizationMethod = . AUTH_BASICAUTH; // basic auth
soap . username = " my-username " ;
soap . password = " my-password " ;
paramètres du jeton Social OAuth2.0 :
// token authorization
soap . authorizationMethod = . AUTH_SOCIAL;
soap . apiKey = " 1234567890 " ; // your apikey https://dev.twitter.com/
soap . socialName = ACAccountTypeIdentifierTwitter; // import Accounts
Données de cryptage/déchiffrement sans SSL/HTTPS :
soap . encryptionType = . _ENCRYPT_AES256; // or SOAP_ENCRYPT_3DES
soap . encryptionPassword = " my-password " ;
Paramètres avec attributs :
// 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 " ] )
il construit une requête comme celle-ci :
< Book rack = " 2 " >
< name >Genesis name >
< chapter order = " asc " >1 chapter >
Book >
Tout d'abord, si vous constatez un ralentissement dans la réponse de la requête, essayez de changer la valeur de la propriété nommée actionNamespaceSlash
. Ensuite, lors de l'utilisation de la méthode nommée requestWSDL
trois étapes sont effectuées :
ce n'est pas optimisé, très lent, vous pouvez utiliser l'optimisation ci-dessous :
SOAPEngine est disponible sous forme de package Swift. L'URL du référentiel est valide pour ajouter le package dans votre application via Xcode.
Lire le guide "Mise en route"
Lire l'intégration de SOAPEngine avec un projet Swift
Lire le guide « Installation standard »
Procès juste un simulateur | Application unique identifiant de bundle unique | Entreprise identifiant multi-bundle |
---|---|---|
TÉLÉCHARGER | ACHETER 12,99€ | ACHETER 77,47€ |