Blog Ranking

にほんブログ村 IT技術ブログへ
ラベル iPhoneアプリ の投稿を表示しています。 すべての投稿を表示
ラベル iPhoneアプリ の投稿を表示しています。 すべての投稿を表示

2011年5月27日金曜日

ViewControllerをiPadでは回転させて、iPhoneでは回転させないためのコード

対象のUIViewControllerのshouldAutorotateToInterfaceOrientation:interfaceOrientation:を以下のようにオーバーライドします。
一行ですむので分かりやすい。


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad || interfaceOrientation == UIInterfaceOrientationPortrait);
}

2011年5月19日木曜日

iPhoneアプリからmixi Graph APIを使って写真付きボイスを投稿することに挑戦してみた。
実はmultipart/form-data形式でデータを送信するというのがやったことなかったので、ここを参考にさせてもらった。
iPhoneアプリ開発記(10):Objective-C で HTTP のファイルアップロードを実装する

ここはNSASCIIStringEncodingのエンコードを使っているが、そのまま投稿してみると、mixiからinvalidだと怒られてしまった。
それも当然のことで、mixiのガイドラインにはUTF8でエンコードすることと書かれている。
なのでNSUTF8StringEncodingでエンコードして送信してみると、何の問題もなく投稿できた。

それにしてもmixiのアクセストークン&リフレッシュトークンの有効期限が短すぎて大変。

2011年3月10日木曜日

iPhoneアプリをApplication Loaderでアップロードできずエラー

一晩悩みました。
いやもう、こっちはアプリが完成してウキウキなわけですよ。
iTunes Connectでの申請も終わり、あとはバイナリをApplication Loaderでアップロードするだけ、というところで出ましたエラー。
"an error occurred uploading to the itunes store"


エラー、漠然としすぎじゃないでしょうか(苦笑)

このエラーに遭遇したのが昨日の真夜中だったんですが、2時間ぐらい格闘したあげく、
きっとiOS4.3のリリースを目前に控えて、iTunesのサーバーが込み合ってるに違いないと投げました。
きっと目が覚めたらアップロードできるようになってるさ...

そして翌朝。再トライ。その結果、
"an error occurred uploading to the itunes store"



結局オチとしては、MAC側に問題があったよう。
ソフトウェア・アップデートが面倒で数日ほったらかしていたのですが、ちゃんとアップデートしたら解決しました。

ということで申請中アプリのステータスが"Waiting For Review"になったので、公開を楽しみに待ちたいと思います。

2011年3月5日土曜日

FXYCSのメンバーではない楽天銀行ではiPhoneアプリ売り上げの支払いされず

今日、アップルからこんなメールがきていた。
私が登録していた楽天銀行はFXYCSのメンバでないために、振込ができませんでしたと。


Your payment was returned by your bank. Your bank indicated: Beneficiary bank is not a member of FXYCS If you need to update your bank information, go to the Contracts, Tax, & Banking Information module.


とりあえずみずほに変更しておく。

なお、iPhoneアプリ開発雑記帳さんの調べによると、海外からの振込にかかる手数料は以下のようになっているらしい。


アップルからの円建てでの送金にかかる手数料の相場は以下のとおりです。

* 三菱東京UFJ銀行、三井住友銀行
4,000円
被仕向送金手数料1,500円 + 円為替取扱手数料 送金金額の1/20%(最低2,500円)
* みずほ銀行、ソニー銀行
2,500円
* りそな銀行
送金金額の1/20%(最低1,500円)
* 地方行
1,500円から

なお、シティバンクのeセービングを使うと預入資産残高により無料との情報がありますが、現在の手数料一覧ページには4,000円と記載されています。
2010年10月時点での調査結果です

アップルからの売上振込にかかる手数料

たいへん参考になった。銀行によってここまで差があるとは・・・。

2011年3月1日火曜日

申請してたiPhone/iPadユニバーサルアプリがリジェクトされた。

一週間ぐらい前からiPhone/iPadユニバーサルアプリをAppStoreに申請してたんだけど、今日リジェクトされてしまった。

問題点は2つ。

1つ目は、MKMapView(グーグルマップ)のロゴがディスプレイ内に表示されず隠れてしまっていた。
MKMapViewのframe.size(サイズ)プロパティを設定するときこんな感じで画面回転に合わせて設定してた。


- (void)setViewsInMainVC:(UIInterfaceOrientation)orientation{
CGSize naviBarSize = self.navigationController.navigationBar.frame.size;
CGSize toolBarSize = self.toolBar.frame.size;

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
mapview.frame = CGRectMake(0, toolBarSize.height, 768, 1024 - naviBarSize.height - toolBarSize.height);
toolBar.frame = CGRectMake(toolBar.frame.origin.x,toolBar.frame.origin.y,768,toolBarSize.height);
}else {
mapview.frame = CGRectMake(0, toolBarSize.height, 704, 768 - naviBarSize.height - toolBarSize.height);
toolBar.frame = CGRectMake(toolBar.frame.origin.x,toolBar.frame.origin.y,704,toolBarSize.height);
}
}


原因は、ステータスバーの高さ分を考慮していなかったこと。地図の下の方が切れてしまってた。
iPadのディスプレイサイズは1024px*768pxでステータスバーの高さは20pxなので、コード内で1024を1004に、768を748に直さないといけなかった。
iPadアプリでは画面の回転に対応させる必要があり、Interface Builder使うよりもプログラム的に色々設定する必要がある。そこで起こった単純ミス。
こんなのでリジェクトされてたら誰も幸せにならないので、皆さん気をつけてください。(誰もやらないか。。。)


2つ目は、UIPopovercontrollerを吹き出し表示するときに、吹き出しの位置がおかしいとのことだった。
基本的に、そのUIPopovercontrollerを表示するために押した場所(ボタン等)から出さないといけないようだ。

つまりボタンから出す場合は素直にsenderから出しとけってことだね。
こんな風に。


- (IBAction)presentRoutePopoverVC:(id)sender{
//既にポップオーバーが表示されている場合は消す
if (popover.popoverVisible) {
[popover dismissPopoverAnimated:YES];
//ポップオーバーが表示されていない場合は表示する
}else {
popover.popoverContentSize = CGSizeMake(320, 750);
[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
}


どっちも単純なミスで恥ずかしいけど,iPadアプリの申請は初めてで知らないことも多かったので勉強になった。
よ〜〜し、再申請した!

2011年2月17日木曜日

NSStringから正規表現でマッチした部分を抜き出す方法

今回、UITextFieldに入った"緯度,経度"という文字列を抜き出して、CLLocationに変換する必要があった。
しかしUITextFieldはユーザーが入力可能な要素なので、入っているのは"緯度,経度"じゃないかもしれないし、余分なものが含まれる可能性もある。

ということで、正規表現で軽くチェックしてマッチした部分を使うことにした。
そのためのメソッドはNSString:rangeOfString:options:で、optionsにはNSRegularExpressionSearchを渡すのがポイント。

検索文字列は@"3[0-9]{1}.[0-9]+,13[0-9]{1}.[0-9]+"という正規表現になっていて
"34.6937378, 135.5021651"のような文字列にマッチする。

rangeOfString:options:を使うとマッチした範囲がNSRangeで返されるので、
そのNSRangeをそのままNSString:substringWithRange:に渡して、マッチした部分を返してもらえる。

これは便利!


NSRange range = [textField.text rangeOfString:@"3[0-9]{1}.[0-9]+,13[0-9]{1}.[0-9]+" options:NSRegularExpressionSearch];

if (range.location != NSNotFound) {
NSString *locStr = [startTF.text substringWithRange:range];

//(.....以下省略.....)
}

iPhoneアプリで透過画像(PNG)が透過されなくて困った。

現在作成中のiPhoneアプリ用にイラストをいくつか作ってもらってたんだけど、
背景透過されているはずのPNG画像が実機で透過されなくて困った。
iPhoneシミュレータではちゃんと透過されていたんだけどね。

一時間ぐらい悩んで、問題解決。

画像はAdobeのイラストレーターで描いてくれてたんだけど、
新規作成するときに「新規ドキュメントプロファイル」の欄をカスタムではなくて
「モバイルとデバイス」に設定しておくとちゃんとiPhone実機で透過された!