CocoaPods自体のアップデートでのトラブル備忘録

Flutterの環境構築の関連ツールのインストール状態を確認で、インストールしてあるCocoaPodsのバージョンが古かったため、アップデートしたときのトラブルの備忘録として記載します。

最近は、OSS利用時、SPMで管理できるようになってきているので、CocoaPods更新は、おざなりになりがちの方、このケースにヒットするかもしれません。


同じ現象で悩まれる方の参考になればと思います。

◆環境

  ・Macbook Pro 2023(チップ Apple M2 Max)
  ・MacOS Ventura 13.6.3
  ・Xcode 15.1
  ・CocoaPods → 以前、別ユーザで古いバージョンをインストール済(v1.8.4)

1. CocoaPodsアップデート前の状況


まずは、Flutterのコマンドで環境構築状況を確認します。

$ flutter doctor

[!] Xcode - develop for iOS and macOS (Xcode 15.1)
    ! CocoaPods 1.8.4 out of date (1.11.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#updating-cocoapods for instructions.

Mac機器には、以前、別ユーザでCocoaPodsをインストールしてある状態で、それが古いバージョンなので、警告が出ている状態になってます。

この状態を回避するために、アップデートを実行することにします。

2. CocoaPodsアップデートまでの道のり


2-1. とりあえず、CocoaPodsのバージョンチェックと、CocoaPodsのインストール

CocoaPodsのバージョンチェックを実行しました。

$ pod --version
Ignoring json-1.8.6 because its extensions are not built. Try: gem pristine json --version 1.8.6

Ignoring unf_ext-0.0.7.7 because its extensions are not built. Try: gem pristine unf_ext --version 0.0.7.7
1.8.4
</code></pre>

なにかワーニングが出てしまっていますが、バージョン v1.8.4 がインストールされているようです。

 次に、CocoaPodsのインストールを実行しました。

<pre><code>
$ brew install cocoapods
Error: Can't create update lock in /usr/local/var/homebrew/locks!
Fix permissions by running:
  sudo chown -R $(whoami) /usr/local/var/homebrew

ユーザ権限系エラーになって、正常に実行できませんでした。

2-2. 権限修正と、CocoaPodsのインストールを再度実行

インストール時の警告の通り、chownでオーナー変更しました

$ sudo chown -R $(whoami) /usr/local/var/homebrew
$ brew install cocoapods
Warning: No remote 'origin' in /usr/local/Homebrew, skipping update!
Warning: No remote 'origin' in /usr/local/Homebrew/Library/Taps/caskformula/homebrew-caskformula, skipping update!
Warning: No remote 'origin' in /usr/local/Homebrew/Library/Taps/mono0926/homebrew-license-plist, skipping update!
==> Homebrew collects anonymous analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics have been recorded yet (nor will be during this `brew` run).

fatal: not in a git directory
Error: Command failed with exit 128: git
Warning: Treating cocoapods as a formula. For the cask, use homebrew/cask/cocoapods
Error: The following directories are not writable by your user:

Error: undefined method `[]' for nil:NilClass
Please report this issue:
  https://docs.brew.sh/Troubleshooting
/usr/local/Homebrew/Library/Homebrew/utils/analytics.rb:316:in `default_fields_influx'
/usr/local/Homebrew/Library/Homebrew/utils/analytics.rb:39:in `report_influx'
/usr/local/Homebrew/Library/Homebrew/utils/analytics.rb:87:in `report_influx_event'
/usr/local/Homebrew/Library/Homebrew/utils/analytics.rb:76:in `report_event'

他の権限エラーになって、まだ正常に実行できませんでした。

2-3. Homebrew周りをクリアにする

fatal: not in a git directoryの警告と、ネット検索した結果、Homebrewが管理しているgitの操作がインストール時にできていないっぽいので、git resetを実行しました。

$ git config --global --add safe.directory /usr/local/Homebrew
$ cd "$(brew --repository)"
$ git reset --hard FETCH_HEAD
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
</code></pre>
$(brew --repository)の配下のファイル・フォルダのオーナーが自身と別ユーザ担っていたため、chownでオーナーを自身に変更しました。その後、git resetを実行しました。
<pre><code>
$ git reset --hard FETCH_HEAD
HEAD is now at 4564628ea Merge pull request #15896 from branchvincent/pypi-excludes


git resetは成功したので、次にライブラリフォルダ内のデータをクリーンにします。

$ cd "$(brew --repository)/Library"
$ git clean -fd

2-4. Homebrewを更新

gitリポジトリは、クリーンな状態なので、Homebrewを更新で正常に実行できるはずです。

brew update、brew upgradeで更新させました。

$ brew update
fatal: couldn't find remote ref refs/heads/master
To restore the stashed changes to /usr/local/Homebrew, run:
  cd /usr/local/Homebrew && git stash pop
Error: Fetching /usr/local/Homebrew/Library/Taps/mono0926/homebrew-license-plist failed!
Installing from the API is now the default behaviour!
You can save space and time by running:
  brew untap homebrew/core
Error: Some taps failed to update!
The following taps can not read their remote branches:
  mono0926/license-plist
This is happening because the remote branch was renamed or deleted.
Reset taps to point to the correct remote branches by running `brew tap --repair`
$ brew upgrade
==> Upgrading 45 outdated packages:
tree 1.8.0 -> 2.1.1_1

==> Upgrading readline
  8.2.1 -> 8.2.7

==> Pouring carthage--0.39.1.ventura.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/carthage
Target /usr/local/bin/carthage
already exists. You may want to remove it:
  rm '/usr/local/bin/carthage'

To force the link and overwrite all conflicting files:
  brew link --overwrite carthage

To list all files that would be deleted:
  brew link --overwrite --dry-run carthage

Possible conflicting files are:
/usr/local/bin/carthage

==> carthage
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> subversion
svntools have been installed to:
  /usr/local/opt/subversion/libexec

The perl bindings are located in various subdirectories of:
  /usr/local/opt/subversion/lib/perl5


警告は出てましたが、Homebrewの更新自体は、成功しました。

失敗した場合の参考例として、権限系がおかしな場合、brew upgradeでError: Failure...が出力されました。

$ brew update
f

2-5. CocoaPodsのインストールを再実行

Homebrewは更新できましたので、CocoaPodsのインストールを再々実行しました。

$ brew install cocoapods
Warning: Treating cocoapods as a formula. For the cask, use homebrew/cask/cocoapods
==> Downloading https://ghcr.io/v2/homebrew/core/cocoapods/manifests/1.14.3

==> Pouring cocoapods--1.14.3.ventura.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/pod
Target /usr/local/bin/pod
already exists. You may want to remove it:
  rm '/usr/local/bin/pod'

To force the link and overwrite all conflicting files:
  brew link --overwrite cocoapods

To list all files that would be deleted:
  brew link --overwrite --dry-run cocoapods

Possible conflicting files are:
/usr/local/bin/pod
/usr/local/bin/xcodeproj
==> Summary
🍺  /usr/local/Cellar/cocoapods/1.14.3: 13,791 files, 28.8MB
==> Running `brew cleanup cocoapods`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

CocoaPodsのインストール自体は、成功しましたが、/usr/local/bin配下に古いcocoapodsがあるため上書きできなかったようです。

したがって、手動でcocoapodsのリンクを付け替えました。

$ cd /usr/local/bin
$ mv pod pod.bak
$ brew link --overwrite cocoapods

3. CocoaPodsアップデート後の状況


この状態で、CocoaPodsのバージョンチェックして、正常に表示されるようになりました。

$ pod --version
1.14.3


また、Flutterのコマンドで環境構築状況を確認すると、CocoaPodsの警告は消えました。

$ flutter doctor

[✓] Xcode - develop for iOS and macOS (Xcode 15.1)