export archived project to ipa file on command line
おはようございまーーーす(小声)
注射の針が刺さる瞬間が見れない人です。
xcodeをバージョン7に上げてから色々と不具合が多いのですが、
今回はアーカイブしたプロジェクトをexportするところで突如xcodeが落ちる謎現象に包まれたので、
exportをコマンドから行うメモです。
やっぱりX.0系は触らずにX.1系になるまで待った方がいいようですね。
このexportにはxcodebuild
というコマンドを使います。
以下のリンクにman pageがありますが、xcode build --help
した方が見やすい上に詳しいです。
developer.apple.com
実際を使用したコマンドは以下のような感じです。
-exportOptionsPlist
オプションに関してはなくても大丈夫ですが、deprecated warnが出るので付けた方が安心です。
また、-exportProvisioningProfile
に関しては対象の.mobileprovisionのファイルパスを指定してもいけるようですが、
稀に一致するprovisioning profileがないよってエラーが出るので、名前で指定した方が安心です。
それでは、よいゆめを〜〜〜
ottoちょっとだけ使ってみた
こんにちは!「みそスープ」って呼ぶ日本人が許せないタイプの人です。
今回は最近でたottoを使ってみたメモです。開発環境編です。
ottoに関しての説明は以下にあるので省略しますね!(ニッコリ)
Otto by HashiCorp
まず、ottoコマンドを利用するためにバイナルファイルをダウンロードします。
ダウンロードしたファイルを解凍して、/usr/bin
や~/bin
に置くだけで準備完了です。
これだけでもかなりありがたいですね🙏
ottoファイルをセットしたらコマンドを確認します。
$ otto usage: otto [--version] [--help] <command> [<args>] Available commands are: build Build the deployable artifact for the app compile Prepares your project for being run. deploy Deploy the application dev Start and manage a development environment infra Builds the infrastructure for the Appfile status Status of the stages of this application version Prints the Otto version
コマンドの使い方がダラっと表示されます。
公式のドキュメントにはサンプルがありますが、今回は自分のRailsプロジェクトで触ってみたのでそんな感じで。
プロジェクトのホムーディレクトリに移動して、ottoでアプリケーションを動かすための準備をします。
$ otto compile
これによって、.ottoid
ファイルと.otto/
ディレクトリが作成されます。(この中にVagrantfile等が入っています)
この時点でどんなアプリケーションなのかを判断しているそうですね。
次にottoでvagrantを起動し、SSH接続します。
接続したらbundleを入れておきます。
$ otto dev #最初は時間がかかります。
$ otto dev ssh
$ bundle
あとはWebサーバの起動するだけです。公式ではrackup
を使っていますが、
今回は今までのプロジェクトをそのまま使いたかったのでrails server
しました。
$ bundle exec rails s
INFO WEBrick::HTTPServer#start: pid=10078 port=3200
こんな感じでWebサーバがスタートするので、あとは対象のポートに合わせてブラウザで動作を確認するだけ!
IPアドレスはotto dev
した時にサラッと表示されていますがぐちゃぐちゃして分かりづらいので、以下のコマンドで確認することが出来ます。
$ otto dev address 172.16.1.253
今回の場合だとhttp://172.16.1.253:3200/
で接続出来ます。
最後に、使い終わった環境は全てサクッと削除出来ます。
$ otto dev destroy
また、suspend等のvagrantコマンドを使いたい場合はotto dev vagrant
で利用可能です。
xcodeをアップデートしたらXVimとかのプラグインが動かなくなるアレ
こんにちは!忍びの者です。
カレー色のシャツを着てくるインド人の同僚が最近やっと心を開いてくれるようになりました。
今回はxcodeをアップデートした時に毎回プラグインが消えてしまうので、
復活方法のメモです。超自分の為です。
XVimを例に書いていこうと思います。
まずはアップデートxcodeのバージョンにXVimが対応しているかを確認します。
github.com
対応している場合、既にローカルに存在しているXVimディレクトリでmasterをpullしてmakeし直すだけです。
$ cd ~/Library/Application Support/Xcode/plugins/XVim // このディレクトリは適宜変更してください。
$ git pull origin master
$ make
xcodeを再起動するとプラグインに反応して「Load bundle」が「Skip bundle」を聞いてくるポップアップが表示されるので、
「Load bundle」を選択します。
楽勝ダナコレ
以上の方法で出来なかった場合、xcodeのバージョンに応じたUUIDをプラグインのplistに追加します。
UUIDは以下のコマンドで確認することが出来ます。
$ /usr/libexec/PlistBuddy -c 'Print DVTPlugInCompatibilityUUID' "/Applications/Xcode.app/Contents/Info.plist"
ちなみに、β版xcodeで使いたい場合は以下です。
/usr/libexec/PlistBuddy -c 'Print DVTPlugInCompatibilityUUID' "/Applications/Xcode-beta.app/Contents/Info.plist"
こうすると、0420B86A-AA43-4792-9ED0-6FE0F2B16A13
のようなUUIDが取得出来ます。
次に以下のファイルを開きます。
~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/XVim.xcplugin/Contents/Info.plist
すると、<key>DVTPlugInCompatibilityUUIDs</key>
というタグの中にUUIDが並んだ箇所が出てくると思うので、その並びに先ほどのUUIDを追加します。
保存をしてxcodeを再起動すると、先ほど説明したようなポップアップが表示されるようになります。
この辺一気にチェックしてアップデートしてくれる何かがあると便利そうですね〜〜〜
という訳で今回はこんな感じで。今日もご飯が美味しいです。
AVFoundationでカメラの明るさを調整しよう
こんにちは!IE9を使う人です。
英語公用語の社内でジャパナイゼーションを進めていることが上司にバレました。
さて、しばらく仕事でカメラアプリを作成していますが、今回はobj-cでの明るさ調整のメモです。
私自身にカメラの知識がなさすぎるので、もどかしいところが多いかと思いますがご了承ください(おじぎ)。
カメラの明るさ(露出度)を調整するには、カメラのオフセット(基準点からの差で表した値)、デュレーション(1カットの編集・特殊効果時間の長さ)、バイアス(000秒で撮影されたときに現れる映像)等が関係しているそうですが、
スライダーでISO感度をユーザに調整してもらうのが一番使いやすいかと思います。
ISOとは、国際標準化機構(International Organization for Standardization)の略で、写真感光材料の感光度を設定したものを言うそうです。
結局のところなんなんでしょうね。カメラって奥が深いんだなァ。
まず、使用する変数を準備します。(カメラ設定等は省略しています)
@property (nonatomic) AVCaptureDeviceInput *videoDeviceInput; @property (weak, nonatomic) IBOutlet UISlider *exposureSlider;
次にviewDidAppear
内でスライダーにISOの値をセットします。
- (void)viewDidAppear:(BOOL)animated { // デバイス情報を取得 AVCaptureDevice *device = [[self videoDeviceInput] device]; // sliderの最小値・最大値を設定 (ISOの最大・最小にする) self.exposureSlider.minimumValue = device.activeFormat.minISO; self.exposureSlider.maximumValue = device.activeFormat.maxISO; // ISOの中間値を計算して結果を変数に代入 float midISO = (self.exposureSlider.minimumValue + self.exposureSlider.maximumValue) / 2; self.exposureSlider.value = midISO; NSError *error = nil; // デバイスのロック if ([device lockForConfiguration:&error]) { // ISO初期値(中間値)でカメラを表示 [device setExposureModeCustomWithDuration:AVCaptureExposureDurationCurrent ISO:midISO completionHandler:nil]; // デバイスロックの解除 [device unlockForConfiguration]; } else { NSLog(@"%@", error); } }
viewDidAppear
よりも前のライフサイクル内でカメラ情報を取得しようとすると、
View自体がAVCaptureDevice
を完全に読み込む前にISO値を取得してしまう為、正しい値が取れなくなります。
また、デバイスのロックに関しては、デバイスの設定を変更する為に動いているデバイスのフォーカスや露出をロックする必要があります。
設定の変更が終了したら再度デバイスのロックを解除します。
続きましてスライダーが変更された時の振る舞いです。
- (IBAction)changeISO:(id)sender { // デバイスの取得 AVCaptureDevice *device = [[self videoDeviceInput] device]; UISlider *control = sender; NSError *error = nil; if ([device lockForConfiguration:&error]) { // 取得した値をISO値にセットしてカメラ表示を変更 [device setExposureModeCustomWithDuration:AVCaptureExposureDurationCurrent ISO:control.value completionHandler:nil]; [device unlockForConfiguration]; } else { NSLog(@"%@", error); } }
storyboard内のスライダーにIBActionを付けて値を取得し、ISOを調整します。
こんな感じで、以下のような結果になりました。
最初
暗くした
明るくした
うまくいきましたな。
ちなみに今回のこのカメラの調整はiOS8以降での対応だそうなのでちょっと注意です。
(2015/07時点でiOS8ユーザは8割超のようなので大きな影響はないかと思いますが。)
できなかったこと
本当は最初、初期値を取得する為にAVCaptureISOCurrent
を使用する予定でしたが、
maxISO
が3桁なのに対して30桁くらいの値しか取得できなかったので利用を断念しました。。。
これ使っている人がいたら是非教えてください〜〜〜
RaspberryPiとICカードリーダ
こんにちは!つま先に手が届かない人です。
今回は久しぶりのraspiネタです。
非接触ICカードリーダを買ったので、それを使ってICカードのIDをとるまでのメモを残しておきます。
買ったのはこれ。
www.sony.co.jp
SONYのRC-S380です。raspi系でこれを使ってる人をよく見かけるのと比較的新しいモデルなので購入しました。
こんな感じです。
まず、PythonからUSBを使う為のパッケージをインストールします。
$ sudo apt-get install python-usb
次にNFC規格カードを読み書きする為のnfcpyをダウンロードします。
$ wget https://launchpad.net/nfcpy/0.10/0.10.0/+download/nfcpy-0.10.0.tar.gz $ tar xvzf nfcpy-0.10.0.tar.gz
nfcpyの最新バージョンはこちらから確認できます。
解凍したディレクトリ内にいくつかサンプルスクリプトがありますが、
カードの読み取りはtagtool.pyというファイルの実行で行えます。
$ sudo nfcpy-0.10.0/examples/tagtool.py
これにより、以下のような結果が取得できます。
(それぞれの値は実際の値ではありません。)
IDm=031402145812f56f PMm=140b4b498435e0ff SYS=a283
意味は以下の通りです。
名前 | 意味 | 説明 |
---|---|---|
IDm | 製造ID | カードを識別する為のID |
PMm | 製造パラメータ | カードの種別と性能を識別する為のパラメータ |
SYS | システムコード | システムを特定する為の値で、事業者および使用目的ことに割り当てられる |
詳細はこちらからどうぞ〜
IDmがカードごとに振り分けられているユニークなIDです。
今の私の持っているカードでは、SUICA, nanaco, edyで読み取ることが出来ました。
アミュパスはダメでした(真顔)
他のデバイスとの組み合わせを考えているので、
何か完成しそうになったらまた書こうと思います。
android開発メモ
こんにちはニンジャです。暑くて圧倒的に脳が動いていません。
今回はandroid開発で困って調べたりした小さいメモ群団をここに残しておきます。
間違いとかフワッとしていることが多いので、自己満エントリですすみませんでした。
android commandを使えるようにする方法
android studioが既に入っている場合、
以下でandroid系のコマンドが使えるようになります。
export ANDROID_HOME=$HOME/Library/Android/sdk export PATH=$ANDROID_HOME/tools:$PATH export PATH=$ANDROID_HOME/platform-tools:$PATH
これによってemulatorコマンドやadbコマンドも利用可能になります。
android studioでアプリやテストの実行
android studioでアプリを実行すると、INSTALL_FAILED_NO_MATCHING_ABIS
というエラーが起こることがあります。
ABIは「Application Binary Interface」の略で、ネイティブライブラリを使うアプリなのにABIがそれをサポートしていない為に起こるエラーです。
私がこのエラーに直面した時は、実行したアプリがカメラライブラリを利用するものでしたのでこれが起きました。
特にABIx86はネイティブライブラリをカバーしていないものが多い為、エラーが出ることが多いようです。
その場合は、ABIx86以外のデバイスを使用すると実行できるようになります。
(android studioでのemulatorの追加方法はこちらのリンクが参考になります。)
PCにインストールされている機種一覧は、
ls ~/.android/avd/
でも確認できます。
emulatorのカメラが動作しない場合
macでandroid emulatorを起動する場合は、AVDマネージャの"Show Advanced Settings"から起動するカメラ(webcam等)を選んでおいてから、
Photo Boothをバックグラウンドで実行している必要があります。
Photo Boothなしで起動すると、emulator: ERROR: Unrecognized pixel format 'v024'
のようなエラーが起こります。
iOSの場合はemulatorでカメラが起動できませんので、これは結構便利だと思いました。(撮った写真等はライブラリに保存も出来ます。)
androidでBitmapを縦横比を維持しながらスケールする方法
こんにちは!メガネ萌えする人です!
今回はandroidネタです。
ビデオのサムネイルをBitmapで取得した時の表示のさせ方について、若干はまったのでメモです。
サムネをレイアウトの中で3:4の比率で表示させようとした時に、思ったように拡大縮小されなかったんですね〜
ただ、調べていると色々な方法があるようなので、その中の一つとして見てもらえればと。
fileName = "***動画ファイル名***" // サムネイルをBitmapとして取得 Bitmap bmp = ThumbnailUtils.createVideoThumbnail(CommonUtils.getAvailableDirectory() + fileName, MediaStore.Video.Thumbnails.MINI_KIND); // 作られたサムネイルから横幅とそれに応じた高さを指定 int dispWidth = bmp.getWidth(); int dispHeight = dispWidth * 3 / 4; // 元のサイズでBitmap作成 bmp = Bitmap.createBitmap(bmp, 0, 0, dispWidth, dispHeight, null, true); // デバイスの画面サイズを取得 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); // スケールさせたい大きさを指定 int scaleWidth = size.x / 2; int scaleHeight = scaleWidth * 3 / 4; // 上で指定した大きさにする為にLayoutParamsを指定 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(scaleWidth, scaleHeight); // 指定したparamsをセットしてokomeThumbViewにBitmap表示 okomeThumbView.setLayoutParams(params); okomeThumbView.setImageBitmap(bmp);
BitmapクラスにはcreateScaledBitmap
というメソッドも存在するのですが、
機種によって勝手にトリミングされたりして思ったようにサムネイルが取得出来ない場合がありました。
また、最初からscaleWidth
とscaleHeight
でcreateBitmap
を実行すると、
今回の場合はscaleWidth
をデバイスの画面サイズから作っている為、
元のbmp.widthがscaleWidthよりも小さい場合にエラーが起こります。(これも機種に依存するエラーです。)
それにしても圧倒的javaアレルギーだった私ですが、androidを始めてからjavaアレルギーがなくなった気がします。
個人的にはiOSよりもandroidの方が自由度が高いので開発は楽しかったかなーという感想です。
android studioとxcodeがもっと仲良くなって同じ仕様になってくれたら嬉しいですねww (ショートカットとか)