私のAppleデベロッパーアカウントをabc@efg.jpだとする。
知り合いのデベロッパーの内部テスターとして、
abc@efg.jpあてに招待メールをもらう。
招待メールからアクティベイトする。
※そもそもアクティベイト画面がバグる。回避方法はmain.jsを書き換えて再読み込みすればいける。
自分のアプリが管理したくなったので、
その後、内部テスターを解除してもらう。
しかし、iTunesConnectに何度ログインしても、
はじめよう画面(初期の)が表示されてしまいます。
メンバーセンターへは正常にログインできるし、
ライセンスの有効期限は来年まである。
どうにもならなくなったのでアップル側サポートへメール。
1営業日以内には返事が来ました。返事は以下のような概要。
「あなたのアカウントを確認しました。内部テスターの解除も確認しました。
アカウントを調整したので再度サファリから正しいアカウントでログインしてください。」
言われた通りにする。
ログインすると、なんかアクティベイトに似た画面が出たので、
チェックして先に進むと画面が真っ白になった。
あ??と思ってリロードを何回かすると通常通りに戻った。
明らかにiTunesConnectの不具合だと思うのだけど、、、
他に同じような現象に遭遇した方はいるのかな。。
2015年10月16日金曜日
2015年10月7日水曜日
iOS9でHTTP通信できなかったので理由をメモ
LOVETOHOという拙いアプリを公開しています。
AppStoreで「toho」って検索すればトップにでます。
iOS9対応に重い腰を上げてやったのはいいが、
iOS8の頃と違っていろいろ不具合出ちゃう。
HTMLパースしかしてないアプリなのに。。。とほほ
そもそもhttpリクエストでHTMLを読み込むところでコケる。
iOS9からATS(App Transport Security)なるものがデフォで有効になっているせいだ。
そう、もう非セキュアなHTTP通信させないぜ、ということだ。
詳細はここを参考にしてください。
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/
無効にすることもできるが、アプリ審査で弾かれるかもしれないという
噂がネット上に漂ってて。。。ゲロ吐きそう。
でも、対応は意外に単純でしたのでご紹介します。
特定のドメインとHTTP(S)通信をしますって宣言して、
どういうセキュリティレベルで通信しますってちゃんとplistに書いておけば良い。
もちろんHTTPSに対応してないサーバや、バージョンや暗号スイートが違うなんてザラ。
だから通信先のサーバではこれを許してねとかっていうのを明記していけばいいらしい。
世の中の流れ的にHTTP通信は撲滅の方向なのが身にしみた。
いろんなアプリが影響受けそう。
AppStoreで「toho」って検索すればトップにでます。
iOS9対応に重い腰を上げてやったのはいいが、
iOS8の頃と違っていろいろ不具合出ちゃう。
HTMLパースしかしてないアプリなのに。。。とほほ
そもそもhttpリクエストでHTMLを読み込むところでコケる。
iOS9からATS(App Transport Security)なるものがデフォで有効になっているせいだ。
そう、もう非セキュアなHTTP通信させないぜ、ということだ。
詳細はここを参考にしてください。
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/
無効にすることもできるが、アプリ審査で弾かれるかもしれないという
噂がネット上に漂ってて。。。ゲロ吐きそう。
でも、対応は意外に単純でしたのでご紹介します。
特定のドメインとHTTP(S)通信をしますって宣言して、
どういうセキュリティレベルで通信しますってちゃんとplistに書いておけば良い。
もちろんHTTPSに対応してないサーバや、バージョンや暗号スイートが違うなんてザラ。
だから通信先のサーバではこれを許してねとかっていうのを明記していけばいいらしい。
世の中の流れ的にHTTP通信は撲滅の方向なのが身にしみた。
いろんなアプリが影響受けそう。
iOS9、Objective-CでHTMLParserを使っていたら文字化け起こした
何時間もかかってしまったが原因を特定できました。
HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。
が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。
パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。
実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。
HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。
が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。
パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。
実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。
NSString *enc = (__bridge NSString *) CFStringConvertEncodingToIANACharSetName(cfenc);
とするようにして
_doc = htmlReadDoc ((xmlChar*)[string UTF8String], NULL, [enc UTF8String], optionsHtml);
というように書き換えるとうまくいく。
文字化けっていやだね。
Githubのissueに出しておくかな。
と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34
と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34
ラベル:
HTMLParser,
iOS9,
Objective-C
2015年9月10日木曜日
Recon Jet向けAndroidアプリ開発:ヘッドトラッキング編
前回はRecon JetでAndroidアプリ開発するための前準備について書きました。
【注意】
ReconOSを最新版にしておきましょう。
Recon UplinkアプリをダウンロードしてデバイスをPCに接続するだけでアップロードが始まります。なお、Recon UplinkはEngageに登録後ダウンロードできます。
最新版のファームにしないと実機デバッグができない場合があります。
今回はヘッドトラッキングをするための手順をメモしていきます。
こちらの手引きを参考にすればできます。
英語なので苦手な方に参考になれば幸いです。
①AndroidManifest.xmlに追加します。
applicationタグの間に下線部を追加します。
<下記は引用>
<manifest…>
…
<application…>
…
<uses-library android:name="com.reconinstruments.os" />
…
</application>
…
</manifest>
…
<application…>
…
<uses-library android:name="com.reconinstruments.os" />
…
</application>
…
</manifest>
②パッケージのインポート、マネージャーの取得、リスナーの実装をします。
Activityクラスに直接実装する場合は大枠は以下のようになるはずです。
<下記は引用>
import com.reconinstruments.os.HUDOS; ←インポート
import com.reconinstruments.os.hardware.sensors.HUDHeadingManager; ←インポート
import com.reconinstruments.os.hardware.sensors.HeadLocationListener; ←インポート
import com.reconinstruments.os.hardware.sensors.HUDHeadingManager; ←インポート
import com.reconinstruments.os.hardware.sensors.HeadLocationListener; ←インポート
public class SampleActivity extends Activity implements HeadLocationListener ←ロケーション情報コールバック用のリスナーを実装します。
{
HUDHeadingManager mHUDHeadingManager = null; ←マネージャー保持用変数
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"onCreate");
...
mHUDHeadingManager = (HUDHeadingManager) HUDOS.getHUDService(HUDOS.HUD_HEADING_SERVICE); ←onCreate時にマネージャー取得します。
}
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"onCreate");
...
mHUDHeadingManager = (HUDHeadingManager) HUDOS.getHUDService(HUDOS.HUD_HEADING_SERVICE); ←onCreate時にマネージャー取得します。
}
@Override
public void onStart() {
Log.i(TAG,"onStart");
super.onStart();
mHUDHeadingManager.register(this); ←onStart時にリスナーを登録します。
mIsStarted = true; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
}
@Override
public void onStop() {
Log.d(TAG,"onStop");
mHUDHeadingManager.unregister(this); ←onStop時にリスナーを登録を解除します。
mIsStarted = false; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
super.onStop();
}
public void onStart() {
Log.i(TAG,"onStart");
super.onStart();
mHUDHeadingManager.register(this); ←onStart時にリスナーを登録します。
mIsStarted = true; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
}
@Override
public void onStop() {
Log.d(TAG,"onStop");
mHUDHeadingManager.unregister(this); ←onStop時にリスナーを登録を解除します。
mIsStarted = false; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
super.onStop();
}
@Override
public void onHeadLocation(float yaw, float pitch, float roll) { ←リスナーの実装部分です。
public void onHeadLocation(float yaw, float pitch, float roll) { ←リスナーの実装部分です。
// ここでRecon Jetの現在のヘッドロケーションがコールバックされます。
// yaw値:頭の水平方向の移動(※詳細は後述)
// pitch値:頭の上下方向の傾き(※詳細は後述)
// roll値:頭の左右方向の傾き(※詳細は後述)
}
}
}
③onHeadLocationコールバックについて
実際に20ms前後の間隔でコールバックされてきました。
yaw, pitch, rollそれぞれの値の単位は恐らく【度(°)】です。
yaw=0°になる位置とiPhoneのコンパスアプリの北が微妙にずれていました。
ちゃんと検証してないので間違っているかもしれないのでご注意を。
だいたい以下のような感じです。
■yaw
0°=北
90°=東
180°=南
360°=北
■pitch
−90°=真上仰向け
0°=正面
90°=真下
■roll
-90°=右真横
0°=垂直
90°=左真横
④あとは応用
好きに料理しちゃってください。
あまりRecon JETでアプリ開発してる人いなそうな。
ぐぐってもあまり情報がないような。。。
ラベル:
Android,
HeadLocation,
Recon Jet,
ヘッドトラッキング
2015年9月2日水曜日
2015年8月27日木曜日
ドライブでまれのロケ地(大沢集落)に行ってみた【1日目】
■3日間(8月22日〜24日)の大体の概要
レンタカー(アクア)、2泊3日、宿予約なし。
走行距離1210km。
道中給油が3384円。
ガソリンは地方は高いですね。レギュラーはだいたい130円オーバー。東京だと120円程度。
平均燃費25.6km/L
最後は燃費計算で返却で総額43550円。(レンタカー3日間+ガス代+高速代)
ETCカードはレンタル。
コースはだいたいこんな感じ。
東京→山梨→長野→岐阜→富山→石川→富山→新潟→群馬→埼玉→東京。
天気
たまたま3日間晴天でした。曇りはありましたが。。。
①下道でゆっくり行こうとしたが思ったより時間がかかるので、
大月ICで高速へ。
②PM2:30頃にネットランキング3位のお蕎麦屋さん「水車挽き番所そば 中之屋」へ。水車で挽いてるとのこと。さっぱりと美味しかったです。写真下手でごめんなさい。
③白川郷に向かう途中で鍾乳洞を見つける。入場券1000円で入る。気温12度でだいぶ冷やされた。上着必須。最後まで歩くと30分くらいかかるので今回は15分で出ました。進むに連れて狭くなるので苦手な人は気をつけてください。
あとでっかい鍋「日本一宿儺鍋」があった。数千人分の炊き出しができるとか。大橋展も併設されていたがあまり興味なかったのでスルー。
④夕方8時頃に白川郷に着く。この時間にはほとんどのお店は閉まっている。3時でほとんど閉まってしまうので要注意。さらに注意したいのは駐車場が18時に閉まってしまうので路頭に迷います。
★夏の夕暮れ時の白川郷は何とも言えない哀愁を漂わせ、なんだか懐かしい雰囲気で心落ち着きました。これはオススメ!予約すれば8000円台〜民宿に泊まれる。次は冬の景色を見に行きたいところ。
⑤初日の宿探し。健康ランド「アラピア」に決めた。20時過ぎに着いた。付近でご飯を食べるために散策したが遠い。結局近くのインドカレー屋に入った。カレーとナンで1040円。つくってる方は現地の方っぽいのですが、地元のインドカレーの方が美味しかった^^;
アラピアは想像より大きい施設。16種類もある温泉でさっぱりして快適に過ごせました。ただ、難点がいくつかある。館内の温度設定が若干私には暑い。テレビが0時で消えるのはいいけど、朝テレビが大音量でいきなりつくのでびっくりする。女性専用部屋もあるしオススメ。一人2500円と格安。素泊りより安い。
貴重品の管理方法を決めて置かないと私みたいにビクビクしながら寝ることになりますのでご注意を。
でもリクライニングチェアーでプログラミングもはかどりましたし、Macbook Proもなくなりませんでした!
2日目へつづく。
レンタカー(アクア)、2泊3日、宿予約なし。
走行距離1210km。
道中給油が3384円。
ガソリンは地方は高いですね。レギュラーはだいたい130円オーバー。東京だと120円程度。
平均燃費25.6km/L
最後は燃費計算で返却で総額43550円。(レンタカー3日間+ガス代+高速代)
ETCカードはレンタル。
コースはだいたいこんな感じ。
東京→山梨→長野→岐阜→富山→石川→富山→新潟→群馬→埼玉→東京。
天気
たまたま3日間晴天でした。曇りはありましたが。。。
①下道でゆっくり行こうとしたが思ったより時間がかかるので、
大月ICで高速へ。
②PM2:30頃にネットランキング3位のお蕎麦屋さん「水車挽き番所そば 中之屋」へ。水車で挽いてるとのこと。さっぱりと美味しかったです。写真下手でごめんなさい。
(左)おろしそば1550円 (右)水車小屋
③白川郷に向かう途中で鍾乳洞を見つける。入場券1000円で入る。気温12度でだいぶ冷やされた。上着必須。最後まで歩くと30分くらいかかるので今回は15分で出ました。進むに連れて狭くなるので苦手な人は気をつけてください。
あとでっかい鍋「日本一宿儺鍋」があった。数千人分の炊き出しができるとか。大橋展も併設されていたがあまり興味なかったのでスルー。
ライトアップされた鍾乳洞内(入場券1000円)
④夕方8時頃に白川郷に着く。この時間にはほとんどのお店は閉まっている。3時でほとんど閉まってしまうので要注意。さらに注意したいのは駐車場が18時に閉まってしまうので路頭に迷います。
★夏の夕暮れ時の白川郷は何とも言えない哀愁を漂わせ、なんだか懐かしい雰囲気で心落ち着きました。これはオススメ!予約すれば8000円台〜民宿に泊まれる。次は冬の景色を見に行きたいところ。
きれいな夕暮れに包まれた白川郷
⑤初日の宿探し。健康ランド「アラピア」に決めた。20時過ぎに着いた。付近でご飯を食べるために散策したが遠い。結局近くのインドカレー屋に入った。カレーとナンで1040円。つくってる方は現地の方っぽいのですが、地元のインドカレーの方が美味しかった^^;
アラピアは想像より大きい施設。16種類もある温泉でさっぱりして快適に過ごせました。ただ、難点がいくつかある。館内の温度設定が若干私には暑い。テレビが0時で消えるのはいいけど、朝テレビが大音量でいきなりつくのでびっくりする。女性専用部屋もあるしオススメ。一人2500円と格安。素泊りより安い。
貴重品の管理方法を決めて置かないと私みたいにビクビクしながら寝ることになりますのでご注意を。
でもリクライニングチェアーでプログラミングもはかどりましたし、Macbook Proもなくなりませんでした!
今晩の宿アラピア
2日目へつづく。
2015年7月4日土曜日
Recon Jet向けAndroidアプリ開発:開発準備編
昨今話題になっているメガネ型のウェアラブルデバイス「Recon Jet」
詳細はここ→http://www.reconinstruments.com/products/jet/
ようやくSDKが公開されたので早速アプリを開発しましょう!
ということで準備しましょ。
【注意事項】
Androidアプリの開発環境がすでに整っている前提とします。
また、ご自身の環境に合わせて読みといてください。
■環境
OS:Mac OS X 10.10.4
Java:1.8
■必須
事前にRecon JetのOSのバージョンを最新の4.2.0(2015年7月3日現在)にアップデートしておいてください。
本家のページを参考にすれば数分でセットアップは終わります。
http://www.reconinstruments.com/developers/develop/getting-started/recon-sdk-4-api/
1、Android Studioを起動します。Configure→SDK Managerを起動します。
2、一旦すべてのチェックをはずしてから、APIレベル16(4.1.2)のSDK PlatformとSources for Android SDKを選択しインストールする。
3、次にRecon SDK Add-Onをインストールするために、SDK ManagerのToolsメニュー→Manage Add-on sitesを選択する。
4、User Defined Sitesタブを選択し、Newを選択する。
5、http://www.reconinstruments.com/wp-content/recon-sdk/repository.xmlを入力してOKを選択し、Closeを選択する。
6、Recon instruments SDK Add-onが追加されているのでインストールする。
7、appモジュール内のbuild.gradleを開いてcompileSdkVersionの項目を下記のように修正する。
compileSdkVersion 'Recon Instruments:Recon Instruments SDK Add-On:16'
8、ついでに、targetSdkVersionをついでに「16」に変更します。
9、このままだと実機(Recon Jet)を接続しても表示されないので、Adbを差し替えます。
9−1、http://www.reconinstruments.com/wp-content/recon-sdk/adb.zipからダウンロードする。※3つのバージョンが入ってます。
9−2、./adb kill-serverで一旦終了させてから、既存のadbはadb.orgなどにリネームして置いておくといいと思います。
9−3、解凍したadbに置き換えてください。
10、アプリを実行してみてください。めでたくReconJetが表示されれば成功です。
詳細はここ→http://www.reconinstruments.com/products/jet/
ようやくSDKが公開されたので早速アプリを開発しましょう!
ということで準備しましょ。
【注意事項】
Androidアプリの開発環境がすでに整っている前提とします。
また、ご自身の環境に合わせて読みといてください。
■環境
OS:Mac OS X 10.10.4
Java:1.8
■必須
事前にRecon JetのOSのバージョンを最新の4.2.0(2015年7月3日現在)にアップデートしておいてください。
本家のページを参考にすれば数分でセットアップは終わります。
http://www.reconinstruments.com/developers/develop/getting-started/recon-sdk-4-api/
1、Android Studioを起動します。Configure→SDK Managerを起動します。
2、一旦すべてのチェックをはずしてから、APIレベル16(4.1.2)のSDK PlatformとSources for Android SDKを選択しインストールする。
3、次にRecon SDK Add-Onをインストールするために、SDK ManagerのToolsメニュー→Manage Add-on sitesを選択する。
4、User Defined Sitesタブを選択し、Newを選択する。
5、http://www.reconinstruments.com/wp-content/recon-sdk/repository.xmlを入力してOKを選択し、Closeを選択する。
6、Recon instruments SDK Add-onが追加されているのでインストールする。
7、appモジュール内のbuild.gradleを開いてcompileSdkVersionの項目を下記のように修正する。
compileSdkVersion 'Recon Instruments:Recon Instruments SDK Add-On:16'
8、ついでに、targetSdkVersionをついでに「16」に変更します。
9、このままだと実機(Recon Jet)を接続しても表示されないので、Adbを差し替えます。
9−1、http://www.reconinstruments.com/wp-content/recon-sdk/adb.zipからダウンロードする。※3つのバージョンが入ってます。
9−2、./adb kill-serverで一旦終了させてから、既存のadbはadb.orgなどにリネームして置いておくといいと思います。
9−3、解凍したadbに置き換えてください。
10、アプリを実行してみてください。めでたくReconJetが表示されれば成功です。
登録:
投稿 (Atom)
