職場の先輩から「Xcodeプロジェクト全体をzipで圧縮して送付したので、展開してそちらの環境で実行してみてください。Xcodeで開けばそのままシミュレータで実行できるはずです。」と言われ、受け取ったプロジェクトを開いてみたものの、うまく実行できず困った経験はありませんか?
自分の環境設定が原因で実行できないケースもいろいろありますが、今回は CocoaPods を使用したプロジェクトで発生しやすい問題について説明します。
(※ CocoaPods を使用したプロジェクトは、通常は .xcworkspace を開きます。本記事でも .xcworkspace を開いている前提で説明します。)
例えば、CocoaPodsでFirebaseをインストールしたプロジェクトを誰かからもらってそのままXcodeで開くと、次のように表示され、▶️ボタンをクリックしても実行できないという結果になります。
うまく実行できない理由は、実行対象のスキーマが正しく設定されていないためです。
以下のように、プロジェクトのターゲットを指定すると正しく実行できるようになります。
簡単な解決方法を知りたいだけなら以上で終了です。
しかし、通常だとスキーマの一覧には自分のプロジェクトのスキーマ1個しか表示されません。それが、zipで圧縮したプロジェクトをそのまま自分のMacに展開しただけなのに、なぜたくさんのライブラリがスキーマの一覧に表示されてしまい、実行対象のスキーマがおかしくなってしまうのでしょうか?
以下、その理由と今回の問題のより根本的な対処方法を説明します。
実は、Xcodeのプロジェクト(.xcodeprojフォルダ)の中には、次のようにユーザ毎の設定が格納されているフォルダ(xcuserdata/「ユーザー名」.xcuserdatad)があり、この中にスキーマに関する設定が格納されています。
つまり、スキーマに関する設定はユーザー毎の設定になっていて、xcodeのプロジェクトを別のユーザーが開いた時は、別のスキーマ設定が使用されることになるわけです。
CocoaPodsは「pod install」を実施することで指定のライブラリやそのライブラリが使用している別ライブラリをインストールしてくれますが、その際にCocoaPodsがインストールしたライブラリを実行スキーマの一覧に表示しないように設定する調整もしてくれます。
しかし、その設定は前述の通りユーザー毎の設定です。
そのため、別ユーザーがプロジェクトを開くと、元の開発者のスキーマ設定は使用されません。
結果として、CocoaPods がインストールした多数のライブラリのスキーマが一覧に表示され、実行対象として意図しないライブラリのスキーマが選択されてしまうことになります。
そこで、誰か別の人から受け取ったXcodeプロジェクトを開く前に「pod install」を実施すれば、CocoaPodsが自ユーザー用のスキーマ設定をうまく調整してくれますので、その上でプロジェクトを開けば、次のように自分のプロジェクトのスキーマが1個だけ表示され、それが選択された状態になります。
ちなみに、ここで「Manage Schemes...」を選択すると、次のようにCocoaPodsがインストールしたライブラリは全て非表示(ShowがOFF)になっていて、自分のプロジェクトの実行スキーマだけShowがONになっています。CocoaPodsは、「pod install」でこのユーザー毎のスキーマの設定を行なってくれているわけです。
つまり、CocoaPodsを使用したXcodeプロジェクトを他の人から受け取った時は、一度「pod install」を実施して、スキーマの設定を正しくしましょうというお話でした。
この記事の画像はZkitchで作成しました。Zkitchは、画面のスクリーンショットに矢印やテキスト等の説明を入れることができるアプリです。
説明入りの画像をよく作成される方は、ぜひお試しください。





