のほほん停留所

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

Date.init(timeIntervalSinceNow:)の単位

Creates a date value initialized relative to the current date and time by a given number of seconds.

秒数で与える

参考

https://developer.apple.com/documentation/foundation/date/1780053-init

.p12, rsaから.pemに変換する

$ openssl pkcs12 -in voip_services.p12 -out voip_services.pem -nodes -clcerts
$ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem

Swift - Tupleの要素数をカウントする

Swift

Swift 3.1

素数をカウントする

let tuple = (1, 2, 3)
print(Mirror(reflecting: tuple).children.count) // 3

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