電腦升級了最新的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權限中,有一些操作也無法完成。在我的測試中我注意到了以下幾點:
-
/System文件夾下的所有文件都不能被蘋果應用以外的程序修改(例如各種安裝器和升級部件)
-
當前的API例如task_for_pid不能在系統進程下被調用了。這意味着以前注入系統進程(Finder、Messages或者系統內核)的程序都不能用了。
-
有意思的是,rootless依然允許已簽名的KEXT內核拓展被載入。問題是KEXT可以進行許多無限制的系統及操作。
總結
Rootless機制的目的很明顯是改進安全性和可靠性,使得惡意軟件以及木馬很難滲透進系統。我很確信他將成爲許多惡意軟件開發者的一個挑戰,不過我也很確定人們會發現這一機制很多薄弱的環節。
這個特性對於一些合法的軟件有很多副作用。對此,蘋果提供了一種方法使得用戶可以關閉這個特性,但這需要用戶以恢復模式啓動(開機按住Command+R)
如果想了解更多,可以參考蘋果的WWDC session視頻。
rootless 的關閉方法
更新後的關閉方法,兼容Beta7: (在正式版中一樣有效親試)
-
開機按住Command+R,進入恢復模式,打開terminal,鍵入:
csrutil disable
回車,重新啓動即可。
要重新恢復,只需將disable改爲enable
csrutil enable
圖文教程:
- 先關機
-
先按住 command + r 不要松 再按 開機鍵 (開機鍵可以送 command + r 不可送)
-
之後會看到系統加載進度 (command + r 這個時候還是不可以松的)
-
見到這個界面的時候鬆開 (command + r)
-
打開終端
-
輸入
-
回車 見到 表示已近成功
-
重啓電腦,這樣就可以盡情的使用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 後的效果
和在10.10 系統下使用沒有區別。不會出現警告和錯誤。
原文鏈接:http://www.jianshu.com/p/23c01067cf7e
著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。