[PR]
2025年01月31日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
iPhone SDK 3.x で iPhone OS 2.x 向けアプリケーションを開発する
2009年10月11日
アプリケーションの動作対象OSを2.1(第2世代iPod touch発売開始時のプレインストールOSでした)など旧バージョンにも拡大したい場合、以下の方法で可能になります。まず前提として、iPhone SDK 3.xのインストール時に出るチェックボックスで旧バージョンのOS用SDKにもチェックを入れておきます。もしこれをしていない場合には、もう一度インストールし直しチェックを入れておきます。インストールは上書きで問題ありません。
これでXcode左上のリストにSDKの選択肢が出せるようになります。
ここで注意すべきなのは、たとえ2.xをターゲットにしていようと、新規ファイルは3.x前提のテンプレートから作成される点です。「iPhone OS 3.0 におけるセルの変更点」で書いた通り、セルの初期化メソッドはinitWithFrame:reuseIdentifier:からinitWithStyle:reuseIdentifier:へ変更になっているため、新規ファイルでUITableViewCellのサブクラスを作った場合、初期化メソッドに手直しをしなければなりません。また、UITableViewControllerのサブクラスでも、tableView:cellForRowAtIndexPath:メソッドの内容を修正する必要があります。
また、OpenGL ES applicationのテンプレートからプロジェクトを作成した場合には、テンプレートがOpen GL ES 2.0のシェーダーに対応するものに変わっているので、この場合もかなり大掛かりな修正が必要になります。SDK 2.xの頃から使っている人でないと、どこを変更すれば良いか分かりにくいと思いますので、iPhone SDK 3.x から始めた人は素直に(?)3.x向けで開発したほうが良いかもしれません。
- Xcodeでプロジェクトを開き、左のリストで一番上のプロジェクトファイルをクリック、さらに情報アイコンをクリックして、ビルドタブを開きます。
- コード署名(Code signing)セクションの下にある、Deploymentセクション最上段のiPhone OS Deployment Targetの値をクリックします。
- インストールされているSDKに対応したOSが表示されるので、目的のOSを選択します。
これでXcode左上のリストにSDKの選択肢が出せるようになります。
ここで注意すべきなのは、たとえ2.xをターゲットにしていようと、新規ファイルは3.x前提のテンプレートから作成される点です。「iPhone OS 3.0 におけるセルの変更点」で書いた通り、セルの初期化メソッドはinitWithFrame:reuseIdentifier:からinitWithStyle:reuseIdentifier:へ変更になっているため、新規ファイルでUITableViewCellのサブクラスを作った場合、初期化メソッドに手直しをしなければなりません。また、UITableViewControllerのサブクラスでも、tableView:cellForRowAtIndexPath:メソッドの内容を修正する必要があります。
また、OpenGL ES applicationのテンプレートからプロジェクトを作成した場合には、テンプレートがOpen GL ES 2.0のシェーダーに対応するものに変わっているので、この場合もかなり大掛かりな修正が必要になります。SDK 2.xの頃から使っている人でないと、どこを変更すれば良いか分かりにくいと思いますので、iPhone SDK 3.x から始めた人は素直に(?)3.x向けで開発したほうが良いかもしれません。
PR
iPhone SDK 3.1 の新規作成
2009年10月11日
Xcodeのバージョンアップに伴い新規ファイルの区分がまた少し変更になっているので、自分がよく使いそうな範囲のみですがまとめておきます。
NSObject、UITableViewCell、UIViewのサブクラスのヘッダファイルとメソッドファイル作る場合
iPhone OS > Cocoa Touch Class > Objective-C classを選択
UIViewController、UITableViewControllerのサブクラスのヘッダファイルとメソッドファイル作る場合
iPhone OS > Cocoa Touch Class > UIViewController subclassを選択
ヘッダファイル等と同じ名前のXIBファイルを作るオプションも追加されている
自分でビューのXIBファイルだけ作る場合
iPhone OS > User Interface > View XIBを選択
ローカライズ用のstringsファイルを作成する場合
Other(左のリスト下から2番目にある) > Strings File
追加したファイルの情報を見て、一般のローカリゼーションを追加...から言語選択を行うのも忘れずに
NSObject、UITableViewCell、UIViewのサブクラスのヘッダファイルとメソッドファイル作る場合
iPhone OS > Cocoa Touch Class > Objective-C classを選択
UIViewController、UITableViewControllerのサブクラスのヘッダファイルとメソッドファイル作る場合
iPhone OS > Cocoa Touch Class > UIViewController subclassを選択
ヘッダファイル等と同じ名前のXIBファイルを作るオプションも追加されている
自分でビューのXIBファイルだけ作る場合
iPhone OS > User Interface > View XIBを選択
ローカライズ用のstringsファイルを作成する場合
Other(左のリスト下から2番目にある) > Strings File
追加したファイルの情報を見て、一般のローカリゼーションを追加...から言語選択を行うのも忘れずに
開発中のゲームについて
2009年10月09日
現在開発中のゲームが完成に近づいて来ました。内容はローグのようなランダム生成ダンジョン探索ゲームです。序盤を遊べるライト版(無料)と有料版の同時リリース予定で開発を進めています。
iPhoneアプリケーション開発でautoreleaseが非推奨の理由
2009年09月22日
アップル社公式の開発ガイドなどでは、iPhone OSをターゲットとしたアプリケーションを開発する場合、autoreleaseはなるべく避けるようにと書いてあります。この記事ではその理由を掘り下げてみようと思います。
この理由を明かす前に、まず推奨となっているretain countでの管理と、autoreleaseでの管理の違いを説明します。retain countで管理されているオブジェクトは、それをメモリー上に残しておきたい場合にretain countを0より大きい値になるようにしておきます。そのオブジェクトがallocやretainされるとカウントが増加し、releaseされればカウントが減少します。カウントが0になった状態でrun loop(ユーザーからの入力などのイベント処理)に入ると、そのオブジェクトはメモリー上から消滅します。この方法だと、オブジェクトは必要な時にメモリーを確保して、不要になると早いうちに解放されます。解放されたメモリーは別のオブジェクトの保持等にまわす事ができるので、無駄が少なくなります。
では非推奨のautoreleaseではどうなっているかというと、NSAutoreleasePoolという仕掛けがあり、この中にオブジェクトが追加されるようになっています。このNSAutoreleasePoolもオブジェクトで、これは前述のretain countで管理されています。この中に入っているオブジェクトは、それを入れている器であるNSAutoreleasePoolが解放されたときに、同時に解放されるようになっています。Xcodeでテンプレートからアプリケーションのプロジェクトを作った場合、このNSAutoreleasePoolは1つだけ自動で作られるようになっていますが、問題はこのNSAutoreleasePoolが解放されるタイミングが、「アプリケーションを終了したとき」になることです。従って、後述する対策を行わずにいると、アプリケーションで作られたautorelease付きのオブジェクトや、クラスメソッドと呼ばれる+印で始まるメソッドから返ってきたオブジェクトは全てこのNSAutoreleasePoolに入れられてしまい、アプリケーションを終了するまで解放されずに残ってしまうのです。これらによってメモリーが消費されてしまうと、アプリケーションが使えるメモリー領域はどんどん狭くなってしまいます。Mac OS Xで動いているマシンであればメモリーの量もそれなりにあるのであまり問題になりませんが、iPhone OSではそこまでメモリーを贅沢に使えるわけでもないので、アプリケーションを終了するまで誰も使えなくなるゴミ領域はなるべく作らない方が良いことになります。それこそがautorelease非推奨の理由なのです。
とはいえ、クラスメソッドには他で代替できないものや、代替可能でも長いコードを書かなければならない場合等もあります。そのためにautoreleaseオブジェクトの解放タイミングを早める対策方法も用意されています。実はNSAutoreleasePoolは何個も作る事ができ、メソッドの始めにNSAutoreleasePoolオブジェクトを作成すると、そのメソッド内で作られたautoreleaseオブジェクトは全てそのNSAutoreleasePoolオブジェクトの管理下に置かれます。そのため、メソッドから抜ける前にそれを解放すると、管理下にあるautoreleaseオブジェクトも同時に解放されるようになるのです。つまり、
このように書いている場合と大差ないものと思われます。大量に一時オブジェクトを作るようなメソッドでこのような対策を行っておけば、メモリーのゴミ領域を削減することができるわけです。
2009年10月2日追記
一般的なアプリケーションではイベントループの開始時点で自動的にプールが作成される仕組みもあるため、上に書いてあるように、自分でプールを追加しないとアプリケーション終了までオブジェクトが消滅しないということはありませんでした。ただし意図的に別スレッドを作った場合などはオブジェクトが残ることがあるので、このような場合は明示的にプールを作成、解放をしたほうが良いでしょう。
この理由を明かす前に、まず推奨となっているretain countでの管理と、autoreleaseでの管理の違いを説明します。retain countで管理されているオブジェクトは、それをメモリー上に残しておきたい場合にretain countを0より大きい値になるようにしておきます。そのオブジェクトがallocやretainされるとカウントが増加し、releaseされればカウントが減少します。カウントが0になった状態でrun loop(ユーザーからの入力などのイベント処理)に入ると、そのオブジェクトはメモリー上から消滅します。この方法だと、オブジェクトは必要な時にメモリーを確保して、不要になると早いうちに解放されます。解放されたメモリーは別のオブジェクトの保持等にまわす事ができるので、無駄が少なくなります。
では非推奨のautoreleaseではどうなっているかというと、NSAutoreleasePoolという仕掛けがあり、この中にオブジェクトが追加されるようになっています。このNSAutoreleasePoolもオブジェクトで、これは前述のretain countで管理されています。この中に入っているオブジェクトは、それを入れている器であるNSAutoreleasePoolが解放されたときに、同時に解放されるようになっています。Xcodeでテンプレートからアプリケーションのプロジェクトを作った場合、このNSAutoreleasePoolは1つだけ自動で作られるようになっていますが、問題はこのNSAutoreleasePoolが解放されるタイミングが、「アプリケーションを終了したとき」になることです。従って、後述する対策を行わずにいると、アプリケーションで作られたautorelease付きのオブジェクトや、クラスメソッドと呼ばれる+印で始まるメソッドから返ってきたオブジェクトは全てこのNSAutoreleasePoolに入れられてしまい、アプリケーションを終了するまで解放されずに残ってしまうのです。これらによってメモリーが消費されてしまうと、アプリケーションが使えるメモリー領域はどんどん狭くなってしまいます。Mac OS Xで動いているマシンであればメモリーの量もそれなりにあるのであまり問題になりませんが、iPhone OSではそこまでメモリーを贅沢に使えるわけでもないので、アプリケーションを終了するまで誰も使えなくなるゴミ領域はなるべく作らない方が良いことになります。それこそがautorelease非推奨の理由なのです。
とはいえ、クラスメソッドには他で代替できないものや、代替可能でも長いコードを書かなければならない場合等もあります。そのためにautoreleaseオブジェクトの解放タイミングを早める対策方法も用意されています。実はNSAutoreleasePoolは何個も作る事ができ、メソッドの始めにNSAutoreleasePoolオブジェクトを作成すると、そのメソッド内で作られたautoreleaseオブジェクトは全てそのNSAutoreleasePoolオブジェクトの管理下に置かれます。そのため、メソッドから抜ける前にそれを解放すると、管理下にあるautoreleaseオブジェクトも同時に解放されるようになるのです。つまり、
- (void)myMethod {
NSAutoreleasePool *myAutoreleasePool = [[NSAutoreleasePool alloc] init];
NSString *string = [NSString stringWithString:@"myAutoreleasePool管理オブジェクト"];
NSLog(string);
[myAutoreleasePool release];
}
- (void)myMethod {
NSString *string = [[NSString alloc] initWithString:@"retain count管理オブジェクト"];
NSLog(string);
[string release];
}
このように書いている場合と大差ないものと思われます。大量に一時オブジェクトを作るようなメソッドでこのような対策を行っておけば、メモリーのゴミ領域を削減することができるわけです。
2009年10月2日追記
一般的なアプリケーションではイベントループの開始時点で自動的にプールが作成される仕組みもあるため、上に書いてあるように、自分でプールを追加しないとアプリケーション終了までオブジェクトが消滅しないということはありませんでした。ただし意図的に別スレッドを作った場合などはオブジェクトが残ることがあるので、このような場合は明示的にプールを作成、解放をしたほうが良いでしょう。
アップル社のイベントで分かった事
2009年09月10日
今回のイベントで判明したことのうち、iPhoneデベロッパに関係しそうなことは
1.iPhone OS 3.1本日より提供(初掲載時、提供が近いと書きましたが既に提供されています)
第3世代iPod touchは始めからOS 3.1搭載になる。
第2世代以前でOS 3.0 にアップデートしているユーザーへは無料で提供される。
2.iTunes 9本日より提供
アプリケーションの管理に変更あり。OS 3.1ではホーム画面編集を母艦で行える。
3.第3世代iPod touchは2グレードへ
8GB版と32および64GB版とでは機能に差がある。
音声コントロールやOpenGL ES2.0対応などは32および64GB版のみ対応。
噂になっていたカメラ搭載はされず。コンパスや無線のn対応もなし。
BluetoothはiPhone 3GS同等へ。32および64GB版でも本体にはマイクなし。
8GB版にマイク付きイヤホンを刺した場合などにマイクが使えるのかは不明。
(ボイスレコーダーは8GB版でも使える?)
こんなところでしょうか。カメラなしと64GB版投入、2グレード制導入については予想が外れましたね。機能面では容量以外はカメラ、コンパス、内蔵マイクなどでiPhone 3GSにアドバンテージありというところでしょうか。
2009年9月10日14:35追記
アップル社が今回発表した機種群をiPod touch 2G 2009と呼んでいるらしいという情報があるようです。それをもとに考えると8GB版はこれまでの第2世代iPod touchにOS 3.1を搭載したもので、32および64GB版はCPUなどをiPhoneの3G→3GSのようにパワーアップしたものと、シンプルに説明できるなと思いつきました。
32および64GB版での最大+50%の高速化、の比較対象は当然iPhone 3Gではなく、それよりちょっと高速なこれまでの第2世代iPod touchになるものと考えると、CPU速度はiPhone 3GSと同等程度のようです。第2世代iPod touchの時のようにiPhone 3GSより高速なCPUとはいかないかもしれません。
(初掲載時高速化の割合を間違えていました。iPhone 3GSとの速度比較予想を含め修正しています。CPUの動作クロック、システムバスクロックはiPhone 3GSと変わらないとの情報も出てきています。)
ちなみにこれら3機種を比較すると、8GB→32GBでは価格はおよそ1.5倍ですが、2倍速のCPUと4倍の容量が手に入ります。それでバッテリーの持ちは変わりません。付加機能も64GBと変わりません。でも32GB→64GBでは価格はおよそ1.3倍ですが容量が2倍になるだけです。このように考えると、1台目として買うなら32GBモデルがおすすめなのかなと思います。第1世代iPod touchの32GBモデルが登場時におよそ6万円していたことを考えると、ずいぶんと安くなったものだなと思います。
1.iPhone OS 3.1本日より提供(初掲載時、提供が近いと書きましたが既に提供されています)
第3世代iPod touchは始めからOS 3.1搭載になる。
第2世代以前でOS 3.0 にアップデートしているユーザーへは無料で提供される。
2.iTunes 9本日より提供
アプリケーションの管理に変更あり。OS 3.1ではホーム画面編集を母艦で行える。
3.第3世代iPod touchは2グレードへ
8GB版と32および64GB版とでは機能に差がある。
音声コントロールやOpenGL ES2.0対応などは32および64GB版のみ対応。
噂になっていたカメラ搭載はされず。コンパスや無線のn対応もなし。
BluetoothはiPhone 3GS同等へ。32および64GB版でも本体にはマイクなし。
8GB版にマイク付きイヤホンを刺した場合などにマイクが使えるのかは不明。
(ボイスレコーダーは8GB版でも使える?)
こんなところでしょうか。カメラなしと64GB版投入、2グレード制導入については予想が外れましたね。機能面では容量以外はカメラ、コンパス、内蔵マイクなどでiPhone 3GSにアドバンテージありというところでしょうか。
2009年9月10日14:35追記
アップル社が今回発表した機種群をiPod touch 2G 2009と呼んでいるらしいという情報があるようです。それをもとに考えると8GB版はこれまでの第2世代iPod touchにOS 3.1を搭載したもので、32および64GB版はCPUなどをiPhoneの3G→3GSのようにパワーアップしたものと、シンプルに説明できるなと思いつきました。
32および64GB版での最大+50%の高速化、の比較対象は当然iPhone 3Gではなく、それよりちょっと高速なこれまでの第2世代iPod touchになるものと考えると、CPU速度はiPhone 3GSと同等程度のようです。第2世代iPod touchの時のようにiPhone 3GSより高速なCPUとはいかないかもしれません。
(初掲載時高速化の割合を間違えていました。iPhone 3GSとの速度比較予想を含め修正しています。CPUの動作クロック、システムバスクロックはiPhone 3GSと変わらないとの情報も出てきています。)
ちなみにこれら3機種を比較すると、8GB→32GBでは価格はおよそ1.5倍ですが、2倍速のCPUと4倍の容量が手に入ります。それでバッテリーの持ちは変わりません。付加機能も64GBと変わりません。でも32GB→64GBでは価格はおよそ1.3倍ですが容量が2倍になるだけです。このように考えると、1台目として買うなら32GBモデルがおすすめなのかなと思います。第1世代iPod touchの32GBモデルが登場時におよそ6万円していたことを考えると、ずいぶんと安くなったものだなと思います。
第3世代iPod touch、そろそろ発表?
2009年09月07日
久しぶりに更新します。更新をしていなかったのは、またこっそりとアプリ開発を進めているからです。せっかくOpenGLも1.1はそれなりに使えるんだし、ゲームでも作ってみるかなどと軽い気持ちでスタートしましたが、ゲームの場合、これまでに作ったソフト後比較すると動作検証に膨大な労力がかかりますね。まあ、かなりランダム要素の強い題材を選んでしまったのが災いしているのかもしれません。まだアップロードできるようになるまで時間がかかりそうなのと、今後も仕様がいろいろ変更になる可能性も大きいため、詳細はまだ秘密にしておきます。
さて、近年この時期には毎年行われているiPod touchの新機種発表ですが、今年も有るという噂が濃厚です。例年通りなら日本時間で9月9日の発表でしょうか。ネット上で飛び交う噂ではカメラの搭載や64GB版が出るなど、いろいろなことが言われています。ただ、個人的には現在のiPhone 3GSを超えるスペックを一度に多数搭載するとは考えにくく、今回それがあるとしてもCPUがちょっと早いですよ程度じゃないかと思っています。カメラの搭載やブルートゥースはiPhone 3GSと同等程度の機能を搭載するとは思います。開発者向けのガイドラインの中で、カメラの有無はiPhoneかiPod touchかを判別して決定するのではなく実際に機能が使えるかで判断するようにとされていたことから、将来iPod touchにもカメラを搭載しようと思っていた事は間違いないと思います。また、某メーカーの第3世代iPod touch用と思われるケース画像の背面の上部中央付近に穴が開いていたなどという情報もあるので、この辺りについてはほぼ確実と思われます。64GB版や無線のn対応は、iPhone系列でも同等機能版の発表が同時にあるならまだ可能性はありますが、それが今の時期に発表可能なら6月の時点でさっさと出していそうな気がします。64GB版は今回は見送りで早くても来年2月頃、無線のn対応は先にiPhone系列で搭載するまでは非搭載になるというのが私の勝手な予想です。
2009年9月9日追記:
アップル社の音楽関係のイベントは日本時間で10日の午前2時から行われるそうです。
さて、近年この時期には毎年行われているiPod touchの新機種発表ですが、今年も有るという噂が濃厚です。例年通りなら日本時間で9月9日の発表でしょうか。ネット上で飛び交う噂ではカメラの搭載や64GB版が出るなど、いろいろなことが言われています。ただ、個人的には現在のiPhone 3GSを超えるスペックを一度に多数搭載するとは考えにくく、今回それがあるとしてもCPUがちょっと早いですよ程度じゃないかと思っています。カメラの搭載やブルートゥースはiPhone 3GSと同等程度の機能を搭載するとは思います。開発者向けのガイドラインの中で、カメラの有無はiPhoneかiPod touchかを判別して決定するのではなく実際に機能が使えるかで判断するようにとされていたことから、将来iPod touchにもカメラを搭載しようと思っていた事は間違いないと思います。また、某メーカーの第3世代iPod touch用と思われるケース画像の背面の上部中央付近に穴が開いていたなどという情報もあるので、この辺りについてはほぼ確実と思われます。64GB版や無線のn対応は、iPhone系列でも同等機能版の発表が同時にあるならまだ可能性はありますが、それが今の時期に発表可能なら6月の時点でさっさと出していそうな気がします。64GB版は今回は見送りで早くても来年2月頃、無線のn対応は先にiPhone系列で搭載するまでは非搭載になるというのが私の勝手な予想です。
2009年9月9日追記:
アップル社の音楽関係のイベントは日本時間で10日の午前2時から行われるそうです。
迷子のEasyRDS
2009年07月17日
ようやくEasyRDSがiTunes Storeにてリリース…なのですが、何故かリリース日が7月12日になっています。何故本日からiTunes Storeに並んだソフトがそんな日付のリリースになるのか不思議なものです。それで日付順のリストで7月12日の部分に掲載されていればまだ納得もできるのですが、そのリストでいくら探しても出てこないという何とも素晴らしい状態。どういう仕掛けなのか全く訳がわかりません。一応iTunes Connectで再度日付を入力してみましたが、反映されるかなぁ…。下のリンクからでも現在の状態が見られるので現象を確認してみたい方はどうぞ。
まず、iTunesで表示されるアプリのページではリリース日が7月12日になっているのが確認できると思います。上のエンターテインメントをクリックし、リリース日順で並んでいるリストを見てみてください。ソフトの名前(Eで始まります)とリリース日(7月12日のはずですよね)からすると、現状では9ページ目で表示されなければならないはずなのですが、見当たりません。そのまま送っていくと11ページで7月11日にリリースされたソフトが表示されてしまい、そこまでのどこにも私のソフトが無いのがお分かりいただけるのではないでしょうか。
iTunes Store EasyRDSのページへ
おまけ:
ついでなので題名順でも探してみました。該当するであろうページは81ページ目ですが、やはり見つかりませんでした。
2008.07.17 19:40 追記
朝方再度iTunes Storeを見てみたところ、日付順などのリストに表示されるようになっていました。EasyRDSのリリースでは試しにPricingのAvailability Dateを2009年7月17日に設定してありました。この設定、リリース日はアプリの審査通過日から変更されず、単にその日までiTunes Storeで表示されない(隠した状態にする)だけの役割しかないみたいです。少なくとも私のアプリではそのような動作しかしていません。iTunes Storeの利用者はAvailability Dateまでそのアプリの存在を知らないのだし、リリース日はAvailability Dateにした方が現実的に感じるのですが…うーむ…
まず、iTunesで表示されるアプリのページではリリース日が7月12日になっているのが確認できると思います。上のエンターテインメントをクリックし、リリース日順で並んでいるリストを見てみてください。ソフトの名前(Eで始まります)とリリース日(7月12日のはずですよね)からすると、現状では9ページ目で表示されなければならないはずなのですが、見当たりません。そのまま送っていくと11ページで7月11日にリリースされたソフトが表示されてしまい、そこまでのどこにも私のソフトが無いのがお分かりいただけるのではないでしょうか。
iTunes Store EasyRDSのページへ
おまけ:
ついでなので題名順でも探してみました。該当するであろうページは81ページ目ですが、やはり見つかりませんでした。
2008.07.17 19:40 追記
朝方再度iTunes Storeを見てみたところ、日付順などのリストに表示されるようになっていました。EasyRDSのリリースでは試しにPricingのAvailability Dateを2009年7月17日に設定してありました。この設定、リリース日はアプリの審査通過日から変更されず、単にその日までiTunes Storeで表示されない(隠した状態にする)だけの役割しかないみたいです。少なくとも私のアプリではそのような動作しかしていません。iTunes Storeの利用者はAvailability Dateまでそのアプリの存在を知らないのだし、リリース日はAvailability Dateにした方が現実的に感じるのですが…うーむ…
EasyRDS審査通過しました
2009年07月13日
ホームページでこっそりと情報公開中だったEasyRDSですが、アップル社の審査を無事通過しました。ストアでの販売開始は今週末を予定しています。このソフト、やれることはいたってシンプルです。タッチパネルで絵や文字を書き、それをランダムドットステレオグラム(以下RDSと省略)にします。シンプル操作が信条のため、使えるペンは出っ張る、引っ込む、そのまま(消しゴム兼任)の3つに絞っています。作ったRDSや元の手書き画像はただのPNG形式のイメージなので、そのままメールに添付したり、写真アルバムに取り込んで母艦側へ転送したりできるようになってます。
興味のある方はEasyRDS公式ページに実際に作った画像も用意してあるので、立体視に挑戦してみてください。RDSを良くご存知の方に補足しておきますと、凹凸は平行法で見た場合を基準にしています。交差法の場合は凹凸が反転しますので、公式の画像だと文字が引っ込んで見えます。
興味のある方はEasyRDS公式ページに実際に作った画像も用意してあるので、立体視に挑戦してみてください。RDSを良くご存知の方に補足しておきますと、凹凸は平行法で見た場合を基準にしています。交差法の場合は凹凸が反転しますので、公式の画像だと文字が引っ込んで見えます。