月別アーカイブ: 2015年11月

iOS swiftのCoreDataをバージョン管理するために必要なAppDelegate.swiftの変更

swift+Xcode7でiOSアプリの開発をやっていて、こんな大事なことがどうしてもっと分かりやすいところに書いていないのだろうと思ったので、自分のメモ代わりにここに書いておく。

アプリの中でデータモデルを定義してmanagedObjectとして扱っているとき、アプリの機能を増やしていくと、どうしてもデータモデルの定義(RDBでいうとテーブル定義みたいなもの)を変更する必要が出てくる。

そこで〜.xcdatamodeldファイルを選択した状態で、Xcode の Editor メニューの Add Model Version… をクリックして、データモデルの新バージョンを作成する。デフォルトでは同じファイル名で末尾に半角スペースとバージョンを示す数字が2から始まって付加され、新しい〜.xcdatamodeldが、元の〜.xcdatamodeldファイルの子供のファイルとして自動生成される。

そして新しく作成された〜.xcdatamodeldファイルの方で、データモデルを変更し、親の〜.xcdatamodeldファイルを選択した状態で、Xcodeのウィンドウの右端のプロパティーの Model Version の Current で新しい方のファイルを選択すればよい。

このようにデータモデルをバージョン管理化した後、の話である。

このとき単に 〜.xcdatamodeld ファイルで Entity (RDBで言うテーブル) に Attribute (RDBで言うカラム)を追加し、対応する 〜+CoreDataProperties.swift ファイルに @NSManaged var 〜という具合に、追加した Attribute と同名の変数を追加して対応させるだけでは、コンパイル・エラーになってしまう。

実は、さらに Appelegate.swift (プロジェクト作成時にXcodeが自動で作成するファイル)内の lazy var persistentStoreCoordinator 関数の内部で NSPersistentStoreCoordinator の addPersistentStoreWithType メソッドを呼び出している部分を、下記に示す、変更前、変更後のように書き換える必要があるのだ!

変更前
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)

変更後
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

NSpersistentStoreCoordinatorのインスタンスであるcoordinatorのaddPersistentStoreWithTypeメソッドの4つめの引数 options: に、2つの要素からなる配列を記述する必要があるということ。

これらは NSPersistentStoreCoordinator クラスの定数として定義されている。

一つは NSMigratePersistentStoresAutomaticallyOption で、Store Options 定数の一つとして String 型で定義されている。

もう一つは NSInferMappingModelAutomaticallyOption で、Migration Options 定数の一つとして String 型で定義されている。

これら2つのオブションをキーとし、値を true とする Dictionary 型の引数を options に渡してやると、初めてエラーなしでコンパイルでき、CoreData のデータモデルが自動的にバージョンアップされるようになる。

参考にしたのは以下のページ。

iOS Swift入門 #171】CoreDataのDataModelアップデートのため、マイグレーションする(LightWeight Migration)

Apple社の CoreData の lightweight migration についての公式文書を読んでも、上記のページにも、具体的に AppDelegate.swift 内で addPersistentStoreWithType メソッドを呼び出している部分の options を変更すればよいとまで書かれていなかったので、かなり困った。

正直iOSアプリの開発は、Apple社の公式ドキュメントにコーディング事例が全く無いので、英語で stackoverflow.com を調べまくらないと前進しない。そのあたりが Microsoft の開発者向けチュートリアルなど、公式ドキュメントのバカがつくほど親切な点との大きな違い。

やっぱり Apple ってエリート主義のにおいをプンプンと漂わせてますねぇ。それ自体が良いことだとも、悪いことだとも思わないけれど。

安倍政権の放送法についての誤解と「この国民にしてこの政権あり」

BPO(放送倫理・番組向上機構)がNHK番組のやらせ疑惑をめぐって、高市総務相が放送に介入したことを批判したことはご承知のとおり。

どうやら安倍政権は、放送法をわざと、意図的に、曲解しているらしいので、以下、かんたんにご説明。

放送法第四条、放送事業者に政治的公平性を求める条文の前提は、放送法第一条。

放送法第一条、放送の不偏不党、真実及び自律、表現の自由の確保を求める条文の前提は、日本国憲法第二十一条。

日本国憲法第二十一条は、表現の自由と検閲の禁止。

憲法は主権者(つまり国民)が、統治権力の権力乱用を制限するもの。

つまり憲法第二十一条は、「統治権力は、国民の表現の自由を制限したり、検閲してはいけない」という意味。

要は、国民の表現の自由に「統治権力は介入しちゃダメ!」という意味。

それを元にした放送法第一条も、「統治権力は、放送事業者の放送の不偏不党、真実及び自律を確保し、表現の自由を制限してはいけない」という意味。

要は、放送事業者の放送に「統治権力は介入しちゃダメ!」という意味。

それを元にした放送法第四条も、「統治権力は、放送事業者が自律的に政治的公平性を確保することを制限してはいけない」という意味。

要は、放送事業者が自律的に政治的公平性を確保することについて「統治権力は介入しちゃダメ!」という意味。

なのに安倍政権は、「統治権力は、放送事業の政治的公平性をチェックする権力を持っている」と意図的に曲解している。

もし安倍政権の放送法解釈が正しいのであれば、その前提となる放送法第一条も「統治権力は、放送事業者の不偏不党、真実及び自律をチェックし、そうなっていない場合には、表現の自由を制限する権力を持っている」という解釈になってしまう。

そうすると、憲法第二十一条と完全に矛盾する。

つまり、安倍政権は安保法制の問題でも同じことが言えるけれど、意図的に日本国憲法の性質を根本的に曲解している。

憲法はもともと統治権力の権力を制限するために、歴史上、考え出されたものなのに、それを、統治権力が国民の権利を制限するために存在するものだと、意図的に曲解している。

憲法は主権者である国民が、統治権力を縛るために考え出されたしくみなのに、安倍政権はそれを、統治権力が主権者である国民の権利や自由を縛るための原則だと、意図的に曲解している。

意図的に曲解しているのでなければ、安倍政権は自分たちが放送法について、憲法と完全に矛盾した解釈をしていることを分かっていないことになる。

いずれにせよ、そういう安倍政権を選挙で選んだのは、主権者である国民。

安倍政権が憲法について完全な曲解や誤解をしているのだとすれば、それを許している国民の方が、そもそも自分たちの「主権」をまったく理解していない証拠。

まさにこの国民にして、この政権あり。

安倍政権のような憲法観が許されつづけるとすれば、日本という国は、だんだんと中国っぽい、統治権力が国民の自由を制限して当然という国に変わっていくだろう。

大阪府民、大阪市民も、今回のダブル選挙で、どちらかというと「統治権力は強くて頼りになる方がいい(主権者である国民の自由は制限されてもかまわない)」という方向に傾いたようだし。

やっぱり、まさにこの国民にして、この政権あり。

たぶん日本のサラリーマンは、首相のことを、会社の社長くらいに思っているのだろう。国家においては、社長は自分たち国民自身で、首相は単なる業務執行役員であるにもかかわらず…。

0ABJ型IP電話規制緩和パブコメ期間終了:今後050型IP電話の競合はLINE電話か?

0ABJ型IP電話の規制緩和について、総務省の情報通信審議会が2015/09/30~10/29の1か月間パブリックコメントの募集を行っていたが、結局コメントは2件だけだったようだ。

その2件は総務省の下記リンク先PDFファイルで読める。

「事業用電気通信設備規則の一部を改正する省令案等に対して提出された御意見及び御意見に対する考え方」(総務省HP)

一人はソフトバンク宮内CEO、まさに今回の規制緩和の「恩恵」を受ける当事者。当然、規制緩和に賛成する意見なので、審議会はとくに反論していない。

もう一人は個人で、0ABJ型IP電話の品質要件のうちパケット損失率の規制緩和の部分に反対する内容。もしかすると既存の0ABJ型IP電話業者か従来型固定電話業者(NTTやKDDI)の関係者かもしれない。

この反対意見に対して審議会は、パケット損失率を緩和しても音声評価実験の結果等から品質に問題ないと反論している。

結果、審議会としては規制緩和が適当だと結論づけている。

審議会はこの結論を2015/11/10に総務省に報告しており、総務省はこれにこたえて「速やかに規定の整備を行う予定です」と発表している。

「事業用電気通信設備規則の一部改正に係る情報通信行政・郵政行政審議会からの答申及び意見募集の結果」(総務省HP 2015/11/10)

ここからは個人的な推測だが、今回の規制緩和の省令が施行されれば、0ABJ型IP電話は今まで以上の伸び率でシェアを高めるだろう。

以前ご紹介したとおり、0ABJ型IP電話の利用者数はここ10年ほど急速に伸びており、2014年すでに従来型0ABJ固定電話の利用者数を超えているからだ。

そして050型IP電話は「法制度にもとづく品質や信頼性の保証がない代わりに、低コストな電話」という位置づけが強くなるだろう。

その結果、050型IP電話は今までのように0ABJ型IP電話と競合するのではなく、一般消費者向けのSkypeやLINE電話のような、電話番号ではなくユーザ名でつなぐインターネット電話と競合するにようになると思われる。

そしてそれほど通話品質を期待しないのであれば、わざわざ050の電話番号を月額数百円の費用を支払って取得せず、固定電話ではなく、スマートフォンをつかって、ユーザ名でつなぐLINE電話のようなインターネット電話を選ぶだろう。

あるいは、携帯電話会社が最近提供し始めている通話し放題の料金プランで、正規の080番号、090番号で通話することを選ぶだろう。

どちらにしても050型IP電話は非常にニッチな用途しか残らないだろうと思われる。