iOS App簽名過程淺析

前言

大家需要首先明確兩個事情:

首先,想開發iOS的App, 你需要有一臺Mac, 並且安裝上Xcode, 想要在App Store裏上架App,你需要有一個開發者的賬號,在蘋果的開發者網站(developer.apple.com)裏繳納99美刀(相當於交一個入場費吧,對於企業開發者來說,自然是很隨意,對於個人開發者來說,T_T)。本文默認大家都已經有了這個開發者賬號。

其次,iOS系統和Android不太一樣,蘋果公司不能容忍沒有經過自己認證的App被安裝進系統,因此,自己開發的App,如果沒有簽名的話,是不可能裝在手機上的,只可能在模擬器裏調試。而想要對App簽名,就需要第一個前提裏面的開發者賬號。

蘋果證書分爲兩種:

一種是Apple Development,這種證書用於在自己的設備中調試。另外一種是Apple Distribution。distribution顧名思義,就是分佈式,用這種證書籤名的應用,可以在App Store中上架,被其它人下載安裝。

Provision profile是什麼?有什麼用?

如果你是蘋果的開發者,那麼肯定在開發者網站上註冊了賬號,如何使用你的賬號對你手頭的設備和開發出來的app進行管理,這時需要一個連接工具,這個工具就是provisioning profile。該文件可以在開發者網站上下載,每個用戶是獨一無二的。開發的時候,可以通過這個文件,選擇哪個設備可以運行你的app,以及你的app可以使用哪些app service。開發完app之後,provisioning profile會以簽名的方式嵌入到app的bundle裏。一個Development Provisioning Profile必須在每一個想在裏面運行應用程序代碼的設備裏安裝,如果provisioning file裏的信息並不符合某個標準,那麼你的app就不能啓動。

每一個Provisioning file包含以下三部分內容:

1,Development Certificates:

2,Unique Device Identifiers: 列出來這個app可以運行的設備列表。

3,An App ID: 可以包含“\*”通配符以被具有相似bundle標識符的很多應用使用。

如果你還想了解更多有關provisioning profile的內容,請參考鏈接:https://medium.com/@abhimuralidharan/what-is-a-provisioning-profile-in-ios-77987a7c54c2

如何下載證書到本地:

在開發者網站上,點擊“Certificates, IDs & Profiles”

如何查看自己的證書內容:

在Terminal裏面運行

security find-identity -v -p codesigning

得到的結果如下所示:

這是我本機的證書。

連接Xcode並安裝App會發生什麼?

1,Mac裏的provisioning profile去keychain裏找到developer certificate。

2,Xcode用這個certificate給代碼簽名。

3,設備的UUID和provisioning profile裏面的IDs Match。

4,Provisioning profile裏的APP ID和app裏的bundle identifier匹配。

5,該APP ID所需的各項權利(entitlements)被關聯。

6,用來對code簽名的私鑰和證書裏的公鑰match

注意,第四步,app的bundle裏會有一個info.plist,裏面有一個參數時bundle identifier,這個一定要和provisioning profile裏面的APP ID匹配,不然是不能運行簽名的命令的。

如何對App進行簽名:

如果你的Xcode鏈接上了設備,那麼當打包完bundle以後,Xcode會自動幫你執行簽名也安裝。當然,xcode也是調用的shell指令。使用的命令是codesign,下面提供一個簡單的demo。

一條示例的codesign命令:

 /usr/bin/codesign --force --sign 221427F5D9B40022F33980F081132E2B28C611B4 
--entitlements /Users/pyin/Library/Developer/Xcode/DerivedData/demo.xcent 
--timestamp=none /Users/pyin/Desktop/workplace/my.app

--sign 後面跟的參數就是用來加密的私鑰。簽名與認證的過程是非對稱加密解密的過程。詳情參考鏈接:https://wereadteam.github.io/2017/03/13/Signature/  講得非常詳細。

--entitlements 代表授權文件,後面跟的demo.xcent裏面寫了這個app可以獲得的權限

codesign命令還有一些其它參數,詳情參考鏈接:https://www.jianshu.com/p/34cdc0784ea4  講得也非常詳細。

簽完名之後,你會發現在簽名後的文件夾裏面多了一個目錄:

下面把.app拖到xcode裏,如果驗證成功,就可以安裝了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章