Este cliente SOAP genérico le permite acceder a servicios web utilizando su aplicación iOS, la aplicación Mac OS X y la aplicación Apple TV.
Con este Framework puedes crear aplicaciones para iPhone, iPad, Mac OS X y Apple TV que admitan el protocolo de cliente SOAP. Este marco puede ejecutar métodos en servicios web remotos con el protocolo estándar SOAP.
Swift 4 : la biblioteca está actualmente escrita en Objective-C y cuando importe la biblioteca Swift obtendrá errores de compilación como este. The use of Swift 3 @objc inference in Swift 4 mode is deprecated
.
Para que esta advertencia sea silenciosa, es necesario establecer Swift 3 @objc Inference
en el valor predeterminado en la configuración de compilación del objetivo. pero no es todo ; las clases utilizadas para crear solicitudes deben declararse con @objcMembers
y NSObject
, por ejemplo:
class MyClass { ... }
let param = MyClass ( )
// ...
// ...
let soap = SOAPEngine ( )
soap . setValue ( param , forKey : " myKey " )
// ...
// ...
la declaración de MyClass debe ser:
@ objcMembers class MyClass : NSObject { ... }
A partir del nuevo Xcode 8 se requiere una configuración adicional para las aplicaciones, si esta configuración no existe verá un mensaje de registro como este:
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.
Para resolver esto, agregue algunas claves en info.plist, los pasos son:
info.plist
de su proyecto.NSAppTransportSecurity
como diccionario.NSAllowsArbitraryLoads
como booleana y establezca su valor en SÍ como en la siguiente imagen. enlace de referencia: http://stackoverflow.com/a/32631185/4069848
con los delegados :
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 )
}
}
con programación de bloques :
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! )
}
}
}
con notificaciones :
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 )
}
}
Solicitud sincrónica :
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 )
}
}
}
configuración para la autenticación SOAP :
soap . authorizationMethod = . AUTH_BASICAUTH; // basic auth
soap . username = " my-username " ;
soap . password = " my-password " ;
configuración para el token Social OAuth2.0 :
// token authorization
soap . authorizationMethod = . AUTH_SOCIAL;
soap . apiKey = " 1234567890 " ; // your apikey https://dev.twitter.com/
soap . socialName = ACAccountTypeIdentifierTwitter; // import Accounts
Datos de cifrado/descifrado sin SSL/HTTPS:
soap . encryptionType = . _ENCRYPT_AES256; // or SOAP_ENCRYPT_3DES
soap . encryptionPassword = " my-password " ;
Parámetros con atributos :
// 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 " ] )
construye una solicitud como esta:
< Book rack = " 2 " >
< name >Genesis name >
< chapter order = " asc " >1 chapter >
Book >
En primer lugar, si nota una ralentización en la respuesta de la solicitud, intente cambiar el valor de la propiedad denominada actionNamespaceSlash
. Después, cuando se utiliza el método denominado requestWSDL
se realizan tres pasos:
Esto no está optimizado, es muy lento; en su lugar, puede utilizar la siguiente optimización:
SOAPEngine está disponible como paquete Swift. La URL del repositorio es válida para agregar el paquete en su aplicación a través de Xcode.
Lea la guía "Primeros pasos"
Lea Integración de SOAPEngine con un proyecto Swift
Lea la guía "Instalación estándar"
Ensayo solo simulador | Aplicación única ID de paquete único | Empresa ID de paquete múltiple |
---|---|---|
DESCARGAR | COMPRAR 12,99€ | COMPRAR 77,47€ |