麦芽を支える技術

麦芽(ばくが、英語:malt)とは、麦、特に大麦の種子を発芽させたもので、ビール、ウイスキー、水飴の原料となる。(Wikipediaより)

試行錯誤してたどり着いた現在のiOSアプリ自動デプロイ環境(Bitrise、fastlane、Crashlytics、たまにbuddybuild)

前の会社の技術ブログに書いたやつだけど、技術ブログ閉鎖されたっぽいんで、前もってバックアップしといたやつを転記。


仙台iOS開発者勉強会へ参加

実は私、東北出身ということもあり、新卒から十数年ほど過ごした首都圏を離れて仙台にJターンしてきたわけですが、仙台に引っ越してきたのは2016年8月なので、まだ仙台で住んで1年にも満たないのですよ。

で、社内もWeb系メインだし、まだ仙台に知り合いの社外エンジニアも多くなく、iOSアプリの開発話や苦労話などする相手がいないなぁと思っていたこともあって、先日「SWWDC - 仙台iOS開発者勉強会#30」に参加してきました!

いざ参加してみると、仙台の敏腕エンジニアの方々が揃っており発表のレベルも高く、(懇親会も飲みすぎて二日酔いになるほど)とても楽しかったです!

atnd.org

今回のエントリはその勉強会で発表した内容の紹介となります。

続きを読む

BartyCrouchでiOSアプリの多言語化(Localization)用stringsファイルを自動更新

結構前から便利そうだと思って使ってるんだけど、案外紹介されてる記事が少ないのでとりあえず書く。

BartyCrouchとは

これ。

github.com

iOSアプリを多言語対応する際に必要になる以下のファイルを、CLIから更新してくれるツールです。

続きを読む

GoogleAppsのGmail設定「デフォルトの転送」を用いたメール転送

Gmailでメール転送というと、Gmail画面より「設定」-「メール転送と POP/IMAP」で転送先アドレスを追加することで行うのが一般的ですが、この方法だと転送元・転送先双方の実アカウントが必要だったり、転送先アドレスの方では転送を許可するかどうかを確認するメールを受信する必要があったりするので、以下のような状況のときは、ちょっと都合悪かったりします。

  • 退職者宛メールの後任転送や、一時的なスタッフ用のメールアドレス
    • GoogleAppsのライセンスはアカウント数によるので、恒久的でないアカウントは極力削除したい
  • メール受信目的ではなくシステム都合で特定アドレスへ転送
    • 例えば、IFTTTはtrigger@ifttt.com宛にメールを送るとそのタイミングでトリガー発動とかできますが、Gmail標準の転送のように転送先アドレス側で転送許可メール受信とか必要だと転送設定できない

GoogleApps for Workだと、管理者権限があれば以下のGmail設定を使って、割と強制的に(一方的に)メール転送を行うことが出来ます。

管理コンソールでの設定

続きを読む

Android NDKでOpenSL ESを利用する

AndroidアプリでOpenSL ESを利用してMP3ファイルの再生を行う必要があったのでいろいろ調べてみたものの、日本語の解説サイトがほとんど見つからないのと、いくら「OpenSL ES」でググっても「OpenGL」か「OpenSSL」ばかりヒットしてしまうので、昔調べた時に別なとこにメモってたやつをここに移行。

OpenSL ES概要

続きを読む

AVAudioEngineで音声にかけられるエフェクトをいろいろ試せるテスターアプリを作った

iOS8からAVAudioEngineを使って、音声に簡単にAudioUnitのエフェクトをかけられるようになりましたが、それらのエフェクトかけると実際にどんな音になるのかちょっと調べる必要があったので、とりあえずその調査の副産物置いときます。(結局調べたいことはわからんかったという...)

ちなみに既に似たようなサンプルは、以下のようにiOS開発者で有名な堤さんが公開してくれている「iOS8-Sampler」とかあるんですが、今回調べたかったのは主にAVAudioUnitTimePitchとかAVAudioUnitVarispeedで、その辺はこれには入って無いようだったので、とりあえず自前で作ってみた、って感じです。

d.hatena.ne.jp

あくまで自分の調査用だったので、レイアウトとか適当です。。。あしからず。

続きを読む

AVAudioEngineでの音声ファイル再生で、再生時間の取得・再生位置指定を行う

あまり明確な情報がなかなか見つからなくてだいぶ苦戦したけど、一応出来たのでメモ。 もうちょっとスマートなやり方あるのかもしれませんが。

やりたいこと

  1. AVAudioEngine、AVAudioPlayerNodeを使った音声データの再生
  2. 総再生時間、現在の再生時間を取得
  3. 任意の再生位置からの音声再生(シーク機能)

Webでいろいろ調べていると、上記1点目の基本的なAVAudioEngineの使用方法や、エフェクト・速度変更などの音声効果の使い方は以下のように結構載ってるんですが、通常の音声プレイヤーとして必要な2,3点目のやり方がなかなか見つからなかったんですよねー。

続きを読む