- Notifications
You must be signed in to change notification settings - Fork75
This generic SOAP client allows you to access web services using a your iOS app, Mac OS X app and AppleTV app.
License
priore/SOAPEngine
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This genericSOAP client allows you to access web services using a youriOS app,Mac OS X app andApple TV app.
With this Framework you can createiPhone,iPad,Mac OS X andApple TV apps that supportsSOAP Client Protocol. This framework able executes methods at remote web services withSOAP standard protocol.
- Support both 2001 (v1.1) and 2003 (v1.2)XML schema.
- Support array, array of structs, dictionary and sets.
- Support for user-defined object with serialization of complex data types and array of complex data types, even embedded multilevel structures.
- SupportsASMX Services,WCF Services (SVC) and now also theWSDL definitions.
- SupportsBasic,Digest andNTLM Authentication,WS-Security, Client side Certificate and custom security header.
- SupportsiOS Social Account to sendOAuth2.0 token on the request.
- AES256 or3DES Encrypt/Decrypt data withoutSSL security.
- An example of service and how to use it is included in source code.
Requirements foriOS
- iOS 8.0 and later
- Xcode 8.0 or later
- Security.framework
- Accounts.framework
- Foundation.framework
- UIKit.framework
- libxml2.dylib
Requirements forMac OS X
- OS X 10.9 and later
- Xcode 8.0 or later
- Security.framework
- Accounts.framework
- Foundation.framework
- AppKit.framework
- Cocoa.framework
- libxml2.dylib
Requirements forApple TV
- iOS 9.0 and later
- Xcode 8.0 or later
- Security.framework
- Foundation.framework
- UIKit.framework
- libxml2.dylib
- forWCF services, only supports basic http bindings (basicHttpBinding).
- inMac OS X unsupported image objects, instead you can use theNSData.
Swift 4: the library is currently written in Objective-C and when you import the swift library you will get build errors like this
The use of Swift 3 @objc inference in Swift 4 mode is deprecated
.For silent this warning is need sets
Swift 3 @objc Inference
to default value in the the Build settings of target.but It's not all; the classes used to create requests must be declared with@objcMembers
andNSObject
, eg:classMyClass{...}letparam=MyClass() // ... // ...letsoap=SOAPEngine() soap.setValue(param, forKey:"myKey") // ... // ...
the declaration of MyClass must become :
@objcMembersclassMyClass:NSObject{...}
From the new Xcode 8 is required an additional setting for the apps, if this setting does not exist you will see a log message like this:
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.
To resolve this, add few keys in info.plist, the steps are:
- Open
info.plist
file of your project. - Add a Key called
NSAppTransportSecurity
as a Dictionary. - Add a Subkey called
NSAllowsArbitraryLoads
as Boolean and set its value to YES as like following image.
ref link:http://stackoverflow.com/a/32631185/4069848
withDelegates :
import SOAPEngine64classViewController:UIViewController,SOAPEngineDelegate{varsoap:SOAPEngine=SOAPENgine()overridefunc viewDidLoad(){soap.delegate=selfsoap.actionNamespaceSlash=truesoap.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!){letdict= soapEngine.dictionaryValue()print(dict)}}
withBlock programming :
import SOAPEngine64classViewController:UIViewController{varsoap:SOAPEngine=SOAPENgine()overridefunc viewDidLoad(){super.viewDidLoad()soap.actionNamespaceSlash=truesoap.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]?)->Voidinletbook:NSDictionary= dict!asNSDictionaryletverses=book["BibleBookChapterVerse"]as!NSArrayprint(verses)}){(error:Error?)->Voidinprint(error!)}}}
withNotifications :
import SOAPEngine64classViewController:UIViewController{varsoap:SOAPEngine=SOAPENgine()overridefunc viewDidLoad(){super.viewDidLoad()NotificationCenter.default.addObserver(self, selector: #selector(soapEngineDidFinishLoading(_:)), name:NSNotification.Name.SOAPEngineDidFinishLoading, object:nil)soap.actionNamespaceSlash=truesoap.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")}@objcfunc soapEngineDidFinishLoading(_ notification:NSNotification){letengine= notification.objectas?SOAPEngineletdict=engine()print(dict)}}
Synchronous request :
import SOAPEngine64classViewController:UIViewController{varsoap:SOAPEngine=SOAPENgine()overridefunc viewDidLoad(){super.viewDidLoad()soap.actionNamespaceSlash=truesoap.setValue("Genesis", forKey:"BookName")soap.setIntegerValue(1, forKey:"chapter")// standard soap service (.asmx)do{letresult=try soap.syncRequestURL("http://www.prioregroup.com/services/americanbible.asmx", soapAction:"http://www.prioregroup.com/GetVerses")print(result)}catch{print(error)}}}
settings forSOAP Authentication :
soap.authorizationMethod=.AUTH_BASICAUTH; // basic authsoap.username="my-username";soap.password="my-password";
settings for SocialOAuth2.0 token :
// token authorizationsoap.authorizationMethod=.AUTH_SOCIAL;soap.apiKey="1234567890"; // your apikey https://dev.twitter.com/soap.socialName= ACAccountTypeIdentifierTwitter; // import Accounts
Encryption/Decryption data without SSL/HTTPS :
soap.encryptionType=._ENCRYPT_AES256; // or SOAP_ENCRYPT_3DESsoap.encryptionPassword="my-password";
Params withAttributes :
// bookvarbook=["name":"Genesis"]as!NSMutableDictionaryvarattr=["order":"asc"]// chaptervarchild= soap.dictionary(forKey:"chapter", value:"1", attributes: attr)book.addEntries(from: child!)// book attributessoap.setValue(book, forKey:"Book", attributes:["rack":"2"])
it builds a request like this:
<Bookrack="2"><name>Genesis</name><chapterorder="asc">1</chapter></Book>
First of all, if you note a slowdown in the response of the request, try to change the value of the property namedactionNamespaceSlash
.After, when using the method namedrequestWSDL
three steps are performed :
- retrieve the WSDL with an http request
- processing to identify the soapAction
- calls the method with an http requesthttp request
this is not optimized, very slow, instead you can use the optimization below :
- retrieving manually the SOAPAction directly from WSDL (once with your favorite browser).
- use the method named requestURL instead of requestWSDL without WSDL extension.
SOAPEngine is available as a Swift package. The repositoryURL is valid for adding the package in your app through the Xcode.
Read the"Getting Started" guide
Read theIntegrating SOAPEngine with a Swift project
Read the"Standard Installation" guide
Trial just simulator | Single App single bundle-id | Enterprise multi bundle-id |
---|---|---|
DOWNLOAD | BUY 12,99€ | BUY 77,47€ |
About
This generic SOAP client allows you to access web services using a your iOS app, Mac OS X app and AppleTV app.