Xcodeで新しくプロジェクトを立ち上げ、久しぶりにCocoapodsを使おうと pod init を打つとエラーになってしまいました。
私と同じようになってしまった人もいるのではないでしょうか?
無事に解決することができましたので、解決に至った流れをご紹介いたします。
エラーの内容
発生したエラーは次のとおりでした。
$ pod init
――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
### Command
```
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/bin/pod init
```
### Report
* What did you do?
* What did you expect to happen?
* What happened instead?
### Stack
```
CocoaPods : 1.11.2
Ruby : ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin20]
RubyGems : 3.3.3
Host : macOS 13.0.1 (22A400)
Xcode : 14.1 (14B47b)
Git : git version 2.37.1 (Apple Git-137.1)
Ruby lib dir : /opt/homebrew/Cellar/ruby/3.1.0/lib
Repositories : trunk - CDN - https://cdn.cocoapods.org/
```
### Plugins
```
cocoapods-deintegrate : 1.0.5
cocoapods-plugins : 1.0.0
cocoapods-search : 1.0.1
cocoapods-trunk : 1.6.0
cocoapods-try : 1.2.0
```
### Error
```
RuntimeError - [Xcodeproj] Unknown object version (56).
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:228:in `initialize_from_file'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:113:in `open'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/cocoapods-1.11.2/lib/cocoapods/command/init.rb:41:in `validate!'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/claide-1.1.0/lib/claide/command.rb:333:in `run'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/cocoapods-1.11.2/lib/cocoapods/command.rb:52:in `run'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/gems/cocoapods-1.11.2/bin/pod:55:in `<top (required)>'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/bin/pod:25:in `load'
/opt/homebrew/Cellar/cocoapods/1.11.2_2/libexec/bin/pod:25:in `<main>'
```
――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[!] Oh no, an error occurred.
Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%5BXcodeproj%5D+Unknown+object+version+%2856%29.&type=Issues
If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new
Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md
Don't forget to anonymize any private data!
Looking for related issues on cocoapods/cocoapods...
- Pod init in xcode 14.1 and mac os ventura 13.0.1
https://github.com/CocoaPods/CocoaPods/issues/11656 [open] [1 comment]
a week ago
- pod init after update it to XCODE 14
https://github.com/CocoaPods/CocoaPods/issues/11546 [open] [17 comments]
5 days ago
- Error occurred when executing pod init
https://github.com/CocoaPods/CocoaPods/issues/11536 [open] [16 comments]
3 weeks ago
and 11 more at:
https://github.com/cocoapods/cocoapods/search?q=%5BXcodeproj%5D%20Unknown%20object%20version%20%2856%29.&type=Issues&utf8=✓
Errorの箇所に次の内容が書かれており、バージョンが誤っていることが推測できますね。
RuntimeError - [Xcodeproj] Unknown object version (56).
原因を分析
Cocoapodsのバージョンを確認すると1.11.2でした。
$ pod --version
1.11.2
以下のサイトでCocoapodsの最新バージョンを確認すると1.11.3(2022/12/05時点)でしたので、やはりバージョンが古いことがわかりました。
The Cocoa Dependency Manager. Contribute to CocoaPods/CocoaP…
そこで、Cocoapodsのバージョンのアップデートを試みましたが、失敗しました。
$ gem update cocoapods
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin22/rbconfig.rb:21: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777
Ignoring bigdecimal-3.1.2 because its extensions are not built. Try: gem pristine bigdecimal --version 3.1.2
Ignoring bigdecimal-3.0.2 because its extensions are not built. Try: gem pristine bigdecimal --version 3.0.2
Ignoring bigdecimal-3.0.0 because its extensions are not built. Try: gem pristine bigdecimal --version 3.0.0
Ignoring date-3.1.1 because its extensions are not built. Try: gem pristine date --version 3.1.1
Ignoring dbm-1.1.0 because its extensions are not built. Try: gem pristine dbm --version 1.1.0
Ignoring etc-1.2.0 because its extensions are not built. Try: gem pristine etc --version 1.2.0
Ignoring io-console-0.5.8 because its extensions are not built. Try: gem pristine io-console --version 0.5.8
Ignoring json-2.5.1 because its extensions are not built. Try: gem pristine json --version 2.5.1
Ignoring libxml-ruby-3.2.1 because its extensions are not built. Try: gem pristine libxml-ruby --version 3.2.1
Updating installed gems
Nothing to update
gemのバージョンのアップデートも試みましたが、失敗しました。
$ sudo gem update --system
Password:
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin22/rbconfig.rb:21: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777
Ignoring bigdecimal-3.1.2 because its extensions are not built. Try: gem pristine bigdecimal --version 3.1.2
Ignoring bigdecimal-3.0.2 because its extensions are not built. Try: gem pristine bigdecimal --version 3.0.2
Ignoring bigdecimal-3.0.0 because its extensions are not built. Try: gem pristine bigdecimal --version 3.0.0
Ignoring date-3.1.1 because its extensions are not built. Try: gem pristine date --version 3.1.1
Ignoring dbm-1.1.0 because its extensions are not built. Try: gem pristine dbm --version 1.1.0
Ignoring etc-1.2.0 because its extensions are not built. Try: gem pristine etc --version 1.2.0
Ignoring io-console-0.5.8 because its extensions are not built. Try: gem pristine io-console --version 0.5.8
Ignoring json-2.5.1 because its extensions are not built. Try: gem pristine json --version 2.5.1
Ignoring libxml-ruby-3.2.1 because its extensions are not built. Try: gem pristine libxml-ruby --version 3.2.1
Updating rubygems-update
Fetching rubygems-update-3.3.26.gem
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory.
うーん、gemがうまくいかないのは、そもそもRubyに原因があるのでしょうか。。。
Rubyのバージョンを調べてみると、、、ビンゴ!
バージョンがかなり古いものになっていました。
$ ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin22]
調べてみたところ、Ruby 2.6の公式サポートが終了していました。。。
そして、安定版は3.1.2(最新版は3.1.3)とのこと。
Rubyのバージョンをアップデートする必要がありそうですね。
解決の手順
では、Rubyのバージョンをアップデートしましょう。
【注意】Rubyのバージョンを入れ替えると、gemを再度入れ直す必要があります。また設定等も再度やり直す必要が出てくる可能性がありますので注意してください。
まずは、rbenvでインストールできるバージョンを確認したところ、3.1.2がありませんでした。
$ rbenv install -l
2.6.9
2.7.5
3.0.3
3.1.1
jruby-9.3.3.0
mruby-3.0.0
rbx-5.0
truffleruby-22.0.0.2
truffleruby+graalvm-22.0.0.2
Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
そこで、まずはrbenvを最新化しました。
$ brew upgrade rbenv ruby-build
最新の3.1.3までがインストールの対象になっていることが確認できました。
$ rbenv install -l
2.7.7
3.0.5
3.1.3
jruby-9.4.0.0
mruby-3.1.0
picoruby-3.0.0
rbx-5.0
truffleruby-22.3.0
truffleruby+graalvm-22.3.0
Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
では、インストールしていきます。
$ rbenv install 3.1.2
To follow progress, use 'tail -f /var/folders/bq/0ph_jzxj4y361byx2vn07m2m0000gn/T/ruby-build.20221204170620.60896.log' or pass --verbose
Downloading openssl-3.0.7.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e
Installing openssl-3.0.7...
Installed openssl-3.0.7 to /Users/kkf/.rbenv/versions/3.1.2
Downloading ruby-3.1.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
Installing ruby-3.1.2...
ruby-build: using readline from homebrew
Installed ruby-3.1.2 to /Users/kkf/.rbenv/versions/3.1.2
使用するバージョンを指定します。
$ rbenv global 3.1.2
次に、環境変数を設定します。
$ vi ~/.zshrc
上記コマンドを入力すると、 .zshrc が vi で編集できる状態になるので、次の2文を追記します。
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
最後に上記で入力した環境変数の内容を反映するために次のコマンドを入力します。
$ source ~/.zshrc
Rubyのバージョンが更新されていることを確認できました。
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin22]
Cocoapodsを再度インストールします。
$ sudo gem install cocoapods
これで pod init ができるようになりました。
$ pod init
お疲れ様でした。