新しいMacにした時にiOS開発のProvisioningとかやらないといけないこと

Macを買い替えたので、Provisioningとかcerとかを古いMacから移したり、Apple DeveloperからmobileprovisionなどをDLしないといけない。

  • *.p12

古いMac(一番最初に環境作ったMac)のキーチェーンからiPhone Developer/iPhone Distributionを.p12形式で作る。

作ったら新しいMacに送ってダブルクリックしてインストール。

参考: 一つのdevアカウントで複数Macにて実機インストールする覚書 - 気が向いたら

  • ios_distribution.cer / ios_development.cer

https://developer.apple.com/account/ios/certificate/certificateList.action からそれぞれDLする。

DLしたらダブルクリックしてインストール。

  • *. mobileprovision

https://developer.apple.com/account/ios/profile/profileList.action から、自分が使っているアプリのprovisionをDLする。

iOS Distribution / iOS Development 両方必要だと思われる。
例によってダブルクリックしてインストール。

  • AppleWWDRCAG2.cer

https://www.apple.com/certificateauthority/ の、Apple Intermediate Certificatesにある、Worldwide Developer Relations - G2 CertificateをDLしてダブルクリックしてインストール。

別にWorldwide Developer Relations Certificateでも良さそうだけど、G2の方が強そうなのでG2にした。

上記全部やったら新しいMacでbuild, install, Package全部いけました。

Windows用トラックパッドT650をBetterDesktopToolでカスタマイズする

OS:WIndows8.1

自宅ではMac、会社ではWindowsを使っていて、Windowsでもトラックパッドしたいと思い先日会社のマウスをトラックパッドに変えた。

LOGICOOL ワイヤレス 充電式 タッチパッド T650

LOGICOOL ワイヤレス 充電式 タッチパッド T650

Windows用トラックパッドでは一番性能がいいと思われる。

使い心地は結構良くて、マウスに戻る予定はないです。
ただ、アプリによって異常にスクロール速度が速かったりしててたまにイラつくんだけど、そこは割り切って使っている。

T650とMacのトラックパッドの比較は Macのトラックパッドを完全再現できるか!?Windows用タッチパッド「Logicool Wireless Rechargeable Touchpad t650」半年使用レビュー - うんとかすんとか に詳しく書いてある。

T650は設定でカスタマイズ出来ない

T650にはいろいろな機能が割り当てられていて、指3本↓スワイプでデスクトップを表示するということが出来たりする。

でもT650には欠点があって、指3本↓スワイプで別のことやりたいという設定が標準のソフトウェアでは出来なくて、指3本↓スワイプにはデスクトップを表示する以外に機能を持たせることが出来ない。

でも、BetterDesktopToolというのがT650のマルチタッチに対応していて設定してみたら、Windows用Expose Cloneを動かせたので、やり方を書いておきます。

やり方

1. BetterDesktopTool を入れる

MacにはExposeという今開いているウインドウを一覧で見れる機能があって、これをWindowsで実現できるアプリがたくさん出ている。

今回はこれを使います。適当にインストールしてください。

2. BetterDesktopToolの設定を変更する。

BetterDesktopToolの設定を開くと、設定画面の上に3つタブが出てくるので、一番右の General タブに

  • Enable Multitouch-Gesture Support for designated Touchpads

という項目があるので、これにチェックを入れる。

次に、一番左のWindow & Desktop Overviewタブに移動して、

  • Show all Windows > Multitouch-Gesture > 3-Fingers Down

を選択する。(3-Fingers Downは好みで他のに変えてもいい)

2. SetPoint の設定を変更する

T650を使う人はみんなSetPoint入れると思うんだけど、SetPointの設定をいじる。
BetterDesktopToolで使いたいジェスチャー項目のチェックを外す必要があります。

私は、上記で3-Fingers Downを選んだので、それに対応する

  • デスクトップの表示/非表示

のチェックを外しました。

以上で、指3本↓スワイプでExposeが起動するはずです。

注意点

AutoHotKey との相性?

1回Exposeを起動するたびにaltキーが押されるようです(MieruKeyBoardとか使うと確認できる)。 たまにaltキーが押されたままになってしまう現象になっていて、AutoHotkey:キー押しっぱなし病・ホットキーすり抜け病対策の研究をやったら解決できるのかなあとは思うんだけどやってない。

ゆっくりスワイプしないとダメ

BetterDesktopTool で設定した場合ゆっくり上から舐めるようにスワイプしないと反応してくれないことがある。

慣れっちゃ慣れなんだけど、たまにストレスになる。

最後に

T650、カスタマイズできるんならそういうアプリが出てほしい。

会社ではWindowsを使っていて、Windowsに割と不満があるので自分でアプリ作れたら解決するんだけど、いかんせんWindowsプログラミングに全く興味がないので自分で作る気はない。

もしも誰かT650カスタマイズできるアプリやら、いいWindowsアプリ知ってる人は教えてほしいです。

tmux-powerline が2段になる

昨日この問題に対処したんだけど、iTerm・Terminalで上記の設定すると、tmux-powerlineが2段になって、とにかく使い物にならくなってしまった。

対処法

パッチを作ってくれている人がいるので、使わせていただく。

といっても、brew caskで入れるので何かスクリプトを起動するとかはしないでいい。

パッチを作ってくれている人がcaskできるものも作っているようなので、勝手に利用させていただく。(自己責任でね)

# 普通にinstallしたtmuxをアンインストールする
brew cask uninstall tmux
# waltarixさんのFormulaを使う
brew tap waltarix/homebrew-customs
# 本家じゃない、いまtapしたtmuxをインストールする
brew install waltarix/customs/tmux

私の場合、これを入れたあとにtmux起動しても前と同じ現象になってしまったんだけど、PC再起動したら直っていたので、人によってはPC再起動が必要かもしれない。

MacVim(kaoriya) + PowerlineでTerminalの右側が空き表示がずれる問題に対処する

  • OS: Yosemite(10.10)
  • MacVim: Custom Version 7.4 (KaoriYa 20140805)
  • iTerm2: Build 2.0
  • Terminal: 2.5 (343)

MBP買って、いろいろ環境整えていて、MacVim(kaoriya), Powerline, Rictyらへん使ってTerminalの環境作っていたら、Powerlineの右側に空間が空いてしまった。

MacVimの画面で見る文には問題ないんだけど、Terminal・iTerm2で見ると右端に空間が空いたり、その空間に文字を表示したりとかなりキモいことになっていた。

  • MacVim(正常)

f:id:star__hoshi:20141103220546p:plain

  • iTerm2(右端に空間が空いてしまっている)

f:id:star__hoshi:20141103220615p:plain

  • Terminal(右端に空間が空き、新たな文字だけ右寄せで表示される)

f:id:star__hoshi:20141103220720p:plain

対処方法

iTerm2

  • Preferences > Profile >Text
  • Double-Width Charactersの項目にチェックをいれる

f:id:star__hoshi:20141103221345p:plain

Terminal

  • 環境設定 > プロファイル > 詳細
  • Unicode 東アジア A (曖昧) の文字幅を W (広) にする にチェックを入れる

f:id:star__hoshi:20141103221630p:plain

これで横幅ちゃんと表示されるようになった。

今のところ問題は出ていない。

2014/11/04追記

問題あった。以下対処法。

tmux-powerline が2段になる - star__hoshi's diary

Titanium StudioでBitbucketを使う

  • OS: Yosemite(10.10)
  • Titanium Studio: 3.4.0
  • git: git version 1.9.3 (Apple Git-50)

Titaniumでアプリを作っていて、今まではローカルGitで管理していたんだけど、Mac買い替えたこのタイミングでBitbucket管理に変えた。

Githubだとプライベートリポジトリ有料だけど、Bitbucketだとぼっち開発している限り無料で使えるのでBitbucketにした。

今回作成したリポジトリはここ。サンプルなのでPublicにしてる。

BitbucketにSSHキーを登録する

Bitbucketアカウント作成

Bitbucketのアカウントは適当に作っておいてください。
画面の誘導する通りに作れば迷わないはずです。

RSAキー生成

上記サイトに詳しく書いてあるけど、下記コマンドでSSHキーを生成する (既にsshキー作ってある人は無視していい)

ssh-keygen -t rsa
cd .ssh
chmod 600 id_rsa

次に、vim ~/.ssh/configして、configにBitbucketを追加する。

Host bitbucket.org
  HostName bitbucket.org
  IdentityFile ~/.ssh/id_rsa
  User git

最後に、クリップボードsshキーをコピーしておく。

pbcopy < ~/.ssh/id_rsa.pub

BitbucketにSSHキーを登録

ここも先ほどの記事に詳しく書いてあるけど

  • アカウントの管理(画面右上) > SSH キー(画面左下) > 鍵を追加

を押す。

Label は適当な値を入れて(私はMBP2014にした)、Keyに先ほどクリップボードにコピーした値を入れる。

SSHキーが利用できるか確認

Terminalで

ssh -T git@bitbucket.org

と入力して問題ないか確認、途中で出るyes/noはyesにする。
OKなら以下のような文章が出る。

The authenticity of host 'bitbucket.org (131.103.20.167)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bitbucket.org,131.103.20.167' (RSA) to the list of known hosts.
logged in as starhoshi.

You can use git or hg to connect to Bitbucket. Shell access is disabled.

Titanium Studioと連携する

ここからが本番。

Titanium Studioでプロジェクトを作る

Titanium Studioを開いて、

  • File > New > Mobile App Project > Default Alloy Project

をやって、適当にプロジェクトを作成する。

今回は、bitbucket-testっていう名前で作成した。

Bitbucketでリポジトリを作る

Bitbucketのwebサイト画面上部の、作成を押す。
そうすると新規リポジトリの作成という画面になる。

こんなかんじで入力した。

f:id:star__hoshi:20141102194122p:plain

リポジトリにpushする

リポジトリを作成すると、これからどうすればいいか操作方法を出してくれる、今回はCommando lineと書かれたものを利用する。

操作方法に習いTerminalで

cd ~/Documents/Titanium_Studio_Workspace/bitbucket-test
git init
git add .
git commit -m "initial commit"
git remote add origin git@bitbucket.org:starhoshi/bitbucket-test.git
git push -u origin --all

をすると、Bitbucketにpushされる。
pushできてたらBitbucketの画面に表示されるので、それで確認する。

Titanium Studioからpushする

Titanium Studioに戻ってきて、先ほど作ったbitbucket-testを見てみると、既にバージョン管理されていた。

この時点でバージョン管理されていない人は Team > Share Project をすればたぶんバージョン管理される。

pushするためには適当にファイルをいじるる必要があるので、tiapp.xml

<modules>
    <module platform="commonjs">ti.cloud</module>
</modules>

を追加した。

そうするとtiapp.xml*tiapp.xmlというようにアスタリスクがファイルの前につく。

次に

  • bitbucket-test を右クリック > Team > Commit

tiapp.xmlが編集されていることを確認して、Commit Messageを入力する。

コミットが完了したら、

  • bitbucket-test を右クリック > Team > Push

Pushが完了すると、Consoleに

f:id:star__hoshi:20141102194320p:plain

と出る。赤文字だとエラーみたいで気持ち悪いね。
Push完了。

他のリポジトリをCloneして使う

まずCloneする

Titanium Stduioに直接Cloneできると良かったんだけど、Titanium Studioのimport見てみたらGitHubのログインばかり求められて、Bitbucketでどうやるかはよくわからなかった。

なので、TerminalでCloneしてTitanium Studioにimportする手段を使った。

// 適当なフォルダに移動してclone
cd ~/Documents/git
git clone git@bitbucket.org:starhoshi/bitbucket-test.git

Titanium Studioでimportする

  1. Project Explorer上で右クリック > import
  2. General > Existing Folder as New Project > Next
  3. Promote to Projectに入力
    • Select folder: CloneしたPath
    • Project name: Select folder入れたら自動で入る
    • Project Type: 適宜選ぶ。bitbucket-testはAlloy,mobileにチェックする。

これでimportは完了、Gitもちゃんと効いてる。

もしProject Typeでチェックしわすれると

importする時、チェックし忘れてしまうと、Runするときに、RunボタンがDisableになって

The selected project bitbucket-test does not contain titanium mobile project

というアラートが表示される。

これを解決するためには.projectファイルを弄る必要がある。
下記はmobileのチェックを忘れた場合。

cd bitbucket-testvim .projectして、

<nature>com.appcelerator.titanium.mobile.nature</nature>

を追記する。

Titanium Studio Run Icon Disabled に書いてあった。

以上、Titanium StudioでBitbucketを使う方法でした。

pip が死んでた

ansible入れようとしてPythonパッケージ管理のpip使おうとしたら、なんか使えなくなってた。

  • sudo pip install ansible
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2603, in <module>
    working_set.require(__requires__)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 666, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 565, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
pkg_resources.DistributionNotFound: pip==1.1

解決策:pipのupdateするだけ

sudo easy_install --upgrade pip
sudo pip install ansible

成功した。

参考 : python - Easy_install and pip broke: pkg_resources.DistributionNotFound: distribute==0.6.36 - Stack Overflow

vagrant plugin update vagrant-digitalocean でハマった

久しぶりにDigital Ocean使ったらAPI v2.0になっていて動いてくれなかったので、vagrant-digitaloceanをアップデートしようとした。
だけど色々怒られて上手く行かなかったので、同じ苦しみを味合う人がいなくなるようにメモ。

vagrant plugin update vagrant-digitalocean してみる

An error occurred while installing nokogiri (1.6.3.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.3.1'` succeeds before bundling.

と言われてしまった。

vagrant-1.6.3.gemspec に Nokogiri に関する一行を追加。

これの対処法は Vagrantのpluginをインストールしようとして、nokogiriのエラーになる場合 とか、 osxでvagrantのpluginがインストールできない - Qiita に書いてある。

sudo vim /Applications/Vagrant/embedded/gems/specifications/vagrant-1.6.3.gemspec

して、以下を追加する。

s.add_dependency(%q<nokogiri>, ["= 1.6.2.1"])

これでNokogiriはOKだった。

もう一回 vagrant plugin update vagrant-digitalocean する

そしたら今度は

An error occurred while installing ffi (1.9.6), and Bundler cannot continue.
Make sure that `gem install ffi -v '1.9.6'` succeeds before bundling.

といわれた。ffiってなんだ…?

xcode-select --install する

どうやらXcodeコマンドラインツールが入っていないっぽい。
そういえばXcode上げてからコマンドラインツール入れてなかった。

xcode-select --install

すると、下のようなインストール画面が出るので、Xcodeを入手するする。

f:id:star__hoshi:20141026010500p:plain

ffiはこれでOKだった。

参考にしたのはこれruby on rails - Bundle update fails on ffi - Stack Overflow

同じところではまってる人もいて、 vagrantのpluginインストールでffiでコケる - Qiita にはxcode-selectのパスを通したら直ったよって人もいたけど、私はこれじゃダメだった。

もう一回 vagrant plugin update vagrant-digitalocean する

Updated 'vagrant-digitalocean' to version '0.7.0'!
Updated 'vagrant-share' to version '1.1.2'!

成功した。

iOS8のAVSpeechSynthesizerに暗黒魔法は使えない

昨日、iOS8のAVSpeechSynthesizerでのバグの対処法について、" "のような空白を読み上げ文字として渡すという暗黒魔法を書いたんだけど、ダメでしたこれ。

今朝電車でPodcastを聞きながらアプリを起動したら、Podcastが停止してしまった。
音声読み上げ機能使うと音楽とかPodcastが止まってしまうようで、空白文字だけれどもそれを読み上げようとしてそうなってるみたい。

なので暗黒魔法使わずに、ユーザには1回目は音声読み上げできませんよ、って説明して土下座して使ってもらう以外に方法なさそう。

iOS8のAVSpeechSynthesizerがバグってるらしい

Titanium SDK : 3.4.0
iOS : 8.0.2

今年の1月末に

ってブログ書いてて、このコード使って別のことしようと思ってせこせこアプリ作ってたら音声読み上げが上手く行かず1時間くらいハマった。

AVSpeechSynthesizerのバグ

ここ見た。

1回目に音声読み上げしようとすると失敗して、2回目は成功するんだけど、俺のコードおかしい?
いやおかしくないよ、iOS8でバグが起きてるらしいよ。ちなみにiOS7だと正常に動くよ。
って話をしている。

実際その通りで、私はObjective-CSwiftではなくTitanium Mobileで現象を確認したんだけど、1回目に音声読み上げさせようとするとUsing voice booster for route: Speakerって言われてしまって音声が読み上がらず、2回目以降は問題なく音声読み上げが成功していた。

対処法

AVSpeechUtterance *bugWorkaroundUtterance = [AVSpeechUtterance speechUtteranceWithString:@" "];
bugWorkaroundUtterance.rate = AVSpeechUtteranceMaximumSpeechRate;
[self.speechSynthesizer speakUtterance:bugWorkaroundUtterance];

1回" "を読み上げさせようという回答が書いてあって、benbahrenburg/Utteranceでも、とりあえずこの暗黒魔法は動いた…。(スペースだけなので何も読み上げられない。)

あくまで暗黒魔法であり気持ち悪さが拭えないので修正を待つしか無い。

Chromeの拡張を作った

Google検索ツール(期間指定とかするやつ)をデフォルトで表示するChromeの拡張を作った。

Googleで検索を行った際に頻繁に検索ツールの期間指定を行っていて(TitaniumとかSwiftは鮮度が大事)、素早く期間指定したいので最初から検索ツールを表示しててほしいと思っていたのと、Chromeの拡張を作れるようになりたいと思っていたので、とりあえず作ってみた。

この手のやつは、作ろうと思ったら割りと直ぐ作れるんだけど、一歩を踏み出すのがダルいので、今回かなり簡単な拡張を作っただけだけど、一歩を踏み出せたので良かったと思う。

ソースコード

詳しくは starhoshi/ShowGoogleSearchTools にありますが、

$("#hdtb_tls").addClass("hdtb-tl-sel");
$("#hdtbMenus").attr("class","hdtb-td-o");
$("#hdtbMenus").attr("aria-expanded","true");
$("#hdtbMenus").css("width", "644px");
$("#resultStats").css("right","16px");
$("#appbar").removeClass("hdtb-ab-o");

こんなかんじで、検索結果ページのCSSを、検索ツールボタンを押したあとのCSSに書き換えているだけです。本当に簡単だった。
検索ツールを表示すると 約 xxx 件 (x.x秒) みたいに検索結果を表示する項目が隠れてしまって、右に無駄なスペースあるので検索結果数とかは right:16px にして右端に表示するように変えています。

参考にしたサイト

上記サイトの拡張を前から使っていて、今回やりたいこともこの拡張と似てるし、ソースも公開しているので参考にさせてもらった。

上記サイトのソース読んでたら、setInterval(function(){},700)ってやってて、おそらくDOMの構築を待ってるのかなと思ったんだけど、それならsetTimeoutでいいし、DOMの構築完了は manifest.js で "run_at": "document_end" ってしてあげればDOM構築完了後に拡張が動くようになるので、これで良さそうだと思ったし、実装した感じ document_end でいいと思う。
弊拡張は document_end で実装した。

ただ、DOMの構築を待ってからCSS書き換えするので多少のラグを感じてしまって、CSS書き換えとかじゃなくて最初からそのCSSで出てきてくれればいいのに、と思う。

Chrome デベロッパーに登録した

からポチポチやれば登録できます。
デベロッパー登録しないでも crx ファイル配布でもいいんだけど、デベロッパになっても初回登録時に$5だけ払えばいいので、迷ってる時間があったら払ったほうが楽。

拡張の登録やら公開やらも別に難しくなくて、かなり親切に補足説明が出てきてくれます。
ただ、アイコンやらスクリーンショット等用意する必要がありますが、他に特に迷うこと無く拡張公開までいけました。

アイコンは @kuitachi_ がくれた、感謝。