【Objective-C】AVPlayer関連リンク

【Xcode5.1.1 + iOS 7.1 + MacOX10.9.5】

とりあえずiPodライブラリを再生する音楽プレーヤー的なものを考えていたら、音の再生には3種類あるらしい。

・AVAudioPlayerクラス
・MPMusicPlayerControllerクラス
・AVPlayerクラス

【参考】Slow Days » Blog Archive » Core Audioざっくり覚え書き

今回考えているのは・・・

・バックグラウンド再生が可能(標準のミュージックプレイヤーと同じ)
・iPodライブラリ(自分がiPhoneに入れている音楽)の再生が可能

という前提なので、これだと「AVPlayerクラス」一択になるらしいので、関連リンクをメモしておきます。
(厳密には今回は、AVPlayerのサブクラスであるAVQueuePlayerを使っています)

Background Modes in iOS Tutorial
(これのPlaying Audioの箇所が役に立ちました)

かゆいところに手が届きそうなAVFoundationとMediaPlayerによる音楽再生アプリ作成メモ | Qiita
(ロック画面へアプリから情報表示など、知らなかったことばかり)

ios – Possible to insert item at top of queue using AVQueuePlayer? – Stack Overflow
(AVQueuePlayerで巻き戻しメソッドがないけどどうするの?キュー(Queue)なので、再生終わると配列から削除されます。で、原始的だけど、1つ前のAVPlayerItemを配列に入れて、順序を操作することで対応出来ます。ただ後ろに追加しかできないので、ちょっと面倒。)

AVPlayer Class Reference

AVQueuePlayer Class Reference

AVPlayerItem Class Reference

Objective-CのKVO(キー値監視)の使い方 | blog.nambo.jp

【2014.11.2 追記】
iOS の動画再生を試す | アカベコマイリ
(「AVPlayer の初期化」あたりは音楽でも同じ)

既にいくつか試してるのですが、その辺の記事は追々。

【Xcode】iTunes connectへのアプリ申請

【Xcode5.1.1 + iOS 7.1 + MacOX10.9.5】

昨日、無事アプリがリリースされました。パチパチ。「アイコン顔カメラ/icon face camera」というiPhoneアプリです。無料なので是非試してみて下さい。

アプリ申請でいくつか躓いたことがあったので、今後のためにメモ。
過去にもiOSアプリ制作に携わったことはあるのですが、リリース作業は今回が初めてでした。

・iTunes Connectは、iOS8リリースに合わせて更新された。
以前のと見た目が全然違っているので、ハッキリいって2014.8月以前の情報は無視した方がいいです。混乱します(笑)。

【参考】Xcode – 新しくなったiTunes Connectでのアプリの申請方法について – Qiita

・iAdはスクリーンショットに表示しない。
一週間経ってやっとレビューが始まったかと思ったら、数時間後にリジェクト(笑)。で、内容を確認してみると・・・

We found that your app and/or its metadata does not appear to include final content, which is not in compliance with the App Store Review Guidelines.

Specifically, your screenshots display empty iAd banners. It would be appropriate to remove the empty iAd banners from your screenshots.

で、訳すとこんな感じです。

私たちは、あなたのアプリケーションおよび/またはそのメタデータがApp Storeのレビューガイドラインを遵守していない最終的なコンテンツを含むように表示されないことがわかった。

具体的には、あなたのスクリーンショットは、空のiAdバナーを表示します。それはあなたのスクリーンショットから、空のiAdバナーを削除することが適切であろう。

iAd使ってるのにスクリーンショットに表示がないのはマズいと思って、わざわざ入れたのに完全に裏目でした。アプリ内の使っている画像もチェックして修正しました。

・アプリのバイナリのアップロードでエラー。
アーカイブを作って、Organizerからアップロードしたらエラーが出ました。

ERROR ITMS-9000: “Redundant Binary Upload. There already exists a binary upload with build version ‘1.0’ for train ‘1.0’”

調べてみたら、ビルド番号はアップロードごとに変更しないといけないらしいです。設定場所は、Xcodeの右カラムでプロジェクトを選んで、General>Identity>Buildです。デフォルトではVersionとBuildが同じになっていますが、Buildの番号を1.0.1などで変更すればいいらしいです。

【参考】ERROR ITMS-9000: “Redundant Binary Upload. There already exists a binary upload with build version ‘1.0’ for train ‘1.0’”のエラー対応方法

・iTunes connectでのビルド更新
新しくアップしたアプリ(バイナリ)は、マイAppのビルド欄に出てくるのかと思ってたら、マイAppのプレリリースタブの中に表示されるんですね。

・マイAppのビルド欄で「-」ボタン押して古いビルドを削除する。
・マイAppのビルド欄で「+」ボタン押して新しいビルドを選択する。

これで新しいビルドで再申請できました。

【参考】【アプリ申請】iTunes Connectが新しくなった!! 申請取り下げバイナリの再アップする方法

ちなみにiAdのスクリーンショット以外は問題(リジェクト)なかったのですが、申請からレビュー完了までかなり時間かかりました。iOS8のリリースと時期的に重なって、審査が混んでいたのかもしれませんが、参考までに書いておきます。

※申請時はリリース日付を2014.11.1に設定。尚、下記日時は米国時間です。

・September 28, 2014 22:34(c-geru)Prepare for Upload
・September 29, 2014 03:46(c-ger)Waiting For Review
・October 09, 2014 12:37(Apple)In Review
・October 09, 2014 19:09(Apple)Metadata Rejected >> iAdのスクリーンショットでリジェクト
・October 10, 2014 03:12(c-geru)Waiting For Review
・October 19, 2014 12:21(Apple)In Review
・October 19, 2014 13:02(Apple)Pending Developer Release >> レビュー完了
・October 20, 2014 09:25(c-geru)Processing for App Store >> リリース日付を10/21に変更
・October 20, 2014 09:31(Apple)Ready for Sale

【Xcode】iOS用のOCRライブラリ

あるんですね。有名なのは、この二つらしいです。

tesseract-ocr
nhocr

ググってみると、tesseract-ocrを使ったサンプルが多いようです。

iOSで日本語OCR!サンプルアプリ構築編〜iOS SDK 6.1 + tesseract-ocr 3.02〜 | Developers.IO
tesseract-orc で 自作プログラムに画像の文字を読ませてみた – Kikuchy’s Second Memory

一応、メモとして。

【Objective-C】MPMediaQueryで取得される曲情報にはiCloudも含まれる

【Xcode5.1.1 + iOS 7.1 + MacOX10.9.5】

MPMusicPlayerControllerでミュージックライブラリの再生をしていて、一覧に出てくるのに再生できない曲があって「何だろう?プログラムの問題?」といろいろ調べていたら・・・

MPMediaQueryで取得される曲情報にはiCloudも含まれる

ということらしい。リストにはあるけど、曲データがないので再生できない。というか、[MPMusicPlayerController play] ではエラーにはならずに再生した途端に「MPMusicPlayerControllerPlaybackStateDidChangeNotification」が返ってきて、MPMediaItem == NULL で再生終了になる。

※問題の出たアルバムは1曲しか含まれていなかったので。

具体的には、MPMediaItem に MPMediaItemPropertyIsCloudItem というプロパティがあります。これでiCloudにあるのかどうか判定できます。

・MPMediaItemPropertyIsCloudItem
A Boolean value indicating whether the media item is an iCloud item (YES), or not (NO). A media item is considered an iCloud item if it is available via iTunes Match and is not already stored on the device. Value is an NSNumber object representing a BOOL data type.

Available in iOS 6.0 and later.

・元々のコードはこんな感じ。

MPMediaQuery *query = [MPMediaQuery albumsQuery];

NSArray *albumlists = query.collections;

for (MPMediaItemCollection *albumlist in albumlists) {
MPMediaItem *representativeItem = [albumlist representativeItem];
NSString *albumtTitle = [representativeItem valueForProperty:MPMediaItemPropertyAlbumTitle];
}

・で、調べてみたら、iCloudのデータを除外するには [MPMediaQuery addFilterPredicate:] ですればOK。

MPMediaQuery *query = [MPMediaQuery albumsQuery];

[query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]];

NSArray *albumlists = query.collections;

for (MPMediaItemCollection *albumlist in albumlists) {
MPMediaItem *representativeItem = [albumlist representativeItem];
NSString *albumtTitle = [representativeItem valueForProperty:MPMediaItemPropertyAlbumTitle];
}

問題の出た曲データが特定できなくて、iOS純正のミュージックプレイヤーと自作アプリの曲アルバム一覧を比較していて、やっと気づきました。

【参考】
MPMediaItem Class Reference | iOS Developer Library
MPMediaQuary albumsQuery結果からiCloudのみにあるものを除く | 響雲
articles of samekard: iPod library access クラウド音源への対応
MPMediaQuery – ignore songs on Cloud (i.e., iTunes Match)

【Objective-C】音楽再生関連のまとめ

諸々調べているのでメモ。

MPMusicPlayerControllerクラス | Second Flush
MPMediaQuery Class Reference | iOS Developer Library — Pre-Release
iOSで、ミュージックライブラリにアクセスして音楽を再生する | nackpan Blog
音楽プレイヤのメソッド(1) | Second Flush
Objective-C – ARC環境下でAVAudioPlayerを使い柔軟かつシンプルにサウンドを再生する方法 – Qiita
プロフェッショナルプログラマー: iOS 音声再生(AVAudioPlayer)
MPMediaEntity Class Reference | iOS Developer Library
iOS – iTunesみたいに再生中の曲のアートワーク(ジャケット写真)に合わせて背景色と文字色を変える – Qiita
Media Player Framework Reference | iOS Developer Library
AddMusic | iOS Developer Library
AVPlayerDemo | iOS Developer Library
[iOS]AVPlayerを使う | nackpan Blog