2012年3月31日土曜日

iPhoneアプリがリジェクトされた!!

iPhoneアプリの作成にもちょっとづつ慣れてきて、
※まだまだできないこといっぱいありますが><

3つめのアプリをリリースしようとしたところ、
[Your app status is In Review]のメールが届いてから、
なかなかfor saleされないなーと思っていました。

いつも、[Your app status is In Review]のメールが届いてから、
その日中に、
[Your app status is Processing for App Store]のメールが届いて
数時間後には、
[Your app status is Ready for Sale]のメールが届くのに><


リジェクトされた内容は、
App ストア上で表示されるアイコンと、
iphoneやipod上で表示されるアイコンを一緒にしてくださいということでした。

そんなの知らなかったよー。。。

Appストア上に掲載されるアイコンはけっこう大きめなので、
細かいイラストをいっぱい入れたのですが、
iphoneのアイコンは小さいから、ちょっと違うイメージのイラストを載せたことが原因でした。

これからアイコン修正してもう一度申請してみます!!

2012年3月29日木曜日

Tab barを使って、Viewを増やす!.h、.mを接続する方法

1、まずは新規プロジェクトの作成でTabbarを選択します。























2、3つめのViewを追加します
(最初は2つのViewまでが入っています。)


Resourcesの中に入っているMainWindow.xibを開くと、
↓こんな感じ。


















今日はViewControllerを追加してみました。
これでtab barの中に新しいタブが追加されました。



3、3つめのタブ用のxibと.h、.mファイルを追加します。





















新規ファイルの追加から、Objective-cのsubclassを追加します。
ここでオプションのところの.xibのところにチェックを入れるのを
忘れないようにしましょう。


4、次は追加したタブとビュー、ヘッダーファイルたちの接続です。























MainWindow.xibを再度開いて、
追加した3つめのタブを選択します。


ViewControllerのNib nameで、
今追加した3つめのクラスを選択します。




















Class IndetityのClassの名前を、
先ほど追加したクラスに指定します。


これで完了です!


UIButtonの画像をメソッド内で変更する方法

ボタンのオン、オフでUIButtonの変更を変更する方法。
いつもInterface Builderでボタンのイメージを設定していましたが、

[imagebtn setImage:[UIImage imageNamed:@"2_on.png"] forState:UIControlStateNormal];


これで変えられました!

【手順】

1、.hのファイルにアウトレットを作成

@interface xxxx : UIViewController {
IBoutlet UIButton hhh;
}

@property (nonatomic,retain) UIButton hhh;



2、.mにこんな感じで実装

@synthesize hhh;

- (void) ggg : ( id ) sender {
[hhh setImage : [ UIImage imageNamed : @"eee.jpg" ] forState : UIControlStateNormal];
}

-(void)deallock {
[hhh release];
[super deallock];
}


IBできちんとボタンと接続するのを忘れないように!
これで画像が変更することが出来ました◎

2012年3月27日火曜日

‘initWithFrame:reuseldentifier’ is deprecatedエラーの対処法

iphoneでRSSリーダーを作ろうと思って、
有名な【コラム】実践!iphoneアプリ開発を読んでいました。

▼RSSのチュートリアルはこちら


でも、なかなかうまくいかず、
zipファイルをダウンロードしてちょっとずつ見ていく事に。

でも、ビルドは出来るのですが、
self = [super initWithFrame:frame reuseIdentifier:identifier];
↑のところで、
「‘initWithFrame:reuseldentifier’ is deprecated」っていう忠告がずっと出ていました。


いろいろ調べてみると、
どうやら「initWithFrame:  reuseIdentifier:」ってのは非推奨みたいです。
現在は、initWithFrame:の代わりにinitWithStyleで対応するそうです。


self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

こんな風に書き換えたら無事にエラーが解消されました!



2012年3月26日月曜日

iphoneのライトアプリの作り方 AVFoundationを使ってtorchモードをマスター!

昨日に続いて、
しっかりAVFoundationを勉強したいと思うので、
再度復習してみます。

まずは、いつものように既存のワークフレームを読み込みます。
今回使うのは、「AVFoundation.framework」。

.hファイル
---------
#import

@interface lightViewController : UIViewController
{
AVCaptureSession *captureSession;
}

@property (nonatomic, retain) AVCaptureSession *captureSession;

- (AVCaptureSession *)session;
-(void)lighton:(id)sender;
-(void)lightoff:(id)sender;

@end
---------


#import
「AVFoundation.framework」のフレームワークを使ったので、
ヘッダーファイルにインポートします。



AVCaptureSession *captureSession;
AVCaptureSessionのインスタンス変数「captureSession」を作ります。



@property (nonatomic, retain) AVCaptureSession *captureSession;
アクセサメソッド用にプロパティを作ります。


ここは合っているかわかりません、
もし違ってたら指摘して下さい><
- (AVCaptureSession *)session;
-(void)lighton:(id)sender;
-(void)lightoff:(id)sender;

アクション用のやつを書きます。
- (AVCaptureSession *)session; →ライトを照らす設定
-(void)lighton:(id)sender; →ボタンでライトのオンを設定
-(void)lightoff:(id)sender; →ボタンでライトのオフを設定

以上でヘッダーファイルの設定は終了です!

.mファイル
---------

@implementation lightViewController

@synthesize captureSession;

- (void)viewDidLoad {
[super viewDidLoad];
self.captureSession = [self session];
}

- (void)viewDidUnload {
self.captureSession = nil;
}


- (AVCaptureSession *)session {
NSError *error = nil;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
AVCaptureMovieFileOutput *movieFileOutput = [[[AVCaptureMovieFileOutput alloc] init] autorelease];
[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];
AVCaptureSession *_captureSession = [[[AVCaptureSession alloc] init] autorelease];
[_captureSession beginConfiguration];
if ([_captureSession canAddInput:videoInput]) {
[_captureSession addInput:videoInput];
}
if ([_captureSession canAddOutput:movieFileOutput]) {
[_captureSession addOutput:movieFileOutput];
}
_captureSession.sessionPreset = AVCaptureSessionPresetLow;
[_captureSession commitConfiguration];
return _captureSession;
}
-(void)lighton:(id)sender {
[self.captureSession startRunning];
NSError *error = nil;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];
}


-(void)lightoff:(id)sender {
NSError *offerror = nil;
AVCaptureDevice *offcaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[offcaptureDevice lockForConfiguration:&offerror];
offcaptureDevice.torchMode = AVCaptureTorchModeOff;
[offcaptureDevice unlockForConfiguration];
}

- (void)dealloc {
[super dealloc];
[self.captureSession release];
}

---------


self.captureSession = [self session];
captureSessionインスタンス変数に、sessionメソッドを渡します。



AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
デバイスの設定をします。今回はビデオタイプを選択。
詳細は公式サイトに詳しく書いてあります。


--------



デバイスおよびデバイス入力の作成と設定
キャプチャデバイスはAVCaptureDeviceオブジェクトで表されます。このクラスには、必要な入力
タイプのオブジェクトを取得するためのメソッドが用意されています。デバイスには1つ以上のポー
トがあり、AVCaptureInputオブジェクトを使用して各ポートを設定します。通常、キャプチャ入
力はデフォルト設定で使用します。
ビデオキャプチャデバイスを見つけ、そのデバイスを使用してデバイス入力を作成し、そのデバイ
ス入力にセッションを追加します。
AVCaptureDevice *device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// エラーを適切に処理する
}
[session addInput:input];


--------


▼あとは、昨日のブログに続きます!

iphoneアプリの作り方(音楽の再生と停止)AVFoundation.framework

ちゃんと理解するために、しっかり音楽データの扱い方を復習しておこうと思います。

1、【利用するワークフレーム】AVFoundation.frameworkをインポートする。

.hファイルに記述
---------------------

#import

@interface atentionViewController : UIViewController {
IBOutlet UIButtom *playButtom;
}

@property (nonatomic, retain) UIButton *playButton;
@property (nonatomic, retain) AVAudioPlayer *audio;

-(IBAction)play:(id)sender;

@end

---------------------

解説

#import
AVFoundation.frameworkを使えるようにするために、インポートします。


IBOutlet UIButtom *playButtom;
音楽を再生したりストップしたりするために、
アウトレットを作成します。
ここで*マークをつけるのを忘れずに!

↓↓なんで*マークをつけるんだっけという方はこちら

oObjective-cでインスタンス変数を宣言するときに、
型が「クラスオブジェクト型」の場合は、
変数名の頭にアスタリスクをつける
という決まりになっています。

インスタンス変数っていうのは、
同じクラスに対する全てのインスタンスが同じ値を共有する変数のこと。


@property (nonatomic, retain) UIButton *playButton;
これは、アウトレットに設定したボタン用に設定します。


@property (nonatomic, retain) AVAudioPlayer *audio;
これは、音楽を再生するために設定します。

▼詳しくはこちら!アクセサメソッドについて


-(IBAction)play:(id)sender;
これはボタンが押されたときのアクションを設定する用です。

これで.hのファイルはおしまいです。
次は、.mファイルです。


.mファイルに記述
---------------------

#import "atentionViewController.h"

@implementation atentionViewController

@synthesize playButton;
@synthesize audio;

- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
}

-(IBAction)play:(id)sender {
if( !audio.playing ){
[audio play];
[playButton setTitle:@"play" forState:UIControlStateNormal];
} else {
[audio pause];
[playButton setTitle:@"stop" forState:UIControlStateNormal];
}
}

- (void)dealloc {
[audio release];
[playButton release];
[super dealloc];
}

@end

---------------------


解説

@synthesize playButton;
@synthesize audio;
アクセサメソッド用にシンセサイズします。
ボタンと、音楽の再生用です。


- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
}

- (void)viewDidLoadは、その名前の通り、
ビューが読み込まれた直後に読み込まれるファイル。

デフォルトで[super viewDidLoad]は書かれているので、
今回は、

NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];

ここの解説です。

NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
音楽ファイルがどこにあるかファイルパスをpathに渡します。
今回は、jungle13.wavという音楽ファイルをresourceフォルダに入れました。
@"jingle13" ofType:@"wav"こんな感じで書きます。

NSURL *url = [NSURL fileURLWithPath:path];
先ほどpathに入れたファイルパスをURLとして渡し、初期化します。

audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
audioインスタンス変数に、音楽データが入っている場所を渡します。

ここはいつも同じなので、
おまじないとして覚えてしまってもいいかもです。


-(IBAction)play:(id)sender {
if( !audio.playing ){
[audio play];
[playButton setTitle:@"play" forState:UIControlStateNormal];
} else {
[audio pause];
[playButton setTitle:@"stop" forState:UIControlStateNormal];
}
}

-(IBAction)play:(id)sender {}

ボタンが押されたときのアクションをここのカッコの中に書きます。

if( !audio.playing ){
もし、音楽が再生されていなかったら
(!)っていうのは否定の意味になります。

[audio play];
音楽を再生します。
ここでの音楽の再生やストップは、
[audio play]、[audio stop]、[audio pause]になります。


[playButton setTitle:@"play" forState:UIControlStateNormal];
ボタンの表示をplayにします。
UIControlStateNormal ボタンが有効な時(通常の状態)
UIControlStateHighlighted ボタンが触られている間の状態
UIControlStateDisabled ボタンが無効な時(Disable状態)
です。

else以下はそうでなかったら(音楽が再生されていたら)
音楽を一時停止して、ボタンの表示をstopにするということです。


- (void)dealloc {
[audio release];
[playButton release];
[super dealloc];
}

最後はインスタンス変数とかをリリースしたら終了です!!!




最後に

後は、resorceファイルに音楽ファイルをいれること
interfacebuilderでボタンを設置し、アクションを設定すること

以上でアプリの完成です!

音楽の再生と効果音の再生 objective-c AVFoundation

今日はボタンを押したら音楽が繰り返しながれる、
もう一回ボタンを押したら音楽がストップするというアプリケーションを作ってみたいと思います。

objective-cで音楽を入れるのは、
どうやら二種類あるみたいで、
ある程度音楽が長いBGMとして利用する方法と、
30秒以内の短い音(効果音)として利用する方法
がありました。

■BGMの方からいきたいと思います!

1、Frameworksに既存のワークフレームを追加

AVFoundation.framework
を追加します。


2、.hファイルに以下を追加

#import

→追加したフレームワークにインポート

@property(nonatomic,retain)AVAudioPlayer *audio;

→プロパティを追加



3、.mファイルでBGMのロード

AVAudioPlayer* audio;
NSString* path = [[NSBundle mainBundle]
pathForResource:@"bgm1" ofType:@"mp3"]; //bgm1.mp3ってファイルを読み込んでます。
NSURL* url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc]
initWithContentsOfURL:url error:nil];
audio.numberOfLoops = -1; //ループする回数の指定。(-1: 無限、0:
1回、1:
2回)


●音楽の再生と、一時停止、停止は、以下のようにして出来ます。
[audio play]
[audio pause]
[audio stop]



4、音楽ファイルをリソースの中に追加

忘れてました、、
resorceフォルダの中に音楽データを入れます。


■次は効果音のほうです!

1、Frameworksに既存のワークフレームを追加

AVFoundation.framework
を追加します。


2、.hファイルに以下を追加

#import

→追加したフレームワークにインポート



3、.mファイルで効果音のロード

SystemSoundID mSound = 0;
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundUrl = CFBundleCopyResourceURL(
mainBundle, CFSTR("se1"), CFSTR("wav"), NULL );
AudioServicesCreateSystemSoundID( soundURL, &mSound );


●音楽の再生はこんな感じ
AudioServicesPlaySystemSound( mSound );


音楽の名前にIDをつけて呼び出すって感じですね。


2012年3月25日日曜日

AVFondation.frameworkを使って懐中電灯アプリを作る


■iPhone4のLEDフラッシュを使って、ライトを点灯させる方法
http://applewalker.blog8.fc2.com/?no=144


ここのブログを参考に、
懐中電灯のアプリを作ってみました。

ボタンの切り替えで、LEDライトの切り替えがなかなかうまくいかず、
一日中悩んでいたので忘れないようにメモ。

[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];

ここのモードの切り替えのところは、
lockとunlockの間に挟まないとモードの切り替えが出来ません。


なので、
-----------------
-(void)lighton:(id)sender {
[self.captureSession startRunning];
NSError *error = nil;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];
}


-(void)lightoff:(id)sender {
NSError *offerror = nil;
AVCaptureDevice *offcaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[offcaptureDevice lockForConfiguration:&offerror];
offcaptureDevice.torchMode = AVCaptureTorchModeOff;
[offcaptureDevice unlockForConfiguration];
}
-------------


こんな風に、ボタンのオンオフでモードを切り替えれば大丈夫!
ということでした。

なんで気づかなかったんだろう、
ずっと

----
-(void)lighton:(id)sender {
[self.captureSession startRunning];
}


-(void)lightoff:(id)sender {

[self.captureSession stopRunning];
}
----


こんな風にやっていました。。
電源オフボタンを押したら、もうライトが付かなくなってしまうという、、


まだまだ勉強しないといけないですね、頑張ります!

四季の色(iphoneアプリをリリース!)

美しい日本の四季の写真を楽しめます。
また、四季の写真に合わせて日本の伝統色についても学べます。

収録している色の数は80色以上!
色の名前と一緒にCMYKやRGB、16進数の表記も掲載しているので、
色見本としても使えます。



ぜひチェックしてみて下さい!

























































恋愛タイプ診断(iphoneアプリリリース!)






























恋愛タイプ診断(iphoneアプリリリース!)


★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
アプリリリース記念の特別価格!!
350円 → 85円
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

簡単な質問に答えるだけで、あなたの恋愛タイプを診断します!
深層心理でのあなたの恋愛体質が診断でき、

・気になる相手からどう思われているのか?
・恋愛における自分の弱点
・恋愛の延長戦で結婚できるのか!?
・恋人にどんな風に思われてるのか
・恋愛を長続きさせるコツ

などが診断できます!!
もしかしたら、自分の本性は全然違う恋愛体質なのかも!?
今の恋愛に悩んでいる人、なかなか次の恋に踏み出せない人、新しい出会いを見つけるきっかけの作り方など、恋愛タイプに合わせてアドバイスもわかります!


【こんなシーンにおすすめ】
★合コンでのゲームとして
★友達との遊びとして
★自分の恋愛に活かすため

・・・など
いろんな楽しみ方ができます!


ぜひチェックしてみてください◎

Application does not run in backgroundキー (アプリをマルチタスクにしない設定)


iphoneのホームボタンを押したときに、
アプリの表示は消えても、裏ではアプリを閉じたときの状態を保持している状態のことを、
マルチタスクといいます。

Xcodeでiphoneアプリを作ると、
デフォルトでマルチタスク対応のアプリになっているので、
ホームボタンを押すたびにクリアしたい(マルチタスク非対応)にしたいというときは、
info.plistページで、
「Application does not run in background」というキーを追加して、
チェックを入れる事でマルチタスク非対応にすることができます。


UIViewControllerのデリゲートメソッド

-(void)viewDidLoad 初回ロードされた時のみ呼び出される

-(void)viewWillAppear:(BOOL)animated 画面が表示される都度呼び出される

-(void)viewDidAppear:(BOOL)animated 画面が表示された後に呼び出される

-(void)viewWillDisappear:(BOOL)animated 画面が閉じる前に呼び出される

-(void)viewDidDisappear:(BOOL)animated 画面が閉じた後に呼び出される

-(void)viewDidUnload 画面がアンロードされたときに呼び出される

-(void)didReceiveMemoryWarning メモリ不足時に呼び出される

-(BOOL)shouldAutorotate
ToInterfaceOrientation:
(UIInterfaceOrientation)
interfaceOrientation 画面回転をするしないの設定

2012年3月18日日曜日

一度アップロードしたiphoneアプリを再アップロードする方法

やっとiphoneアプリができたー!!と思って
application loaderを使ってアプリをアップロードしましたが、
その後にアプリ内に不備があることが発覚。

再度application loaderを使ってファイルをアップロードするには、
1、itune connectに接続
2、Binary Detailsをクリック
3、ページ右上のReject this binaryをクリック

これで再度アップロードすることができるようになります。

2012年3月17日土曜日

application failed codesign vertification the signature was invalid or it was not signed with an apple submission certificate

iphoneアプリをいよいよアップロードしようとして、
アップ用のファイルを作っているときに出たエラー
application failed codesign vertification the signature was invalid or it was not signed with an apple submission certificate


これの解決法は、
グループとファイルの一番上のファイル(青いアイコンが付いてるやつ)を右クリックして
情報を表示。

ビルドのコード署名IDを正しいものに修正することで解決しました。
Any iOSのところですね、

iphoneアプリのアイコンサイズ

<アイコン>
Icon.png (57 x 57) 【iPhone3G/3GS用】
Icon@2x.png (114 x114) 【iPhone4用】
Icon-Small@2x.png (58 x 58) 【iPhone4 Spotlight用】
Icon-Small.png (29 x 29) 【設定メニュー/Spotlight用】
Icon-Small-50.png (50 x 50) 【iPad Spotlight用】
Icon-72.png (72 x 72) 【iPad用】
iTunesArtwork (512 x 512) 【App Store用、拡張子は必要ありません】

<起動画面>
Default.png (320 x 480)  【iPhone3G/3GS用】
Default@2x.png (640 x 960) 【iPhone4用】
Default-Portrait.png (768 x 1004) 【iPad用】
Default-Landscape.png (1024 x 748) 【iPad用】

2012年3月14日水曜日

jQuery Mobileを使ってスマホサイトを作ろう

jQuery Mobileを使ってスマホサイトを作っています。
最初はいろいろ難しくて、本当に本当に戸惑いました。

基本的な動作や使い方は、jQuery Mobileの本家サイト
以下のサイトを参照いただければ大丈夫かと思います。


ただ、自分でテーマをカスタマイズするのが、
手間取ったのでメモ。


以下のサイトでテーマをカスタマイズするためのCSSを作れます。


適当にバーを動かして、プレビューしながら好みのテーマを作ったら、
CSSをダウンロードします。

CustomというテーマでCSSを作ってくれるので、
もしたくさんのテーマを利用したい場合は、ダウンロードしたCSSの中身を開いて、
Customというところをコピペで編集しましょう。

違う名前だったらいくつでもテーマを作って大丈夫です。
ただ、a,b,s,dなど、最初からあるクラス名はもともとjQuery mobileで使っているクラス名と
かぶってしまうのでカスタム用のテーマでは使うのを避けましょう。

いくつもテーマをつくれたら、
data-theme="Custom(好みのテーマ名)"
でテーマを実装することができます。