【iOS學習筆記 16-7-20】mac os 10.11.4下cocoapod不能正常使用問題

電腦升級了最新的10.11.4,然後手機圖新鮮升級了iOS10,所以要調試開發程序,自然xcode需要升級到最新的beta版,然後就是cocoapods出問題了。因爲我是新買的mac,所以先安裝cocoapods,按照原來方法,死活安裝出問題,最常見的就是

ERROR:  While executing gem ... (Errno::EPERM)       
 Operation not permitted - /usr/bin/xcodeproj

很是頭疼,後來找到了下面這這個帖子,然後解決了cocoapods的安裝問題。原因解釋的很清楚

ps:這個命令已經失效了

sudo nvram boot-args="kext-dev-mode=1 rootless=0";sudo reboot

http://www.jianshu.com/p/23c01067cf7e

Rootless 的說明

在OS X 10.11中蘋果引入的Rootless機制。
關於Rootless的小小說明:

Rootless討論的前提是假定root賬戶是OS
X(或者其他Unix系統)中對抗惡意程序保護操作系統的最後一道防線。意思是一個應用程序一旦獲得了root賬戶權限,將會獲得系統的無限的權限。就可以進行實時修改、修改磁盤、替換任何系統文件等。

目前,許多傳統的Unix操作系統中,root賬戶都是被強密碼保護着的。這裏的問題在於大部分的OS X系統基本上是單用戶系統,也就是不存在單獨的root賬戶密碼,root密碼就是管理員賬戶的密碼。簡單來說,蘋果通過以下途徑來獲取root權限:大部分用戶會毫不猶豫的輸入密碼,都不會想他們到底授權了什麼行爲。更重要的是,授權給了什麼應用程序。可以說,對於一般的無經驗用戶,他們沒有時間和專業知識來考慮這個問題。他們不會意識到他們一旦輸入了密碼,請求的進程就會獲得root權限。

什麼是系統集成保護(System Integrity Protection)?

使用了系統集成保護,蘋果決定第三方應用有一些永遠不會被允許的事情。從某些層面來講,這種保護和iOS更像了。第三方應用相比起來更受限制。這就是rootless一詞的由來,系統在某種程度上限制了管理員賬號的權限。

rootless特性使得某些操作只有蘋果的應用可以被許可(通過代碼簽名來判斷)。所以第三方應用即使是運行在root權限中,有一些操作也無法完成。在我的測試中我注意到了以下幾點:

  1. /System文件夾下的所有文件都不能被蘋果應用以外的程序修改(例如各種安裝器和升級部件)

  2. 當前的API例如task_for_pid不能在系統進程下被調用了。這意味着以前注入系統進程(Finder、Messages或者系統內核)的程序都不能用了。

  3. 有意思的是,rootless依然允許已簽名的KEXT內核拓展被載入。問題是KEXT可以進行許多無限制的系統及操作。

總結

Rootless機制的目的很明顯是改進安全性和可靠性,使得惡意軟件以及木馬很難滲透進系統。我很確信他將成爲許多惡意軟件開發者的一個挑戰,不過我也很確定人們會發現這一機制很多薄弱的環節。

這個特性對於一些合法的軟件有很多副作用。對此,蘋果提供了一種方法使得用戶可以關閉這個特性,但這需要用戶以恢復模式啓動(開機按住Command+R)

如果想了解更多,可以參考蘋果的WWDC session視頻。

rootless 的關閉方法

更新後的關閉方法,兼容Beta7: (在正式版中一樣有效親試)

  1. 開機按住Command+R,進入恢復模式,打開terminal,鍵入:

    csrutil disable

    回車,重新啓動即可。

    要重新恢復,只需將disable改爲enable

    csrutil enable

圖文教程:

  1. 先關機
  2. 先按住 command + r 不要松 再按 開機鍵 (開機鍵可以送 command + r 不可送)


    Snip20151009_2.png
  3. 之後會看到系統加載進度 (command + r 這個時候還是不可以松的)


    Snip20151009_3.png
  4. 見到這個界面的時候鬆開 (command + r)


    Snip20151009_4.png
  5. 打開終端


    Snip20151009_5.png
  6. 輸入


    Snip20151009_6.png
  7. 回車 見到 表示已近成功


    Snip20151009_7.png
  8. 重啓電腦,這樣就可以盡情的使用cocoapods 了

注意:
這兩個指令已經失效。
這個是關閉的指令:

sudo nvram boot-args="kext-dev-mode=1 rootless=0";sudo reboot

這個是開啓的指令:

sudo nvram -d boot-args && sudo reboot

cocoa pods 不能正常的原因

cocoa pods不能正常使用的在於蘋果開啓了 rootless 導致

/usr/bin

文件夾我們不能進行正常的讀寫
如果是第一次在OS X 10.11下安裝 cocoa pod ( sudo gem install cocoa pods)見到的錯誤就是

ERROR:  While executing gem ... (Errno::EPERM)       
 Operation not permitted - /usr/bin/xcodeproj

也就是我們沒有權限操作這個文件夾xcodeproj 執行內部的代碼

這個是我關閉 rootless 後的效果


Snip20151008_1.png


和在10.10 系統下使用沒有區別。不會出現警告和錯誤。



文/瀟小濺(簡書作者)
原文鏈接:http://www.jianshu.com/p/23c01067cf7e
著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章