>

2015年9月24日木曜日

xCode7.0にしたらAVAudioPlayerの初期化処理で"Call can throw, but errors cannot be thrown out of a property initializer"というエラーが出るようになった件

エラー伝搬を無効にして良いなら下記のようにtryの後に!をつけることでエラーを回避できる。
let myPlayer:AVAudioPlayer = try! AVAudioPlayer(contentsOfURL: url)

xCode7.0にしたらNSUserDefaults.registerDefaultsで'NSMutableDictionary' is not convertible to '[String: AnyObject]'と言われるようになった件

NSUserDefaults.registerDefaultsで引数にNSMutableDictionaryのインスタンスを[String : AnyObject]にキャストして渡していたコードがXCode7.0にアップデートしたらエラーになった件。

原因は多分NSMutableDictionaryの[String : AnyObject]へのキャストが認められなくなったからと思われるので次のようにNSMutableDictionaryを使用せずに指定することで回避。
        
myNSUserDefaultsObj.registerDefaults(
            [
                "key1" : myObj1,
                "key2" : myObj2
            ]
        )

2015年8月29日土曜日

iTunes ConnectのマイAppのバンドルID(Bundle ID)を変更する。

iTunes Connectで登録したマイAppのバンドルIDはそのアプリがストアで公開される前であれば変更できます。(幾つかのサイトで変更できないといった記述が見受けられたがそれは誤りです。)
下記の通りiTunes ConnectのマイAppから当該Appを開いてメニューから その他>このAppについて を選択するとバンドルIDを変更できるダイアログが開きます。


2015年8月10日月曜日

iPython notebookでpyplotを使って表示する画像のサイズを変更する

iPython notebookで画像として可視化しながらデバッグするときに画像のサイズが変更できないで少し困った。以下のfigureという命令でfigsizeを指定することで変更できることが分かったのでメモ。
import matplotlib.pyplot as plt

plt.figure(figsize=(12,12))

iPhoneからWindows PCへの画像、動画の取り込み

iPhoneの写真、動画をWindowsのPCに取り込む時にエクプローラからやろうとすると「予期しないエラーのため、ファイルをコピーできません。」とか「エラー 0x80030001: 要求された処理を実行できません。」とか言われて困ることがある。

この回避策について色々調べてみても肝心のアップルもほとんどやる気がなくてこんなことを言っている。
https://support.apple.com/ja-jp/HT204597

結局今の時点で出来る回避策としてはiPhoneをPCに接続したときに表示される自動再生のダイアログから「画像とビデオの読み込み-Windows使用」を選択して読み込むくらいしかないみたい。その際、このプログラムを開くと出てくるダイアログの読み込み設定をクリックしてファイル名は元のファイル名のまま保存しておいた方が何かとよいと思われる。

iCloudやら容量の大きいiPhoneを買わせたいためかiPhoneで撮影した画像やら動画を外部ストレージで管理するのはかなり面倒な仕様になっている。なお残る懸念として以下がある。WindowsからiPhone内の画像の削除ができないので、仮にPCに取り込んだとしてもその後iPhone内の画像を削除するのが面倒。一括で削除するUIがない。頑張って選択して削除するとゴミ箱という名のアルバムに入るので、そこでまた削除をする。なお、ゴミ箱の中を一括で削除することは可能。
  • 今回のようにWindowsの画像とビデオの取り込みをした後に、iPhone内の画像を削除するときに一部のファイルを残したりすると次回以降の取り込みの際に、二度取り込んでしまうか不安。もしかしたら「画像とビデオの取り込み」のアプリ側で一度読んだ写真は読み込まないようフラグを立ててくれているのかもしれないがその情報もWindowsマシンを移行したら確実に消失されるので面倒なことになりそう。(詳細は未確認)
以上を踏まえて自分の運用はiPhoneで撮影した画像は全てGoogle Photoにアップロードした上でさらにWindows PC(正確にはバッファローのNAS)に保存。Google PhotoとWindows PCにコピーが完了したらiPhoneからは全て削除するようにしている。

なお、今回確認した時点でのバージョンは
iOS 8.4
iTunes 12.2.16
Windows 7

2015年5月6日水曜日

swiftからobjective-cの関数を呼び出す時にエラーになる件

swiftから複数の引数を持つobjective-cの関数を呼び出そうとすると
Cannot invoke 'func' with an argument list of type
とか
Missing argument labels
みたいなエラーが出て困った件。

原因は次の二点だったのでメモ。

  • objective-cの関数の引数の型がintの場合はswiftではInt32の変数を入力しなくてはならない。Intではダメ。
  • objective-cの関数の引数のラベルもswiftのコードで記述しなくてはダメ。
以上をまとめるとswiftでは次のような呼び方をすることでコンパイルに通るようになった。味噌はInt32に変換していることと、二つ目以降の変数の前にコロンで区切ってラベル名(この例ではmon, mday)を記述していること。
MyClass.test(Int32(year), mon:Int32(month), mday:Int32(day));

startUpdatingLocationが常にerrorになる件

ちょっと面白いアイディアを思いついたのでiOSアプリ開発に挑戦することに。
ちなみに言語はswift、iOSは8を想定。

で、さっそくGPS情報を取得するところでつまずいた。plistも編集してコーディングしてもstartUpdatingLocationで常に結果がエラーになる。

原因は下記のサイトにある通りでシミュレータにLocationの設定をする必要があるらしい。
http://shirokai.hatenablog.com/entry/swift-gps

ただし、自分の環境ではLocationをCustom Locationに設定してもerrorのままだったので一度Locationの選択でAppleを選択したりCustomに戻したりしてみたら正常に動くようになった。