Skip to content

Instantly share code, notes, and snippets.

View kitasuke's full-sized avatar

Yusuke Kita kitasuke

View GitHub Profile
import Foundation
protocol UserDefaultsStorable {
associatedtype UserDefaultsKey: RawRepresentable
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Bool?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int64?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Double?
static func userDefaultsValue(forKey key: UserDefaultsKey) -> String?
import UIKit
protocol StoryboardInstantiable {
static var storyboardName: String { get }
static var storyboardIdentifier: String { get }
}
extension StoryboardInstantiable where Self: UIViewController {
static var storyboardName: String { return String(describing: self) }
static var storyboardIdentifier: String { return String(describing: self) }

Protocol BuffersをAPIKitとKituraで試してみる

この記事では、Protocol BuffersをSwiftでどう使うかサンプルアプリを使って説明します。Protocol Buffersの詳細はこちらの記事を先に読むと大体のイメージが掴めると思います。個人的には Protocol Buffersのメリットは型安全に書けて高速な通信が実現する ことだと思います。

サンプルアプリ

今回のサンプルアプリは、クライアント側はAPIKit、サーバ側はKituraで 通信処理を実装します。サンプルアプリはGitHubで公開しているので、こちらからダウンロードして試してみてください。

また、URLSessionで実装したサンプルアプリもこちらに用意しました。URLSessionだけでも楽に実装できるので、こちらも参考にしてみてください。

Protocol Buffersで高速な通信を型安全に実現する

最近AppleがProtocol Buffersの公式プラグインをGitHubに公開して話題になったので、実際に使ってみました。APIの通信が速くなったり、型安全に通信処理を書ける など、メリットが多いと感じたので簡単に紹介します。

他の事例だと、iOSオールスターズ2で発表された「これから始めるProtocol Buffers導入」が非常に参考になると思うので併せて読んでみてください。

この記事ではProtocol Buffersの概要について書いています。別途こちらの記事で使い方について サンプルを使って説明している ので、併せて読んでみてください。

Protocol Buffersとは

概要

iOS9からApp Transport Security(ATS)が追加されました。 ATSとは安全なネットワーク接続を実現するための機能であり、Appleの要件を満たしていない場合は接続失敗という扱いになります。

対応方法

対象となるのは、自社内サーバ、WebView経由、サードパーティライブラリ(SNS、広告、分析など)だと思います。 ATS自体を無効にするのはあまり良いやり方ではないので、これらのドメインをATSの例外に設定するのが一般的なやり方だと思います。

設定方法

設定方法はInfo.plistに指定の情報をセットするだけです。 しかし、プロジェクトのTargetが多かったりConfigurationによって設定を分けたい場合には、Info.plistを個別に用意して管理する必要がありますが、無駄にInfo.plistファイルが増えるので良い方法ではないと思います。

@kitasuke
kitasuke / StringExtension.swift
Created August 24, 2015 03:19
String extension in Swift for Xcode beta5
extension String {
var lastPathComponent: String {
get {
return (self as NSString).lastPathComponent
}
}
var pathExtension: String {
@kitasuke
kitasuke / ObjectMapping
Created January 17, 2015 08:31
Object Mapping with RestKit not using URL connection
NSHTTPURLResponse *httpurlResponse = [[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"/hoge/"]
statusCode:200
HTTPVersion:nil
headerFields:@{}];
RKResponseMapperOperation *responseMapperOperation = [[RKResponseMapperOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"/hoge/"]]
response:httpurlResponse
data:[NSData new]
responseDescriptors:@[
[RKResponseDescriptor responseDescriptorWithMapping:responseMapping
@kitasuke
kitasuke / UITest.md
Last active March 18, 2021 06:35
iOSにおけるUIテスト
@kitasuke
kitasuke / KIF.md
Last active December 28, 2015 00:52
KIF導入

KIF iOS Integration Testing Framework

特徴

導入方法

テスト用ターゲットの追加

テスト用のターゲットを作成する必要があります。 ユニットテストを有効にした場合は、MyApplication_Testsという名前のターゲットが既に存在しているかもしれません。 その場合に、もしそのターゲットをユニットテスト用に使用しないのであれば、そのターゲットをKIF用に使用しても構いません。 それ以外の場合は、以下の手順で新規にターゲットを作成してください。

  1. Xcode上でプロジェクトやターゲット選択欄から、ターゲットの追加を押す