iPhoneアプリでUDIDを使いたいケースその2


追記による注意:この記事は、はなはだしい勘違いに基づいていて、内容が破綻しています。修正しようにも、最も大事なところが勘違いしているためほぼ全部書き換えになってしまうので、しょうがないのでそのままにしておきます。最後に何が問題だったか書いておくので、そちらを参照して下さい。ということで、そのままの中身を信じないで下さい。

前回に続いて、iPhoneアプリでUDIDを使いたくなるケーススタディ。

あるiOSアプリがあったとして、自宅ではiPadの広い画面でゆうゆうと使いたい。通勤中はiPhoneで使いたい。それぞれのデバイスで、作業を別々に進めていく。どこかで同期を行う必要がある。こういった状況を考えよう。

まず大前提として、iOSのモデルは1アカウントに対して複数デバイスを運用する。これらのデバイスは、iTunesを通じてアプリおよび書類を同期できる。逆に言うと、複数デバイスで異なるデータを保持し続けることを想定していない。

もちろん、ほとんどの状況において、データの同期は善だ。iPhoneとiPadとで違うデータがたまり続けたら目もあてられない。そのためにiTunesを使ったり、同期のための独自サーバを立てたりする。iOS 5からはiCloudも提供される。

でも実際にアプリを使っていると、同期したくないデータも出てくる。たとえば、ブックビューワみたいなアプリを考える。iPhoneでもiPadでも同じ本棚を共有して本が読めるとする。このとき、iPhoneで呼んだ続きをそのままiPadで読みたい、という要求があるだろう。それと同時に、iPhoneで読んだ本はiPhoneで読み続けて、iPadではiPadのものを読み続けたい、という要求も発生するだろう。

現在の同期モデルだと、前者しかできない。すべての書類が同期されてしまうので、「前回読んだ本」を表すデータもただ一つしか存在できないからだ。となると、そのデータをデバイス毎にひも付けた形で保存しておきたいことになる。、、、UDIDさんの出番ですよー。

UDIDが使えれば、それをキーとしてデータを保存しておけばいい。生のデータを使うのが嫌であれば、ハッシュ値でも何でもとればいい。UDIDが使えないとなると、デバイスを識別する方法がなくなっちゃう。仮に自前のUUID作ったとしても、それがデバイス間で同期されたら意味ないし。

デバイスのモデル名を使うという方法があるかもしれない。UIDeviceクラスからは、@”iPhone”や@”iPad”という現在使っているデバイスのモデル名が取得できる。なるほど、これならiPhoneとiPadは識別できるな。、、、一人でiPad二台使ってたらどうすんの?

というわけで、やっぱりUDIDは欲しい。ま、これに関してはMACアドレスで代用は可能だけど。ネットにつながない「閉じた」アプリケーションであっても、複数デバイスを運用する限り、どのデバイス上で動いているか識別したい要求は存在する。

追記による注意:はい、どこが勘違いしていたでしょうか?「iTunesの同期によって、デバイス間の書類も同期される」というところです。実際は、同期されません。したがってUDIDを取得する必要もありませんでした。

もともとこの記事は、UDIDが必要になるケースって何があるかな?と考えて、複数デバイスを使い回しているときにUDIDを意識することがあるかも、というところから書いていきました。その結果、都合のいい勘違いを自分の中で作ってしまったようです。ということで、迷惑をかけた人がいたら、申し訳ありませんでした。

    • Watanabe Toshinori
    • 2011年 8月26日

    はじめまして。
    内容について気になる点がありましたのでコメントさせて頂きました。

    > 現在の同期モデルだと、前者しかできない。すべての書類が同期されてしまうので
    >「前回読んだ本」を表すデータもただ一つしか存在できないからだ。

    これはどういう意味なのでしょうか。

    前後の文脈から「iPhoneやiPadをiTunesで同期するとアプリのデーターも全て同期されてしまう」という意味だと読んだのですが、私の環境では同一のiTunesで複数端末(iPhoneやiPad)を同期してもアプリケーション内のデーターまでは同期されません。

    例示されているブックビューワーでいえば、
    ブックビューワーアプリケーション自体はインストールされますが
    そのアプリケーションが持つデーター(本棚や「前回読んだ本」)までは同期されません。
    「前回読んだ本」を表すデーターも端末ごとに存在します。

    私が意味を読み違えているのでしたら申し訳ありません。

      • mkino
      • 2011年 8月26日

      ご指摘ありがとうございます。「iTunesの同期で、異なるデバイス間で書類も同期される」というのは、私の勘違いでした。本文の方に追記を加えておきました。

      申し訳ありませんでした。

        • Watanabe Toshinori
        • 2011年 8月26日

        ご対応して頂き、感謝いたします。
        UDIDについて調査していたところこちらの記事を拝見し、自分の環境だけ動作が異なってしまっているのではないかと不安になっておりました。

        ありがとうございました。

  1. トラックバックはまだありません。