プログラマー技術調査室

うだつのあがらないプログラマーが技術調査結果を掲載するブログです。

次回アプリ起動時に持ち越したいデータを手軽に保存する

iOSアプリ独自のデータ保存方法であるNSUserDefaultsを紹介します。

私を含めWindows系アプリケーション出身の開発者にとって、データ保存媒体はDBかファイルの2択ですよね。なので、この2つ以外の選択肢を想定せずに設計・開発を進めてしまうのではないでしょうか。

これは開発経験が長ければ長いほど、他の習得言語が多ければ多いほど、文献を斜め読みするために陥りがちな罠です。

swiftにはNSUserDefaultsという標準クラスがあり、これを利用すればDBやファイルを作成せずともデータの保存が可能となります。
サンプルコードは以下の通り。

// インスタンス生成
let userDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()

// キーを指定してデータを保存
userDefaults.setObject("保存情報", forKey: "KeyName")

// キーを指定してデータを取得
let getObject: AnyObject? = userDefaults.objectForKey("KeyName")
var getData: String

if getObject != nil {
    getData = String(getObject!)
}

// NSUserDefaultsの保存データを全削除
userDefaults.removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)

NSUserDefaultsでは暗黙的にXMLファイルを作成してデータIOを行っています。
メモリ上に保存している訳ではないので、端末を再起動してもデータはきちんと保存されています。

ただしXMLファイルの保存場所などは共通化されているようなのでセキュリティはゆるいです。

重要情報を扱うには不向きですが、アプリのコンフィグ情報等の保存にはうってつけですね。

ファイルをiCloudバックアップ対象外にする

この記事が最初の技術ネタという事で、テストがてら簡単なネタを。
言語はswiftです。

アプリで作成したファイルは基本的にiCloudのバックアップ対象になりますが、重要な情報を保存しているファイルなんかは端末の外に出したくないですよね。

そんな時はNSURLクラスのsetResourceValueメソッドiCloudバックアップ対象外に設定変更できます。

let filePath: String = "ファイルパス"
let fileUrl: NSURL = NSURL.fileURLWithPath(filePath)
do {
    try fileUrl.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey)
} catch {
    // エラー処理
}

やり方は以上なのですが、これ実際にバックアップされないかどうか確認の仕方がわからないんですよね(^^;

適当ですみません、多分大丈夫だと思いますので。

今後の方針です

5日目の売上が出ました。

f:id:itsearcher:20160412165936p:plain

ダウンロード数+55件、購入数+1件です。

ご購入いただきありがとうございます!

しかし先日の予想通り、課金比率は変わらずです。
さてどうしたものか・・・

 

というわけで検討しておりました今後の方針、おおよそ確定しました。

まず、マイナンバー暗号化は今後も継続して機能追加していきたいと思います。これは今後の布石というより、ご購入頂いたユーザー様への感謝の意味合いが強いです。

しかし利益の望み薄なアプリを開発し続けるのもどうかと思いますので、新たなアプリも開発していきます。

この2つの作業を合理的に進めるため、まず新アプリ開発し、開発により培われた技術をマイナンバー暗号化にも反映、随時アップデートしていく形とします。
新アプリの構想は完了しており、早速これから開発着手したいと思います。

 

続けて本ブログの方針ですが、アプリ配信ネタは本日で一段落とし、明日からはしばらく技術ネタを書いていきたいと思います。

引き続き宜しくお願い致します。

4日分の売上から思うこと

現在、配信4日分のデータが見れる状態でして、売上を分析しておりました。

f:id:itsearcher:20160410161827p:plain

ダウンロード数は+160件、課金数は+1件。

ご購入ありがとうございます!

配信3日目から ダウンロード数は下がっていますが、色々調べてみるとピーク時のダウンロード数1000件というのが破格なのだそうで、むしろ4日で約1500件というのは成功の範疇です!

 

とはいえ課金率は相変わらず100人に1人ぐらいの割合。 

残念ですが先が見えてきました。

この先もしアプリレビューサイト様に取り上げて頂いてダウンロード数がまた右肩上がりに増えたとしても、現状のマイナンバーの使用頻度からして課金率が増える可能性は低いです。

機能のテコ入れについても色々と検討中ですが、利便性を強化する機能案はあるにせよ、課金に結びつくほどの機能は思いついておりません。

考えれば考えるほど「マイナンバーがあまり使われていない」という現実が大きい。これでは機能のふくらましようがないのです。

今はまだ慌てても仕方がないのかもしれませんね。

 

やっと状況がわかりました!

アプリ配信開始から3日(4日かもしれない)、ダウンロード状況が表示されるという「Appアナリティクス」には依然としてデータが反映されないのですが、「売上とトレンド」の方にはデータが反映されておりました!

f:id:itsearcher:20160409214347p:plain

ありがとうございます!!!

ダウンロード数はおよそ1300件!そこから購入して頂いたのは14件!
内1件は私自身が課金したものなので正確には13件!
およそ100人に1人の割合でご購入いただいた計算となります!

ご購入いただいた皆様、本当にありがとうございます!!

配信開始3日、各アプリサイト様にもレビュー依頼したばかりでろくに宣伝もできていない状況から考えると、これはまずまずの出だしですよ!

 

それと同時にアプリの弱点も見えています。

アイコンのうさぎのおかげか、はたまた名前がわかりやすいおかげでしょうか、マイナンバー暗号化は妙に注目度の高いアプリとなっているようですが、課金率はさほど高くありません。

これはひとえにアプリの機能が少ないためでしょう。

私自身、配信前から気になっていました。
機能的にはマイナンバーを登録して見るだけ。
暗号化処理が複雑なので販売価格以上の手間はかかっているのですが、それが表に出て来ない。アプリの凄さがユーザーに伝わらないんです。

かといって機能を充実させようにも、現状のマイナンバーの使われ方としてはこれ以上の発展はさせようもなく、今後のマイナンバー制度の展開にあわせて機能追加させるぐらいしか思いつきません。

 

アプリサイト様へのレビュー依頼と並行して、何かユーザー様の購入意欲を後押しするような付加要素を考えてみようと思います。

 

レビューがつきました!

アプリにレビューがつきました!!

f:id:itsearcher:20160406183634p:plain

否定的な内容ですが、どうでもいいです!
ダウンロードして下さった方がいるのですね!!

しかし詐欺よばわりだけは問題です・・・
できれば削除したくないので説明がてらレスをつけようと思ったのですが、レスが付けられません。開発者本人はレビューできないのでしょうか・・・?

とりあえず以下の文章をアプリの説明欄に追加しておきました。

 

個人情報流出に関して】

本アプリは扱う情報の性質上、登録された情報を密かに外部へ送信するような、悪意あるアプリではないかと疑われる方もいらっしゃると思います。
この疑念に対する私の弁明は以下の通りです。

・個人情報収集目的のアプリはApple社による審査を通過できません
・本アプリが外部と通信を行うのはアプリ内課金時のみです
・もし私が情報収集を目的とするならば本アプリを完全無料で配信します

以上の内容をご理解いただいた上でなお疑念をお持ちの方は、本アプリをご利用になるべきではありません。
情報管理において正しい姿勢であると、私も思います。

 

ここで特筆すべきは

・個人情報収集目的のアプリはApple社による審査を通過できません

です。

今回レビューいただいた方の思うようなアプリはAppleの審査を通りません。
審査を通らないということは、AppStoreで配信できないということです。
マイナンバー暗号化」は審査を通過してAppStoreで配信されています。

レビューいただいた方、ならびに記事を読んでいただいている方には、以上のことを覚えて頂ければと思います。

 

【4/9追記】
私のレビューも反映されました。
レビュー投稿から反映までかなり時間がかかるようです。


Appアナリティクスが・・・

 Appアナリティクスが見れるようになりました!

f:id:itsearcher:20160408095252p:plain

ぅおおおおおおおい!!!1

ダウンロードされないどころじゃねえ!!!
AppStoreを見た人すらいねえよ!!!

すごいテンション下がります。
下がりすぎて、朝っぱらから自虐記事でブログ更新して正気を保とうというレベルです。

でもおかしいですね一昨日にテストとして私自身がダウンロードとアプリ内課金やってますしAppleからも領収書が届いてましたしブログで宣伝もしたからさすがにPV0件はおかしいですよねこれはまだデータが反映されてないんですようんきっとそうです(ジョン太夫)

ここはCatchApp様のキニナル!ランキングを見て正気を保ちましょう。
もはや唯一の癒しの地です。この御恩は生涯忘れません。

f:id:itsearcher:20160408100121p:plain

うわああああああ!!!
ワンピースに並んで、ロマサガの下だとお!?
おいらロマサガだいすき!パリィ!

 

とりあえず貴重な思い出は作れたようです。