のほほん停留所

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

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で音を鳴らしたときにイヤホンの音が小さくなる問題を解決する!

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

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で検索するといくつかのイメージが見つかる。 今回はdocker-swiftで提供しているイメージを使う。 Dockerfile サンプルプロジェクトは…

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 …

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

Makefile: *** missing separator. Stop.

$ cat Makefile | tr '[:blank:]' '\t' > tmp $ mv tmp Makefile スペースをタブ文字に変換すると動きます

tmuxで時計を表示する

ctr + t -> t

git submoduleを取り込む

$ git submodule update -i

xcodeprojが参照してない不要なファイルを削除

$ gem install synx $ synx --prune ***.xcodeproj

env: ruby_executable_hooks: No such file or directory

$ sudo gem install executable-hooks

「最大でn回のイベントを発行する + Completeしない」Observableの作り方

RxSwiftを扱っていて、最大でn回のイベントを発行するCompleteしないObservableを使いたいときがある。例えば、API Call等の1回のみ行いたいタスクを行うために、下記の条件を満たしたObservableを扱いたい UIViewController.viewWillAppear(_:)に1回のみフ…

Swiftで複数のフラグを管理するためにOptionSetを使うと便利だった

サービスを作っているとき、ユーザーの状態(e.g. 課金)によって特定の機能が解放されていることがあります。それを管理するにはフラグのような仕組みを使って管理するのがよくある手段なのですが、それが複数になってしまうと管理のコストが高くなってしまい…

吹き出しのようなViewを作ってみる

下の画像の吹き出しのようなViewを作ってみます レンダリング用のProtocolを定義 吹き出しだけではなく、その他のレンダリングするような処理とも共通化したいので先にProtocolを定義しておきます // レンダリングのProtocol protocol Renderer { associated…

RxTestを使ったUI層のテスト

はじめに RxSwiftを最近触り始めたので、自分なりのUI層の設計とテストについて書きます。 RxSwiftのバージョンは3.0.1です。 基本的な設計 ViewController UserEventの通知 UIの反映 Presenter ViewControllerからUserEventを受け取る ViewModelに取得した…

iOSDC楽しかった + 来年の決意

9/15(Fri) - 17(Sun)に早稲田大学理工学部 西早稲田キャンパスで開催されたiOSDCに参加してきました! Top | iOSDC Japan 2017 控えめに言っても最高のカンファレンスでした!本当にスタッフ、発表者、参加者の方ありがとうございました!とても楽しませてい…

Xcodeの検索機能まとめ

Xcodeの検索機能には様々な機能があります。意外と知らない人も多いかもしれないのでまとめます。 検索範囲 検索ボックスの下のプロジェクト名の部分を選択すると選択範囲をファルダ/ファイル単位で設定ができます 大文字と小文字の区別 Ignoring Case 大文…

minHeightを保ちつつContentViewに合わせたUIScrollViewをStoryboard上で定義する

iOS

やりたいこと デフォルトは画面の高さで、中の要素が画面の高さを越えたらスクロールするViewを設定したい 中の要素が画面の高さに収まる場合 中の要素が画面の高さに収まらない場合 Storyboardの設定 UIScrollViewを追加する UIScrollViewの上下左右の制約…

UILabelの改行まとめ

UILabelの改行の種類をいつも調べてる気がするので備忘録代わりにまとめた let label = UILabel(frame: .zero) label.lineBreakMode = .byWordWrapping lineBreakModeの型であるNSLineBreakModeのドキュメントを見ると、改行方法は6種類ある NSLineBreakMode…

「Swiftデザインパターン」に出てきたパターンまとめ

「Swiftデザインパターン」をパラパラと読んだので、せっかくなので出てきたパターンをまとめてみた。基本的に概要と実装しか書いていないので、細かいところは書籍を参照していただければ。 https://www.amazon.co.jp/Swift-Programmers-SELECTION/dp/47981…

iOSでPDFを表示してみる メモ

iOSでPDFを表示する方法を知らなかったのでメモ書き //: Playground - noun: a place where people can play import PlaygroundSupport import UIKit import CoreGraphics class PDFView: UIView { var page: CGPDFPage? override func draw(_ rect: CGRect)…

In-App Purchaseで、プロダクトIDがinvalidになる場合のチェック項目

iOS

In-App PurchaseのSandbox環境のテストをしたいときにプロダクト情報を取得するリクエストを送ったら、送ったプロダクトIDがinvalidで返ってくるときがあります let productRequest = SKProductsRequest(productIdentifiers: Set([ProductID])) productReque…

potatotips #34にブログ枠で行ってきました

potatotips #34に行ってきましたので、気になったiOSに関する発表をいくつか抜粋してまとめました。 ブラウザアプリ「Smooz」を作る中で会得したWKWebviewのTips speakerdeck.com UIWebviewに比べてWKWebviewはクラッシュ率が下がりセキュリティが上がりまし…

iTunes ConnectでApp内課金のアイテムを登録できない

上の画像のようにApp内課金を選択しても作成ボタンが有効化されていない。App内課金ができない、なんでだーと思って試行錯誤したらとんでもなく下らないことで詰まってました(日曜返して... App内課金(In-App Purchase)に関して調べると細かいやり方はたく…

Swift3: カリー化

Swift3ではカリー化用のシンタックスが廃止されました。廃止には用途が限定的などの理由が挙げられていますが、たまに使うことがあるのでSwift3での記法のメモ書きです。 英語ですが廃止の詳しい理由は0002-remove-currying.mdに書かれています。 // Swift2 …

Swift3: 同じ値を繰り返す文字列、配列

Swift3で同じ値を繰り返す文字列、配列のコンストラクタの記法が変わっていたため、個人的にメモしました。 // Swift 2.3 let str = String(count: 10, repeatedValue: Character("s")) // "ssssssssss" let arr = Array(count: 10, repeatedValue: "s") // …