This is the short version:
When I run
pod install
in an Xcode project I get
[!] Pod::Executable pull error: cannot open .git/FETCH_HEAD:
Permission denied
If I run
sudo pod install
I get no error, but my files installed are owned by root and can't compile and I have to chown
those files to a normal user to use the Xcode compiler.
I am running Lion OSX.
I installed cocoaPods using
sudo gem install cocoaPods
I had to use sudo
because without it I got
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /Library/Ruby/Gems/1.8 directory.
so now I have a root installed version of cocoaPods that downloads root owned Xcode libraries.
Is sudo
installation of cocoaPods the wrong way or normal way?
If normal, is there a way to fix the pod install problem?
I solved this problem by running the following command:
sudo chown -R username:groupname ~/Library/Caches/CocoaPods
and
sudo chown -R username:groupname ~/.cocoapods
Please replace username
and groupname
with your Mac login username/groupname.
I only used (where username
is your Mac login username)
sudo chown -R username ~/Library/Caches/CocoaPods
and
sudo chown -R username ~/.cocoapods
when I tried with the groupname parameter I got
chown: username.groupname: illegal user name
Of course I used my own username and groupname :)
Removing the directories worked for me:
sudo rm -R ~/Library/Caches/CocoaPods
sudo rm -R ~/.cocoapods/repos
If some other problems still exist.
Remove the Pods directory and the podFile.lock file.
Cocoapods just adds the directories again.
With all the errors that I got while installing CocoaPods in some of my projects, I've finally succeeded in finding a pattern with it. Here it is:
Access your project folder from the terminal:
$ cd /Users/username/Downloads/MessagesTableViewController-master
Create a podfile:
$ touch podfile
$ open -e podfile
After the podfile is created, access it via the Finder and edit it in any other text editor except TextEdit because TextEdit sometimes messes up with apostrophes in the pod file. I used textWrangler. Write the following in the pod file; (Note these dependencies are for projects that support iOS version 6.0 and above)
platform :ios, '6.0'
pod 'AFNetworking'
Save the file and close it.
Go back to the terminal and see your pod version:
$ pod --version
Depending on your pod version, if an update is required, run this command:
$ sudo gem update
After the update completes, or it states that it is already up-to-date, you should install the cocoapods:
$ sudo gem install cocoapods
And at the very end, just run the following commands:
$ sudo pod setup
$ sudo pod install
And Viola! It is done. You'll see a Pods named folder within your project folder and the dependency you stated in the pod file will be apparent in Pods folder as a sub-folder.
Happy coding :)
The issue is with Mac OS X's default installation of Ruby. The Ruby/Gems installation is owned by root in the location you specified.
This is normal behavior unless you install a Ruby manager. I would recommend rbenv but RVM is popular as well.
These installed your Ruby installation in your $HOME
folder. This way your user owns the Ruby and gem executables.
Quick, easy, hacky solution:
sudo chmod -R 777 ~/.cocoapods
sudo chmod -R 777 ~/Library/Caches/CocoaPods
This is a known issue. There's more on the CocoaPods official web-site.
Answering the original question:
Is sudo installation of cocoaPods the wrong way or normal way?
When I do a pod install
I get:
Analyzing dependencies
CocoaPods 0.36.0.beta.1 is available.
To update use: `sudo gem install cocoapods --pre`
so I assume sudo
is OK.
I solved it by installing the most up to date version of Ruby. Instructions here: https://gorails.com/setup/osx/10.12-sierra
I was then able to successfully run
sudo gem update
sudo gem install cocoapods