アプリ【StackOne】最新バージョン 1.1 リリース「さくさく投稿」

2014年4月7日月曜日 | Published in | 9 コメント

このエントリーをはてなブックマークに追加

エバーノート投稿アプリ【StackOne】の最新バージョン 1.1 がリリースされました。



今回の目玉はいくつかありますが、その一つは『オフライン対応』です。以前のバージョンではサーバへの送信が終わるまでは次の入力ができなかったのですが、送信部分を非同期に改良することで送信後に待たされないサクサク投稿が可能になりました。

バージョン 1.1 の内容


  • 投稿画面のデザインを一新
  • オフライン投稿に対応
  • URLスキーム対応
  • バグ修正

新デザイン


投稿画面のデザインを一新しました。


多少なりとも以前のバージョンに慣れた人には申し訳ないのですが、使い勝手を改良するにはどうしても必要と判断して思い切って変えました(クレームが来るのは覚悟しています x_x 。。

最大の変更理由は『ルール』の切替を簡単にできるようにする為です。以前までルール名はナビゲーションバーに表示していましたが、このバージョンから下のツールバーへ移動しました。ここを左右フリックするとルールが切り替えられます。以前のレイアウトのままでの切替も考えたのですが、ナビゲーションバーのタイトルをフリックするというのはどうも感覚的ではないし、片手持ちの時に遠くて指が届かず、試行錯誤の末に真ん中のツールバーへ配置することに決めました。送信ボタンも合わせて下へ移動して一番押しやすい場所に配置しました。代わりに従来下のツールバーにあった写真やリマインダをナビゲーションバーへ配置してあります。写真をよく使っていたユーザの方は慣れるまで使いづらいかもしれません(私自身がそうでした)。


オフライン投稿


投稿は一旦送信ボックスに入り、オンライン時に自動的に送信されます。




送信ボックス導入によってオフラインだけでなくオンライン時も非同期な送信が可能になりました。これによって比較的大きな画像があっても送信を待たされることが無い ”さくさく” 投稿が可能になりました。

実装の話を少しすると内部では自作のキューライブラリを使っています。

このライブラリはいわゆるキュー(FIFO)の簡易ライブラリで、特徴的なのはアーカイブ可能なオブジェクトを渡すと処理が終わるまでディスクに保存しておいてくれるところです(永続化)。投稿が実行されると投稿内容を保持するモデルクラスをこのキューへ入れて、メインスレッドではすぐに次の投稿入力画面に切り替えます。一方別スレッドで動く処理がこのキューを監視していて、諸条件(オンラインなど)が揃ったらサーバへの送信を自動的に開始します。処理が終わったらキューから投稿を削除して、次の投稿モデルを取り出します。

また送信ボックスはちょっとしたミニアニメーションを仕込んでいて増減の様子がさりげなくわかるようになっています。ここのアニメーションには Canvas というライブラリを利用しました。

このライブラリは良く出来ていて用意されているビュークラスの上にアニメーションしたい画像等を配置すれば移動やズーム、フェードイン・アウトなどの動きを簡単につけることができます。アイコンやボタンなど主にコントロール系のパーツでユーザの目を引きたい時で使うと効果的だと思います。StackOneでは送信ボックスに投稿が入った時に ZoomOut、送信が終わった時にMorphを使っています(どくんどくん、と少し波打つように見える)。


URLスキーム


このバージョンから URLスキームに正式対応しました。テキストおよびルールの指定が可能です。
書式 jp.lakesoft.StackOne://text=テキスト&rule=ルールID
ruleパラメータは省略可能です。

URLはルール設定画面で取得することもできるので、この機能を活用してみて下さい。




その他


StackOneの特徴はなんといっても『ルール』です。『ルール』については別に説明ページを設けたのでもし興味を持ったらこちらを読んでみて下さい。




それと連絡事項が1件あります。頻繁に投稿するとエバーノートの1時間当たりの投稿上限に達して送信に失敗する場合があります。
エラー内容:
Code=19 "Operation denied because the calling application has reached
 its hourly API call limit for this user."

送信BOXに投稿が溜まってしまうことになりますが、この場合はしばらくしてから再送信してみてください。この課題はエバーノートの仕様であるため変更はできないのですが、アプリ側で少しでも改善できるよう検討中です。


- - - - - - -
エバーノートへの投稿がもっと楽しくなる新世代投稿アプリ【StackOne】を是非お試し下さい。







アプリ【StackOne】ルール解説

2014年3月14日金曜日 | Published in | 2 コメント

このエントリーをはてなブックマークに追加

先日リリースした StackOne の新機能「ルール」がちょっとわかりずらいので解説記事を書きました。興味のある方は是非参考にしてください。

ルール


ルールは投稿の振る舞いを決める為の設定です。
例えば…
・投稿を1日ごとにまとめる
・投稿ごとのヘッダやフッタをカスタマイズする
・タイトルやノートブック・タグを設定する
ルールを使えばこんなことができるようになります。

ルールはユーザが自由に追加して設定することができるので登録したルールを切り替えれば用途に合わせた多彩な投稿が可能になります。


登録したルールはこんな感じで選べます。


文章を書いた後でも投稿直前まで切替ができます。


ローテーション


ルールの中でも一番独特なのが「ローテーション」。ローテーションは新規ノートを作成するタイミングの定義になります。


ローテーションには、毎時・毎日・毎週・毎月、あるいは所定回数(例えば10回)が設定できます。

例えばローテーションの単位を1日にするとこんなイメージになります。

その日の投稿はすべて1つのノートに追記されていきます。毎日0時(※これは変更可能)になるとローテーションが発生してそれ以降の投稿は翌日のノートへ追記されるようになります。ローテーションは1時間・1日・1週間・1ヶ月を指定することが可能です。

ローテーションは時間以外に回数で指定することもできます。次はローテーション条件を10回にした時のイメージです。

タイトル・ヘッダ・フッタのカスタマイズ


タイトルやヘッダ、フッタのカスタマイズがルールのもう一つの特徴です。約40種類からなる予約語が利用できます。


試しに日時と住所(一部)を設定してみましょう。


すると投稿後はこんな感じになります。


ノートのタイトルは通常初回投稿時の1行目になりますが、ヘッダ・フッタと同様に予約語を使ってカスタマイズできます(例:日記 %date)。また予約語 %top を使えば1行目+日付みたいな定義も可能です(例:[%date] %top → [2014/03/14] かくかくしかじか...)。


いかがでしたか?ルールを使った投稿に興味を持ちましたら是非お試し下さい。

今週末までリリース記念セール中です→100円
(残り日数あとわずか)


参考サイト


子育てでStackOneを活用しているとのこと。0歳児がかわいい ^^




週間アスキーの iPhone PLUS へ開発者投稿として寄稿しました。





アプリ【 StackOne 】をリリースしました

2014年3月8日土曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

Evernote投稿専用アプリ
【 StackOne 】をリリースしました
新機能『ルール』を活用した多彩な投稿が
特徴のアプリです。iOS7完全対応。


基本機能


起動するとすぐに書き込めます。写真撮影もOK
撮った写真は背景にうっすらと映ります。

リマインダーにも対応

と、ここまではよくある機能。
 StackOne の最大の特徴は
次に説明する「ルール」にあります。


ルール


『ルール」はツールバーの右側のボタンから呼び出します。


ルール一覧
歯車アイコンをタップすると設定画面が開きます。


「ルール」とは投稿ごとの "振る舞い" を決める設定です。

以下にルールで設定可能な項目を見て行きます。


まず「ローテーション」は追記の振る舞いを定めます。
"毎回"なら常に新しいノートへの投稿になり
"毎日"なら1日分の投稿を1つのノートにまとめます。
回数の値や、毎日ならその時刻といった細かい設定もできます。

たとえば毎日の設定にして投稿するとこんな感じ。

1つのノートにその日の投稿がまとまります。
ヘッダ・フッタはカスタマイズ可能(後述)。

設定に基づいて投稿は1つのノートにまとめられます。
所定の条件を満たすと自動的にローテーションが行われ、
新しいノートへの追記が始まります。
ユーザが手動でローテーションを実行することも可能です。

次にノートカスタマイズ。タイトルには置換キーワードが
使えて、日付や場所などの情報を使うことができます。

投稿ごとにヘッダとフッタ、それに本文の
ひな形(テンプレ)も設定することができます。
追記モードを変更するとツイッターのタイムラインのような
新しい投稿が上に来る順序で追記していくことも可能です。


ノートタイトルとヘッダそしてフッタには
% で始まる置換キーワードが利用可能。
キーワードは投稿時に所定の値に自動変換されます。

位置情報と住所情報もあります。


標準では「新規ノート」と「今日」の2種類が用意されています。
前者は通常の単発投稿に、後者は1日分の投稿をまとめる
ライフログ的な利用に適しています。
さらにユーザ独自のルールを自由に追加することも可能です。

なおプリセットルールを削除することはできません。

その他の機能


ノートブックとタグの選択画面。基本ですね。
履歴も利用できます。

テキスト用のチェックボックスとリストはカーソル位置に
関わらず行頭に挿入されます。また既に行頭にある場合は、
チェック外れ←→チェック付きと切り替わります。さらに
改行すると新行の行頭にもチェックやリストが付くので連続
して入力する場合も便利です。
左右フリックでのカーソル移動にも対応。

設定画面ではデフォルトのヘッダ・フッタの定義の他、画像関連の設定が可能。
画像サイズはオリジナルサイズのほか、160px〜1280pxまで。

利用シーン

思いついたアイディアの走り書きはもちろん、工夫しだいでこんな使い方も。

・自分専用のつぶやきやライフログとして
  思いつきを投稿していけばそれが自動的に1日分にまとまります。
  写真もつければシンプルなライフログに。
  位置情報ももちろん付いてます。
  追記モードを逆にすればツイッターのタイムライン風にもできます。

・勉強会やセミナーのメモ、会議の議事録下書きに
  ローテーションなしのルールを作っておきます。
  そこへセミナーで気になったことをどんどん投稿しましょう。
  終わった時にはセミナーメモ集が自動的にできあがり。
  (最後に次回用に手動でローテーションしておきましょう)

・毎週、毎月の記録に
  ライフログは週ごとにまとめても良いですね。毎週のローテーションを作り、
  ヘッダに曜日を入れましょう。月単位で記録するものがあれば
  毎月のローテーションも使えます。

・投稿のひな形として
  よく投稿するノートブックやタグを毎回設定のルールに割り当てておけば
  投稿のたびにノートブックを指定する煩わしい手間が省けます。
  さらに本文のひな形(テンプレ)も設定しておけば、
  定形的な投稿もワンタッチで作れます。


注意事項


最後に注意事項など

・オンラインのみ対応(オフラインでは使えません)
・送信時にノートブック・タグが変更できるのはローテーションが「毎回」の時だけです
・送信したものは編集できません
・ヘッダ、フッタ等の変更が適用されるのは次回投稿からです
・撮影した写真には位置情報が埋め込まれます
・リマインダは最後の設定が有効です。また外すことはできません。
・追記対象のノートがゴミ箱に捨てられた場合、ゴミ箱内のノートに追記されます。
・追記対象のノートが完全に削除された場合、追記ではなく新しいノートが作成されます。


セール情報


今ならリリース記念セール中です(100円)。
興味を持たれた方は是非試してみて下さい。




- - - - - -
(関連アプリ)下書きとテンプレが使いたい方はこちらをどうぞ。




Resource Bundle の作り方と CocoaPodsでの配布

2014年2月11日火曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

Resource Bundle とは画像やXibを所定の形式(.bundle)でまとめたもの。複数のファイルを1つにまとめられる他、ファイル名の名前空間を分離するのにも使える。用途としてはライブラリで使う画像や文字列(Localizable.strings)などを Resource Bundle にまとめて、ソースコードと一緒に配布する場面などで使われる。実際 CocoaPodsではライブラリ(のリソース)の配布形態として Resource Bundle を推奨している(Podspec Syntax Reference/resources)。

今回は Xcode で Resource Bundle を作りそれを CocoaPods で配布する方法を紹介する。
なお前提として既に Xcode のプロジェクトが存在するものとする。今回はそこへ Resource Bundle 作成用のターゲットを追加する。

※説明で取り上げているライブラリは実際に下記で見ることができる。
lakesoft / LKDateUtility
上記ライブラリでは日付フォーマットを plistファイルとして、各言語用のメッセージを Localizable.strings として添付する。今回はこれらのファイルを Resource Bundle化する。

1. ターゲットの作成


まず Resource Bundle 作成用のターゲットを新規に作成する。
iOS用には Bundle作成のテンプレートが用意されていないので OS X のものを使う。

Product Name に拡張子 .bundle がついたものが実際のファイル名となる(例では LKDateUtility-Resources.bundle となる)。


2. ターゲットへリソースを追加


ターゲット用のフォルダが作成されるので、そこへ Resource Bundle に含めたいファイルを追加する。
例では LKDateUtility-Resources 配下に LKDateTemplate.plist と Localizable.strings (English/Japanese)を追加している。追加する時はターゲットのチェックを入れておくこと(そうでないと後で空の Bundle ができてしまう)。


3. Build Settings を編集


SDK設定が OS X になっているので iOS に変更する(Latest iOS)。

次に Bundle のビルド先設定 Per-configuration Build Products Path を変更する。
デフォルトでは下記になっている。
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
これを Resources へ変更する。

実体としての Resources フォルダも作成しておく(プロジェクトフォルダの直下)。


4. ビルド


ビルドすると Resources フォルダに LKDateUtility-Resource.bundle が作成される。

ファインダで右クリックして「パッケージの中身を見ると必要なファイルが揃っているのが確認できる。


5. 作成した bundle をライブラリ本体へ追加


作成できたものをライブラリ本体のターゲットへ追加する。
これでライブラリのソースコード(開発用プロジェクト)から参照できるようになる。開発用プロジェクトの依存ターゲットに指定しておけば、開発時に自動的に bundle をビルドできる。

github へ push すると普通のディレクトリとして表示される。


6. podspec へ bunlde 設定を追加


resource に書く。

ここまでで配布の仕組みは完成。このライブラリを利用するアプリ側で pod install/update すれば .bundleファイルも取り込まれてビルド時にアプリケーションパッケージ内に配置される。


その他


最後にライブラリ内からこの Resource Bundle 内のファイルへのアクセス方法について。これらのファイルは NSBundle 経由でアクセスできる。
NSString *path = [[NSBundle mainBundle] pathForResource:@"LKDateUtility-Resources" ofType:@"bundle"];
    NSBundle *bundle = [NSBundle bundleWithPath:path];

    // plist の読み込み
    _keywords = [NSArray arrayWithContentsOfFile:[LKDateUtilityBundle.bundle
                          pathForResource:NSStringFromClass(self) ofType:@"plist"]];

    // ローカライズ文字列の取得
    s = NSLocalizedStringFromTableInBundle(@"key", nil, bundle, nil);



- - - -
ここまで Resource Bundle を作る方法をくどくどと説明したが、実はもっと簡単に作る方法もある。
リソース管理には*.bundleがおすすめ
ファインダで .bundle ファイルを作りその中にファイルを詰めるだけでいい。特に凝ったことが必要なければこちらでいいかもしれない。


参考情報)
Resource Bundles

iOS Library With Resources

人気の投稿(過去 30日間)