osada-chan

Rails メインでサーバーサイドエンジニアしつつ現場監督やってます

MAPlayer を Swift2.1 から Swift5 にアップデートした

今年の夏季休暇はやることなかったので、たまにはエンジニアっぽいことしてみようかなと思ったので、4,5年放置していた MAPlayer という iOS アプリをアップデートした。(本業は Rails エンジニア。)

アプリはこちら。

Multi-Effect Audio Player

Multi-Effect Audio Player

  • TAKUYA OSADA
  • ミュージック
  • 無料
apps.apple.com

何回かに分けて勉強したことをメモしておく。

  • guard let(いまさら)
  • public static let (いまさら)
  • MPRemoteCommandCenter(いまさら)
  • UnsafeMutablePointer(いまさら)
  • App extensions(いまさら)
  • custom AudioUnit の作り方(合ってるかどうか微妙)

Objective-C から書いてるアプリなので、Swift 1.2 に移行した時に言語がサポートしてなかったものとか、それを Swift 2.1 に移行した時に対応してなかったものがあり、 Swift なんだけど、なんだこれ...状態だった。

guard let と public static let についてはこの記事でさらっと思い出だけ振り返っておく。

guard let 便利でびっくりした

if guard let value = optionalValue else {
  fatalError("unexpected value")
}

print("\(value)") // ここで value が使えるのすごくないか・・・?

guard let なかった時代の(まだ Swift よくわかってなかった自分が書いた)コードはひたすら fource unwrap してて残念だった。

public static let

これも確か Swift がサポートしてなくてシングルトンパターンがめんどくさかった記憶。それだけ。

class Nanika
    class var sharedInstance: Nanika {

        struct Singleton {
            static let instance: Nanika = Nanika()
        }

        return Singleton.instance
    }
end

こんな感じだったのが

class Nanika
    public static let sharedInstance = Nanika()
end

こうなって最高だった。

その他

AudioUnit を使ったアプリケーション特有の情報とかもあるので、それぞれ別記事にまとめていく予定。 特に Swift で AudioUnit を扱うには、結局まだ Objective-CC++ のコードは必要になるみたいなので、その辺がまとめられたらいいかなーという気持ち。

  • MPRemoteCommandCenter
  • UnsafeMutablePointer
  • App extensions
  • custom AudioUnit の作り方