Development」カテゴリーアーカイブ

内蔵カメラ使用時の注意点

「iPhone SDKの教科書」の第3部第5章の「パイル」は、内蔵カメラまたは写真アルバムからの画像を合成します。そこで、iPod touch対応とするならばカメラの利用可否を確認しておく必要があります。その方法は書籍で説明した通りです。

ただ、カメラが利用できない場合は、それをユーザ・インターフェースとしても明確に示す必要があったようで、App Storeへの申請ではリジェクトを喰らっちゃいました。そこで、ビューを開いた時にカメラをチェックして、カメラが利用できない場合はカメラ・アイコンを使用不可に設定する(表示がグレイになる)ように変更しました。これで審査を通過。

具体的には、PileViewController.hに以下のアウトレットを追加し、Interface Builderでカメラのボタンに接続します。

IBOutlet UIBarButtonItem *cameraButton;

そして、PileViewController.mのviewDidLoadメソッドの最後に以下のコードを追加します。

cameraButton.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

この変更により、openCameraメソッドやopenPhotoLibraryメソッドでチェックしていたif文自体は省略することができます(あっても実害はないですけど)。

pile-on-ipod-touch

サンプル・コードの改良・発展

「iPhone SDKの教科書」には各サンプル・コードの章末に改良・発展を提案していますが、これがどの程度の作業で実現できるかは分かりにくいかもしれません。なので、各項目の難易度を書いておきます。プログラミング初心者はレベル【A】から取り組むと良いと思います。また、カウンターについては改良・発展案を書いていなかったので、これも補っておきますね。

【A】非プログラミング・レベル〜画像やサウンドの差し替え、レイアウト変更など。
【B】簡易プログラミング・レベル〜ソースコードの変更・追加が必要。
【C】高度プログラミング・レベル〜ソースコードの大幅な変更・追加が必要。

カウンター

【A】ボタン画像や背景画像を差し替えて、異なる雰囲気のカウンターを作ろう。
【B】ボタンをタップした時に音を鳴らし、動作が分かるようにしよう。
【B】10個および100個数える度に音を鳴らし、数えている状況が分かるようにしよう。
【B】複数のカウンターを表示し、異なる数を同時に数えられるようにしよう。
【B】カウンターの数値を記憶し、アプリケーションを再起動した場合にも、前回の数値から数を数えられるようにしよう。

スマッシュ

【A】背景画像とUFOの画像を差し替えて、異なる雰囲気のゲームに仕立てよう。それに合わせて効果音も差し替えよう。
【B】UFOを叩き潰した回数を数えてスコアを表示する機能を追加しよう。UFOを逃した場合は減点することも考えられる。
【B】1分間や3分間などゲームの時間制限を設けてみよう。スコア機能と合わせて、制限時間内の得点を競うことができる。
【C】得点を競うなら、ハイスコアも表示したい。ハイスコアを打ち立てたプレーヤの名前もあれば完璧だ。
【C】UFOが1機だけでなく、2機、3機と出現するようにしてみよう。ボーナス点が稼げる特別なUFOや、叩き潰してはいけない味方の宇宙船も考えられる。

バランス

【A】画像や効果音を差し替えて、まるで違う雰囲気で異なる用途に使えないだろうか?
【B】現在のボールの重みはどれくらいだろうか? もっと軽いボールや、もっと重いボールにしてみよう。
【B】ボールと盤面や空気との摩擦抵抗をプログラム・コードに盛り込んでみよう。
【C】目を閉じていてもボールの動きを感じられるようにできないだろうか?
【C】Z軸の加速度を利用して、ボールを3次元的に動かしてみよう。一人で羽根つきができるかもしれない。

クロック

【A】背景画像や針の画像を入れ替えて、オリジナル・デザインの時計を作ろう。
【B】24時間制の時計や鏡像のように逆回転する時計を作ろう。
【B】1秒ごとに秒針が小刻みに動くのではなく、連続的にスムースに動くようにしよう。
【B】アラームが鳴っている時に、盤面が点滅するなど視覚的な効果を加えよう。
【C】アラームを12時直前に設定した場合、アラーム動作に不都合が生じる場合がある。この原因と解決策を考えよう。

エイジ

【B】年齢を時間単位、分単位、秒単位でも表示してみよう。
【C】任意の日における年齢が表示できるようにしよう。
【C】起点となる日付と日数を設定すると、終了日となる日付を表示できるにしよう。
【B】グレゴリオ歴以外の暦のカレンダーを表示してみよう。
【C】時分秒単位の時間計算機を作ってみよう。

パイル

【B】パイルを多言語対応させ、日本語でも表示されるようにしよう。
【B】合成時のブレンド・モードやアルファ値を選択できるようにしよう。
【B】最初に読み込んだ写真に合わせて、合成画像のサイズが設定されるようにしよう。
【B】撮影時や選択時に写真の一部を抜き出せるようにしよう。これはイメージ・ピッカーのプロパティで設定可能だ。
【B】写真の縦横比が4:3でなくても、正しい比率で写真を合成できるようにしよう。

ofxiPhone

ドタバタで先送りにしていたofxiPhoneをインストールしてみました。メディア・アートのビジュアル系(笑)として、Processingに続くopenFrameworksのiPhone版ですね。生粋のObjective-C派はイヤがるでしょうけど、C++派で手軽にグラフィッカーになりたい人には良いかも。

ofxiphone graphics example

このofxiPhoneはココからダウンロードするだけ。pre released v0.06のiphone:x-code / iphone sdkってとこね。appsのexamplesに3つほどサンプルが入っています。最新版はsvnしてください。

ライブラリ自体はソース・コード提供&相対パス指定なので、フォルダ階層を変えないのが無難。OfxiPhone comprehensive guideは必読ね。

iPhoneシミュレータでオーディオ再生バグ?

なぜかiPhoneシミュレータで音が鳴らなくなった。てか音を鳴らそうとするとシミュレータ上のアプリケーションがフリーズしたような状態になる。これ、AVAudioPlayerに限っての話で、System Sound ServiceでもOpenALでもAudio Queueでも、ちゃんと音が鳴る。確か以前はちゃんと鳴ってたんだけどな〜と思いつつ、コンソールを開くとエラー・メッセージが出ている。

avaudioplayer-error

それじゃってことで、LiveType.componentを/Library/QuickTime/から外して、再実行。またしても同じ状態で、今度はMotion.componetがエラってる。こやつも外すと、ようやく音が出ました。これを解明するのに小1時間無駄な時間を過ごしちゃった次第。

でも、どちらもAppleの製品じゃん! そう言えばと思い出して、後回しにしていた「プロアプリケーションアップデート 2008-05」をインストールしてみた。だけど、新しいコンポーネントがインストールされることはなかった。

ってことは、iPhone OSを開発している連中は、Final Cut Studio系を使っていないのか? 使っていなくてもいいけど、自社製品との整合性くらいちゃんと確かめてよね。

iPhone App Docs

GClueさん(?)と言うか会津大学の学生さんたちの勉強会aicara labsがiPhone向け勉強会のテキストを「iPhone App Docs」にて公開されています。

iphone-app-docs

現時点では7種類のアプリケーションの作成手順とソースコード等がありますね。スクリーン・キャプチャを中心とした作成手順は労作です。初心者はこの手順が分からずに困惑しちゃいますから。ソースコードは簡単なコメントしかないので、それは実際の勉強会で話されているんでしょうね。

iSCSynthに大期待!

iPhone SDKではオーディオへのアクセス方法が複数ある上に、凝ったことをしようとすると大変です。MSPやSuperColliderなら10分でできることが丸1日かかっちゃう。オーディオ入出力のAPIはあっても、オーディオ・シンセシスのためのAPIは皆無だからね。サイン波を鳴らすだけでも、自分で計算しなければならないワケ。OscillatorEchochopsは地道に自前でシンセシス(というレベルではない)してるんだけど、その路線を続けるほど酔狂じゃない。

そこで既存のオーディオ・ライブラリを利用したいわけだけど、これまた適当なものがない。これまでの例で言えば、PocketGuitarが採用したSTK (Synthesis Toolkit)はC++ベースなので面倒ってか、言語として好きではない。RjDjが利用しているPd (Pure Data)もイマイチなのは、MSPからすれば貧弱過ぎるし、以前にThe Breadboard BandでiPod Linuxで使ってヒドイ目にあったから(笑)。NeXT時代から使われていたMusicKitはObjective-Cベースで一番素性が良いけど、近年アップデートされていないのが不安を誘う。

そんなこんなで思いあぐねていたところ、SuperCollider (scsynth)のiPhoneへの移植情報がSC-MLに出ていました。SuperColliderはシンセシスの機能の豊富さや記述能力の高さでは当代ピカイチだから、これは期待せざるを得ないですね。これで他のライブラリが吹き飛んでしまいました。現状ではパフォーマンスの改善が必要だそうですが、今すぐにでも使ってみたいところ。Axel Balleyさんが取り組まれていて、協力者募集中とか。

SuperColliderも主要部分はC++で記述されていて、オーディオ入出力はCore Audioに対応しているので、iPhoneとの親和性が良いハズ。だから、随分以前にSCマニアのtn8さんに誰か移植していないの?と尋ねたんだけど、その時はそんな動きはナイとのことで悲しい思いをしていました。でも、もう大丈夫(?)です。

11/19-21はIAMASでCocoa講座

11/19から11/21までの3日間、IAMASでCocoaの開発セミナーがあるそうです。会場はIAMASですが、講師はAppleの方と聞いているので、ここは山ほど質問を持って臨みたいところ(笑)。各日とも内容は同じで、11/19は既に満員になっているようです。お申し込みはお早めに〜。

“Cocoa”で始めるObject指向プログラミング

日時:2009年11月19日(水)、20日(木)、21日(金)14:00~17:00
会場:IAMAS 大学院校舎3階コンピュータ室2(C2) 【地図】

【セミナー詳細・受講申込】

11/24は銀座でiPhone大作戦

おかげさまで毎回超満員御礼のレクチャー&プレゼン・シリーズ「IAMASイキマス、DSPでBANG! 2008」、全3回無事に終了したにも関わらず、さらなる番外編を行なわせていただきます。これまでチャンスを伺いながらもNDAの壁に拒まれていたDSPプロジェクト〜iPhoneスタディ・グループの登場、その名も「iPhone大作戦」です。本年4月より、ベータ版のSDKに苦労しながらも、IAMASでiPhoneに取り組んで来た経緯をご紹介し、App Store、展覧会、コンサートと、その成果が多方面に現れつつある現状をご報告します。iPhoneアプリケーション開発における小ネタや大技を含めて、その内情と悲喜交々をお届けできればと思っています。お誘い合わせの上、ご来場いただきますよう、ご案内申し上げます。

IAMASイキマス、DSPでBANG! 2008 【番外編】
iPhone大作戦

日時:2008年11月24日(月・祝)16:00~18:00
出演:赤松正行、平林真実、和田純平、大田祥子、宮川英利
会場:アップルストア銀座店 3F

入場料無料 事前予約不要

プレゼンテーションの内容はコチラをご覧ください。

スタンフォード大学の開発教材

スタンフォード大学がClass CS193P: iPhone Application Programmingとして、iPhoneアプリケーションの開発講座の教材を公開しています。全20回の予定らしく、現時点では第12回までが公開されています。平易な英文で図版も多く、ソースコードも公開されていますから、これはマストハブですね。

この講座は9月下旬に始まったらしく(と言うことは、IAMASのiPhone勉強会のほうが5ヵ月ほど早い)、最初の頃はNDAの回避方法についても書かれています。そして、NDAが緩和されたので、一挙に一般公開ってことになったようです。他にも、いろいろと有益な開発情報があちこちで公開されていますので、NDA緩和の恩恵は大きいですね。大感謝!ですが、7月だったらもっと良かったのにね。

iPhone開発資料の日本語化

今日のiPhone Tech Talk World Tour – Japanに合わせたんだと思いますが、iPhoneのアプリケーション開発のドキュメントが日本語化されて公開されています。現時点では一部の翻訳に留まっているものの、斜め読みでも結構時間がかかりそうなほどの分量で、充実しています。

日本語ドキュメント(要ログイン)

Macに比べて、iPhoneは新しいプラットフォームということもあってか、もともと開発資料は充実していましたが、これが日本語化されたとなるとグッと敷居が低くなりますね。ただし、英語資料もそうですが、古い内容が残っていたり、より簡単(適切)な新しい方法があったりするので、そのあたりは要注意です。