この汎用 SOAP クライアントを使用すると、iOS アプリ、Mac OS X アプリ、Apple TV アプリを使用して Web サービスにアクセスできます。
このフレームワークを使用すると、SOAP クライアント プロトコルをサポートする iPhone、iPad、Mac OS X、および Apple TV アプリを作成できます。このフレームワークは、SOAP 標準プロトコルを使用してリモート Web サービスでメソッドを実行できます。
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
というサブキーをブール値として追加し、その値を 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
という名前のメソッドを使用すると、次の 3 つのステップが実行されます。
これは最適化されておらず、非常に遅いため、代わりに以下の最適化を使用できます。
SOAPEngine は Swift パッケージとして利用できます。リポジトリ URL は、Xcode を介してアプリにパッケージを追加する場合に有効です。
「はじめに」ガイドを読む
SOAPEngine と Swift プロジェクトの統合を読む
「標準インストール」ガイドを読む
トライアル ただのシミュレーター | 単一のアプリ 単一のバンドル ID | 企業 マルチバンドルID |
---|---|---|
ダウンロード | 12,99ユーロを購入 | 77,47€を購入 |