猶豫年代久遠(yuǎn) Xcode8以后無(wú)需這么復(fù)雜 可做資料閱讀
教程截圖:
下面是一篇有澳洲墨爾本的一名全職iOS開(kāi)發(fā)者提供的文章。他在論壇上是一個(gè)很摩登的年輕人 – Adam Eberbach。
·Bundle identifier
·provisioning profiles
·App ID
·certificate signing request
對(duì)于新手,的確很難一口氣搞清楚這些東東到底有什么區(qū)別陈轿。
下面我們來(lái)揭開(kāi)它們的神秘面紗,在讀完這篇文章后,你應(yīng)該可以把這些東西聯(lián)系起來(lái)理逊,你能夠理解它們是怎么工作,并能夠順利地在device上運(yùn)行你的應(yīng)用了盒揉。
當(dāng)然晋被,這里假設(shè)你已經(jīng)是一個(gè)iOS開(kāi)發(fā)者,擁有IDP刚盈,并已經(jīng)有一定的xcode和iOS開(kāi)發(fā)經(jīng)驗(yàn)了羡洛。如果你只是剛剛開(kāi)始學(xué)習(xí)iOS,你可以先看看其它入門(mén)教程藕漱。
好吧欲侮,我們開(kāi)始了崭闲。
它們有多重要?
Code signing 對(duì)你來(lái)說(shuō)威蕉,最主要的意義就是它能讓你的App在設(shè)備上運(yùn)行刁俭。不管是你自己的設(shè)備,甲方客戶(hù)的韧涨,還是在App store上購(gòu)買(mǎi)你的消費(fèi)者牍戚。
如果沒(méi)有code signing,你只可以在模擬器上虑粥,或者一臺(tái)越獄過(guò)的機(jī)器上運(yùn)行你的應(yīng)用----當(dāng)然如孝,僅僅如此是不能滿足我們的。
模擬器的測(cè)試僅僅是一種初步測(cè)試娩贷,模擬器不能替代真機(jī)調(diào)試暑竟,因?yàn)椋?br>
·真正的設(shè)備會(huì)通常比模擬器慢
模擬器使用的是你的MAC機(jī)上的處理器,而一臺(tái)真正的iphone可遠(yuǎn)遠(yuǎn)沒(méi)有這種條件育勺。所以如果你不在設(shè)備上真正運(yùn)行但荤,你可能就會(huì)忽略實(shí)際的性能問(wèn)題。
比如你新建一個(gè)ViewBased應(yīng)用涧至,然后在viewDidLoad里面加入下列代碼:
int count =200000;
NSMutableArray * array = [NSMutableArray arrayWithCapacity:count];
for (int i =0; i < count; ++i) {
[array addObject:[NSString stringWithFormat:@"%d", i]];
}
上面這段代碼在模擬器上可能1-2秒就能運(yùn)行完腹躁,但是在真機(jī)上面(比如iphone 3GS),大約要花7秒左右的時(shí)間南蓬。
·設(shè)備的內(nèi)存少很多
同理的纺非,模擬器使用你MAC上的內(nèi)存,而一臺(tái)真正的iphone的內(nèi)存少得多赘方。
特別是游戲烧颖,通常會(huì)使用大量的圖片,占用大量的內(nèi)存窄陡。在老一點(diǎn)型號(hào)的機(jī)器上炕淮,一個(gè)紋理圖片的大小上限是24MB,也就是1024X1024的8bit紋理圖跳夭。
內(nèi)存耗盡絕對(duì)是你不想見(jiàn)到的涂圆,因?yàn)檎加玫膬?nèi)存超過(guò)一定范圍,OS會(huì)強(qiáng)行退出你的app币叹,對(duì)用戶(hù)來(lái)說(shuō)润歉,就認(rèn)為是你的app崩潰了。
·有些API只在設(shè)備上有效
譬如In-App purchase的API颈抚,或者Instrument中的Core Animation踩衩。這些都要在真機(jī)上測(cè)試出來(lái)。(可能以后版本的iOS或者xcode能夠支持,但畢竟真機(jī)測(cè)試是一種保障)
總的來(lái)說(shuō)驱富,你沒(méi)有在真機(jī)上測(cè)試過(guò)反砌,等于你沒(méi)有真的測(cè)試完。
·(譯者注:一些視覺(jué)上的效果在模擬器上看到的可能會(huì)與真機(jī)不一致)
在Xcode中有一些懶人的方法:
在organizer的界面中萌朱,選中devices 右鍵Developer Profile,你可以看到這樣一個(gè)菜單策菜。
里面有大部分這篇文章將要講到的內(nèi)容晶疼。
這里你可以sign in你的開(kāi)發(fā)者賬號(hào),自動(dòng)登記你的app并運(yùn)行到你的device上又憨。
當(dāng)然翠霍,如果這樣總是好用的話,這篇文章就沒(méi)有意義了蠢莺。
作為一個(gè)開(kāi)發(fā)者寒匙,你應(yīng)該知道更多。
Public and Private Keys 公鑰私鑰
在繼續(xù)剖析之前躏将,我們先簡(jiǎn)單地解析公鑰私鑰锄弱。
這世上有兩種加密方法:symmetric cryptography 對(duì)稱(chēng)密碼和 asymmetric cryptography非對(duì)稱(chēng)密碼。
對(duì)于對(duì)稱(chēng)密碼祸憋,只有一種key会宪。譬如你有一個(gè)密鑰,以及對(duì)應(yīng)的一個(gè)加密過(guò)的信息蚯窥。
那只有知道密鑰的人可以解讀這個(gè)信息掸鹅。
對(duì)于非對(duì)稱(chēng)密碼,有兩個(gè)key – 公鑰和私鑰拦赠。
譬如你用某個(gè)私鑰加密一些信息巍沙,別人收到這個(gè)信息后可以通過(guò)那個(gè)私鑰對(duì)應(yīng)的公鑰來(lái)加密。這樣他們就可以肯定荷鼠,這個(gè)信息是從你那里來(lái)的(至少是你加密的)句携。
這個(gè)私鑰就相當(dāng)于一個(gè)“簽名”。 (你加的密允乐,就是你簽的字)
而這個(gè)务甥,就是在iOS中code signing背后的原理。
Code Signing Objects
與Code Signing有關(guān)的東西有 :
Provisioning Profiles喳篇,App IDs敞临,UDIDs …
在這一節(jié),我們會(huì)一個(gè)一個(gè)地解說(shuō)麸澜。
我用Core Data繪制了一個(gè)圖表挺尿,用來(lái)描述這些對(duì)象之間的關(guān)系。
這是針對(duì)開(kāi)發(fā)人員的 (Development Profile),發(fā)布人員的圖會(huì)有小小區(qū)別编矾。
私鑰 Private Key:
在Mac OS X 以后熟史,key由一個(gè)叫做 Keychain的app來(lái)管理。 你可以在 Application\Utilities 中找到窄俏。
運(yùn)行Keychain蹂匹,你可以看到在你的名下有哪些公鑰和私鑰。類(lèi)似這樣的:
(這是私隱凹蜈,要加碼的)
如果你沒(méi)有看到任何key的列表限寞,不用擔(dān)心。在你第一次使用認(rèn)證的時(shí)候仰坦,Keychain會(huì)幫你創(chuàng)建履植。
在這里列出的key是你的provisioning或者code signing的基礎(chǔ)。
你必須有key才能sign code或者在App store中發(fā)布你的app悄晃。
如果key丟失了玫霎?
你必須把整個(gè)流程重新做一次 – 因?yàn)闆](méi)有key,你的認(rèn)證不再有效妈橄,你的provisioning profile只會(huì)生成error庶近。你會(huì)浪費(fèi)很多時(shí)間,所以眷蚓,好好保管它拦盹。
如果你沒(méi)有備份過(guò),我建議你馬上把它export出來(lái)溪椎,通過(guò)File\Export Items 普舆,保存在一個(gè)安全的地方,例如一個(gè)很小的分區(qū)中校读≌勇拢或者通過(guò)你的Mobile Me賬號(hào)來(lái)同步保存。
有多個(gè)Key歉秫?
如果你在不同的Mac機(jī)上創(chuàng)建過(guò)account蛾洛,你將會(huì)有多個(gè)key。
這樣會(huì)帶來(lái)一個(gè)問(wèn)題雁芙,在機(jī)器A上生成的認(rèn)證轧膘,在沒(méi)有私鑰的機(jī)器B上會(huì)失效。
所以兔甘,你可以把你所有的key復(fù)制到你所有的Mac機(jī)上谎碍。(這樣就不用煩了)
或者,我更建議只用一個(gè)Key洞焙。
UDID
UDID (Unique Device Identifier)是區(qū)分物理設(shè)備的唯一標(biāo)識(shí)蟆淀。
所有你的iPhone肯定有一個(gè)與眾不同的UDID拯啦,包括你的iPad等等。
通常熔任,UDID會(huì)是一個(gè)40位十六進(jìn)制字符串褒链。
也就是下圖的identifier:
如果App不是從app store上來(lái),你的代碼需要有UDID的信息才能運(yùn)行疑苔。
怎么知道你擁有的設(shè)備的UDID甫匹?有幾個(gè)方法。
1 如果你的設(shè)備連到Xcode的機(jī)器上惦费,你可以在Organizer中看到UDID兵迅。
2 沒(méi)有xcode的朋友也可以,在iTunes的 Summary界面趁餐,有serial number(序列號(hào))的信息,點(diǎn)擊可以看到篮绰。
3 這是最簡(jiǎn)單的方法后雷,在App Store中下載一個(gè)Ad Hoc Helper吧。
Certificate 認(rèn)證
認(rèn)證吠各,就是你的個(gè)人開(kāi)發(fā)者認(rèn)證臀突,或者更華麗地說(shuō):“Apple Worldwide Developer Relations Certification Authority Certificate”(這不翻譯了),
這個(gè)本質(zhì)上就是一些代表著信任-授權(quán)的數(shù)據(jù)而已贾漏。
獲取一個(gè)認(rèn)證候学,你需要子啊Keychain Access中生成一個(gè) Certificate Signing Request,并把它發(fā)給Apple纵散。這會(huì)創(chuàng)建一對(duì) 公鑰-私鑰(如果還沒(méi)有的話)梳码。
Apple收到后會(huì)驗(yàn)證信息,然后給你創(chuàng)建一個(gè)認(rèn)證伍掀。
App ID
在Xcode4中創(chuàng)建一個(gè)項(xiàng)目掰茶,你要提供 Product Name 和 Company Identifier的信息。
Product Name蜜笤,就是你的app的一個(gè)較短的名稱(chēng)濒蒋。
Company identifier,通常會(huì)是一個(gè)反轉(zhuǎn)的DNS串把兔,例如:com.mycompanyname
這兩者合起來(lái)沪伙,就似乎Bundle Identifier。你會(huì)在Info.plist中找到县好。
對(duì)于每一個(gè)你要發(fā)布的app围橡,你需要到iTunes Developer Center中注冊(cè)你的App ID。如下圖缕贡。
這個(gè)需要與你在Info.plist中設(shè)置的保持一致某饰。
Provisioning Profile
把前面講到的東西合起來(lái):
·App ID (app的唯一標(biāo)識(shí))
·UDID (在某臺(tái)設(shè)備上運(yùn)行的唯一標(biāo)識(shí))
·Certificate (開(kāi)發(fā)者認(rèn)證)
就是所謂的Provisioning Profile儒恋。
Provisioning Profile 通過(guò)xcode或者itunes導(dǎo)入到device中,或者打包到一個(gè)包含app和profile的.ipa文件中黔漂。
你可以在iOS Provisioning Portal 中創(chuàng)建你的Provisioning Profile诫尽。
新建一個(gè),有一下幾個(gè)步驟:
·為profile命名炬守,以后你會(huì)在xcode的organizer牧嫉,Buid Settings 以及其它一些地方中看到
·選擇你的certificate
·選擇你的App ID,要如Info.plist中的一致减途。
·選擇要應(yīng)用到的設(shè)備酣藻。通常,我都是把我的設(shè)備全選的鳍置。
個(gè)人用途的簽名 Signing
假設(shè)你已經(jīng)有一個(gè)準(zhǔn)備測(cè)試的App辽剧,而你有IDP,并且處理好Provisioning Profile的事情了税产。
現(xiàn)在你清楚已經(jīng)知道它們的邏輯了怕轿,如果你新加入,下面這些是你要做的:
1 檢查你的公鑰私鑰辟拷,為以后檢查方便撞羽,起個(gè)好名吧。
2 用Keychain Access來(lái)創(chuàng)建你的開(kāi)發(fā)認(rèn)證衫冻。然后下載Apple給你的認(rèn)證诀紊,雙擊安裝,然后你可以在Keychain中看到了吧隅俘。
3 下載“Apple Worldwide Developer Relations Certification Authority Certificate”(WWDR)也是雙擊安裝邻奠,也可以到Keychain中看到。
4 檢查你項(xiàng)目的Bundle ID为居,到Provisioning Portal中創(chuàng)建一個(gè)一致的App ID惕澎。
5 在Provisioning Portal中加入你想要的UDID。(全部加上好了)
6 針對(duì)你的Certificate創(chuàng)建Provisioning Profile, 指定你的app ID 和UDID颜骤。
7 下載剛剛創(chuàng)建的Profile唧喉,拖到你的xcode Organizer中。
然后忍抽,你就可以sign你的project八孝,并讓它們?cè)谀愕膁evice上運(yùn)行了。
在Target – Build Settings 鸠项,往下滾動(dòng)到 Code Signing一節(jié)干跛。
試試編輯一下Debug schema,它適合于團(tuán)隊(duì)協(xié)作:
在Automatic ProfileSelector中選擇“iPhone Developer”祟绊,你會(huì)看到你的認(rèn)證已經(jīng)自動(dòng)選上了楼入。
一切都搞定了哥捕,連接你的device,在xcode中選擇Debug build嘉熊,build & run遥赚。
xcode會(huì)到你的設(shè)備里裝上這個(gè)provisioning profile,并運(yùn)行你的App阐肤。