測試設備
- Arduino UNO
- RFID-RC522,一組$280,含兩個 RFID Card 和 RFID Reader
gSOAP 可從 sourceforge 下載, xcode 可從 Mac 內建的 AppStore取得。
iOS plugin 利用 iOS 的 NSURL 與 NSMutableURLRequest 來實作傳送與接收 HTTP 層的資料,使用範例如下:
#import "gsoapios.h"
struct soap *soap = soap_new();
soap_register(soap, soap_ios); // Register the iOS plugin
...
soap_end(soap); // clean up allocated temporaries
soap_destroy(soap); // Free soap context
iOS plugin 的方法簡介
- 設定 Cache Policy
soap_ios_setchacepolicy(soap, NSURLRequestReturnCacheDataElseLoad);
- 設定timeout
soap_ios_settimeoutinterval(soap, 30.0);
- 設定帳號密碼
soap->userid = "someone";
soap->passwd = "somepass";
a.直接取得 wsdiscovery 程式碼
git clone https://github.com/alb423/wsdiscoveryb.開啟 xcode, 新增一個 project, 將 wsdiscovery 目錄內的檔案都新增至 Project (main.c除外)
c. 新增 wsdiscovery_api.m,參考 main.c 進行小量修改
d. 開始編譯。此時會出現幾種錯誤,主要其解決方式如下
d1. 找不到 NSString,在 gsoapios.h 加入include file 即可,如下:
#import <UIKit\UIKit.h>
d2. 找不到 DLog,在 gsoapios.h 自行定義即可,如下:
#ifdef DEBUGd3. ARC (Automatic Reference Counting),
#define DLog NSLog
#else
#define DLog(X, ...) ;;;
#endif
可設定 gsoapios.m 不使用 ARC,設定方式為 Target -> Build Phases -> Compile Sources -> 選擇 gsoapios.m,輸入 -fno-objc-arc即可。如下圖
d4. "ARC forbids Objective-C objects in struct"
將 GSoapiOSURLData *url_data;
改為 __unsafe_unretained GSoapiOSURLData *url_data;