能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

macOS MontereyでiMovieがアップデートできないトラブルの対処方法

端的に云うと

iMovieのアップデート進まないトラブルに遭遇したのでメモ。NodeJSの切り替えのためにNVMとiMovieを使う場合に発生。

1) iMovieがアップデートできない

2022年8月に入手したMacBookPro M2版のiMovieをアップデートするもアップデートが進まない問題が発生した。AppStoreアプリが何かしらのトラブルを起こしたものかと、iMovieを一旦削除、再インストールを試みても、ダウンロードは完了するもインストール中から進まず、macOSを再起動しても再度インストール中と表示されるだけとなった。

macOS再起動についても素直に再起動させてくれるわけではなく、iMovieがインストールスクリプト実行中のため再起動を中断させられてしまう。

しようがないのでインストールに関連するであろうアップデート用のデーモン(installd)、とシェルプログラム(zsh)を強制終了してやっと再起動するといったMacを気軽に使う利用者であれば対処しづらいトラブルに見受けられる。

2)原因を調べる

再起動した際に気になったのはアップデート用のデーモン(macOS上で常駐しているサービス)である installdから呼び出されるシェルプログラム(zsh)でmacOSのアクティビティモニターでCPU使用率を見ると100%状態のままとなっていることが判明した。

こちらzshを一旦停止してもinstalldから再度zshが呼び出され100%の状態になることからiMovieが必要としてるスクリプトが実行ないし実行前後のタイミングで止まっているものと思われる。

Webで検索してみてもiMovieのインストールに失敗する問題への一般的な解は見当たらなかった。これはおそらく開発者が使うmacOSでしか起きない事象という仮説を立てて調べたところ最近シェルプログラムの設定にNVMの設定を入れていたことを思い出した。

NVMNodeJSのバージョンを切り替えるための機能で当Blogを更新するために導入したものだった。

実際にzshの設定を確認するため、ホーム画面の.zshrc、.zshenvを確認するとNVMの設定が含まれていた。

こちらを一時的に無効化することでiMovieのインストール/アップデートに成功した。

ホーム画面の.zshrc、.zshenvを確認するにはFinderアプリでホーム画面へ移動後(Command(⌘) + shift(⇧) + H)、非表示ファイル表示切り替えショートカットを押す。

Command(⌘) + shift(⇧) + .

非表示ファイル表示切り替えショートカットを押すたびに非表示ファイルの表示が切り替わる。

3) 対処方法

インストール/アップデートを成功させる対応方法は、AppStoreでiMovieの更新ボタンを1)押してしまった場合、2)押していない場合の2つがある。

3-1) 既にAppStoreで更新ボタンを押している場合

ホーム画面の.zshrc、.zshenvをエディターアプリで開き、NVM関連のコマンドをコメントアウト。その後macOSを再起動する。再起動するとinstalldが自動的に起動しアップデートが行われる。

3-2) AppStoreで更新ボタンを押していない場合

ホーム画面の.zshrc、.zshenvをエディターアプリで開き、NVM関連のコマンドをコメントアウト。コメントアウトした内容をターミナルアプリを起動し以下のコマンドを実行し設定を反映する。

source ~/.zshrc  

その後、AppStoreからアップデートを試みるとiMovieのアップデートすると滞りなくアップデートは反映される。

4)Launchpadの表示がおかしくなった場合

既にAppStoreで更新ボタンを押してしまった場合macOSのLaunchpadにiMovieのアップデートアイコンが表示されたままになることがある。

その際は以下のBlog記事のLaunchpadのリセットを試すと良い。

MacのLaunchpadをリセットする方法

まとめ

普通のユーザーはシェルに設定を加えないのでiMoveのアップデートに失敗する今回のケースには装具しないと思う。またNodeJSとiMovieを使うようなWeb開発者というもの少ないかもしれないので今回は珍しいケースに入ると思う。

ただしシェルにa.追加コマンドを追加、b.AppStoreからアプリのインストールorアップデート、インストーラーを使ったインストール時にシェルを使うもの、の組み合わせでは今回のトラブル対策が役立つことはあるだろう。

参考