のほほん停留所

日常、技術などざっくばらんに書きます

iOS Simulatorで音を鳴らしたときにイヤホンの音が小さくなる問題を解決する!

イヤホンにマイクがついているケースで発生する。サウンドの入力を内蔵マイクに変更すると治る!

f:id:Nonchalanttan:20180116172710p:plain

gitのtagを削除する

$ git tag -d {tag_name}
$ git push origin :{tag_name}

Server Side SwiftをDockerコンテナ上で動かしてみる

Swiftがインストールされているイメージを探す

https://hub.docker.com/explore/

で対象のSwift Versionを見つける。swiftで検索するといくつかのイメージが見つかる。

f:id:Nonchalanttan:20180104184734p:plain

今回はdocker-swiftで提供しているイメージを使う。

Dockerfile

サンプルプロジェクトはVapor + SwiftPMで構成されているので、各種設定ファイルをコンテナ上でコピーします。

FROM swift:4.0.3

USER root
RUN mkdir -p /server
COPY ./Config /server/Config
COPY ./Sources /server/Sources
COPY ./Makefile /server/Makefile
COPY ./Package.resolved /server/Package.resolved
COPY ./Package.swift /server/Package.swift

ENV PORT 9000

EXPOSE 9000

WORKDIR /server

RUN make build

CMD ["make", "run"]

サンプルプロジェクトは以下にあります。

https://github.com/Nonchalant/VaporProtobufSample

Swift Core Library

https://github.com/swiftdocker/docker-swift/blob/master/4.0/Dockerfilehttps://github.com/swiftdocker/docker-swift/blob/master/4.0/Dockerfile#L1

今回のベースイメージにしたswift:4.0.3ubuntuで動いています。macOSとLinuxOSで動くSwift Core Libraryは別物です。

https://github.com/apple/swift-corelibs-foundation

LinuxOS用のFoundationは実装途中なので一部使えない機能*1があるので、macOSで開発する際も時々LinuxOSで動くDockerコンテナで確認するとよいと思います。実装されていない機能はCライブラリなどで代替するしかなさそうです。

*1:URLSessionなどが一部使えません。実装ステータスはStatus.mdで確認できます

Swift - ProtocolBuffersをはじめる

個人用のメモ書きです

環境

Swift: 4.0.3

protobufのインストール

$ brew install protobuf

Appleが提供しているプラグインを使う

$ git clone https://github.com/apple/swift-protobuf.git
$ cd swift-protobuf
$ git checkout tags/1.0.2
$ swift build

ビルドしたプラグインを指定して、.protoファイルをコンパイル

$ $ protoc --plugin=protoc-gen-swift=.build/debug/protoc-gen-swift --swift_out=. *.proto

パスを通しておく

$ mkdir ~/.protoc
$ cp .build/debug/protoc-gen-swift ~/.protoc/protoc-gen-swift
$ echo 'export PATH=$PATH:$HOME/.protoc' >> ~/.zshrc
$ source ~/.zshrc

Option

アクセス修飾子などの各種オプションは--swift-optで設定することができます。詳細は以下で確認できます。

https://github.com/apple/swift-protobuf/blob/master/Documentation/PLUGIN.md

参考

https://speakerdeck.com/kyoheig3/protocol-buffers

UIの更新をメインスレッドで実行する [iOS]

Swiftのバージョンが変わってDispath周りもよく書き方が変わるのでメモ

環境

Swift: 4.0.3

Code

DispatchQueue.main.async {
    // UIを更新する処理
}

Reference

DispatchQueue - Dispatch | Apple Developer Documentation

Dockerコンテナとイメージを一括削除する

コンテナを一括削除する

docker rm `docker ps -a -q`

イメージを一括削除する

削除対象のイメージに依存しているコンテナがあればエラーになります

docker rmi `docker images -a -q`

Dockerコンテナの中に入る

bash のようにシェルを指定したり、特定のコマンドを渡すことが出来ます

$ docker exec -it コンテナ名 bash