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になって修正され、この現象が早くでなくなることを切に希望!!!

• • •