投稿

UITabBarController

UITabBarControllerを使用する上で気がついたことなど 構成 2タブ仕様にするときは UITabBarController(親) UIViewController(子) UIViewController(子) の3つのController構造になる。 子UIViewControllerを追加するとき Storyboardで普通にUIViewControllerを追加し、 親UITabBarControllerからSegueのように接続線を引くとUITabBarControllerに対応した項目が出てくるのでそれを選択する。 画面回転の制御 親UITabBarControllerサブクラス内に記述する模様

Xcode5のLocalize

昔はローカライズしたときには English(デバイスの設定が日本語以外の時はこちらが選ばれる) Japanese の2つを作っていたけど、今はBaseというものも作れる。 なので Base(中身は英語、デバイスの設定が日本語以外の時はこちらが選ばれる) Japanese の2つでいいんじゃないだろうか。 これは仮定なのでいろいろ調べて行きたい。

iPod library access クラウド音源への対応

iOS 6よりMPMediaItemのプロパティに MPMediaItemPropertyIsCloudItem というものが追加されました。 これはデバイス内にはなく、クラウド上にある曲の場合にYES(を包んだNSNumber)が返されます。 このクラウド上にある曲というのは、私のデバイスですとiTunes Storeで購入したがデバイスには入っていない曲が該当しました。説明によるとiTunes Matchがどうこうと書いてありますが、現在日本ではiTunes Matchが使えないので確認はしていません。 (この段落の話はiOS 7)iOSに付属のミュージックアプリでは設定項目にこれを表示するかしないかを選択するところがあり、選択した場合はデバイスに入ってなくてもクラウドにあれば一覧に表示され、再生操作をするとダウンロード(ストリーミング?)されて再生します。選択しなければ表示されません。また、クラウド曲を再生した時にデバイス内にデータが残るようで、これは設定を選択しない方に切り替えても表示されます。ところが、自作アプリ内からライブラリにアクセスし、データを取得するとこの設定に関わらず全てのクラウド上の曲が得られる(得られてしまう)ようです(もしかしたらどこかで変更が出来るかもしれない)。インターネット上から取得するとどうしてもレスポンス遅延がありますので、排除したいというときはMPMediaItemPropertyIsCloudItemがYESを返すアイテムを排除する処理が必要になります。

SilentBonusTrack申請

SilentBonusTrackというアプリを申請しました。 すがすがしい気持ちよりも、やっとここまで来たかという安堵と大きな不具合が無いようにという気持ちのほうがある。 旬らしいということであまちゃんをスクリーンショットで使わせてもらった。 SilentBonusTrackのコンセプトはタイトルから予想できる通り、「カセットでアルバムを聞く時は、各面の終わりの無音部分もそのアルバムに含まれる」というもの。 制作動機の中心がこのコンセプトです。無音部分をコンセプトにしたアプリを出したかった。ただ実際のカセットプレーヤの通りに作ったらそれ以上特別なことはなにもすることがない。せいぜいアプリのタイトルに反映するくらい。

iOSアプリ開発に関する細かいこと Objective-C編

個別に記事にまとめるほどでもないiOSアプリ開発に関する細かいこと 画像の端をにじませる Renders with edge antialiasing 画像の端をにじませる info.plistで設定する Localizable.strings NSLocalizedString(@"distanceLabel", nil); Localizable.strings "distanceLabel" = "距離"; なぜDeployment Targetの設定箇所は2つあるのか Deployment Target(アプリ動作可の最低ライン)はPROJECTとTARGETにそれぞれあり、2つあることになる。TARGETのほうは初めは薄い色になってる。PROJECTで設定するとそれに伴いTARGETの値も変わる。別にするメリットも殆ど無いと思うので、設定はPROJECTだけにすればよいと思われる。一度TARGETを何かに設定してしまうと「連携モード」に戻す手段がわからないので、「連携モード」を解除したくないなら触らないほうがいい。 Build SettingsのCode Signing IdentityとProvisioning Profile Code Signing Identity 証明書の選択。Provisioning fileではない。証明書を選べば対応するProvisioning fileも選ばれることになるので、Provisioning fileの選択と解説される場合もある。Automaticの欄にあるiOS DeveloperやiOS Distributionを選んでおけばその名前で始まるものが自動で選ばれる。 Provisioning Profile Automaticになっていれば自動で選ばれる(上で指定されている証明書とBundle Identifierを基に選ばれるのかと思われる)。 statusBarOrientation [[UIApplication sharedApplication] statusBarOrientation] viewDidLoadで正確な値が取得出来るかどうかは要調査。 複数引数メソッドの遅延処理 doubl...

iPod library access

iPodライブラリアクセスを使う上での注意点のメモです。 使用バージョン:iOS 5あるいはiOS 6 特徴 iPodプレーヤである曲を再生中にその曲を含むコレクションを設定しても曲は途切れることがない。 説明ではMPMusicPlayerControllerはMPMediaPlaybackデリゲートを実装している。このデリゲートの中でprepareToPlayはrequiredとなっているが対応してないようだ。 (追記2014/12)Base SDKがiOS5.0ではprepareToPlayでアラームが発生する。これはそのバージョンのMPMusicPlayerControllerがMPMediaPlaybackデリゲートを実装していないため。それより後のどこかのバージョンで実装されている模様。 使うプレーヤの選択 オーディオを再生できるのは一度に1つのミュージックプレーヤーのみです。ミュー ジックプレーヤーは、アプリケーションのメインスレッドでのみ使用できます。2種類あります。 iPodMusicPlayer-バックグラウンドで再生可(追記2014/12 iOS 8よりsystemMusicPlayerに変更) applicationMusicPlayer-バックグランドで再生不可 listenerの設定 ライブラリ更新 曲が変わった時 曲の再生状態が変わった時 ボリュームが変わった時 大量の曲を更新する時はライブラリ更新のメソッドがかなり頻繁によばれます。 iPod再生中にライブラリから曲を削除すると、現在再生中の曲と次の曲は再生されますが、その次の曲は再生されません。エラーも出ません。 停止状態からある曲を再生させた時に呼ばれる順番は 1アイテムチェンジのメソッド(このとき再生状態はstop) 2再生状態変更のメソッド(このとき再生状態はplay) の順です。 逆に再生状態(または一時停止)から停止させた時は 1再生状態変更のメソッド 2アイテムチェンジのメソッド の順。 再生状態と一時停止の変更では 再生状態変更のメソッド のみです。 デバイスで新規プレイリストを作成したときにもライブラリ更新のコールバックが呼ばれます。 Sessionの設定 セッションの設定がしてあると思います。...

iOS 7について

気になるのはC言語ベースのAudioSessionが非推奨になったこと。 AVAudioSessionを使え、とのこと。 以前、AVAudioSessionの一部分が非推奨になったために、アプリを作る際はAudioSessionのほうに統一した方がいいんじゃないかという内容を書きましたが、こんどはAVAudioSessionの方を推奨するようです。 他に気付いたもの AVSpeechSynthesizer AVSpeechUtterance しゃべらせることが出来る?