『たのしいアプリプログラミング 〜 Swiftで始めよう!』公開開始!


icon512  icon512

大変お待たせしました。『たのしいアプリプログラミング 〜 Swiftで始めよう![有料版][無料版]』のApp Storeでの公開が始まりました。11月の上旬に申請したから、1ヶ月近くかかりましたよ。

このアプリ『たのしいアプリプログラミング 〜 Swiftで始めよう!』は、10月に発売された紙の書籍『たのしいSwiftプログラミング』のアプリ版です。なんでタイトルが変わっているかというと、紆余曲折がありまして。オリジナルのタイトルだとAppleの審査が通らなかったので、変更しました。「Swift」がAppleの商標だからですね。なので、この語を副題に移しました。

このアプリは、プログラミングの解説書を電子で読むための読みやすさを追求して、あえて電子版ではなくアプリ版という形にしたものです。主な特徴は、

  • 縦スクロールのリフロースタイルなので、ソースコードが読みやすい。iPhoneを横にすれば、長い行もきれいに表示されるよ。
  • サンプルアプリを、アプリの中で動作させることができる。その場ですぐに、動作確認できるよ。
  • Xcodeの操作を解説したビデオを再生できる。解説ビデオを見ながら本文を読むことができるよ。

あともちろん、最新のXcode 6.1に対応済みです。紙の書籍を出したときに、ここが一番泣かされたところでしたね。さらに、紙の書籍と比べると、結構あちこち書き直しています。質問があったり、分かりにくいかな、と感じたところを、手を入れています。自動レイアウトのとこなんかは、全面的に書き直してしまいましたよ。

アプリは、有料版無料版の2つの形態で配布しています。有料版は、購入したらすぐ全部読めます。無料版は、1章まで無料で読めます。それ以降は、アプリ内課金で購入してください。購入しちゃえば、どちらも内容は同じです。

あと、紙の書籍を購入していただいた方々。こちらの方々には、無償で全部読めるようにします。これは、一度書籍を購入したら、電子の形態のものは、どこでも読めるようにすべきだろう、という弊社の方針に則ったものです。で、その手順なんですが、まず無料版の方をダウンロードしてください。そうすると、設定画面に「ライセンスコードを発行する」という項目があるので、そちらを選択してください。あとは、そこに書いてある手順の通りに進めてください。

そして、大事なお知らせ。アプリの価格ですが、紙の本が2,800円(税抜き)だったのに対して、アプリの方は、1,800円です。1,000円安い。さらに、今日から二週間、12/2524まで公開開始記念セールを行います。1,400円になります。紙の本に対して、半額です。

ようやく公開にこぎ着けましたが、『たのスイ』は、まだ終わりじゃないです。これからどんどんバージョンアップします。検索機能はすぐに付けますし、コメント機能も実装中です。さらに、Mac版や本棚タイプのアプリも登場します。そして、『たのスイ2』の執筆も開始しています。もちろん、質問やコメントが付けば、本文はどんどん更新していきます。一回出したら終わりではなく、育っていく本を目指しています。

ということで、『たのスイ』をよろしくお願いします。(こんなにブチ上げちゃって、だいじょうぶかな……)

『たのスイ』アプリ版、リジェクトくらう


審査に提出していた『たのスイ』アプリ版、ようやく動きがあったと思ったら、リジェクトくらいました。泣けます。

リジェクト理由は主に2つ。まず、「製品のタイトルにAppleの商標が入っている」。「Swift」のことですね。iBooks Storeの方にSwiftの名前が付いた本が色々と上がっていたので大丈夫か、と思っていたら、App Storeではダメでした。

しばらく悩んだ後、『たのしいアプリプログラミング 〜 Swiftで始めよう!』に変更しました。ということで、いきなりですが、アプリの名前が変わりました! 『たのしいアプリプログラミング』です! でも、略称は『たのスイ』のままで。

もう1つのリジェクト理由は、「ただの本はiBooks Storeで販売しろ」。単純に本をアプリ化したものは、App StoreじゃなくてiBooks Storeでやれ、ということですね。

もちろんiBooksは検討したんだけど、サンプルアプリを内部で動作させるとか、ストリーミングムービーを見ながら読めるとか、iBooksでは実現できない機能を実装したからアプリにした、ということを説明。この説明が受け入れられるだろうか。

という説明書きを加えて、再提出へ。バイナリは変更しないで済みました。

これで通るかなー。もし通らなかったら、Kindleで販売するか、それか書棚アプリへ転換するか、ってとこかな。

Xcode 6.2でまたSwiftのAPIが変わるかも


『たのスイ』アプリ版は、いまだ動き無しです。

先日公開された、Xcode 6.2 beta + iOS 8.2 beta。Watch Kit対応がメインのベータ版ですが、こいつでもSwift関連を試してみました。

そうしたら、またAPIが変わっているところがあったよ。iOS 8.0から8.1になったときも、SwiftのAPIが変わって書籍の対応にてんやわんやだったけど。8.2でもまたそういうことがあるかも。まだベータだから分からんけど。

まぁ、変更っていってもオプショナルの「?」が付いたり消えたりする程度なんだけど、コンパイルが通らなくなるからな。自分のコードだったらちょっと書き換えれば済む話だけど、書籍に載っているコードだとそういう訳にはいかない。あぁ、もう、ひどい話だ。

でもアプリ版なら、あらかじめ対応したコンテンツを用意しておいて、Xcode GM公開と同時に更新すればいい。電子って素敵。紙の書籍の方はどうしようもないけど、アプリ版への無償移行パスを用意しているから、それで勘弁ね、ってことで。

ほんと、これからの技術書は、電子版がないとどうにもならないんじゃないかな。

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


『たのスイ』のアプリ版ですが、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使えば簡単に作れると思うんだ。

『たのしいSwiftプログラミング』正誤表


『たのしいSwiftプログラミング』ですが、正誤表準備できました。

正誤表/サポート:たのしいSwiftプログラミング[iOS 8&Xcode 6対応]

普通の誤植やミスと、Xcode 6.1というかiOS 8.1への対応を記述してあります。iOS 8.1になったとき、多くのCocoa APIのオプショナル型が変更されたため、こういった事態になってしまっています。

ビルド時にエラーが出た場合は、こちらを参照してください。

たのしいSwiftプログラミング発売、さっそく正誤表や電子版のことなど


久しぶりに新しい本を書きました。『たのしいSwiftプログラミング』です。昨日、10/26に発売になりました。

『たのしいCocoaプログラミング』(略称たのココ)に続く、たのしいシリーズです。新言語Swiftを使ったプログラミング入門書になっています。ターゲットとなる読者は、いままでまったくプログラミングの経験がない人。プログラムって何? というゼロの状態から、最初のアプリを組み上げるまでを説明します。

たのしいシリーズの特徴は、独特な語りかけるような文体で書かれていること。技術書らしからぬ読み口で、挫折せずに、最後まで一気に読ませます。

で、出したのですが、本に載っているサンプルが動かない、という状況が発生しています。これがですね、本の内容はiOS 8の正式版が出た時点ですべて検証したんですよ。校正して校了したのが10/8くらい。ふー、やれやれ、終わったー、と思っていたら、10/20にiOS 8.1が登場しました。まぁ、0.1のアップデートだからマイナーなバグ修正だよね、と思ってたら、何を考えたのかSwiftのAPIを変えてきやがりました。んな、アホな!

8.0から8.1のアップデートで、いままでコンパイルが通っていたSwiftのコードが通らなくなりました。APIの変更といっても微細なことで、オプショナル型が一部変わったんですね。あの、「!」とか「?」ってやつね。小さな変更でも、一箇所でもコンパイル通らなくなれば惨事になっちゃうよな。ベータのときもしょっちゅうオプショナル型変えていたから、嫌な予感はあったんだけども。

ということで、10/27に発売となったこの本は、登場した時点でコンパイルに失敗するコードが掲載されることになってしまいました。新しい言語なので仕様が固まっていないのはよくあることなんですけど、8.0から8.1で変更かけてくるのは納得いかないなあ。APIリファレンスの変更も追いついていないし。正直、憤りのあまり、銀座のApple StoreにいってiPhone 6 Plusを全部曲げてこようかと思いました。

サンプルや正誤表の方は、いま出版社さんとやり取りして準備してもらっています。少しお待ちください。明日中くらいにはなんとか。(追記:正誤表準備できました。http://www.bnn.co.jp/errata/7173/

このままってのもよろしくないので、電子版を準備しています。まずは、融通が利くアプリ型で。電子版は、iOS 8.1への対応、Yosemiteへの対応、いくつかの記述の追加などを加えた、rev.1.1的なものになります。

そうすると、紙の本を買っていただいた方に不利益が生じるので、特別価格か無料で提供できるよう、調整しています。問題になるのは、紙の本を買ったということを、どうやって判断するかですね。特に仕込みをしてなかったからなぁ。本の写真を撮ってTwitterにアップしてもらおうかな。

ちょっとしばらくバタつきそうですが、最新環境のキャッチアップして、継続的に更新できる環境を整えたいので、少しお待ちください。

iOS 8およびiPhone 6に対応した『大辞泉』3.0.1登場


daijisen_icon

 

iOS 8およびiPhone 6に対応した『大辞泉』3.0.1がリリースされました。新機能はこんな感じです。

  • iOS 8に対応
  • iOS 8のアクション機能拡張に対応。Safariから大辞泉で検索を行うことが可能
  • iOS 8のキーボード機能拡張に対応。他アプリから手書き認識キーボードを使用することが可能
  • 検索画面のユーザインタフェースを改良。見やすく、アニメーションをともなった分かりやすい表示を実現
  • 画像画面で、サムネイルの表示サイズを変更可能
  • 辞書データを更新。最新の時事用語など2,200語を追加、総項目数27万2,400語
  • 大辞泉プラスでは、3,500語を追加、大辞泉プラスの項目数は7万1,000語。
  • 「あなたの言葉を辞書に載せよう。2014」キャンペーンの結果を収録

ぱっと見て気づくのは、見た目を変更しました。それぞれの項目が、もうちょっと独立した感じになりました。

daijisen3_141014

詳細画面に遷移するとき、アニメーションもついたよ。

あと、iOS 8の新機能に対応して、手書き認識キーボードがカスタムキーボードになりました。これで、他のアプリでも手書き認識のキーボードが使えるようになりました。

なので、キーボードを表示させる方法が、いままで検索フィールドの右隣のボタンでやっていたのを、システムから追加する形に変更しました。システムの設定画面を開いて、『大辞泉』のキーボードを追加してください。

『大辞泉』3.0リリース時に問題発生、現在3.0.1を申請中


daijisen_icon

大辞泉の最新バージョン3.0リリース時に問題が発見されました。現在、一時的にApp Storeから削除している状態になっています。ただいま3.0.1を申請しておりますので、ご迷惑をおかけしますがいましばらくお待ちください。