教程:
下面是一篇有澳洲墨爾本的一名全職iOS開發人員提供的文章。他在論壇上是一個很摩登的年輕人 – Adam Eberbach。
·Bundle identifier
·provisioning profiles
·App ID
·certificate signing request
對於新手,的確很難一口氣搞清楚這些東東到底有什麼區別。
下面我們來揭開它們的神秘面紗,在讀完這篇文章後,你應該可以把這些東西聯絡起來,你能夠理解它們是怎麼工作,並能夠順利地在device上運行你的應用了。
當然,這裡假設你已經是一個iOS開發人員,擁有IDP,並已經有一定的xcode和iOS開發經驗了。如果你只是剛剛開始學習iOS,你可以先看看其它入門教程。
好吧,我們開始了。
它們有多重要?
Code signing 對你來說,最主要的意義就是它能讓你的App在裝置上運行。不管是你自己的裝置,甲方客戶的,還是在App store上購買你的消費者。
如果沒有code signing,你只可以在模擬器上,或者一台越獄過的機器上運行你的應用----當然,僅僅如此是不能滿足我們的。
模擬器的測試僅僅是一種初步測試,模擬器不能替代真機調試,因為:
·真正的裝置會通常比模擬器慢
模擬器使用的是你的MAC機上的處理器,而一台真正的iphone可遠遠沒有這種條件。所以如果你不在裝置上真正運行,你可能就會忽略實際的效能問題。
比如你建立一個ViewBased應用,然後在viewDidLoad裡面加入下列代碼:
int count =200000;
NSMutableArray * array = [NSMutableArray arrayWithCapacity:count];
for (int i =0; i < count; ++i) {
[array addObject:[NSString stringWithFormat:@"%d", i]];
}
上面這段代碼在模擬器上可能1-2秒就能運行完,但是在真機上面(比如iphone 3GS),大約要花7秒左右的時間。
·裝置的記憶體少很多
同理的,模擬器使用你MAC上的記憶體,而一台真正的iphone的記憶體少得多。
特別是遊戲,通常會使用大量的圖片,佔用大量的記憶體。在老一點型號的機器上,一個紋理圖片的大小上限是24MB,也就是1024X1024的8bit紋理圖。
記憶體耗盡絕對是你不想見到的,因為佔用的記憶體超過一定範圍,OS會強行退出你的app,對使用者來說,就認為是你的app崩潰了。
·有些API只在裝置上有效
譬如In-App purchase的API,或者Instrument中的Core Animation。這些都要在真機上測試出來。(可能以後版本的iOS或者xcode能夠支援,但畢竟真機測試是一種保障)
總的來說,你沒有在真機上測試過,等於你沒有真的測試完。
·(譯者註:一些視覺上的效果在模擬器上看到的可能會與真機不一致)
在Xcode中有一些懶人的方法:
在organizer的介面中,選中devices 右鍵Developer Profile,你可以看到這樣一個菜單。
裡面有大部分這篇文章將要講到的內容。
這裡你可以sign in你的開發人員帳號,自動登記你的app並運行到你的device上。
當然,如果這樣總是好用的話,這篇文章就沒有意義了。
作為一個開發人員,你應該知道更多。
Public and Private Keys 公開金鑰私密金鑰
在繼續剖析之前,我們先簡單地解析公開金鑰私密金鑰。
這世上有兩種加密方法:symmetric cryptography 對稱密碼和 asymmetric cryptography非對稱密碼。
對於對稱密碼,只有一種key。譬如你有一個密鑰,以及對應的一個加密過的資訊。
那隻有知道密鑰的人可以解讀這個資訊。
對於非對稱密碼,有兩個key – 公開金鑰和私密金鑰。
譬如你用某個私密金鑰加密一些資訊,別人收到這個資訊後可以通過那個私密金鑰對應的公開金鑰來加密。這樣他們就可以肯定,這個資訊是從你那裡來的(至少是你加密的)。
這個私密金鑰就相當於一個“簽名”。(你加的密,就是你簽的字)
而這個,就是在iOS中code signing背後的原理。
Code Signing Objects
與Code Signing有關的東西有:
Provisioning Profiles,App IDs,UDIDs …
在這一節,我們會一個一個地解說。
我用Core Data繪製了一個圖表,用來描述這些對象之間的關係。
這是針對開發人員的(Development Profile),發布人員的圖會有小小區別。
私密金鑰 Private Key:
在Mac OS X 以後,key由一個叫做 Keychain的app來管理。你可以在 Application\Utilities 中找到。
運行Keychain,你可以看到在你的名下有哪些公開金鑰和私密金鑰。類似這樣的:
(這是私隱,要加碼的)
如果你沒有看到任何key的列表,不用擔心。在你第一次使用認證的時候,Keychain會幫你建立。
在這裡列出的key是你的provisioning或者code signing的基礎。
你必須有key才能sign code或者在App store中發布你的app。
如果key丟失了?
你必須把整個流程重新做一次 – 因為沒有key,你的認證不再有效,你的provisioning profile只會產生error。你會浪費很多時間,所以,好好保管它。
如果你沒有備份過,我建議你馬上把它export出來,通過File\Export Items ,儲存在一個安全的地方,例如一個很小的分區中。或者通過你的Mobile Me帳號來同步儲存。
有多個Key?
如果你在不同的Mac機上建立過account,你將會有多個key。
這樣會帶來一個問題,在機器A上產生的認證,在沒有私密金鑰的機器B上會失效。
所以,你可以把你所有的key複製到你所有的Mac機上。(這樣就不用煩了)
或者,我更建議只用一個Key。
UDID
UDID (Unique Device Identifier)是區分物理裝置的唯一標識。
所有你的iPhone肯定有一個與眾不同的UDID,包括你的iPad等等。
通常,UDID會是一個40位十六進位字串。
也就是的identifier:
如果App不是從app store上來,你的代碼需要有UDID的資訊才能運行。
怎麼知道你擁有的裝置的UDID?有幾個方法。
1 如果你的裝置連到Xcode的機器上,你可以在Organizer中看到UDID。
2 沒有xcode的朋友也可以,在iTunes的 Summary介面,有serial number(序號)的資訊,點擊可以看到。
3 這是最簡單的方法,在App Store中下載一個Ad Hoc Helper吧。
Certificate 認證
認證,就是你的個人開發人員認證,或者更華麗地說:“Apple Worldwide Developer Relations Certification Authority Certificate”(這不翻譯了),
這個本質上就是一些代表著信任-授權的資料而已。
擷取一個認證,你需要子啊Keychain Access中產生一個 Certificate Signing Request,並把它發給Apple。這會建立一對公開金鑰-私密金鑰(如果還沒有的話)。
Apple收到後會驗證資訊,然後給你建立一個認證。
App ID
在Xcode4中建立一個項目,你要提供 Product Name 和 Company Identifier的資訊。
Product Name,就是你的app的一個較短的名稱。
Company identifier,通常會是一個反轉的DNS串,例如:com.mycompanyname
這兩者合起來,就似乎Bundle Identifier。你會在Info.plist中找到。
對於每一個你要發布的app,你需要到iTunes Developer Center中註冊你的App ID。如。
這個需要與你在Info.plist中設定的保持一致。
Provisioning Profile
把前面講到的東西合起來:
·App ID (app的唯一標識)
·UDID (在某台裝置上啟動並執行唯一標識)
·Certificate (開發人員認證)
就是所謂的Provisioning Profile。
Provisioning Profile 通過xcode或者itunes匯入到device中,或者打包到一個包含app和profile的.ipa檔案中。
你可以在iOS Provisioning Portal 中建立你的Provisioning Profile。
建立一個,有一下幾個步驟:
·為profile命名,以後你會在xcode的organizer,Buid Settings 以及其它一些地方中看到
·選擇你的certificate
·選擇你的App ID,要如Info.plist中的一致。
·選擇要應用到的裝置。通常,我都是把我的裝置全選的。
個人用途的簽名 Signing
假設你已經有一個準備測試的App,而你有IDP,並且處理好Provisioning Profile的事情了。
現在你清楚已經知道它們的邏輯了,如果你新加入,下面這些是你要做的:
1 檢查你的公開金鑰私密金鑰,為以後檢查方便,起個好名吧。
2 用Keychain Access來建立你的開發認證。然後下載Apple給你的認證,雙擊安裝,然後你可以在Keychain中看到了吧。
3 下載“Apple Worldwide Developer Relations Certification Authority Certificate”(WWDR)也是雙擊安裝,也可以到Keychain中看到。
4 檢查你項目的Bundle ID,到Provisioning Portal中建立一個一致的App ID。
5 在Provisioning Portal中加入你想要的UDID。(全部加上好了)
6 針對你的Certificate建立Provisioning Profile, 指定你的app ID 和UDID。
7 下載剛剛建立的Profile,拖到你的xcode Organizer中。
然後,你就可以sign你的project,並讓它們在你的device上運行了。
在Target – Build Settings ,往下滾動到 Code Signing一節。
試試編輯一下Debug schema,它適合於團隊協作:
在Automatic ProfileSelector中選擇“iPhone Developer”,你會看到你的認證已經自動選上了。
一切都搞定了,串連你的device,在xcode中選擇Debug build,build & run。
xcode會到你的裝置裡裝上這個provisioning profile,並運行你的App。
原文地址:http://www.cnblogs.com/andyque/archive/2011/08/30/2159086.html