Home

iPhoneアプリ開発ブログ

syntax error at ‘OTHER’ token

タイトルのエラーが発生しました。どうやら、(Webからコピペしてきたので)コード中に全角スペースが含まれていたことが原因だったようです。

こういうことはわりとありがちなので、ソースコードを書くエディタでは全角スペースを可視状態にする主義なのですが、Xcodeにはその設定がないようです。国産ツールではないので仕方ないですかね(それでもタブくらいは可視化設定できてもよい気がしますが)。

関連する投稿

アプリ起動時にスプラッシュムービーを表示するには

アプリ起動時にロゴアニメーション等のスプラッシュムービーを再生する場合には、applicationDidFinishLaunchingの中でムービーの再生を開始し、再生終了時のNotificationによって初期画面を表示するのがよいようです。

- (void)splashMoviePlayBackDidFinish:(NSNotification *)notification
{
  // スプラッシュムービーの再生が終わったら初期画面を表示
  [[NSNotificationCenter defaultCenter] removeObserver:self];
  [window addSubview:[navigationController view]];
}
 
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
  // 省略
 
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(splashMoviePlayBackDidFinish:)
                                               name:MPMoviePlayerPlaybackDidFinishNotification
                                             object:(MPMoviePlayerControllerインスタンス、またはnil)];
 
  // ここで動画を再生                                                                                                
}

ちなみに、Default.pngの代わりに動画またはアニメーションGIFを表示することは不可能なようです。

関連する投稿

iPhoneユーザーの年齢層(とおぼしきもの)

iPhoneの年齢層 « iPhone - Develop

正確な数字ではないとは言え、45~54才が50%というのはちょっと驚きです。

一方、アメリカの調査によれば、

ユーザーを年齢別に見ると,25歳~34歳の層が33.0%と最も多く,35歳~44歳が19.9%でこれに続いている。また,55歳~64歳のユーザーが14.4%,65歳以上のユーザーが4.0%

こちらは違和感なく受け入れられる数字です。

また、少し違う話になりますが「iPod / iPodmini」 に関するアンケート」によれば、(HDDオーディオプレイヤーという製品カテゴリにおいて)“年齢層が上がるほどアップル使用者の割合が高まっていく傾向が見られた”とのことです。

おそらく、iPhoneという製品は日本においては「携帯電話」というよりは「Apple製品」として売れているのでしょう。国内ユーザー向けのiPhoneアプリの企画にあたっては、「Appleファンにウケる」ということを一つのポイントとしてみるとよいかもしれません。

関連する投稿

.wavファイルをまとめてIMA4圧縮の.cafファイルに変換

> find . -name '*.wav' -exec /usr/bin/afconvert -f caff -d ima4 {} \;
危なく無駄にQuickTime proを買ってしまうところでした。

ついでに、サンプルコードのoalTouchに入っている音声ファイルは16bit・整数・リトルエンディアン/モノラル/22.05kHzとなっていますが、これと同じ形式のファイルを作るには、

> /usr/bin/afconvert -f wav -d LEI16@22050 -c 1 [input_file]
こんな感じですね。これが効果音として最適な形式なのかどうかはわかりませんが、少なくとも、複数の音声を同時に再生するときにはサンプリングレートを44.1kHzではなく22.05kHzにした方がよいとドキュメントにはあります。

iPhoneアプリを作っている人はUnixに慣れた人ばかりではないでしょうから、afconvertコマンドのGUIフロントエンドを作れば少なからず需要がありそうです。

関連する投稿

AppStoreでのiPhoneアプリのプライシング(値付け)について

誰を相手に商売するか:AppStoreでのiPhoneアプリのプライシング(値付け)について。 : iPhone AppBank

On App Store pricing - Instapaper Blog(原文)

無料お試し版を提供しよう。誰かに$2以上するiPhoneアプリをただ闇雲に買ってくださいとお願いすることはタフな話だ。糞アプリと呼ばれないような無料版を用意しよう、有料版 にあるような素晴らしい特徴や有料版を際だたせるような内容を盛り込んでおいてね、それで無料版を使う人にはこのアプリには有料版がある(そして、ぜひ購入してください)ということを知らせよう。

今、業務ではなく個人的に作っているアプリがほぼ完成し、値付けを検討しています。自分でいうのもなんですが、機能的にもデザイン的にも競合アプリより優れたものになっていると自負しています。にも関わらず、後発であるという劣等感(?)から、実は競合アプリよりも安い価格設定に心が傾いていました。

しかし上記を読んで、逆の考えに至りました。競合に勝っているとわかっているのであれば、比較ができる状況を整えた上で、勝っている分を価格に上乗せしてもよいのではないかと。「比較ができる状況」というのは、もちろん一つは無料のお試し版の提供であり、さらに徹底的にやるのであれば、競合アプリ(お試し版なし)のプレイ動画を比較検討用に勝手に作成してしまうという方法なども考えられます。

AppStoreに限らず、価格競争は基本的には最後の手段です。そのことを思い出させてくれたという点で非常にありがたい情報でした。

とはいえ、利用者からすれば価格が安いに越したことはないわけで、その意志が様々な形で制作者に伝わってくることもあるのでしょう。それによって心が揺らいだときのために、以下のような励ましの言葉もありました。

安売りだ安売りだとemail, blogの投稿, AppStoreでのレビュー, Twitterのステータス、コメント欄から価格についてのコメントがやってくることだろう(そうでなければ設定価格が安すぎるだけだ。)。そういうのは 無視すること。やつらに迎合したって、そいつらはブーブー豚のように、それこそ無料になるまで文句を垂れ続けるんだよ。彼らを満足することなどできない。 そうする必要などない。世の中には適正価格に納得してお金を投下してくれる人はたくさんいる、しかしこういった素敵なブログ読者や知性の高いYoutube視聴者諸君は総じて声をあげない。

関連する投稿

Javascript+HTMLで(AppStoreで売れる)iPhoneアプリを作る

App Store登録もOK! JavaScriptで作るiPhoneアプリ(1/4)- @IT

ごくカンタンに要約すると、

  • アプリケーションのコア部分はHTML+Javascriptで作って、それをUIWebViewで表示する
  • ローカルストレージへのデータ書き込み・読み出しはiPhoneのSafariが元々対応している、HTML5の「Client-side Storage」を使って可能
  • デバイス周りのAPI(加速度センサとかカメラとか)も、サードパーティ製のフレームワークを導入することによりJavascriptから呼び出せるようになる
  • 外観をネイティブアプリっぽくするのもわりとカンタン(SDK同梱のDashcodeを使う)

ということのようです。

「海外の開発者たちが注目している」と書いてはあるもののホントかな?と思っていたのですが、「サードパーティ製のフレームワーク」がすでにいくつもあるところを見ると、本当にそうなのかもしれません。

個人的にはあまり興味は沸きませんが、既存のWebアプリをiPhoneアプリに移植する場合などには検討に値する選択肢になりそうです。

関連する投稿

NSUserDefaultsで保存したプロパティの在処

シミュレーター

~/Library/Application Support/iPhone Simulator/User/Applications/(インストールする度に変わる文字列)/Library/Preferences/(Bundle Identifier).plist

実機

/var/mobile/Applications/(インストールする度に変わる文字列)/Library/Preferences/(Bundle Identifier).plist

関連する投稿

数値などをNSArrayやNSSet,NSDictionaryなどに格納する方法

intやdoubleなどの数値をコレクションクラスであるNSArrayなどに直接格納しようとしてみます

NSMutableArray* anArray = [NSMutableArray array];
NSInteger i = 0;
[anArray addObject: i];

すると「warning: passing argument 1 of ‘addObject’ makes pointer from integer without a cas」などとXcode上に警告が表示されてしまいます。
どうやら、コレクションクラスには数値などを直接格納することができないようです。

正しく格納するにはNSNumberクラスでラップしてやる必要があるようです。

NSMutableArray* anArray = [NSMutableArray array];
NSInteger i = 0;
[anArray addObject: [NSNumber numberWithInteger:i]];

関連する投稿

「iPhone・iPod touch ラボ」がAMNに追加

AMNに5ブログが追加され月間1700万PVのネットワークに|プレスリリース|Agile Media Network

iPhone / iPod touch に関する話題を扱っている人気ブログ「iPhone・iPod touch ラボ」が、AMNこと「Agile Media Network」に追加されました。

こちらのブログは、私も当然のごとくRSSを購読しています。iPhone / iPod touch という非常に狭い範囲の話題に限定されているにも関わらず、日本のトップブログの一つに数えられるまでになったということは、(執筆者の方の努力の賜物であることは当然として)iPhone / iPod touch という製品のポテンシャルの表れといってよいかと思います。そういった点で、アプリ開発者としても励まされるニュースです。

関連する投稿

Viewをクロスフェードで切り替えるには

サンプルコード「ViewTransition」にあるようにCATransitionを使う方法でももちろんよいのですが、UIViewクラスのクラスメソッドを使う方が、登場するクラスが少ないという意味ではよりシンプルです。

ぱっと見ではsetAnimationTransition:forView:cache:メソッドが使えそうですが、1つ目の引数として与えるトランジションのタイプの選択肢にクロスフェードがありません。そこで、あらかじめ切り替え後のビューをalpha=0.0の状態でaddSubview:しておいた上で、以下のようにします。

[UIView beginAnimations:nil context:NULL];
currentView.alpha = 0.0;
nextView.alpha = 1.0;
[UIView commitAnimations];

複雑なアニメーションを作成するにはどうしてもCAAnimationクラスが必要になることもありますが、UIViewのアニメーション関連メソッドを活用することで同様の効果を少しだけ楽に実装することができます。

もっとも、上記の例では切り替え前のビューのインスタンスが残ったままになるため、不要であればsetAnimationDidStopSelector:を使ってアニメーション終了後にremoveFromSuperView:しなければならない、といったように、逆に手間がかかる場合もありますが。

ちなみに、setAnimationDuration:とsetAnimationDelay:を使えば、簡単なキーフレームアニメーションっぽいものも実装できますね。

例)Viewをクロスフェードで切り替えて、すぐにクロスフェードで元に戻す

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
currentView.alpha = 0.0;
nextView.alpha = 1.0;
[UIView commitAnimations];
 
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:1.0];
currentView.alpha = 1.0;
nextView.alpha = 0.0;
[UIView commitAnimations];

関連する投稿

Home

Search
Feeds
Meta

Return to page top