前言
大家需要首先明確兩個事情:
首先,想開發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裏,如果驗證成功,就可以安裝了!