2016年3月21日月曜日

Skype Connection OFFLINEになってしまう問題

Skypeのバージョンは7.21で、現象発生時点で最新です。
MacBook Pro (Retina, 13-inch, Mid 2014)で、使用OSはYosemite (10.10.3)です。

現象としては…
  • グループチャットが届かない
  • ファイル受信が出来ない
事の発端はAndroidにてSkypeをインストールし、サインイン。
その後にサインアウトしたのですが、バックグラウンドで通信しているのかメッセージの通知が来ました。
再度Android側操作でサインアウトして気持ち悪いのでアプリ削除。
そこからSkypr for desktopにてグループチャットが届かなくなり、ファイル受信も出来なくなりました。
個人メッセージはやり取り可能です。
その時点でSkypeが最新であることは確認していたのですが、再インストールも試して改善せず…(´・ω・`)
PC再起動もして、一年以上触っていなかったiPhoneのSkypeについてもアプリ削除。
それでも改善せず…

調べていく内に海外サイトに行き着き、以下コマンドを実行。
/showplaces
MSNP: Connection OFFLINE

/dumpmsnp
MSNP: Connection Data (MSNP24):
* Status: NetStateDisconnected
(略)

Skype自体はオンライン状態(前述の通り個人メッセージは可能)なのですが、OFFLINEかつ切断という結果。
/etc/hostsファイルも確認したのですが、問題なし。

Skype for WebやiOS、AndroidのSkypeでは問題なくグループチャットが届いているし、ファイル受信も可能。
Skypeの方に変にアカウントが滞在しているような状態ではなさそう。

バージョン7.20にダウングレードしても改善しませんでした…

結果として…

一年近く古いバージョン7.18にダウングレードすることで直りました…(´・ω・`)
「常に最新にする」は速攻でOFFにしました。
でもなぜか勝手にアップデートする時があるのでdmgファイルはローカルに取っておいてます…非常に不便。
コミュニケーションツールに関しては会社でも周りの人と合わせないといけないのでアレですが、Slackかchatworkの方が良さそうですね。
使い方勉強していかねば。

cocos2d-x本来のフレームワークが生成されない問題

起きている問題は…

cocos2d-xはver3.9を利用しています。
使用OSはMacのYosemite (10.10.3)です。
あるタイミングからcocos newコマンドでプロジェクトを作成してもcocos2d-x本来のフレームワークが生成されない問題が発生しました。
Xcodeを用いて作成したプロジェクトを開いてもcocos2d_lib.xcodeprojが該当プロジェクト内に存在しない状態です。
同様にプロジェクト直下(proj.ios_macなどがあるディレクトリ)にcocos2dディレクトリがありませんでした。

ただ、ライブラリファイルはリンクしているためSpriteやRefなどは記述可能。
ヘッダファイルまでは見れるのですが、ソースファイルは見れないといった状態です。

以前までは上記した問題は起こっておらず、他利用者様と同じ構成で生成されていたのですが。。。

現象発生前後で行ったこと

  • cocos studioを追加
  • Android Studioに既存プロジェクトを追加
  • コンパイル高速化のためにccacheを適用
上記で行った変更を確認しましたが、当然cocos newに影響するような変更はしておりません。
ただ、念のため全て設定や定義を戻し、再度cocos newを実行………改善されず(´・ω・`)

実際、実行は出来る?

実行は可能でした。そこで実際cocos2d-x関連のファイルはどこを参照しているのか、を調査しました。
Xcode -> PROJECT, TARGETS -> Build Settings -> Search Paths -> Header Search Paths, Library Search Paths, Framework Search Paths

すると以下ディレクトリのファイルを参照していました。
/Applications/Cocos/frameworks/cocos2d-x-X.X

なぜcocos studioのディレクトリを参照しているのか、その定義があるのかについても改めて調査しましたが、どこにも見当たらず…

最新バージョンver3.10だとどうなる?

調査時点でcocos2d-xの最新バージョンver3.10がありましたので、それを適用してみようと思いました。
setupも再度実行、bash_profileが適切に書き換わっていることも確認し、再読込み。
cocos newしてみましたが現象変わらず…(´・ω・`)

一旦諦め、リフレッシュ後に再度調査。
cocos newしてみたら正常にフレームワーク含め生成されました…
結局何が原因だったのか、何故解決したのかは不明…

2016年3月14日月曜日

Androidコマンドの備忘録

詳細を省いてしまいますが、Android開発で用いるadbコマンドや署名作成に関するコマンドを忘れないよう記します(よく使う、またはたまにしか使わないけどいざという時忘れちゃうコマンド限定)

Logcat表示

adb logcat

バックトレース出力

adb logcat | $NDK_ROOT/ndk-stack -sym proj.android/obj/local/armeabi/

NDK_ROOTの定義必須
(当然NDKのパス記述でもOK)

また、実行しているアプリのproj.androidまで移動しておく。
こちらもパス記述でもOK。

デバイス一覧

adb devices

apkインストール

adb install -r xxx.apk

-rオプションは同一apkがある場合に上書き

署名作成

keytool -genkey -v -keyalg RSA -keystore ~/xxx.keystore -alias xxx -validity 10000

アプリURLを自動振り分け

アプリリリース後にtwitterやFacebookなどで宣伝するかと思います。
その際、twitterやFacebookの機能でURLを貼り付けた時に自動的にカードのような表示に置換えられます。
iOSとAndroidでリリースしている場合に記事内に両OSのURLを載せてもどちらかのURLだけカード表示され、異なるOSのダウンロードページへ飛ばしても意味がありません。
ユーザに判断させるのも違いますし、折角アクセスしてもらってもダウンロードに至らない、なんてのは無くしたいですね!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="twitter:card" content="summary_large_image" />
 <meta property="og:title" content="(アプリタイトル)" />
 <meta property="og:description" content="(アプリ説明)" />
 <meta property="og:image" content="(カード画像URL)" />
 <meta property="og:url" content="(リンクURL)" />
 <meta property="og:type" content="game" />
 <meta property="og:site_name" content="(サイト名)" />
 <title>(サイト名)</title>
 <script type="text/javascript">
  var userAgent = navigator.userAgent.toLowerCase();
  window.onload = function(){
   if(userAgent.indexOf("android") > -1){
    // Google Play
    launch_frame.location.href = "(URLスキーム)";
    setTimeout(function(){
     location.href = "(GooglePlay URL)";
    }, 500);
   }else if(userAgent.search(/iphone|ipad|ipod/) > -1){
    // App Store
    launch_frame.location.href = "(URLスキーム)";
    setTimeout(function(){
     location.href = "(AppStore URL)";
    }, 500);
   }else{
    location.href = "(AppStore URL)";
   }
  }
 </script>
</head>
<body>
 <div style="width:0; height:0; overflow:hidden;"><iframe id="launch_frame" name="launch_frame"></iframe></div>
</body>
</html>
metaタグ内のogから始まるpropertyはOpenGraphProtocolというものでSNSでシェアされた際にサイト名やURLを正しく伝えるための設定です。
twitterカードの仕様についてはこちら(公式)

コードの簡単な説明をするとUserAgentによってAndroidとiOSを振り分けています(UA偽装していたら正常に判定出来ません)
また、AndroidでもiOSでもない場合(PCからアクセス等)はAppStoreに飛ばしています。
OS判定後、URLスキームを用いてアプリの起動を試みます。
アプリ起動出来ない場合(500ms応答なし)はダウンロードURLへリダイレクトしています。
端末の設定にもよりますがダウンロードURLへリダイレクトした場合、自動でアプリが起動するはずです(AndroidならGooglePlay、iOSならAppStore)

また、上記コードではSummary Card with Large Imageというカードタイプを利用しています。
twitter内で目立って良いかなという程度の理由です。
カード画像については1024x500の画像を使用しています。
(仕様的には最低280x150で容量1MB以内らしいです)

URLスキームについては別記事にしましたのでご参考までにm(_ _)m

OS毎のアプリURLの形式については言わずもがなですが一応。。。
GooglePlay URLは以下の形式
https://play.google.com/store/apps/details?id=XXX
AppStore URLは以下の形式
https://itunes.apple.com/jp/app/XXX/idXXX?l=ja&ls=1&mt=8

設定出来たらWebサーバにアップロードして構文チェックを行いましょう。
Card Validator(公式)

twitterカードの仕様にもありますApp Cardですが、これを用いれば上記コードと同等の振り分けがmetaタグだけで出来そうですが、Facebookとかで同様の振り分けを行えるかは試してないので分からないです。。。
カード画像を用意しなくてもアプリロゴを補完してくれそうな雰囲気もしますが、せっかくスクリーンショット用などで横長の画像も用意しているかと思いますのでインパクト重視でLarge Imageを使うのも良いかなと思います!

2016年3月13日日曜日

URLスキーマについて

アプリにはURLスキーマというものを設定することが出来ます。
これを設定することで別アプリからインストール可否を判断したり、Safariなどからアプリ起動をすることが出来るようになります。

< iOS >
Xcodeにて設定します。
TARGETS -> Info -> URL Types
IdentifierとURL Schemesに設定します。

IdentifierにはBundle Identifierと同じ値を設定しておけば概ね問題ないかと。
URL Schemesに設定するものが上記で説明したものになります。
aaaと設定すればSafariにてaaa://とアクセスすることでアプリが起動します。

ただし、aaaなんて誰でも思いつくようなスキーマを設定しない方が良いです。
仕様としてApple提供のアプリと被った場合はAppleアプリが起動、他アプリと被っている場合には何が起動するかは不定、となっています。
なのでBundle Identifierを整形したものやデベロッパ名などを組み込んでユニークな値となるように設定しましょう。

< Android >
AndroidManifest.xmlにて設定します。
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="XXX" android:host="execute" />
</intent-filter>
こちらも設定するとChromeなどからアプリ起動出来るようになります。

2016年3月12日土曜日

SONY WalkmanとMac iTunesの連携・その3

SONY Walkman(NW-A25HN)をMacでの使い方を書きます。
曲の同期については以下記事を参考にしていただけると!
SONY WalkmanとMac iTunesの連携・その1
SONY WalkmanとMac iTunesの連携・その2

前回の記事通りに曲を配置していた場合、iTunesのプレイリストをそのまま使えません。
なのでWalkmanの方のディレクトリ構成に合わせてあげる必要があります。

プレイリスト書き出し

iTunesにてプレイリストを選択後、右クリックで「書き出す」を選択します。
m3uフォーマットで書き出しましょう。

m3uファイルの整形

書き出したm3uファイルのままでは使用できません。
まずは曲ファイルのディレクトリ構成を変更します。
Macでターミナルを起動します。
(アプリケーションのユーティリティにあると思います)

m3uファイルをviで開きます。
起動後にvi(半角スペース)と入力して書き出したm3uファイルをドラッグアンドドロップします。
以下コマンドを貼り付けた後、Enterで実行してください。
:%s/(Ctrl+V)(Ctrl+M)/(Ctrl+V)(Ctrl+M)/g
:%s;/Users/(ユーザ名)/Music/iTunes/iTunes Music;;g

改行コードをWalkmanでも認識するよう変更し、曲ファイルのディレクトリ構成を変更しています。
(ユーザ名)の箇所は適宜変更ください。
変更完了後にZZか:wqと入力してviを終了してください。

曲名やディレクトリ名に日本語が入っている場合もあると思うので最後に文字コードをUTF-8に変更します。
nkf(半角スペース)-w(半角スペース)--overwrite(半角スペース)と入力してm3uファイルをドラッグアンドドロップして実行します。
nkf -w --overwrite XXX.m3u

変更が完了したm3uファイルをWalkmanに入れれば完了です!
曲情報を認識しているか確認してみましょう!
当然ですがプレイリストだけじゃなく曲ファイルも必要なのでお忘れなく!

2016年3月11日金曜日

Xperia Z3 compact (docomo, SO-02G)をグローバル化・その2

前回の記事の続きです。
今回はいよいよ実行手順について。

実行手順、結果については自分の環境であれば問題なく完了した、というお話です。
端末環境や製造時期などで異なる可能性もありますので参考程度に留めてください。
また、ROMの焼き直しとなりますので一切動かなくなる、ネット通信が出来なくなる等の症状が発生する可能性があります。
一切の責任を負いませんので自己責任でお願いします。

その前に…

今回はXperia Z3 compactのdocomo, SO-02GをグローバルモデルのROMに焼き直します。
そのため日本固有の機能(赤外線とかFelicaとか)は使えなくなります。
改めて普段利用していないかご確認ください!

また、LINEの機種変更手続きを忘れずに!
きちんと事前に手続きしておかないと同一アカウントでログインしてもスタンプとかコインとか諸々消えちゃいます(´・ω・`)
Facebookとかtwitterとかもアプリで使用しているとパスワードを忘れがちです。
必要であればログイン出来ている内に手続きしておきましょう(パスワード忘れてる場合、ログイン可否に関わらず問い合わせ方法は一つしかありませんが…)
あ、あとWi-Fi設定も消えちゃうので事前に用意しておきましょう!
あとはゲームアプリなんかも機種変更手続き等でアカウント情報を引き継げる状態にしておきましょう!
大抵アカウントIDとパスワードなんかが発行されると思いますのでスクリーンショット撮ってPC等に転送しておくのをオススメします!

Flashtoolの入手

まずはFlashtoolをダウンロードしましょう。
それぞれの環境(Windows, Linux, MacOSX)に合ったものをダウンロードしてください。

自分が使用したものはver0.9.19.10でした。

FTFファイルの入手

Flashtool起動後にXIマークをクリックして、XperiFirmを起動します。
ただ、Macだと何も反応しないです。。。Flashtoolのアプリケーションディレクトリを見たらexeファイルが出来ていたのでWindowsじゃないと呼び出せないのかもしれません。

こちらのサイトにFTFファイルがまとまっていますので参考までに。
他サイト様を参考に以下ファイルを利用しました。
Xperia Z3 compact LTE-A [D5803]
23.0.A.2.93 USA

ROM焼き直し

まずFlashtoolの実行ファイルがあるディレクトリにfirmwaresディレクトリがありますので、そこにFTFファイルを置きます。

Flashtoolを起動して、左上の雷マークをクリックします。
BLUはBootLoader Unlockの略らしいです。

Flash ModeとFastboot Modeが選択出来ると思うので、Flash Modeを選択。

Wipe: APPS_LOG, USERDATAにチェック
キャッシュファイルや内部ストレージを削除するかどうか、なのですがROMが異なるため以前のファイル達がどんな悪さをするか分かりません。
どうせ初期化するので削除してしまいましょう。

Exclude: AMSS_FSG, AMSS_FS_1, AMSS_FS_2, MODEMにチェック
除外するカテゴリを指定します。
通信帯域に関する情報が記述されているそうで、日本とUSAでは通信帯域が異なるので除外しましょう。
除外しないとROM焼き直し後にLTEが繋がりにくい等の症状が発生する可能性があります。

上記WipeとExcludeの項目はFlashtoolのバージョンによって名称が違うぽいです。
それぞれの項目の詳細が知りたい方はこちらのサイトが丁寧に解説してくださってます。

ダウンロードモード起動

Flashしてしまえば後は指示に従うだけです!
端末からUSB抜いて→電源OFF→ボリューム下ボタン押しながら→USB接続
これでダウンロードモードになります。

Flashtoolにログが出てくるので静かに待ちます。
自分の場合は数分でした。

あとは端末購入時と同様、初期設定をしていきます。
USAのROMでもちゃんと最初に日本語設定出来るのでご安心を!
設定の端末情報にてモデル番号がD5803となっていれば無事成功です!

その後に…

晴れてdocomoの呪縛から解き放たれ、色々無効化したりスタミナモードを屠ったりしたり、早速LINEやらtwitterやらを設定したい気持ちは分かるのですが、まずはソフトウェアアップデートが全て完了するのを待ちましょう。

これが果てしないです…
古いビルド番号のものを入れているのでしょうがないです。
何度も新しいアップデートがあります、インストールの準備が出来ました、再起動を繰り返しますので充電しながら待ちましょう。
1時間以上は見ておいた方が良いかもしれません(´・ω・`)

最終調整

ソフトウェアアップデートも落ち着いたら、最後に確認した方が良い項目があります。

  • Wi-Fiを切ってモバイル通信が正常かチェック
  • 電話をする
  • 電話をしてもらう
最低限上記だけは最初にチェックしておきたい所です。
(スタミナモードのチェックとしてスリープ状態で実施するのも良いと思います)

また、グローバルモデルでは日本モデルと少し異なる点があるので調整していきます。
主に節電対策とかネットワークの安定に繋がると思いますので参考までに。
こちらのサイトを参考にさせて頂きました!

ネットワーク設定
電話を起動します。
「*#*#4636#*#*」と入力してください。
最後のアスタリスクを入力した時点で画面が切り替わります(通話とかは押さなくてOK)

携帯電話情報の優先ネットワークを設定→LTE/WCDMAを選択

NFCを削除
設定→その他の設定→NFCがグレーアウトしている
こいつの電池消費が激しいそうです。。。

NFCサービスをkillする必要があるのですが、adbコマンド(Android Debug Bridge)というものが必要になります。
自分はアプリ開発者なのでPC環境にadbコマンドを導入していたので問題ないのですが、普通のPC環境には入っていないので導入する必要があります。
導入方法につきましてはGoogle先生が詳しい&丁寧ですので割愛させて頂きます。

adbコマンドからkillすれば先ほどのグレーアウトしていたNFCの表示がなくなります!

あとは細々とした輝度を落としたりとか自動回転を切ったりとか、プリインストールされてるアプリ削除(または無効化)したりとか自分好みに設定頂ければと!

自分はROM焼き直し前からSIMロック解除していてU-mobileの格安SIMを使っていました。
ROM焼き直し後も何も変わらず使用出来ております!
また、docomoのプリインストール削除やらスタミナモードの適用やらでXperiaさんが言うには5日以上持つようになりました。
実際充電するタイミングは明らかに伸びました!
(普段全然スマホ触らないので参考にならないかもです…)

これから実行される方、あくまで自己責任でお願いします!
ただ、同じXperia仲間として成功することを心より願っております!

2016年3月6日日曜日

Xperia Z3 compact (docomo, SO-02G)をグローバル化・その1

Xperia Z3 compactを普段利用しているのですが、購入時にdocomo端末かグローバルモデルにするか悩みました。
背面のdocomoロゴが嫌だ、というのとプリインストールされてる(かつ削除や無効化出来ない)不要なアプリがあるという理由でグローバルモデル一択だったのですが、購入を迷っていた時にdocomo端末の投げ売り値下げが行われました。
数年前の白ロムと同程度まで値下げ(たしか3万円前後)されまして、当時グローバルモデルが5〜6万円していたので、さすがにdocomo端末で甘じました。。。


現在でも同程度の価格でやり取りされているようです。
スペック的にも非常にお得な買い物だったと思っております。

[ 不満点 ]
AndroidOS KitKatですのでSDカードへアプリを移動することは出来ません。
プリインストールアプリのFile Commanderを使用することで画像ファイルや音楽ファイルをSDカードへ移動することは可能。
ただし、画像ビューアアプリや音楽プレイヤーアプリから参照可能なディレクトリは限定されています。
これのせいで微妙に不整合が起きたりしておりました。。。(ファイルが正常に認識されなかったり等)
また、内蔵ROMにゲームアプリが2,3個入ってるだけでアップデートデータでどんどん圧迫されていきます。。。

そして7月末頃にLollipopが配信され、SO-02Gにてアップデートデータが来ました!
LollipopからこのSDカード制限がなくなるとのことで心待ちにしていました。
(アップデートスケジュールはキャリアやメーカーによってコントロールされているためAndroidOSが発表されても適用出来ないのです)


喜び勇んで適用したのですが、なんとアプリのSDカードへの移動が出来ないのです。。。
こちら調べた所、Z3 compactでもグローバルモデルでは問題なく移動が出来るそうで。。。
ネットで調べた情報によるとdocomoによる制限が入っているらしい、とのことでした。
(オフィシャルな情報は見当たりませんでした)

使用して一年、結果として常に「内蔵ROMが75%使用されています」お知らせが出続ける状態になってしまいました。。。
これはXperia側の機能で内蔵ROMを確保するために画像や音楽ファイル、アプリを移動してくれようとするのですが、アプリの移動だけは前述同様に何度やっても転送失敗します。

このままお知らせマークと共に生活をするのは耐えられないのでグローバルモデルのファームウェアに焼き直すことを決めました!
実行手順、結果については次回記事に致します!