iPhoneアプリ開発ブログ
switch/caseの中で変数を宣言する
- 2008-12-19 (金)
- iPhone SDK / Cocoa / Objective-C | 開発ツール/開発手法
switch (hoge) { case 0: int i; break; }
上記のように case の中で変数を宣言すると、
syntax error before ‘int’
というように怒られるのが謎だったのですが、これはスコープの問題だそうですね。
以下のように、スコープを case の中に限定してやれば良いようです。なるほど。今までは、if/else で代用したり、switch の外で宣言したりしてごまかしていたので助かりました。UITableView では switch/case が大活躍です(良いコードとは言えませんが……)。
switch (hoge) { case 0: { int i; } break; }
参考:二流プログラマの三流な日常: switch文の途中で宣言する
関連する投稿
- Comments: 0
- Trackbacks: 0
iPhoneアプリ開発時にありがちなこと
- 2008-12-19 (金)
- その他
前回実機でデバッグしたのを忘れて、そのまま「ビルドして進行」してしまう
実機で動かすのが楽しくてつい遊んでしまい、さらなる時間の浪費につながることもしばしばです。
デバッガコンソールにエラーメッセージが出ているのに、気づかずに悩む
Localizable.strings の行末の ; が抜けているのに小一時間気づかず悩んだこともありました。
市場調査のために購入したアプリに夢中になる
さすが上位のアプリはよくできています。
ダミー画像ファイルのデザインに熱中する
中途半端によくできてしまうと、「このままでもまあいいか」になってしまうので逆によくない気がします。
周りの人に自慢したいがためにテストプレイをしてもらう
ユーザービリティテスト半分、ただ自慢をしたいのが半分といったところかもしれません。
関連する投稿
- Comments: 0
- Trackbacks: 0
App Store Lesson 5: プロモーションコードの発行と使用
- 2008-12-16 (火)
- AppStore
前回飛ばしてしまった第5回です。ポイントは、
- プロモーションコードは1バージョンにつき50個まで
- 有効期間は28日間
- プロモーションコードを発行できるのは審査通過後
- 使用状況に関するデータは(少なくともリアルタイムには)提供されない(販売レポートには記載される?)
(原文)App Store Lessons: Creating and Redeeming Promo Codes
新しく導入されたプロモーションコードによって、今後はレビュワーにアプリを送るためにあの複雑怪奇なAd-hocディストリビューションを使ったり、レビュワーのためにiTunesクレジットを購入したりする必要はなくなるわね。これまで使われていたこの2つの方法は、トラブルの種以外の何者でもなかったわ。Ad-hocコードの登録は悪夢のような事務仕事だったし、iTunesクレジットはアプリの金額ピッタリ購入することができなかったわよね。レビュワーは税金分だけは払うハメになったり、最悪の場合はアプリを自腹で買うことになったりしたものね。
でもプロモーションコードがあれば、iTunes Connect にログインして、コードを発行して、それを必要な時に送るだけで、よりよいプロモーションを実施することができるわ。昨日の記事では、プロモーションコードがいったいどんなものなのかが紹介されていたわね。今日は、開発者の視点からプロモーションコードについて見てみましょう。
プロモーションコードの制限
気の向くままにいつでも自由にコードを発行することはできないわ。コードの発行にはそれなりの制限があるの。注意すべきポイントを以下に簡単にまとめてみたわ。
- コードを発行するためには、裏でコードを売買してアップルのマージン30%を中抜きすることを禁止する、契約書に同意する必要がある。
- アプリのそれぞれのバージョンにおいて発行できるコードの数は50個まで。この限りあるコードを使って最大限の効果を上げるマーケティングプランを練ってね。50個以上のレビュー用アプリが必要になるなんてことは、巨大企業でもないかぎりそんなことは滅多に起こらないわよね。この点では、アップルは気前がよいと思うわ。
- コードの有効期間は28日間。だから、たとえアプリのリリース時やメジャーアップデートの際に手持ちの1ダースのコードがもの足りなく思えたとしても、勢い余ってすべてのコードを一度に発行してしまったりはしないようにね。
- コードはアメリカ限定。今のところアメリカ以外では使えないわ。
- それぞれのコードは一回だけ使用可能。一度使われたコードは、別の人が再利用することはできないわ。
- アプリの「試写会」もOK。アプリが発売可能な状態になれば、リリース日前でもコードを使うことができるわ。アプリが”Ready for Sale”の状態になれば、いつでもプロモーションコードを配ることができるの。リリース日を延ばしてその間にプレビュー用のアプリを配れば、発売前に口コミで噂を広めておくこともできるわ。
- 何か問題があったら、プロモーションコードに関するサポート窓口 devprograms@apple.com まで問い合わせましょう。
プロモーションコードの発行の仕方
プロモーションコードは1つだけでも、何個かまとめて発行することもできるわ。どのアプリのコードを何個発行するかは、あなた次第。28日間の有効期間を考慮して、いくつのプロモーションコードをいつ発行するかを見積もる必要があるわ。
まず最初に、iTunes Connect にログインしましょう。メインページに”プロモーションコードのリクエスト”という新しいメニューが追加されているわね。このメニューをクリックすると、プロモーションコードを発行するための新規ウィンドウが開くわ。このウィンドウで、コードを作成したいアプリケーションと、コードの数を選ぶの。50個の割り当てのうちあといくつ残っているかもこの画面で分かるわね。「Continue」ボタンをクリックするとコードが発行されるわ。もしまだ”iTunes Connect Promotional Codes Contract”に同意していないなら、コードを発行する前にそれに同意するように表示されるわ。
最後に、”Download Codes”をクリックすれば、新しく発行されたコードが書かれたテキストファイルをダウンロードできるわ。1行1コードよ。
プロモーションコードを使用する
コードの使い方は簡単よ。”Redeem”ボタンをクリックするだけ。iTunes Store のメインページ上の方の右側にあるでしょう。このボタンは、Gift Card や Startbucks プロモーションコードを使うときと同じボタンね。コードを入力して、ボタンをクリック!後は自動的にアプリがダウンロードされるわ。
開発者としての意見を言わせてもらうと、私の見る限りコードの使用履歴や最新の使用状況が分からないのが残念ね。将来的には改善されるかもしれないけど。コードの使用実績に関しては多分フィナンシャルレポートには記載されるでしょうけど、コードが正しく使われたかどうかは知るすべがなかったわ。しかも、アップルのプライバシーポリシーは、プロモーションコードを使ったのが誰なのかも教えてくれないでしょうね。
関連する投稿
- Comments: 0
- Trackbacks: 0
iPhone SDK 非公開APIの取り扱いについて
- 2008-12-15 (月)
- iPhone SDK / Cocoa / Objective-C
ありそうでなかったカメラロール関連アプリ「Roll Swap」 - もとまかのiPhone・iPod touch戯れ日記
上記のアプリ、どうも非公開APIを利用しているように思えるのですが、結局のところ非公開APIは黙認されているのでしょうか?
巷を賑わせたGoogleのアプリに関する以下の記事では、
あぁ我々は非公開APIを使ったよ。それがどうした? | iPhone 3G Wiki blog
この記事も、CNETの元記事も「非公開APIは利用しても良い。ただ改版されたときに使えなくなる可能性があり、その改版についていける体力があるデベロッパーのみが可能である」という内容になっています。
となっていますが、私が元のCNETの記事を読んだ限りでは、「非公開APIは利用しても良い」とは書いてないように思いました。上記エントリのコメント欄にも書かれていますが、以下のように理解しています。
- 非公開(undocumented)APIを利用したアプリはApp Storeでは販売できないことになっている
- しかし実際には多くの開発者が非公開APIを利用しているようだ
(以下原文の該当部分)
The problem with using undocumented APIs is that your application code could break in the future as Apple updates its software, but a lot of developers appear to have taken that risk in order to deliver a cool feature, such as Google’s verbal search prompt.
Under the original terms of the SDK, however, applications using such techniques were not supposed to make it through to the App Store. As a result, other developers who played strictly by the SDK rules would not have felt it possible to create an application that duplicated Google’s voice prompt using the proximity sensor, whereas those who had the resources to quickly rewrite anything that ran afoul of the App Store gatekeepers could push ahead and test Apple’s limits.
CNETの記事によれば、「アップルのrepresentativesの多くは現在(11月25日)休暇中のため、この件についてのコメントが得られるのはもう少し先になりそうだ」とありますので、とりあえずは様子見ですね。
しかしながら、「a lot of developers appear to have taken that risk(=将来のアップデートでAPIが変更されるというリスク)」なのであるとすれば、事実上の黙認状態と言っても良いかもしれません。ありきたりな言い方ですが、「ご利用は自己責任で」といったところでしょうか。
# 今更この件にふれたのは、最初にあげたアプリで使用していると思われる非公開APIが自分がまさに求めていた機能であったためです。
関連する投稿
- Comments: 0
- Trackbacks: 0
App Store の審査基準緩和の噂
Apple Broadens App Store Acceptance, Approves ‘Pull My Finger’ - Mac Rumors
Apple adds new genre as PullMyFinger makes it to App Store
くだらなすぎるという理由でリジェクトされていたユーモアアプリ「Pull My Finger」が App Store に登場しました。
開発をした Air-o-matic の Sam によるとアップルから電話が掛かってきたそうです。
アップルは全く新しい“ジャンル”の承認を開始した、「Pull My Finger」はそのジャンルのそのジャンルの承認第1号となる。
とても親切な担当者が教えてくれたところによると、元々彼らは「Pull My Finter」をリジェクトしたくはなかったのだけど、このようなジャンルのアプリの取り扱い方法を検討中だった(のでリジェクトした)。そしてこの度、その制限を解除することになったので、これまでリジェクトされてきたこの種のアプリは今後は承認されることになる。
とはいえ、「Pull My Finger」は確かに App Store に登場したものの、新しいジャンルが追加されたことを示すものは何もありません(従来からある「Entertainment」カテゴリに入っています)。
ちなみに最近、「17歳以上」のレーティングをされたアプリ「Amateur Surgent(素人外科医)」の販売が開始されるということもあったそうです。
関連する投稿
- Comments: 0
- Trackbacks: 0
iPhoneアプリ開発を始めた頃にハマりがちな様々なポイント
- 2008-12-11 (木)
- iPhone SDK / Cocoa / Objective-C
1. 可変個の引数を受けるメソッドの最後に nil を渡していない
NSArray *array = [NSArray arrayWithObjects:obj1 ,obj2 ,obj3];
2. (主にイニシャライザの中で)メンバ変数を retain していない
autorelease済みのインスタンスを返すイニシャライザを使ったときに、ついついretainを忘れてしまいます。そのメンバ変数にメッセージを送ろうとした瞬間クラッシュします。
3. retain, copy, assign を意識していない
例)NSMutableDictionaryのキーとしてCopyできないオブジェクトをセットしようとする(ちなみにこの場合は代わりに CFMutableDictionary を使うのがてっとり早いです)。
4. フォーマット指定子の動作を理解していない
NSLog(@"%d", 1.0);
で「0」が出力されるのが原因で小一時間悩んだ記憶があります。PHPなんかでは float(っぽい変数) を %d で出力すると、int にキャストされた値が出力されるので…。
5. NSSet の anyObject がランダムな要素を返すと勘違いする
「もっとも返しやすい要素」を返すだけで決してランダムではありません。
6. NSMutableArray, NSMutableSet, NSMutableDictionaryの初期化を忘れ、オブジェクトを add できない
この状態を、「nilに腕押し」と名付けました。
7. NSMutableDictionary の setObject:forKey: と setValue:forKey: を混同する
setValue:forKey:の方はキー値コーディング用のメソッドですね。詳細はリファレンスをご確認ください。
8. UIKit Additions なメソッドを見落とす
NSIndexPathクラスのsectionプロパティ、rowプロパティの存在に最近気付きました。
9. (引数が一つのメソッドについて)セレクタの最後の:(コロン)をつけ忘れる
doSomethingWithParameter:(int)param なのに、@selector(doSomethingWithParameter) としてしまい、そんなメソッドはないと怒られます。
10. 互いにimportしあうヘッダファイルができて悩む
@class を使って回避します(そもそも設計が間違っているという気もします)。
11. 必要なフレームワークが見つからない
CoCoa Touch、Media レイヤーのフレームワークはデフォルトで開いているフォルダにはないので。
12. 実機にインストールできない
iPhone SDK が2.2になって大分簡単になりましたが、証明書のインストールあたりの手順を飛ばしてしまってハマるのがありがちかと思います。
関連する投稿
- Comments: 1
- Trackbacks: 1
App StoreはスクレイピングNG
- 2008-12-10 (水)
- AppStore
App Storeのデータをウェブブラウザから検索したりすることができればアプリの案出しの時に便利かと思い、HTTPで直接データを取得してしまってよいものかどうか規約を確認してみました。
お客様は、本サービスへのアクセスのためにアイチューンズにより提供されるソフトウェアを使用される以外の方法で、本サービスにアクセスしてはいけません。
… NGのようです。
実際には、Scraping AppStore Reviews - Inside iPhone Blog こういった記事が堂々と公開されていますし(そもそもこの方、有名なJailBreakerであったりはしますが…)、この手の機能を実装したサイトもいくつか現存しますので、アップルとしては黙認の姿勢のようです。とはいえ、会社として堂々とやるのはやはり避けた方がよいかとは思いますので、そのうちAPIが公開されるのを期待することにします。
# App Storeの場合、やりとりされているデータはXMLですので「スクレイピング」という呼び方は適当ではないかもしれません。
関連する投稿
- Comments: 0
- Trackbacks: 0
App Store Lesson 6: アプリへの短縮URLを作ろう
- 2008-12-10 (水)
- AppStore
すみません、Lesson 5 と順番が逆になってしまいました。今回は“AppStore用TinyURL”の紹介です。
原文:App Store Lessons: Creating simple application links
普通のiTunesのリンクは泣く子も黙る長さよね。しかも、そのリンクが指しているものに関する情報が何も含まれていないから実際にクリックしてみるまでどこへ飛ぶのか分からないし、タイポしてしまう可能性も高いわ。たとえばこんな感じよね。
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284222807&mt=8
そこで、今日はlinktoapp.comを紹介しましょう。Linktoappは、iTunesの検索エンジンを経由することでこの長ったらしいURLをシンプルにしてくれるの。MacRumorsのArnが開発したこのサービスは、App Store用のTinyURLみたいなものね。
使い方は、ベースとなるlinktoapp.comのURLにアプリの名前をつなげるだけ。例えば、http://linktoapp.com/mooなら「Moo」へのリンクになるわ。
複数の単語からなるアプリ名の場合は、スペースを”+”に置き換えてね。例えばこんな具合に:http://linktoapp.com/flick+fishing。後ろにつけたアプリ名にぴったり合うものが見つからなければ、検索ページにリダイレクトされるわ:http://linktoapp.com/password+generator。Linktoappはその短いURLを裏でiTunesの検索リクエストに変換することでその機能を実現しているわ。アプリ名にぴったり合う検索結果が見つかれば、意図通りのページに飛ぶはずよ。そうでなければ、検索画面が表示されるってわけ。
Linktoappで特に気に入っているのは、リンクを明快なものにするその方法が、ロジカルで分かりやすいというところね。そのおかげで、レビュワーやユーザーがアプリのページにたどり着くのに最小限のタイピングで済むように、アプリに関する文章やサポートページに書くアプリのURLを置き換えるのにはぴったりのサービスだといえるの。
(追記)読者のukdmbfanがアップルのhttp://www.itunes.com/AppNameというリンクがあることを指摘してくれたわ。今朝試してみたら、2つ以上の単語からなる名前のアプリではうまくいかないことがあるみたい。まだ開発中なのかしら。
関連する投稿
- Comments: 0
- Trackbacks: 0
iPhone/iPod touch プログラミングセミナーに申し込みました
- 2008-12-09 (火)
- ニュース
前回は申し込みサイトが重くてつながらないうちに定員になってしまったのですが、今回は大増員(30人→100人)のおかげか無事申し込みを完了することができました。
内容は「10月30日のiPhone Tech Talkセミナーの内容の一部と同じ」とのことですので基礎的なものが中心かとは思いますが、「iPhone開発ツールとパフォーマンスチューニング」のあたりに少し期待しています。Instrumentsの使い方を解説してくれるとうれしいですね…。
なお、
注意:本セミナーは写真撮影、録音、取材、ブログへの掲載などは出来ません。
とありますので残念ながら本ブログには内容を掲載することができないようです。
関連する投稿
- Comments: 0
- Trackbacks: 0
$99 iPhone 3G (4GB) の噂の真相
- 2008-12-09 (火)
- iPhone 3G / iPod touch | ニュース
噂がささやかれていた、ウォルマート用iPhone 3G 4GBバージョン。実際には8GBバージョンを$197(ほぼ定価)で販売開始というオチだったようですね。
Evidence confirms Walmart iPhone, but not $99 price
関連する投稿
- Comments: 0
- Trackbacks: 0
- Search
- Feeds
- Meta