有料プレスリリースをしてみました。みなさまごきげんいかがでしょうか。京都はもう本格的に冬の寒さでございます。前回までCloudkitを使って開発をしていた時の備忘録ブログのようになっておりましたが、結局とのところ、Cloudkitを使ってアプリを申請しますとなぜかCloudkitからデータ取ってこれまへんで。ゆうてアプリがリジェクトされてしまいました。原因不明なので、早々にCloudkitを諦め、HerokuでRailsからデータをJSONで取ってくる仕様にサクッと変更いたしました。Cloudkitを完全に諦めたわけではございませんので、また機会があればチャレンジしてみたいと思います。今回は表題の通りプレスリリースについてです。弊社初リリースアプリであるTaskPortProがリリースから3年、ようやく無料版合わせて1万本のDL数に届きそう、、ということでして、通常価格500円のTaskPortProを3.0のリリースに合わせて無料セールしちゃおう。いちどこの機会にプレスリリースとやらがどれくらいの効果があるのか、、というのを実験してみようと思い、実行に移してみました。無料セールを11/21に開始したのですが、その後に思いついたのでセール開始から少し経ってから、、ということもありこれが少し普通のパターンとは違うかもですがご容赦を。利用したのは某アプリに特化したプレスリリースの会社さんです。プランとしては、自分でリリース文章を考える(添削はしてくれる)プランと、文章もお任せのプランです。今回は自分で考えるスタンダードなプランで申し込んでみました。価格は39,800円です。これが高いのか安いのか。わかりませんが、他の会社とくらべてみてもこんなもんといえばこんなもんのようです。送付していただけるメディアの数は約50メディア。これも多いのか少ないのか謎ですが、アプリメディアに特化しているのでこんなものなのでしょう。結果としてですが、50メディアへの送付で掲載は4メディアでした。私が見逃している可能性もあるので、もう少しあるかもしれません。いうことで、プレスリリースとしての効果は今のところ少し微妙。いう所かなと思います。これはもちろんアプリ自体が新規リリースのアプリではなく、単なる無料セール、、ということも大いに関係しているかと思います。500円という少しアプリとしては高めのアプリで、今までほぼ無料セールをしてこなかった、、というのもありますが、そもそもの認知度が全く無かったので、やはりメディアのライターの方もあえて記事にしよう、、というほどのものではなかったかなとも思います。あと、タイミングの悪い事に同日に、Appleのお薦めアプリにも入っていたThingsという人気ToDoアプリが通常1000円のところを無料セールを開始していた。プレスリリース単体としては目に見える効果は無かったわけですが、無料セールを行った事自体は効果はありました。何もしていないのですが、セール初日の11/21にAppBankとExcite,Yahooのアプリのところに無料セール情報が掲載されました。こちらは、機械的にやっているのかもしれませんが、これがかなりガツンとDL数を伸ばしました。AppBankは影響が高いのでかなりの効果があったみたいです。あと、おそらく海外でも自動でセールスを掲載する系のメディアがあると見えて、DL数の半分くらいは海外からでした。いうことで、DL数のグラフを見てみましょう。いうことで、見事に11/21を頂点とした鋭角な山となっております。今まで2000本しかDLされなかったTaskPortProですが、この期間だけで2万本くらいのDLとなりました。無料セール自体は効果はある模様です。ちなみに、この鋭角な山の時は他のアプリも釣られてDL数が伸びました。無料セールはタイミングを見極めてやるべき。有料プレスリリースの方ですが、値段なりの価値は無いという判断を下すのは尚早ではありますが、どちらにしてもやはりアプリ自体の価値や魅力による、、という事なのでありましょう。大したことの無いアプリをプレスリリースでなんとか・・・!という事にはまったくならない、、という事です。素敵なアプリを開発し、そのプロモーション手段として真っ当にプレスリリースを打つ。いうのが王道なのであろうと思いました。プレスリリース自体がカンフル剤になる、、ということはまあ無いのかなとも思います。次回はroom6で出すゲームアプリ「とっとこダンジョン」の方のプレスリリースを打ってみようと思います。現時点では予約トップ10に掲載しているのみです。いまのところ、予約数はiOS/Androidで400前後づつ、、といった所。無名ディベロッパーで予約特典も無いゲームにしてはまあまあかなと思います。こちらのプロモーション施策もいろいろ行ってみて、また記事にしてみようかなと思います。ところで予約トップ10に掲載?したからかどうかはわかりませんが、各Ad会社からAd掲載のセールスのメールなどが送られてくるようになりました。営業さんもいろいろな所をチェックされているのですね。共有2014年11月14日金曜日CloudKitでページング読み込み皆様こんばんわ。京都はすっかり朝夕冷え込んできまして、紅葉シーズン真っ盛りです。いかないCloudKitさんですが、懲りずにまだやってます。いうわけで、今回はページング処理についてです。前回も書きましたが、CloudKitはCKDatabase.perfomQueryにて一回で取ってこれる行数が100行までとなってます。少ない行数のクエリでしたらコチラのほうが楽ちんですが、普通はコレでは色々困るかと思います。100件毎ページングしながら取ってくる、、という処理にするのですが、もちろん上のCKDatabase.perfomQueryでも自前でページング処理を書けば動きます。そんなの面倒くさい、、ということでCKQueryOperationの登場です。簡単なサンプルを書きます。★ここがポイント、カーソルをチェックします。カーソル状態を、クラス変数のカーソルに保持します。dbに上記のCKQueryOperationをセットします。self.db?.addOperation(queryop)}------------------という感じで、上記のようなメソッドを初期処理で呼ぶと最初のレコード100件が、そして、たとえばTableViewの下端に差し掛かった時に同じメソッドを読んでやれば次の100件を再度積み上げて行ってくれる、、、といった感じです。いまこのソースをテストしてみたら、Maxまでカーソルをフェッチしたらまた最初からレコードを繰り返し読んできて再度積み上げてくれる、、、という感じになってしまってます。今日はもう帰って晩御飯を作らないといけないのでまた次回までにバグを直します。共有2014年11月6日木曜日CloudKitハマりどころその3おはようございます。お手軽ですよ〜という顔をしておいてめっちゃ面倒くさい事連発のCloudkitさんですが、まだまだハマりどころがございます。Cloudkitからデータを取ってくる時は、CKDatabase.performQuery()を使います。こいつがちょっと曲者で、実は全件取ってきてくれません。正確に言いますと100件までしか取ってきてくれません。前まで400件取ってきてくれてたのですがいつのまにか100件になりました。実はちゃんとリファレンスにも書いてありました。instead参照-------ということで、たくさんレコードを取得したい場合やページング処理を行いたい場合なんかはCKQueryOperationを使えとの事です。こちらの使い方はまた調査してみます。次はRecordTypeのセキュリティです。いつのまにか、実機に入れたアプリからDefaultContainer以外のデータベースへの書き込みが失敗するようになりました。なんでかなーと思っていたらいつのまにかダッシュボードが下のような感じに変更されていたようです。RecordTypesの右上にSecurityという設定項目が、、、こいつのAuthenticatedのWriteにチェックをいれてやらないとPublicであっても実機からの別コンテナーへの書き込みがエラーとなるようです。★端末にiCloudの設定をしていない場合は、このチェックを入れていてもおそらくエラーとなります。いうわけで、まだまだ出てきそうですがとりあえずは読み書きは出来るようにはなっております。共有2014年10月28日火曜日CloudKitハマりどころその2お疲れ様です。前回はコンテナーという概念があるのと、あとシミュレーターでもちゃんとiCloudのアカウント登録しとかんと動かへんのよ。次はCloudKitのデータの登録についてです。Dashboardという、デブ専から行けるWebベースの画面から行います。Dashboard、CSVとかからインポート出来たりとかそんな親切機能はございません。1つ1つデータは手入れです。そんな事はやってられないので、アプリからコネコネしてデータを入れる事をやっているのです。それはなんとかなります。あとは本番環境へDeployだ!と言うところですが。Productionというボタンがあって、これでスキーマとデータを移してくれるんよねホイ?っと思ってたら、、そんなに甘くはありません。当たり前ではありますが移るのはスキーマだけでした。やって本番環境にデータを?と言うことでいろいろやってみました。Environment」を選べる画面が出て、そこでテストか本番か選べるのでした。無事2日めに突入出来そうです。前回CloudKitが全くもってクエリを返してくれないという事で難儀しておりましたが、またもやK君の力添えにて解決。ハマりポイントその1CloudKitにはContainerという概念があります。スキーマを保存する入れ物でしょうか。普通のRDBですとデータベースというレイヤーに当たる所だと思います。Extensionという組み合わせで作っていたために、CloudKit側に本体とExtension2つのContainerが出来ていました。CKContainer.defaultContainer().publicCloudDatabaseネットからかっぱらってきたこのソース、よく見るとDefaultのContainerを取ってくる用でした。"iCloud.com.subakolab.@@@@@@@@@").publicCloudDatabaseという風にソースを変更してやります。[CKRecord]self.tableView.reloadData()}これでUITableViewにレコードが表示出来るはず。やってもサーバからエラーしか返ってきません。