如果不是你花了大量的時間使代碼簽名證書在你的電腦,CI還有你同事的Mac電腦上,App Store就不會是一個那樣安全的地方。
對開發者來說,代碼簽名真的是個問題嗎?
當然!光光是快速通道回購的事,在GitHub上就有1700以上關於代碼簽名的討論。這可是超過30%的潛在需求啊。盡管不是和真正的代碼相關,在Stackoverflow上你都能找到3000多條關於iOS代碼簽名的問題。
我們為什麼必須合作設計iOS應用?
在iOS生態系統,代碼簽名是最關鍵的組成部分之一:
代碼簽名使得蘋果可以決定什麼樣的軟件能夠在iOS設備上進行安裝。
代碼簽名能夠保障在你的Mac連接到iPhone終端時,你的手機上的應用不會被第三方篡改。
你在你的APP上簽名就宣示了這個APP是由你開發的。
現在的流程有什麼問題?
一旦某人有機會獲取你的蘋果證書,他們就可以輕易地廢除原來的合格證書創建新證書,然後上傳預備文件使用他們證書。
當你提交你的iOS應用進行審核時,蘋果會在審核通過後重新對你的應用進行簽名,所以只有在終端用戶下載你的應用時你的代碼簽名證書才會被使用。
當你創建一個新的證書簽名請求時你可以勾選`Saved to disk`。這就意味著,如果其他人有機會獲取你的蘋果開發者賬戶的話,他們可以不用通過你的郵件賬戶就可以創建同樣多的,有效的證書。
Screenshot 2017-04-10 06.30.15.png
對很多iOS開發者來說,他們的賬戶證書從不離開他們的電腦(如果他們用Xcode和快速通道),但是現在同樣也有許多第三方的網頁服務會需要你的Apple ID證書,之後他們會把證書儲存在服務器上。
如何修復iOS代碼簽名?(看看我是怎麼做的?)
不要要求開發者合作設計,或者使其完全自動化
不要要求開發者完全在自己的設備上完成代碼簽名。像iTunes Transporter這樣的工具早就對上傳的二進制的校驗和以及有效性進行驗證了。就做這麼一小步,你就永遠都不要對代碼簽名做什麼了。
而且就算你的開發者賬戶並沒有激活2-factor授權,在整個進程中你的安全保證也沒有任何區別。
你只好選擇在Xcode的後台進行自動化的代碼簽名,這是我們早就已經知道的事實(原先是叫Fix Issue按鍵),這和原先的很多使用案例都配合得很好,但是一旦你的團隊到達了一定的規模,你就會看到這樣做的局限了。(詳情點擊codesigning.guide)
Enforce 2-factor
Enforce 2-step對所有蘋果開發者賬戶進行驗證,對開發團隊添加多個手機號碼和電子郵件地址提供了通道。對所有賬戶來說,接觸產品應用的渠道對enforce 2-step驗證是很重要的。
在為應用簽名前請求2 factor授權
一旦你的APP通過審核,就要向APP的擁有者確認這個版本是否要上線。由於其他有接近這個入口權限的人可能會提前知道你要發布APP的信息,所以你可以通過郵件或者SMS verification,但不能直接通過iTunes Connect Web UI確認上線。
授權
現在在本地的計算機上已經設立了授權按鈕。這個按鈕要麼可以移動到iTunes Connect服務器,要麼就在本地計算機上進行自動授權。
本地代碼簽名對開發構建還是一個需求
你總是需要在你的APP傷簽名然後安裝到設備上,但是隨著越來越多的人可以用他們自己的Apple ID在他們的設備上安裝APP,近兩年這個過程也就變得簡單多了。由於現在本地代碼簽名被許多APP供應商棄用轉而提供很多非蘋果審核的APP下載,其實也是頗具爭議的。(比如iOS版Flux)
點對點連接創建仍要求代碼簽名
上述提到的技巧對點對點連接創建並不適用,應該像原來一樣仍然要求代碼簽名