2015年10月21日水曜日

kAudioFormatAppleLosslessの型が変わったみたい

勉強がてらSwiftでアプリ開発してる時の話。
AVAudioRecorderで録音をしたいと思い初期化のサンプルを探した。

辞書型で設定を渡すと書いてあったが、
Xcode7.0.1ではエラーが出てしまう。
SOFによると原因は赤字の部分のようだ。
※参考(http://stackoverflow.com/questions/32509565/how-to-resolve-type-of-expression-is-ambiguous-without-more-context-for-an-audio
var recordSettings = [
            AVFormatIDKey: kAudioFormatAppleLossless,
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey: 2,
            AVSampleRateKey : 44100.0

        ]

kAudioFormatAppleLosslessがIntからInt32/UInt32になったそうです。
Int32はNSNumberにブリッジされるために起きていました。

以下のようにIntにすればエラーは無くなります。
var recordSettings = [
            AVFormatIDKeyInt(kAudioFormatAppleLossless),
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey2,
            AVSampleRateKey : 44100.0

        ]

細かい変更で出回っているサンプルが動かないことは他にもありそう。
学習コストはまだまだかかりそうだ。

2015年10月19日月曜日

軽自動車の名義変更まとめ

友人から軽自動車を譲り受けるとこになり、
名義変更の手続きは自分でやろうと思い代行は頼まなかった。

友達に教えてもらった手順が若干違って三度手間になってしまったが、
ようやく終わった。いい勉強になったのでまとめる。

今回名義変更にいった場所は「軽自動車検査協会東京主管事務所多摩支所」っていう場所です。味の素スタジアムの近くにある。

■概要
譲渡元「府中市在住の友人」
譲渡先「小金井市在住の俺」
譲渡物「軽自動車」

■必要な書類
・旧車検証(友人の名義のままでOKなので、友人から車と一緒にもらう)
・住民票(俺が役所またはコンビニで発行)
・自賠責保険証明書(だいたい車検証一式と一緒に入ってるはず。自分の名義じゃなくてもいいです。その車に自賠責保険があるかという確認だけをするそうです。)
・プレート(今回は同じ管轄内なので必要ありませんでした。管轄が違うと必要かもしれません。)
・申請用紙(現地で貰える。今回は友人が用意して先に署名、捺印したものをもらった)
※友達の印鑑を借りてくるか、事前に申請用紙をもらって友人に記入、捺印してもらった方が便利だろう。

■費用
無料だった。
念のため、ついでに警察署で車庫証明も取っておきました。
車庫証明発行に500円かかりました。

わからなければ、入ってすぐのカウンターの人に聞けば教えてくれる。
(ちょっと無愛想な人もいるけど概ね優しい人たち。)

用紙の記入をする際は住所を番号で書かなければいけないので、
それだけ事前に調べていけばよい。
住所コードは下記のURL先で調べることができるので活用してください。
http://www.kodokensaku.mlit.go.jp/motas/

どちらも待ち時間はほぼなく、
順調にいけば1時間もかかりません。
移動時間の方が長いくらいです。

もうすぐ車検切れなので受けなければなりません。
ユーザ車検とやらに行ってみたいと思います!

2015年10月16日金曜日

iTunesConnectアカウントの不具合?

私のAppleデベロッパーアカウントをabc@efg.jpだとする。

知り合いのデベロッパーの内部テスターとして、
abc@efg.jpあてに招待メールをもらう。

招待メールからアクティベイトする。
※そもそもアクティベイト画面がバグる。回避方法はmain.jsを書き換えて再読み込みすればいける。

自分のアプリが管理したくなったので、
その後、内部テスターを解除してもらう。

しかし、iTunesConnectに何度ログインしても、
はじめよう画面(初期の)が表示されてしまいます。

メンバーセンターへは正常にログインできるし、
ライセンスの有効期限は来年まである。

どうにもならなくなったのでアップル側サポートへメール。
1営業日以内には返事が来ました。返事は以下のような概要。
「あなたのアカウントを確認しました。内部テスターの解除も確認しました。
アカウントを調整したので再度サファリから正しいアカウントでログインしてください。」

言われた通りにする。

ログインすると、なんかアクティベイトに似た画面が出たので、
チェックして先に進むと画面が真っ白になった。

あ??と思ってリロードを何回かすると通常通りに戻った。

明らかにiTunesConnectの不具合だと思うのだけど、、、
他に同じような現象に遭遇した方はいるのかな。。

2015年10月7日水曜日

iOS9でHTTP通信できなかったので理由をメモ

LOVETOHOという拙いアプリを公開しています。
AppStoreで「toho」って検索すればトップにでます。

iOS9対応に重い腰を上げてやったのはいいが、
iOS8の頃と違っていろいろ不具合出ちゃう。

HTMLパースしかしてないアプリなのに。。。とほほ

そもそもhttpリクエストでHTMLを読み込むところでコケる。
iOS9からATS(App Transport Security)なるものがデフォで有効になっているせいだ。
そう、もう非セキュアなHTTP通信させないぜ、ということだ。
詳細はここを参考にしてください。
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/

無効にすることもできるが、アプリ審査で弾かれるかもしれないという
噂がネット上に漂ってて。。。ゲロ吐きそう。

でも、対応は意外に単純でしたのでご紹介します。
特定のドメインとHTTP(S)通信をしますって宣言して、
どういうセキュリティレベルで通信しますってちゃんとplistに書いておけば良い。
もちろんHTTPSに対応してないサーバや、バージョンや暗号スイートが違うなんてザラ。
だから通信先のサーバではこれを許してねとかっていうのを明記していけばいいらしい。

世の中の流れ的にHTTP通信は撲滅の方向なのが身にしみた。
いろんなアプリが影響受けそう。

iOS9、Objective-CでHTMLParserを使っていたら文字化け起こした

何時間もかかってしまったが原因を特定できました。

HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。

が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。

パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。

実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。


NSString *enc = (__bridge NSString *) CFStringConvertEncodingToIANACharSetName(cfenc);
とするようにして
_doc = htmlReadDoc ((xmlChar*)[string UTF8String], NULL, [enc UTF8String], optionsHtml);
というように書き換えるとうまくいく。

文字化けっていやだね。
Githubのissueに出しておくかな。

と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34