URLスキーム名がバッティングしたアプリの挙動

1ソースを複数アプリとして公開する場合に気をつけなければならないことの一つにURLスキームがあります。通常はPro版、Free版とした場合でもURLスキームは分けるべきですが、申請時に分けるのを忘れて痛い目をみました。
実際にどうなるかというと、AppStoreからアプリをダウンロードするタイミングで同名のURLスキームが存在する場合、今まで入っていたアプリのURLスキームが無効となって、新しくダウンロードしたアプリに紐付くようになります。上書きされて無効となったアプリを有効にする手段は、アップデートしようと上書きしたアプリを削除しようとも有効になることはなく、削除して再インストールするしか方法がなくなります。


具体的にどう失敗したかというと、

  1. 「SOICHA」を基板に「被災者支援」というアプリをAppStore公開時に「soicha://」の変更を忘れた。
  2. 「SOICHA」をインストールしているユーザが「被災者支援」をダウンロードすると「soicha://」で「被災者支援」が起動してしまう。
  3. 「被災者支援」を削除して「soicha://」をリンクするとSOICHAが入っていても「アプリが存在しない」というエラーが出る。
  4. 「被災者支援」を別名の「soichad://」に変更してアップデートしても「soicha://」のリンクでは「アプリが存在しない」というエラーが出る。


おそらくURLスキーム名とアプリのテーブルの更新は、新規インストール時(Storeからダウンロード時)のみで、アップデート・アプリ削除時には更新しない仕様のようです。スキーム名はiPhone内でユニークでない場合、他アプリによって上書きして潰してしまうため、絶対にバッティングしないように一般名詞などの場合は接頭辞をつけるなどの工夫する必要があるかもしれません。