カテゴリー : 2014年 11月

『たのスイ』アプリ版、ひたすら審査待ち


『たのスイ』のアプリ版ですが、11月も終わりそうなので経過報告ですが、2週間ほど前に審査に出して、ひたすら審査待ちの状態です。In Reviewのまま動きません。通過すれば、公開となります。これより後に出したアプリは審査通過しているんですけどね。基準がまったくわかりません。

アプリは有料版と無料版の2つを申請しています。無料版は、1章を読むことができて、残りはアプリ内課金で購入することになります。

紙の本を購入していただいた方には、今回は、無料で読めるようになります。無料版のアプリをダウンロードしていただいて、ライセンスコードの発行依頼を送ってもらうことになります。詳細は、公開されてから説明します。

レビューのタイムラグは、何遍やってももどかしいです。

『たのスイ』への質問の答え


『たのスイ』の方、色々と質問もいただいています。初心者向けを謳っている本なので、丁寧な説明をこころがけはしました。ですが、iOSは2.0から連綿とアップデートを続けていて、プログラミングのスタイルが変わったり、歴史的な経緯があるものもあります。そういったものをこの本で説明してもしょうがないよな、という気もします。でも気になるっちゃ、気になりますよね。

そんな質問が来たので、ここでも紹介です。

質問:P177(5-2 Playgroundでテーブルを使ってみよう!)で、テーブルビューへのセルのregisterClassを実行しなくとも、なぜセルが表示されるのでしょうか?

答え:テーブルビューを使うときに、もし何の工夫もしなければ、セルは行の数だけ必要になります。ですが、もしテーブルに1000行あったときに、セルのインスタンスを1000個作るとしたら、メモリが無駄になります。そこで、画面に表示されるだけのセルのインスタンスを作り(10個程度)、それ以降はスクロールするたびに前に作ったセルを再利用します。

そのために、セルであるUITableViewCellの初期化を行うときに、init(style, reuseIdentifier)というメソッドを使います。第二引数に、再利用のための識別子を指定します。一度作ったセルを再利用するには、テーブルであるUITableViewのdequeueReusableCellWithIdentifier(identifier)を使って、セルを取得します。

これらを使うと、テーブルビューのデータソースメソッドでセルを作るときは、クラシカルなやり方ではこうなります。

var cell: AnyObject? = tableView.dequeueReusableCellWithIdentifier("cell")
if cell == nil {
    cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}

iOS 2.0ではこんな感じでした。が、その後、セルの内部に配置するビューをxibファイルを使ってグラフィカルにデザインしたい、という要求が出てきます。また、UICollectionViewというクラスも登場し、データソースのあり方をそちらに合わせたいという思惑もあったのでしょう。テーブルビューにxibファイルを登録して、それをもとにテーブルビュー側にインスタンスの作成から管理させるという発想が出てきます。そのために追加されたのが、registerNib(nib, forCellReuseIdentifier)です(iOS 5から)。さらに、クラスを指定するだけで使えるようにしたのが、registerClass(cellClass, forCellReuseIdentifier)です(iOS 6から)。

なので、iOS 8時代のプログラミングでは「テーブルビューにセルクラスを登録し、セルインスタンスをテーブルビューから取得する」という手法になります。

UITableViewCellにはいくつかのスタイルがあり、それによってはdetailTextLabelを使うことができます。ですが、スタイルはセルの初期化時に指定するので、セルクラスを登録するやり方では、それが使えません。そのためdetailTextLabelを使いたいときは、クラシカルな、セルのインスタンスをプログラム側で作成する、という手法を取ることになります。

もっとも、実際にアプリの開発を進めていくと、UITableViewCellをそのまま使うということはほとんどなく、カスタムプロトタイプを使ったりサブクラスを作ったりすることになります。なので、ここで歴史的な経緯を一生懸命紹介してもしょうがないなぁ、という気持ちもあります。しょせん、遊んでいるだけだし。

ということで書籍では、上記の説明を「テーブルに登録したクラスから作るんじゃなくて、データソースメソッドの中で自前でセルを作って初期化しよう。」という一文に収めました。

『たのしいSwiftプログラミング』アプリ版もうすぐ申請


『たのしいSwiftプログラミング』ですが、紙の書籍はおかげ様で好調で、重版が決まりました。もうすぐ入校するらしいです。重版は、Xcode 6.1およびiOS 8.1に対応すべく全部ソースコードを見直しました。

同時に、お問い合わせが多いのが、電子版について。思ったより作業量が多くて手こずっていますが、もうすぐ完成します。なので、その内容のご紹介。

『たのスイ(略した)』の電子版は、まずアプリとして出ます! つまり、アプリ版です! App Storeで売ります。なぜ、iBooksやKindleではなくアプリなのか? それは、プログラミングの電子書籍として、どうしてもやりたいことがあったからです。

まず、電子書籍としての表示方法は、リフロー型で縦スクロール型。縦にスクロールしながスイスイ読めるぜ! 節毎にページが分かれていて、スワイプで前後の節に移動する形だ。

happyswift

つまりページネーション(画面のサイズを1ページとして分割して、めくりながら読むやつ)は、やらない、と。なぜか? それは、プログラミングの本だから、ソースコードを読ませたいから。紙の本だと、どうしてもソースコードがページの途中で分割しちゃうでしょ。あれが嫌だ。電子版ならそれが回避できるぜ!

さらにリフロー型なんで、iPhoneであっても画面を横にすれば、きれいな形でソースコードを見ることができるよ。

happyswift_code

さらに!『たのスイ』ではXcodeを操作する手順をビデオとして公開している。これも埋め込んだ。解説動画を見ながら、本文のテキストを読むことができるんだ。

happyswift_video

 

画面上部に表示されているのがビデオ。その下にあるのがテキストね。ビデオ再生しながら、テキストをスクロールして読めるよ。

まだある! プログラミング解説書には、サンプルのアプリがつきものだ。その動作って、手っ取り早く試してみたいよね。でも、ビルド環境が整っていないと、なかなか動かせなくていらつくこともある。

そこで! 電子書籍だから、その場でサンプルアプリを動かせるようにした。テキスト中に、こんな感じでアプリアイコンがある。

happyswift_sample1

これをタップすると、その場でサンプルアプリが立ち上がるぞ! モーダルビューとして表示してるんだね。

happyswift_sample2

 

という訳で、プログラミングの本らしくこういったことをやりたかったので、iBooksやKindleではなく、アプリ版にしました。あと本文の内容としては、Xcode 6.1およびiOS 8.1に完全対応したし! Yosemiteにも完全対応したし(スクリーンショット全部撮り直した)! 本文の分かりにくかったところを修正、および追記もしたし! 実質改訂1.1版ってとこだね。

アプリはiPhone版とiPad版で登場。もちろん、iPhone 6およびPlusに対応。有料版と無料版(立ち読み用)で登場予定。後日Mac版も登場予定。紙の本を買っていただいた方には、何らかの方法で読めるようにする予定。iOS版かMac版のどちらかを買えば、もう片方も読めるようになる予定。

値段は、まだ公表できないですが、紙よりは安くなります。

あと、将来の話ですが、コメント機能をぜひ追加したいです。『たのスイ』の内容に関する問い合わせは、メールやブログのコメントではなく、集約できる場所が欲しいので。Cloud Kit使えば簡単に作れると思うんだ。