?
免責申明(必讀!):本博客提供的所有教程的翻譯原稿均來自于互聯(lián)網,僅供學習交流之用,切勿進行商業(yè)傳播。同時,轉載時不要移除本申明。如產生任何糾紛,均與本博客所有人、發(fā)表該翻譯稿之人無任何關系。謝謝合作!
原文鏈接地址: http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood
?
注:本文由翻譯團隊成員 skingTree翻譯。
教程截圖:
??? 下面是一篇有澳洲墨爾本的一名全職 iOS 開發(fā)者 提供的文章。他在論壇上是一個很摩登的年輕人 – Adam Eberbach 。
· Bundle identifier
· provisioning profiles
· App ID
· certificate signing request
對于新手,的確很難一口氣搞清楚這些東東到底有什么區(qū)別。
下面我們來揭開它們的神秘面紗,在讀完這篇文章后,你應該可以把這些東西聯(lián)系起來,你能夠理解它們是怎么工作,并能夠順利地在 device 上運行你的應用了。
當然,這里假設你已經是一個 iOS 開發(fā)者,擁有 IDP ,并已經有一定的 xcode 和 iOS 開發(fā)經驗了。如果你只是剛剛開始學習 iOS ,你可以先看看其它入門教程。
好吧,我們開始了。
?
它們有多重要?
Code signing 對你來說,最主要的意義就是它能讓你的 App 在設備上運行。不管是你自己的設備,甲方客戶的,還是在 App store 上購買你的消費者。
如果沒有 code signing ,你只可以在模擬器上,或者一臺越獄過的機器上運行你的應用 ---- 當然,僅僅如此是不能滿足我們的。
模擬器的測試僅僅是一種初步測試,模擬器不能替代真機調試,因為:
·真正的設備會通常比模擬器慢
模擬器使用的是你的 MAC 機上的處理器,而一臺真正的 iphone 可遠遠沒有這種條件。所以如果你不在設備上真正運行,你可能就會忽略實際的性能問題。
比如你新建一個ViewBased應用,然后在 viewDidLoad里面加入下列代碼:
int count=200000; NSMutableArray * array =[NSMutableArray arrayWithCapacity:count]; for (inti =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 你的開發(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 繪制了一個圖表,用來描述這些對象之間的關系。
這是針對開發(fā)人員的 ( Development Profile ),發(fā)布人員的圖會有小小區(qū)別。
?
私鑰 Private Key :
在 Mac OS X 以后, key 由一個叫做 Keychain 的 app 來管理。 你可以在 Application\Utilities 中找到。
運行 Keychain ,你可以看到在你的名下有哪些公鑰和私鑰。類似這樣的:
(這是私隱,要加碼的)
如果你沒有看到任何 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 :
如果 App 不是從 app store 上來,你的代碼需要有 UDID 的信息才能運行。
怎么知道你擁有的設備的 UDID ?有幾個方法。
1 如果你的設備連到 Xcode 的機器上,你可以在 Organizer 中看到 UDID 。
2 沒有 xcode 的朋友也可以,在 iTunes 的 Summary 界面,有 serial number (序列號)的信息,點擊可以看到。
3 這是最簡單的方法,在 App Store 中下載一個 Ad Hoc Helper 吧。
?
Certificate 認證
認證,就是你的個人開發(fā)者認證,或者更華麗地說:“ Apple Worldwide Developer Relations Certification Authority Certificate ”(這不翻譯了),
這個本質上就是一些代表著信任 - 授權的數據而已。
獲取一個認證,你需要子啊 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 。如下圖。
這個需要與你在 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 。
新建一個,有一下幾個步驟:
·為 profile 命名,以后你會在 xcode 的 organizer , Buid Settings 以及其它一些地方中看到
·選擇你的 certificate
·選擇你的 App ID ,要如 Info.plist 中的一致。
·選擇要應用到的設備。通常,我都是把我的設備全選的。
?
個人用途的簽名 Signing
假設你已經有一個準備測試的 App ,而你有 IDP ,并且處理好 Provisioning Profile 的事情了。
現(xiàn)在你清楚已經知道它們的邏輯了,如果你新加入,下面這些是你要做的:
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 ”,你會看到你的認證已經自動選上了。
一切都搞定了,連接你的 device ,在 xcode 中選擇 Debug build , build & run 。
xcode 會到你的設備里裝上這個 provisioning profile ,并運行你的 App 。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
