A Day In The Life

とあるプログラマの備忘録

swift

面倒な課金処理をRx化するRxStoreKitを作りました

StoreKit の SKProductsRequest と SKPaymentQueue を Rx化して課金処理を簡単に書けるライブラリを GitHub にて公開しました。 github.com RxStoreKit を使うと課金処理を以下のような感じで書けます。 let productRequest = SKProductsRequest(productIden…

Swift3でMIDIファイルをパースする方法

Swift3 で MIDI ファイルのパースをしようとしたら意外に方法が見つからなくて苦労したのでメモです。 MusicEventIteratorGetEventInfo 関数で取得したデータを MIDINoteMessage オブジェクトに変換する方法がわからなくてハマりました。 import AudioToolbo…

ReSwiftのステートをRxSwiftを使って監視する

普段から RxSwift(Reactive ExtensionsのSwift実装)と ReSwift(ReduxのSwift実装)を使っています。RxSwift を通信系の処理だったりデリゲートの処理(例えば StoreKit とか CoreBluetooth)だったりに使って、ReSwiftをアプリ全体で管理しなきゃいけないデータ…

enum駆使してKeychainをUserDefaultsっぽく使う

以前、こちらの記事で enum(列挙型)を使って UserDefaults のキー名を管理する方法について紹介しました。この方法を応用(ってほど大袈裟なもんじゃないけど)して Keychain にセキュアなデータを保存してみたいと思います。 Keychainって何? API アクセスに…

Realmを前提としたリポジトリパターンの実装

いろんなところで Realm が良いと聞くようになり最近やっと Realm を使い始めました。実際 Realm を使ってみると予想していたよりも使い勝手がよく Core Data には戻れそうにないです…。ソースコードは Swift3 に対応しています。 リポジトリパターンの実装 …

Swift3で追加されたData構造体の使い方レシピ

Swift3 から Data 構造体が追加され Objective-C 時代の NSData クラスはお役御免になりました。この Data 構造体は NSData の置き換えなので、できることに違いはほとんどありません。ただしメソッドに互換性がないため NSData を使ったコードを Data に置…

Swiftのプロトコルに@objcなしでオプショナルメソッドを定義する

Swift で プロトコルを定義するときにオプショナルなメソッドを定義したい時ってありますよね。そんなときに使える小技です。 @objcを指定するよく知られた方法 Swift のプロトコルは Objective-C と違ってオプショナルメソッドを定義することができません。…

UserDefaultsのキー名をenumで管理する

NSUserDefaults あらため UserDefaults のキーを enum で管理する方法(Swift3対応)です。UserDefaults のキーを enum で管理する方法はいくつか見つけたのですが Swift3 に対応しているものが見つからなかったので書きました。 キーに文字列リテラルを直接指…

AVAudioSequencerでMIDIファイルを再生して曲の終わりにコールバックを設定する方法

AVAudioSequencerでMIDIファイルを再生して曲の終わりにコールバックを設定する方法です。AVAudioSequencer 自体にそのようなコールバックがないので CoreMIDI のコールバックを使います。CoreMIDIはSwiftのブロックではなくてC言語の関数ポインタでコールバ…

今から始める Swift 3 対策

Xcode 7.3 から Swiftのバージョンが 2.2 になりました。このバージョンから Swift 3 に向けた deprecated(非推奨)警告が出るようになったのでその対策です。 '++' is deprecated: it will be removed in Swift 3 結構話題になったインクリメント(デクリメン…

自作ライブラリをBitcodeに対応させる

Swiftで開発した自作ライブラリを Bitcode に対応させるためには Xcode の Build Settings 項目に以下を設定する必要があります。 Enable BitcodeをYesにセット Other C Flagsに-fembed-bitcodeをセット(Other C++ Flagsには自動でセットされます) User-Defi…

SpriteKitでUIScrollView的なスクロール処理を実装する

SpriteKit でゲームやアプリを開発していると UI 系の部品がなくて困ることがあります。SpriteKit にはラベルしかなくボタンすらないです。ましてやスクロールビューなんて贅沢なものは当然ありません。現在開発しているアプリでどうしても必要になったので…

6年前に開発したObjcのアプリをSwiftで書き直してみた

約6年前に LinkedWord という英英辞書アプリを開発しました。リリースからしばらく(2年ぐらい、時期的には iOS4とか5の時代)は機能アップデートやバグ修正をしていたのですが、本の執筆やら他のアプリの開発やらで忙しくなりしばらく放置してました。その間…

【Swift1.2対応】プロの力が身につく iPhone/iPadアプリケーション開発の教科書 Swift対応版

iOS が8.3にバージョンアップしたのに伴い Xcode が6.3に Swift が1.2にバージョンアップされました。Swift 1.2ではシンタックスエラーとなりビルドできなくなるコードがあります。本書で記載しているコードだけでなく、サンプルの自動生成コードにも変更が…

【正誤表】プロの力が身につく iPhone/iPadアプリケーション開発の教科書 Swift対応版

「プロの力が身につく iPhone/iPadアプリケーション開発の教科書」をお買い上げの皆様、ありがとうございます。 読者様からご指摘を頂き、誤りがありましたので訂正させていただきます。 2-3テーブルビューとコレクションビュー 148ページ、プログラム2つ目…

プロの力が身につく iPhone/iPadアプリケーション開発の教科書が発売されました

1月17日に「プロの力を身につける iPhone/iPadアプリケーション開発の教科書」の改訂版が発売されました。改訂内容は以下の通りです。 iOS 8.1とXcode 6.1に対応 内容をすべて見直し文章を大幅に修正 新プログラミング言語 Swift に対応 よろしくお願いしま…