يتيح لك عميل SOAP العام الوصول إلى خدمات الويب باستخدام تطبيق iOS، وتطبيق Mac OS X، وتطبيق Apple TV.
باستخدام هذا الإطار، يمكنك إنشاء تطبيقات iPhone وiPad وMac OS X وApple TV التي تدعم SOAP Client Protocol. يقوم إطار العمل هذا بتنفيذ الأساليب في خدمات الويب عن بعد باستخدام بروتوكول 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.
اقرأ دليل "البدء".
اقرأ دمج SOAPEngine مع مشروع Swift
اقرأ دليل "التثبيت القياسي".
محاكمة مجرد محاكاة | تطبيق واحد معرف حزمة واحدة | مَشرُوع معرف حزمة متعددة |
---|---|---|
تحميل | شراء 12,99 يورو | شراء 77,47 يورو |