プログラミング

Git で Emoji Prefix に関してのメモ

はじめに Git リポジトリに Emoji Prefix のコミットテンプレートを設定してみる。 Emoji Prefix を導入するメリットは 絵文字とコミットが対になるので、コミットの役割が明確になる バグ修正+リファクタリング+機能追加。。。など本来分割すべきコミット…

LicensePlist を導入し、アプリで使用している OSS のライセンスを表示する

LicensePlist を使うと iOS アプリに依存している OSS のライセンス表記をまとめることができる CocoaPods も Carthage どちらも対応している これを試してみる。 セットアップ Homebrew 経由で LicensePlist をインストールする。 $ brew install mono0926/…

HEIC を JPEG に一括変換する

macOS であれば 下のように sips コマンドを使って HEIC -> JPEG 変換ができる $ sips --setProperty format jpeg PIC.HEIC --out PIC.jpg ただし、ファイル数が多いと一括で変換したくなるので Python スクリプトを作った。(内部で sipsを使用しているので…

iOS アプリで「Zip ファイルをダウンロード→Zip 展開→展開されたファイルをアプリ内で使用」までを試す

はじめに https://daisuke-t-jp.hatenablog.com/entry/2019/08/19/162337 で Zip アーカイブの展開(UnZip)の方法を書いたので、これを発展させて Zip をサーバからダウンロード アプリ内で Zip を展開 展開したデータをアプリで使用 というユースケースを…

iOS で Zip を展開する

はじめに ZipArchive ライブラリを使用すると iOS で Zip を展開(圧縮も)できる。 これは macOS も tvOS にも対応している。 ここでは Carthage での導入について書く。 Carthage でのライブラリ導入について基本的なことは https://daisuke-t-jp.hatenabl…

macOS コマンドでインターネット上のファイルをダウンロードする

curl コマンドに O オプションを指定すれば、ファイルダウンロードできる。 curl -O https://tetsugaku.info/images/melon-and-lemon.png curl コマンドは macOS にデフォルトインストールされているはずなので、気軽に使用できる。 もし、Linux ライクに wg…

GitHub の Issue / Pull Request に使われるラベル

スクリーンショットは Issues · google/science-journal-ios · GitHub から GitHub で Issue を見ていて good first issue というのがあり、意味が分からなかった。 調べると GitHub ではIssue / PR に使用できるラベルがデフォルトでいくつか用意されていて…

Carthage で外部ライブラリを導入する

Carthage とは? 日本語の読みは「カルタゴ」でいいかしら。 名前の由来は、現在のチュニジアにかつてあった古代の国家の名前らしい。 GoogleMap でみるとこんな場所。 CocoaPods のように Xcode プロジェクトに手軽に外部ライブラリを取り込めるパッケージ…

SwiftLint を導入する

このページは SwiftLint について、導入する方法と使い方を簡単に記す。 もっと詳しく知りたい場合は SwiftLint のプロジェクトを見るべき。 また SwiftLint を試したサンプルプロジェクトは GitHub にある。 SwiftLint とは? Swift コードのスタイルをチェ…

プロジェクトルートにある .swift-version ファイルは何か?

はじめに ルートに .swift-version ファイルがあるプロジェクトを発見することがある。 たとえば、下記のリポジトリ。 https://github.com/IBM-Swift/BlueSocketblob/master/.swift-version https://github.com/yahoojapan/UICollectionViewSplitLayout/blob…

Google の OSS プロジェクトはテストデータ(テキスト)に何を使用している?

github.com github.com brotil と snappy は Google でリポジトリ管理されている圧縮ライブラリ。 それぞれテストデータは以下の場所にある。 brotli/tests/testdata at master · google/brotli · GitHub snappy/testdata at master · google/snappy · GitHu…

AVSpeechSynthesizer でテキスト読み上げ

AVFoundation の AVSpeechSynthesizer クラスを使うと、テキスト(文字列)を音声で読み上げることができるのでメモ。 サンプル 最低限以下で読み上げができる。 import AVFoundation // シンセサイザーを準備する let synthesizer = AVSpeechSynthesizer() …

Swift でローカルスコープを実現する

_ = { () -> () in // ... }() もしくは do { // ... } 後者の方が簡潔。

C言語で医療費控除額を計算する

コード 医療費控除の額がよくわからなかったので、C言語でコードを書いて試してみた。 GitHub にもある。 #include <stdio.h> #include <math.h> #include <assert.h> static int get_medical_expenses_deduction(int payed, int insurance, int income); int main(int argc, const char</assert.h></math.h></stdio.h>…

InterfaceBuilder を使用せずにコード内で UIButton のアクションをバインドする

ある UIButton に対して TouchUpInside のイベントにアクションをバインドしたいとき、インターフェースビルダーを使わずに、コードで実現すると下のようになる。 @IBOutlet weak var button: UIButton! class ViewController: UIViewController { override …

UnsafeMutablePointer のパターンをいろいろテストする

はじめに UnsafeMutablePointer の allocate/deallocate/initialize/move などのメソッドを一通り使用する。 また、ポインタの扱いでメモリリークが発生しないようにする。 テストしたコードは GitHub にある。 テストで共通使用する関数・クラス このコード…

Swift で数値から日本語形式の文字列を得る (例)1,234 -> 千二百三十四

はじめに Swift でこんな感じのことをしたく var v = Int(0) print(v) // "〇" v = Int(1) print(v) // "一" v = Int(2) print(v) // "二" v = Int(1234) print(v) // "千二百三十四" v = Int(665061443960367) print(v) // "六百六十五兆六百十四億四千三百…

テストケースで UIAlertController のボタンをタップする

import XCTest class UITests: XCTestCase { override func setUp() { // Put setup code here. This method is called before the invocation of each test method in the class. // In UI tests it is usually best to stop immediately when a failure oc…

テストケースで UIButton をタップする

import XCTest class UITests: XCTestCase { override func setUp() { // Put setup code here. This method is called before the invocation of each test method in the class. // In UI tests it is usually best to stop immediately when a failure oc…

Travis CI で CocoaPods を使用したプロジェクトがビルド失敗する

はじめに Travis CI で CocoaPods を使用したプロジェクトのビルドが失敗したため、調べたことをメモ。 リファレンス Travis CI のドキュメント この中の Building an Objective-C or Swift Project - Travis CI のセクションをみる。 抜粋 リファレンスに書…

Swift でジェネリック型のクランプをする

クランプ(Clamp)とは、ある値が任意の範囲になるように調整することをいう。 たとえば、値を 0 〜 10 の値にしたければ、以下のようなコードを書く。 if x < 0 { x = 0 } if x > 10 { x = 10 } ただし、必要な箇所でその都度、上のようなコードを書くと煩…

Swift を Docker 上の Linux(Ubuntu) で動作させる

資料 https://swift.org/download/#using-downloads https://github.com/apple/swift#getting-started 手順 Docker 側 1. Docker をインストール $ brew cask install docker 2. Ubuntu のイメージを得る $ docker pull ubuntu 3. Ubuntu コンテナを作成 $ d…

CocoaPods にライブラリを登録する

この記事は CocoaPods へライブラリを登録する方法をまとめる。 登録の方法 1. podspec ファイルを作成する $ pod spec create MyLib 2. podspec ファイルを編集する 以下、サンプルを載せる Podspec ファイルの構文リファレンスについて詳しくは Podspec Sy…

macOS フォルダ内のファイルのエンコーディングを一覧表示する

フォルダ内にある Xcode 関連ファイル h m mm swift txt md plist strings のエンコーディング一覧を見たい場合は find コマンドでできる # 現在のパスから開始する $ find -E . -type f -iregex ".*\.(h|m|mm|swift|txt|md|plist|strings)" -exec file --mi…

Swift で Mach から CPU 負荷、メモリ使用量を得るフレームワーク Mach-Swift

はじめに iOS / macOS にて CPU 負荷、メモリ使用量を得るために Mach を使用する方法があります。 ただ、Mach の関数を直接使用するとポインタの扱いが手間なので、そのあたりを吸収した Swift フレームワークを作成しました。 github.com 使い方は以下です…

SwiftPackageManager(SwiftPM)のコマンドまとめ

https://swift.org/package-manager/ パッケージを初期化(実行形式) $ swift package init --type executable パッケージを初期化(ライブラリ) $ swift package init --type library ビルド $ swift build テスト $ swift test 実行 $ swift run Package…

Android デバイスの DPI 一覧

Android デバイスの DPI(Dot Per Inch)の一覧 一覧 種別 サイズ DPI 備考 ldpi Low 120dpi 以下 mdpi Middle, Standard 160dpi 以下 hdpi High 240dpi 以下 xhdpi eXtra-High 320dpi 以下 xxhdpi eXtra-eXtra-High 480dpi 以下 xxxhdpi eXtra-eXtra-eXtra-…

GitHub プルリクエストをする時の流れ

フォークしてプルリクエストをあげるまで GitHub 上で対象のリポジトリを自分のリポジトリとして fork する ブラウザの画面上に「Fork」ボタンがあるのでそれを押すと、 fork される fork したリポジトリを clone する $ git clone フォーク先リポジトリ.git…