iPhoneアプリ開発 Xcodeで実機テストが出来なくなった場合の対処方法
iPhoneアプリ開発 Xcodeで実機テストが出来なくなった場合の対処方法
自分の知る限りXcode7まで、開発したアプリをAppStoreからダウンロードしてオーバーライトインストールした後でも、Xcodeによる開発継続が可能でした。
開発過程でXCodeでiPhone、iPadの実機にインストールしたアプリは削除してから、AppStoreからダウンロードインストールするのがセオリーなんでしょうけど、アプリのバージョンアップなのでAppStoreからインストールしたアプリに対してXcodeからオーバーライトするケースなどもXcode7までは、何の問題もなく行えました。
ところが、現状のXcode9(2017年11月末現在)やXcode8からは、過去のXcodeインストールしたアプリや、AppStoreからインストール済みのアプリに対してオーバーライト編集が出来なくなったようです。
App installation failed
This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
という形で、Xcodeからエラーメッセージが表示されて、ビルドしたアプリのインストールが行えません。
対処方法として3つの方法
このエラーメッセージに対してのアプローチ方法としては3つの方法がありますので、メモとして残しておきます。
3つの方法と言っても正確には2つの方法になるのかな?
1.もっとも簡単な方法
もっとも簡単な方法は、Xcodeから書き込みたいアプリがすでにiPhone/iPadの中にインストールされてしまっているので、そのアプリをiPhone/iPadを削除してからインストールすれば、問題が解決可能です。
しかし、インストールしたアプリが大量のローカルデータ(アプリ内部に保存しているデータ)がある場合、アプリを消すことができない場合もあるかと思います。
2.バックアップ可能な場合
この方法は、開発したアプリが古いXcodeでインストールしたままで、AppStoreからダウンロードしたアプリではないという前提となります。
例えば、Xcode7でインストールして動作していたアプリがXcode9では実機で動作できなくなった場合などに有効です。
自分で開発したアプリをAppStoreからダウンロードして、開発したアプリにオーバーライトインストールした場合は、この方法は使用できません。
Xcodeを起動して(Xcode9で話を進めます。)メニューの「Window」にある「Devices & Simulators」を選択します。
表示されたウィンドウに、対象となる実機を接続すれば、左側の「Connected」の一覧に接続された実機の名前があるはずなので、実機を選択します。
実機を選択すると「INSTALLED APPS」の一覧が表示され、Xcodeから再インストールしたいけどエラーメッセージが表示されたアプリを選択します。
※この時点で一覧になければ、AppStoreから購入したアプリがiPhone/iPadにインストールされている事になりますので、Xcodeによるアプリのバックアップは行えません。
上記の画面の「INSTALLED APPS」一覧の下に表示される設定ボタンをクリックするとメニューが表示されますので、「Download Container...」を選択し、アプリのバックアップをMac上に作成します。
アプリのローカルデータに保存してあるデータ量にもよりますが、「Download Container...」は場合によってかなり時間がかかったりします。
自分のアプリは20G近くのデータがあったので、1時間ぐらいかかったものもありました。
「Download Container...」が完了したら、iPhone/iPadからアプリを削除します。
(かなり躊躇するかと思いますが、削除してからXcodeでアプリが再インストールできれば、バックアップを復元できます。)
アプリを削除後、Xcodeからアプリがインストール&実行可能になりますので、ビルド&実機実行します。
Xcodeから実機にアプリがインストールできたら、今度は「Devices & Simulators」から対象のアプリを選択し、「Replace Container...」を選択し、先程ダウンロードしたデータを選択し、今度はMacからiPhone/iPadにデータを戻します。
3.残された方法
上記の1、2は、以下のXcodeのエラーメッセージをネットで検索すると、対処方法として紹介されているかと思います。
App installation failed
This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
ここで紹介する方法はいつまで使えるかわかりませんが、不幸にも自分でXcodeで開発したアプリをAppStoreからダウンロードインストールしてオーバーライトしてしまい、Xcodeの「Devices & Simulators」の「INSTALLED APPS」に開発アプリとして表示されなかった人向けでもあります。
条件として、Xcode8以前のバージョンから開発していたことが前提となります。
すでにMacのAppStoreなのでXcodeをアップグレードしてしまった場合には、Xcode9がインストールされているかと思います。
まずは、Xcode7.3.1を入手してダウンロードしてきます。
ダウンロードは
https://developer.apple.com/download/more/
などから行えると思います。
自分の開発環境は、Xcode9、Xcode8、Xcode7の3つをインストールしてあります。(アプリケーションフォルダでXcodeのリネームを行えばインストール可能です。)
Xcode7.3.1に最新のiOS11またはiOS10に対応できるようにターミナルを起動して、リンクを貼ります。
※以下の内容は上記のようにリネームしたXcodeがアプリケーションフォルダにある前提の内容となります。名前が異なる場合、ご自身の環境い合わせてリンク先を変更してください。
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0\ \(15A5278f\) /Applications/Xcode7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0
ln -s "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.1 (15B87)" "/Applications/Xcode7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.1 (15B87)"
sudoは、開いたコンソールで一度行えば続けて作業できます。
単純には、
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
以下にある10.x〜11.xの各フォルダを
/Applications/Xcode7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
以下へ、シンボリックリンクを貼る作業をコンソールで行うだけで、Xcode7.3.1でiOS11、iOS10の実機にアプリをインストール出来るようになります。
Xcode7.3.1では、AppStoreからインストール済みのアプリに対して、「Bundle Identifirer」さえ同一ならばオーバーライトが可能なようです。
Mac上に複数のXcodeをインストールしている場合、自分でどのバージョンを起動しているか明確に管理する必要がります。
Xcodeの起動は、アプリケーションフォルダから、自分が起動したいXcodeを選んで起動してください。
Xcodeのプロジェクトファイルをダブルクリック起動すると、最新のXcodeが起動されてしまいので注意が必要です。
一度、自分で任意のバージョンのXcodeを起動すれば、その後はXcodeのプロジェクトファイルをダブルクリックするだけで、起動済みのXcodeがプロジェクトファイルを開いてくれるようになります。
以上、どうしてもアプリを削除したくない方は、上記の方法でアプリ内部のローカルデータを継続利用を最終手段としてお試しください。
※ここで紹介した方法は、すべて自己の責任の範囲で参照してください。当方は一切の責任、クレームを受け付けません。
以上、「iPhoneアプリ開発 Xcodeで実機テストが出来なくなった場合の対処方法」でした。