プログラミング

Metal から広がるフレームワーク群

はじめに Metal とはなにか? またそれから派生したフレームワークを把握する Metal 登場前 (iOS 2 〜) iOS 2 以降の時代、3D グラフィック処理をするためには OpenGL ES が案内されていた OpenGL ES の ES は Embedded Systems.(組み込みシステム) 以下に…

Google Engineering Practices Documentation

Google がこれまで蓄積してきた開発に関する知識、経験、手法を公開した。 Google Engineering Practices Documentation | eng-practices 非公式だが、日本語翻訳されたドキュメントも存在する。 Google エンジニアリング・プラクティス ドキュメント | eng-…

CocoaPods could not find compatible versions for pod "xxx"

あるプロジェクトが CocoaPods でライブラリの依存管理をしていたので pod install すると $ pod install Analyzing dependencies [!] CocoaPods could not find compatible versions for pod "SwiftLint": In snapshot (Podfile.lock): SwiftLint (= 0.33.0…

WKWebView の読み込み進捗を表示する

はじめに iOS の WebView の読み込み進捗を示すプログレスバーを表示させたい iOS 5 以降 / Objective-C の時代には プログレス表示に NJKWebViewProgressView を使用していたが WebKit の WKWebView(not UIWebView) と Swift のあたらしい KVO の仕組み(…

パフォーマンスを高める Swift の記述

はじめに Swift の実行速度を向上させたくドキュメントを探すと以下が見つかった。 swift/OptimizationTips.rst at master · apple/swift · GitHub この中から気になったトピックをメモする。 Dynamic Dispatch(動的な呼び出し)を削減する Swift は Object…

MKMapView の地図タイルをオーバーレイする

目的 iOS の MKMapView で表示する地図タイルを標準以外に差し替えたい(ベースタイルの変更) またベースの地図タイルの上に、透明度のあるレイヤーをオーバーレイすることも試したい(範囲を示す、情報を含むタイルをベースに重ねる) 使用するタイル 今回…

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 展開→展開されたファイルをアプリ内で使用」までを試す

はじめに iOS で Zip を展開する - daisuke-t-jp's blog で Zip アーカイブの展開(UnZip)の方法を書いたので、これを発展させて Zip をサーバからダウンロード アプリ内で Zip を展開 展開したデータをアプリで使用 というユースケースを試したので、それ…

iOS で Zip を展開する

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

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…