お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

Build時のlogの出し方

Debug Console(ログを出すとこ)を使ってログを出すときに、

 

LLDBとかいうログの出し方と

GDBっていうログの出し方とあるらしく、

GDBだとより細かくログを見れる?ぽいです。

 

変更するにはXcode上部メニューから

Product>Edit Scheme>Debugger

で変更できます!

iOSのbeta版のインストール方法

※注意事項----------------------

OSはアップデートすると元に戻せなくなるので、

開発用で事前に入れておきたいもやApp Storeにあがってないものは

入れてからアップデートするように!

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

 

①まずはapple Developerにログイン。

②Home画面のiOS Dev centerへ行き、

 iOS6    |     iOS6.1SDK beta

 というところでbetaの方を選択すると

 XcodeとOSのbeta版たちがいるので、

 OSからアップデートしたい端末に合わせたSDKをダウンロード。

 ※機種とキャリアでSDKが異なるので、どちらかわからない場合両方DL

 (Xcodeのアップロードは色々大変なのでOSのみ)

③DL後、ファイルを解凍して、Finder内のどこかにファイルをコピる。

④最新版のiTunesで、端末を接続し、

 optionキーを押しながらiTunes上のアップデートボタンを押す。

⑤Fiderが開くので、先ほど解凍したSDKを選択する。

(「互換性がない」と言われたら、②のSDKはずれ)

⑥しばらく待ったら完了!

 

OSの最新版で自分のアプリに関連しそうな機能などは

ググると他の人がすでに情報を提供してくれてることもあるので

調べながらやるとテストも効率的★

特に設定画面まわりとかはよく見るように!

プッシュ通知

プッシュではまった。

といっても端末側の実装にミスは無かったんやけど。

 

[[UIApplicationsharedApplication] setApplicationIconBadgeNumber:-1];

[[UIApplicationsharedApplication] cancelAllLocalNotifications];

という処理を書いているのに消しても消してもバッジが復元する

という気持ち悪い現象が止まらず。

ログでは

aps = {

 badge = 1

}

っていうのを2分おきくらいに定期的に受け続けてる。

apnsのサーバーに残ったゴミが送られ続けてるのか?

でもググっても全然そんな情報出てこないぞー!

なんだこいつー!何者だー!

ていうかbadgeの実装方法についての情報ってそんな無いぞー!

消すって至ってシンプルな処理しかないやんー!(i□i)

てかなり悶絶した。

 

結局原因はサーバーから1分おきにbadge = 1という謎のプッシュを送っていたことやったけど...

それをストップさせたら無事バッジ消せたのでよかった。

(もっと早く検証してくれたら苦しまずに済んだ。つらたん。)

 

それ以外でへんだったのは、

developer centerで

→プッシュ通知の証明書発行して、

(このへんもキーたらなんたらむずかったー)

→アプリIDは無事発行できて、

→そのアプリからprovisioningファイルも無事作成して、

→デバック端末はselectAllにして、

→はい、OKー!

→無事tokenも取得できて、

「さあて、開発用端末をもう一台追加するかね!」

と追加してprovisioningを再DLしなおすと...

「Appの有効な”aps-environment”エンタイトルメント文字列が見つかりません」

 

えええええええええヽ(´c_,`)ノ;;;; 

 

まってくれ。

そんな。1台追加しただけでtokenとれんくなるとかおかしいやろ。

 

ってことでしょうがないので毎回とれなくなったら

devloper版とadhoc版とrelease版の3つのprovisioningファイルを一旦削除して、

3点セットで作り直して、

再びDL...としたら、無事復活。

どゆこっちゃ。sandBox環境だから?

てかそもそもprovisioningファイルってこんな頻繁に作り直して良いものなのか...。

このへんな挙動の原因として考えられるのは、

しいてあげるとするなら、

provisioningを作成する際に

アプリを選択するとこの上にcertifictionみたいな?作成者みたいな?(うろ覚えやけど)

欄があって、そこんとこにまったく同じ名前で2人登録者がいるんですよね。

まったく同じ名前やからどっちが本当のアカウントなのかよくわからないけど

とりあえずどっちかわからないのでSelectAllにしてますよね。

ここらへんがあやしいくさい。

まあ、とりあえずrelease版でプッシュが届くかは、

appStoreからDLするまで本番用tokenが発行されないということで

検証もできませんが、

届いてくれることを祈るのみです。...ふう。

 

 

メモ

  • カスタムクラスで機能拡張をさせたときは、プロパティで外から値をさわるのではなく、そのクラス内に値を変えるメソッドをもたせるほうが良い
  • 例えば画像を変えたいとかそういうメソッドやったら、引数に(BOOL):YES/NOとかをもたせてメソッドないでif文で分岐させれば一文で済む

 

メモ。

文字列の取り出し

iTunes Search APIを使うと

artistIDとかCollectionIDとか簡単に取り出せるんやけど、

iTunesRSSのほうからやと

ダイレクトにそれらを取り出すことはできません。

楽曲名と歌手名はダイレクトに取り出せるんやけどね。

IDプリーズ!

てことで、URLの中から若干荒技で取り出してみました∩(´∀`)∩

 

とりあえずこのURLをたたきます。

http://itunes.apple.com/jp/rss/topsongs/limit=100/json

 

すると文字がずらああぁ..!!と並んでいますね。

これはjsonなので、普通に欲しい情報を取り出すだけならば

valueForKeyで取り出して取り出して..ってやればとれます。

キーで階層を深堀していくわけです。

 

ほんで!

今回わたしは「アーティストidとコレクションidを取り出してね」

との指令を受けました。

ですがこのパラメータ、SearchAPIだと簡単に取り出せるのですが、

RSSのほうには存在しません。

ですがよお〜く見てみると、

どうやらアーティストidは

@"im:artist">@"attributes">@"href"に書かれているURLの

https://itunes.apple.com/jp/artist/kyaripamyupamyu/id448331160?uo=2

id448331160っぽい!(=ぱみゅたん)

さてさてではこいつだけ取り出さなきゃね...

きっとNSStringで何かいいメソッドがあるはずだ!!

と思って検索してみたものの...それっぽいのが...ない...

だから手順をかけて無理くり取り出してみました。

はい、どん!

// アーティストid

NSString* artistHref = [[[data valueForKey:@"im:artist"] valueForKey:@"attributes"] valueForKey:@"href"];//アーティストURL

NSArray* artistSprByID = [artistHref componentsSeparatedByString:@"id"];//"id"でまず区切る

NSString* artistFromID = [artistSprByID objectAtIndex:1];//2個目のオブジェクトにid以下が入ってる

NSArray* artistSprByQmark = [artistFromID componentsSeparatedByString:@"?"];//そっから"?"で区切る

NSString* artistID = [artistSprByQmark objectAtIndex:0];//1個目のオブジェクトに入ってるのがartistID

[musicData setArtistId:artistID];

 

componentsSeparatedByStringってのが

指定した文字のとこでばつーんと区切ってくれるメソッドということで

これでまずid以下を取り出しまして、

さらに同じ処理を書いて?以下を取り出すと、

目的の数字だけが取り出せましたヽ(´ω)ノ♪

(若干手順はふむけど&他にもっといい方法もありそうな気がするけど!)