2014年10月28日火曜日

CloudKitハマりどころその2

お疲れ様です。

さて、前回はコンテナーという概念があるのと、あとシミュレーターでもちゃんとiCloudのアカウント登録しとかんと動かへんのよ。。というお話をしました。

次はCloudKitのデータの登録についてです。

基本的にCloudKitのテーブルを構成したりするのはCloudKit Dashboardという、デブ専から行けるWebベースの画面から行います。しかしこのCloudKit Dashboard、CSVとかからインポート出来たりとかそんな親切機能はございません。1つ1つデータは手入れです。

そんな事はやってられないので、アプリからコネコネしてデータを入れる事をやっているのです。まあ、それはなんとかなります。

で、あとは本番環境へDeployだ!と言うところですが。。CloudKit DashboardにはDeploy to Productionというボタンがあって、これでスキーマとデータを移してくれるんよねホイ?っと思ってたら、、そんなに甘くはありません。まあ当たり前ではありますが移るのはスキーマだけでした。。

さて、どうやって本番環境にデータを?と言うことでいろいろやってみました。

・リリースビルドしてシミュレータから本番にから送り込む → 駄目でした
・リリースビルドしてiPhone実機繋いでRunして実機から送り込む → 駄目でした
・リリースビルドしてipa作って実機にインスト、そっから送り込む → OK!!

実はipaにArchiveする時に「iCloud Container Environment」を選べる画面が出て、
そこでテストか本番か選べるのでした。。ちゃんちゃん。。


2014年10月24日金曜日

CloudKit解決!

このまま1日坊主で終わってしまいそうな雰囲気だったSwift挑戦記ですが、
無事2日めに突入出来そうです。

さて、前回CloudKitが全くもってクエリを返してくれないという事で難儀しておりましたが、またもやK君の力添えにて解決。

まずハマりポイントその1

CloudKitにはContainerという概念があります。まあスキーマを保存する入れ物でしょうか。普通のRDBですとデータベースというレイヤーに当たる所だと思います。

んで、今回はCloudKit + Today Extensionという組み合わせで作っていたために、CloudKit側に本体とExtension2つのContainerが出来ていました。

よく分かっていなかったのでCloudKit DashboardにてExtension側にデータを突っ込んでいたのですが、、、

var db: CKDatabase! = CKContainer.defaultContainer().publicCloudDatabase

ネットからかっぱらってきたこのソース、よく見るとDefaultのContainerを取ってくる用でした。設定の方で、他のContainerを指定してから、、










var db: CKDatabase! = CKContainer(identifier: "iCloud.com.subakolab.@@@@@@@@@").publicCloudDatabase

という風にソースを変更してやります。(@@@@@@@@@はContainer名)

そして次のソース

//
let p = NSPredicate(format: "TRUEPREDICATE")
let q : CKQuery = CKQuery(recordType: "※テーブル名", predicate: p)        
db.performQuery(q, inZoneWithID: nil) { (results, error) -> Void in
    self.texts = results as [CKRecord]
    self.tableView.reloadData()
}

これでUITableViewにレコードが表示出来るはず。。。。が、いくらやってもサーバからエラーしか返ってきません。。な。。。ぜ。。。だ。。。。

ここでハマりポイントその2




















CloudKitはiCloudにログインしていないと使えないサービスです。
(2014-11-07追記 ★ログインしなくても実機ではReadは出来るみたいです。ただし、やはり何故かシミュレーター上ではiCloudの設定は必要なようです。)

なので、、、当然iOS Simulator上でもiCloudにログインしていないと使えないのでした。。当たり前ですがこれに気づかず。。。

というわけで、これで無事データを取ってくる事が出来ました。

サーバの用意いらず費用いらずの素敵MBaaSサービスのCloudKit、これから色々活用出来そうです。ただ、DashboardがデータのImport/Exportも出来ないなど使い勝手は本当に最低限なので、そのあたりが充実する事を切に願う次第であります。

またそのうち続きを書きます。

では。。


2014年10月1日水曜日

Xcode6 + Swift挑戦記 その1

大変ご無沙汰しております社長です。

さて、やらなければいけないこと満載の最中ですが、現実逃避のために
Xcode6+Swiftでアプリを作ってみることにしました。

今回はiOS8のCloudKitとTodayExtensionを使った、モンスターストライク(©mixi)の降臨チェックウィジェットアプリを作ってみる事にしました。完全に個人的に欲しいがために作ります。

まずはXcode + Swiftで本体側のアプリをつくります。

本体側の構成は、TabViewControlerで各テーブルを操作するような感じです。なので、一覧表(TableView)と単票(ScrollView)の組み合わせみたいな感じ。

まずはTableViewに固定データを出す所からドハマり。
詳細はまたいつか書く。

次、ScrollViewでハマる。スクロールしません。
詳細はまたいつか書く。

なんやかんやで社員K君の助けにて両方解決。

さて次はCloudKitです。
はい、うまくいきません。
CKDatabase.performQueryをぶっこみますが、
errorが帰ってきます。CKErrorDomain : code:7 と。。。
なんですかcode7って。

完成は遠そうです。