이 일반 SOAP 클라이언트를 사용하면 iOS 앱, Mac OS X 앱 및 Apple TV 앱을 사용하여 웹 서비스에 액세스할 수 있습니다.
이 프레임워크를 사용하면 SOAP 클라이언트 프로토콜을 지원하는 iPhone, iPad, Mac OS X 및 Apple TV 앱을 만들 수 있습니다. 이 프레임워크는 SOAP 표준 프로토콜을 사용하여 원격 웹 서비스에서 메소드를 실행할 수 있습니다.
Swift 4 : 라이브러리는 현재 Objective-C로 작성되었으며 Swift 라이브러리를 가져올 때 다음과 같은 빌드 오류가 발생합니다. The use of Swift 3 @objc inference in Swift 4 mode is deprecated
.
자동의 경우 이 경고는 대상의 빌드 설정에서 Swift 3 @objc Inference
기본값으로 설정해야 합니다. 하지만 그게 전부는 아닙니다 . 요청을 생성하는 데 사용되는 클래스는 @objcMembers
및 NSObject
사용하여 선언되어야 합니다. 예:
class MyClass { ... }
let param = MyClass ( )
// ...
// ...
let soap = SOAPEngine ( )
soap . setValue ( param , forKey : " myKey " )
// ...
// ...
MyClass 선언은 다음과 같아야 합니다.
@ objcMembers class MyClass : NSObject { ... }
새로운 Xcode 8에서는 앱에 대한 추가 설정이 필요합니다. 이 설정이 없으면 다음과 같은 로그 메시지가 표시됩니다.
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.
이 문제를 해결하려면 info.plist에 몇 가지 키를 추가하세요. 단계는 다음과 같습니다.
info.plist
파일을 엽니다.NSAppTransportSecurity
라는 키를 사전으로 추가합니다.NSAllowsArbitraryLoads
라는 하위 키를 Boolean으로 추가하고 다음 이미지와 같이 해당 값을 YES로 설정합니다. 참조 링크: http://stackoverflow.com/a/32631185/4069848
대표자 와 함께 :
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 )
}
}
블록 프로그래밍 사용:
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! )
}
}
}
알림 포함:
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 )
}
}
동기 요청:
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 )
}
}
}
SOAP 인증 설정:
soap . authorizationMethod = . AUTH_BASICAUTH; // basic auth
soap . username = " my-username " ;
soap . password = " my-password " ;
소셜 OAuth2.0 토큰 설정:
// token authorization
soap . authorizationMethod = . AUTH_SOCIAL;
soap . apiKey = " 1234567890 " ; // your apikey https://dev.twitter.com/
soap . socialName = ACAccountTypeIdentifierTwitter; // import Accounts
SSL/HTTPS를 사용하지 않는 데이터 암호화/복호화 :
soap . encryptionType = . _ENCRYPT_AES256; // or SOAP_ENCRYPT_3DES
soap . encryptionPassword = " my-password " ;
속성이 있는 매개변수:
// 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 " ] )
다음과 같은 요청을 작성합니다.
< Book rack = " 2 " >
< name >Genesis name >
< chapter order = " asc " >1 chapter >
Book >
우선, 요청 응답 속도가 느려지는 경우 actionNamespaceSlash
속성 값을 변경해 보세요. 그런 다음 requestWSDL
이라는 메서드를 사용할 때 세 단계가 수행됩니다.
이는 최적화되지 않았으며 매우 느립니다. 대신 아래 최적화를 사용할 수 있습니다.
SOAPEngine은 Swift 패키지로 제공됩니다. 저장소 URL은 Xcode를 통해 앱에 패키지를 추가하는 데 유효합니다.
"시작하기" 가이드 읽기
Swift 프로젝트와 SOAPEngine 통합을 읽어보세요.
"표준 설치" 가이드 읽기
재판 그냥 시뮬레이터 | 단일 앱 단일 번들 ID | 기업 다중 번들 ID |
---|---|---|
다운로드 | 12,99€ 구매 | 77,47€ 구매 |