2014年12月9日火曜日

Flaskトーク@AppleStore銀座



昨日、12/8(月)にFlask LLPでのアプリ開発についてお話してきました。

Flaskの2人で登壇するのは始めてのイベントでしたが、会場がなんと、AppleStore銀座というなんとも光栄な舞台を踏ませていただきました。

集客能力がないもので、TwitterやFBで来てー!と叫んでおりましたが、結局、100名ぐらいの参加をして頂くことが無事できました。
Retweetなどしてくれた方には本当に感謝でございます。

さて、このイベントは、コンピュータサイエンス教育週間を記念してAppleが主催で行ったものになります。



12月8日から14日はコンピュータサイエンス教育週間です。期間中Appleは各国のApple Storeで行うワークショップや様々なスペシャルイベントを通じて、コンピュータサイエンス教育を推進するCode.orgをサポートします。
 コンピュータサイエンス教育週間の一環として、Appleはデベロッパとエンジニアの方々をお招きするイベントを世界中の都市で開催します。

デベロッパーのトークイベントは、東京、シカゴ、ロンドン、ニューヨーク、ベルリン、大阪 の6箇所で開催されるのですが、その第一弾の東京の場を頂いたという次第です。

12月12日には、大阪でBASEの方がお話されますので、関西の方は是非チェックしてみてください!

数多くのデベロッパーの中からFlaskを選んで頂けたのは、女性2人で開発している という珍しさが大いにあったと思います。

女性だけでもこうやって楽しく頑張っているところがあるんだ と少しでも多くの人に伝わって、
それなら私でもできるかもーー? とか、
なんだか楽しそうだな、やってみようかしら とか、
男性が多い中やってるけど女性もいた!と励み?
になってもらえたら嬉しいなと思います。

日本でもっといいアプリ開発をする人が増えて、
「日本は技術はあるけど...デザインとか使い勝手がイマイチだよね」というこの雰囲気を払拭できたら、もう最高です!

イベントの大きな趣旨は、「コードを学ぼう」というものなのですが、私達の内容はデザインに大きく偏っていたかもしれません。
でも、いいデザインのアプリに惹かれてしまうというのは、多分女性ならではの感覚も多いに影響していると思うので、私達だから力説してしまう..という、お話ができたのではないかな と思っています。

会場に来ていただいた方、本当にありがとうございました。
ガチガチに緊張しており、お聞き苦しい点が多々あったかと思います。すいません!
「客層はいろんな人」 だったので、お話する内容が難しかったのですが、
なにか少しでも、今後のヒントになるような事があったら嬉しいです。

そしてこのイベントの内容は、どうやら後日動画として配信されるようです。
多分、公開は来年になるのではないかと思いますが、気になった方はまた見てもらえると嬉しいです。(恥ずかしいですが!)




• • •

2014年11月7日金曜日

UIデザイン

ほりうちさんブログの UIデザイナー云々 を読んでみて、そんな議論あるのか と思ったので、開発者ではあるが私なりの思いを書いてみようと思う。

UIデザインが必要か不要かと言われたら、そりゃ必要だと思う。
不要と言えるのは、コマンドラインで叩いて実行するプログラムだろう。
ただ、求めているレベルには差があり、その議論なのだとは思う。

例えば、「暖かい服が欲しい」と思った時の選択肢に、1,000円の服もあれば、5万の服もあるように。
どちらも要求は満たせているけど、使用している素材は違うし、裁縫も丁寧さも違うし、もちろんデザインも違う。
デザインというのは、ぱっと見た目の話だけでなく、着心地を良くするために立体裁断しているかもしれないし、それにより人の手でないと作業できない部分が増えているかもしれない。

ユーザからすると、5万のものがそりゃ欲しい。
その良い物が1000円で変えるとそりゃそっちの方がいい。

洋服だと値段の差は当然ですが、アプリなどのプログラムだとちょっと違う。
洋服は服を売ることによって売上になるけど、アプリはそのモノを売ることによる収入とは限らない。Yahoo BB!がルーターを無料で配ったように。


問題なのがメーカーの立場。

"いいもの"を作るにはどれくらいの時間/お金がかかるだろうか? が分からない
さらに、
"どれくらいいいもの"を自分たちで作りたいのかが分からない

そもそも、最初からわかったりしない と私は思っている。
なので、最初に概算の見積が欲しいとなる案件は、あまり力をいれようとしてない感じを受ける。

最近、iPhoneアプリをちょこっと自分用に作った。いわゆるオレオレ便利アプリ。
それは3時間くらいで完成した。

せっかくなら、それをStoreで売ってみようか と思い、人々がわかりやすい構成にするよういろいろ模索したのが、2日かかった。
ここは別画面にしようか...この2画面は1つにしようか....画面の流れはここを逆にしよう...などなど。
2日かけたが、まだ違う気がして結論は出ていない。たった3画面のシンプルアプリなのに!
(ちなみにこの時点で装飾系のデザインは全く入っていない。)

普通は複数人でプロジェクトを行うと思うので、みんなで考えるとすると、工数は 2日 × 人数 となるだろう。

さらにもっと模索するのであれば、どんどん工数は膨らんでいく。
どこまでいけば、納得するものになるのかは私にも分からない。

3時間でつくったアプリというのは、1000円のセーターどころじゃなく、ビニールシートをかぶって防寒したぐらいのものだ。10円くらいか?
でも、この10円でいい と思う人もいるだろうし、1000円かかってもいいからちょっとマシにしたいと思う人もいるだろうし、もっと払ってもいいからもっと追求したいという人もいるだろう。

これは選択肢であって、どれを選択してもアリだと思う。

ここで活躍するのはUIデザイナーなのだろう。
いろいろなパターンを知っていて、引き出しも多く、最短な提案をいくつかしてくれる。
結果、かなりの工数を削減できるし、良いモノが早く出来ると思う。
もちろん、最初から結論がでるはずはないので、その提案からみんなでドックフードを食べていくのだが。

ここで思うのは、

受け手側にもそれなりの知識/判断が必要

ということ。

「この2つのどちらがよさそうか?」の選択は簡単だが、
「ここにまだ違和感がある。まだいい方法考えられないかな?」 と言えるのは難しい。
アプリ開発だと、実際動くものを手にしてみないとよく分からないことも多々ある。
たくさんいいモノをみて、感覚を研ぎ澄ましておく必要もある。

さらにむずかしいのが、納得いくまでもっと考え続けるのかどうかという決断。
iPodを世に送り出したジョブスのように。。。

いい人を雇えば、あとはお任せしていたらOK なんてことは無い。

どうして私はいつも画面構成を考えるのにこんなに時間がかかってしまうのだろう...とよく落ち込むが、海外の良いアプリでは「 構成を変えたプロトを数十個作って端末にいれていた」という話もちらほら見た。みんな時間かけてるんだ!近道はない!
(と自分を納得させている)

「日本ではいいデザインのアプリがない」という系の話を聞くと、「日本の家電のようだな」と思ってしまう。
機能はいいのにデザインがイマイチ。
当たり障りのない白色が多くて、機能の数だけボタンがいっぱい並んでいて...。
機能部分、デザイン部分の担当者は違って、お互いの領域はプロだから口出ししあわないという雰囲気。
最初に見積もった工数以上のことはしない。という雰囲気。

”最初に期間、値段を決めて作業分担する” という、日本の下請け文化が悪影響を及ぼしているのは安易に想像できる。
発展途上のタイミングであればそれが効率がよく需要が高かったのは確かだが。

下請け文化問題は、開発業界ではもう長年言われ続けている問題。
お互いのリスクが少ない方法でもあるのでなくなりはしないのだろう。

UIデザイナーはいらない? 以外に、開発者はいらない?という話もよくある話。
実際、CMSは開発者がもういらない例ですよね。
サーバー管理者だって、レンタルサーバー借りたらもういらない。
どの業界だって一緒。
すべてのプロジェクトに、その道のプロが必要なわけでない。(お金がないならなおさら)

なにが重要で、どれだけお金をかけるといいか? というのは、最初からわかっていればみんな成功していると思う。

最初は最低限の機能を満たすことが重要になるので、デザイン系は確かに軽視されるのかもしれない。でも、それじゃ売れないなぁって分かって、あらためて重要さを実感するのかもしれない。
機能とプロダクトデザインというのは良い感じで融合が必要だと思うので、後でデザイン追加...というのは、装飾でしかなく、つまり日本家電化でしかないのだが。
ウォークマンの装飾をどう頑張っても、iPodにはならない。
(iPodはiTunesStoreの仕組みが背景にあるからこそあの形でもある)

まぁ、人によっては、売れるために、デザインでなく、もっと機能をいれたら...という発想になる人もいるだろうけど。....これまたちょっと日本家電発想っぽいですよね。

うむ。なんだか、やっぱり結論は当たり前に行き着くね。こういうの書くと...。

まぁ、少なくとも私は、
貧乏学生時代は、最安値のトースターを選んでいたけど、
今は、機能が少なく少々値段が高くてもデザインがいいトースターを選びますw


• • •

2014年10月27日月曜日

CocoaPodsで複数ターゲット指定した時の設定

iOS8のAction Extensionを試してみるため、ターゲットを

1. アプリ本体のターゲット
2. Action Extensionのターゲット
3. 本体とExtensionで共用するコードのターゲット
の3つを作成し、CocoaPodsでライブラリを指定してworkspaceを作成しました。
その際、設定でいくつか引っかかったのでメモ。


Podfile

platform :ios, '8.0'

# アプリ本体のターゲット (ImagesToPDF)
target 'ImagesToPDF' do
  pod 'LibraryA"
end

# 共用コードのターゲット (FLICommon)
target 'FLICommon' do
    pod 'LibraryB'
    pod 'LibraryC'
end

こんな感じでターゲット毎に使用するLibraryを指定できる。


xcconfigの設定

これを、pod installすると以下のようにターゲット毎のxcconfigが作成される



ターゲット指定しない時は Pods.debug.xcconfig , Pods.release.xcconfig になるけど、ターゲット指定の時は Pods-{ターゲット名}.debug.xcconfig のようなファイル名に。

これらxcconfigは、ProjectのConfigurationsで指定されるはず。


CocoaPodsで設定が変更できなかった時は、pod install時に以下の警告がでたりする。

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target `ImagesToPDF` to `Pods/Target Support Files/Pods-ImagesToPDF/Pods-ImagesToPDF.debug.xcconfig` or include the `Pods/Target Support Files/Pods-ImagesToPDF/Pods-ImagesToPDF.debug.xcconfig` in your build configuration.

この時は、ProjectのConfigurationsで違うxcconfigになっている可能性があるのでチェック。


Podsのライブラリ設定

Podsで作成されたライブラリも、
ターゲット指定してない時は、libPods.a というファイル名だが、
ターゲット指定している時は、libPods-{ターゲット名}.a というファイル名になる。

このライブラリは、Build Phases の Link Binary With Libraries に設定されている。



ビルドエラーで

ld: library not found for -lPods

...と言われた時には、
Link Binary With Libraries に、もう存在しない libPods.a が指定されている可能性があるのでここをチェック。


• • •

2014年10月13日月曜日

謎多きHealthKitのWorkouts - 1


iOS8のヘルスケア。

盛り上がりもあり、残念感もあり... という状態ではありますが、まだまだあまり見えていない機能があります。

それは Workouts (ワークアウト)。

MyFitnessPalや、Humanなどを使われた方は、Healthの許可にWorkoutsという項目があったのを気づいた方もいらっしゃるかと思います。


標準の"ヘルスケア" アプリでActive Caloriesなどが確認できますが、唯一見えない項目が、Workouts です。

Workoutsは、ランニング、ウォーキング、サイクリング、ボクシング....などの運動種類毎に消費したカロリー、距離、時間を登録できる機能です。

私の想像ですが、来年の Apple Watch リリースとともに、新たなWorkouts専用標準アプリがでてくるのでは? と思っています。
そして、そこでヘルスケアの第二の注目時期がやってくるのではないか! と。(思いたい)

そんな謎多きWorkoutですが、今できる内容を探ってみました。

まずはどんな情報を保存できるのか、クラス構成から。


Workoutsは、Stepなどと兄弟レベルでのクラスです。
Stepなどではその値(数値)を登録する単純なものですが、Workoutsでは
・ワークアウトした時間
・消費カロリー合計
・距離合計
などの値が登録出来ます。

これだけだと、イメージにしくいので、実際のWorkoutをイメージしながら考えてみましょう。


こんな感じの運動したとします。
これを、いまヘルスケアアプリで見えている情報だけで表すと、


こんな感じの情報が並びます。
Active Calories, Distanceは簡略化のためまとめて書きましたが、本来ではもっと細かい時間単位で登録する形の方がBetter。
いま、iPhoneで自動登録されているStepやDistanceのように...。多分、Apple Watchではそう入れてくるはず。

さて、この情報から、たくさん動いたという結果はわかるものの、これだけの情報では、どんなワークアウトをしたのか?というのははっきりわかりません。

そこで、Workoutの情報を加えてみます。


・何時から何時までワークアウトしたのか。
・消費した全体のカロリーはどれくらいだったのか。
などがわかるようになり、ワークアウトの全体像が見えるようになります。
言い方を変えると、Workoutsの情報は全体像のみが登録された情報になっています。

ここでポイントとなるのが、
Active Calories, Distanceなどと、Workoutsの情報を紐付けて登録ができる
ということです。
逆に言うと、紐付けて登録してくれるか、してくれないか はアプリ依存です。
※いまWorkoutsを対応しているHuman, Argusのデータは紐付けていないようです...
また、Workoutsの情報のみ登録し、Active Caloriesなどは登録しない ということももちろん可能。

実際に紐付ける処理はこのメソッドを使用します。
Workoutsの情報と紐付けて登録できる項目は、APIを見る限りは何でもOKそうな感じです。

紐付けて登録されることにより、ワークアウトの全体像が見えると、
前回のランニングでは時速○キロで走っていたけど、今回は○キロになった! とか、
前回の心拍数の増加は150%だったのが、140%になった! とか 
がわかるようになるわけですね!!

Workoutsの種類(workoutActivityType)は、HKWorkoutActivityType に定義されています。自分で独自にTypeを作成することは出来ないようです。
また、そのActivityTypeの運動強度はどれくらいか? も特に定義が無いようなので、消費カロリーなどは自分で計算する必要があります。

今回は、Workoutsで登録できる内容を見てみました。
次回は、検索する方法について書こうと思います!

• • •

2014年10月11日土曜日

iOS8 ヘルスケアが動かなくなった時

iOS8のヘルスケア(HealthKit)機能を使ったアプリいろいろ公開されてきました。
どの項目はどのアプリから読み込むようにするか? と、いろんなアプリをインストールして試している方も多いのではないでしょうか。

ヘルスケア、まだまだ本体側にバグがあり、最悪ヘルスケアの機能自体が動かなくなる場合があります。

Appleのフォーラムにもたくさん投稿があり、結構な人が発生していると思われます。

Apple Support Communities
Anyones health kit app stop working?

昨日の晩、私もiPhoneでも、ヘルスケアが動かなくなってしまう現象が発生していまいました。

・過去のデータが全て消えてしまう
・iPhone5s以上の端末でも、歩いた歩数がカウントされない
・iPhone再起動するとダッシュボードの設定内容が消えてしまう
・ヘルスケアのアプリで、歩数のデータソースを見ると、iPhoneやヘルスケアアプリの項目がなくなってしまっている

このような状態に。

きっかけは、WithingsのPulse(活動量計)のデータをsyncしてからだろうと思います。
ですがこれはアプリのせいではなく、本体のヘルスケアの問題です。
Heathと接続するアプリについて、全て発生する可能性があります。

残念ながら、こうなってしまった方は以下を試してみてください。

復旧のために試すこと

1. iPhoneをリセット

電源ボタンと、ホームボタンをアップルマークがでるまで押し続けて再起動します。
Turn your iOS device off and on (restart) and reset

多くの場合は、これで修正されるようです。
何回か繰り返すと成功した人、全てアプリを終了してからリセットで成功した人もいるので、試してみてください。
※私はダメでしたが...。

2. ヘルスケアのStepを表示して少し歩き、iPhoneをリスタート

Apple公式ページに紹介されている方法です。
If your Health data doesn't update

フォーラムをみていると、この方法で成功した人もちらほらいます。

3. 全設定をクリアする

フォーラムでは、これで成功した人がいるようです。
私は、iPhoneの設定の General > Reset > Reset All Setting をしてみましたが、ダメでした..

4. バックアップから復旧

1. 〜 3. で成功しなかった場合は、バックアップから復旧という最後の手段になります。
ヘルスケアの歩数などの情報は、暗号化されたバックアップでないと含まれないようです。

Choosing an iOS backup method (Should I use iTunes or iCloud to back up my iOS device?) より

If you want to back up your HealthKit data using iTunes, you need to encrypt your backup by selecting "Encrypt iPhone backup" in the Summary tab in iTunes. If you don't select this option, your HealthKit data won't back up.

私の場合、結局バックアップから、おかしくなる前の時間のものを選び復旧しました。


同じ状態になって困っている人のために、Restore中に書いてみまいたが、
iOS8.1になって修正され、この現象が早くでなくなることを切に希望!!!

• • •

2014年9月27日土曜日

iOS8 Health対応 FitPort リリースしました

iOS8の新機能Health(ヘルスケア)を使ったアプリ、FitPort をリリースしました!




Healthというのは、歩数などの活動量、摂取カロリーなどのフィットネス情報、体重などの測定情報をiPhoneでまとめて管理しようというもの。

いうなれば...
iOSでヘルスケア用のDatabaseを用意するから、みんなそこに入れようね。
そうしたら、いろんな情報を組み合わせて見ることもできるしね。
メーカー撤退でデータが無くなってしまうリスクもユーザに無くなるしね。
という感じでしょうか。

iPhoneのM8センサーでは、歩数(Steps)、歩いた距離(Walking +Running Distance)、上った階数(Flights Climbed) が自動的に記録されます。
さらに、Withings,Fitbit,Nikeなどの活動計を作成しているメーカーは多分対応してくる...と思うので、そうなると、さらにいろんな測定情報が入ってくるようになります。

それらの情報を、標準アプリ「ヘルスケア」でも見ることはできますが、FitPort は ”もっと見るのが楽しいもの” を目指して作ったダッシュボード系アプリです。

体重記録アプリとしてPopWeightを出していますが、これは"入力が簡単にできる"のが目的のアプリ。
でもこれからは、ウェアラブルデバイスなどで自動入力が主流だろう! ということで、見ることに目的を置いたアプリが FitPort 。

本格的に運動するわけではないので今まで測定はしていなかったけど、せっかくiPhone6をGETしたので測定結果を見てみたい... という方にもオススメです。


iOS8は新機能が多いせいもあってか、ほとんど情報がない状態の開発でした。
何が仕様でバグなのかもわからないので、想像を積み重ねつつ仕様ギメ。
さらに、フルswiftで書くというチャレンジまで追加してしまったという...

iOS8リリースに間に合うように休みなしで作りヘトヘトとした所で、まさかのヘルスケア関連アプリは一斉にリリース見合わせの処置があり、本日iOS8.0.2とともに同時リリースとなりました。

その時間がわかっていれば、あれだってこれだって追加/修正したかったのにー(笑

しかし、他のヘルスケア系アプリがまだあまりリリースされていないのか、
9to5Macの記事に取り上げてもらうという快挙!

Apps with HealthKit integration start appearing in App Store following iOS 8.0.2 fixes

それと同時に海外Pressからの問い合わせメールが複数舞い込んでいる今。
先行者メリット凄い。9to5Macの影響力凄い。

現在、上った階数(Flights Climbed)と、自転車の走行距離(Cycling Distance) を追加したバージョンをすでに申請済みです。暫くしたらリリースされるはず。

よければお使いくださいませー!


• • •

2014年9月26日金曜日

iOS8でWiFi速度低下問題の解決

iOS8で自宅のWiFi接続すると、いつの間にか速度が低下してしまう問題に直面中でした。
WiFiをOffにしてOnにし直すと一旦改善するけど、また気づくと低下状態へ...という現象。

自宅のWiFiはずいぶん昔のもので、WEPでの設定しかない。
MACアドレス制限を入れてやりくりしていたけど、いい機会だしということでルーター買い直しました。

WPA2で接続すると....無事解決!

同じ現象でなやんでいる & WEP使っている人は、是非WPAへの変更をお試しくださいな!
(いまどきWEP使っている人はそうそういないだろうけど...)


• • •

2014年9月18日木曜日

XCode6.0.1でコンパイルエラー

XCode6.0.1がでたので、バグ修正されてないかなーと思いワクワクインストールしてみたら、コンパイルエラー。

pch has been modified since the precompiled header was built ...云々と、
CocoaPodsで入れたライブラリのものがエラーになっておりました。
DerivedData削除しても解決されず。

結局以下でコンパイル通るようになりました。


1. プロジェクトClean (Shift + cmd + K)
2. Organizer > Project で該当プロジェクトの Drived Dataを削除
3. XCodeを一旦終了
4. コマンドラインから、~/Library/Developer/Xcode/DerivedData/ModuleCache フォルダを削除
5. XCodeを起動してコンパイル


DerivedData削除と、ModuleCacheを削除した感じです。
正解の手順かは不明ですが、困った方はどうぞ。
• • •

2014年8月24日日曜日

iOSの数値型

iOSでの数値型について。何回かググり直しているので、まとめてみる。

数字型の設定可能範囲

TypeMinMax
Int8-128127
Int16-32,76832,767
Int32-2,147,483,6482,147,483,647
Int64-9,223,372,036,854,775,8089,223,372,036,854,775,807
UInt80255
UInt16065,535
UInt3204,294,967,295
UInt64018,446,744,073,709,551,615

Int32 は、32bitのintと明示的に指定している形。

浮動小数点型は、
float は、有効桁数7桁。
double は、有効桁数15桁。

ObjectiveCで使える便利な整数型

Type32bit64bit
NSIntegerintlong
CGFloatfloatdouble

整数型の場合はNSIntegerを、小数点型の場合はCGFloatを使うと、実行環境によって使用する型を判断してくれる。
32bit環境ではInt32、64bit環境ではInt64のサイズが演算するのに効率が良い (のですよね?)
なので、意識せずに効率のよいサイズを選んでくれるラッパー的な存在という認識。
int, float, doubleの実際のバイト数は後述。

処理系によって変わる対応バイト数

Typearm7arm64
int32bit32bit
long32bit64bit
float32bit32bit
double64bit64bit

arm7はiPhone5の32bitのアーキテクチャ。arm64はiPhone5sの64bitのアーキテクチャ。
ビルド時、どのアーキテクチャのバイナリを作るかの指定がある。

NSInteger では、int or long を切り替えてくれるのだが、arm7では実は intとlongは同じ32bit整数型だった。
しかし、arm64の場合、longは64bitになる。
結局以下の様になる感じ?
Type32bit/arm764bit/arm764bit/arm64
NSInteger32bit32bit64bit
CGFloat32bit64bit64bit

Swiftの数字型

Type32bit64bit
IntInt32Int64
UIntUInt32UInt64
Float32bit32bit
Double64bit64bit
小数点がある数値の型推論は、デフォルトDoubleになるらしい。
CGFloatの中途半端な型でなくて、FloatとDoubleを用途に合わせてえらんでねという方式なのだと思う。
CGRectのwidthなどCGFloatだったり、NSIntegerなもののやりとりは、castしないとコンパイルエラーになってくれるので、 精度が大丈夫かを考えながらcastしていけばよさそう。

• • •

2014年8月22日金曜日

swiftのnullの扱い

WWDCで発表された新言語swift。
実際使ってアプリ作らないと分からない ということで、使い始めています。

ObjectiveCを使い始めた時に戸惑ったことの一つとして、
nullのものに対して処理を書いてもプログラムが落ちないということ。
また、違うクラス型にcastしてもプログラムが落ちないということ。
ここの部分、プログラムを落とすことができるようになっています。

変数の記述には、

(1) var name:String
(2) var name:String?
(3) var name:String!

の書き方があります。

(1) は、null は絶対設定されないのを保証する形式。
定数宣言時に var name:String = "abc"
と値を入れるか、初期化時(init)で値を入れる記述がないと、コンパイルエラーになります。もちろん、後でnull入れようとしてもコンパイルエラー。

(2)は、nullも入る可能性があるもの。
この場合、このオブジェクトに操作をするときは

name?.uppercaseString
のように ? をつける必要があります。
nameがnullだったとしても落ちません。

(3)は、初期化時はnullだけど、後でnull以外の何かが入る という時の形式。
たとえば、Storyboardで記述したUIオブジェクトをつなげているものとか。
この形式だと、
name.uppercaseString
..と?ナシで記述ができますが、もしnameがnullだったら落ちます。
nullを入れることもできます。

? で宣言している変数を、
name!.uppercaseString
と、!にすることも可能です。(Unwrap)

明確に、nullの可能性がある、無い というのがわかるので、
SDKも含め、他人のコードを呼び出すときにはとっても助かります。
(SDKのメソッドの引数は!が多い...)

自分のコードでも、
なぜ動かない? となった時、実はnullだった ということもよくあった。
違うクラス型にcastしてしまった時も、それに気づくのはcast時でなくてそのオブジェクトの変数やメソッドにアクセスした時にエラーで気づくので、どのタイミングでcast間違えた?と戻って考えないといけないこともあった。

なので、嬉しい反面、nullについては、ちょっと面倒だな と思うことも。

たとえば、UIは後回しでコードをざざっと書いてしまおう! という時。
「この変数は後でStoryboardからUI部品つなげるから、今はnullだけど、あとで繋ぐからいまはOK〜」 という感じでバーっと書くことがよくあった。

こんなとき、? で書けばよいのだろうけど、UIができた最終形では ! で書きたい。
開発途中の今は nullで落ちてほしくなけど、リリース時の最終形ではnullで落ちて欲しいという欲張りな要望です....

? で宣言すると、メソッドやプロパティアクセスする度に、?の記述が入るので、それらを後で削除するのが面倒。
! で宣言すると、開発途中だと落ちちゃうのでnullチェックのif文を入れる...としても、if文を後で削除するのも面倒。

開発途中だから暫定に入れたコードというのは消すのを忘れがちで、残ってしまうのはとっても嫌。バグの元になるし、後でコード見た時も混乱の元。
? や !は、最初から想定している指定で書くのがやっぱりいいと思う。
ということで、今、UIできていないところは、ガンガン落ちるプログラムで開発中です(笑)


• • •

2014年6月16日月曜日

iOS8で思うこと

WWDC2014では、iOS8の発表がありその内容のボリュームは大きかった。
今回は、PDFで一般にいろいろ公開されているようなので、漠然と感じたことを。

いろんな情報をiCloudに保存していくストレージの可能性が高まった...というか、
「ああ、そいういうものを目指していたのね」
「ああ、iOS7では準備段階だったからそうだったのね」 と理解できたところがある。

いろんなセッションでSecurity関連の話題が多かったのもiOS8の方針を凄く表している気がする。

今は、各サービスに情報を預けている。
TwitterやFacebookにはお友達の情報を預けているし、
Fitbitは毎日の歩数を、Withingsには体重の情報を預けている。
Amazonにはクレジットカード情報や住所などを預けている。

各サービスにてデータを悪用されていないか...攻撃を受けて情報流出しないか...は、不明。
信用するしかない。

そこで、iCloud。
各サービスの安心性をいちいち心配するよりは、iCloudにすべて管理されていて、必要な時に情報を抜き出して表示するアプリがある方がいい。

現在は、他のユーザと情報共有するためには、独自のサーバーが必要だったけど、iCloudを選択すればそれも必要ない.... というか、ユーザの立場からみて、iCloudでなく独自サーバーであるならそのサービスは使わない と判断することに今後なるかもしれない。

通販でお買い物をする時、とりあえずamazonにないか確認して、あればamazonで買う という感覚にも近い。
クレジットカード情報を分散させたくない というのもあるが、
amazonであれば信用して大丈夫だろうー
流出とか何かあったらビックニュースになるからすぐに分かるだろうー
みたいな安心感。

個人ユーザが、保存したいデータや、スマートフォンでやりたい事ってある程度きまっていて、今回発表されたHealthKit,HomeKitがその一端。
各アプリが独自仕様でiCloudにデータを保存していくよりも、どのアプリでも見たり修正したりできるように共通化しよう というイメージ。
写真についてもそんなイメージになりましたね。

特に、活動ログや体重系はずっと蓄積していきたいものなので、該当のサービスが終了されてデータも抜き出せず紛失してしまうのは避けたい。
HealthKitに登録するようにさっさと移行してしまいたい。

そういえば、4月にNikeがFuelBandの開発から撤退というニュースがあり、その理由は、iOS8のHealthアプリか? と想像に湧きましたがーーー。

勝手な想像ですが、
Nikeは「運動する人口を増やしたかった」 (=ウェアラブル端末が世の中に普及して運動しようと思う人が増えればある意味成功)だったんじゃないでしょうか。

思惑どおり、FitbitやUP、Withings Pulseなどが続々出てきたし、iOSにもM7が入り、Healthアプリまで出てきた。そして今後もHealthKitで良アプリも増えていくだろう。
結構、「これでFuelBandに投資しなくても、運動人口が増えていくね。シメシメ。」
なのかもw
どっちかというと、FitbitやUPの方が心配かも...。

そういやHealthKit, HomeKitに対応するサービス、家電メーカーの名前に日本の名前ってあったのだろうか...遅れをとってほしくないと切に思う。

データの囲い込みはなく、いろんなデータを合わせて有効的に扱えるのは嬉しいが、やっぱり、Secureな情報はAppleで管理してもらい、アプリでの悪用を防ぐ制限がある方がいい。
指紋認証でOK! のものが増えて、「いまどきパスワード必要なの?」という世の中になるといい。

「クラウド」は、単なるデータが保存出来る場所 ではなくて、こういう 端末+OS に直結したものがやっぱりよいなーー と改めて実感する。

そんなことを思いつつ、今後は
・どんなサービスを作ると便利なのだろうか。
・作ってはいけないサービスは何だろうか。
なんかを悶々とする今日このごろ。


• • •

2014年6月7日土曜日

WWDC 2014 日記 - 6日目

とうとう最終日がやってまいりました。

最終日は、午前中ですべてのセッションが終了。
ラボは16:00までOpenです。

しみじみ思いながら今日のLunch。

今日はベジタリアンをチョイス。
でも甘いケーキが付いているから、そんなにヘルシーではございませんw

そのまま帰るのは名残惜しいので、ランチセッションのNASAの宇宙飛行士の方のトークを聞きに行きました。

英語はまだよく聞き取れない私ですが、
国境を超えて...とか、一つの地球をみんなで生きているとか... という話を聞いたり、
宇宙から見えている地球の映像が、まるで脳のニューロンのように光がつながっていく感じで綺麗だなー と思ったりしているとなんだか不思議な感じになって感動してしまった。

こうやってWWDCに世界中からいろんな人種、年齢、立場の人が集まっているってすごいことだな。
普通だったら出会わない人たち。
一度も会ったことないのに、同じことを見て、同じように狂喜乱舞できる。

英語ができない私だって、狂喜乱舞できるんだもん。言語を超えているよね。
ああー、これを洗脳というのだろうかーー。




WWDC のキャッチフレーズは、
Write the code, Change the world.
なんですけど、さすがNASA。Worldでなく、Universeですよ。でかいね。

そんなことを思いつつも、トボトボ観光で出歩いてみた。
サンフランシスコは、まるで京都のように道が碁盤の目のようになっていてわかりやすい。3rd, 4th, 5th ...と順番に付いているので、これまたわかりやすい。

iPhoneを手に持って移動がちょっとこわいなーというところもあるので、
自分のホテルはどのStreetなのかを覚えておくとよさげです。

SFSOMAは工事中のため閉館らしい。残念。
だけどStoreがあったので、みてきた。
日本のものも多くてなんだか嬉しかったデス。



こんなものを買ってみたりしたw

明日は、19:10発のJL001で帰国します。
その時間であれば、最終日当日に帰っても大丈夫だったかも。

ということで、WWDC日記 終了です。
来年行く人の参考になれば、嬉しいですーー!

• • •

2014年6月5日木曜日

WWDC 2014 日記 - 5日目

木曜日。セッションも折り返し地点を過ぎました。

ホテルに戻るとすぐに寝てしまう という状態を繰り返しているため、思ったよりもまだ元気でございます。

さて、Lunch。
(その前にSessionはでてますよw)



ハム&チーズを選択。
ケーキはドキドキして食べたけど、そんなに甘くなくてホッとした。
美味しかったです。

木曜日といえばBashの日です。
午前中に、Bashに行くバンドをあげるからIDもって16時までに受付においで というpush通知が届く。
ID...そう、私達はパスポートが必要です。
Bashの日は、パスポートをお忘れなく!

そして.... 今日はGithubにお邪魔してきましたよっ



ああーー、入り口からすでにOctcat。素敵♡







ああー、あーー、かわいいよーー。
Octcatばかりに目が行ってしまいます。

もちろん事務所もとっても素敵。

入り口から、卓球台、ビリアード、カウンターバーが。
奥にも集中できる秘密部屋みたいなものとか、いろんなテーマの会議部屋とか、ジムとか。



禅ルームも。
こんな所で仕事をしてみたい! と思わせる。凄く。

帰りに、Tシャツとステッカーをもらいました。
Storeがあればいろいろ買っていこう!とおもったのですが、そういうのはなくて残念ー。

自社の技術者も大切にしているし、他の技術者のファンもいっぱい作ろうとしているんだなー とすごく感じました。

連れて行ってもらった、@tasanobu さんありがとうございましたm(__)m

そして 18:00から Yerba Buena で The WWDC Bash。
すごい人でびっくりです。
しかも寒い〜〜 暖かい格好して出かけてください。
19時くらいに向かってもいいんじゃないだろうかー と思った。
私は寒くて耐えられず、そうそうにホテルに戻りましたー。

見れなかったセッションを見よう とiPadを手に横になると、うとうとと.....
一人やと、ホテルですぐ寝てしまうからアカンですなっ

そうして夜が更け....明日に続く。

• • •

2014年6月4日水曜日

WWDC 2014 日記 - 4日目

今日でセッション開始2日目 です。
セッションでは、「その席空いてる?」という会話がやたらにいっぱいされます。

「Is this seat taken?」 みたいな感じで聞かれたら
空いていてOKだったら、 No, go ahead 
取ってある席だったら、 Yes, I 'm sorry

と答える....
と事前に日本で勉強していったのですが、

そんな綺麗に聞き取れないし、そのシチュエーションでそれ以外のことは聞かれないのだろうから聞き直すのもなんかなー とも思うので、適当に答えてます。

私が席が空いているか、聞きたい時も、
席を指さして 「Can I.. 」 とまで言うと、「Sure!」といって、通そうとしてくれます。
ジェスチャー最強ですね。

でも、こうやって過ごせちゃうから、海外で暮らしていても英語がうまくならない なーんて話もよく聞くんだろうな と納得も。

今日のLunchはTwitter社!


歴史的な建物に入っています。それはそれでまたカッコ良いですな。
入り口は結構厳重にチェック。Guestはパスポートが必須。

ご飯が食べれる場所は2フロアあって、どっちで食べても良いらしい。
メニューもそれぞれ違って、種類豊富でとっても迷う。

素敵なのはサラダ!



上記の画像の手前の銀色のボールが、私が持っているボール。
これにまず、好きな具材を入れていきます。

ドレッシングの種類を言って、このボールを渡すとグリグリ混ぜて、お皿に盛りつけてくれる。
ドレッシングも結構こってりなので、サラダだけでも十分満足するレベル。
これを社内食で食べれるなんてすごいなー。いいなー。

昨日に引き続き、今日も ayakasagi 夫妻 にお世話になりました。
本当に感謝!

そのあと、WWDC会場に戻り、セッションを聞いて終わったのは5時半。
周りをウロウロする時間と元気がある。
このタイミング、なぜか今までなかった! ということでウロウロしにいきました。


Powell St の真ん前にあるドラッグストア。
とりあえず飲み水をここで購入してからホテルに戻るという日々が続いています。



4th stをMosconeから南に少し行くとあります。
自然食品のお店なのですが、料理が量り売りで購入できたりして楽しい。
ホテルで持ち帰り料理を食べる時には、こういうお店で暖かいものを買うと多分幸せになれる。
魚介類もいっぱい並んでて面白かった。
なんか、店員さんもフレンドリー。おばあさんが買いに来てたり、子どもと店員さんが一緒に遊んでたり となんか地元に愛されている感。

ビールもいっぱいあったよー


Lunchで食べ過ぎた私は、この時点で食欲がそれほどなくーー、結局パンとヨーグルトをGET。


あと、裏切られないであろう、odwalla とフルーツセット。



Powell st 近くの Westfield Shopping Centre内にある、自然食品のお店。
Whole Foods Market とほぼ一緒なんですが、ショッピングセンター内なので、ちょと品揃え、雰囲気が違う。
スープ、ピザ、カルフォルニアロール系 などGETできます。

こういう健康志向のお店って、ビタミン剤っぽいお薬が大量にあったりしますが、日本人的にはそれって健康か?!っておもったりしますよねーw

パンに塗る チャレンジバター を買ってみたりした。
なぜにチャレンジなんだろうな と思うものの、私にとってチャレンジだし とか変なことを思いつつ選択。






Westfield Shopping Centre内にあるキッチン用品の雑貨のお店。
ここに来たのは、ヨーグルトを食べるスプーンと、バターを塗るバターナイフ がないことに気づいたから。

Bistro Farmsでチープな使い捨てのスプーンセットとかないのかなー と探すが見つからず。スプーンってなんでこんなに売ってないのだ!!
お弁当BOXみたいな箱があったら近くには、箸はスプーンセット系があるもんじゃん?日本だと。ないわーないわー。

このお店ならあるかなー と思い入店。スプーンはある。でも使い捨て系のはやっぱないのかなー とうろついていて Scoop & Spread というものを発見。



今の私にしたら一石二鳥ですよ。使い捨てじゃないけど、これを購入。
多分赤い方でScoopして、白い方でSpreadする。

これで明日の朝はヨーグルト食べますよ。

教訓としては、スプーンとかお箸とか余裕があれば持って行きましょう! でした(笑

5日目につづく...

• • •

2014年6月3日火曜日

WWDC 2014 日記 - 3日目

今日から、具体的なセッションが開始します。
朝は朝食が準備されているので、少し早めに向かいます。

まだ会場していなかったようで、Moscone前には昨日と同じように長い列が。
マジか! と思ったけど、時間になればすんなり入れました。

入って行くと、UserInterfaceのラボにはもう長い列が。
すごい。ここまでしてこのラボは聞きに行かなくてはいけないのだな。






朝食にはあま~いドーナツからシンプルなベーグルまで。
odawallaはなかったので、このジュース。これも美味しかったよ。

ご飯が提供される1Fの机は、電源、有線LANが完備されています。
興味がないセッションの時にはここに引きこもって、見れなかったセッション動画をみたりーなんてことも可。




(セッションの内容は書けないので、ここからはほぼ食べ物日記になります。)

今日のLunchはビーフをchoice。
中にお肉が入った、ラップサンドみたいなの。



女の人にしたらちょっとボリューミーだけど、若い男の人にはちょっと物足りないかも?
でも、16時ぐらいのおやつタイムには、おやつ、バナナなんかが出てくるのでしのげるはず。

コーヒー、お水は常にあります。
栓が閉めれるオレンジジュースのようなものは、お昼過ぎにはもうなくなって、缶ジュースのみ残ります。
私はコーヒーの飲み過ぎで胃を痛めてしまいました。皆様お気をつけを。

( ゚Д゚)y─┛~~は、3回のテラスっぽい所で隠れて吸えました。
多分、本当はダメなんだろうなー と思いつつも、みんな吸っているしー という理論で、隠れて吸います。
みんな吸い殻をポイと捨てていますが、私は自前の携帯灰皿でしっかりキャッチ。
中途半端な日本人の律儀さをアピール (意味不明)

SFは建物内で吸うのはNGなので、ほんとタバコを吸うのは減りました。
ホテル帰ってからとか全く吸わない。
夜にホテルの外に出て吸う勇気がでないので。


Dinnerは、久しぶりに ayakasagi さんとご一緒してきました!
Papito というメキシカン料理のお店へGO。




タコス、超ウマイ!
日本で食べるタコスのイメージとは全く違うですよ。
このお店は地元密着型の小さなお店。
一人で来て食べていく人も多いし、お持ち帰りを袋いっぱいもって買える人も。
こんな美味しい料理をいつでもお持ち帰りできるなんて羨ましいー。

SFに来て、作りたての美味しい食べ物をはじめて食べて満足&おしゃべり疲れした私は、ホテルに戻ると速攻爆睡。

次の日へ....


• • •

2014年6月2日月曜日

WWDC 2014 日記 - 2日目

WWDC 当日チェックイン

前日のチェックインには間に合わなかったので、当日チェックインとなったのですが、何時からしているのかが、ググってもわからず。
様子を見てから朝食を調達しようと、7時過ぎぐらいに向かってみると.... もう並んでいる人々。
そして、すでに当日チェックインができる!

どうやら、7:00 からチェックインできてたようです。

とりあえずチェックインを無事完了。ジャケットGET。
チェックインはPassbook上のWWDCチケットとパスポートを見せるだけでOK。
予定どおり一旦ホテル戻ろうかとおもったのですが、今並べば会場入れるかも という思いもあり悩む。

結局、近くのスタバでコーヒーとパンを購入してから、列に並ぶことにしました。
スタバで聞かれる名前。ふふ。用意してましたよ。「アビー」 です。
aqubi に近い発音でありそな名前をチョイス。

Ogawa も Hidekoも言いづらそうだからー と思って考えたのですが、WWDCの入場パスには Hideko の文字。


会場で出会った人に自分の名前を言う時には、結局このカードを見せて Hideko と言っている。
だって、この名前と違う名前を言ったらおかしいもんねー。
でもスタバでは アビーに。 Hideko は書いてくれても、読めないかもしれないし。
ヘタしたら Hide = ハイド だもんー。

もっと、短くて発音しやすくて読みやすい名前 Aya とか Miki とか うらやましいっす。

あー並ぶ前に、昨日からずっと吸えていないタバコもすってからーー とちょっと隅で吸ったら、くらーっとしてヨロヨロ...倒れそうに。危ない危ない。
サンフランシスコに住んだら禁煙しそうだわ、私。

WWDCの列に並んだのは、8時ちょっと前。

WWDC Keynote 会場入り

一人で並ぶの寂しいなー とおもっていましたが、オーストラリアの女性の方が声かけてくれてお友達になれました。
いや、私、全然英語喋れなくて、なんも意思疎通できていないのですが、会場の席も一緒に座ったり、写真も一緒にとったりしたりしてー。素敵すぎます。
英語、もっと喋れるようになりたい と思う一瞬でございました。

そんな彼女のおかげもあったのか、真ん中よりも前の横側の席をGET。
入れるかどうかーと心配していたのに、なんだか余裕でした。
来年、もし来れたら... 当日チェックインで並ぶ...このコースでよいかも。



WWDC ランチ

ジョブスも好きだったオレンジジュースはなかった。残念だよーー。

ランチBOXが、ビーフ、チキン、ベジタリアン の3種類から選べた。
とりあえず、中に入っていたケーキっぽいやつ、衝撃的な甘さでリアル震えました。
写真とればよかった。明日は撮ろうー。

1FにリリースされたものがEthernetでGETできるのが多分あったのだろう と思うのですが、Macの用意もせず並んでしまった私。
持ってればDLできたのかなー。ま、ホテルでゆっくりやろう。

デザインアワードはぶっちして、ホテルへ戻って休息。
昨日寝たはずなのに、めっちゃ眠い。うとうと仮眠したらもう夜になっていた。
セッションの内容もようやく詳細が明らかになったので、どれを出るべきかを悶々と検討。← イマココ

Labに行かなきゃWWDCに来た意味が無い と思いつつも、
今年はセッションに集中するんだと心に決める。
見たいセッションが多い...はありますが、後でvideoでも見れる。そう...一番の原因は、英語のできなさっぷりの自分にあります。

さて明日は9時から。何も問題がおきませんようにっ!



• • •

2014年6月1日日曜日

WWDC 2014 日記 - 1日目

WWDC 2014のチケットが当選してからあっという間に出発となりました。
はじめて向かう私にとって、皆様のWWDCのブログ記事情報がとても参考になったので、私もちょっと書いてみようと思います。

羽田空港から出国

日本だから、いろいろ安心ですよねw
サンフランシスコ到着後、大急ぎの予定だったので、荷物を預けるのはギリギリのタイミングにしたりしてみた。
(結局、入国審査の方が長くかかって意味なかったけど)


飛行機内

JL002便は、ボーイング787型。はじめて体験。
座席USBがついてて充電できる! USB⇔Lightingのケーブルも手荷物に入れるの必須です。
映画で、アナと雪の女王 があったので思わず見てしまった。
涙もろい私は、ラストに涙がぽろっと出てきてしまい、ちょっぴり恥ずかしい思いを。

そうそう、ゆっくり寝たい&明るいと寝れない人は、アイマスクあるといいと思います。


サンフランシスコ国際空港(SFO) の入国審査


パスポートと、飛行機の中で書いた税関申告書 とともに入国審査へGO。
私が聞かれたことは、旅行目的と、滞在日数と、はじめて来たのか? ということ。
そして、指紋をとります。指紋ははじめてとったー。こんな仕組みなのね。
親指以外をまず機械にあてて、次に親指 というのを両手やります。

パスポートの写真と一緒か見られるタイミングで前の人が、メガネを外していた。
私も、パスポート写真は眼鏡なしなのでそうしてみよー と真似をしてみた。

SFOからのBART

乗り方は、Youtubeの動画でわかりやすく撮っているくれている方がいるのでそれを参考に。
値段はしょっちゅう変わるらしいので事前にチェック。
今回は、$8.65 でした。


WWDCの前日チェックイン  

2014年では、19時まで前日にチェックインができます。
私の飛行機は、JL002便で、SFOに17:25着。
BARTでSFOから最寄りのPowell Stまではだいたい30分。
結果からいうと、チェックインできませんでした。
19:05 ぐらいにMosconeに到着したけど、もうダメーと会場から出されてしまった。

原因は、入国審査が時間がかかったため。
他の飛行機も同じタイミングで到着していて、かなーり人が多かったこともあり、ダッシュで向かったのですが、入国審査が終わったのは18:20くらい。

運が良ければ、間に合うけど、そこまでチャレンジするならもっと前につく飛行機を選ぼうね というのが教訓でございます。


寒いです

サンフランシスコは寒いから長袖の上着は必須 とよく見たので、半袖と薄手の上着のセットで持ち込んでいたのですがーー、薄手の長袖だけなんて寒い!寒い!
現地の人は慣れているんですかねー、半袖で闊歩していますが。

もっと厚手の長袖もってくるんだったー と後悔しました。
WWDC2014の参加者プレゼントは、そこそこ厚手のジャケット。
チェックイン後はずーっと着てました。あったかいーー。
セッション中も結構寒かったし、なんだか期間中、必須アイテムに。

ホテルチェックイン

とぼとぼとホテルに向かいチェックイン。

チェックインでは、パスポート、クレジットカードが必要です。

パスポートの顔写真でチェックされる時、入国審査の時と同じようにメガネ外してみたら、「はずさなくて大丈夫だよ そのまんまだから」と笑いが取れましたw


晩御飯調達

近くのスーパーでお水と、サンドイッチを調達。
クレジットカード払いとお願いしたら、そこの機械に当てろと。
Edyカードっぽく上に置くのか?と思って上においたら、スライドしろ と。
えーー? と混乱していたら、スキャンできる隙間が横にあった。
こんな所でつまずくとはーな。

そして、袋にいれてくれない。
どうやら、袋って別料金があるようです。袋いる? と聞かれることも多いとか。
袋、自分でもって行っちゃうほうが楽っぽいな、次回はそうしよう。


8時ぐらいまでそこそこ明るいサンフランシスコ。
でも9時になるとさすがに暗くなるので、それまでに外出は終えておきたいところ。
(一人なので)

晩御飯食べる頃にはすでにMosconeには並んでいる人がいた模様。
私はもうKeynoteの会場入りは半分あきらめていたので明日ゆっくり向かおうと決めて就寝。

2日目につづく...



• • •

2014年5月29日木曜日

アプリのプロモーション動画の作り方

先日、Timesheet アプリをリリースした際、プロモーション用動画 を作成しました。
どんな感じで作ったか をご紹介しようとおもいます!

作成した プロモーション動画 ↓



よいサンプルを見る


どんなものを作るといいのか? を考えるために、よいサンプルを見るのが大事ですよね。
参考にしたのはこちら。

プロのお仕事だなー という感じ。素敵です。
自分だと、そこまでクォリティ高いものが作れない苛立ちで悶々としてしまいますが、ぐっとこらえて自分でできそうなことを想像します。

ここで思ったのはテンポ良くすること。飽きないの大事。
長さは、1分ぐらい...長くても1分半ぐらい。

内容を理解してもらうのではなくて、イメージを掴んでもらう ということに集中すること。
↑これ、難しい! どうしても説明用動画っぽくなっちゃう。

操作動画はちょっとスピードアップするとよりテンポがでるかなー と考えたり。
↑ 短縮した場合は、その旨の表記がいるらしい (Appleマーケティングガイドライン 3.6)

画面をズームして見せたいものを大きくみせるのもありだなー と考えたり。

(結局自分のセンスや時間の問題で、凝ったものは全然できなかったなぁ....無念)


ツールを揃える


操作している動画を撮影 するには
  1. デジカメで、操作しているiPhone端末を撮影する
  2. 操作画面を直接録画できるツールを使う
の方法がありますが、1. であっても、画面の内容を綺麗に見せたいのであれば、2. のものも作っておいて合成したほうがいいのではないかーと思います。

「技術がない人は、良いツールが必要」
...ですが、お値段と、できる事の兼ね合いですよね。
ケチっては本来ダメなところですが、私は結局、手元にあるツール+自作ツールでカバーしました。 

Reflectior $12.99
操作している画面の動画作成にて使用。
iPhoneの画面を、AirPlay経由でMacに表示し、録画もできます。
アプリデモを見せる時にも使えるので、あって損はないものだと思う。

iMovie 無料
MacOSで使える動画編集ソフト。
動画/静止画を結合したり、トランジションを設定したり、音楽を入られます。
文字も入れれますが、位置は自由には設定できないようです。
これだけ高機能なものが無料で使えるなんて、Apple様ありがとう。

その他、買わなかったですが以下のツールもあります。

タップしたところがわかるようなマークとかも付けれるらしい。
シミュレータで動かして録画するタイプ。

Sound Stage はダウンロードできなくなっていた。
4インチには対応していないらしいし、もう開発中止になったのかな。

AfterEffect
動画職人には有名なAdobeのソフト。
撮影した動画をいろいろ加工できる(使っていないので想像)
Adobe Creative Cloudに入っているのであれば使うべし。


素材、情報を揃える


プロモーション動画の場合、少しでも素敵 に見せたいので、
背景画像や、表示する文字も画像にして用意しました。

を読んで、規約を把握し、iPhone端末画像や、AppStoreのバッチを頂きます。

ガイドラインから、
  • AppStoreのバッジは1回だけ表示する
  • ビデオの終わりに、Appleのクレジットを入れる
とのことなので、守りましょうー。


操作動画を撮影する


ストーリーに沿って、いくつかシーンを分けて別々に動画を作成し、あとでiMovieでつなぐのがおすすめです。
撮影しなおしとかも楽なので。

3.4 ステータスバー
ステータスバーがはっきりと見える場合は、バッテリー残量やWi-Fiアイコンがフルの状態であること、通信会社名が表示されていないことを確認してください。


(これ、今、守れていないので作りなおさないといけないところ... アップルさん、ちょっとまってね!)

動画の上に、ステータスバーダミー画像を載せて合成しようとしたのですが、動画にすると色味がちょっと変わってしまうようで自然に載せられず、諦めました。
真っ白 or 真っ黒 のステータスバーのアプリなら大丈夫かもしれません。

キャリアを非表示にするのは、脱獄しないとできないようで、そうなるとAirplaneモードが選択肢。
ReflectorはiPhoneとMacOSが同一Wifiにないとダメなので、設定画面で一旦AirplaneモードにしてからWifiをONにするといけそうです。
(最近、コントロールセンターでずっと操作していたので気付かなかったぁ)

シミュレータであればキャリアという文字はでるものの、実際のキャリア名は出ないので、シュミレータで撮影する方法を選択した方がよいのかも? (不明)

ということで、iPhone端末で撮影する場合は、
  • 撮影前にはiPhoneのバッテリーをフル状態にしておく。
  • Airplaneモードにしておく。(もしくは脱獄?)
を事前に忘れずに!


操作動画と背景画像を合成する


今回の動画では、背景画像 + iPhone端末画像 + 動画 + 文字画像の移動アニメーション を合成しています。

AfterEffect とかつかえば簡単にできるはず、多分!

今回はケチって自作ツールで作ってしまいましたが、
iOSのAVFoundationフレームワークを使って今回用にごりっと書いで行数にして300行くらいの小さなもの。
自由にLayerを作って重ねて、動きをつける ということがAVCompositionなどを使うと結構楽にできるようになっています。

試していないのですが、iMovieでクロマキーの合成ができるようです。

操作しているiPhoneをデジカメで動画撮影する場合、これでやるのも手かも。


iMovieで各シーンを合成する


作った動画と、静止画 をiMovieでつなぎ合わせます。
各シーンの繋ぎ目は、iMovieのトランジションを使って自然に切り替えしてみます。

3.5 トランジション
動画の場合は、フェードやディゾルブなどシンプルなトランジションを使用してください。動画では、iOS デバイスのマルチタッチ・ジェスチャーを模したトランジションを使用しないでください。
とあるので、フェードかディゾルブが無難。



AVFoundationを使って自作ツールつくったのならば、このつなぐ処理も自作でつくったらええやん? って思いました?
はい、できるんですけどもね。
静止画部分や、トランジションの長さって、いろいろ変えて、いい塩梅をみつけていくのですが、そんな作業にはやっぱりUI上で設定⇔確認の繰り返しがすぐにできるのが大事なのです。

iMovie上でmovieの書き出しをすれば、動画作成の完了です!

レビューサイトへの掲載依頼をする時、動画があるのと無いのでは大きな差があるはず。
会社で開発しているなら、やっぱりプロにお願いするのがいいと思うけど、
個人で開発していても、作ると効果大だと思うので、ぜひ。



• • •

2014年5月28日水曜日

Timesheet アプリ リリースしました!


Flask LLP から新作アプリをリリース いたしました!




Timesheet
Time Tracker for iPhone


さてさて、このアプリは、作業時間を記録していくタイムトラッカーです。

タイムトラッカーは、個人的に長年探し求め続けているもの。
会社員時代でもオレオレアプリ(ASlimTimer) を作ったりしてましたが、フリーランスになってから、より強く欲しいと思うようになってきました。
  • 作業に集中してしまい、いつも時間つけるの忘れる
  • ストップウォッチってつけ忘れるし、止め忘れる
  • 年に数回、時間をつけようと心にキメるがいつも3日坊主
ということ、ありませんか?
私はこれの繰り返しでーー。

昨年、またまた時間をちゃんとつけようと心にキメて、
手軽にiPhoneで使えるのはmustだけど、PC上でもみたり記録したりしたいなー。
でもそのサービスにデータ預ける形になって、取り込まれて、抜き出しできないとか嫌!
そうだ! (iOS or Google)カレンダーに記録していこう!

と、しばらくつけてみるとやっぱり面倒....

カレンダーへ簡単に入力できるアプリがほしい!
しかも見た目が綺麗なやつ! 

というのが、開発を始めたきっかけです。

この経緯もあり、このアプリのデータ保存先は カレンダー になっています。
iCloudカレンダーなどを使えば各端末に自動的に同期されますし、オフラインでも大丈夫。
その他、
  • アプリを消しても、カレンダーに情報は残っている。
  • カレンダーから自由にデータを取り出せる道がある。
  • (カレンダー以外の)サーバーを経由していない安心感。

という裏(?)メリットもあります。




登録方法は2種類。


時間を直接入力する方法と、ストップウォッチ機能で計測する方法。
私の場合の使い分けをご紹介。


お仕事タイム
お仕事は集中してあれこれやってしまうので、作業が一段落し、ふーーっと一息ついたアイドルタイム時に、ざっくり時間入力していくパターンの使い方をしています。

はじめに○○やるぞー! と始めても、ふっと別の情報が目について脱線してしまったり とか多いので。
脱線はだいたい30分くらいだったな とか思い出しつつ、ポチポチ登録しています。
そもそも脱線はよくないんじゃ?という話もありますが(笑

素早く目的が達せられる(=登録できる)ために、以下がこだわり。
  • 入力済み情報を見ながら、新規登録できる (前の終了時間とかみたい)
  • プロジェクト名などの事前登録なし。(すぐに入力したい)
  • 過去数ヶ月の情報から、名前の候補がでる。(Keyboard使用は最小限に)
  • 初期値は前回入力値。開始時間は前回の最後の時間に。


お勉強タイム
今、WWDCに向けて英語お勉強タイムを最近設けているのですが、こちらは脱線せず集中できるので、ストップウォッチ機能で開始してからお勉強を始めています。

ストップウォッチでは、繰り返しアラームが指定できるようになっています。
たとえば、20分に設定すれば、20分、40分、60分....と20分毎にアラームが鳴ります。
集中して作業する時間を決めてやるときとか、ストップウォッチの止め忘れとかに便利です。

私の英語のお勉強タイムは、1時間はやりたいと思っているので、繰り返しアラームを30分毎に設定して、2回アラームがなるまで頑張るっ ...という感じにつかってます。

ストップウォッチは以下がこだわり。

  • 止め忘れ防止のために、繰り返しアラームや、アプリにバッジがつく
  • 開始中は時計アイコンの芯がぐるぐる回って可愛さUP!


いろんな切り口でグラフを。


すぐに簡単に作業時間をメモれる。 というのが主目的のアプリなのですが、
やっぱり、集計してどれにどれくらい時間がかかったのかを知りたい。そしてグラフ大好き!
ということで、時間集計、パーセンテージが見れるグラフがあります。

プロジェクト毎の集計を見て、このプロジェクト利益率イマイチ! と思ったり、
タグ毎の集計をみて、メールを割く時間がすっごく多いっ と気づいてみたり。
実際の記録をみるのって改善に役立つし、楽しいですね。

もっといろんなパターンで集計してみたい とか、レポート出してみたいとか、いろいろ欲望が出て来るところ。
今後、意見を聞いて、もりっと入れてみたいところなので、使ってみての感想要望とかもらえると嬉しいです!


Timesheet は お手頃価格の 200円でございます。
よければお使いくださいませ!


最後に...

出来上がったものをみると、シンプルなUI/機能のアプリなのですが、
開発途中では、UIをごそっと変えたり、機能を追加したり、消したり...復活したり...といろいろモミモミ、ズルズル。
一つの画面の構成を考えるだけでもかなーり難しい。実際作って、動かしてみないと判断できないこともまだまだ多い。

でも、こうやってモミモミできるのも自分たちのアプリならでは! ということで嬉しかった。結局リリース日は目標より半年延びてしまいましたが。
受託だとなかなかできないですよねーー。

プロトを何十個も作って検討した というアプリの話とかをたまーに聞くけど、そんな太っ腹な開発ができるようになりたいw


• • •

2014年5月1日木曜日

AutoLayoutをもっと使う気になってきた

iOSのAutoLayout。

Appleサマがおすすめしている感じが凄くするのでバリバリ使えるようになりたいと思いつつも、メリットがイマイチ分からずボチボチとしか使っていなかった。

ステータスバーからの相対位置の指定として、topLayoutGuideが使えるのは便利だなと思いつつも、その他はAutoResizingMaskでまかなえるじゃん? と思っていたから。

AutoLayoutは、Layout処理が終わる前に任意のviewをコードから追加は出来ないし、一度設定したConstraints をコードから値だけ変更しなおしとか出来いようだし、使うの難しいなーと思っていた。

んが、なんかやっとで使うメリットが分かった気がする。

AutoLayout では、サイズをコンテンツに合わせる 事ができる。

いや、できる というより、
AutoLayoutでは、デフォルトが「コンテンツに合わせる」になる。
width, heightのConstraintsを明示的に指定すれば「コンテンツに合わせない」に変えた事になる。

コンテンツに合わせて変える...とは、
LabelやButtonの文字が動的に変わる場合がある。つまり、サイズを変える必要がある。
横幅を広げたいときもあるし、1行から2行の高さになる時もある。
そんな時に、文字の内容によってviewの幅、高さを変える事。

AutoResizingMaskでは、コード上で sizeToFit() などでサイズを指定して、位置を再設定していた。

確かにこれは嫌だった。
Storyboard,XIBを使っているのであれば、レイアウトに関するものは全てStoryboardなどでまかないたい。コードに分散したくない。

AutoLayoutを使えば、
・サイズはコンテンツに合わせて自動的に変更し、
・配置するX位置は画面の中心に
・Y位置は画面の下から20pxに
というのが、Storyboardだけの設定で完結できる。

このコンテンツに合わせる前提だと、AutoResizingMaskでは出来ない事が多い。
あるViewからの相対的な位置指定などは必要不可欠になる。
...このViewとの間に5pxの間を空けて配置する、中心に配置するなど。

これまで、英語、日本語とでレイアウトが変わる時、
Storyboard,XIBを別々にするか、コードでレイアウトを動的に設定しなおすか悩ましいときが度々おきたが、AutoLayout使うとそんな悩みが無くなる事ありそうだ。

ただ、コードでViewを作成して追加していく場合。
追加先のコンテナviewは、AutoLayoutで無い方がやっぱり使いやすい気がする。
追加するviewの中はAutoLayoutの方がよいのだけども。
混在させるのは果たしてアリなのか、無しなのか。

悩ましい。

• • •

2014年2月19日水曜日

AssetCatalogの良い点やハマリ点

XCode5から使用できるようになったAssetCatalog。
素敵!最初は全部の画像をこれに移行だ! と思ったものの、やっぱり使い分け ですかね。
アイコン、スプラッシュ画像はAssetCatalog管理でキマリかな
とはまだ思っていますが。

使ってみて、感じた事をば。

良い点

1. 画像を追加してもpbprojファイルの修正が入らない

デザイナーさんに、
「自由に画像は追加しつつStoryboard上のデザイン、修正しちゃってください!」
...としたいのですが、画像をファイルとしてプロジェクトに突っ込むと、プロジェクト構成が記述されているpbprojファイルも修正入ってしまいます。

デザイン部分/コード部分 と分けて作業していても、pbprojファイルがお互い更新が必要になってコンフリクトに。おーまいがー。

結局、「今さわってくださーい」「今さわらないでくださーい」みたいな運用になりがちでした。

だが! AssetCatalogで画像を追加する限り、pbropjの修正は入らない。
分担して並行作業しやすくなりました。

2. 何の画像があるかが一目で確認できる



あの画像の名前、なんだったけーー? という時にXCode上だけだと全部が見渡せず、Finderで探したりしていましたが、XCode上でもすっきり見えるように。

3. アプリアイコン/スプラッシュ画像のサイズが分かる

iOS6, iOS7 とバージョンが上がって幾度に増えていくアイコンのサイズ(笑
どのサイズが必要かはもはや覚えられない。


AssetCatalogでは、どのバージョンであればどのサイズがいるかを示してくれるので便利。
今後のバージョンアップでまたサイズが変わっても、追加対応してくれるに違いない!

4. 画像ファイル名とCatalog上の名前が違ってもOK

デザイナーさんが管理する画像ファイル名のルールと、プログラム上で使う名前のルールが違うこともあるはず。
Catalog上の名前と実画像ファイルの名前が違ってもOKです。

管理という観点では同じ名前の方がやりやすいですけども。



良くない点

1. UIImage#imageNamedでしか読込みができない

AssetCatalogの画像は
[UIImage imageNamed@"aaa"] 
で読み込みます。

これをつかうと画像キャッシュされてしまうので、

NSString *path = [[NSBundle mainBundle] pathForResource:@"aaa" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];

を使いたい所ですが...残念ながらできません。
AssetCatalogで設定した画像は、コンパイルされると Assets.car というファイルにまとまってしまうようです。

2. CocoaPodsで追加するライブラリプロジェクトには使えない

Aプロジェクトをつくる
BプロジェクトでAをCocoaPodsでinstall

する場合、Aプロジェクトの方にAssetCatalogを使うと画像が上手く取り込めませんでした。

解決方法わからず... 諦めてAssetCatalog使わない方向へ..。

refs:
Getting .xcassets compilation to work for development pods? #1549



ハマリ点

1. iOS6でのアプリアイコンが non pre-rendered

iOS6で実行したら、アプリアイコンに光沢(グロス)ついちゃってた ということが良く有る。iOS7で見ていると光沢は付かないので結構うっかりやってしまう。
pre-renderedの設定は、AssetsCatalog内にあるので、忘れず設定しましょう。

2. plistのアイコン設定消し忘れ

plistにある、アイコン設定
- Icon files
- CGBundleIcons~ipad
などは忘れず消しましょう。

iPhoneアプリで CGBundleIcons~ipad の設定がある + でも値は空の状態だと、
iPadにインストールした時アイコン無しになっちゃうみたいです。
設定がないなら、他の画像を使ってくれるというルールはここには無いらしい...。

XCode4時代に作ったプロジェクトだと、追加した覚えがなくてもCGBundleIcons~ipadが自動的に入っている可能性があるので注意。

3. sliceはiOS7以上だけ

sliceをみたとき、resizableImageWithCapInsets をいちいち書かなくてもよいのか!と小躍りしましたが、iOS7以上のみで使用可能でございます。
sliceしたものは、Storyboard上でもslice後の表示になるのも、とても嬉しい。

デザイナーさんも、左右上下は○pxづつ固定であとは引き延ばしで...とプログラマさんに指示しなくてもOKなので、やりやすいですな!

端末サイズが大きくなる噂もあるから、
さっさとiOS7以上のみ対応にして、sliceつかって画像を入れるようにした方が後々勝ち組になる気も...!




• • •

2014年1月23日木曜日

iOSアプリで使用OSSライセンス表記などの自動化 ※CocoaPods使用

iOSアプリで、使っているオープンソースのライブラリのライセンス表記を自動でしようというお話。

hyoromoさんのブログが分かりやすく書いてあるので、基本的なところはそちらを見て頂くとして(笑、ここでは
CocoaPodsを使っているプロジェクトの場合向けの方法を書こうと思います。

Settings.bundleを用意

Settings.bundle を作成して、iOSの設定で、アプリ設定を表示する設定をします。
ライセンスの情報は、Aknowledgements.plistを使用する設定をしておきます。
Root.plistは以下の感じ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>StringsTable</key>
 <string>Root</string>
 <key>PreferenceSpecifiers</key>
 <array>
  <dict>
   <key>Type</key>
   <string>PSGroupSpecifier</string>
   <key>Title</key>
   <string>About</string>
  </dict>
  <dict>
   <key>DefaultValue</key>
   <string>DummyVersion</string>
   <key>Key</key>
   <string>version_preference</string>
   <key>Title</key>
   <string>Version</string>
   <key>Type</key>
   <string>PSTitleValueSpecifier</string>
  </dict>
  <dict>
   <key>Type</key>
   <string>PSChildPaneSpecifier</string>
   <key>Title</key>
   <string>Acknowledgements</string>
   <key>File</key>
   <string>Acknowledgements</string>
  </dict>
 </array>
</dict>
</plist>


Aknowledgements.plistもファイルは用意しておきます。(中身なしでOK)



PodsでAcknowledgements.plistを更新

Podfileに以下を追加。
post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Pods-Acknowledgements.plist', 'Resources/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end

これで、pods install をすれば、Acknowledgement.plistを更新してくれます。
アプリで表示するとこんな感じ。


This application makes use of the following third party libraries:
の文面を変えたい場合、以下をPodfileに加えます。

class ::Pod::Generator::Acknowledgements
  def header_text
    "These great open source libraries were used in the development. "
  end
end

これで手作業でplist作成することもない。反映漏れもない。便利だ。
気軽にライブラリ追加できるってもんです。

ついでに、バージョン番号など自動化しておきたい所の設定も。

Info.plistのVersionをRoot.plistにコピー

Build Phases の Run script で以下を追加。
VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy ${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}/Settings.bundle/Root.plist -c "set PreferenceSpecifiers:1:DefaultValue $VERSION_NUMBER"

Build番号をGitリビジョンに自動更新

Build Phases の Run script で以下を追加。
BUILD_NUMBER=$(git rev-list HEAD | wc -l | tr -d ' ')
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFOPLIST_FILE"

Build番号の値の自動更新の話で、ビルドするたびにインクリメントする方法がよく見かけたのですが、 ビルドなんてめっちゃするし、その回数が見えれてもそんなに嬉しい訳でもない....
ということで、Gitリビジョンを入れてみたのですが、これも更新してコミットしたらまたリビジョン変わるわけで... だけど、ビルドの回数よりはまだよいのじゃないかな という発想で。

追記。
Build番号を、git rev-parse --short HEAD で埋め込んでいたのですが、これだと英数字が入ってしまうので、コミット回数にかえてみました。
Build番号って、Appleにバージョンアップ申請する際に以前より大きい数字になっていないといけないってものなので数字である必要がある ので。

• • •