ios app 簽名的那些事兒

iOS 簽名機(jī)制挺復(fù)雜,各種證書煎源,Provisioning Profile色迂,entitlements,CertificateSigningRequest手销,p12歇僧,AppID,概念一堆锋拖,也很容易出錯(cuò)诈悍,本文嘗試從原理出發(fā)祸轮,一步步推出為什么會(huì)有這么多概念,希望能有助于理解 iOS App 簽名的原理和流程侥钳。

目的

先來看看蘋果的簽名機(jī)制是為了做什么适袜。在 iOS 出來之前,在主流操作系統(tǒng)(Mac/Windows/Linux)上開發(fā)和運(yùn)行軟件是不需要簽名的慕趴,軟件隨便從哪里下載都能運(yùn)行痪蝇,導(dǎo)致平臺(tái)對第三方軟件難以控制鄙陡,盜版流行冕房。蘋果希望解決這樣的問題,在 iOS 平臺(tái)對第三方 APP 有絕對的控制權(quán)趁矾,一定要保證每一個(gè)安裝到 iOS 上的 APP 都是經(jīng)過蘋果官方允許的耙册,怎樣保證呢?就是通過簽名機(jī)制毫捣。

非對稱加密

通常我們說的簽名就是數(shù)字簽名详拙,它是基于非對稱加密算法實(shí)現(xiàn)的。對稱加密是通過同一份密鑰加密和解密數(shù)據(jù)蔓同,而非對稱加密則有兩份密鑰饶辙,分別是公鑰和私鑰,用公鑰加密的數(shù)據(jù)斑粱,要用私鑰才能解密弃揽,用私鑰加密的數(shù)據(jù),要用公鑰才能解密则北。

簡單說一下常用的非對稱加密算法 RSA 的數(shù)學(xué)原理矿微,理解簡單的數(shù)學(xué)原理,就可以理解非對稱加密是怎么做到的尚揣,為什么會(huì)是安全的:

  1. 選兩個(gè)質(zhì)數(shù)p和q相乘得出一個(gè)大整數(shù)n涌矢,例如 p=61,q=53快骗,n=pq=3233

  2. 選 1-n 間的隨便一個(gè)質(zhì)數(shù)e娜庇,例如 e = 17

  3. 經(jīng)過一系列數(shù)學(xué)公式,算出一個(gè)數(shù)字d方篮,滿足:
    a. 通過n和e這兩個(gè)數(shù)據(jù)一組數(shù)據(jù)進(jìn)行數(shù)學(xué)運(yùn)算后名秀,可以通過n和d去反解運(yùn)算,反過來也可以恭取。
    b. 如果只知道n和e泰偿,要推導(dǎo)出d,需要知道p和q蜈垮,也就是要需要把 n 因數(shù)分解耗跛。

上述的(n,e)這兩個(gè)數(shù)據(jù)在一起就是公鑰裕照,(n,d)這兩個(gè)數(shù)據(jù)就是私鑰,滿足用公鑰加密调塌,私鑰解密晋南,或反過來公鑰加密,私鑰解密羔砾,也滿足在只暴露公鑰(只知道n和e)的情況下负间,要推導(dǎo)出私鑰(n,d),需要把大整數(shù)n因數(shù)分解姜凄。目前因數(shù)分解只能靠暴力窮舉政溃,而n數(shù)字越大,越難以用窮舉計(jì)算出因數(shù)p和q态秧,也就越安全董虱,當(dāng)n大到二進(jìn)制 1024 位或 2048 位時(shí),以目前技術(shù)要破解幾乎不可能申鱼,所以非常安全愤诱。

若對數(shù)字d是怎樣計(jì)算出來的感興趣,可以搜索這兩篇文章:RSA 算法原理(一)(二)

數(shù)字簽名

現(xiàn)在知道了有非對稱加密這東西捐友,那數(shù)字簽名是怎么回事呢淫半?

數(shù)字簽名的作用是我對某一份數(shù)據(jù)打個(gè)標(biāo)記,表示我認(rèn)可了這份數(shù)據(jù)(簽了個(gè)名)匣砖,然后我發(fā)送給其他人科吭,其他人可以知道這份數(shù)據(jù)是經(jīng)過我認(rèn)證的,數(shù)據(jù)沒有被篡改過脆粥。

有了上述非對稱加密算法砌溺,就可以實(shí)現(xiàn)這個(gè)需求:

image
  1. 首先用一種算法,算出原始數(shù)據(jù)的摘要变隔。需滿足 a.若原始數(shù)據(jù)有任何變化规伐,計(jì)算出來的摘要值都會(huì)變化。 b.摘要要夠短匣缘。這里最常用的算法是MD5猖闪。

  2. 生成一份非對稱加密的公鑰和私鑰,私鑰我自己拿著肌厨,公鑰公布出去培慌。

  3. 對一份數(shù)據(jù),算出摘要后柑爸,用私鑰加密這個(gè)摘要吵护,得到一份加密后的數(shù)據(jù),稱為原始數(shù)據(jù)的簽名。把它跟原始數(shù)據(jù)一起發(fā)送給用戶馅而。

  4. 用戶收到數(shù)據(jù)和簽名后祥诽,用公鑰解密得到摘要。同時(shí)用戶用同樣的算法計(jì)算原始數(shù)據(jù)的摘要瓮恭,對比這里計(jì)算出來的摘要和用公鑰解密簽名得到的摘要是否相等雄坪,若相等則表示這份數(shù)據(jù)中途沒有被篡改過,因?yàn)槿绻鄹倪^屯蹦,摘要會(huì)變化维哈。

之所以要有第一步計(jì)算摘要,是因?yàn)榉菍ΨQ加密的原理限制可加密的內(nèi)容不能太大(不能大于上述 n 的位數(shù)登澜,也就是一般不能大于 1024 位/ 2048 位)阔挠,于是若要對任意大的數(shù)據(jù)簽名,就需要改成對它的特征值簽名帖渠,效果是一樣的谒亦。

好了,有了非對稱加密的基礎(chǔ)空郊,知道了數(shù)字簽名是什么,怎樣可以保證一份數(shù)據(jù)是經(jīng)過某個(gè)地方認(rèn)證的切揭,來看看怎樣通過數(shù)字簽名的機(jī)制保證每一個(gè)安裝到 iOS 上的 APP 都是經(jīng)過蘋果認(rèn)證允許的狞甚。

最簡單的簽名

要實(shí)現(xiàn)這個(gè)需求很簡單,最直接的方式廓旬,蘋果官方生成一對公私鑰哼审,在 iOS 里內(nèi)置一個(gè)公鑰,私鑰由蘋果后臺(tái)保存孕豹,我們傳 App 上 AppStore 時(shí)涩盾,蘋果后臺(tái)用私鑰對 APP 數(shù)據(jù)進(jìn)行簽名,iOS 系統(tǒng)下載這個(gè) APP 后励背,用公鑰驗(yàn)證這個(gè)簽名春霍,若簽名正確,這個(gè) APP 肯定是由蘋果后臺(tái)認(rèn)證的叶眉,并且沒有被修改過址儒,也就達(dá)到了蘋果的需求:保證安裝的每一個(gè) APP 都是經(jīng)過蘋果官方允許的。

image

如果我們 iOS 設(shè)備安裝 APP 只有從 AppStore 下載這一種方式的話衅疙,這件事就結(jié)束了莲趣,沒有任何復(fù)雜的東西擒抛,只有一個(gè)數(shù)字簽名尚卫,非常簡單地解決問題。

但實(shí)際上因?yàn)槌藦?AppStore 下載全闷,我們還可以有三種方式安裝一個(gè) App:

  1. 開發(fā) App 時(shí)可以直接把開發(fā)中的應(yīng)用安裝進(jìn)手機(jī)進(jìn)行調(diào)試。

  2. In-House 企業(yè)內(nèi)部分發(fā)潘鲫,可以直接安裝企業(yè)證書簽名后的 APP绿聘。

  3. AD-Hoc 相當(dāng)于企業(yè)分發(fā)的限制版,限制安裝設(shè)備數(shù)量次舌,較少用熄攘。

蘋果要對用這三種方式安裝的 App 進(jìn)行控制,就有了新的需求彼念,無法像上面這樣簡單了挪圾。

新的需求

我們先來看第一個(gè),開發(fā)時(shí)安裝APP逐沙,它有兩個(gè)個(gè)需求:

  1. 安裝包不需要傳到蘋果服務(wù)器哲思,可以直接安裝到手機(jī)上。如果你編譯一個(gè) APP 到手機(jī)前要先傳到蘋果服務(wù)器簽名吩案,這顯然是不能接受的棚赔。

  2. 蘋果必須對這里的安裝有控制權(quán),包括
    a.經(jīng)過蘋果允許才可以這樣安裝徘郭。
    b.不能被濫用導(dǎo)致非開發(fā)app也能被安裝靠益。

為了實(shí)現(xiàn)這些需求,iOS 簽名的復(fù)雜度也就開始增加了残揉。

蘋果這里給出的方案是使用了雙層簽名胧后,會(huì)比較繞,流程大概是這樣的:

image
  1. 在你的 Mac 開發(fā)機(jī)器生成一對公私鑰抱环,這里稱為公鑰L壳快,私鑰L。L:Local

  2. 蘋果自己有固定的一對公私鑰镇草,跟上面 AppStore 例子一樣眶痰,私鑰在蘋果后臺(tái),公鑰在每個(gè) iOS 設(shè)備上梯啤。這里稱為公鑰A竖伯,私鑰A。A:Apple

  3. 把公鑰 L 傳到蘋果后臺(tái)条辟,用蘋果后臺(tái)里的私鑰 A 去簽名公鑰 L黔夭。得到一份數(shù)據(jù)包含了公鑰 L 以及其簽名,把這份數(shù)據(jù)稱為證書羽嫡。

  4. 在開發(fā)時(shí)本姥,編譯完一個(gè) APP 后,用本地的私鑰 L 對這個(gè) APP 進(jìn)行簽名杭棵,同時(shí)把第三步得到的證書一起打包進(jìn) APP 里婚惫,安裝到手機(jī)上氛赐。

  5. 在安裝時(shí),iOS 系統(tǒng)取得證書先舷,通過系統(tǒng)內(nèi)置的公鑰 A艰管,去驗(yàn)證證書的數(shù)字簽名是否正確。

  6. 驗(yàn)證證書后確保了公鑰 L 是蘋果認(rèn)證過的蒋川,再用公鑰 L 去驗(yàn)證 APP 的簽名牲芋,這里就間接驗(yàn)證了這個(gè) APP 安裝行為是否經(jīng)過蘋果官方允許。(這里只驗(yàn)證安裝行為捺球,不驗(yàn)證APP 是否被改動(dòng)缸浦,因?yàn)殚_發(fā)階段 APP 內(nèi)容總是不斷變化的,蘋果不需要管氮兵。)

加點(diǎn)東西

上述流程只解決了上面第一個(gè)需求裂逐,也就是需要經(jīng)過蘋果允許才可以安裝,還未解決第二個(gè)避免被濫用的問題泣栈。怎么解決呢卜高?蘋果再加了兩個(gè)限制,一是限制在蘋果后臺(tái)注冊過的設(shè)備才可以安裝南片,二是限制簽名只能針對某一個(gè)具體的 APP掺涛。

怎么加的?在上述第三步铃绒,蘋果用私鑰 A 簽名我們本地公鑰 L 時(shí)鸽照,實(shí)際上除了簽名公鑰 L,還可以加上無限多數(shù)據(jù)颠悬,這些數(shù)據(jù)都可以保證是經(jīng)過蘋果官方認(rèn)證的,不會(huì)有被篡改的可能定血。

image

可以想到把 允許安裝的設(shè)備 ID 列表 和 App對應(yīng)的 AppID 等數(shù)據(jù)赔癌,都在第三步這里跟公鑰L一起組成證書,再用蘋果私鑰 A 對這個(gè)證書簽名澜沟。在最后第 5 步驗(yàn)證時(shí)就可以拿到設(shè)備 ID 列表灾票,判斷當(dāng)前設(shè)備是否符合要求。根據(jù)數(shù)字簽名的原理茫虽,只要數(shù)字簽名通過驗(yàn)證刊苍,第 5 步這里的設(shè)備 IDs / AppID / 公鑰 L 就都是經(jīng)過蘋果認(rèn)證的,無法被修改濒析,蘋果就可以限制可安裝的設(shè)備和 APP正什,避免濫用。

最終流程

到這里這個(gè)證書已經(jīng)變得很復(fù)雜了号杏,有很多額外信息婴氮,實(shí)際上除了 設(shè)備 ID / AppID,還有其他信息也需要在這里用蘋果簽名,像這個(gè) APP 里 iCloud / push / 后臺(tái)運(yùn)行 等權(quán)限蘋果都想控制主经,蘋果把這些權(quán)限開關(guān)統(tǒng)一稱為 Entitlements荣暮,它也需要通過簽名去授權(quán)。

實(shí)際上一個(gè)“證書”本來就有規(guī)定的格式規(guī)范罩驻,上面我們把各種額外信息塞入證書里是不合適的穗酥,于是蘋果另外搞了個(gè)東西,叫 Provisioning Profile惠遏,一個(gè) Provisioning Profile 里就包含了證書以及上述提到的所有額外信息砾跃,以及所有信息的簽名。

所以整個(gè)流程稍微變一下爽哎,就變成這樣了:

v2-779c5beca262fbd0da75c26ca1f84b55_hd.png

因?yàn)椴襟E有小變動(dòng)蜓席,這里我們不辭啰嗦重新再列一遍整個(gè)流程:

  1. 在你的 Mac 開發(fā)機(jī)器生成一對公私鑰,這里稱為公鑰L课锌,私鑰L厨内。L:Local

  2. 蘋果自己有固定的一對公私鑰,跟上面 AppStore 例子一樣渺贤,私鑰在蘋果后臺(tái)雏胃,公鑰在每個(gè) iOS 設(shè)備上。這里稱為公鑰A志鞍,私鑰A瞭亮。A:Apple

  3. 把公鑰 L 傳到蘋果后臺(tái),用蘋果后臺(tái)里的私鑰 A 去簽名公鑰 L固棚。得到一份數(shù)據(jù)包含了公鑰 L 以及其簽名统翩,把這份數(shù)據(jù)稱為證書。

  4. 在蘋果后臺(tái)申請 AppID此洲,配置好設(shè)備 ID 列表和 APP 可使用的權(quán)限厂汗,再加上第③步的證書,組成的數(shù)據(jù)用私鑰 A 簽名呜师,把數(shù)據(jù)和簽名一起組成一個(gè) Provisioning Profile 文件娶桦,下載到本地 Mac 開發(fā)機(jī)。

  5. 在開發(fā)時(shí)汁汗,編譯完一個(gè) APP 后衷畦,用本地的私鑰 L 對這個(gè) APP 進(jìn)行簽名,同時(shí)把第④步得到的 Provisioning Profile 文件打包進(jìn) APP 里知牌,文件名為 embedded.mobileprovision祈争,把 APP 安裝到手機(jī)上。

  6. 在安裝時(shí)送爸,iOS 系統(tǒng)取得證書铛嘱,通過系統(tǒng)內(nèi)置的公鑰 A暖释,去驗(yàn)證 embedded.mobileprovision 的數(shù)字簽名是否正確,里面的證書簽名也會(huì)再驗(yàn)一遍墨吓。

  7. 確保了 embedded.mobileprovision 里的數(shù)據(jù)都是蘋果授權(quán)以后球匕,就可以取出里面的數(shù)據(jù),做各種驗(yàn)證帖烘,包括用公鑰 L 驗(yàn)證APP簽名亮曹,驗(yàn)證設(shè)備 ID 是否在 ID 列表上,AppID 是否對應(yīng)得上秘症,權(quán)限開關(guān)是否跟 APP 里的 Entitlements 對應(yīng)等照卦。

開發(fā)者證書從簽名到認(rèn)證最終蘋果采用的流程大致是這樣,還有一些細(xì)節(jié)像證書有效期/證書類型等就不細(xì)說了乡摹。

概念和操作

上面的步驟對應(yīng)到我們平常具體的操作和概念是這樣的:

  1. 第 1 步對應(yīng)的是 keychain 里的 “從證書頒發(fā)機(jī)構(gòu)請求證書”役耕,這里就本地生成了一堆公私鑰,保存的 CertificateSigningRequest 就是公鑰聪廉,私鑰保存在本地電腦里瞬痘。

  2. 第 2 步蘋果處理,不用管板熊。

  3. 第 3 步對應(yīng)把 CertificateSigningRequest 傳到蘋果后臺(tái)生成證書框全,并下載到本地。這時(shí)本地有兩個(gè)證書干签,一個(gè)是第 1 步生成的津辩,一個(gè)是這里下載回來的,keychain 會(huì)把這兩個(gè)證書關(guān)聯(lián)起來容劳,因?yàn)樗麄児借€是對應(yīng)的喘沿,在XCode選擇下載回來的證書時(shí),實(shí)際上會(huì)找到 keychain 里對應(yīng)的私鑰去簽名竭贩。這里私鑰只有生成它的這臺(tái) Mac 有摹恨,如果別的 Mac 也要編譯簽名這個(gè) App 怎么辦?答案是把私鑰導(dǎo)出給其他 Mac 用娶视,在 keychain 里導(dǎo)出私鑰,就會(huì)存成 .p12 文件睁宰,其他 Mac 打開后就導(dǎo)入了這個(gè)私鑰肪获。

  4. 第 4 步都是在蘋果網(wǎng)站上操作,配置 AppID / 權(quán)限 / 設(shè)備等柒傻,最后下載 Provisioning Profile 文件孝赫。

  5. 第 5 步 XCode 會(huì)通過第 3 步下載回來的證書(存著公鑰),在本地找到對應(yīng)的私鑰(第一步生成的)红符,用本地私鑰去簽名 App青柄,并把 Provisioning Profile 文件命名為 embedded.mobileprovision 一起打包進(jìn)去伐债。這里對 App 的簽名數(shù)據(jù)保存分兩部分,Mach-O 可執(zhí)行文件會(huì)把簽名直接寫入這個(gè)文件里致开,其他資源文件則會(huì)保存在 _CodeSignature 目錄下峰锁。

第 6 - 7 步的打包和驗(yàn)證都是 Xcode 和 iOS 系統(tǒng)自動(dòng)做的事。

這里再總結(jié)一下這些概念:

  1. 證書:內(nèi)容是公鑰或私鑰双戳,由其他機(jī)構(gòu)對其簽名組成的數(shù)據(jù)包虹蒋。
  2. Entitlements:包含了 App 權(quán)限開關(guān)列表。
  3. CertificateSigningRequest:本地公鑰飒货。
  4. p12:本地私鑰魄衅,可以導(dǎo)入到其他電腦。
  5. Provisioning Profile:包含了 證書 / Entitlements 等數(shù)據(jù)塘辅,并由蘋果后臺(tái)私鑰簽名的數(shù)據(jù)包晃虫。

其他發(fā)布方式

前面以開發(fā)包為例子說了簽名和驗(yàn)證的流程,另外兩種方式 In-House 企業(yè)簽名和 AD-Hoc 流程也是差不多的扣墩,只是企業(yè)簽名不限制安裝的設(shè)備數(shù)哲银,另外需要用戶在 iOS 系統(tǒng)設(shè)置上手動(dòng)點(diǎn)擊信任這個(gè)企業(yè)才能通過驗(yàn)證。

而 AppStore 的簽名驗(yàn)證方式有些不一樣沮榜,前面我們說到最簡單的簽名方式盘榨,蘋果在后臺(tái)直接用私鑰簽名 App 就可以了,實(shí)際上蘋果確實(shí)是這樣做的蟆融,如果去下載一個(gè) AppStore 的安裝包草巡,會(huì)發(fā)現(xiàn)它里面是沒有 embedded.mobileprovision 文件的,也就是它安裝和啟動(dòng)的流程是不依賴這個(gè)文件型酥,驗(yàn)證流程也就跟上述幾種類型不一樣了山憨。

據(jù)猜測,因?yàn)樯蟼鞯?AppStore 的包蘋果會(huì)重新對內(nèi)容加密弥喉,原來的本地私鑰簽名就沒有用了郁竟,需要重新簽名,從 AppStore 下載的包蘋果也并不打算控制它的有效期由境,不需要內(nèi)置一個(gè) embedded.mobileprovision 去做校驗(yàn)棚亩,直接在蘋果用后臺(tái)的私鑰重新簽名,iOS 安裝時(shí)用本地公鑰驗(yàn)證 App 簽名就可以了虏杰。

那為什么發(fā)布 AppStore 的包還是要跟開發(fā)版一樣搞各種證書和 Provisioning Profile讥蟆?猜測因?yàn)樘O果想做統(tǒng)一管理,Provisioning Profile 里包含一些權(quán)限控制纺阔,AppID 的檢驗(yàn)等瘸彤,蘋果不想在上傳 AppStore 包時(shí)重新用另一種協(xié)議做一遍這些驗(yàn)證,就不如統(tǒng)一把這部分放在 Provisioning Profile 里笛钝,上傳 AppStore 時(shí)只要用同樣的流程驗(yàn)證這個(gè) Provisioning Profile 是否合法就可以了质况。

所以 App 上傳到 AppStore 后愕宋,就跟你的 證書 / Provisioning Profile 都沒有關(guān)系了,無論他們是否過期或被廢除结榄,都不會(huì)影響 AppStore 上的安裝包中贝。

到這里 iOS 簽名機(jī)制的原理和主流程大致說完了,希望能對理解蘋果簽名和排查日常簽名問題有所幫助潭陪。

P.S.一些疑問

最后這里再提一下我關(guān)于簽名流程的一些的疑問雄妥。

企業(yè)證書

企業(yè)證書簽名因?yàn)橄拗粕伲趪鴥?nèi)被廣泛用于測試和盜版依溯,http://fir.im / 蒲公英等測試平臺(tái)都是通過企業(yè)證書分發(fā)老厌,國內(nèi)一些市場像 PP 助手,愛思助手黎炉,一部分安裝手段也是通過企業(yè)證書重簽名枝秤。通過企業(yè)證書簽名安裝的 App,啟動(dòng)時(shí)都會(huì)驗(yàn)證證書的有效期慷嗜,并且不定期請求蘋果服務(wù)器看證書是否被吊銷淀弹,若已過期或被吊銷,就會(huì)無法啟動(dòng) App庆械。對于這種助手的盜版安裝手段薇溃,蘋果想打擊只能一個(gè)個(gè)吊銷企業(yè)證書,并沒有太好的辦法缭乘。

這里我的疑問是沐序,蘋果做了那么多簽名和驗(yàn)證機(jī)制去限制在 iOS 安裝 App,為什么又要出這樣一個(gè)限制很少的方式讓盜版鉆空子呢堕绩?若真的是企業(yè)用途不適合上 AppStore策幼,也完全可以在 AppStore 開辟一個(gè)小的私密版塊,還是通過 AppStore 去安裝奴紧,就不會(huì)有這個(gè)問題了特姐。

AppStore 加密

另一個(gè)問題是我們把 App 傳上 AppStore 后,蘋果會(huì)對 App 進(jìn)行加密黍氮,導(dǎo)致 App 體積增大不少唐含,這個(gè)加密實(shí)際上是沒卵用的,只是讓破解的人要多做一個(gè)步驟沫浆,運(yùn)行 App 去內(nèi)存 dump 出可執(zhí)行文件而已觉壶,無論怎樣加密,都可以用這種方式拿出加密前的可執(zhí)行文件件缸。所以為什么要做這樣的加密呢?想不到有什么好處叔遂。

本地私鑰

我們看到前面說的簽名流程很繞很復(fù)雜他炊,經(jīng)常出現(xiàn)各種問題争剿,像有 Provisioning Profile 文件但證書又不對,本地有公鑰證書沒對應(yīng)私鑰等情況痊末,不理解原理的情況下會(huì)被繞暈蚕苇,我的疑問是,這里為什么不能簡化呢凿叠?還是以開發(fā)證書為例涩笤,為什么一定要用本地 Mac 生成的私鑰去簽名?蘋果要的只是本地簽名盒件,私鑰不一定是要本地生成的蹬碧,蘋果也可以自己生成一對公私鑰給我們,放在 Provisioning Profile 里炒刁,我們用里面的私鑰去加密就行了恩沽,這樣就不會(huì)有 CertificateSigningRequest 和 p12 的概念,跟本地 keychain 沒有關(guān)系翔始,不需要關(guān)心證書罗心,只要有 Provisioning Profile 就能簽名,流程會(huì)減少城瞎,易用性會(huì)提高很多渤闷,同時(shí)蘋果想要的控制一點(diǎn)都不會(huì)少,也沒有什么安全問題脖镀,為什么不這樣設(shè)計(jì)呢飒箭?

能想到的一個(gè)原因是 Provisioning Profile 在非 AppStore 安裝時(shí)會(huì)打包進(jìn)安裝包,第三方拿到這個(gè) Provisioning Profile 文件就能直接用起來給他自己的 App 簽名了认然。但這種問題也挺好解決补憾,只需要打包時(shí)去掉文件里的私鑰就行了,所以仍不明白為什么這樣設(shè)計(jì)卷员。

文章不錯(cuò)盈匾,屬于摘抄,并非原創(chuàng)毕骡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末削饵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子未巫,更是在濱河造成了極大的恐慌窿撬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叙凡,死亡現(xiàn)場離奇詭異劈伴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)握爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門跛璧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來严里,“玉大人,你說我怎么就攤上這事追城∩材耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵座柱,是天一觀的道長迷帜。 經(jīng)常有香客問我,道長色洞,這世上最難降的妖魔是什么戏锹? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮锋玲,結(jié)果婚禮上景用,老公的妹妹穿的比我還像新娘。我一直安慰自己惭蹂,他們只是感情好伞插,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盾碗,像睡著了一般媚污。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廷雅,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天耗美,我揣著相機(jī)與錄音,去河邊找鬼航缀。 笑死商架,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芥玉。 我是一名探鬼主播蛇摸,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灿巧!你這毒婦竟也來了赶袄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抠藕,失蹤者是張志新(化名)和其女友劉穎饿肺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾似,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敬辣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购岗。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汰聋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喊积,到底是詐尸還是另有隱情,我是刑警寧澤玄妈,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布乾吻,位于F島的核電站,受9級特大地震影響拟蜻,放射性物質(zhì)發(fā)生泄漏绎签。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一酝锅、第九天 我趴在偏房一處隱蔽的房頂上張望诡必。 院中可真熱鬧,春花似錦搔扁、人聲如沸爸舒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扭勉。三九已至,卻和暖如春苛聘,著一層夾襖步出監(jiān)牢的瞬間涂炎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工设哗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唱捣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓网梢,卻偏偏與公主長得像震缭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子澎粟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 以前一直對iOS App簽名原理了解的不是很透徹蛀序,最近看到一篇文章,講解的很透徹活烙,特地轉(zhuǎn)發(fā)一下 文章地址:[htt...
    哈羅弟弟閱讀 698評論 0 1
  • 轉(zhuǎn)自 bang' blog 有改動(dòng)徐裸。 iOS 簽名機(jī)制挺復(fù)雜,各種證書啸盏,Provisioning Profile...
    就叫yang閱讀 796評論 0 2
  • 原文地址:iOS App 簽名的原理 bang’s blog iOS 簽名機(jī)制挺復(fù)雜重贺,各種證書,Provision...
    高浩浩浩浩浩浩閱讀 663評論 0 3
  • iOS 簽名機(jī)制挺復(fù)雜,各種證書气笙,Provisioning Profile次企,entitlements,Certif...
    iYeso閱讀 923評論 0 3
  • 驚字能組的詞很多潜圃, 我最喜歡驚喜缸棵, 而生活卻是不斷的驚訝, 驚詫谭期,驚悚堵第,驚愕,驚恐…… 最后則是驚嘆隧出! 畢老師的親...
    卓爾雅致閱讀 345評論 0 5