各種iOS名詞的意義所在

教程截圖:

Learn all about how Code Signing works!

下面是一篇由澳洲墨爾本的一名全職iOS開發(fā)者提供的文章。他在論壇上是一個很摩登的年輕人 – Adam Eberbach丹擎。

·Bundle identifier

·provisioning profiles

·App ID

·certificate signing request

對于新手执赡,的確很難一口氣搞清楚這些東東到底有什么區(qū)別镰踏。

下面我們來揭開它們的神秘面紗,在讀完這篇文章后沙合,你應該可以把這些東西聯(lián)系起來奠伪,你能夠理解它們是怎么工作,并能夠順利地在device上運行你的應用了首懈。

當然绊率,這里假設你已經(jīng)是一個iOS開發(fā)者,擁有IDP究履,并已經(jīng)有一定的xcode和iOS開發(fā)經(jīng)驗了滤否。如果你只是剛剛開始學習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徒探,你可以看到這樣一個菜單瓦呼。

里面有大部分這篇文章將要講到的內容。

Automatic provisioning with Xcode 4

這里你可以sign in你的開發(fā)者賬號测暗,自動登記你的app并運行到你的device上央串。

當然,如果這樣總是好用的話碗啄,這篇文章就沒有意義了质和。

作為一個開發(fā)者,你應該知道更多稚字。

Public and Private Keys 公鑰私鑰

在繼續(xù)剖析之前饲宿,我們先簡單地解析公鑰私鑰。

這世上有兩種加密方法:symmetric cryptography 對稱密碼和 asymmetric cryptography非對稱密碼胆描。

對于對稱密碼褒傅,只有一種key。譬如你有一個密鑰袄友,以及對應的一個加密過的信息殿托。

那只有知道密鑰的人可以解讀這個信息。

對于非對稱密碼剧蚣,有兩個key – 公鑰和私鑰支竹。

譬如你用某個私鑰加密一些信息旋廷,別人收到這個信息后可以通過那個私鑰對應的公鑰來加密。這樣他們就可以肯定礼搁,這個信息是從你那里來的(至少是你加密的)饶碘。

這個私鑰就相當于一個“簽名”。 (你加的密馒吴,就是你簽的字)

而這個扎运,就是在iOS中code signing背后的原理。

Code Signing Objects

與Code Signing有關的東西有 :

Provisioning Profiles饮戳,App IDs豪治,UDIDs …

在這一節(jié),我們會一個一個地解說扯罐。

我用Core Data繪制了一個圖表负拟,用來描述這些對象之間的關系。

Objects related to Code Signing

這是針對開發(fā)人員的 (Development Profile)歹河,發(fā)布人員的圖會有小小區(qū)別掩浙。

私鑰 Private Key:

在Mac OS X 以后,key由一個叫做 Keychain的app來管理秸歧。 你可以在 Application\Utilities 中找到厨姚。

運行Keychain,你可以看到在你的名下有哪些公鑰和私鑰键菱。類似這樣的:

Keychain Access showing public/private keys

(這是私隱遣蚀,要加碼的)

如果你沒有看到任何key的列表,不用擔心纱耻。在你第一次使用認證的時候,Keychain會幫你創(chuàng)建险耀。

在這里列出的key是你的provisioning或者code signing的基礎弄喘。

你必須有key才能sign code或者在App store中發(fā)布你的app。

如果key丟失了甩牺?

你必須把整個流程重新做一次 – 因為沒有key蘑志,你的認證不再有效,你的provisioning profile只會生成error贬派。你會浪費很多時間急但,所以,好好保管它搞乏。

如果你沒有備份過波桩,我建議你馬上把它export出來,通過File\Export Items 请敦,保存在一個安全的地方镐躲,例如一個很小的分區(qū)中储玫。或者通過你的Mobile Me賬號來同步保存萤皂。

有多個Key撒穷?

如果你在不同的Mac機上創(chuàng)建過account,你將會有多個key裆熙。

這樣會帶來一個問題端礼,在機器A上生成的認證,在沒有私鑰的機器B上會失效入录。

所以蛤奥,你可以把你所有的key復制到你所有的Mac機上。(這樣就不用煩了)

或者纷跛,我更建議只用一個Key喻括。

UDID

UDID (Unique Device Identifier)是區(qū)分物理設備的唯一標識。

所有你的iPhone肯定有一個與眾不同的UDID贫奠,包括你的iPad等等唬血。

通常,UDID會是一個40位十六進制字符串唤崭。

也就是下圖的identifier:

How to see your device's UDID in XCode Organizer

如果App不是從app store上來拷恨,你的代碼需要有UDID的信息才能運行。

怎么知道你擁有的設備的UDID谢肾?有幾個方法腕侄。

1 如果你的設備連到Xcode的機器上,你可以在Organizer中看到UDID芦疏。

2 沒有xcode的朋友也可以冕杠,在iTunes的 Summary界面,有serial number(序列號)的信息酸茴,點擊可以看到分预。

How to find a device's UDID in iTunes

3 這是最簡單的方法,在App Store中下載一個Ad Hoc Helper吧薪捍。

Certificate 認證

認證笼痹,就是你的個人開發(fā)者認證,或者更華麗地說:“Apple Worldwide Developer Relations Certification Authority Certificate”(這不翻譯了)酪穿,

這個本質上就是一些代表著信任-授權的數(shù)據(jù)而已凳干。

獲取一個認證,你需要子啊Keychain Access中生成一個 Certificate Signing Request被济,并把它發(fā)給Apple救赐。這會創(chuàng)建一對 公鑰-私鑰(如果還沒有的話)。

Apple收到后會驗證信息只磷,然后給你創(chuàng)建一個認證净响。

App ID

在Xcode4中創(chuàng)建一個項目少欺,你要提供 Product Name 和 Company Identifier的信息。

Product Name馋贤,就是你的app的一個較短的名稱赞别。

Company identifier,通常會是一個反轉的DNS串配乓,例如:com.mycompanyname

這兩者合起來仿滔,就似乎Bundle Identifier。你會在Info.plist中找到犹芹。

對于每一個你要發(fā)布的app崎页,你需要到iTunes Developer Center中注冊你的App ID。如下圖腰埂。

Finding the Bundle Identifier in your Info.plist

這個需要與你在Info.plist中設置的保持一致飒焦。

Provisioning Profile

把前面講到的東西合起來:

·App ID (app的唯一標識)

·UDID (在某臺設備上運行的唯一標識)

·Certificate (開發(fā)者認證)

就是所謂的Provisioning Profile。

Provisioning Profile 通過xcode或者itunes導入到device中屿笼,或者打包到一個包含app和profile的.ipa文件中牺荠。

你可以在iOS Provisioning Portal 中創(chuàng)建你的Provisioning Profile。

Creating a Provisioning Profile in the iOS Provisioning Portal

新建一個驴一,有一下幾個步驟:

·為profile命名休雌,以后你會在xcode的organizer,Buid Settings 以及其它一些地方中看到

·選擇你的certificate

·選擇你的App ID肝断,要如Info.plist中的一致杈曲。

·選擇要應用到的設備。通常胸懈,我都是把我的設備全選的担扑。

個人用途的簽名 Signing

假設你已經(jīng)有一個準備測試的App,而你有IDP趣钱,并且處理好Provisioning Profile的事情了涌献。

現(xiàn)在你清楚已經(jīng)知道它們的邏輯了,如果你新加入羔挡,下面這些是你要做的:

1 檢查你的公鑰私鑰,為以后檢查方便间唉,起個好名吧绞灼。

2 用Keychain Access來創(chuàng)建你的開發(fā)認證。然后下載Apple給你的認證呈野,雙擊安裝低矮,然后你可以在Keychain中看到了吧。

3 下載“Apple Worldwide Developer Relations Certification Authority Certificate”(WWDR)也是雙擊安裝被冒,也可以到Keychain中看到军掂。

4 檢查你項目的Bundle ID轮蜕,到Provisioning Portal中創(chuàng)建一個一致的App ID。

5 在Provisioning Portal中加入你想要的UDID蝗锥。(全部加上好了)

6 針對你的Certificate創(chuàng)建Provisioning Profile, 指定你的app ID 和UDID跃洛。

7 下載剛剛創(chuàng)建的Profile,拖到你的xcode Organizer中终议。

然后汇竭,你就可以sign你的project,并讓它們在你的device上運行了穴张。

在Target – Build Settings 细燎,往下滾動到 Code Signing一節(jié)。

試試編輯一下Debug schema皂甘,它適合于團隊協(xié)作:

在Automatic ProfileSelector中選擇“iPhone Developer”玻驻,你會看到你的認證已經(jīng)自動選上了。

一切都搞定了偿枕,連接你的device璧瞬,在xcode中選擇Debug build,build & run益老。

xcode會到你的設備里裝上這個provisioning profile彪蓬,并運行你的App。

原文鏈接地址:http://www.cnblogs.com/andyque/archive/2011/08/30/2159086.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末捺萌,一起剝皮案震驚了整個濱河市档冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桃纯,老刑警劉巖酷誓,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異态坦,居然都是意外死亡盐数,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門伞梯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玫氢,“玉大人,你說我怎么就攤上這事谜诫⊙浚” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵喻旷,是天一觀的道長生逸。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么槽袄? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任烙无,我火速辦了婚禮,結果婚禮上遍尺,老公的妹妹穿的比我還像新娘截酷。我一直安慰自己,他們只是感情好狮鸭,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布合搅。 她就那樣靜靜地躺著,像睡著了一般歧蕉。 火紅的嫁衣襯著肌膚如雪灾部。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天惯退,我揣著相機與錄音赌髓,去河邊找鬼。 笑死催跪,一個胖子當著我的面吹牛锁蠕,可吹牛的內容都是我干的。 我是一名探鬼主播懊蒸,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荣倾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骑丸?” 一聲冷哼從身側響起舌仍,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎通危,沒想到半個月后铸豁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡菊碟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年节芥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆害。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡头镊,死狀恐怖,靈堂內的尸體忽然破棺而出魄幕,到底是詐尸還是另有隱情相艇,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布梅垄,位于F島的核電站厂捞,受9級特大地震影響,放射性物質發(fā)生泄漏队丝。R本人自食惡果不足惜靡馁,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望机久。 院中可真熱鬧臭墨,春花似錦、人聲如沸膘盖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侠畔。三九已至结缚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間软棺,已是汗流浹背红竭。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喘落,地道東北人茵宪。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像瘦棋,于是被迫代替她去往敵國和親稀火。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容