iOSの絵文字に関するAppleのサポート情報

前回の記事(iOSと絵文字について - The iPhone Development Playground)で、絵文字に関することを書きましたが、Appleの公式サポート情報でも、絵文字を使う時の注意事項が説明されています。

iOS:絵文字の使用
iOS:絵文字に関する問題のトラブルシューティング
iPhone:SMS メッセージがほかのデバイスで正しく表示されないことがある

元々、メールの時に文字化けが起きたりすることは、iOSだけの問題ではないので、かなり周知されていることだと思います。

iOS5では、あらゆるところで絵文字が使えるようになったので、Webサイトに入力する時などに、使っても問題ないかどうか、少し意識する必要があると思います。

iOSと絵文字について

iOS4.xまでは、絵文字キーボードが使える場所は、SMS/MMSと、i.softbank.jpのメールに限定されていました。このときの絵文字は、Unicodeの私用領域(PUA: Private Use Area)を使って表現されていました。

そのことは、以下の記事でわかりやすく説明されているので、参考にさせていただきました。

  • いまの段階では、iPhone絵文字は主にSMS/MMSなどシフトJISの世界で使われるものだが、Unicodeで表現することもできる。iPhoneでは、文字化けを防ぐために、絵文字キーボードは絵文字が使えるシーン(シフトJISの世界)でしか出てこないようになっている。しかし、たとえばSMS/MMSで絵文字を入力した上でクリップボードにコピーし、Unicodeの世界に連れてくることは可能である。
  • Unicodeでは、iPhone絵文字は基本的に私用領域(PUA)の符号位置で表現される。それに加え、日本のケータイ絵文字がUnicodeに収録されたことを受けて、iOSはこちらの(PUAではない)符号位置もサポートしている。おそらくiOS 5では、PUAではない符号位置のほうがデフォルトになるものと思われる。
iPhone絵文字についてUnicodeの視点からまとめてみた - Mac OS Xの文字コード問題に関するメモ

ここで、「おそらくiOS 5では、PUAではない符号位置のほうがデフォルトになるものと思われる。」というように言及されていますが、まさに正解ですね。

携帯電話の絵文字 - Wikipedia

iOS5からは、どこでも絵文字キーボードが使えるようになりました。そこで使われているのは、Unicodeに正式に収録された方の絵文字になっているようです。
ただし、そこで入力された絵文字は、どこでも思った通りに表示されるわけではないというのが現実です。
いわゆる、機種依存文字」と同じような問題が、そこに潜んでいます。

Twitterに投稿した場合を例に、具体的に見てみましょう。

SysStats Monitorでは、現在のデバイスの状況をTwitterに投稿する機能を備えています。そこに、バッテリーの状態を示す絵文字を入れるように機能追加する予定です。*1

まずは、SysStats Monitor画面の下の方にある、「シェア」というボタンをタップします。

すると、以下のようなTwitterに投稿する画面が開きます。

ここで送信ボタンをタップすると、表示されているメッセージが、Twitterに投稿されます。

実際に投稿した内容を、いろいろなビューワで見てみると、Unicode絵文字のサポート状況が見えて来ると思います。

iPhoneTwitter公式アプリ

まずは、定番のiPhoneTwitter公式アプリから見てみましょう。

問題なく表示されていますね。

Mac版のTwitter公式アプリ

Mac版のTwitter公式アプリではどうでしょうか?

「⚡」だけ、少し違う絵柄になっていますが、何とか表示されていますね。

Safari

Safariではどうでしょう?

Twitter公式アプリと同じですね。
Macの場合、10.7 Lionで、「Appleカラー絵文字」というフォントが使われるようになっている場所でないと、カラーの稲妻は表示されないようです。
MacOSX標準のテキストエディットをリッチテキストモードに設定し、「文字ビューア」で絵文字を入力しながら、フォントを確認してみると、そのことがわかると思います。

Firefox(Mac版)

では、最後に、Firefox(Mac版)はどうでしょう?

こちらは、残念ながら、全く表示されないようです。
chrome(Mac版)も同じような結果でした。


現時点では、こういった状況であることを意識しつつ使う必要があるようですね。

ちなみに、そういうことがわかっていながら、SysStats Monitorで絵文字を入れるようにしたのは、そもそもiOSユーザをターゲットにしているとともに、環境によって表示に問題が出る場合があったとしても、致命的な問題とはならないと思ったからです。

なお、今回はSysStats MonitorとTwitterを例に説明しましたが、これは特定のアプリやWebサービスに依存する問題ではなく、他のWebサービスやアプリでも起こりうるということを、ご理解ください。

*1:この記事を書いている段階では、まだアップデートの申請中ですので、次のバージョンが出るまでは、まだ絵文字は入りません。

日本語キーボードの変換候補表示方法の変更への対応

iOS5で、日本語キーボードの変換候補表示方法が変わったことに、みなさんすでに気付いていることと思います。

iOS4.xでは、以下のように、カーソルの近くに表示される仕様でした。

iOS5では、以下のように、変換候補の表示領域が固定で確保されるようになったので、画面の一部のボタンなどが隠れてしまうようになりました。

それに対応できるようにするために、iOS5から、キーボードの大きさが変わったことを、アプリで検知するためのNotification(UIKeyboardWillChangeFrameNotification)が新たに追加されました。

それを使って、隠れてしまう部分のサイズや、表示位置を調整する必要があります。
SysStatsMonitorで、その対応を実施中なのですが、その結果、以下のようになる予定です。

具体的なコーディングについては、以下の記事を参考にさせていただきました。

画面いっぱいのUITextViewがキーボードに隠れないようにする « LANCARD.LAB|ランカードコムのスタッフブログ

あと、1点注意すべきことがあります。
UIKeyboardWillChangeFrameNotificationは、iOS5から追加された機能なので、iOS4.xをターゲットとするアプリの場合は、OSのバージョンをチェックして、iOS5.0以降のときだけ、有効になるよう考慮が必要です。(iOS4.xでこのNotificationを使用すると、アプリが異常終了します)

チェックの方法は、前回の記事(iOSのバージョンチェック方法 - The iPhone Development Playground)で説明していますので、必要であれば、参考にしてください。

iOSのバージョンチェック方法

今週は、iPhone 4Sの発売が控えていますが、開発者にとっては、もう1つ重要なポイントがあります。それは、iOSが、5.0にバージョンアップされることです。
SysStats MonitorとSysStats Liteでは、バージョンアップの影響を受ける部分があります。
過去に、2.2.1でビルドしたアプリから、3.0で追加されたAPIを使ってみました - The iPhone Development Playgroundで、メソッドが定義されているかどうかをチェックする方法を紹介しましたが、今回は、実行中のOSのバージョンをチェックするより他に方法がありませんでした。
簡単な処理ですが、そのチェック方法について、メモを兼ねて、書いておこうと思います。

    NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];

    if ([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedAscending) {
        
        // 5.0より前のバージョンと判定されたとき
        NSLog(@"currentSystemVersion(%@) < 5.0", currentSystemVersion);
        
    }
    
    if (([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedSame) ||
        ([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedDescending)) {
        
        // 5.0以降のバージョンと判定されたとき
        NSLog(@"currentSystemVersion(%@) >= 5.0", currentSystemVersion);
        
    }

-[NSString compare:options:]メソッドのoptionsにNSNumericSearchを指定すると、中に含まれている数字を考慮して比較してくれるので、楽ですね。

Facebook Feed Dialogの仕様変更があったようです

SysStats Monitorには、Facebookにデバイスの状態を投稿する機能があります。
それは、Facebookが提供しているFeed Dialogというコンポーネントを使って実現しています。

Feed Dialog

具体的な画面のイメージは、以下の通りです。

本来ならば、画面上部のテキストエリア(Say something about this の下)に、

<>
[Uptime]: 0 day(s), 12:17:38
[Memory(MB)]: free= 17.4, other=329.1, wired= 69.7, active= 53.9, inactive= 32.8
[Battery]: 85% [Process]: 39

という感じの情報が表示され、Facebookに投稿されるはずですが、ここに情報が設定されなくなっていることに気付きました。
調べてみたところ、原因が判明しました。Facebook側の仕様が、いつのまにか変わっていたようです。

以下に、前述のFeed Dialogから、該当箇所を引用します。

このmessageというプロパティが、該当する箇所なのですが、最近、そこに設定されている内容は無視するようになっていたのですね。。

もしも、この機能を使っていただいている方がいらっしゃいましたら、こういった事情があることをご理解いただければと思います。
現在、対応方法を検討中ですので、しばらくお待ちください。

MacOSXで、Mail.appを英語環境で実行する方法

ふだん、日本語環境でMacを使っていても、特定のアプリケーションだけ、英語で実行したいということがあると思います。
システム環境設定→パーソナル→言語とテキストで英語環境にしてしまうと、すべてが英語で実行されてしまうので、現実的ではないですよね。

実は、10.4 Tigerまでは、Finderで、アプリケーションの.appを選択し、ファイル→情報を見るのパネルから、アプリごとの言語設定ができたのですが、10.5 Leopardからはその便利な機能が削除されてしまったようです。

今回、それと同じことを、コマンドラインから実行する方法を思い出したので、メモとして残しておきます。

ちなみに、思い出したのは、以下の記事からです。

Temporarily change system language via AppleScript - Mac OS X Hints

この記事の本文では、全体の言語環境を変更する方法について書かれていたのですが、以下のコメントに、特定のアプリケーションだけに適用する方法が示されています。

Instead of writing into the global domain, you could set the preference only for the specific application, then it will apply to that application only…

eg.
defaults write com.apple.mail AppleLanguages '("jp", "en-US")'

上記は、日本語環境にする例ですが、英語を前に持ってくれば、英語環境で実行することができます。
Mail.appを英語環境で実行したい場合、具体的には、ターミナル(Terminal.app)から、以下のコマンドを実行します。

defaults write com.apple.mail AppleLanguages "(en, ja)"

正しく設定されたかどうかを確認したい場合は、以下のコマンドで、内容を見ることができます。

defaults find AppleLanguages

...

Found 1 keys in domain 'com.apple.mail': {
    AppleLanguages =     (
        en,
        ja
    );
}

...

次回Mail.appを起動したときに、メニューが英語になっていれば、正しく設定されたことになります。

元に戻したい場合は、以下の通り実行し、その設定を削除します。

defaults delete com.apple.mail AppleLanguages

同じ悩みを持っていた方は、よろしければお試しください。

あと、iOSアプリ開発者の方は、すでに気付いているかもしれませんが。。。

NSUserDefaultsを使って、これと同じことを、iOSアプリから実行することができます。
その具体的な方法については、また後日説明したいと思います。

SysStats Monitorの紹介動画がYouTubeに

以前、ドイツのpcwelt.deのビデオで紹介していただきました。 - The iPhone Development Playgroundでお知らせしましたが、YouTubeにも載せていただいたようです。

Nochmals vielen Dank!