**:
iphone應用程式https伺服器連線教程是我們要一起來學習的內容。你是否也想讓自己的iphone應用程式連線https 伺服器呢?下面我就介紹一下其使用方法。
通常使用 objective-c 的 nsurlconnection 連線有證明書的https 伺服器時會出現驗證錯誤,我們可以使用私有api — setallowsanyhttpscertificate:forhost 來解決這個問題。如果是 cocoa 的應用程式應該是沒有什麼問題,但是用在iphone所以這裡我們使用 libcurl 來完成在 iphone 上連線 https 伺服器。
準備
編譯 openssl
連線 https 的前提是要有 openssl。你可以參考 這裡 來為 iphone 編譯 openssl 靜態庫。最終得到下面兩個靜態庫檔案。
libcrypto.a編譯 libcurllibssl.a
./configure如果最後輸出下面的內容,說明可以編譯支援 https 的 libcurl 了。--prefix
=$home/tmp/iphonelib/curl \
--host
=arm
--with-random
=/dev/urandom \
cc=/developer/platforms/iphoneos.platform/developer/usr/bin/gcc \
cflags
="-arch armv6 -isysroot /developer/platforms/iphoneos.platform/developer/sdks/
iphoneos3.0.sdk -i$home/tmp/iphonelib/openssl/include -l$home/tmp/iphonelib/openssl/lib"
\ cpp
=/developer/platforms/iphoneos.platform/developer/usr/bin/cpp \
ar=/developer/platforms/iphoneos.platform/developer/usr/bin/ar
ssl support: enabled (openssl)接下來
make編譯結果輸出到 ~/tmp/iphonelib/curl/lib 下的 libcurl.a。make install
使用
新增到工程中,如圖:
如下圖所示,將編譯好的靜態庫拖到你的工程中:
另外,由於 openssl 中使用了 zlib,所以還需要在工程中加入鏈結開關。(該庫被包含在iphone中,不需要重新編譯)
如下圖所示,在連線中追加 -lz。如圖:
最後,如下圖新增編譯所需的標頭檔案路徑。如圖:
比如,編譯 libcurl 時的標頭檔案的路徑 ~/tmp/iphonelib/curl/include 。
#include
<
curl
/curl.h
>
window
= [[uiwindow alloc] initwithframe:[[uiscreen mainscreen] bounds]];
[window makekeyandvisible];
curl *curl;
curlcode res;
curl
= curl_easy_init
();
if (curl)
curl_easy_cleanup(curl);
} }
-(void)dealloc
@end
編譯執行,可以用除錯工具得到取得的html,如下圖。
在模擬器中使用 libcurl
上面介紹的都是在裝置上執行的例子,如果要在模擬器上使用,由於處理器結構不一樣,需要重新編譯 openssl 和 curl 靜態庫。編譯的時候,只要將 sdk 的路徑由 iphoneos.platform ⇒ iphonesimulator.platform,編譯開關 -arch armv6 ⇒ -arch i386 就可以了。只是編譯的檔名最好和iphone上用的區別開來,如下所示:
libcrypto_simulator.a又或者不改變庫的名稱,而是增加新的編譯目標。libssl_simulator.a
libcurl_simulator.a
iPhone應用程式委託
iphone的軟體棧有好幾層組成,而應用程式是位於棧裡面最高的抽象層,系統核心服務 作業系統層 則是位於最底層的。這中間還有 層 cocoatouch層 核心服務層等等 但一般在開發應用程式的過程中,與我們主要打交道的是gui框架和cocoatouch層所提供的物件導向抽象。cocoa的founda...
iphone應用程式結構
classes 源程式檔案 h m other sources main.m 等,不需要程式設計師修改 prefix.pch resources 介面檔案 xib 配置檔案 info.plist frameworks 鏈結的庫 targets 專案的不同target 資源 編譯配置不同 execut...
iPhone應用程式生命週期
int argc,char argv,nsstring principalclassname,nsstring delegateclassname 來獲取應用程式的控制代碼。2 從給定的應用程式委託類,初始化乙個應用程式委託。並把該委託設定為應用程式的委託,這裡就有如果傳入引數為nil,會呼叫函式訪...