AppleWalker

Walker Softwareのサポートページです。 Mac iPhoneなどApple系のことを書いていきたいと思います。 訪問してくれた、みなさんよろしくね。(^^)ニコ

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
12



応援しよう!
banner3.jpg
 
 
 
アクセス数
 
 
Twitter
 
 
 
 
 
 
Apple-Style Plus
 
 
ApplePeople
 
 
 
 
 
 
 
 
全記事表示リンク
 

iTunesConnectからの振り込みいつのまにか手数料がなくなってた?

[Apple][iPhone][SDK]

iphone_sdk.png

先日、アップルの振り込みを確認したところおかしなことに気がつきました。三井住友銀行なんですが毎月、海外からの送金ということで明細の手紙が送られてきていたんですが5月あたりから届いていませんでした。変だな?と思い確認したところ、また変更があったようです。

今までは被仕向送金という記載で入金されていたのですが、それがDETSCHE BANKからになり先月はアップル(ドイツギンンコウ)という記載にかわりました。記載が変更された月から為替手数料などが引かれてない振り込みとなっています。

国内からの振り込みに変わったのでしょうか?

今までは、海外の売り上げが150$を超えないと入金されませんでしたが現在は20$で入金されるように変更されてます。これって、へたしたら海外で売れてないとマイナスの売り上げが発生することになります。その対策として国内からの振り込みに変わったのかも知れません。

どちらにしても、前のように為替手数料がなくなったのはうれしいですね。(^^)


【Tips】Xcode4になってwarningがでてしまったのを消す方法

[Apple][iPhone][SDK][Tips]

iphone_sdk.png

Xcode4が正式リリースされて使用し始めてると思いますがひとつ困ったことが発生しました。

いままででなかったwarningが出てしまうことです。コンパイラーがかしこくなったのは良いんですが消す方法がわかりませんでした。ちょっと悩んで消す方法がわかったのでご紹介します。

 


iPhone4のLEDフラッシュを使って、ライトを点灯させる方法

[Apple][iPhone][SDK]

iphone_sdk.png

久々に、開発のTipsを書いてみたいと思います。

iPhone4にフラッシュが搭載されたので、常時点灯するライトのアプリがたくさんでてますね。ただ、作り方にまずい物が結構あるみたいです。まず、作り方には2種類あります。

◆一つ目の方法(多分、ほととんどこっちだと思います。)
UIKitのUIImagePickerControllerを使う方法です。通常のビデオを撮影できるプログラムを書いて、トーチモードをON(これでライトがつきっぱなしになります。)overlayViewにスイッチのviewをいれてビデオ画面を隠して終わりです。

しかし、この方法だと困ることがあります。ビデオは、音声も録音するのでアプリを起動したとたんiPodなどバックの音楽は停止してしまいます。録音するのですから、あたりまえですね。なので、この方法はおすすめできません。

◆二つ目の方法
iOS 4になって新しいフレームワークが追加されました。AVFoundationといいます。これらのAPIを使えば、新しいタイプのビデオやカメラが作れます。こちらの方では、ビデオなどのインプットと音声のインプットがわかれてますので、音声をインプットしなければ音声処理をしないのでiPodなどのバックの音を停止させることはありません。

私も、ライトアプリだそうと思ったのですがデザインがついて行けずあきらめました。(^^;;

こちらがサンプルコードです。自分で20行もかけば、できてしまいます。w

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

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[captureSession startRunning];
}

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

- (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_;
}


簡単に説明しますと、AVCaptureSessionが中心にあり、AVCaptureDeviceにデバイスやいろいろなモードの設定(今回は、トーチモードですね。)を設定して、AVCaptureDeviceInputを作ります。さらに、AVCaptureMovieFileOutputを作ります。(これは、AVCaptureStillImageOutputでもかまいません。写真を出力します。)一応アウトプットを設定しないとセッションがうごかないので、便宜上設定してます。

そして、AVCaptureSessionにaddInputしてから、セッションをstartRunningします。最後の方のプリセットは、出力する際のプリセットなのでどれでもOKです。

captureSessionだけプロパティでretainしてます。

注意する点は、デバイスモードを変更するときは、前後にlockとunlockを指定しなければなりません。セッションの変更もCoreAnimation等でおなじみなbeginとcommitの間で変更しましょう。

本当は、これにAVCaptureVideoPreviewLayerをaddSublayerすればビデオ画面がでるのですが、今回はライトをつけるだけなのでいりません。これをビルドすれば、起動したらライトが点灯するアプリのできあがりです。

後マルチタスクにしても意味がないので、Info.plistにApplication does not run in backgroundまたは、UIApplicationExitsOnSuspendどちらかのKeyを追加してチェックをいれてください。これだけでFastAppSwitingはOFFになってサスペンドしなくなります。

今回は、簡単に説明してみました。かなり奥の深いフレームワークなので理解するのがたいへんなのです。まだ、初心者モードからぬけきれません。w

サンプルをちゃんと自分で入力(これ大事ですよ。)して、遊んでみてください!


iPadは決して、iPhoneをでかくしたものではない!

[Apple][iPhone][日記]

100408-0001.png

ついにiPadが日本にも上陸しました。つににキター!という感じです。
私の周りの方々も続々と入手してます。私は、頼んでなっかたのでまだまだ先です。
iPad 32G WiFi版を購入するつもりです。
どなたか、私にも愛の手をーーー!(^^;;

それはさておき、一部の方々(有名な方も含めて)「iPadはiPhoneをでかくしたものだ。」なんてあまりにも、ばかげたことを平気でいっているので記事を書くことにしました。

もう、日本でも触られてる方がたくさんいるので今さらかも知れませんけど、試された方々は確信してると思います。まず、電子書籍リーダーの話をよく引きあいにだされますがこれも、一つのアプリにしかすぎません。これは、電子書籍リーダーではなくiPadなのです。w

もちろん、キラーアプリになるのはいうまでもありませんが、日本ではまだまともにつかえないとこの機能だけで評価をしている方々もいます。これは、愚の骨頂です。

もう一度いいますが、かつて、ウォークマン、iPodなどとスタンダード化したジャンルがありますが、iPadも誰もが、iPadと声にするスタンダード化されたジャンルとなるでしょう。しつこいですが、iPadを試された方々は絶対に確信していると思います。

なぜなら、今まで手にとるまで想像してたよりはるかにユーザー体験が素晴らしいものになってるからです。

その要因として、サイズ、スピード、ユーザーインタフェースがあげられます。

これらの要因が変化することで、iPhoneにあるものがiPadに移植されただけでも別物のユーザー体験として変化します。人間は、ボタンを押すときや指を移動する時など無意識ですが脳が色々体験しています。その部分をコントロールするのがアップルの得意とするところです。なので、アップルには、ヒューマンインタフェースガイドラインというドキュメントが存在してます。

サイズ、スピード、ユーザーインタフェースが変化した、このガジェットは、過去最高のユーザー体験をもたらすでしょう。色々と書こうと思ったのですが、iPadを体感した瞬間に体や脳が理解するでしょうからあえて説明しません。

このiPadは、PCでもスマートフォンでもありません。iPadなのです。

予想できることは、旦那さんがiPadをつかっているのを見ていた奥さんや子供が面白いように使い出し口コミで恐ろしい広がりをもたらすと宣言しておきましょう。(当たりますように。w)

もちろん、今までmacやiPhoneを使っていた人もですが、今まで使ったことがない人たち(ファミリー)などが普通に使い出すでしょう。考えただけでも、鳥肌が立ちます。(^^;;

一つだけ注文があるんですよねぇ。アプリにロック機能がついてるといいんですよ。どういうことかというと、子供用のお絵書きアプリを立ち上げます。そしてアプリをロックして子供に渡して遊んでもらう。ってな感じでお絵書きアプリのマシンになりますよね。開発者側ではできないので、アップルに是非実装していただきたい機能です。

これがあれば、子供がいくらいじっても、設定やデータはおかしくなりませんからね。アップルさん、是非お願いします!

私はまだ、iPadを手にしていないので想像で書いていますがUSTやブログ、twitterを見ている限りでは、想像以上のスピードや反応が素晴らしいようです。きっと、そう遠くない時期に「iPadはiPhoneがでかくなっただけ。」なんて馬鹿なことをいってる人はくやしい思いをする時がくるでしょう。w

是非、iPadで素晴らしいLifeを送りましょう!(^^)/

[開発Tips]シェイクモーションの使い方とはまること

[Apple][iPhone][SDK]

iphone_sdk.png

久々の開発tipsです。
twitterやるのを我慢?しながら、地道に開発しております。

今回のは、シェイクモーションです。
最後のほうにはまった事例も書いてますので参考にしてみてください。

まず実装の方法は、それほど難しくありません。
タッチイベントとかひろうのは、オーバライドするだけで認識されますよね。
シェイクモーションは、自分でファーストレスポンダに設定してやらないと受け取れないのが
面倒なくらいです。
以下、ViewControllerへの実装のサンプルコードです。

- (BOOL)canBecomeFirstResponder {
return YES;
}
まず、これをオーバライドします。(書くだけです。)
これは、自分のクラスがファーストレスポンダになれるかということです。
もちろんYESを返してください。

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
};
この[self becomeFirstResponder]で、自分自身をファーストレスポンダに設定します。

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
// NSLog(@"motionEnd");
}
シェイクすると、こちらのイベントが呼ばれるようになります。
他の、モーション系のイベントもオーバライドすれば呼ばれます。
ただ、何かやるならmotionEndedで十分です。

簡単に、使うことができます。
ところが、この先に拡張していくと問題がでることがあります。

ここからは、はまってしまった事例です。

上のシェイクモーションで次のviewControllerを表示させたとします。
その先でTextViewやTextViewFieldなどを使いたいとします。

なぜか、キーボードがでなくなってしまうのです。w
キーボードはtextViewがタッチされるとファーストレスポンダを受け取って
キーボードを出現させるので、ファーストレスポンダがこないということだと...
このへんは、レスポンダのことをちゃんと理解してる方はわかるのでしょうけど
私は2時間程はまりました。w

ようは、前のクラスのファーストレスポンダをやめてしまえばいいのだと考え、
先ほどの、motionEndedの中で、resignFirstResponderを呼んでみました。
しかし、事態は改善されませんでした。

resignFirstResponderというのは、ファーストレスポンダをやめますよ、というメソッドです。
別の使い方だとキーボードを閉じるときにも使えます。

悩んだあげく、タイミングの問題だと思い呼び出した先のクラスから元のクラスの
resignFirstResponderを呼んであげたところ解決しました。

もしかしたら、自信のクラスからでも
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
などで、遅延実行させてあげれば大丈夫かもしれません。(ためしてません。)

いつものごとく、これが正しいのかわかりませんが、参考になれば幸いです。